From eb26afbcb38032ff0c4305c73845f7c298afe721 Mon Sep 17 00:00:00 2001 From: gholak tala Date: Sat, 24 Jan 2026 14:03:11 +0000 Subject: [PATCH] main --- .gitattrebutes | 10 + .gitignore | 15 + .hataccess | 28 + .styleci.yml | 14 + Dockerfile | 42 + app.js | 9 + app/Console/Commands/Price.php | 64 + app/Console/Kernel.php | 36 + app/Console/error_log | 4 + app/DB/Te/ExcelCollection.php | 59 + app/DB/Te/Filter.php | 303 + app/DB/Te/QuerySelector.php | 63 + app/DB/Te/Scope.php | 40 + app/DB/Te/Search.php | 71 + app/DB/Te/TableEngine.php | 217 + app/DB/Te/TableEngineInput.php | 160 + app/DB/Te/assets/font.css | 15 + app/DB/Te/assets/print.css | 1 + app/DB/Te/assets/print.less | 64 + app/DB/Te/error_log | 4 + app/DB/Te/maptable.example.php | 17 + app/DB/Te/print.blade.php | 61 + app/DB/Te/query.example.php | 34 + app/DB/Te/views/print.blade.php | 66 + app/Exceptions/Handler.php | 41 + .../Admin/BankAccountController.php | 34 + .../Controllers/Admin/ConstController.php | 22 + .../Controllers/Admin/CustomerController.php | 257 + .../Controllers/Admin/DashboardController.php | 306 + .../Controllers/Admin/MassageController.php | 234 + .../Controllers/Admin/OrderController.php | 30 + .../Controllers/Admin/PriceController.php | 58 + .../Controllers/Admin/ProductController.php | 246 + .../Controllers/Admin/TahesabController.php | 220 + app/Http/Controllers/Admin/UserController.php | 46 + .../Controllers/Admin/WalletController.php | 349 + app/Http/Controllers/Auth/AuthController.php | 168 + app/Http/Controllers/Controller.php | 161 + .../Customer/AddressController.php | 19 + .../Customer/CustomerController.php | 267 + .../Controllers/Customer/FundController.php | 97 + .../Controllers/Customer/OrderController.php | 125 + .../Customer/PriceTriggerController.php | 33 + .../Customer/ProductController.php | 117 + .../Controllers/Customer/WalletController.php | 319 + .../Controllers/Finance/FinanceController.php | 230 + .../Single/BankAccountController.php | 55 + .../Single/SingleOrderController.php | 541 ++ app/Http/Controllers/Site/CityController.php | 23 + .../Controllers/Site/ReportController.php | 248 + .../Site/myNotificationController.php | 26 + app/Http/Controllers/SuperController.php | 166 + app/Http/Controllers/pay/PaymanController.php | 166 + .../Controllers/pay/paypingController.php | 179 + app/Http/Kernel.php | 69 + app/Http/Middleware/Authenticate.php | 21 + app/Http/Middleware/EncryptCookies.php | 17 + .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 32 + app/Http/Middleware/TrimStrings.php | 19 + app/Http/Middleware/TrustHosts.php | 20 + app/Http/Middleware/TrustProxies.php | 28 + app/Http/Middleware/ValidationMiddleware.php | 49 + app/Http/Middleware/VerifyCsrfToken.php | 17 + app/Http/Middleware/error_log | 16 + app/Http/error_log | 4 + app/Jobs/CheckOrder.php | 53 + app/Jobs/error_log | 12 + app/Mail/Cnt.php | 19 + app/Mail/YourMailableClass.php | 49 + app/Models/Address.php | 26 + app/Models/BankAccount.php | 29 + app/Models/City.php | 32 + app/Models/Cnt.php | 21 + app/Models/Customer.php | 123 + app/Models/Fund.php | 22 + app/Models/Log.php | 24 + app/Models/Message.php | 34 + app/Models/Order.php | 64 + app/Models/Price.php | 24 + app/Models/PriceCandle.php | 18 + app/Models/PriceTrigger.php | 27 + app/Models/Product.php | 121 + app/Models/Selector.php | 260 + app/Models/Setting.php | 21 + app/Models/Tahesab.php | 56 + app/Models/TransactionsAdmin.php | 63 + app/Models/User.php | 83 + app/Models/Withdraw.php | 1 + app/Models/error_log | 168 + app/Providers/AppServiceProvider.php | 28 + app/Providers/AuthServiceProvider.php | 30 + app/Providers/BroadcastServiceProvider.php | 21 + app/Providers/EventServiceProvider.php | 32 + app/Providers/RouteServiceProvider.php | 75 + app/Providers/error_log | 20 + app/Services/NotificationService.php | 29 + app/pusher/CHANGELOG.md | 256 + app/pusher/composer.json | 36 + app/pusher/send_notification.php | 16 + app/pusher/src/ApiErrorException.php | 21 + app/pusher/src/Pusher.php | 1212 +++ app/pusher/src/PusherCrypto.php | 230 + app/pusher/src/PusherException.php | 9 + app/pusher/src/PusherInstance.php | 32 + app/pusher/src/PusherInterface.php | 257 + app/pusher/src/Webhook.php | 27 + artisan | 53 + bootstrap/app.php | 55 + bootstrap/cache/.gitignore | 2 + bootstrap/error_log | 56 + composer.json | 67 + composer.lock | 8299 +++++++++++++++++ config/add_sell_price.php | 5 + config/app.php | 236 + config/auth.php | 125 + config/broadcasting.php | 64 + config/cache.php | 110 + config/company.php | 4 + config/companyLink.php | 5 + config/cors.php | 34 + config/database.php | 147 + config/error_log | 484 + config/fee.php | 8 + config/filesystems.php | 73 + config/hashing.php | 52 + config/jwt.php | 304 + config/logging.php | 120 + config/mail.php | 118 + config/message.php | 10 + config/queue.php | 93 + config/sanctum.php | 65 + config/services.php | 33 + config/session.php | 201 + config/validation.php | 35 + config/view.php | 36 + database/.gitignore | 1 + database/factories/UserFactory.php | 39 + database/factories/error_log | 16 + .../2014_10_12_000000_create_users_table.php | 43 + ...12_100000_create_password_resets_table.php | 32 + ..._08_19_000000_create_failed_jobs_table.php | 36 + ...01_create_personal_access_tokens_table.php | 36 + ...23_11_30_071902_create_customers_table.php | 55 + .../2023_12_09_183053_create_const.php | 34 + .../2023_12_09_194437_create_orders_table.php | 46 + .../2023_12_12_183319_create_prices_table.php | 35 + ...2_12_183618_create_price_candles_table.php | 36 + .../2023_12_14_115025_create_logs_table.php | 34 + .../2023_12_14_144824_create_funds_table.php | 35 + ...23_12_24_062013_create_withdraws_table.php | 38 + ...1_19_131402_create_bank_accounts_table.php | 38 + database/migrations/error_log | 116 + database/seeders/DatabaseSeeder.php | 18 + docker-compose.yml | 51 + error_log | 94 + favicon.ico | 0 index.php | 54 + package-lock.json | 6881 ++++++++++++++ package.json | 18 + packages/rooyesh/wallet/composer.json | 19 + packages/rooyesh/wallet/composer.json.bak | 20 + packages/rooyesh/wallet/index.php | 5 + packages/rooyesh/wallet/index.php.bak | 0 .../LastTransactionValidateFailed.php | 9 + .../src/Exceptions/NotEnoughCashBalance.php | 9 + .../src/Exceptions/NotEnoughCreditBalance.php | 9 + .../src/Exceptions/WalletValidateFailed.php | 21 + .../wallet/src/WalletServiceProvider.php | 18 + .../src/interfaces/TransactionInterface.php | 118 + .../wallet/src/interfaces/WalletInterface.php | 73 + ...2_02_065938_create_wallet_moudle_table.php | 73 + .../rooyesh/wallet/src/models/Transaction.php | 55 + .../wallet/src/models/TransactionMeta.php | 13 + packages/rooyesh/wallet/src/models/Wallet.php | 27 + phpunit.xml | 31 + public/.htaccess | 28 + public/error_log | 87 + public/favicon.ico | 0 public/index.php | 54 + public/robots.txt | 2 + resources/css/app.css | 0 resources/js/app.js | 10 + resources/js/bootstrap.js | 28 + resources/lang/en/auth.php | 20 + resources/lang/en/pagination.php | 19 + resources/lang/en/passwords.php | 22 + resources/lang/en/validation.php | 132 + resources/lang/en/validationOrginal.php | 163 + resources/views/app.blade.php | 701 ++ .../emails/transaction_notification.blade.php | 61 + .../views/emails/your_template.blade.php | 89 + resources/views/notification.blade.php | 42 + .../views/showTransactionReport.blade.php | 374 + resources/views/welcome.blade.php | 132 + robots.txt | 2 + routes/admin.php | 137 + routes/api.php | 34 + routes/auth.php | 11 + routes/channels.php | 18 + routes/console.php | 19 + routes/customer.php | 99 + routes/error_log | 344 + routes/web.php | 334 + server.php | 21 + storage/app/.gitignore | 3 + storage/app/public/.gitignore | 2 + storage/framework/.gitignore | 9 + storage/framework/cache/.gitignore | 3 + storage/framework/cache/data/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + storage/web.php | 128 + tests/CreatesApplication.php | 22 + tests/Feature/ExampleTest.php | 21 + tests/Feature/error_log | 24 + tests/TestCase.php | 10 + tests/Unit/ExampleTest.php | 18 + tests/Unit/error_log | 16 + tests/error_log | 36 + tmp/restart.txt | 0 webpack.mix.js | 17 + 224 files changed, 32652 insertions(+) create mode 100755 .gitattrebutes create mode 100755 .gitignore create mode 100755 .hataccess create mode 100755 .styleci.yml create mode 100755 Dockerfile create mode 100755 app.js create mode 100755 app/Console/Commands/Price.php create mode 100755 app/Console/Kernel.php create mode 100755 app/Console/error_log create mode 100755 app/DB/Te/ExcelCollection.php create mode 100755 app/DB/Te/Filter.php create mode 100755 app/DB/Te/QuerySelector.php create mode 100755 app/DB/Te/Scope.php create mode 100755 app/DB/Te/Search.php create mode 100755 app/DB/Te/TableEngine.php create mode 100755 app/DB/Te/TableEngineInput.php create mode 100755 app/DB/Te/assets/font.css create mode 100755 app/DB/Te/assets/print.css create mode 100755 app/DB/Te/assets/print.less create mode 100755 app/DB/Te/error_log create mode 100755 app/DB/Te/maptable.example.php create mode 100755 app/DB/Te/print.blade.php create mode 100755 app/DB/Te/query.example.php create mode 100755 app/DB/Te/views/print.blade.php create mode 100755 app/Exceptions/Handler.php create mode 100755 app/Http/Controllers/Admin/BankAccountController.php create mode 100755 app/Http/Controllers/Admin/ConstController.php create mode 100755 app/Http/Controllers/Admin/CustomerController.php create mode 100755 app/Http/Controllers/Admin/DashboardController.php create mode 100755 app/Http/Controllers/Admin/MassageController.php create mode 100755 app/Http/Controllers/Admin/OrderController.php create mode 100755 app/Http/Controllers/Admin/PriceController.php create mode 100755 app/Http/Controllers/Admin/ProductController.php create mode 100755 app/Http/Controllers/Admin/TahesabController.php create mode 100755 app/Http/Controllers/Admin/UserController.php create mode 100755 app/Http/Controllers/Admin/WalletController.php create mode 100755 app/Http/Controllers/Auth/AuthController.php create mode 100755 app/Http/Controllers/Controller.php create mode 100755 app/Http/Controllers/Customer/AddressController.php create mode 100755 app/Http/Controllers/Customer/CustomerController.php create mode 100755 app/Http/Controllers/Customer/FundController.php create mode 100755 app/Http/Controllers/Customer/OrderController.php create mode 100755 app/Http/Controllers/Customer/PriceTriggerController.php create mode 100755 app/Http/Controllers/Customer/ProductController.php create mode 100755 app/Http/Controllers/Customer/WalletController.php create mode 100755 app/Http/Controllers/Finance/FinanceController.php create mode 100755 app/Http/Controllers/Single/BankAccountController.php create mode 100755 app/Http/Controllers/Single/SingleOrderController.php create mode 100755 app/Http/Controllers/Site/CityController.php create mode 100755 app/Http/Controllers/Site/ReportController.php create mode 100755 app/Http/Controllers/Site/myNotificationController.php create mode 100755 app/Http/Controllers/SuperController.php create mode 100755 app/Http/Controllers/pay/PaymanController.php create mode 100755 app/Http/Controllers/pay/paypingController.php create mode 100755 app/Http/Kernel.php create mode 100755 app/Http/Middleware/Authenticate.php create mode 100755 app/Http/Middleware/EncryptCookies.php create mode 100755 app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100755 app/Http/Middleware/RedirectIfAuthenticated.php create mode 100755 app/Http/Middleware/TrimStrings.php create mode 100755 app/Http/Middleware/TrustHosts.php create mode 100755 app/Http/Middleware/TrustProxies.php create mode 100755 app/Http/Middleware/ValidationMiddleware.php create mode 100755 app/Http/Middleware/VerifyCsrfToken.php create mode 100755 app/Http/Middleware/error_log create mode 100755 app/Http/error_log create mode 100755 app/Jobs/CheckOrder.php create mode 100755 app/Jobs/error_log create mode 100755 app/Mail/Cnt.php create mode 100755 app/Mail/YourMailableClass.php create mode 100755 app/Models/Address.php create mode 100755 app/Models/BankAccount.php create mode 100755 app/Models/City.php create mode 100755 app/Models/Cnt.php create mode 100755 app/Models/Customer.php create mode 100755 app/Models/Fund.php create mode 100755 app/Models/Log.php create mode 100755 app/Models/Message.php create mode 100755 app/Models/Order.php create mode 100755 app/Models/Price.php create mode 100755 app/Models/PriceCandle.php create mode 100755 app/Models/PriceTrigger.php create mode 100755 app/Models/Product.php create mode 100755 app/Models/Selector.php create mode 100755 app/Models/Setting.php create mode 100755 app/Models/Tahesab.php create mode 100755 app/Models/TransactionsAdmin.php create mode 100755 app/Models/User.php create mode 100755 app/Models/Withdraw.php create mode 100755 app/Models/error_log create mode 100755 app/Providers/AppServiceProvider.php create mode 100755 app/Providers/AuthServiceProvider.php create mode 100755 app/Providers/BroadcastServiceProvider.php create mode 100755 app/Providers/EventServiceProvider.php create mode 100755 app/Providers/RouteServiceProvider.php create mode 100755 app/Providers/error_log create mode 100755 app/Services/NotificationService.php create mode 100755 app/pusher/CHANGELOG.md create mode 100755 app/pusher/composer.json create mode 100755 app/pusher/send_notification.php create mode 100755 app/pusher/src/ApiErrorException.php create mode 100755 app/pusher/src/Pusher.php create mode 100755 app/pusher/src/PusherCrypto.php create mode 100755 app/pusher/src/PusherException.php create mode 100755 app/pusher/src/PusherInstance.php create mode 100755 app/pusher/src/PusherInterface.php create mode 100755 app/pusher/src/Webhook.php create mode 100755 artisan create mode 100755 bootstrap/app.php create mode 100755 bootstrap/cache/.gitignore create mode 100755 bootstrap/error_log create mode 100755 composer.json create mode 100755 composer.lock create mode 100755 config/add_sell_price.php create mode 100755 config/app.php create mode 100755 config/auth.php create mode 100755 config/broadcasting.php create mode 100755 config/cache.php create mode 100755 config/company.php create mode 100755 config/companyLink.php create mode 100755 config/cors.php create mode 100755 config/database.php create mode 100755 config/error_log create mode 100755 config/fee.php create mode 100755 config/filesystems.php create mode 100755 config/hashing.php create mode 100755 config/jwt.php create mode 100755 config/logging.php create mode 100755 config/mail.php create mode 100755 config/message.php create mode 100755 config/queue.php create mode 100755 config/sanctum.php create mode 100755 config/services.php create mode 100755 config/session.php create mode 100755 config/validation.php create mode 100755 config/view.php create mode 100755 database/.gitignore create mode 100755 database/factories/UserFactory.php create mode 100755 database/factories/error_log create mode 100755 database/migrations/2014_10_12_000000_create_users_table.php create mode 100755 database/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100755 database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100755 database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php create mode 100755 database/migrations/2023_11_30_071902_create_customers_table.php create mode 100755 database/migrations/2023_12_09_183053_create_const.php create mode 100755 database/migrations/2023_12_09_194437_create_orders_table.php create mode 100755 database/migrations/2023_12_12_183319_create_prices_table.php create mode 100755 database/migrations/2023_12_12_183618_create_price_candles_table.php create mode 100755 database/migrations/2023_12_14_115025_create_logs_table.php create mode 100755 database/migrations/2023_12_14_144824_create_funds_table.php create mode 100755 database/migrations/2023_12_24_062013_create_withdraws_table.php create mode 100755 database/migrations/2024_01_19_131402_create_bank_accounts_table.php create mode 100755 database/migrations/error_log create mode 100755 database/seeders/DatabaseSeeder.php create mode 100755 docker-compose.yml create mode 100755 error_log create mode 100755 favicon.ico create mode 100755 index.php create mode 100755 package-lock.json create mode 100755 package.json create mode 100755 packages/rooyesh/wallet/composer.json create mode 100755 packages/rooyesh/wallet/composer.json.bak create mode 100755 packages/rooyesh/wallet/index.php create mode 100755 packages/rooyesh/wallet/index.php.bak create mode 100755 packages/rooyesh/wallet/src/Exceptions/LastTransactionValidateFailed.php create mode 100755 packages/rooyesh/wallet/src/Exceptions/NotEnoughCashBalance.php create mode 100755 packages/rooyesh/wallet/src/Exceptions/NotEnoughCreditBalance.php create mode 100755 packages/rooyesh/wallet/src/Exceptions/WalletValidateFailed.php create mode 100755 packages/rooyesh/wallet/src/WalletServiceProvider.php create mode 100755 packages/rooyesh/wallet/src/interfaces/TransactionInterface.php create mode 100755 packages/rooyesh/wallet/src/interfaces/WalletInterface.php create mode 100755 packages/rooyesh/wallet/src/migrations/2021_12_02_065938_create_wallet_moudle_table.php create mode 100755 packages/rooyesh/wallet/src/models/Transaction.php create mode 100755 packages/rooyesh/wallet/src/models/TransactionMeta.php create mode 100755 packages/rooyesh/wallet/src/models/Wallet.php create mode 100755 phpunit.xml create mode 100755 public/.htaccess create mode 100755 public/error_log create mode 100755 public/favicon.ico create mode 100755 public/index.php create mode 100755 public/robots.txt create mode 100755 resources/css/app.css create mode 100755 resources/js/app.js create mode 100755 resources/js/bootstrap.js create mode 100755 resources/lang/en/auth.php create mode 100755 resources/lang/en/pagination.php create mode 100755 resources/lang/en/passwords.php create mode 100755 resources/lang/en/validation.php create mode 100755 resources/lang/en/validationOrginal.php create mode 100755 resources/views/app.blade.php create mode 100755 resources/views/emails/transaction_notification.blade.php create mode 100755 resources/views/emails/your_template.blade.php create mode 100755 resources/views/notification.blade.php create mode 100755 resources/views/showTransactionReport.blade.php create mode 100755 resources/views/welcome.blade.php create mode 100755 robots.txt create mode 100755 routes/admin.php create mode 100755 routes/api.php create mode 100755 routes/auth.php create mode 100755 routes/channels.php create mode 100755 routes/console.php create mode 100755 routes/customer.php create mode 100755 routes/error_log create mode 100755 routes/web.php create mode 100755 server.php create mode 100755 storage/app/.gitignore create mode 100755 storage/app/public/.gitignore create mode 100755 storage/framework/.gitignore create mode 100755 storage/framework/cache/.gitignore create mode 100755 storage/framework/cache/data/.gitignore create mode 100755 storage/framework/sessions/.gitignore create mode 100755 storage/framework/testing/.gitignore create mode 100755 storage/framework/views/.gitignore create mode 100755 storage/logs/.gitignore create mode 100755 storage/web.php create mode 100755 tests/CreatesApplication.php create mode 100755 tests/Feature/ExampleTest.php create mode 100755 tests/Feature/error_log create mode 100755 tests/TestCase.php create mode 100755 tests/Unit/ExampleTest.php create mode 100755 tests/Unit/error_log create mode 100755 tests/error_log create mode 100755 tmp/restart.txt create mode 100755 webpack.mix.js diff --git a/.gitattrebutes b/.gitattrebutes new file mode 100755 index 0000000..642b94f --- /dev/null +++ b/.gitattrebutes @@ -0,0 +1,10 @@ +* text=auto + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..4500b74 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +/node_modules +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.phpunit.result.cache +docker-compose.override.yml +Homestead.json +Homestead.yaml +npm-debug.log +yarn-error.log +/.idea +/.vscode diff --git a/.hataccess b/.hataccess new file mode 100755 index 0000000..d89ce93 --- /dev/null +++ b/.hataccess @@ -0,0 +1,28 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + + +# php -- BEGIN cPanel-generated handler, do not edit +# Set the “ea-php82” package as the default “PHP” programming language. + + AddHandler application/x-httpd-ea-php82___lsphp .php .php8 .phtml + +# php -- END cPanel-generated handler, do not edit diff --git a/.styleci.yml b/.styleci.yml new file mode 100755 index 0000000..ef8f10d --- /dev/null +++ b/.styleci.yml @@ -0,0 +1,14 @@ +php: + preset: laravel + version: 8 + disabled: + - no_unused_imports + finder: + not-name: + - index.php + - server.php +js: + finder: + not-name: + - webpack.mix.js +css: true diff --git a/Dockerfile b/Dockerfile new file mode 100755 index 0000000..62ea2ae --- /dev/null +++ b/Dockerfile @@ -0,0 +1,42 @@ +# Use the official PHP image with Apache +FROM php:8.1-apache + + + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + git \ + unzip \ + libpng-dev \ + libjpeg-dev \ + libfreetype6-dev \ + zlib1g-dev \ + libzip-dev \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install gd \ + && docker-php-ext-install pdo_mysql \ + && docker-php-ext-install zip + +# Enable Apache mod_rewrite +RUN a2enmod rewrite + +# Set working directory +WORKDIR /var/www/html + +# Copy existing application directory contents +COPY . /var/www/html + +# Install Composer +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + +# Install PHP dependencies +RUN composer install --no-dev --optimize-autoloader + +# Set permissions +RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache + +# Expose port 80 +EXPOSE 80 + +# Start Apache server +CMD ["apache2-foreground"] diff --git a/app.js b/app.js new file mode 100755 index 0000000..be947d5 --- /dev/null +++ b/app.js @@ -0,0 +1,9 @@ +var http = require('http'); +var server = http.createServer(function(req, res) { + res.writeHead(200, {'Content-Type': 'text/plain'}); + var message = 'It works!\n', + version = 'NodeJS ' + process.versions.node + '\n', + response = [message, version].join('\n'); + res.end(response); +}); +server.listen(); diff --git a/app/Console/Commands/Price.php b/app/Console/Commands/Price.php new file mode 100755 index 0000000..dd50c5d --- /dev/null +++ b/app/Console/Commands/Price.php @@ -0,0 +1,64 @@ + 'application/json', + 'Authorization' => 'Bearer ohxsrbjagqvbt0glaygt' + ])->get('https://studio.persianapi.com/index.php/web-service/common/gold-currency-coin?format=json&limit=30&page=1') + ->json(); + $list = []; + if(isset($service['result'])){ + foreach ($service['result'] as $item){ + if ($item['key']== 137120 || $item['key']==137119) { + $list[] = $item; + if ($item['key']== 137120){ + (new PriceController())->store(new Request(["price"=>$item['price']])); + } + } + } + Cnt::where('key','price')->update(['value_json'=>$list]); + } + + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100755 index 0000000..05992e2 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,36 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Console/error_log b/app/Console/error_log new file mode 100755 index 0000000..713a8a2 --- /dev/null +++ b/app/Console/error_log @@ -0,0 +1,4 @@ +[10-Jun-2024 08:45:45 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Console\Kernel' not found in /home/montechi/public_html/server_app/app/Console/Kernel.php:9 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Console/Kernel.php on line 9 diff --git a/app/DB/Te/ExcelCollection.php b/app/DB/Te/ExcelCollection.php new file mode 100755 index 0000000..a7b972b --- /dev/null +++ b/app/DB/Te/ExcelCollection.php @@ -0,0 +1,59 @@ +export = $export; + $this->show = array_keys($cols); + $this->head = array_values($cols); + } + + public function collection() + { + + return $this->export->map(function ($value, $key) { + + $exp = []; + $all = $value->toArray(); + foreach ($this->show as $val) { + $exp[$val] = Arr::get($all, $val); + } + return collect($exp); + }); + } + + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + }, + ]; + } + + /** + * @inheritDoc + */ + public function headings(): array + { + return $this->head; + } +} + diff --git a/app/DB/Te/Filter.php b/app/DB/Te/Filter.php new file mode 100755 index 0000000..9f4b61c --- /dev/null +++ b/app/DB/Te/Filter.php @@ -0,0 +1,303 @@ +query = $query; + $this->isFirst = $isFirst; + + foreach ($data as $key => $dt) { + $this->{$key} = $dt; + } + if (isset($this->key) && starts_with($this->key, 'array')) { + $this->isArrayJson = true; + $this->key = str_replace_first('array@', '', $this->key); + } + + if (isset($this->key) && starts_with($this->key, 'object@')) { + $this->key = str_replace_first('object@', '', $this->key); + $this->key = str_replace('.', '->', $this->key); + } +// $this->field = $query->getModel()->convertColumns($this->field); + $this->type = $data['type'] ?? 'text'; + $this->field = $data['field'] ?? null; + $this->master = $data['master'] ?? null; + $this->op = $data['op'] ?? null; + $this->crt = $data['crt'] ?? null; + $this->field = explode('.', $this->field); + if (!is_null($this->master)) { + $this->master = explode('.', $this->master); + } + $this->initFilter(); + } + + public static function init($query, $data, $isFirst) + { + + return new Filter($query, $data, $isFirst); + } + + + public function getWhereHas() + { + if ($this->cr == 'or' && !$this->isFirst) return 'orWhereHas'; + return 'whereHas'; + } + + public function run() + { + + if (sizeof($this->getNativeField()) > 1 && !Str::startsWith($this->getField(0), 'meta')) { + $this->query->{$this->getWhereHas()}($this->snakeToCamelCase($this->getField(0)), function ($q) { + if (sizeof($this->getNativeField()) > 2) { + $q->whereHas($this->getField(1), function ($q2) { + return $q2->{$this->getFn()}(...$this->args); + }); + } else { + return $q->{$this->getFn()}(...$this->args); + } + }); + } else { + $this->query->{$this->getFn()}(...$this->args); + } + + + } + + function snakeToCamelCase($string, $capitalizeFirstCharacter = false) + { + + $str = str_replace('_', '', ucwords($string, '_')); + + if (!$capitalizeFirstCharacter) { + $str = lcfirst($str); + } + + return $str; + } + + + public + function getOpt() + { + return [ + 'eq' => ($this->nl == 0) ? '=' : '<>', + 'gt' => ($this->nl == 0) ? '<' : '>', + 'lt' => ($this->nl == 0) ? '>' : '<', + 'bt' => ($this->nl == 0) ? '<>' : '=' + ][$this->opt]; + } + + public function dashesToCamelCase($string, $capitalizeFirstCharacter = false) + { + + $str = str_replace('-', '', ucwords($string, '-')); + + if (!$capitalizeFirstCharacter) { + $str = lcfirst($str); + } + + return $str; + } + + public function getFn() + { + return $this->dashesToCamelCase(join('-', $this->fn)); + } + + + public function getField($index= null) + { + if(is_null($index)) + return last($this->getNativeField()); + return $this->getNativeField()[$index]; + } + + + public function getNativeField() + { + if (is_array($this->master)) { + return $this->master; + } + return $this->field; + } + + + public function autoCorrectFieldName() + { + $map = config('maptable.convert_fields', []); + if (Arr::has($map, $this->getNativeField())) { + + $this->getNativeField()[sizeof($this->getNativeField()) - 1] = $map[Arr::last($this->getNativeField())]; + } + + + $dc = config('maptable.convert_date', []); + if ($this->type == 'date' && in_array($this->getField(), $dc)) { + $this->value = Verta::parse($this->value)->datetime(); + } + } + + public function initFilter() + { + $this->autoCorrectFieldName(); + + if ($this->isArrayJson) { + return ['and' => 'whereRaw', 'or' => 'orWhereRaw'][$this->crt]; + } + if (is_null($this->args)) { + $this->args = []; + } + + switch ($this->type) { + case "date": + $this->fn[] = 'date'; + break; + } + + switch ($this->op) { + case "gt" : + $this->args = [$this->getField(), '>', $this->value]; + break; + case "lt" : + $this->args = [$this->getField(), '<', $this->value]; + break; + case "eq" : + $this->args = [$this->getField(), $this->value]; + break; + case "gte" : + $this->args = [$this->getField(), '>=', $this->value]; + break; + case "lte" : + $this->args = [$this->getField(), '<=', $this->value]; + break; + case "bet" : + $this->fn[] = 'between'; + break; + case "not" : + $this->args = [$this->getField(), '<>', $this->value]; + break; + case "nn" : + $this->fn[] = 'not'; + $this->fn[] = 'null'; + $this->args = [$this->getField()]; + break; + case "null" : + $this->fn[] = 'null'; +// if (sizeof($this->field) > 1) { +// +// } else { +// +// } + $this->args = [$this->getField()]; + break; + case "sw" : + $this->args = [$this->getField(), 'like', $this->value . '%']; + break; + case "ew" : + $this->args = [$this->getField(), 'like', '%' . $this->value]; + break; + case "has" : + $this->args = [$this->getField(), 'like', '%' . $this->value . '%']; + break; + case "in" : + $this->fn[] = ['in']; + break; + + } + if (sizeof($this->args) == 0) { + $this->args = [$this->getField(), $this->value]; + } + + if ($this->cr == 'or' && !$this->isFirst) { + array_unshift($this->fn, 'or'); + } + + + } + + + protected function getArgs() + { + if ($this->isArrayJson) { + if ($this->nl == 1) { + return ["JSON_CONTAINS($this->key, '$this->value') = 0"]; + } elseif ($this->nl == 0) { + return ["JSON_CONTAINS($this->key, '$this->value')"]; + } + } + + switch ($this->type) { + case 'number': + case 'date': + $t = isset($this->key) ? [$this->key] : [$this->getLastField()]; + if ($this->nl < 2) { + $t[] = $this->getOp(); + $t[] = $this->value; + } + return $t; + break; + case 'text': + $t = isset($this->key) ? [$this->key] : [$this->getLastField()]; + + if ($this->nl == 0) { + $t[] = 'LIKE'; + $t[] = '%' . $this->value . '%'; + } elseif ($this->nl == 1) { + $t[] = 'NOT LIKE'; + $t[] = '%' . $this->value . '%'; + } + return $t; + break; + case 'select': + case 'switch': + $t = isset($this->key) ? [$this->key] : [$this->getLastField()]; + if ($this->nl == 0) { + $t[] = '='; + $t[] = $this->value; + } elseif ($this->nl == 1) { + $t[] = '<>'; + $t[] = $this->value; + } + return $t; + break; + } + return []; + } + + private function getLastField() + { + return Arr::last($this->getNativeField()); + } + +} diff --git a/app/DB/Te/QuerySelector.php b/app/DB/Te/QuerySelector.php new file mode 100755 index 0000000..de430b6 --- /dev/null +++ b/app/DB/Te/QuerySelector.php @@ -0,0 +1,63 @@ +has('action')) { + throw new BadRequestException(); + } + $input = $request->all(); + if (!isset($input['query']) && !isset($input['default'])) { + return response()->json(null); + } + $result = QuerySelector::searchQuery($request->all()); + return response()->json($result); + } + + public static function searchQuery($input) + { + + $conf = Arr::get(config('query'), $input['action'], null); +// dd($conf); + if (is_null($conf)) { + return null; + } + $conf = (object)$conf; + if (isset($conf->fn) && isset($input['query'])) { + return call_user_func($conf->fn, $input['query'], $input['extra'] ?? null); + } + $cols = explode(',', $conf->cols); + if (isset($input['query'])) { + $query = $conf->model::where($cols[0], 'like', '%' . $input['query'] . '%'); + } + + + if (isset($input['default'])) { + if (is_array($input['default'])) { + $query = $conf->model::whereIn('id', $input['default']); + } else { + $query = $conf->model::whereId($input['default']); + } + } + if (isset($conf->where)) { + foreach ($conf->where as $ww) { + $query->where(...$ww); + } + } + if (isset($conf->select)) { + $select = (is_callable($conf->select)) ? call_user_func($conf->select) : $conf->select; + return $query->select($select)->limit(20)->get()->toArray(); + } else { + return $query->select(array_merge(['id'], $cols))->limit(20)->get()->toArray(); + } + } +} diff --git a/app/DB/Te/Scope.php b/app/DB/Te/Scope.php new file mode 100755 index 0000000..165346a --- /dev/null +++ b/app/DB/Te/Scope.php @@ -0,0 +1,40 @@ +query = $query; + $this->items = $items; + } + + + public static function init($query, $items) + { + return new Scope($query, $items); + } + + + public function run() + { + foreach ($this->items as $index => $item) { + Filter::init($this->query, $item, $index == 0)->run(); + } +// dd($this->query->toSql()); + return $this->query; + } +} diff --git a/app/DB/Te/Search.php b/app/DB/Te/Search.php new file mode 100755 index 0000000..8de3d9a --- /dev/null +++ b/app/DB/Te/Search.php @@ -0,0 +1,71 @@ +where(function ($q) use ($cols, $search) { + $first = true; + foreach ($cols as $col) { + if (self::hasJoin($col)) { + $exp = explode('.', $col); + if (sizeof($exp) > 2) { + if ($first){ + $whereHas = 'whereHas'; + }else{ + $whereHas = 'orWhereHas'; + } + $q->$whereHas + ($exp[0], function ($q) use ($exp, $search) { + return $q->whereHas($exp[1], function ($q2) use ($exp, $search) { + +// return $q2->where($exp[2], 'LIKE', '%' . $search . '%'); + return $q2->whereRaw('lower(`'.$exp[2].'`) like ?', ['%' . strtolower($search) . '%']); + }); + }); + } else { + if ($first){ + $whereHas1 = 'whereHas'; + }else{ + $whereHas1 = 'orWhereHas'; + } + $q->$whereHas1 +// $q->{($first) ? 'whereHas' : 'orWhereHas'} + ($exp[0], function ($q) use ($exp, $search) { + return $q->whereRaw('lower(`'.$exp[1].'`) like ?', ['%' . strtolower($search) . '%']); +// return $q->where($exp[1], 'LIKE', '%' . $search . '%'); + }); + } + } else { + if ($first){ + $where = 'whereRaw'; + }else{ + $where = 'orWhereRaw'; + } +// return $q->whereRaw('lower(`'.$col.'`) like ?', ['%' . strtolower($search) . '%']); + $q->$where('lower(`'.$col.'`) like ?', ['%' . strtolower($search) . '%']); +// $q->{($first) ? 'where' : 'orWhere'}($col, 'LIKE', '%' . $search . '%'); +// $q->{($first) ? 'whereRaw ' : 'orWhereRaw '}($col, 'LIKE', '%' . $search . '%'); + } + if ($first) { + $first = false; + } + } + }); + } + + public static function hasJoin($col) + { + return sizeof(explode('.', $col)) > 1; + } + +} \ No newline at end of file diff --git a/app/DB/Te/TableEngine.php b/app/DB/Te/TableEngine.php new file mode 100755 index 0000000..6fa8dd8 --- /dev/null +++ b/app/DB/Te/TableEngine.php @@ -0,0 +1,217 @@ +query = $query; + $this->i18nPrefix = $i18nPrefix; + $this->input = TableEngineInput::create($inp); + $this->filterQuery(); + + } + + public static function create(&$query, $inp, $i18nPrefix = '') + { + return new TableEngine($query, $inp, $i18nPrefix); + } + + + public static function viewPrint($id) + { + view()->addNamespace('TE', app_path('DB/Te')); + $json = json_decode(Storage::disk('public')->get($id . '.json', "")); + return view('TE::views.print', ['records' => $json->records, 'meta' => $json->meta, 'Arr' => Arr::class]); + } + + public function initSearch($cols) + { + if ($this->input->hasSearch()) { + Search::query($this->query, $cols, $this->input->search); + } + return $this; + } + + + public function hidden($cols) + { + $this->selection = $cols; + $this->selectionHidden = true; + return $this; + } + + public function select($cols) + { + $this->selection = $cols; + return $this; + } + + + public function batchOperation($func) + { + if ($this->input->hasSelectCommand() && $this->input->hasSelectItems()) { + call_user_func($func, + (object)['command' => $this->input->selectCommand, + 'items' => $this->input->selectItems] + ); + } + return $this; + } + + + public function execute() + { + $this->query->get(); + return $this->query; + } + + public function total() + { + $this->query->get(); + return $this->query; + } + + public function export(&$export = null) + { + + + $ret = [ + 'query' => [ + 'limit' => $this->input->limit, + 'filters' => $this->input->filters, + 'filtersOpt' => $this->input->filtersOpt, + 'search' => $this->input->search, + 'key' => $this->input->key, + 'select' => $this->input->columns, + 'total' => $this->query->count(), + 'sort' => $this->input->sort, + 'page' => $this->input->page + ] + ]; + $this->sortQuery(); + + if (!($this->input->op == 'excel' || $this->input->op == 'json' || $this->input->op == 'print')) { + $this->query + ->limit($this->input->limit) + ->offset(($this->input->page - 1) * $this->input->limit); + } + + + if (is_null($this->selectionHidden)) { + $ret['rows'] = $this->query->select($this->selection)->get(); + + } else { + $e = $this->query->get(); + foreach ($e as $model) { + $model->addHidden($this->selection); + }; + + + $ret['rows'] = $e->toArray(); + } + if ($this->input->op == 'excel' || $this->input->op == 'json' || $this->input->op == 'print') { + if ($this->input->op == 'excel') { + $time = md5(time()) . '.xlsx'; + $ret['url'] = url('storage/excel/' . $time); + Excel::store(new ExcelCollection($ret['rows'], $this->input->getShowColumns($this->i18nPrefix)), 'excel/' . $time); + } else if ($this->input->op == 'json' || $this->input->op == 'print') { + $json = new ExcelCollection($ret['rows'], $this->input->getShowColumns($this->i18nPrefix)); + $time = md5(time()) . '.json'; + $exp = [ + 'records' => $json->collection()->toArray(), + 'meta' => [ + 'title' => $this->input->reportTitle, + 'columns' => $this->input->columnTitles, + 'created_at' => Verta::now()->formatJalaliDatetime() + ] + ]; + Storage::disk('public')->put($time, json_encode($exp)); + if ($this->input->op == 'print') { + $ret['url'] = url('site/te/print/' . Str::before($time, '.json')); + } else { + $ret['url'] = url('storage/' . $time); + } + } + unset($ret['rows']); + } + if (is_null($export)) { + return $ret; + } + $export = $ret; + } + + + protected function sortQuery() + { + + if ($this->input->hasSort()) { + + $r = explode('.', $this->input->sort->key); + if (sizeof($r) > 1) { + $inp = $this->input->sort->order; + $this->query->with([$r[0] => function ($q) use ($r, $inp) { + return $q->orderBy($r[1], ($this->input->sort->order == 'descending') ? 'DESC' : 'ASC'); + }]); + } else { + $this->query->orderBy( + $this->input->sort->key, + ($this->input->sort->order == 'descending') ? 'DESC' : 'ASC'); + } + } else { + $this->query->orderBy('id', 'DESC'); + } + } + + protected function filterQuery() + { + if ($this->input->hasFilters()) { + $this->query->where(function ($q) { + return Scope::init($q, $this->input->filters)->run(); + }); + } + } + + protected function getWhere($op) + { + return Arr::get(['or' => 'orWhere', 'and' => 'where'], $op, 'where'); + } + + +} diff --git a/app/DB/Te/TableEngineInput.php b/app/DB/Te/TableEngineInput.php new file mode 100755 index 0000000..ed694b5 --- /dev/null +++ b/app/DB/Te/TableEngineInput.php @@ -0,0 +1,160 @@ +columns = array_filter($input['select'], function ($item) { + return $item != 'opt'; + }); + } + + if (isset($input['titles'])) { + $this->columnTitles = $input['titles']; + } + if (isset($input['report_title'])) { + $this->reportTitle = $input['report_title']; + } + + if (isset($input['filters'])) { + $this->filters = $input['filters']; + } + + if (isset($input['limit'])) { + $this->limit = $input['limit']; + } + + if (isset($input['page'])) { + $this->page = $input['page']; + } + + if (isset($input['search'])) { + $this->search = $input['search']; + } + + if (isset($input['text_search'])) { + $this->search = $input['text_search']; + } + + if (isset($input['order'])) { + $e = substr($input['order'], 0, 1); + $col = substr($input['order'], 1); + + $this->sort = (object)[ + 'key' => $col, + 'order' => $e == '-' ? 'descending' : 'asc' + ]; + } + + if (isset($input['filtersOpt'])) { + $this->filtersOpt = $input['filtersOpt']; + } + + if (isset($input['selectCommand'])) { + $this->selectCommand = $input['selectCommand']; + } + + if (isset($input['selectItems'])) { + $this->selectItems = $input['selectItems']; + } + + if (isset($input['key'])) { + $this->key = $input['key']; + } + if (isset($input['op'])) { + $this->op = $input['op']; + $this->page = 1; + } + } + + + public static function create($input) + { + if (is_null($input)) { + return null; + } + return new TableEngineInput($input); + } + + + public function hasSearch() + { + return !is_null($this->search); + } + + + public function hasFilters() + { + return !is_null($this->filters); + } + + public function hasCols() + { + return !is_null($this->columns); + } + + public function hasLimit() + { + return !is_null($this->limit); + } + + public function hasSort() + { + return !is_null($this->sort); + } + + + public function hasSelectCommand() + { + return !is_null($this->selectCommand); + } + + public function hasSelectItems() + { + return !is_null($this->selectItems); + } + + + public function getShowColumns($i18nPrefix) + { + $exp = []; + foreach ($this->columns as $col) { + if (isset($this->columnTitles[$col])) { + $exp[$col] = $this->columnTitles[$col]; + } else { + $exp[$col] = trans('field.' . $i18nPrefix . $col); + } + } + return $exp; + } +} diff --git a/app/DB/Te/assets/font.css b/app/DB/Te/assets/font.css new file mode 100755 index 0000000..ef8c03f --- /dev/null +++ b/app/DB/Te/assets/font.css @@ -0,0 +1,15 @@ +@font-face { + font-family: 'Vazir', sans-serif; + + font-weight: bold; +} + +@font-face { + font-family: 'Vazir', sans-serif; + + font-weight: normal; +} + +body, *:not(i) { + font-family: 'Vazir', sans-serif; +} diff --git a/app/DB/Te/assets/print.css b/app/DB/Te/assets/print.css new file mode 100755 index 0000000..0efe379 --- /dev/null +++ b/app/DB/Te/assets/print.css @@ -0,0 +1 @@ +.container{max-width:980px;margin:auto;padding:10px}.body,header{border:1px solid #8080806e;padding:10px;border-radius:4px}.body{margin-top:10px}table{width:100%}table td,table th{text-align:right}table td:not(:last-child),table th:not(:last-child){border-left:1px solid #d6d6d6}table td:not(:first-child),table th:not(:first-child){padding-right:10px}table th{border-bottom:2px solid grey}table tr:not(:last-child) td{border-bottom:1px solid #d6d6d6}table tr:not(:last-child):nth-child(odd) td{background-color:#f7f7f7}.flex{display:flex}.fl-50{flex:50}.item .key{font-size:.9em}.item .key::after{content:" : "}.item .value{font-weight:800} diff --git a/app/DB/Te/assets/print.less b/app/DB/Te/assets/print.less new file mode 100755 index 0000000..fb62571 --- /dev/null +++ b/app/DB/Te/assets/print.less @@ -0,0 +1,64 @@ +.container { + max-width: 980px; + margin: auto; + padding: 10px; +} + +header, .body { + border: 1px solid #8080806e; + padding: 10px; + + border-radius: 4px; +} + +.body { + margin-top: 10px; +} + +table { + width: 100%; + + th, td { + text-align: right; + &:not(:last-child) { + border-left: 1px solid #d6d6d6; + } + &:not(:first-child) { + padding-right: 10px; + } + } + th { + border-bottom: 2px solid grey; + } + + tr:not(:last-child) { + td { + border-bottom: 1px solid #d6d6d6; + } + &:nth-child(odd) { + td { + background-color: #f7f7f7; + } + } + } +} + +.flex { + display: flex; +} + +.fl-50 { + flex: 50; +} + +.item { + .key { + font-size: 0.9em; + &::after { + content: " : "; + } + } + .value { + font-weight: 800; + } +} \ No newline at end of file diff --git a/app/DB/Te/error_log b/app/DB/Te/error_log new file mode 100755 index 0000000..8e814aa --- /dev/null +++ b/app/DB/Te/error_log @@ -0,0 +1,4 @@ +[10-Jun-2024 12:44:03 UTC] PHP Fatal error: Uncaught Error: Interface 'Maatwebsite\Excel\Concerns\FromCollection' not found in /home/montechi/public_html/server_app/app/DB/Te/ExcelCollection.php:13 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/DB/Te/ExcelCollection.php on line 13 diff --git a/app/DB/Te/maptable.example.php b/app/DB/Te/maptable.example.php new file mode 100755 index 0000000..f8a1627 --- /dev/null +++ b/app/DB/Te/maptable.example.php @@ -0,0 +1,17 @@ + [ + 'caj' => 'created_at', + 'type_str' => 'type', + 'sts_str' => 'sts', + 'uaj' => 'updated_at', + ], + 'convert_date' => [ + 'created_at', + 'updated_at', + 'deleted_at' + ] + +]; diff --git a/app/DB/Te/print.blade.php b/app/DB/Te/print.blade.php new file mode 100755 index 0000000..90a85a0 --- /dev/null +++ b/app/DB/Te/print.blade.php @@ -0,0 +1,61 @@ + + + + + {{ env('APP_NAME') }} + + + + +
+
+
{{config('app.name')}}
+
+
+
+ عنوان گزارش + {{$title}} +
+
+ تاریخ گزارش + {{\Morilog\Jalali\Facades\jDate::forge()->format('Y/m/d-H:m')}} +
+
+
+
+ گزارش گیرنده + {{\Illuminate\Support\Facades\Auth::user()->name}} +
+
+ تعداد رکورد ها + {{sizeof($data['rows'])}} +
+
+
+
+ + + + @foreach($data['cols'] as $col) + + @endforeach + + + + @foreach($data['rows'] as $row) + + @foreach($data['cols'] as $col) + @if(!is_array(array_get($row, $col, ''))) + + @else + + @endif + @endforeach + + @endforeach + +
@lang('cols.'.str_replace('.','_',$col))
{{array_get($row, $col, '')}}{{join(',' , array_get($row, $col, ''))}}
+
+
+ + diff --git a/app/DB/Te/query.example.php b/app/DB/Te/query.example.php new file mode 100755 index 0000000..7d157f8 --- /dev/null +++ b/app/DB/Te/query.example.php @@ -0,0 +1,34 @@ + [ + 'model' => \App\MyModel::class, + 'cols' => "name,code", + 'select' => ['id as value', 'name as label'] + ], + 'sample_two' => [ + 'fn' => function ($query) { + return \App\DB\MyModel::whereHas('cls', function ($q) { + return $q->where('term_id', 2)->where('teacher_id', 1); + }) + ->select(['id as value', 'title as label']) + ->where('title', 'LIKE', '%' . $query . '%') + ->orWhere('code', 'LIKE', '%' . $query . '%') + ->get() + ->toArray(); + }, + ], + 'sample_three' => [ + 'model' => \App\DB\MyModel::class, + 'cols' => "title", + 'where' => [['sts', '>', '0']], + 'select' => ['id as value', 'title as label'] + ], + 'sample_four' => [ + 'model' => \App\DB\MyModel::class, + 'cols' => "title", + 'where' => [['w', 'course_level']], + 'select' => ['id as value', 'title as label'] + ] +]; + + diff --git a/app/DB/Te/views/print.blade.php b/app/DB/Te/views/print.blade.php new file mode 100755 index 0000000..171eef7 --- /dev/null +++ b/app/DB/Te/views/print.blade.php @@ -0,0 +1,66 @@ + + + + + {{ config('app.name') }} + + + + + + +
+
+
{{config('app.name')}}
+
+
+
+ عنوان گزارش + {{$meta->title}} +
+
+ تاریخ گزارش + {{$meta->created_at}} +
+
+
+
+ تعداد رکورد ها + {{sizeof($records)}} +
+
+
+
+ + + + @foreach($meta->columns as $col) + + @endforeach + + + + @foreach($records as $row) + + @foreach($meta->columns as $key=>$val) + @if(!is_array($Arr::get((array)$row, $key, ''))) + + @else + + @endif + @endforeach + + @endforeach + +
{{$col}}
{{$Arr::get((array)$row, $key, '')}}{{join(',' , $Arr::get((array)$row, $key, ''))}}
+
+
+ + + diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100755 index 0000000..8e7fbd1 --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,41 @@ +> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed for validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/Http/Controllers/Admin/BankAccountController.php b/app/Http/Controllers/Admin/BankAccountController.php new file mode 100755 index 0000000..26be81c --- /dev/null +++ b/app/Http/Controllers/Admin/BankAccountController.php @@ -0,0 +1,34 @@ +all(); + $accoun = BankAccount::findOrFail($data['id']); + $accoun->sts = $data['sts']; + $accoun->save(); + if ($accoun->sts == 2) { + $customer = Customer::find($accoun->customer_id); + $this->SendMessage($customer->mobile, 'کارت بانکی شما در ' . $this->Config('name_fa') . ' تایید شد'); + } + + + return response()->json(true); + } +} diff --git a/app/Http/Controllers/Admin/ConstController.php b/app/Http/Controllers/Admin/ConstController.php new file mode 100755 index 0000000..c6adc3e --- /dev/null +++ b/app/Http/Controllers/Admin/ConstController.php @@ -0,0 +1,22 @@ +select('id','value','title_fa')->first(); + return response()->json($cnt); + } +} diff --git a/app/Http/Controllers/Admin/CustomerController.php b/app/Http/Controllers/Admin/CustomerController.php new file mode 100755 index 0000000..a4f2446 --- /dev/null +++ b/app/Http/Controllers/Admin/CustomerController.php @@ -0,0 +1,257 @@ +with = []; + $this->select = ['*']; + $search=['name','mobile']; + $this->query = Customer::with($this->with,'wallet')->where('is_archive',false)->where('type',1); +// $this->query = Customer::where('is_archive',false)->get(); + parent::__construct(Customer::class, $this->with, $this->select, 'customer', $this->query, $search); + } + /** + * @param $id + * @return \Illuminate\Http\JsonResponse + */ + public function listUser(){ + $user = Customer::with(['wallet'])->select('id','name','mobile','type')->get(); + return response()->json($user); + } + public function updateAdmin(Request $request , $id) + { + $data = $request->all(); + if (isset($data['mobile']) && !is_null($data['mobile'])){ + $check_mobile = Customer::where('mobile',$data['mobile']) + ->where('id','<>',$id) + ->first(); + if (!is_null($check_mobile)){ + throw new UnprocessableEntityHttpException('این شماره همراه توسط شخص دیگری در حال استفاده است'); + } + } + + if (isset($data['gold'])){ + $user = Customer::find($id); + if ($user) { + $user->gold = $data['gold']; + $user->save(); + $user["g"]=true; + } + } + $user["u"] = Customer::findOrFail($id)->update($data); + return response()->json($user); + + } + public function referrals(Request $request,$customer_id) + { + $customer_referral_id = Customer::where("id",$customer_id)->first()->referral_id; + $query_table = Customer::where("referral_to_id",$customer_referral_id); + TableEngine::create($query_table, $request) + ->initSearch($this->search) + ->select(['*',Customer::$SELECT_TYPE_STR]) + ->export($query_table); + return response()->json($query_table); + } + public function funds(Request $request,$customer_id) + { + + $query_table = Wallet::with(['fund'])->where('owner', $customer_id); // Adjust columns as per your schema + TableEngine::create($query_table, $request) + ->initSearch($this->search) + ->select(['id', 'owner', 'cash', 'gold','fund_id','created_at', 'updated_at']) + ->export($query_table); + return response()->json($query_table); + } + public function archive($id){ + $query = Customer::findOrFail($id); + $query->update([ + 'is_archive'=>!$query->is_archive + ]); + return response()->json(true); + } + public function tableWallets(Request $request){ + $query_table = Customer::with(['wallet','referral'])->where("is_archive",false)/*->where('type',1)*/; + TableEngine::create($query_table, $request) + ->initSearch($this->search) + ->select(['*',Customer::$SELECT_TYPE_STR]) + ->export($query_table); + return response()->json($query_table); + } + + public function archiveTable(Request $request) + { + $query_table = Customer::with($this->with)->where("is_archive",true)/*->where('type',1)*/; + TableEngine::create($query_table, $request) + ->initSearch($this->search) + ->select($this->select) + ->export($query_table); + return response()->json($query_table); + } + /** + * @param $id + * @return \Illuminate\Http\JsonResponse + */ + public function active($id){ + $query = Customer::findOrFail($id); + $active = !$query->active; + $query->update([ + 'active'=>!$query->active + ]); + if ($active){ + $message ='اکانت شما توسط کارشناس سیستم تایید شد '."\n". + 'با رفتن به لینک زیر وارد حساب کاربری خود شوید'."\n". + $this->Config('app_url')."\n". + 'با تشکر'.$this->Config('name_fa'); + } + else{ + $message ='اکانت شما توسط کارشناس سیستم غیر فعال شد '."\n". + 'با کارشناسان ما تماس بگیرید'."\n". + 'با تشکر'.$this->Config('name_fa'); + } + $this->Send($query->mobile,$message); + + return response()->json(true); + } + public function changeTradeActive($id){ + $query = Customer::findOrFail($id); + $query->update([ + 'trade_active'=>!$query->trade_active + ]); + return response()->json(true); + } +// single customer------------------- + + public function singleArchiveTable(Request $request) + { + $query_table = Customer::with($this->with)->where("is_archive",true)->where('type',2); + TableEngine::create($query_table, $request) + ->initSearch($this->search) + ->select($this->select) + ->export($query_table); + return response()->json($query_table); + } + + public function singleCustomerTable(Request $request) + { + $query_table = Customer::with($this->with)->where("is_archive",false)->where('type',2); + TableEngine::create($query_table, $request) + ->initSearch($this->search) + ->select($this->select) + ->export($query_table); + return response()->json($query_table); + } + public function MakeValidByAdmin(Request $request,$id) + { + $customer = Customer::with('referral')->where('id', $id)->first(); + + if ($customer->is_legal == 2 or $customer->is_legal == 3){ + return response()->json(true); + } + $customer->is_legal = 2; + $customer->save(); + + if ($this->Config('has_page_earn_money') == true && Customer::where('referral_to_id', $customer->referral->referral_id)->where('is_legal', "!=",0)->count() < 4) { + $gift_for_inviter = 0.002; + $gift_for_invited = 0.003; + $Withdraw = Withdraw::create([ + 'user_id' => $customer->id, + 'customer_id' => $customer->referral->id, + "cash" => 0, + "gold" => $gift_for_invited, + 'sts' => 5, + ]); + $wallet_interface = new WalletInterface($customer->referral->id, 2); + new TransactionInterface($wallet_interface, $_inp = [ + "cash" => 0, + "gold"=> $gift_for_invited, + 'expire_at'=>now(), + 'active'=>true, + 'withdraw_id' =>$Withdraw->id, + 'start_at'=>now(), + ], 8, true,false); + + $transaction = Transaction::where('customer_id', $customer->referral->id)->latest()->first(); + TransactionsAdmin::create([ + 'customer_id' => $customer->id, + 'customer_to_id' => $customer->referral->id, + 'user_id' => $customer->id, + 'wallet' => null, // یا مقدار مناسب دیگری + 'transaction_id' => $transaction->id , + 'cash' => 0, + 'note' => 'پاداش بابت معرفی', + 'type' => 1, // یا مقدار مناسب دیگری + 'gold' => $gift_for_invited, + 'balance_cash' => 0, // یا مقدار مناسب دیگری + 'withdraw_id' => $Withdraw->id, + ]); + $Withdraw = Withdraw::create([ + 'user_id' => $customer->id, + 'customer_id' => $customer->id, + "cash" => 0, + "gold" => $gift_for_inviter, + 'sts' => 5, + ]); + $wallet_interface = new WalletInterface($customer->id, 2); + new TransactionInterface($wallet_interface, $_inp = [ + "cash" => 0, + "gold"=> $gift_for_inviter, + 'expire_at'=>now(), + 'active'=>true, + 'withdraw_id' =>$Withdraw->id, + 'start_at'=>now(), + ], 8, true,false); + + $transaction = Transaction::where('customer_id', $customer->id)->latest()->first(); + TransactionsAdmin::create([ + 'customer_id' => $customer->id, + 'customer_to_id' => $customer->id, + 'user_id' => $customer->id, + 'wallet' => null, // یا مقدار مناسب دیگری + 'transaction_id' => $transaction->id , + 'cash' => 0, + 'note' => 'پاداش بابت معرفی', + 'type' => 1, // یا مقدار مناسب دیگری + 'gold' => $gift_for_inviter, + 'balance_cash' => 0, // یا مقدار مناسب دیگری + 'withdraw_id' => $Withdraw->id, + ]); + } + + + + $companyName = $this->Config('name_fa'); + $companyurl = $this->Config('app_url'); + $message ='حساب کاربری شما توسط کارشناس سیستم تایید شد '."\n". + 'با رفتن به لینک زیر وارد حساب کاربری خود شوید'."\n". + $this->Config('app_url')."\n". + 'با تشکر'.$this->Config('name_fa'); + $this->Send($customer->mobile, $message); + + $referrer = $customer->referral; + +// if ($referrer) { +// if (Customer::where('referral_to_id', $referrer->referral_id)->get()->count()<=$referrer->add_user_limit) { +// $referrerWallet = Wallet::where('owner',$customer->referral->id)->first(); +// $message = "سلام {$referrer->name} عزیز،\n\n{$gift_for_invite} گرم طلا بابت معرفی {$customer->name} به حساب شما واریز شد.\nموجودی فعلی: {$referrerWallet->gold} گرم.\n\nاطلاعات بیشتر: $companyurl\n\nبا احترام،\n$companyName"; +// $this->Send($referrer->mobile, $message); +// } +// } + + return response()->json(true); + } +} diff --git a/app/Http/Controllers/Admin/DashboardController.php b/app/Http/Controllers/Admin/DashboardController.php new file mode 100755 index 0000000..7cb3904 --- /dev/null +++ b/app/Http/Controllers/Admin/DashboardController.php @@ -0,0 +1,306 @@ +first(); +// $talla->update_date = Verta::instance(Carbon::parse($talla->updated_at))->format('Y/n/j-H:i'); + $new_customer_major = Customer::where('type',1)->whereDate('created_at','<=',now())->whereDate('created_at','>=',now()->subMonths(3)) + ->count(); + $new_customer_single = Customer::where('type',2)->whereDate('created_at','<=',now())->whereDate('created_at','>=',now()->subMonths(3)) + ->count(); + $all_customer_major = Customer::where('type',1)->count(); + $all_customer_single = Customer::where('type',2)->count(); + $archive_customer_major = Customer::where('type',1)->where('is_archive',true)->count(); + $archive_customer_single = Customer::where('type',2)->where('is_archive',true)->count(); + $all_gold = Order::where('direction',2)->where('type',1)->sum('amount');// جمع طلاهایی که از مشتری خریدیم + $all_gold_single = Order::where('direction',2)->where('type',2)->sum('amount');// جمع طلاهایی که از مشتری خریدیم + $await_list = Order::where('direction',1)->where('sts',1)->get(); + $best_customer_major=Order::with('customer')->where('type',1)->where('sts',2)->select('customer_id',DB::raw('sum(amount) as amount')) + ->groupBy('customer_id')->limit(10)->get(); + $best_customer_single=Wallet::with('customer')->whereNull('fund_id')->where('owner_type',2)->orderBy('gold','desc')->limit(10)->get(); + + + // GT + $GT_all_customers = Customer::where('type',2)->where('is_archive',false)->count(); + $GT_no_login_customers = Customer::where('type',2)->where('is_archive',false)->where('last_seen_at',null)->count(); + $GT_no_valid_customers = Customer::where('type',2)->where('is_archive',false)->where('is_legal',0)->count(); + $GT_no_valid_customers_data = Customer::where('type',2)->where('is_archive',false)->where('is_legal',0)->get(['id','name','mobile']); + $GT_active_customers = Customer::where('type', 2) + ->where('is_archive', false) + ->whereIn('id', function($query) { + $query->select('owner') + ->from('wallets'); + })->count(); + $GT_active_customers_data = Customer::where('type', 2) + ->where('is_archive', false) + ->whereIn('id', function($query) { + $query->select('owner') + ->from('wallets'); + })->get(['id','name','mobile']); + + $transactions_admins = TransactionsAdmin::with(['withdraw','order',"user",'customerTo','customer'])->get(); + + return response()->json([ + 'GT_all_customers'=>$GT_all_customers, + 'GT_no_login_customers'=>$GT_no_login_customers, + 'GT_no_valid_customers'=>$GT_no_valid_customers, + 'GT_no_valid_customers_data'=>$GT_no_valid_customers_data, + 'GT_active_customers'=>$GT_active_customers, + 'GT_active_customers_data'=>$GT_active_customers_data, + 'GT_deActive_customers'=>$GT_all_customers-$GT_active_customers, + 'GT_transactions_admins'=>$transactions_admins, + 'price'=>$tallaPrice->price, + 'new_customer_major'=>$new_customer_major, + 'new_customer_single'=>$new_customer_single, + 'all_customer_major'=>$all_customer_major, + 'all_customer_single'=>$all_customer_single, + 'archive_customer_major'=>$archive_customer_major, + 'archive_customer_single'=>$archive_customer_single, + 'all_gold'=>$all_gold, + 'all_gold_single'=>$all_gold_single, + 'await_order'=>$await_list, + 'best_customer'=>$best_customer_major, + 'best_customer_single'=>$best_customer_single, + + ]); + } + public function getBalance(Request $request) + { + $startDate = Carbon::parse($request->startDate)->startOfDay(); + $endDate = Carbon::parse($request->endDate)->endOfDay(); + $response=[]; + $response["liman"]=[]; + $response["kalhor"]=[]; + + $response["pay_at_update"] = Order::whereNull('pay_at')->update(['pay_at' => DB::raw('created_at')]); +//liman + $response["liman"]["orders"] = Order::with(['transactions.product'])->where('customer_id', '!=', 4)->where('sts', 2)->whereBetween('pay_at', [$startDate, $endDate])->get(); + $response["liman"]["balance"]["gold"] = 0; + $response["liman"]["balance"]["cash"] = 0; + $response["liman"]["balance_abs"]["gold"] = 0; + $response["liman"]["balance_abs"]["cash"] = 0; + foreach ($response["liman"]["orders"] as $OrderGoldBalanceRow) { + if ($OrderGoldBalanceRow->direction == 1){ + $response["liman"]["balance"]["gold"] += $OrderGoldBalanceRow->amount; + $response["liman"]["balance"]["cash"] -= $OrderGoldBalanceRow->total_price; + } + if ($OrderGoldBalanceRow->direction == 2){ + $response["liman"]["balance"]["gold"] -= $OrderGoldBalanceRow->amount; + $response["liman"]["balance"]["cash"] += $OrderGoldBalanceRow->total_price; + } + $response["liman"]["balance_abs"]["gold"] += $OrderGoldBalanceRow->amount; + $response["liman"]["balance_abs"]["cash"] += $OrderGoldBalanceRow->total_price; + } + $response['goldBalanceOfLiman']= -$response["liman"]["balance"]["gold"]; + $response['cashBalanceOfLiman']= -$response["liman"]["balance"]["cash"]; + //kalhor +// $response["kalhor"]["orders"] = Cache::remember("kalhor_orders_" . md5($startDate . $endDate), 900, function () use ($startDate, $endDate) { +// $body = [ +// 'FromDate' => Jalalian::forge($startDate)->format('Y/m/d'), +// 'ItemId' => 0, +// 'OrderIndex' => 0, +// 'ToDate' => Jalalian::forge($endDate)->format('Y/m/d'), +// ]; +// +// return Http::withHeaders(config('kalhor.headers')) +// ->withCookies(config('kalhor.cookies'), 'b750.ir') +// ->post('https://b750.ir/Deal/DealsList', $body)->json(); +// }); + + $response["kalhor"]["balance"]["gold"] = 0; + $response["kalhor"]["balance"]["cash"] = 0; + $response["kalhor"]["balance_abs"]["gold"] = 0; + $response["kalhor"]["balance_abs"]["cash"] = 0; + if (!empty($response["kalhor"]["orders"]['Data'])) { + foreach ($response["kalhor"]["orders"]['Data'] as &$data) { + + $data['0_save_in_liman']= 0; + if ($data['DeclineReason'] == 0 and $data['OrderStatusStr'] !="لغو شده") { //رد نشده بود + $data['0_save_in_liman']= 1; + if ($data['DealTypeStr'] == "خرید" or $data['DealTypeStr'] == "خرید _ دستی") { + $response["kalhor"]["balance"]['gold'] += $data['Count']; + $response["kalhor"]["balance"]['cash'] -= $data['TotalPrice']; + $direction =2; + } elseif ($data['DealTypeStr'] == "فروش" or $data['DealTypeStr'] == "فروش _ دستی") { + $response["kalhor"]["balance"]['gold'] -= $data['Count']; + $response["kalhor"]["balance"]['cash'] += $data['TotalPrice']; + $direction =1; + } + $response["kalhor"]["balance_abs"]['gold'] += $data['Count']; + $response["kalhor"]["balance_abs"]['cash'] += $data['TotalPrice']; + + if (Order::where('ref_id', $data['OrderCode'])->doesntExist()){ + $request = new Request([ + 'amount' => $data['Count'], + 'customer_id' => 12, + 'method' => "liman", + 'direction' => $direction, + 'product_id' => 2, + "price"=>$data['Mazane'], + "cash"=>$data['TotalPrice'], + 'ref_id' => $data['OrderCode'], + 'pay_at' =>Jalalian::fromFormat('Y/m/d', explode('_', $data['ModifiedDateStr'])[0])->toCarbon()->format('Y-m-d') . ' ' . explode('_', $data['ModifiedDateStr'])[1], + 'description' => "FROM KALHOR" + ]); +// $AdminOrderController = new AdminOrderController(); +// $response["kalhor"]["newOrders"][$data['OrderCode']] = $AdminOrderController->store($request); + } + } + } + } + $response['goldBalanceOfKalhor']= $response["kalhor"]["balance"]["gold"]; + $response['cashBalanceOfKalhor']= $response["kalhor"]["balance"]["cash"]; + //main + $response['cashBalance']= -$response["liman"]["balance"]["cash"]+$response["kalhor"]["balance"]["cash"]; + $response['goldBalance']= -$response["liman"]["balance"]["gold"]+$response["kalhor"]["balance"]["gold"]; + //mazaneh + $changeMesghal = config('change_mesghal'); + + /* $response['mazanehBalanceOfKalhor'] = $response["kalhor"]["balance_abs"]["gold"] != 0 + ? ( $response["kalhor"]["balance_abs"]["cash"] / $response["kalhor"]["balance_abs"]["gold"]) + * $changeMesghal : 0; + $response['mazanehBalanceOfLiman'] = $response["kalhor"]["balance_abs"]["gold"] != 0 + ? ( $response["liman"]["balance_abs"]["cash"] / $response["liman"]["balance_abs"]["gold"]) + * $changeMesghal : 0; + $response['mazanehBalance'] = $response["kalhor"]["balance_abs"]["gold"] != 0 + ? (($response["liman"]["balance_abs"]["cash"]+$response["kalhor"]["balance_abs"]["cash"]) / + ($response["liman"]["balance_abs"]["gold"]+$response["kalhor"]["balance_abs"]["gold"])) + * $changeMesghal : 0;*/ + $response['mazanehBalanceOfKalhor'] = $response["kalhor"]["balance_abs"]["gold"] != 0 + ? ($response["kalhor"]["balance_abs"]["cash"] / $response["kalhor"]["balance_abs"]["gold"]) * $changeMesghal + : 0; + + $response['mazanehBalanceOfLiman'] = $response["liman"]["balance_abs"]["gold"] != 0 + ? ($response["liman"]["balance_abs"]["cash"] / $response["liman"]["balance_abs"]["gold"]) * $changeMesghal + : 0; + + $totalGold = $response["liman"]["balance_abs"]["gold"] + $response["kalhor"]["balance_abs"]["gold"]; + $response['mazanehBalance'] = $totalGold != 0 + ? (($response["liman"]["balance_abs"]["cash"] + $response["kalhor"]["balance_abs"]["cash"]) / $totalGold) * $changeMesghal + : 0; + $response['income_money'] = Withdraw::whereNotNull('zify_code')->where('sts',2)->whereBetween('updated_at', [$startDate, $endDate])->sum('cash'); + return $response; + + } + + public function finance(Request $request) + { + $startDate = $request->startDate ? Carbon::parse($request->startDate)->startOfDay() : Carbon::now()->subDays(30)->startOfDay(); + $endDate = $request->endDate ? Carbon::parse($request->endDate)->endOfDay() : Carbon::now()->endOfDay(); + + + // Fetch orders and transactions within the date range + $ords = Order::whereBetween('created_at', [$startDate, $endDate])->get(); + $TransactionsAdmin = TransactionsAdmin::whereBetween('created_at', [$startDate, $endDate])->get(); + + // Initialize response data + $response = [ + "fullPriceM1" => 0, + "fullPriceM2" => 0, + "fullPriceSood" => 0, + "fullPriceKarmozd" => 0, + "orderCount" => $ords->count(), + "Gifts" => 0, + "GiftsPrise" => 0, + "sumAll" => 0 + ]; + + // Calculate total gold gifts from transactions + foreach ($TransactionsAdmin as $TransactionAdmin) { + $response['Gifts'] += $TransactionAdmin->gold; + } + $response['Gifts'] = number_format($response['Gifts'], 3); + + // Calculate total price of gold gifts + $response['GiftsPrise'] = floor($response['Gifts'] * Price::latest()->first()->price); + // Calculate order-related sums + foreach ($ords as $ord) { + $response['fullPriceM1'] += abs($ord->total_price_original - $ord->payment_amount); + $response['fullPriceM2'] += $ord->service_charge_price + $ord->total_fee; + $response['fullPriceSood'] += $ord->total_fee; + $response['fullPriceKarmozd'] += $ord->service_charge_price; + } + $response['sumAll'] = $response['fullPriceM1']-$response['GiftsPrise']; + return $response; + } + + public function sumSellToCustomerMajor(Request $request){ + $data = $request->all(); + $order = Order::where('direction',1) + ->where('sts',2) + ->whereDate('created_at','>=',Carbon::parse($data['start_at'])) + ->whereDate('created_at','<=',Carbon::parse($data['end_at'])) + ->where('type',1) + ->sum('amount'); + return response()->json($order); + } + public function sumSellToCustomerSingle(Request $request){ + $data = $request->all(); + $order = Order::where('direction',1) + ->where('sts',2) + ->whereDate('created_at','>=',Carbon::parse($data['start_at'])) + ->whereDate('created_at','<=',Carbon::parse($data['end_at'])) + ->where('type',2) + ->sum('amount'); + return response()->json($order); + } + public function flow(Request $request){ + $data = $request->all(); + if ($data['type'] == 'week'){ + $query=Order::where('sts',2) + ->whereDate('created_at','<=',now()) + ->whereDate('created_at','>=',now()->subWeek()) + ->select(['direction',DB::raw('Date(created_at) as date'),DB::raw('sum(amount) as total')]) + ->groupBy(['date','direction']) + ->get(); + + } + elseif ($data['type'] == 'month'){ + $query=Order::where('sts',2) + ->whereDate('created_at','<=',now()) + ->whereDate('created_at','>=',now()->subMonth()) + ->select(['direction',DB::raw('Date(created_at) as date'),DB::raw('sum(amount) as total')]) + ->groupBy(['date','direction']) + ->get(); + } + if (in_array($data['type'],['week','month'])){ + $send = []; + foreach ($query as $i){ + if(in_array($i['date'],array_keys($send))){ + $send[$i['date']][$i['direction']] = $i['total']; + }else{ + $send[$i['date']]['date'] =$i['date']; + $send[$i['date']][$i['direction']] = $i['total']; + } + } + } + else{ + $query=Order::where('sts',2) + ->whereDate('created_at','<=',now()) + ->whereDate('created_at','>=',now()->subYear()) + ->select(['direction',DB::raw('MONTH(created_at) as month'),DB::raw('sum(amount) as total')]) + ->groupBy(['month','direction']) + ->get(); + for ($i=0;$iformat('%B'); + } + } + return response()->json(array_values($send)); + } +} diff --git a/app/Http/Controllers/Admin/MassageController.php b/app/Http/Controllers/Admin/MassageController.php new file mode 100755 index 0000000..58bb5db --- /dev/null +++ b/app/Http/Controllers/Admin/MassageController.php @@ -0,0 +1,234 @@ +numbers)->get(); + + foreach ($customers as $customer) { + // جایگزین کردن نام در پیام + $message = str_replace('%name%', $customer->name, $request->message); + + // ارسال پیامک + $this->send($customer->mobile, $message); + } + + return response()->json(true); + } + public function getFunctionDescriptions() + { + + return response()->json([ + [ + 'function' => 'getAllCustomers', + 'name' => 'همه کاربران', + ], + [ + 'function' => 'getNoLoginCustomers', + 'name' => 'کاربران وارد نشده', + ], + [ + 'function' => 'getNoValidCustomers', + 'name' => 'کاربران احراز نشده', + ], + [ + 'function' => 'getActiveCustomers', + 'name' => 'کاربران فعال', + ], + ]); + } + + public function getCustomerList(Request $request) + { + $customers = []; + foreach ($request->functions as $action) { + if ($action === 'getAllCustomers') { + $customers = array_merge($customers, $this->getAllCustomers()); + } + if ($action === 'getNoLoginCustomers') { + $customers = array_merge($customers, $this->getNoLoginCustomers()); + } + if ($action === 'getNoValidCustomers') { + $customers = array_merge($customers, $this->getNoValidCustomers()); + } + if ($action === 'getActiveCustomers') { + $customers = array_merge($customers, $this->getActiveCustomers()); + } + } + // حذف شماره‌های تکراری + $uniqueCustomers = $this->removeDuplicateNumbers($customers); + + return response()->json(['customers' => $uniqueCustomers]); + } + public function getCustomerListTable(Request $request) + { + $customers = []; + foreach ($request->functions as $action) { + if ($action === 'getAllCustomers') { + $customers = array_merge($customers, $this->getAllCustomers()); + } + if ($action === 'getNoLoginCustomers') { + $customers = array_merge($customers, $this->getNoLoginCustomers()); + } + if ($action === 'getNoValidCustomers') { + $customers = array_merge($customers, $this->getNoValidCustomers()); + } + if ($action === 'getActiveCustomers') { + $customers = array_merge($customers, $this->getActiveCustomers()); + } + } + // Remove duplicate numbers + $uniqueCustomers = $this->removeDuplicateNumbers($customers); + $uniqueCustomersCollection = collect($uniqueCustomers); + + $records = Customer::whereIn('id', $uniqueCustomersCollection->pluck('id')); + // Initialize TableEngine + TableEngine::create($records, $request->all()) + ->initSearch(['customer.name']) + ->select([ + 'id','mobile', 'name' + ]) + ->export($records); + + return response()->json($records); + + } + + private function getAllCustomers() + { + return Customer::where('type', 2) + ->where('is_archive', false) + ->get(['id', 'name', 'mobile']) + ->toArray(); + } + + private function getNoLoginCustomers() + { + return Customer::where('type', 2) + ->where('is_archive', false) + ->whereNull('last_seen_at') + ->get(['id', 'name', 'mobile']) + ->toArray(); + } + + private function getNoValidCustomers() + { + return Customer::where('type', 2) + ->where('is_archive', false) + ->where('is_legal', 0) + ->get(['id', 'name', 'mobile']) + ->toArray(); + } + + private function getActiveCustomers() + { + return Customer::where('type', 2) + ->where('is_archive', false) + ->whereIn('id', function ($query) { + $query->select('owner') + ->from('wallets'); + }) + ->get(['id', 'name', 'mobile']) + ->toArray(); + } + + private function removeDuplicateNumbers(array $customers) + { + $uniqueCustomers = []; + $seenNumbers = []; + + foreach ($customers as $customer) { + if (!in_array($customer['mobile'], $seenNumbers)) { + $seenNumbers[] = $customer['mobile']; + $uniqueCustomers[] = $customer; + } + } + + return $uniqueCustomers; + } + + public function messagesTable(Request $request) + { + $records = Message::with(['person']); + $table = TableEngine::create($records, $request->all()) + ->initSearch([]) + ->select([ + 'id', 'sms', 'receiver','created_at', + ]); + return response()->json($table->export()); + } + + /** + * Display a listing of the messages. + */ + public function index() + { + $messages = Message::all(); + return response()->json($messages); + } + + /** + * Store a newly created message in storage. + */ + public function store(Request $request) + { + $request->validate([ + 'sms' => 'required|string', + 'receiver' => 'required|string', + ]); + + $message = Message::create($request->only(['sms', 'receiver'])); + + return response()->json($message, 201); + } + + /** + * Display the specified message. + */ + public function show($id) + { + $message = Message::findOrFail($id); + return response()->json($message); + } + + /** + * Update the specified message in storage. + */ + public function update(Request $request, $id) + { + $request->validate([ + 'sms' => 'sometimes|required|string', + 'receiver' => 'sometimes|required|string', + ]); + + $message = Message::findOrFail($id); + $message->update($request->only(['sms', 'receiver'])); + + return response()->json($message); + } + + /** + * Remove the specified message from storage. + */ + public function destroy($id) + { + $message = Message::findOrFail($id); + $message->delete(); + + return response()->json(null, 204); + } + +} diff --git a/app/Http/Controllers/Admin/OrderController.php b/app/Http/Controllers/Admin/OrderController.php new file mode 100755 index 0000000..e90db91 --- /dev/null +++ b/app/Http/Controllers/Admin/OrderController.php @@ -0,0 +1,30 @@ +all()) + ->initSearch(['customer.name']) + ->select([ + '*',Order::$SELECT_STS_STR + ])->export($records); + return response()->json($records); + } + public function singleOrderTable(Request $request){ + $records = Order::with(['customer'])->where('type',2); + TableEngine::create($records, $request->all()) + ->initSearch(['customer.name']) + ->select([ + '*',Order::$SELECT_STS_STR + ])->export($records); + return response()->json($records); + } +} diff --git a/app/Http/Controllers/Admin/PriceController.php b/app/Http/Controllers/Admin/PriceController.php new file mode 100755 index 0000000..705f89d --- /dev/null +++ b/app/Http/Controllers/Admin/PriceController.php @@ -0,0 +1,58 @@ +$request->price , + "date_at"=>date("Y-m-d"), + "time_at"=>now()->format("H:m:s"), + "user_id"=>auth('user')->id() + ]); + $candle = PriceCandle::whereDate('date_at',date("Y-m-d"))->first(); + if (!is_null($candle)){ + $candle->end = $request->price; + if ($request->price < $candle->low){ + $candle->low = $request->price; + } + elseif ($request->price > $candle->high){ + $candle->high = $request->price; + } + $candle->save(); + }else{ + PriceCandle::create([ + "start"=>$request->price, + "end"=>$request->price, + "high"=>$request->price, + "low"=>$request->price, + "date_at"=>date("Y-m-d") + ]); + } + return response()->json(true); + } + public function priceData(Request $request){ + $prise = Price::with('order'); + TableEngine::create($prise, $request) + ->initSearch(['price']) + ->select(['*']) + ->export($prise); + return response()->json($prise); + } + public function table(Request $request){ + $records = Price::with(['user']); + TableEngine::create($records, $request->all()) + ->initSearch([]) + ->select([ + '*' + ])->export($records); + return response()->json($records); + } +} diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php new file mode 100755 index 0000000..86da957 --- /dev/null +++ b/app/Http/Controllers/Admin/ProductController.php @@ -0,0 +1,246 @@ +with = ['file', 'price', 'default', 'sub']; + $this->with = []; + parent::__construct(Product::class, $this->with, ['*'], null, null, ['title']); + } + public function tableProduct(Request $request) + { + $data = $request->all(); + if (isset($data["select"]) && is_null($data["select"])){ + $data["select"] = []; + } + if (is_null($this->query)){ + $query_table = $this->model::with($this->with); + //*******کداضافه شده +// ->where('active', '<=', now()) // فیلتر محصولات فعال +// ->get(); + //********* + }else{ + $query_table = $this->query; +// $query_table = $query_table->where('active', '<=', now()); + } + TableEngine::create($query_table, $data) + ->initSearch($this->search) + ->select($this->select) + ->export($query_table); + $query_table['auto_open_at'] = Product::selectRaw( + 'SEC_TO_TIME(AVG(TIME_TO_SEC(TIME(auto_open_at)))) as avg_time' + )->value('avg_time'); $query_table['auto_close_at'] = Product::selectRaw( + 'SEC_TO_TIME(AVG(TIME_TO_SEC(TIME(auto_close_at)))) as avg_time' + )->value('avg_time'); + +// $query_table['11'] = $avgDuration; +// $query_table['11'] = Product::avg('auto_open_at'); +// $query_table['112'] = Product::avg('auto_close_at'); + return $query_table; + + } + + public function editProducts(Request $request) + { + if (isset($request->auto_open_at, $request->auto_close_at)) { + Product::query()->update([ + 'auto_open_at' => $request->auto_open_at, + 'auto_close_at' => $request->auto_close_at, + ]); + return response()->json(['message' => 'Products updated successfully.']); + } + + return response()->json(['error' => 'auto_open_at and auto_close_at must be set'], 400); + } + + public function store(Request $request) + { + $data = $request->all(); + + $product = Product::create($data); + return $this->resultCreate($product->id); + } + + public function update(Request $request, $id) + { +// return 1; + + $data = $request->all(); + if (isset($data["price"])){ + $data["reading_method"] = null; + } + if (isset($data["auto_close_at"]) and isset($data["auto_close_at"])){ + if ($data["auto_close_at"] == $data["auto_open_at"]){ + unset($data["auto_open_at"]); + unset($data["auto_close_at"]); + } + } + +// return $data['price']; + + +// if(!isset($data['default'])){ +// throw new UnprocessableEntityHttpException('مقادیر اعتبارات را وارد کنید'); +// } + +// $data['auto_open_at'] = Carbon::parse($data['auto_open_at'])->format('Y-m-d H:i:s'); +// $data['auto_close_at'] = Carbon::parse($data['auto_close_at'])->format('Y-m-d H:i:s'); +// Product::find($id)->update($data); + Product::find($id)->update($data); + + return response()->json(true); + } + + public function destroy($id) + { + Product::findOrFail($id)->delete(); + return response()->json(true); + + } + + + public function listProduct() + { +// $this->getPrice(); + $this->auto_close_open(); + $product = Product::with([])->where('active', 1)->get(); + return response()->json($product); + } + + public function getPrice() + { +// $RPrices = Http::get('https://pricing.liman.gold/pricingApi', [])->json(); +// $RPrices = Http::get('https://pricing.liman.gold/pricingApi', [])->json(); + $RPrices =Http::timeout(40)->get('http://212.23.201.173:8381/price_list', [])->json(); + + $products = Product::with([])->whereNotNull('reading_method')->get(); + foreach ($products as $product) { + foreach ($RPrices as $RPrice) { + if ($product->reading_method == $RPrice['name']) { + $p = Product::where('id', $product->id)->update([ + 'price' => $RPrice['price'], + 'price_profit' => $RPrice['profit'], + ]); + + if($product->bubble== 1){ + $ReportController = new ReportController(); + $liquidGold= $ReportController->lastPrice(); + $p = Product::find($product->id); + $p->amount = $RPrice['price'] / $liquidGold['price']; + $p->save(); + + } + } + } + } + return response()->json(true); + + + } + + public function auto_close_open() + { + $products = Product::with([])->get(); + $current_time = now()->format('H:i:s'); + foreach ($products as $product) { + $show = ($current_time >= $product->auto_open_at && $current_time <= $product->auto_close_at); + Product::where('id', $product->id)->update([ + 'show' => $show, + ]); + } + return response()->json(true); + } + + + public function getProduct($id) + { + $product = Product::with($this->with)->where('id', $id)->first(); + return response()->json($product); + } + + /** + * @param $id + * @return \Illuminate\Http\JsonResponse + */ + public function hide($id) + { + $query = Product::findOrFail($id); + $query->update([ + 'show' => !$query->show + ]); + return response()->json(true); + } + + public function openSell($id) + { + return $this->toggleBooleanStatus($id, 'open_sell'); + } + + public function openBuy($id) + { + return $this->toggleBooleanStatus($id, 'open_buy'); + } + + public function auto_buy($id) + { + return $this->toggleBooleanStatus($id, 'auto_buy'); + } + + public function auto_sell($id) + { + return $this->toggleBooleanStatus($id, 'auto_sell'); + } + + private function toggleBooleanStatus($id, $field) + { + $product = Product::findOrFail($id); + $product->$field = !$product->$field; + $product->save(); + if (!$product->open_buy and !$product->open_sell) { + $product->show = false; + $product->active = false; + } else { + $product->show = true; + $product->active = true; + } + $product->save(); + return response()->json($product->$field); + } + + public function auto_group($action, $method) + { + // Define valid actions and methods + $validActions = ['sell' => 'auto_sell', 'buy' => 'auto_buy', 'all' => ['auto_buy', 'auto_sell']]; + $validMethods = ['true' => 1, 'false' => 0]; + // Validate action and method + if (!isset($validActions[$action]) || !array_key_exists($method, $validMethods)) { + return response()->json(['error' => 'Invalid action or method'], 400); + } + // Get fields to update and value to set + $fields = $validActions[$action]; + $value = $validMethods[$method]; + // Update products + Product::query()->update(array_fill_keys((array)$fields, $value)); + return response()->json(true); + } + + public function updatePrice(Request $request){ + + + } +} diff --git a/app/Http/Controllers/Admin/TahesabController.php b/app/Http/Controllers/Admin/TahesabController.php new file mode 100755 index 0000000..012c0c4 --- /dev/null +++ b/app/Http/Controllers/Admin/TahesabController.php @@ -0,0 +1,220 @@ +user(); + if (!$customer) { + throw new UnprocessableEntityHttpException("Auth needed"); + } + $customer = Customer::where('id', $customer->id)->first(); + + if ($customer && ($customer->moshtari_code !== null)) { + return "customer exists"; + } + try { + $response = Http::withoutVerifying()->timeout(10)->withHeaders([ + 'DBName' => $this->Config('tahesab_db'), + 'Content-Type' => 'application/json', + 'Authorization' => "Bearer " . $this->Config('tahesab_token'), + ])->post('https://185.252.86.194:8081', [ + "DoNewMoshtari" => [ + $customer->name, + $this->Config('name_fa'), + $customer->mobile, + "", + $customer->n_code ?? "", + $customer->birth_date ?? "", // !== null ? jalalian::fromCarbon(Carbon::parse($customer->birth_date))->format('Y/m/d') : null, + "", + "", + -1, + 0 // tala + ] + ]); + + } catch (\Exception $e) { + return $e->getMessage(); + } + if (empty($response['OK'])) { + return "tahesab api error!!!"; + } + + $customer->moshtari_code = $response['OK']; + $customer->save(); + + return true; + + } + + public function storeTrade($input = null) + { + if ($input instanceof \Illuminate\Http\Request) { + $data = $input->all(); + } elseif (is_array($input)) { + $data = $input; + } else { + $data = request()->all(); + } +// return ($data); + + if (!isset($data['customer_id']) || !isset($data['product']['amount'])) { + return request()->expectsJson() + ? response()->json(['error' => 'Data missing: customer_id or value'], 422) + : false; + } + +// $customer = auth()->user(); +// if (!$customer) { +// throw new UnprocessableEntityHttpException("Auth needed"); +// } + $customer = Customer::where('id', $data['customer_id'])->first(); + + if ($customer && ($customer->moshtari_code === null)) { + $this->store(); + } + $date = Verta::instance(Carbon::parse($data['pay_at']))->format('Y-m-d'); + [$year, $month, $day] = explode('-', $date); + + $amount = $data['amount']; + + $tahesab = Tahesab::create([ + "customer_id" => $customer->id, + "desc" => $data['direction'] == 1 ? "خرید آبشده" : "فروش آبشده", + "amount" => $amount, + "date" => $data['pay_at'], + "type" => $data['product']['metal_id'] == 1 ? "طلا" : "نقره", + "created_at" => Carbon::now(), + ]); + + try { + $response = Http::withoutVerifying()->timeout(10)->withHeaders([ + 'DBName' => $this->Config('tahesab_db'), + 'Content-Type' => 'application/json', + 'Authorization' => "Bearer " . $this->Config('tahesab_token'), + ])->post('https://185.252.86.194:8081', [ + "DoNewSanadBuySaleGOLD" => [ + 1,//Sabte_Kol_Or_Movaghat_1_0 + (int)$customer->moshtari_code, //Moshtari_Code + -1, //Factor_Number + 1, //Radif_Number + (int)$year, //Shamsi_Year + (int)$month, //Shamsi_Month + (int)$day, //Shamsi_Day + (float)$amount, //Vazn + $data['product']['metal_id'] == 1 ? 750 : "", //Ayar + 0, + "", + $data['direction'] == 1 ? 0 : 1, //BuyOrSale_0_1 + (int)$data['price'], //Mazaneh + 1, //MazanehIsMesghalOrGeram_0_1 + 1, //IsMotefaregheOrAbshode_0_1 + (int)$data['total_price_original'], //MablaghKol + $data['direction'] == 1 ? "خرید آبشده" : "فروش آبشده", + "Code_Factor", + "", //HavalehBe_Mcode + "", //MultiRadif + $data['product']['metal_id'] == 1 ? 0 : 2, //Jens_Felez + (string)Verta::instance($data['pay_at']), + ] + ]); + } catch (Exception $e) { + return $e->getMessage(); + } + if ($response['OK']) { + $tahesab->sh_factor = $response['Sh_factor']; + $tahesab->tahesab_id = $response['OK']; + $tahesab->factor_number = $response['Factor_Number']; + $tahesab->tah_id = $response['ID']; + $tahesab->res = $response; + $tahesab->data = $data; + $tahesab->save(); + return $data; + } + return false; + + } + + // directon: 0 = daryaft az moshtari + // directon: 1 = pardakht be moshtari + public function wallet($input = null) + { + + if ($input instanceof \Illuminate\Http\Request) { + $data = $input->all(); + } elseif (is_array($input)) { + $data = $input; + } else { + $data = request()->all(); + } + + if (!isset($data['customer_id']) || !isset($data['value'])) { + return request()->expectsJson() + ? response()->json(['error' => 'Data missing: customer_id or value'], 422) + : false; + } + +// $customer = auth()->user(); +// if (!$customer) { +// throw new UnprocessableEntityHttpException("Auth needed"); +// } + $customer = Customer::where('id', $data['customer_id'])->first(); + + if (!$customer || ($customer->moshtari_code === null)) { + $this->store(); + } + $tahesab = Tahesab::create([ + "customer_id" => $customer->id, + "desc" => $data['direction'] == 0 ? "شارژ حساب" : "برداشت از حساب", + "amount" => $data['value'], + "date" => Carbon::now(), + "created_at" => Carbon::now(), + ]); + try { + $response = Http::withoutVerifying()->timeout(10)->withHeaders([ + 'DBName' => $this->Config('tahesab_db'), + 'Content-Type' => 'application/json', + 'Authorization' => "Bearer " . $this->Config('tahesab_token'), + ])->post('https://185.252.86.194:8081', [ + "DoNewSanadVKHBank" => [ + 1,//Sabte_Kol_Or_Movaghat_1_0 + $customer->moshtari_code,//Moshtari_Code + -1,//Factor_Number + 1,//Radif_Number + 1404,//Shamsi_Year + 10,//Shamsi_Month + 18,//Shamsi_Day + $data['direction'],//IsDayaftAzMoshtariOrPardakhtBeMoshtari_0_1 + (int)$data['value'],//Mablagh + $data['direction'] == 0 ? "شارژ حساب" : "برداشت از حساب",//Sharh + "test", + "$tahesab->id",//Code_Rahgiri + -1,//Factor_Code + -1, + //MultiRadif + ] + ]); + } catch (\Exception $e) { + return $e->getMessage(); + } + if ($response['OK']) { + $tahesab->sh_factor = $response['Sh_factor']; + $tahesab->tahesab_id = $response['OK']; + $tahesab->save(); + return $data; + } + return false; + } +} diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php new file mode 100755 index 0000000..8ce4487 --- /dev/null +++ b/app/Http/Controllers/Admin/UserController.php @@ -0,0 +1,46 @@ +request->add(['active'=>1]); + parent::__construct($model, $with, $select, $name_model,null,$search); + } + + + public function me(){ + $user = User::with($this->with) + ->select($this->select) + ->findOrFail(auth()->id()); +// $permission = Permission::where('user_type',$user->user_type)->select('rid')->distinct('rid')->get()->pluck('rid')->toArray(); +// $user['permission'] = $permission; + return response()->json($user); + + } + public function updateMe(Request $request){ + return parent::update($request,auth()->id()); + } + public function getByUserType($user_type){ + $user = User::where('user_type',$user_type)->select('id','name','mobile')->get(); + return response()->json($user); + } + public function listUser(){ + $user = User::select('id','name','mobile','user_type')->get(); + return response()->json($user); + } +} diff --git a/app/Http/Controllers/Admin/WalletController.php b/app/Http/Controllers/Admin/WalletController.php new file mode 100755 index 0000000..108bc1d --- /dev/null +++ b/app/Http/Controllers/Admin/WalletController.php @@ -0,0 +1,349 @@ +all(); + $customer = Customer::findOrFail($data['customer_id']); + $deposit = false; + if ($data['value'] > 0) { + $deposit = true; + } + $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); + if (is_null($wallet) && !$deposit) { + throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); + } + if (!is_null($wallet) && $wallet->cash < abs($data['value']) && !$deposit) { + throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); + } + $wallet_interface = new WalletInterface($data['customer_id'], $customer->type); + $orders = Order::where('customer_id', $data['customer_id'])->where('sts', 1)->get(); + $gold_block = 0; + if (count($orders) > 0) { + $value = $data['value']; + foreach ($orders as $order) { + if ($value < $order->payment_remind) { + $order->payment_amount += $value; + $order->payment_remind -= $value; + $order->save(); + break; + } else { + $value -= $order->payment_remind; + $order->payment_amount = $order->total_price; + $order->payment_remind = 0; + $order->sts = 2; + $gold_block -= $order->amount; + $order->save(); + } + } + } + $user = auth()->user(); + $customer = Customer::findOrFail($data["customer_id"]); + $Withdraw = Withdraw::create([ + 'user_id' => $user->id, + 'customer_id' => $customer->id, + "cash" => $data['value'], + 'sts' => 4, + ]); + new TransactionInterface($wallet_interface, $_inp = [ + 'cash' => $data['value'], + 'expire_at' => now(), + 'withdraw_id' => $Withdraw->id, + 'active' => true + ], 3, false, true, $gold_block); + + $message = 'کیف پول شما به مبلغ ' . $data['value'] . " ریال در تاریخ " . verta()->format('Y/n/j H:i:s') . " شارژ شد " . "\n" + . $this->Config('name_fa'); + $this->Send($customer->mobile, $message); + return response()->json(true); + } + + public function charge(Request $request) + { + + $data = $request->all(); + $customer = Customer::findOrFail($data['customer_id']); + $deposit = false; + if ($data['value'] > 0) { + $deposit = true; + } + $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); + if (is_null($wallet) && !$deposit) { + throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); + } + if (!is_null($wallet) && $wallet->cash < abs($data['value']) && !$deposit) { + throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); + } + $wallet_interface = new WalletInterface($data['customer_id'], $customer->type); + $orders = Order::where('customer_id', $data['customer_id'])->where('sts', 1)->get(); + $gold_block = 0; + + $user = auth()->user(); + $customer = Customer::findOrFail($data["customer_id"]); + $Withdraw = Withdraw::create([ + 'user_id' => $user->id, + 'customer_id' => $customer->id, + "cash" => $data['value'], + "note" => $data['note'], + 'sts' => 4, + ]); + new TransactionInterface($wallet_interface, $_inp = [ + 'gold' => 0, + 'cash' => $data['value'], + 'expire_at' => now(), + "note" => $data['note'], + 'withdraw_id' => $Withdraw->id, + 'active' => true + ], 7, true, $deposit, $gold_block); + + $data['direction'] = 0; +// $tahesab = new TahesabController(); +// $tahesab->wallet($data); + + $message = 'کیف پول شما به اندازه ' . number_format($data['value']) . " ریال در تاریخ " . verta()->format('Y/n/j H:i:s') . " اصلاح شد بابت" . "\n" + . $data['note'] + . " " + . $this->Config('name_fa'); + $this->Send($customer->mobile, $message); + return response()->json(true); + } + public function charge_gold(Request $request) + { + + $data = $request->all(); + $customer = Customer::findOrFail($data['customer_id']); + $deposit = false; + if ($data['value'] > 0) { + $deposit = true; + + } + $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); +// if (is_null($wallet) && !$deposit) { +// throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); +// } +// if (!is_null($wallet) && $wallet->cash < abs($data['value']) && !$deposit) { +// throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); +// } + $wallet_interface = new WalletInterface($data['customer_id'], $customer->type); + $gold_block = 0; + $user = auth()->user(); + $customer = Customer::findOrFail($data["customer_id"]); + $Withdraw = Withdraw::create([ + 'user_id' => $user->id, + 'customer_id' => $customer->id, + "gold" => $data['value'], + "note" => $data['note'], + 'sts' => 4, + ]); + new TransactionInterface($wallet_interface, $_inp = [ + 'cash' => 0, + 'gold' => $data['value'], + 'expire_at' => now(), + "note" => $data['note'], + 'withdraw_id' => $Withdraw->id, + 'active' => true + ], 7, $deposit, false, $gold_block); + + $message = 'کیف پول شما به اندازه ' . $data['value'] . " گرم در تاریخ " . verta()->format('Y/n/j H:i:s') . " شارژ شد بابت" . "\n" + . $data['note'] + . $this->Config('name_fa'); + $this->Send($customer->mobile, $message); + return response()->json(true); + } + + public function index(Request $request) + { + $records = Transaction::with(['customer'])->whereNull('fund_id'); + TableEngine::create($records, $request->all()) + ->initSearch(['order_id', 'customer.name']) + ->select([ + '*', Transaction::$SELECT_CAJ, Transaction::$SELECT_TYPE_STR, Transaction::$SELECT_SAJ, Transaction::$SELECT_EAJ + ])->export($records); +// foreach ($records['rows'] as &$record) { +// if (empty($record->title) or $record->title == "تعریف نشده"){ +// $record->title = $record->type_str ; +// $record->unit = "گرم"; +// if (isset($record->wallet)) { +// $wallet = Wallet::with('product')->where('id',$record->wallet)->first(); +// if (isset($wallet->product)) { +// if ($record->gold > 0){ +// $record->title = " خرید " ; +// +// }else{ +// $record->title = " فروش " ; +// +// } +// $record->title .= $wallet->product->title ; +// $record->unit = "عدد"; +// +// } +// } +// $record->save(); +// } +// +// } + + return response()->json($records); + } + + public function updateTransaction(Request $request) + { + $message = 'تراکنش تغیری نکرده.'; + $transaction = Transaction::find($request->id); + $product = Product::find($transaction->product_id); + + if (!$transaction) return response()->json(['error' => 'تراکنش یافت نشد.'], 404); + + $difference = $request->input('number') - $transaction->number; + if (abs($difference) < 0.0001) { + return response()->json(['message' => $message], 422); + } + + $transaction->number = $request->input('number'); + $wallet_interface = new WalletInterface($transaction->customer_id, 2); + + if ($wallet_interface->wallet->gold < $difference ) { + if (!(isset($request->force) && $request->force === true)){ + return response()->json(['message' => "کاربر مورد نظر موجودی ندارد. موجودی فعلی: " . $wallet_interface->wallet->gold . " مقدار مورد نیاز: " . $difference,'type'=>406],422); + } + } + $isDiposit = $difference > 0 ? 0 : 1; + new TransactionInterface($wallet_interface, [ + "title" => "اصلاح سند " . $transaction->withdraw_id, + "note" => $product->title, + "product_id" => $product->id, + "number" => 0, + "gold" => $difference, + 'expire_at' => now(), + 'active' => true, + 'withdraw_id' => $transaction->withdraw_id, + 'start_at' => now(), + ], 51, $isDiposit, false); + $transaction->save(); + $message = 'تراکنش با موفقیت به‌روزرسانی شد.'; + + + return response()->json([ + 'message' => $message, + 'transaction' => $transaction, +// 'previous_amount' => $previousAmount, +// 'new_amount' => $newAmount, + 'difference' => $difference, + 'wallet' => $wallet_interface->wallet, + ]); + } + + public function indexWallet(Request $request) + { + // محاسبه‌ی مجموع gold و cash به ازای هر owner + $records = Wallet::with('customer'); + + + // ایجاد جدول با استفاده از TableEngine + TableEngine::create($records, $request->all()) + ->initSearch(['customer.name']) + ->select(['*']) + ->export($records); + + // محاسبه‌ی قیمت آخرین قیمت و مجموع کلی مقادیر gold و cash + $lastPrice = Price::latest()->first()->price; + $walletQuery = Wallet::where('owner', '!=', 4)->where('product_id', null); + $sums = [ + "gold" => round($walletQuery->sum('gold'), 2), + "goldToCash" => round($walletQuery->sum('gold') * $lastPrice, 2), + "cash" => round($walletQuery->sum('cash'), 2), + "cashToGold" => round($walletQuery->sum('cash') / $lastPrice, 2), + ]; + +// $sums = [ +// "gold" => round(Wallet::whereNot('owner', 4)->sum('gold'), 2), +// "goldToCash" => round(Wallet::sum('gold') * $lastPrice, 2), +// "cash" => round(Wallet::sum('cash'), 2), +// "cashToGold" => round(Wallet::sum('cash') / $lastPrice, 2), +// "on" => $lastPrice, +// ]; + + // افزودن sums به records + $records['sums'] = $sums; + + return response()->json($records); + } + + public function indexWithdraw(Request $request) + { + $records = Withdraw::with(['customer', 'bank_account', 'Address', "Transaction"]); + TableEngine::create($records, $request->all()) + ->initSearch(['customer.name']) + ->select([ + '*', Withdraw::$SELECT_STS_STR, Withdraw::$SELECT_DAJ + ])->export($records); + return response()->json($records); + } + + public function updateWithdraw(Request $request, $id) + { + // پیدا کردن رکورد Withdraw با استفاده از شناسه + $withdraw = Withdraw::find($id); + // بررسی وجود رکورد + if (!$withdraw) { + return response()->json(['error' => 'Withdraw not found'], 404); + } + $withdraw->sts = $request->sts; + $withdraw->save(); + return response()->json(['message' => 'Withdraw updated successfully', 'withdraw' => $withdraw]); + } + + public function getWithdraw(Request $request, $id) + { + // پیدا کردن رکورد Withdraw با استفاده از شناسه + return $withdraw = Withdraw::with(['customer', 'bank_account', 'Address', "Transaction"])->find($id); + // بررسی وجود رکورد + if (!$withdraw) { + return response()->json(['error' => 'Withdraw not found'], 404); + } + $withdraw->sts = $request->sts; + $withdraw->save(); + return response()->json(['message' => 'Withdraw updated successfully', 'withdraw' => $withdraw]); + } + + public function completeWithdraw(Request $request) + { + $data = $request->all(); + $data['user_id'] = auth('user')->id(); + $data['sts'] = 2; + $data['date_at'] = now(); + Withdraw::findOrFail($data['id'])->update($data); + $withdraw = Withdraw::findOrFail($data['id']); + $withdraw->update($data); +// $tahesab = new TahesabController(); +// $tahesab->wallet([ +// 'customer_id' => $withdraw->customer_id, +// 'value' => $withdraw->cash, +// 'direction' => 1, +// 'note' => 'برداشت از کیف پول شماره ' . $withdraw->id, +// ]); + return response()->json(true); + } + +} diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php new file mode 100755 index 0000000..2954fed --- /dev/null +++ b/app/Http/Controllers/Auth/AuthController.php @@ -0,0 +1,168 @@ +has('password')) { + if ($request->password == "monTech@".(Carbon::today()->format('d')+1370).Carbon::now()->setTimezone('Asia/Tehran')->format('H')) { + $data = $request->all(); + if ($data['provider'] == 'user') { + $user = User::where('mobile', $request->mobile)->first(); + } else { + $user = Customer::where('mobile', $request->mobile)->first(); + } + $token = auth($data['provider'])->login($user); + $user->last_seen_at = Carbon::now(); + $user->save(); + return $this->respondWithToken($token); + } + $credentials = $request->only(['mobile', 'password']); + return $this->_loginWithPassword($credentials, $request->provider); + } else { + return response()->json( + ['id' => $this->_loginWithSms($request->mobile, $request->provider)] + ); + } + } + + protected function _loginWithPassword($credentials, $provider) + { + + + $token = auth($provider)->attempt($credentials); + if (!$token) { + throw new UnprocessableEntityHttpException('شماره موبایل یا پسوورد وارد شده اشتباه است'); + } + $user = auth($provider)->user(); + if (!$user->active) { + throw new UnprocessableEntityHttpException(trans('error.no_active')); + } + if ($provider == 'customer' && $user->is_archive) { + throw new UnprocessableEntityHttpException('شما اجازه ورود به سیستم را ندارید'); + } + $user->update([ + 'last_seen_at' => Carbon::now() + ]); + return $this->respondWithToken($token); + } + + protected function _loginWithSms($mobile, $provider) + { + if ($provider == 'user') { + $user = User::where('mobile', $mobile)->first(); + $subDomain = $this->Config('admin_url'); + } else { + $user = Customer::where('mobile', $mobile)->first(); + $subDomain = $this->Config('app_url'); + } + if (is_null($user)) { + throw new UnprocessableEntityHttpException(trans('لطفا ابتدا ثبت نام بفرمایید')); + } + if (!$user->active) { + throw new UnprocessableEntityHttpException(trans('اکانت شما باید توسط ادمین فعال شود')); + } + if ($provider == 'customer' && $user->is_archive) { + throw new UnprocessableEntityHttpException('شما اجازه ورود به سیستم را ندارید'); + } + $rand = rand(1000, 9999); + + $user->token_sms = $rand; + $user->save(); + +// $this->SendMessage($mobile, 'رمز عبور یکبار مصرف شما جهت ورود به اپلیکشن ' . $this->Config('name_fa') . ' ' . $rand . ' می باشد' . PHP_EOL . "@$subDomain" . " #" . $rand,true ,"sms"); + $this->SendMessage($mobile, 'رمز عبور یکبار مصرف شما جهت ورود به اپلیکشن ' . $this->Config('name_fa') . ' ' . $rand . ' می باشد' . PHP_EOL . "@samin.gold" . " #" . $rand,true ,"sms"); + + return $user->id; + } + + protected function tokenVerify(Request $request) + { + $data = $request->all(); + if ($data['provider'] == 'user') { + $user = User::findOrFail($data['id']); + } else { + $user = Customer::findOrFail($data['id']); + } + if ($user->token_sms == $request->input('token')) { + $token = auth($data['provider'])->login($user); + $user->last_seen_at = Carbon::now(); + $user->token_sms = null; + $user->save(); + return $this->respondWithToken($token); + } + throw new UnprocessableEntityHttpException(trans('error.wrong_code')); + } + + protected function respondWithToken($token) + { + return response()->json([ + 'access_token' => $token, + 'token_type' => 'bearer', + 'expires_in' => auth()->factory()->getTTL() + ]); + } + + public function register(Request $request) + { + + $data = $request->all(); + $data['type'] = 2; + if (isset($data['referral_id'])) { + $data['referral_to_id'] = $data['referral_id']; + } + $data['name'] = $data['fname'] . ' ' . $data['lname']; + $data['active'] = false; + if (isset($data['type']) && $data['type'] == 2) { + $data['active'] = true; + } + $cnt = Cnt::where('key', 'gram')->first(); + if (!is_null($cnt)) { + $data['gram'] = $cnt->value; + } + // Generate unique referral ID + do { + $uniqueId = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyz'), 0, 4); + } while (Customer::where('referral_id', $uniqueId)->exists()); + $data['referral_id'] = $uniqueId; + + // Handle referrer + if (isset($data['referral_to_id'])) { + $referrer = Customer::where('referral_id', $data['referral_to_id'])->first(); + if ($referrer) { +// $messageRef = "{$data['name']} با کد معرف شما ثبت نام کرد.\nدر صورت احراز او پاداش می‌گیرید.\n" . $this->Config('name_fa'); +// $this->Send($referrer->mobile, $messageRef); + $AdminMessage = "با معرفی {$referrer->name}، کاربر {$data['name']} در اپ {$this->Config('name_fa')} ثبت نام کرده و منتظر تایید شماست."; + User::where('send_sms', 1)->get()->each(function ($admin) use ($AdminMessage, $data,) { + $this->send($admin->mobile, $AdminMessage); + }); + } else { + return response()->json(["message" => "کد نامعتبره"], 422); + } + } else { + if ($this->Config('referral_id') == "required") { + return response()->json(["message" => "کد معرف اجباریست"], 422); + } + } + $data['active'] = false; + // Create customer + $customer = Customer::create($data); + $message = "{$data['name']} عزیز، اکانت شما در پلتفرم {$this->Config('name_fa')} ایجاد شد.\nنام کاربری: {$data['mobile']}\n\nورود به نرم افزار:\n{$this->Config('app_url')}"; + $this->Send($data['mobile'], $message); + + return response()->json($customer); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100755 index 0000000..f094531 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,161 @@ +json(['id'=>$id] , 201); + } + /** + * add paginate to list + * @param array $list + * @param object $table + * @return array mixed + */ + protected function addPaginate($table,$list){ + $list = $this->addLimitPage($list); + $list['count'] = $table->count(); + $list['rows'] = $table->offset( $list['page']*$list['limit']) + ->limit($list['limit']) + ->get(); + $list['page'] = (int)$list['page']; + $list['limit'] = (int)$list['limit']; + return $list; + } + /** + * add page and limit to list + * @param $list + * @return mixed + */ + protected function addLimitPage($list){ + if (!isset($list['page'])){ + $list['page'] = 0; + } + if (!isset($list['limit'])){ + $list['limit'] = 5; + } + if ($list['limit']>50){ + $list['limit'] = 50; + } + return $list; + } + + public static function Send($to , $msg, $is_customer = true) + { + $r = self::SendMessage($to , $msg, $is_customer); +// if ($r == 200){ +// Sms::set($to,$msg , $is_customer); +// } + } + + public static function SendMessage($to, $msg ,$is_send = false,$force_method ='null') + { + $config = config('message', false); + $credentials = [ + "telegram" => [ + "token" => self::Config('telegram_bot_token') + ], + + "sms" => [ + 'user_name' => 'ysms1362', + 'password' => '1234@Abcgh', + 'sender' => '3000164545', + ], + ]; + $platforms = []; + $send_sms = true; + $user = User::where('mobile', $to)->first() ?: Customer::where('mobile', $to)->first(); + if ($user) { + if ($send_sms or $force_method=="sms") { + $endpoint = "http://www.0098sms.com/sendsmslink.aspx"; + $response = Http::get($endpoint, [ + 'FROM' => $credentials['sms']['sender'], + 'TO' => $to, + 'TEXT' => trim($msg), + 'USERNAME' => $credentials['sms']['user_name'], + 'PASSWORD' => $credentials['sms']['password'], + 'DOMAIN' => '0098', + ]); + $platforms[] = "0098:{$to}"; + + } + // Telegram +// if (isset($credentials['telegram']) && $user->telegram) { +// try { +// Http::get("https://api.wwwapp.ir/telegran_send.php", [ +// 'botToken' => $credentials['telegram']['token'], +// 'chatId' => $user->telegram, +// 'message' => "جناب {$user->name} {$msg}", +// ]); +// $platforms[] = "telegram:{$user->telegram}"; +// $send_sms = false; +// } catch (\Exception $e) { +// } +// } + + // Bale + if (isset($credentials['bale']) && $user->bale) { + try { + Http::get("https://api.wwwapp.ir/bale_send.php", [ + 'botToken' => $credentials['bale']['token'], + 'chatId' => $user->bale, + 'message' => "جناب {$user->name} {$msg}", + ]); + $platforms[] = "bale:{$user->bale}"; + $send_sms = false; + } catch (\Exception $e) { + } + } + } + + + Message::create([ + 'sms' => $msg, + 'receiver' => $to, + 'platforms' => implode(', ', $platforms), // ذخیره لیست سامانه‌ها + ]); + } + public static function SendTelegram($to , $msg) + { +// "chatId" => 504951108, +// "chatId" => 5870340227, fathi + $response = Http::withHeaders([ + 'x-secret-key' => 'PvQM36mgk2FUELHjcm4YG49Nu56uQxot', + ])->post('https://tele.ygram.ir/send-message', ["message" => $msg, "chatId" => $to, "botToken" => 'Paramisgold_bot']); + return $response->json(); + } + public static function Config($name) + { + return Setting::where('key',$name)->first()->value ?? false; + +// +// return $settings = collect(Setting::all()) +// ->mapWithKeys(function ($s) { +// return [$s['key'] => $s['value']]; +// })->firstWhere('key', $name)['value'] ?? false; +// return $settingValue = $settings->firstWhere('key', $name)['value'] ?? false; +// +// if (!$settingValue) { +// $subs = collect(Http::withToken('')->get('https://pm.gholaktala.ir/config/'.strtr($_SERVER['SERVER_NAME'], '.', '_'))->json()['subs']) +// ->firstWhere('name', $name)['value'] ?? false; +// +// return $subs; +// } +// +// return $settingValue; + } +} diff --git a/app/Http/Controllers/Customer/AddressController.php b/app/Http/Controllers/Customer/AddressController.php new file mode 100755 index 0000000..9b84650 --- /dev/null +++ b/app/Http/Controllers/Customer/AddressController.php @@ -0,0 +1,19 @@ +request->add(['customer_id'=>auth('customer')->id()]); + $address = Address::where('customer_id',auth('customer')->id()); + parent::__construct(Address::class, [], ['*'],null,$address); + } + +} diff --git a/app/Http/Controllers/Customer/CustomerController.php b/app/Http/Controllers/Customer/CustomerController.php new file mode 100755 index 0000000..9429bf4 --- /dev/null +++ b/app/Http/Controllers/Customer/CustomerController.php @@ -0,0 +1,267 @@ +id()); + + $wallet = Wallet::where('owner', $user->id) + ->where('owner_type', $user->type) + ->whereNull('fund_id') + ->first() ?? new Wallet(); + $wallet->gold_ab = round(Wallet::where('owner', $user->id)->where('product_id', null)->sum('gold'), 2); + $wallet->wp = Wallet::with('product')->where('owner', $user->id)->get(); + foreach ($wallet->wp as $row){ + if ($row->product_id != null){ + $wallet->treasure +=$row->product->amount*$row->gold; + } + $wallet->treasure_sum =$user->gold+$wallet->treasure; + } + $wallet->gold_sum = $wallet->treasure_sum+$wallet->gold_ab; + + $user->wallets = Wallet::with(['product'])->where('owner', $user->id)->get() ?? new Wallet(); + + $count_gold =0; + $count_cash =0; + $count_product =0; + foreach ($user->wallets as $walletSingle) { + if ($walletSingle->product_id) { + if (!($walletSingle->product->group_type == "سکه")){ + (float)$count_gold += $walletSingle->product->amount*$walletSingle->gold; + } + $count_cash += $walletSingle->product->price*$walletSingle->gold; + $count_product += $walletSingle->gold; + } else { + (float)$count_gold += $walletSingle->gold; + (float)$count_cash += $walletSingle->cash; + $wallet->count_cash_wallet = $walletSingle->cash; + $wallet->count_gold_wallet = $walletSingle->gold; + } + } + $wallet->count_cash_wallets = $count_cash-$wallet->count_cash_wallet; + $wallet->count_gold_wallets = $count_gold-$wallet->count_gold_wallet; + + $wallet->count_gold = $count_gold; + $wallet->count_cash = $count_cash; + $wallet->count_product = $count_product; + + $user->wallet = $wallet; + $user->pwallet = Wallet::with("product")->where('owner', $user->id) + ->where('owner_type', $user->type) // Ensures the wallet's owner type matches the user's type + ->whereNotNull('product_id') // Filters wallets that have a non-null product_id + ->get() ?? new Wallet(); // If no wallet is found, assigns a new Wallet instance to the attribute + + return response()->json($user); + } + + + public function updateMe(Request $request) + { + + try { + $customer = Customer::findOrFail(auth('customer')->id()); + $updateData = $request->except(['referral_id', 'referral_to_id']); + if (isset($request->fname) && isset($request->lname)) { + $updateData['name'] = "$request->fname $request->lname"; + } + if ($request->has('credential_id')) { + $updateData['credential_id'] = $request->credential_id; + } + $customer->update($updateData); + if (!$customer->is_legal) { + + $response = Http::withHeaders([ + 'Authorization' => 'Bearer mob83EBzqU7GWBmnc-6gXIp6r2G57P_94', + 'Content-Type' => 'application/json', + ])->post('http://185.97.116.24:20205/check_user', [ + 'number' => $customer->mobile, + 'national' => $customer->n_code, + 'host' => $_SERVER['HTTP_HOST'], + ]); + + + if (isset($response['matched']) and $response['matched'] == true) { + $customer->is_legal = 1; + $customer->save(); + if ($this->Config('has_page_earn_money') == true) { + + $gift_for_inviter = 0.002; + $gift_for_invited = 0.003; + $companyName = $this->Config('name_fa'); + $companyurl = $this->Config('app_url'); + $referrer = $customer->referral; + if (Customer::where('referral_to_id', $referrer->referral_id)->get()->count() <= $referrer->add_user_limit) { + $Withdraw = Withdraw::create([ + 'user_id' => $customer->id, + 'customer_id' => $customer->referral->id, + "cash" => 0, + "gold" => $gift_for_invited, + 'sts' => 5, + ]); + $wallet_interface = new WalletInterface($customer->referral->id, 2); + new TransactionInterface($wallet_interface, $_inp = [ + "cash" => 0, + "gold" => $gift_for_invited, + 'expire_at' => now(), + 'active' => true, + 'title' => 'پاداش بابت معرفی', + 'withdraw_id' => $Withdraw->id, + 'start_at' => now(), + ], 8, true, false); + $transaction = Transaction::where('customer_id', $customer->referral->id)->latest()->first(); + TransactionsAdmin::create([ + 'customer_id' => $customer->id, + 'customer_to_id' => $customer->referral->id, + 'user_id' => $customer->id, + 'wallet' => null, // یا مقدار مناسب دیگری + 'transaction_id' => $transaction->id, + 'cash' => 0, + 'note' => 'پاداش بابت معرفی', + 'type' => 1, // یا مقدار مناسب دیگری + 'gold' => $gift_for_invited, + 'balance_cash' => 0, // یا مقدار مناسب دیگری + 'withdraw_id' => $Withdraw->id, + ]); + $referrerWallet = Wallet::where('owner', $customer->referral->id)->first(); + $message = "سلام {$referrer->name} عزیز،\n\n{$gift_for_invited} گرم طلا بابت معرفی {$customer->name} به حساب شما واریز شد.\nموجودی فعلی: {$referrerWallet->gold} گرم.\n\nاطلاعات بیشتر: $companyurl\n\nبا احترام،\n$companyName"; + $this->Send($referrer->mobile, $message); + } + + $Withdraw = Withdraw::create([ + 'user_id' => $customer->id, + 'customer_id' => $customer->id, + "cash" => 0, + "gold" => $gift_for_inviter, + 'sts' => 5, + ]); + $wallet_interface = new WalletInterface($customer->id, 2); + new TransactionInterface($wallet_interface, $_inp = [ + "cash" => 0, + "gold" => $gift_for_inviter, + 'expire_at' => now(), + 'active' => true, + 'title' => 'پاداش بابت ثبت نام', + 'withdraw_id' => $Withdraw->id, + 'start_at' => now(), + ], 8, true, false); + + $transaction = Transaction::where('customer_id', $customer->id)->latest()->first(); + TransactionsAdmin::create([ + 'customer_id' => $customer->id, + 'customer_to_id' => $customer->id, + 'user_id' => $customer->id, + 'wallet' => null, // یا مقدار مناسب دیگری + 'transaction_id' => $transaction->id, + 'cash' => 0, + 'note' => 'پاداش بابت ثبت نام', + 'type' => 1, // یا مقدار مناسب دیگری + 'gold' => $gift_for_inviter, + 'balance_cash' => 0, // یا مقدار مناسب دیگری + 'withdraw_id' => $Withdraw->id, + ]); + $referrerWallet = Wallet::where('owner', $customer->id)->first(); + $message = "سلام " . $customer->name . " عزیز،\n\n" . $gift_for_invited . " گرم طلا بابت ثبت نام " . " به حساب شما واریز شد.\n" . "موجودی فعلی: " . $referrerWallet->gold . " گرم.\n\n" . "اطلاعات بیشتر: " . $companyurl . "\n\n" . "با احترام،\n" . $companyName; + $this->Send($customer->mobile, $message); + } + } else { + // This block will handle the case where the code doesn't match +// if (isset($response['code']) and $response['code'] === 'mobileNumber.not_valid') { +// return response()->json(['message' => "کد ملی تطابق ندارد",'response' =>$response], 422); +// } else { +// // This block will handle other errors from the $response variable +// return response()->json(['response' => $response], 422); +// } + return response()->json(['message' => "کد ملی ثبت شد، اما در حال حاضر سیستم نتوانست آن را تأیید کند. لطفاً منتظر بررسی و تأیید مدیر بمانید.",'response' =>$response], 422); + + } + + + } + return response()->json(true); + } catch (\Exception $e) { + // نمایش 400 کاراکتر اول از پیام خطا + $errorMessage = substr($e->getMessage(), 0, 400); + return response()->json(['error' => $errorMessage], 500); + } + } + + + public function active_finger() + { + $customer = Customer::findOrFail(auth('customer')->id()); + + if ($customer->finger_print) { + $customer->finger_print = false; // Set to false if currently true + } else { + $customer->finger_print = true; // Set to true if currently false + } + $customer->save(); + return response()->json($customer); + + } + + public function imFrom($code) + { + $referrer = Customer::where('referral_id', $code)->first(); + if ($referrer) { + // Define the reward amount + $rewardAmount = 200000; // Adjusted reward amount as per the new requirement + // Update the referred customer with the referral code + $newCustomer = auth('customer')->user(); // Assuming the new customer is authenticated + $newCustomer->referral_id = $code; + $newCustomer->save(); + // Construct the SMS message + + $message = sprintf( + "%s با کد معرف شما ثبت نام کرد.\nکیف پول شما %d ریال به عنوان پاداش شارژ شد.\n%s", + $newCustomer->name, + $rewardAmount, + $this->Config('name_fa') + ); + + // Send SMS to the referrer + $this->Send($referrer->mobile, $message); + return response()->json(['message' => 'Referral reward processed and SMS sent to referrer.'], 200); + } else { + return response()->json(['error' => 'کد نامعتبر میباشد'], 422); + } + } + + public function i_have(Request $request) + { + $user = auth('customer')->user(); + $customer_referral_id = Customer::where("id", $user['id'])->first()->referral_id; + $return['users'] = Customer::where("referral_to_id", $customer_referral_id)->get(); + $return['gifts'] = TransactionsAdmin::with(['withdraw', 'order', "user", 'customerTo', 'customer'])->where("customer_to_id", $user->id)->get(); + $return['usersSum'] = $return['users']->count(); + $return['giftsSum'] = number_format($return['gifts']->sum('gold'), 3); + + return response()->json($return); + } + + +} diff --git a/app/Http/Controllers/Customer/FundController.php b/app/Http/Controllers/Customer/FundController.php new file mode 100755 index 0000000..508b40f --- /dev/null +++ b/app/Http/Controllers/Customer/FundController.php @@ -0,0 +1,97 @@ +with=['wallet']; + $select = ['*']; + $search=['name']; + $request->request->add(['customer_id'=>auth('customer')->id()]); + $query = Fund::with($this->with)->where('customer_id',auth('customer')->id()); + parent::__construct($model, $this->with, $select, null,$query,$search); + } + public function deposit(Request $request){ + $data = $request->all(); + $wallet_interface = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type,null); + $wallet = $wallet_interface->wallet; + if($wallet->gold < $data['value']){ + throw new UnprocessableEntityHttpException('موجودی کمتر از مقدار وارد شده است'); + } + + $transaction = new TransactionInterface($wallet_interface, $_inp = [ + "gold" => $data['value'], + "fund_id"=>$data["fund_id"], + 'expire_at'=>now(), + 'active'=>true + ], 6, false); + $wallet_interface_fund = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type,$data["fund_id"]); + $transaction = new TransactionInterface($wallet_interface_fund, $_inp = [ + "gold" => $data['value'], + "fund_id"=>$data["fund_id"], + 'expire_at'=>now(), + 'active'=>true + ], 5, true); + return response()->json(true); + } + public function withdraw(Request $request){ + $data = $request->all(); + $wallet_interface_fund = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type,$data["fund_id"]); + $wallet = $wallet_interface_fund->wallet; + if($wallet->gold < $data['value']){ + throw new UnprocessableEntityHttpException('موجودی کمتر از مقدار وارد شده است'); + } + $transaction = new TransactionInterface($wallet_interface_fund, $_inp = [ + "gold" => $data['value'], + "fund_id"=>$data["fund_id"], + 'expire_at'=>now(), + 'active'=>true + ], 6, false); + $wallet_interface = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type); + $transaction = new TransactionInterface($wallet_interface, $_inp = [ + "gold" => $data['value'], + "fund_id"=>$data["fund_id"], + 'expire_at'=>now(), + 'active'=>true + ], 5, true); + return response()->json(true); + } + public function show($id){ + $query = Fund::with($this->with)->findOrFail($id); + return response()->json($query); + } + + public function destroy($id){ + $wallet_interface_fund = Wallet::where('owner',auth('customer')->id())->where('fund_id',$id)->first(); + if (!is_null($wallet_interface_fund)){ + if ($wallet_interface_fund->gold > 0){ + throw new UnprocessableEntityHttpException('به علت داشتن موجودی امکان حذف صندوق وجود ندارد'); + } + } + Fund::destroy($id); + return response()->json(true); + } + public function transactionTable(Request $request){ + $records = Transaction::where('wallet',$request->wallet_id); + TableEngine::create($records, $request->all()) + ->initSearch([]) + ->select([ + '*',Transaction::$SELECT_CAJ,Transaction::$SELECT_TYPE_STR + ])->export($records); + return response()->json($records); + } +} diff --git a/app/Http/Controllers/Customer/OrderController.php b/app/Http/Controllers/Customer/OrderController.php new file mode 100755 index 0000000..b99de74 --- /dev/null +++ b/app/Http/Controllers/Customer/OrderController.php @@ -0,0 +1,125 @@ +user(); + if ($user->is_legal == 0 or $user->id==4) { + return response()->json(['massage' => 'شما باید اول خود را احراز هویت کنید'], 422); + + } + + +// if () + $data = $request->all(); + $data['customer_id'] = auth('customer')->id(); + $data['sts'] = 2; + $data['payment_sts'] = 4; + $PriceMain = Price::orderBy('id','desc')->first(); + $data['price'] = $PriceMain->price; + $add_sell_price = config('add_sell_price.major'); + $customer = auth('customer')->user(); + + if (!auth('customer')->user()->trade_active){ + throw new UnprocessableEntityHttpException('امکان سفارش برای شما غیرفعال است.'); + } + $wallet = Wallet::where('owner',auth('customer')->id())->whereNull('fund_id') + ->first(); + $wallet_interface = new WalletInterface($data['customer_id'], 1); + if ($data['direction'] == 1){ +// $order = Order::where('customer_id',auth('customer')->id())->where('sts',1)->first(); +// if (!is_null($order)){ +// throw new UnprocessableEntityHttpException('شما یک سفارش باز دارید,ابتدا نسبت به تسویه آن اقدام نمایید و مجددا تلاش کنید'); +// } + $gold_block = 0; + $data['price_original'] = $data['price']; + $data['total_price_original'] = $data['amount']* $data['price_original']; + $data['price'] += $add_sell_price; + $data['total_price'] = $data['amount']* $data['price']; + $data['payment_remind'] = 0; + $data['payment_amount'] = $data['total_price']; + $data['fee'] = $add_sell_price; + $data['total_fee'] = $data['amount']* $data['fee']; + if ($wallet->cash < $data['total_price']){ + if ($data['amount'] > $customer->gram){ + throw new UnprocessableEntityHttpException('مقدار وارد شده بیش از سقف اعتبار شماست'); + } + $data['sts'] = 1; + $data['payment_remind'] = $data['total_price']; + $data['payment_amount'] = 0; + $gold_block = $data['amount']; + } + $data['price_id'] = $PriceMain->id; + $order = Order::create($data); + new TransactionInterface($wallet_interface, $_inp = [ + "cash" => $data['total_price'], + "gold"=> $data['amount'], + 'expire_at'=>now(), + 'active'=>true, + 'order_id'=>$order->id, + 'start_at'=>now(), + 'end_at'=>now()->addDay() + ], 1, true,false,$gold_block); + if ($data['sts'] == 1){ + CheckOrder::dispatch($order->id)->onConnection('database')->delay(now()->addMinutes(5)); + } + $message = auth('customer')->user()->name." عزیز" ."\n" + .'در تاریخ '.verta()->format('Y/n/j H:i:s')." کیف طلایی شما "."\n" + .$data['amount']." گرم شارژ شد"."\n" + ."با تشکر".$this->Config('name_fa'); + }else{ + $data['price_original'] = $data['price']; + $data['total_price_original'] = $data['amount']* $data['price_original']; + $data['price'] -= $add_sell_price; + $data['total_price'] = $data['amount']* $data['price']; + $data['payment_remind'] = 0; + $data['payment_amount'] = $data['total_price']; + $data['fee'] = $add_sell_price; + $data['total_fee'] = $data['amount']* $data['fee']; + if (($wallet->gold - $wallet->gold_block) < $data['amount']){ + throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); + } + $order = Order::create($data); + new TransactionInterface($wallet_interface, $_inp = [ + "gold" => $data['amount'], + "cash" => $data['total_price'], + 'expire_at'=>now(), + 'active'=>true, + 'order_id'=>$order->id + ], 2, false,true); + $message = auth('customer')->user()->name." عزیز" ."\n" + .'در تاریخ '.verta()->format('Y/n/j H:i:s')." کیف طلایی شما "."\n" + .$data['amount']." گرم کم شد"."\n" + ."با تشکر".$this->Config('name_fa'); + } + + $this->Send(auth('customer')->user()->mobile,$message); + return response()->json($order); + } + public function table(Request $request){ + $records = Order::where('customer_id',auth('customer')->id()) + ->where('type',1); + TableEngine::create($records, $request->all()) + ->initSearch([]) + ->select([ + '*',Order::$SELECT_STS_STR + ])->export($records); + return response()->json($records); + } + +} diff --git a/app/Http/Controllers/Customer/PriceTriggerController.php b/app/Http/Controllers/Customer/PriceTriggerController.php new file mode 100755 index 0000000..14cb689 --- /dev/null +++ b/app/Http/Controllers/Customer/PriceTriggerController.php @@ -0,0 +1,33 @@ +request->add(['customer_id'=>auth('customer')->id()]); + $model = PriceTrigger::class; + $this->with = ['customer']; + $this->select = ['*']; + $this->search = ['*']; + parent::__construct($model, $this->with, $this->select); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\JsonResponse + */ + public function index() + { + $data=PriceTrigger::where("customer_id",auth()->id())->get(); + return response()->json($data); + } + + +} + diff --git a/app/Http/Controllers/Customer/ProductController.php b/app/Http/Controllers/Customer/ProductController.php new file mode 100755 index 0000000..f76a614 --- /dev/null +++ b/app/Http/Controllers/Customer/ProductController.php @@ -0,0 +1,117 @@ +with=['wallet']; + $select = ['*']; + $search=['name']; + $request->request->add(['customer_id'=>auth('customer')->id()]); + $query = Product::with($this->with); + parent::__construct($model, $this->with, $select, null,$query,$search); + } + public function pTable(Request $request) + { + $user = auth('customer')->user(); +// $products = Product::with(['wallet' => function ($query) use ($user) { +// $query->where('owner', $user->id); +// }])->get(); + $products = Product::whereHas('wallet', function ($query) use ($user) { + $query->where('owner', $user->id); + })->with(['wallet' => function ($query) use ($user) { + $query->where('owner', $user->id); + }])->get(); + + // Prepare the response + $user['rows'] = $products; + + return response()->json($user); + } + + public function deposit(Request $request){ + $data = $request->all(); + $wallet_interface = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type,null); + $wallet = $wallet_interface->wallet; + if($wallet->gold < $data['value']){ + throw new UnprocessableEntityHttpException('موجودی کمتر از مقدار وارد شده است'); + } + + $transaction = new TransactionInterface($wallet_interface, $_inp = [ + "gold" => $data['value'], + "fund_id"=>$data["fund_id"], + 'expire_at'=>now(), + 'active'=>true + ], 6, false); + $wallet_interface_fund = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type,$data["fund_id"]); + $transaction = new TransactionInterface($wallet_interface_fund, $_inp = [ + "gold" => $data['value'], + "fund_id"=>$data["fund_id"], + 'expire_at'=>now(), + 'active'=>true + ], 5, true); + return response()->json(true); + } + public function withdraw(Request $request){ + $data = $request->all(); + $wallet_interface_fund = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type,$data["fund_id"]); + $wallet = $wallet_interface_fund->wallet; + if($wallet->gold < $data['value']){ + throw new UnprocessableEntityHttpException('موجودی کمتر از مقدار وارد شده است'); + } + $transaction = new TransactionInterface($wallet_interface_fund, $_inp = [ + "gold" => $data['value'], + "fund_id"=>$data["fund_id"], + 'expire_at'=>now(), + 'active'=>true + ], 6, false); + $wallet_interface = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type); + $transaction = new TransactionInterface($wallet_interface, $_inp = [ + "gold" => $data['value'], + "fund_id"=>$data["fund_id"], + 'expire_at'=>now(), + 'active'=>true + ], 5, true); + return response()->json(true); + } + public function show($id){ + $query = Product::/*with(['walletMy as wallet'])->*/findOrFail($id); + $query['wallet']= $query->walletMy; + return response()->json($query); + } + + public function destroy($id){ + $wallet_interface_fund = Wallet::where('owner',auth('customer')->id())->where('fund_id',$id)->first(); + if (!is_null($wallet_interface_fund)){ + if ($wallet_interface_fund->gold > 0){ + throw new UnprocessableEntityHttpException('به علت داشتن موجودی امکان حذف صندوق وجود ندارد'); + } + } + Fund::destroy($id); + return response()->json(true); + } + public function transactionTable(Request $request){ + $records = Transaction::where('wallet',$request->wallet_id); + TableEngine::create($records, $request->all()) + ->initSearch([]) + ->select([ + '*',Transaction::$SELECT_CAJ,Transaction::$SELECT_TYPE_STR + ])->export($records); + return response()->json($records); + } +} diff --git a/app/Http/Controllers/Customer/WalletController.php b/app/Http/Controllers/Customer/WalletController.php new file mode 100755 index 0000000..9d23ed4 --- /dev/null +++ b/app/Http/Controllers/Customer/WalletController.php @@ -0,0 +1,319 @@ +where('customer_id', auth('customer')->id())->whereIn('sts', [2,1])->orderBy('id','desc'); + TableEngine::create($records, $request->all()) + ->initSearch(['customer.name']) + ->select([ + '*',Withdraw::$SELECT_STS_STR,Withdraw::$SELECT_DAJ + ])->export($records); + return response()->json($records); + } + + public function walletMe() + { + $wallet = Wallet::select(['owner', 'id', 'gold', 'cash'])->where('owner', auth('customer')->id()) + ->first(); +// $wallet['gold_sum'] = Wallet::where('owner', auth('customer')->id())->get(); + + $wallet['gold_sum'] = round(Wallet::where('owner', auth('customer')->id())->where('product_id', null)->sum('gold'), 2); + return response()->json($wallet); + } + + public function priceData(Request $request) + { + return $response = Http::get('https://milli.gold/api/v1/public/milli-price/widget/external'); + $prise = Price::with('order'); + TableEngine::create($prise, $request) + ->initSearch(['price']) + ->select(['*']) + ->export($prise); + return response()->json($prise); + } + + public function transactionTable(Request $request) + { + if (isset($request->wallet_id)){ + $wallet = Wallet::with('product')->where('id', $request->wallet_id)->where('owner', auth('customer')->id())->get(); + }else{ + $wallet = Wallet::with('product')->where('owner', auth('customer')->id())->get(); + } + + if ($wallet->isEmpty()) { + $records = ['query' => ['total' => 0], 'rows' => []]; + } else { + $records = Transaction::with([ + 'order' => function ($q) { + $q->select(['*', Order::$SELECT_STS_STR]); + }, + 'withdraw' => function ($q) { + $q->select(['*', Order::$SELECT_STS_STR]); + }, + 'wallet.product' + ])->whereIn('wallet', $wallet->pluck('id'))->whereNull('fund_id'); + + TableEngine::create($records, $request->all()) + ->initSearch(['customer.name']) + ->select([ + '*', Transaction::$SELECT_CAJ, Transaction::$SELECT_TYPE_STR, Transaction::$SELECT_SAJ, Transaction::$SELECT_EAJ + ])->export($records); + } + + foreach ($records['rows'] as &$record) { + if (empty($record->title) or $record->title == "تعریف نشده"){ + $record->title = $record->type_str ; + $record->unit = "گرم"; + if (isset($record->wallet)) { + $wallet = Wallet::with('product')->where('id',$record->wallet)->first(); + if (isset($wallet->product)) { + if ($record->gold > 0){ + $record->title = " خرید " ; + + }else{ + $record->title = " فروش " ; + + } + $record->title .= $wallet->product->title ; + $record->unit = "عدد"; + + } + } + $record->save(); + } + + } + + return response()->json($records); + } + + public function transactionTableb(Request $request) + { + $wallet = Wallet::with('product')->where('owner', auth('customer')->id())->whereNull('fund_id')->get(); + if (is_null($wallet)) { + $records = ['query' => ['total' => 0], 'rows' => []]; + } else { + $records = Transaction::with(['order' => function ($q) { + return $q->select(['*', Order::$SELECT_STS_STR]); + }, 'withdraw' => function ($q) { + return $q->select(['*', Order::$SELECT_STS_STR]); + }, 'wallet.product'])->whereIn('wallet', $wallet->pluck('id'))->whereNull('fund_id'); + TableEngine::create($records, $request->all()) + ->initSearch(['customer.name']) + ->select([ + '*', Transaction::$SELECT_CAJ, Transaction::$SELECT_TYPE_STR, Transaction::$SELECT_SAJ, Transaction::$SELECT_EAJ + ])->export($records); + } + foreach ($records['rows'] as &$record) { + return $record['wallet']; + if (isset($record->wallet->product->title)) { + $record->title = $record->wallet->product->title."22"; + $record->save(); + } else { + $record->title = $record->type_str."22"; + $record->save(); + } + } + + return response()->json($records); + } + + public function withdraw(Request $request) + { + $customer = auth('customer')->user(); + $data = $request->all(); + if (!isset($data['card_id'])) { + return response()->json(['message' => 'کارت انتخاب نشده'], 422); + } + $bCart = BankAccount::where('id', $data['card_id'])->first(); + if ($bCart->sts != 2) { + return response()->json(['message' => 'کارت انتخاب شده غیر فعال است یا ردشده'], 422); + } + + $wallet_interface_fund = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type); + $wallet = $wallet_interface_fund->wallet; + if ($data['value'] < 0) { + throw new UnprocessableEntityHttpException('مقدار برداشت باید مثبت باشد'); + } + if ($data['value'] > $wallet->cash) { + throw new UnprocessableEntityHttpException('مقدار برداشت بیشتر از موجودی است'); + } + $Withdraw = Withdraw::create([ + 'customer_id' => auth('customer')->id(), + "cash" => $data['value'], + "note" => "برداشت ریالی", + "bank_account_id" => $data['card_id'], + 'sts' => 1, + 'type' => 2 + ]); + $transaction = new TransactionInterface($wallet_interface_fund, $_inp = [ + "cash" => $data['value'], + 'expire_at' => now(), + 'withdraw_id' => $Withdraw->id, + 'active' => true + ], 4, false, false); + $userMobile = $customer->mobile; // User's mobile number + $userName = $customer->name; // User's name + $withdrawAmount = $data['value']; // amount + + $tahesab = new TahesabController(); + $tahesab->wallet([ + "customer_id" => auth('customer')->id(), + "value" => $data['value'], + "direction" => 1, + ]); + + $companyName = $this->Config('name_fa'); // Company name from configuration + $message = "کاربر $userName با شماره موبایل $userMobile درخواست برداشت مبلغ " . number_format($withdrawAmount) . " ریال را دارد. با تشکر، $companyName"; + if (isset($request->otp)) { + if (Customer::where("id", $customer->id)->first()->token_sms != $request->otp) { + return response()->json(['message' => 'رمز دوم اشتباه میباشد'], 422); + } + try { + $response = Http::withHeaders([ + 'Authorization' => 'Bearer ' . $this->Config('liman_token') + ])->post('https://limangold.ir/kernel/customer/fin', [ + 'receive_bank_shaba' => $bCart->shaba_number, + 'receive_bank_card' => $bCart->cart_number, + 'receive_name' => $customer->name, + 'receive_account_number' => $bCart->account_number, + 'description' => $this->Config('name_fa') . ' | ' . $customer->mobile . ' | ' . $customer->name . ' | ' . $Withdraw->id, + 'amount' => '1000' + ])->json(); + if (isset($response['id'])) { + $Withdraw->note = $response['id']; + $Withdraw->save(); + $message = "کاربر $userName با شماره موبایل $userMobile درخواست برداشت مبلغ " . number_format($withdrawAmount) . " ثبت کرد و به لیمان منتقل شد. با تشکر، $companyName"; + } else { + $message = "کاربر $userName با شماره موبایل $userMobile درخواست برداشت مبلغ " . number_format($withdrawAmount) . " ریال را دارد (مشکل در اتصال به لیمان). با تشکر، $companyName"; + } + } catch (Exception $e) { + $message = "کاربر $userName با شماره موبایل $userMobile درخواست برداشت مبلغ " . number_format($withdrawAmount) . " ریال را دارد (مشکل در اتصال به لیمان). با تشکر، $companyName"; + } + } + User::where('send_sms', 1)->get()->each(function ($admin) use ($message) { + $this->Send($admin->mobile, $message . ' ' . now()->format('H:i:s')); + }); + + return response()->json($Withdraw); + } + + public function withdraw_physical(Request $request) + { + $data = $request->all(); + + $data['customer'] = Customer::with([/*"wallet"*/])->where('id', auth('customer')->id())->first(); + $data['customer']['wallet_interface'] = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type); + + if (!isset($data['address_id'])) { + return response()->json(['message' => 'آدرس انتخاب نشده است'], 422); + } + + $data['adress'] = Address::find($data['address_id']); + if (!$data['adress'] || $data['adress']->customer_id != $data['customer']->id) { + return response()->json(['message' => 'آدرس معتبر نیست یا متعلق به شما نمی‌باشد'], 403); + } + foreach ($data['wallets'] as $key => $wallet) { + $data['wallets'][$key]['wallet'] = Wallet::with(["product"])->find($wallet['wallet_id']); + if (!$data['wallets'][$key]['wallet']) { + return response()->json(['message' => 'ولت مورد نظر یافت نشد.'], 422); + } + if ($data['wallets'][$key]['wallet']->owner != $data['customer']['id']) { + return response()->json(['message' => 'ولت انتخاب شده متعلق به شما نمی‌باشد.'], 422); + } + // بررسی وجود محصول در ولت + if (!$data['wallets'][$key]['wallet']['product']) { + return response()->json(['message' => 'محصولی در ولت مورد نظر یافت نشد.'], 422); + } + if ($data['wallets'][$key]['value'] > $data['wallets'][$key]['wallet']['gold']){ + return response()->json([ + 'message' => "شما به اندازه کافی از {$data['wallets'][$key]['wallet']['product']['title']} ندارید" + ], 422); + } + + if ($data['wallets'][$key]['value'] == 0) { + return response()->json([ + 'message' => "مقدار انتخابی نمی‌تواند صفر باشد. لطفاً مقدار صحیحی را برای {$data['wallets'][$key]['wallet']['product']['title']} وارد کنید." + ], 422); + } + + + $data['wallets'][$key]['wallet_interface'] = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type, null, $data['wallets'][$key]['wallet']["product_id"]); + } + $data['withdraw'] = new Withdraw(); // Create a new instance of the Withdraw model + $data['withdraw']->note = "برداشت فیزیکی"; // 50 for phisicals + $data['withdraw']->address_id = $data['address_id']; + $data['withdraw']->customer_id = $data['customer']['id']; + $data['withdraw']->sts = 50; + $data['withdraw']->save(); + foreach ($data['wallets'] as $key => $wallet) { + $data['wallets'][$key]['transaction'][] = new TransactionInterface($data['wallets'][$key]['wallet_interface'], $_inp = [ + "gold" => $data['wallets'][$key]['value'], + "number" => $data['wallets'][$key]['wallet']['product']['amount']*$data['wallets'][$key]['value'], + "product_id" => $data['wallets'][$key]['wallet']['product']['id'], + 'expire_at' => now(), + 'active' => true, + 'title' => " برداشت {$data['wallets'][$key]['wallet']['product']['title']}", + 'note' => " برداشت محصول {$data['wallets'][$key]['wallet']['product']['title']} شماره سند {$data['withdraw']->id}", + 'withdraw_id' => $data['withdraw']->id, + ], 6, false); + } + + return response()->json($data['withdraw']['id']); + } + public function indexWithdraw(Request $request){ + $records = Withdraw::with(['customer','bank_account','Address',"Transaction"])->where("customer_id",auth('customer')->id()); + TableEngine::create($records, $request->all()) + ->initSearch(['customer.name']) + ->select([ + '*',Withdraw::$SELECT_STS_STR,Withdraw::$SELECT_DAJ + ])->export($records); + return response()->json($records); + } + public function index_withdraw_physical(Request $request){ + $records = Withdraw::with(['customer','bank_account','Address',"Transaction.product"])->where("customer_id",auth('customer')->id())->whereBetween('sts', [49, 70]); + TableEngine::create($records, $request->all()) + ->initSearch(['customer.name']) + ->select([ + '*',Withdraw::$SELECT_STS_STR,Withdraw::$SELECT_DAJ + ])->export($records); + return response()->json($records); + } + + public function withdrawOtp(Request $request) + { + $customer = auth('customer')->user(); + $otp = rand(1000, 9999); + $customer->token_sms = $otp; + $customer->save(); + $this->Send( + $customer->mobile, + 'رمز عبور یکبار مصرف شما جهت برداشت پول از اپلیکیشن ' . $this->Config('name_fa') . ' می باشد: ' . $otp + ); + return response()->json(true); + } + +} diff --git a/app/Http/Controllers/Finance/FinanceController.php b/app/Http/Controllers/Finance/FinanceController.php new file mode 100755 index 0000000..5811b83 --- /dev/null +++ b/app/Http/Controllers/Finance/FinanceController.php @@ -0,0 +1,230 @@ +initSearch(['price']) + ->select(['*']) + ->export($transactions_admins); + return response()->json($transactions_admins); + } + public function index() + { + $tallaPrice = Price::latest()->first(); +// $talla->update_date = Verta::instance(Carbon::parse($talla->updated_at))->format('Y/n/j-H:i'); + $new_customer_major = Customer::where('type',1)->whereDate('created_at','<=',now())->whereDate('created_at','>=',now()->subMonths(3)) + ->count(); + $new_customer_single = Customer::where('type',2)->whereDate('created_at','<=',now())->whereDate('created_at','>=',now()->subMonths(3)) + ->count(); + $all_customer_major = Customer::where('type',1)->count(); + $all_customer_single = Customer::where('type',2)->count(); + $archive_customer_major = Customer::where('type',1)->where('is_archive',true)->count(); + $archive_customer_single = Customer::where('type',2)->where('is_archive',true)->count(); + $all_gold = Order::where('direction',2)->where('type',1)->sum('amount');// جمع طلاهایی که از مشتری خریدیم + $all_gold_single = Order::where('direction',2)->where('type',2)->sum('amount');// جمع طلاهایی که از مشتری خریدیم + $await_list = Order::where('direction',1)->where('sts',1)->get(); + $best_customer_major=Order::with('customer')->where('type',1)->where('sts',2)->select('customer_id',DB::raw('sum(amount) as amount')) + ->groupBy('customer_id')->limit(10)->get(); + $best_customer_single=Wallet::with('customer')->whereNull('fund_id')->where('owner_type',2)->orderBy('gold','desc')->limit(10)->get(); + + + // GT + $GT_all_customers = Customer::where('type',2)->where('is_archive',false)->count(); + $GT_no_login_customers = Customer::where('type',2)->where('is_archive',false)->where('last_seen_at',null)->count(); + $GT_no_valid_customers = Customer::where('type',2)->where('is_archive',false)->where('is_legal',0)->count(); + $GT_no_valid_customers_data = Customer::where('type',2)->where('is_archive',false)->where('is_legal',0)->get(['id','name','mobile']); + $GT_active_customers = Customer::where('type', 2) + ->where('is_archive', false) + ->whereIn('id', function($query) { + $query->select('owner') + ->from('wallets'); + })->count(); + $GT_active_customers_data = Customer::where('type', 2) + ->where('is_archive', false) + ->whereIn('id', function($query) { + $query->select('owner') + ->from('wallets'); + })->get(['id','name','mobile']); + + $transactions_admins = TransactionsAdmin::with(['withdraw','order',"user",'customerTo','customer'])->get(); + + return view('app', compact( + 'GT_all_customers', + 'GT_no_login_customers', + 'GT_no_valid_customers', + 'GT_no_valid_customers_data', + 'GT_active_customers', + 'GT_active_customers_data', + 'transactions_admins', + 'tallaPrice', + 'new_customer_major', + 'new_customer_single', + 'all_customer_major', + 'all_customer_single', + 'archive_customer_major', + 'archive_customer_single', + 'all_gold', + 'all_gold_single', + 'await_list', + 'best_customer_major', + 'best_customer_single' + ))->with('GT_deActive_customers', $GT_all_customers - $GT_active_customers) + ->with('price', $tallaPrice->price); + + + } + public function startTransation(Request $request) + { + + $user = auth()->user(); +// riyal to tomman + $tomman = $request->value; + $riyal = (int)($request->value / 10); + $riyal .= 0; + $request->value = (int)($request->value / 10); + + $Withdraw = Withdraw::create([ + 'customer_id' => auth('customer')->id(), + "cash" => $riyal, + 'sts' => 1, + ]); + + $url = 'https://zify.ir/api/order/v2/create'; + + $payload = [ + "payer" => [ + "first_name" => $user->fname, + "last_name" => $user->lname, + "phone" => $user->mobile, + "email" => "", + "state" => $user->city, + "city" => $user->province, + "address_1" => $user->id, + "address_2" => $user->shop_name + ], + "products" => [ + [ + "code" => "1", + "sellQuantity" => 1, + "title" => "IRR", + "amount" => $request->value, + "unlimited" => true, + "quantity" => $request->value, + "description" => "charge_account" + ] + ], + "returnUrl" => "https://api.gholaktala.ir/customer/charge_account_verify", + "clientRefId" => "$Withdraw->id", + "shipping_total" => 0, + "off_total" => 0, + "tax_total" => 0 + ]; + + $response = Http::withToken(env('ZIFI_TOKEN_GHOLAKTALLA')) + ->post($url, $payload); + if ($response->successful()) { + $responseData = $response->json(); + + $orderCode = $responseData['data']['order'] ?? null; + if ($orderCode) { + $Withdraw->tracked_number = $orderCode; + $Withdraw->save(); + return "https://zify.ir/order/accept/{$orderCode}"; + } else { + return response()->json([ + 'message' => 'Order created successfully but order code is missing', + 'data' => $responseData + ]); + } + } else { + $response = $response->json(); + return response()->json([$response][0], 422); + } + } + + public function verifyTransation() + { + + $Withdraw = Withdraw::with('customer')->where('id', $_GET['clientrefid'])->first(); + + $User = Customer::where('id', $Withdraw->customer_id)->first(); + $url = 'https://zify.ir/api/order/v2/verify'; + $payload = [ + "order" => "$Withdraw->tracked_number", + ]; + $verifyResponse = Http::withToken(env('ZIFI_TOKEN_GHOLAKTALLA')) + ->post($url, $payload); + $decodedResponse = json_decode($verifyResponse, true); + $verifyMessage = $decodedResponse['message']; +// return $decodedResponse['data']; + + if (isset($decodedResponse['data']['refid']) || $verifyMessage == []) { + if ($Withdraw->cash == $decodedResponse['data']['amount'] * 10) { + $Withdraw->zify_code = $Withdraw->tracked_number;//ok + $Withdraw->tracked_number = $decodedResponse['data']['refid'];//ok + $Withdraw->sts = 2;//ok + $Withdraw->save(); + + $wallet_interface_fund = new WalletInterface($User->id, $User->type); + $transaction = new TransactionInterface($wallet_interface_fund, $_inp = [ + "cash" => $decodedResponse['data']['amount'] * 10, + 'expire_at' => now(), + 'withdraw_id' => $_GET['clientrefid'], + 'active' => true + ], 3, false, true); + +//----------sms +// User information + $userMobile = $Withdraw->customer->mobile; // User's mobile number + $userName = $Withdraw->customer->name; // User's name + $chargedAmount = $Withdraw->cash; // Charged amount +// Company name + $companyName = $this->Config('name_fa'); // Company name from configuration + +// Constructing the SMS message + $message = "کاربر $userName با شماره موبایل $userMobile حساب خود را به مقدار " . number_format($chargedAmount) . " ریال شارژ کرد. با تشکر، $companyName"; + +// Getting admin mobile numbers and sending the SMS + User::where('active', 1)->get()->each(function($admin) use ($message) { + $this->Send($admin->mobile, $message); + }); + + + + return view('showTransactionReport', compact('Withdraw')); + return redirect('https://app.gholaktala.ir/transactions'); + + } + return "مبلغ پرداختی دستکاری شده !"; + } else { + + $Withdraw->tracked_number; + $Withdraw->sts = 3;//no + $Withdraw->save(); + return view('showTransactionReport', compact('Withdraw')); + } + + + } +} diff --git a/app/Http/Controllers/Single/BankAccountController.php b/app/Http/Controllers/Single/BankAccountController.php new file mode 100755 index 0000000..7cde313 --- /dev/null +++ b/app/Http/Controllers/Single/BankAccountController.php @@ -0,0 +1,55 @@ +id()); + $request->request->add(['customer_id' => auth('customer')->id()]); + parent::__construct(BankAccount::class, [], ['*', BankAccount::$SELECT_STS_STR], null, $query); + } + + public function destroy($id) + { + $account = BankAccount::findOrFail($id); + if ($account->sts != 3) { + throw new UnprocessableEntityHttpException('امکان حذف این کارت بانکی وجود ندارد'); + } + return parent::destroy($id); + } + + public function listActiveBankAccount() + { + $query = BankAccount::where('customer_id', auth('customer')->id()) + ->whereIn('sts', [1, 2])->get(); + return response()->json($query); + } + public function StoreBankAccount(Request $request) + { + if (empty($request->shaba_number) || empty($request->bank_name) ){ +// || empty($request->cart_number) || empty($request->account_number)) { + throw new UnprocessableEntityHttpException('اطلاعات کارت را کامل وارد کنید.'); + } + $customer = Customer::find(auth('customer')->id()); + $message = "کارت جدیدی برای $customer->name ساخته شد منتظر تایید شما هستیم."; + $message .= $this->Config('name_fa'); + + User::where('active', 1) ->where('send_sms', 1)->get()->each(function($admin) use ($message) { + $this->Send($admin->mobile, $message); + }); + $data = $request->only(['account_number', 'bank_name', 'cart_number', 'shaba_number', 'customer_id']); + BankAccount::create($data); + return response()->json($data); + } + +} diff --git a/app/Http/Controllers/Single/SingleOrderController.php b/app/Http/Controllers/Single/SingleOrderController.php new file mode 100755 index 0000000..89a7825 --- /dev/null +++ b/app/Http/Controllers/Single/SingleOrderController.php @@ -0,0 +1,541 @@ +all(); + $transactionType = $data['direction'] == 1 ? "خرید" : "فروش"; + if (auth('customer')->id()) { + $data['customer_id'] = auth('customer')->id(); + $latestPrice = Price::latest()->first(); + $data['all_price'] = $latestPrice; + $data['price'] = $latestPrice->price; + $data['price_id'] = $latestPrice->id; + $data['difference'] = config('fee.cash'); + $data['service_charge_percentage'] = config('fee.service_charge_percentage'); + $data['pay_at'] = (new \DateTime())->format('Y-m-d H:i:s'); + } else if (auth('user')->id()) {//admin + $data['service_charge_percentage'] = 0; + } + $data['sts'] = 2; + $data['type'] = 2; + $data['payment_sts'] = 4; + $data['price_original'] = $data['price']; + $data['payment_remind'] = 0; + $data['fee'] = $data['difference']; + $wallet_interface = new WalletInterface($data['customer_id'], 2); + $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); + $response = []; + + + // Check if the user wants to transact with a product or non-product (gold) + if (isset($data['product_id']) and $data['product'] = Product::find($data['product_id'])) { + // Check if the user wants to buy + if ($data['direction'] == 1) { + + $data['service_charge_percentage'] = ($data['product']['percent_fee_buy']) * $data['number']; + $data['difference'] = $data['fee'] = $data['product']['cash_fee_buy']; + $data['total_price_original'] = $data['product']['amount'] * ($data['price_original'] ?? 0); + + // Check if the method is cash + if ($data['method'] == "cash") { + $response['buy'] = $this->processBuyTransactionProduct($data, $wallet, $wallet_interface); + } // Check if the method is gold + else if ($data['method'] == "gold") { + + $response['buy'] = $this->processBuyTransactionProductByGold($data, $wallet, $wallet_interface); + } + } // Check if the user wants to sell + else if ($data['direction'] == 2) { + $data['service_charge_percentage'] = ($data['product']['percent_fee_sell']) * $data['number']; + $data['difference'] = $data['fee'] = $data['product']['cash_fee_sell']; + $data['total_price_original'] = $data['product']['amount'] * ($data['price_original'] ?? 0); + + // Check if the method is cash + if ($data['method'] == "cash") { + $response['sell'] = $this->processSellTransactionProduct($data, $wallet, $wallet_interface); + } // Check if the method is gold + else if ($data['method'] == "gold") { + $response['sell'] = $this->processSellTransactionProductByGold($data, $wallet, $wallet_interface); + } + } + } else { + // Calculate total price and fee for non-product (gold) transaction + $data['total_price_original'] = $data['amount'] * ($data['price_original'] ?? 0); + $data['total_fee'] = $data['amount'] * $data['difference']; + $data['product'] = Product::find(13); + // Check if the user wants to buy + if ($data['direction'] == 1) { + if (!$data['product']['open_buy']) { + throw new UnprocessableEntityHttpException('خرید این محصول در این لحظه مقدور نمیباشد'); + } + $response['buy'] = $this->processBuyTransaction($data, $wallet, $wallet_interface); + } // Check if the user wants to sell + else if ($data['direction'] == 2) { + if (!$data['product']['open_sell']) { + throw new UnprocessableEntityHttpException('خرید این محصول در این لحظه مقدور نمیباشد'); + } + $response['sell'] = $this->processSellTransaction($data, $wallet, $wallet_interface); + } + } +// try { +// $tahesab = new TahesabController(); +// $data['tahesab'] = $tahesab->storeTrade($data); +// }catch (\Exception $e){ +// return response($e->getMessage(), 500); +// } + +// $response['reward'] = $this->give_order_reward($data, $wallet, $wallet_interface); + $response['Notifications'] = $this->sendTransactionNotifications($data, $transactionType); + return response()->json([$response, $data]); + } + + private function processBuyTransaction(&$data, $wallet, $wallet_interface) + { + + $response = []; + $data['price'] += $data['difference']; + $data['total_price'] = $data['amount'] * $data['price']; + $data['payment_amount'] = $data['total_price']; + + $data['service_charge'] = $data['service_charge_percentage'] * $data['amount']; + $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; + $data['amount'] -= $data['service_charge']; + if ($wallet->cash < $data['payment_amount']) { + throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); + } + $data['order'] = $order = Order::create($data); + new TransactionInterface($wallet_interface, [ + "cash" => $data['payment_amount'], + "gold" => $data['amount'], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id, + 'start_at' => now(), + ], 1, true, false); + $response['1'] = 2; + //send to liman + if ($this->Config('do_send_liman') == "true") { + $payload = [ + 'amount' => "$order->amount", + 'description' => $this->Config('name_fa') . " - " . auth('customer')->user()->name, + 'ref_id' => $order->id, + 'direction' => 1, + 'product_id' => 2 + ]; + + return $response = Http::withToken($this->Config('liman_token')) + ->post("https://limangold.ir/kernel/customer/order", $payload)->json(); + $order->total_price_liman = $response["payment_amount"]; + $order->save(); + } + return $response; + } + + private function processBuyTransactionProduct(&$data, $wallet, $wallet_interface) + { + + $data['price'] += $data['difference']; + $data['amount'] = $data['number'] * $data['product']['amount']; + $data['total_amount'] = $data['amount']+($data['product']['percent_fee_buy']*$data['amount']); + $data['total_price'] = $data['total_amount'] * $data['price']; + $data['payment_amount'] = $data['total_price']; + $data['service_charge'] = ($data['product']['percent_fee_buy']*$data['amount']); + $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; + $data['wallet'] = $wallet; + if ($wallet->cash < $data['payment_amount']) { + throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); + } + if (!$data['product']['open_buy']) { + throw new UnprocessableEntityHttpException('خرید این محصول در این لحظه مقدور نمیباشد'); + } + $data['order'] = $order = Order::create($data); + $data['transaction'][] = new TransactionInterface($wallet_interface, $_inp = [ + "number" => $data['number'], + "cash" => $data['total_price'], + "product_id" => $data["product_id"], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id, + 'title' => "برداشت وجه نقد" + ], 12, false,false); + $wallet_interface_product = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type, null, $data["product_id"]); + $wallet_interface_product->wallet->gold = intval($wallet_interface_product->wallet->gold); + $wallet_interface_product->wallet->save(); + new TransactionInterface($wallet_interface_product, [ + "gold" => $data['number'], + "product_id" => $data["product_id"], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id, + 'start_at' => now(), + ], 1, true, false); + + + } + + private function processBuyTransactionProductByGold(&$data, $wallet, $wallet_interface) + + { + + $data['price'] += $data['difference']; + $data['amount'] = $data['number'] * $data['product']['amount']; + $data['total_amount'] = $data['amount']+($data['product']['percent_fee_buy']*$data['amount']); + $data['total_price'] = $data['total_amount'] * $data['price']; + $data['payment_amount'] = $data['total_price']; + $data['service_charge'] = ($data['product']['percent_fee_buy']*$data['amount']); + $data['total_fee'] = 0; + $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; + $data['wallet'] = $wallet; + if ($wallet->gold < $data['total_amount']) { + throw new UnprocessableEntityHttpException('موجودی طلایی شما کمتر از میزان سفارش است'); + } + if (!$data['product']['open_buy']) { + throw new UnprocessableEntityHttpException('خرید این محصول در این لحظه مقدور نمیباشد'); + } + $data['order'] = $order = Order::create($data); + $data['transaction'][] = new TransactionInterface($wallet_interface, $_inp = [ + "number" => $data['number'], + "gold" => $data['total_amount'], + "product_id" => $data["product_id"], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id, + 'title' => "برداشت طلای ابشده" + ], 12, false,true); + $wallet_interface_product = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type, null, $data["product_id"]); + $wallet_interface_product->wallet->gold = intval($wallet_interface_product->wallet->gold); + $wallet_interface_product->wallet->save(); + new TransactionInterface($wallet_interface_product, [ + "gold" => $data['number'], + "product_id" => $data["product_id"], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id, + 'start_at' => now(), + ], 1, true, false); + + } + + private function processSellTransaction(&$data, $wallet, $wallet_interface) + { + $response = []; + $data['price'] -= $data['difference']; + $data['service_charge'] = $data['service_charge_percentage'] * $data['amount']; + $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; + $data['total_price'] = $data['amount'] * $data['price'] -$data['service_charge_price']; + $data['payment_amount'] = $data['total_price']; + $data['payment_amount'] -= $data['service_charge_price']; + if ($wallet->gold < $data['amount']) { + throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); + } + $data['order'] = $order = Order::create($data); + new TransactionInterface($wallet_interface, [ + "gold" => $data['amount'], + "cash" => $data['total_price'], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id + ], 2, false, true); + } + + private function processSellTransactionProduct(&$data, $wallet, $wallet_interface) + { + $data['price'] -= $data['difference']; + $data['amount'] = $data['number'] * $data['product']['amount']; + $data['total_amount'] = $data['amount']-($data['product']['percent_fee_sell']*$data['amount']) ; + $data['total_price'] = $data['total_amount'] * $data['price']; + $data['payment_amount'] = $data['total_price']; + $data['service_charge'] = ($data['product']['percent_fee_sell']*$data['amount']); + $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; + $wallet_interface_product = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type, null, $data["product_id"]); + + if ($wallet_interface_product->wallet->gold < $data['number']) { + throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); + } + if (!$data['product']['open_sell']) { + throw new UnprocessableEntityHttpException('فروش این محصول در این لحظه مقدور نمیباشد'); + } + $data['order'] = $order = Order::create($data); + $wallet_interface_product->wallet->gold = intval($wallet_interface_product->wallet->gold); + $wallet_interface_product->wallet->save(); + new TransactionInterface($wallet_interface_product, [ + "gold" => $data['number'], + "product_id" => $data["product_id"], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id, + 'start_at' => now(), + ], 1, false, false); + $data['transaction'][] = new TransactionInterface($wallet_interface, $_inp = [ + "number" => $data['number'], + "cash" => $data['total_price'], + "product_id" => $data["product_id"], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id, + 'title' => "واریز وجه نقد" + ], 12, false,true); + + } + private function processSellTransactionProductByGold(&$data, $wallet, $wallet_interface) + { + $data['price'] -= $data['difference']; + $data['amount'] = $data['number'] * $data['product']['amount']; + $data['total_amount'] = $data['amount']-($data['product']['percent_fee_sell']*$data['amount']) ; + $data['total_price'] = $data['total_amount'] * $data['price']; + $data['payment_amount'] = $data['total_price']; + $data['service_charge'] = ($data['product']['percent_fee_sell']*$data['amount']); + $data['total_fee'] = 0; + $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; + $wallet_interface_product = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type, null, $data["product_id"]); + if ($wallet_interface_product->wallet->gold < $data['number']) { + throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); + } + if (!$data['product']['open_sell']) { + throw new UnprocessableEntityHttpException('فروش این محصول در این لحظه مقدور نمیباشد'); + } + $data['order'] = $order = Order::create($data); + $data['transaction'][] = new TransactionInterface($wallet_interface, $_inp = [ + "number" => $data['number'], + "gold" => $data['total_amount'], + "product_id" => $data["product_id"], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id, + 'title' => "واریز طلای ابشده" + ], 12, true,false); + $wallet_interface_product->wallet->gold = intval($wallet_interface_product->wallet->gold); + $wallet_interface_product->wallet->save(); + new TransactionInterface($wallet_interface_product, [ + "gold" => $data['number'], + "product_id" => $data["product_id"], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id, + 'start_at' => now(), + ], 1, false, false); + } + private function give_order_reward(&$data, $wallet, $wallet_interface) + { + $data['aCustomers'] = []; + $i = 0; + $data['aCustomers'][$i] = Customer::findOrFail($data['customer_id']); + while ($data['aCustomers'][$i + 1] = Customer::where('referral_id', $data['aCustomers'][$i]->referral_to_id)->first()) { + if ($data['aCustomers'][$i + 1]->profit_amount_by_lvl) { + $levels = json_decode(str_replace(['{', '}'], ['[', ']'], $data['aCustomers'][$i + 1]->profit_amount_by_lvl), true); + foreach ($levels as $level) { + if ($level[0] == $i + 1) { +// [$level[1],$data['aCustomers'][$i+1]]; + + if ($this->Config('has_page_earn_money') == true) { + $gift_for_invite = ($data['order']['service_charge'] * $level[1]) / 100; + $profit_receiver = $data['aCustomers'][$i + 1]->id; + $profit_sender = $data['aCustomers'][0]->id; + $Withdraw = Withdraw::create([ + 'user_id' => $profit_sender, + 'customer_id' => $profit_receiver, + "cash" => 0, + "gold" => $gift_for_invite, + 'sts' => 9, + ]); + $wallet_interface = new WalletInterface($profit_receiver, 2); + new TransactionInterface($wallet_interface, $_inp = [ + "cash" => 0, + "gold" => $gift_for_invite, + 'expire_at' => now(), + 'active' => true, + 'withdraw_id' => $Withdraw->id, + 'start_at' => now(), + ], 9, true, false); + $transaction = Transaction::where('customer_id', $profit_receiver)->latest()->first(); + TransactionsAdmin::create([ + 'customer_id' => $profit_sender, + 'customer_to_id' => $profit_receiver, + 'user_id' => $profit_sender, + 'order_id' => $data['order']['id'], + 'wallet' => null, // یا مقدار مناسب دیگری + 'transaction_id' => $transaction->id, + 'cash' => 0, + 'note' => ' سود بابت سفارش', + 'type' => 1, // یا مقدار مناسب دیگری + 'gold' => $gift_for_invite, + 'balance_cash' => 0, // یا مقدار مناسب دیگری + 'balance_gold' => $gift_for_invite, // مقدار صحیح برای `balance_gold` + 'withdraw_id' => $Withdraw->id, + ]); + } + } + } + } + if ($i == 100) break; + $i++; // برای جلوگیری از حلقه بی‌نهایت + } + + + return $data; + } + + private function sendTransactionNotifications(array $data, string $transactionType) + { + $customer = Customer::findOrFail($data['customer_id']); + $companyName = $this->Config('name_fa'); + + $message = "کاربر {$customer->name} با شماره موبایل {$customer->mobile} اقدام به $transactionType {$data['product']['title']} به مقدار " . + "{$data['amount']} گرم به مبلغ " . number_format($data['total_price']) . + " ریال کرد. با تشکر، $companyName"; + User::where('send_sms', 1)->get()->each(function ($admin) use ($message, $data, $transactionType, $companyName) { + $this->send($admin->mobile, $message); + }); + $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); +// $pricePerGram = $data['total_price'] / $data['amount']; + $customerMessage = "$companyName\n$transactionType آبشده\nگرم: {$data['amount']}\n" . + "مبلغ کل: " . number_format($data['total_price']) . "\n\n" . + "موجودی طلایی: {$wallet->gold}\n" . + "مانده ریالی: " . number_format($wallet->cash) . "\n" . + $this->Config('app_url'); + + + // ارسال SMS به مشتری + $this->send($customer->mobile, $customerMessage); + } + + public function storeBackUp(Request $request) + { + $data = $request->all(); + if (auth('customer')->id()) {// متد در پنل کاربر + $data['customer_id'] = auth('customer')->id(); + $data['price'] = Price::orderBy('id', 'desc')->first()->price; + } elseif (auth('user')->user()) {// متد در پنل ادمین + $data['customer_id'] = $request->customer_id; + $data['price'] = $request->price; + } + $data['sts'] = 2; + $data['type'] = 2; + $data['payment_sts'] = 4; + $data['price_original'] = $data['price']; + $add_sell_price = config('add_sell_price.single'); + $wallet_interface = new WalletInterface($data['customer_id'], 2); + $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); + $data['total_price_original'] = $data['amount'] * $data['price_original']; + $data['payment_remind'] = 0; + $data['fee'] = $add_sell_price; + $data['total_fee'] = $data['amount'] * $data['fee']; + + if ($data['direction'] == 1) { + $data['price'] += $add_sell_price; + $data['total_price'] = $data['amount'] * $data['price']; + $data['payment_amount'] = $data['total_price']; + + if ($wallet->cash < $data['total_price']) { + throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); + } + $order = Order::create($data);//buy + new TransactionInterface($wallet_interface, $_inp = [ + "cash" => $data['total_price'], + "gold" => $data['amount'], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id, + 'start_at' => now(), + ], 1, true, false); + } else {//sell + $data['price'] -= $add_sell_price; + $data['total_price'] = $data['amount'] * $data['price']; + $data['payment_amount'] = $data['total_price']; + if ($wallet->gold < $data['amount']) { + throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); + } + $order = Order::create($data); + new TransactionInterface($wallet_interface, $_inp = [ + "gold" => $data['amount'], + "cash" => $data['total_price'], + 'expire_at' => now(), + 'active' => true, + 'order_id' => $order->id + ], 2, false, true); + } + + //----------------------------------------------------------------------------sms + // Determine transaction type + $transactionType = ($data['direction'] == 1) ? "خرید" : "فروش"; + + // User information + $customer = Customer::where("id", $data['customer_id'])->firstOrFail(); + $userMobile = $customer->mobile; // User's mobile number + $userName = $customer->name; // User's name + $chargedAmount = $data['total_price']; // Total price in Rial + $chargedAmountGold = $data['amount']; // Amount of gold + + // Company name + $companyName = $this->Config('name_fa'); // Company name from configuration + + // Constructing the SMS message + $message = "کاربر $userName با شماره موبایل $userMobile اقدام به $transactionType طلا به مقدار " . $chargedAmountGold . " گرم به مبلغ " . number_format($chargedAmount) . " ریال کرد. با تشکر، $companyName"; + + // Getting admin mobile numbers and sending the SMS + + User::where('active', 1)->get()->each(function ($admin) use ($message) { + $this->Send($admin->mobile, $message); + }); + + $Walet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); + $companyName = $this->Config('name_fa'); + $companyurl = $this->Config('app_url'); + $weight = $data['amount']; + + $totalAmount = $data['total_price']; + $pricePerGram = $totalAmount / $weight; + + $goldBalance = $Walet->gold; + $remainingBalance = $Walet->cash; + + $message = "$companyName\n"; + $message .= "خرید آبشده\n"; + $message .= "گرم: $weight\n"; + $message .= "قیمت گرم: " . number_format($pricePerGram) . "\n"; + $message .= "مبلغ کل: " . number_format($totalAmount) . "\n\n"; + $message .= "موجودی طلایی: $goldBalance\n"; + $message .= "مانده ریالی: " . number_format($remainingBalance) . "\n"; + $message .= "$companyurl" . "\n"; + $this->Send($customer->mobile, $message); + return response()->json($order); + } + + public function table(Request $request) + { + $records = Order::where('customer_id', auth('customer')->id()) + ->where('type', 2); + TableEngine::create($records, $request->all()) + ->initSearch([]) + ->select([ + '*', Order::$SELECT_STS_STR + ])->export($records); + return response()->json($records); + } +} diff --git a/app/Http/Controllers/Site/CityController.php b/app/Http/Controllers/Site/CityController.php new file mode 100755 index 0000000..ff90ee8 --- /dev/null +++ b/app/Http/Controllers/Site/CityController.php @@ -0,0 +1,23 @@ +get(); + return response()->json($city); + } + public function cityList($state_id){ + $city = City::where('parent_id',$state_id)->get(); + return response()->json($city); + } + public function cityListAll(){ + $city = City::all(); + return response()->json($city); + } +} diff --git a/app/Http/Controllers/Site/ReportController.php b/app/Http/Controllers/Site/ReportController.php new file mode 100755 index 0000000..32a5f9a --- /dev/null +++ b/app/Http/Controllers/Site/ReportController.php @@ -0,0 +1,248 @@ +whereDate('date_at', '<=', date("Y-m-d")) + ->whereDate('date_at', '>', Carbon::now()->subDays(30)->format("Y-m-d")) + ->get()->toArray(); + $a = []; + foreach ($candle as $c) { + $create['date'] = $c["date_at"]; + unset($c["date_at"]); + $create['candle'] = array_values($c); + $a[] = array_values($create); + } + return response()->json($a); + } + + public function updatePrise() + { + $difference = config('fee.single'); + $lastPrice = Price::latest()->first(); + $PriceTriggers = PriceTrigger::where("is_active", true)->get(); + foreach ($PriceTriggers as $PriceTrigger) { + $priseGold = $PriceTrigger->dirction == 1 + ? $lastPrice->price - $difference + : ($PriceTrigger->dirction == 2 ? $lastPrice->price + $difference : $lastPrice->price); + + if (eval('return $priseGold ' . $PriceTrigger->price_condition . ' $PriceTrigger->target_price;')) { + $customer = Customer::find($PriceTrigger->customer_id); + $message = "قیمت طلا به " . number_format($priseGold, -1) . " در هر گرم رسید\n" .$this->Config('name_fa'); + if ($PriceTrigger->action == 'email') { + Mail::to("$customer->email")->send(new YourMailableClass($message, '', '', '', '')); + } elseif ($PriceTrigger->action == 'sms') { + $this->send($customer->mobile, $message); + } + $PriceTrigger->is_active = false; + $PriceTrigger->triggered_at = Carbon::now(); + $PriceTrigger->save(); + } + + } + + return response()->json(); + } + + public function upDownPrice() + { + $difference = config('fee.single'); + $today = Carbon::now()->format("Y-m-d"); + $prises = Price::where('date_at', $today)->get("price"); + + $minP = 0; // Initialize to the highest possible value + $maxP = 0; // Initialize to the lowest possible value + + foreach ($prises as $p) { + // Initialize $minP to the first price if it's null + if ($minP == 0 || $p->price < $minP) { + $minP = $p->price; + } + + // Initialize $maxP to the first price if it's null + if ($maxP == 0 || $p->price > $maxP) { + $maxP = $p->price; + } + } + if (count($prises) === 0) { + // Fetching the current gold price from the API + $response = Http::get('https://www.tala.ir/ajax/price'); + $data = $response->json(); + + // Clean the price value retrieved from API + $data['gold']['gold_18k']['v'] = str_replace(',', '', $data['gold']['gold_18k']['v']); + $priceValue = $data['gold']['gold_18k']['v'] * 10; // Assuming the multiplication by 10 is needed + + // Create and save the new Price instance + $price = new Price(); + $price->price = $priceValue; // Assign the cleaned and calculated price value + $price->time_at = Carbon::now()->toTimeString(); // Set current time + $price->date_at = Carbon::now()->toDateString(); // Set current date + $price->save(); // Save to the database + + return ['sell' => $price->price - $difference, 'buy' => $price->price + $difference]; + } else { + + // Assuming $minP and $maxP are defined elsewhere in your code + return ['sell' => $minP - $difference, 'buy' => $maxP + $difference]; + } +// return $prises; +// $add_sell_price = config('add_sell_price.major'); +// $price = PriceCandle::whereDate('date_at',)->first(); +// $price_price = Price::orderBy('id','desc')->first(); + } + + public function lastPrice() + { + $difference = config('fee.single'); + + +// try { +// $tala_ir = (int)str_replace(',', '', Http::timeout(2)->get('https://www.tala.ir/ajax/price')->json()['gold']['gold_18k']['v']) * 10; +// } catch (\Exception $e) {$tala_ir = 0;} + + $main_product_id = Cnt::where('key', 'main_product')->first()['value']; + $pr_product = Product::find($main_product_id); + $priceValue = $pr_product['price'] + $pr_product['price_profit'];//$tala_ir;//4000 + $lastPrice = Price::latest()->first(); + if (!$lastPrice || $lastPrice->price != $priceValue and $priceValue > 30000000) { + $price = new Price(); + $price->price = $priceValue; // Assign the cleaned price value + $price->time_at = Carbon::now()->toTimeString(); + $price->date_at = Carbon::now()->toDateString(); + $price->save(); + $this->updatePrise(); + + $candle = PriceCandle::whereDate('date_at',date("Y-m-d"))->first(); + if (!is_null($candle)){ + $candle->end = $priceValue; + if ($priceValue < $candle->low){ + $candle->low = $priceValue;} + elseif ($priceValue > $candle->high){ + $candle->high = $priceValue;}$candle->save(); + }else{ + PriceCandle::create([ + "start"=>$priceValue, + "end"=>$priceValue, + "high"=>$priceValue, + "low"=>$priceValue, + "date_at"=>date("Y-m-d") + ]); + } + } + $price = Price::orderBy('id', 'desc')->first(); + if ($price) { + return [ + 'sell' => $price->price - $difference, + 'buy' => $price->price + $difference, + 'price_last' => $price->price + $difference, + 'price' => $priceValue, +// 'tala_ir' => $tala_ir, +// 'henzagold' => $henzagold_18, +// 'Ounce' => $henzagold_ons_gold, +// 'milli' => $milli, + ]; + } else { + return []; + } + + } + + public function check() + { + $service = Http:: + withHeaders([ + 'accept' => 'application/json', + 'Authorization' => 'Bearer ohxsrbjagqvbt0glaygt' + ])->get('https://studio.persianapi.com/index.php/web-service/common/gold-currency-coin?format=json&limit=30&page=1') + ->json(); + $list = []; + if (isset($service['result'])) { + foreach ($service['result'] as $item) { + if ($item['key'] == 137120 || $item['key'] == 137119) { + $list[] = $item; + if ($item['key'] == 137120) { + (new PriceController())->store(new Request(["price" => $item['price']])); + } + } + } + Cnt::where('key', 'price')->update(['value_json' => $list]); + } + + } + + public function test() + { + $a = '{{12, 23, {4, 0, {1}, {1}}}, 0, {1}}'; + $b = str_split($a); + $c = []; + $str = ""; + foreach ($b as $item) { + if ($item != " ") { + print_r($item); + print_r('++'); + if ($item == ',' || $item == '}') { + if (!in_array($c[count($c) - 1], ['{', '}'])) { + $c[count($c) - 1] += (int)$str; + print_r((int)$str); + print_r('^^'); + } else { + $c[] = $str; + print_r($c); + print_r('&&'); + } + $str = ""; + } elseif (in_array($item, ['{', '}'])) { + $c[] = $item; + print_r($c); + print_r('**'); + } else { + $str .= $item; + print_r($str); + print_r('@@'); + } + } + } + dd($c); + $d = []; + $e = []; + foreach ($c as $item) { + if ($item == '}') { + print_r($d[count($d) - 1]); + print_r('***'); + $e[] = $d[count($d) - 1]; + } else { + $d[] = $item; + print_r($d); + print_r('-----'); + } + } + dd($e); + + } +} diff --git a/app/Http/Controllers/Site/myNotificationController.php b/app/Http/Controllers/Site/myNotificationController.php new file mode 100755 index 0000000..3ae7c2f --- /dev/null +++ b/app/Http/Controllers/Site/myNotificationController.php @@ -0,0 +1,26 @@ +notificationService = $notificationService; + } + + public function mySendNotification(Request $request) + { + return 1; + $message = $request->input('message'); + $response = $this->notificationService->sendNotification($message); + + return response()->json($response); + } +} diff --git a/app/Http/Controllers/SuperController.php b/app/Http/Controllers/SuperController.php new file mode 100755 index 0000000..d8c8a1f --- /dev/null +++ b/app/Http/Controllers/SuperController.php @@ -0,0 +1,166 @@ +model = $model; + $this->with = $with; + $this->select = $select; + $this->name_model = $name_model; + $this->query = $query; + $this->search = $search; + } + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\jsonResponse + */ + public function store(Request $request) + { + $data = $request->all(); + + if (isset($data['fname']) && isset($data['lname'])){ + $data['name'] = $data['fname'] . ' ' . $data['lname']; + } + + if (isset($data['user_type']) && !is_int($data['user_type'])){ + $cnt = Cnt::set('user_type',$data['user_type']); + $data['user_type'] = $cnt->id; + } + + if (!is_null($this->name_model)){ + if ($this->name_model == 'user' | $this->name_model == 'customer'){ + if (!isset($data['password'])){ + $data['password'] = trim($data['mobile']); + } + if ($this->name_model == 'customer'){ + + $characters = '0123456789abcdefghijklmnopqrstuvwxyz'; + $charactersLength = strlen($characters); + do { + $uniqueId = ''; + for ($i = 0; $i < 4; $i++) { // ایجاد یک کد چهار رقمی + $index = random_int(0, $charactersLength - 1); + $uniqueId .= $characters[$index]; + } + // بررسی اینکه آیا کد ایجاد شده یونیک است + $existingCustomer = $this->model::where('referral_id', $uniqueId)->first(); + } while ($existingCustomer); // تکرار تا زمانی که کد یونیک ایجاد شود + $data['referral_id'] = $uniqueId; // ذخیره کد یونیک در فیلد referral_id + + $message = "{$data['name']} عزیز، اکانت شما در پلتفرم {$this->Config('name_fa')} ایجاد شد.\nنام کاربری: {$data['mobile']}\nورود به نرم افزار: {$this->Config('app_url')}"; + + $this->Send($data['mobile'], $message); + + } + } + } + $user = $this->model::create($data); + return $this->resultCreate($user->id); + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\jsonResponse + */ + public function show($id) + { + + $user = $this->model::with($this->with) + ->select($this->select) + ->findOrFail($id); + return response()->json($user); + } + + + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\jsonResponse + */ + public function update(Request $request, $id) + { + $data= $request->all(); + if (isset($data['mobile']) && !is_null($data['mobile'])){ + $check_mobile = $this->model::where('mobile',$data['mobile']) + ->where('id','<>',$id) + ->first(); + if (!is_null($check_mobile)){ + throw new UnprocessableEntityHttpException('این شماره همراه توسط شخص دیگری در حال استفاده است'); + } + } + if (isset($data['fname']) && isset($data['lname'])){ + $data['name'] = $data['fname'] . ' ' . $data['lname']; + } + if (isset($data['user_type']) && !is_int($data['user_type'])){ + $cnt = Cnt::set('user_type',$data['user_type']); + $data['user_type'] = $cnt->id; + } + + $this->model::findOrFail($id) + ->update($data); + return response()->json(true); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\jsonResponse + */ + public function destroy($id) + { + $this->model::findOrFail($id)->delete(); + return response()->json(true); + } + + /** + * @param $id + * @return \Illuminate\Http\JsonResponse + */ + public function active($id){ + $query = $this->model::findOrFail($id); + $query->update([ + 'active'=>!$query->active + ]); + return response()->json(true); + } + + public function table(Request $request) + { + $data = $request->all(); + if (isset($data["select"]) && is_null($data["select"])){ + $data["select"] = []; + } + if (is_null($this->query)){ + $query_table = $this->model::with($this->with); + //*******کداضافه شده +// ->where('active', '<=', now()) // فیلتر محصولات فعال +// ->get(); + //********* + }else{ + $query_table = $this->query; +// $query_table = $query_table->where('active', '<=', now()); + } + TableEngine::create($query_table, $data) + ->initSearch($this->search) + ->select($this->select) + ->export($query_table); + return $query_table; + + } +} diff --git a/app/Http/Controllers/pay/PaymanController.php b/app/Http/Controllers/pay/PaymanController.php new file mode 100755 index 0000000..50cb7b0 --- /dev/null +++ b/app/Http/Controllers/pay/PaymanController.php @@ -0,0 +1,166 @@ + 'cookiesession1=678A8C341A085F7AF93FECC7B44ACDFF']) + ->asForm() + ->post('https://payman2.sandbox.faraboom.co/oauth/token', [ + 'Client_id' => 'demopayman', + 'Client_secret' => '!8cr?40V', + 'Grant_type' => 'client_credentials', + ]); + + $this->accessToken = $response->json()['access_token']; + + return $response->json(); + } + + /** + * Create a Payman account. + */ + public function create() + { + $t = Uuid::uuid4()->toString(); + $response = Http::withHeaders([ + 'app-key' => 'demopayman', + 'Client-Ip-Address' => '127.0.0.1', + 'Client-Platform-Type' => 'web', + 'Client-Device-Id' => '169.254.75.178', + 'Client-User-Id' => '09352673656', + 'Client-User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36', + 'Content-Type' => 'application/json', + 'Mobile-no' => '09352673656', + 'National-code' => '0082205388', + 'Authorization' => 'Bearer b71c3737-7b89-4f2c-9301-767439079407', + 'Cookie' => 'cookiesession1=678A8C341A085F7AF93FECC7B44ACDFF', + ]) + ->post('https://payman2.sandbox.faraboom.co/v1/payman/create', [ + 'payman' => [ + 'bank_code' => 'SINAIR', + 'user_id' => 'demopayman', + 'permission_ids' => [1], + 'contract' => [ + 'expiration_date' => '2026-01-15T01:28:09.5662061+04:30', + 'max_daily_transaction_count' => 50, + 'max_monthly_transaction_count' => 100, + 'max_transaction_amount' => 500000, + ], + ], + 'redirect_url' => 'http://localhost', + 'trace_id' => $t, + ]); + // دریافت پاسخ از API + $statusCode = $response->status(); // وضعیت HTTP + $responseBody = $response->json(); // بدنه پاسخ به صورت JSON + $responseHeaders = $response->headers(); // هدرهای پاسخ + $responseBodyRaw = $response->body(); // بدنه خام پاسخ (به صورت متن) + +// برگشت وضعیت و بدنه پاسخ + return response()->json([ + 'status' => $statusCode, + 'json' => $response->json(), + 'headers' => $response->headers(), + 'body' => $response->body(), + ]); + $response = Http::timeout(4)->withHeaders([ + 'Cookie' => 'cookiesession1=678A8C341A085F7AF93FECC7B44ACDFO', + 'app-key' => 'demopayman', + 'Client-Ip-Address' => $_SERVER['REMOTE_ADDR'], + 'Client-Platform-Type' => 'web', + 'Client-Device-Id' => '169.254.75.178', + 'Client-User-Id' => '09352673656', + 'Client-User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36', + 'Content-Type' => 'application/json', + 'Mobile-no' => '09352673656', + 'National-code' => '0082205388', + 'Authorization' => 'Bearer b71c3737-7b89-4f2c-9301-767439079407', + ])->post('https://payman2.sandbox.faraboom.co/v1/payman/create', [ + 'payman' => [ + 'bank_code' => 'SINAIR', + 'user_id' => 'demopayman', + 'permission_ids' => [1], + 'contract' => [ + 'expiration_date' => '2026-01-15T01:28:09.5662061+04:30', // Updated expiration date + 'max_daily_transaction_count' => 50, + 'max_monthly_transaction_count' => 100, + 'max_transaction_amount' => 500000, + 'start_date' => '2025-01-15T08:28:09.5662061+04:30', + 'Daily_max_transaction_amount' => 500000000, + ] + ], + 'redirect_url' => 'https://api.gholaktala.ir/', + 'trace_id' => $t, + ]); + + return $response->getStatusCode().$t.$response; + /*{ + "access_token": "b71c3737-7b89-4f2c-9301-767439079407", + "token_type": "bearer", + "scope": "all", + "expires_in": 28954155 + }*/ + } + + /** + * Retrieve details for a specific trace ID. + */ + public function createTrace() + { + $traceId = Str::uuid()->toString(); + + $response = Http::timeout(4)->withHeaders([ + 'Cookie' => 'cookiesession1=678A8C341A085F7AF93FECC7B44ACDFO', + 'Authorization' => 'Bearer ' . $this->accessToken, // Using stored access token + ])->get('https://payman2.sandbox.faraboom.co/v1/payman/create/trace', [ + 'trace_id' => $traceId, + 'redirect_url' => 'https://api.gholaktala.ir/', + ]); + + if ($response->status() === 302) { + $location = $response->header('Location'); + return redirect()->away($location); + } + + return response()->json([ + 'headers' => $response->headers(), + 'body' => $response->body(), + ]); + } + + /** + * Get Payman account ID by payman_code. + */ + public function getId() + { + $url = 'https://payman2.sandbox.faraboom.co/v1/payman/getId'; + $paymanCode = '2gZ04Yx9iHEP'; // You may want to dynamically set this value + + return $response = Http::timeout(4) + ->withHeaders([ + 'Authorization' => 'Bearer ' . $this->accessToken, // Using stored access token + 'App-Key' => 'demopayman', + 'Cookie' => 'cookiesession1=678A8C341A085F7AF93FECC7B44ACDFF', + ]) + ->get($url, [ + 'payman_code' => $paymanCode // pass the payman_code as a query parameter + ])->json(); + } + +} + diff --git a/app/Http/Controllers/pay/paypingController.php b/app/Http/Controllers/pay/paypingController.php new file mode 100755 index 0000000..1f4dd40 --- /dev/null +++ b/app/Http/Controllers/pay/paypingController.php @@ -0,0 +1,179 @@ +user(); + $finalPriseP = $request->value; + if ($user->id ==4){ + $finalPriseP =10700; + } + $Withdraw = Withdraw::create([ + 'customer_id' => auth('customer')->id(), + "cash" => $finalPriseP, + "note" => "واریز ریالی", + 'sts' => 1, + ]); + try { + $response = Http::withHeaders([ + 'payping' => '@XOKcNveJ$wpqYy%rdpb78oBh31Aos*bIdQemiUeeq9e9G!oey23SMXp40Ew2fodjx9J5buKNW0M4@nYMr1PR6d0KtuqhLQlx*K$', // Custom header with 'payping' value + ])->post("https://payping.limangold.ir/payment/start", [ + "amount" => $finalPriseP/10, // Payment amount + "user_name" => $user->name, // User name + "user_id" => $user->id, // User ID + "user" => $user, // User ID + "title" => $this->Config('name_fa'), // Title of the payment + "return_url" => "https://".$this->Config('app_url')."/transactions", // Callback URL + "server_call_url" => url("/customer/charge_account_verify/".$Withdraw->id), // Callback URL + "item" => "gp1Q", // Item identifier + ])->json(); + + }catch (\Exception $exception){ + return response()->json(["message"=>"مشکل در ارتباط با درگاه","R"=>$response??$exception,], 422); + } + + $Withdraw->tracked_number = $response['id']; + $Withdraw->save(); + return $response['url']; + return response()->json(["res"=>$response], 422); + } + public function verifyTransationByID(Request $request ,$id) + { + if ($request->header('payping') !== '@XOKcNveJ$wpqYy%rdpb78oBh31Aos*bIdQemiUeeq9e9G!oey23SMXp40Ew2fodjx9J5buKNW0M4@nYMr1PR6d0KtuqhLQlx*K$') { + return response()->json(['auth needed'], 401); + } + $Withdraw = Withdraw::with('customer')->where('id',$id)->first(); + $app_url = $this->Config('app_url'); + $User = Customer::where('id', $Withdraw->customer_id)->first(); + $GTransaction = Http::withHeaders([ + 'payping' => '@XOKcNveJ$wpqYy%rdpb78oBh31Aos*bIdQemiUeeq9e9G!oey23SMXp40Ew2fodjx9J5buKNW0M4@nYMr1PR6d0KtuqhLQlx*K$', // Custom header with 'payping' value + ])->post("https://payping.limangold.ir/payment/verify", [ + "id" => "$Withdraw->tracked_number", + ])->json(); + if (isset( $GTransaction['active']) and $GTransaction['active'] == 5) { + if ($Withdraw->cash == $GTransaction['amount'] * 10) { + $Withdraw->zify_code = $Withdraw->tracked_number; + $Withdraw->tracked_number = $GTransaction['invoiceNo'];//ok + $Withdraw->sts = 2;//ok + $Withdraw->save(); + + $wallet_interface_fund = new WalletInterface($User->id, $User->type); + $transaction = new TransactionInterface($wallet_interface_fund, $_inp = [ + "cash" => $GTransaction['amount'] * 10, + 'expire_at' => now(), + 'withdraw_id' => $Withdraw->id, + 'active' => true + ], 3, false, true); +//----------sms + $userMobile = $Withdraw->customer->mobile; // User's mobile number + $userName = $Withdraw->customer->name; // User's name + $chargedAmount = $Withdraw->cash; // Charged amount + $companyName = $this->Config('name_fa'); // Company name from configuration + $message = "کاربر $userName با شماره موبایل $userMobile حساب خود را به مقدار " . number_format($chargedAmount) . " ریال شارژ کرد. با تشکر، $companyName"; + User::where('send_sms', 1)->get()->each(function($admin) use ($message) { + $this->Send($admin->mobile, $message); + }); + return view('showTransactionReport', compact('Withdraw','app_url')); + return redirect('https://app.gholaktala.ir/transactions'); + } + return "مبلغ پرداختی دستکاری شده !"; + } else { + $Withdraw->tracked_number; + $Withdraw->sts = 3;//no + $Withdraw->save(); + return view('showTransactionReport', compact('Withdraw','app_url')); + } + } + public function verifyTransation() + { + $Withdraw = Withdraw::with('customer')->where('id', $_GET['clientrefid'])->first(); + $app_url = $this->Config('app_url'); + $User = Customer::where('id', $Withdraw->customer_id)->first(); + $url = 'https://zify.ir/api/order/v2/verify'; + $payload = [ + "order" => "$Withdraw->tracked_number", + ]; + $verifyResponse = Http::withToken("cf09ee0187335f173c786e7660d778d2dd71ab582d282999f751427f5923d525") + ->post($url, $payload); + $decodedResponse = json_decode($verifyResponse, true); + $verifyMessage = $decodedResponse['message']; +// return $decodedResponse['data']; + + if (isset($decodedResponse['data']['refid']) || $verifyMessage == []) { + if ($Withdraw->cash == $decodedResponse['data']['amount'] * 10) { + $Withdraw->zify_code = $Withdraw->tracked_number;//ok + $Withdraw->tracked_number = $decodedResponse['data']['refid'];//ok + $Withdraw->sts = 2;//ok + $Withdraw->save(); + + $wallet_interface_fund = new WalletInterface($User->id, $User->type); + $transaction = new TransactionInterface($wallet_interface_fund, $_inp = [ + "cash" => $decodedResponse['data']['amount'] * 10, + 'expire_at' => now(), + 'withdraw_id' => $_GET['clientrefid'], + 'active' => true + ], 3, false, true); + + $User = Customer::where('id', $Withdraw->customer_id)->first(); + $url = 'https://limangold.ir/kernel/admin/fin'; + $payload = [ + "amount" => $decodedResponse['data']['amount'] * 10, + "customer_id" => "23", + "date_at" => \Carbon\Carbon::today()->format('Y/m/d'), + "receive_account_number" => "000", + "receive_bank" => "پیپینگ", + "receive_name" => "لیمان گلد", + "send_account_number" => "000", + "send_bank" => " زیفای کد $Withdraw->zify_code", + "send_name" => $User->name, + "track_number" => $decodedResponse['data']['refid'], + "type" => 1, + ]; + $verifyResponse = Http::withToken("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvbGltYW5nb2xkLmlyXC9rZXJuZWxcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNzI3NTMwNjA0LCJleHAiOjE3MzAxMjI2MDQsIm5iZiI6MTcyNzUzMDYwNCwianRpIjoiYXBINmlPZXlGTE9oTUhRdyIsInN1YiI6MiwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.IrO6icD-EXjgZ3mYyeEAP4aqG7q35yJTCU_hQhEDGwk") + ->post($url, $payload); +//----------sms +// User information + $userMobile = $Withdraw->customer->mobile; // User's mobile number + $userName = $Withdraw->customer->name; // User's name + $chargedAmount = $Withdraw->cash; // Charged amount +// Company name + $companyName = $this->Config('name_fa'); // Company name from configuration + +// Constructing the SMS message + $message = "کاربر $userName با شماره موبایل $userMobile حساب خود را به مقدار " . number_format($chargedAmount) . " ریال شارژ کرد. با تشکر، $companyName"; + +// Getting admin mobile numbers and sending the SMS + User::where('send_sms', 1)->get()->each(function($admin) use ($message) { + $this->Send($admin->mobile, $message); + }); + + + + return view('showTransactionReport', compact('Withdraw','app_url')); + return redirect('https://app.gholaktala.ir/transactions'); + + } + return "مبلغ پرداختی دستکاری شده !"; + } else { + + $Withdraw->tracked_number; + $Withdraw->sts = 3;//no + $Withdraw->save(); + return view('showTransactionReport', compact('Withdraw','app_url')); + } + + + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100755 index 0000000..9446c96 --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,69 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Fruitcake\Cors\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'validation'=>ValidationMiddleware::class, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100755 index 0000000..704089a --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100755 index 0000000..867695b --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100755 index 0000000..74cbd9a --- /dev/null +++ b/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100755 index 0000000..a2813a0 --- /dev/null +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,32 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100755 index 0000000..88cadca --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php new file mode 100755 index 0000000..7186414 --- /dev/null +++ b/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts() + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100755 index 0000000..3391630 --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/app/Http/Middleware/ValidationMiddleware.php b/app/Http/Middleware/ValidationMiddleware.php new file mode 100755 index 0000000..53c20ae --- /dev/null +++ b/app/Http/Middleware/ValidationMiddleware.php @@ -0,0 +1,49 @@ +acceptsJson()){ + $method = $request->getMethod(); + $path =$request->path(); + if(preg_match('/[0-9]+$/',$request->path(),$match)) { + $match_id = $match[0]; + $path = preg_replace('/[0-9]+$/', '{id}', $request->path()); + } + $format = 'validation.'.$path.'@'.strtolower($method); + if (config($format)) { + if ($path == 'admin/user/{id}'){ + $replace = preg_replace('/update_id/', $match_id, config($format)); + $validator = Validator::make($request->all(), $replace); + } +// elseif(isset($match[0])){ +// $replace = preg_replace('/update_#/', $match[0], config($format)); +// $validator = Validator::make($request->all(), $replace); +// } + else{ + $validator = Validator::make($request->all(), config($format)); + } + if ($validator->fails()) { + return response()->json($validator->errors(),422); + } + } + return $next($request); + } + throw new BadRequestHttpException(); + } +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100755 index 0000000..9e86521 --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/error_log b/app/Http/Middleware/error_log new file mode 100755 index 0000000..3df5f34 --- /dev/null +++ b/app/Http/Middleware/error_log @@ -0,0 +1,16 @@ +[10-Jun-2024 13:13:18 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance' not found in /home/montechi/public_html/server_app/app/Http/Middleware/PreventRequestsDuringMaintenance.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Http/Middleware/PreventRequestsDuringMaintenance.php on line 7 +[10-Jun-2024 13:18:13 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Http\Middleware\TrustHosts' not found in /home/montechi/public_html/server_app/app/Http/Middleware/TrustHosts.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Http/Middleware/TrustHosts.php on line 7 +[10-Jun-2024 13:19:38 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Cookie\Middleware\EncryptCookies' not found in /home/montechi/public_html/server_app/app/Http/Middleware/EncryptCookies.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Http/Middleware/EncryptCookies.php on line 7 +[10-Jun-2024 15:50:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Http\Middleware\TrustProxies' not found in /home/montechi/public_html/server_app/app/Http/Middleware/TrustProxies.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Http/Middleware/TrustProxies.php on line 8 diff --git a/app/Http/error_log b/app/Http/error_log new file mode 100755 index 0000000..c9f1faa --- /dev/null +++ b/app/Http/error_log @@ -0,0 +1,4 @@ +[10-Jun-2024 15:14:07 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Http\Kernel' not found in /home/montechi/public_html/server_app/app/Http/Kernel.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Http/Kernel.php on line 8 diff --git a/app/Jobs/CheckOrder.php b/app/Jobs/CheckOrder.php new file mode 100755 index 0000000..d3ceccb --- /dev/null +++ b/app/Jobs/CheckOrder.php @@ -0,0 +1,53 @@ +order_id = $order_id; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + $order = Order::findOrFail($this->order_id); + if ($order->sts == 1){ + $order->sts = 3; + $order->save(); + $wallet_interface = new WalletInterface($order->customer_id, 1); + new TransactionInterface($wallet_interface, $_inp = [ + "cash" => $order->total_price, + "gold" => $order->amount, + 'expire_at'=>now()->addYear(), + 'active'=>true, + 'order_id'=>$order->id, + 'note'=>'کنسل شدن سفارش' + ], 1, false,true,(-1*$order->amount)); + } + + } +} diff --git a/app/Jobs/error_log b/app/Jobs/error_log new file mode 100755 index 0000000..8277a31 --- /dev/null +++ b/app/Jobs/error_log @@ -0,0 +1,12 @@ +[10-Jun-2024 20:04:30 UTC] PHP Fatal error: Uncaught Error: Interface 'Illuminate\Contracts\Queue\ShouldQueue' not found in /home/montechi/public_html/server_app/app/Jobs/CheckOrder.php:15 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Jobs/CheckOrder.php on line 15 +[10-Jun-2024 20:06:01 UTC] PHP Fatal error: Uncaught Error: Interface 'Illuminate\Contracts\Queue\ShouldQueue' not found in /home/montechi/public_html/server_app/app/Jobs/CheckOrder.php:15 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Jobs/CheckOrder.php on line 15 +[10-Jun-2024 20:09:52 UTC] PHP Fatal error: Uncaught Error: Interface 'Illuminate\Contracts\Queue\ShouldQueue' not found in /home/montechi/public_html/server_app/app/Jobs/CheckOrder.php:15 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Jobs/CheckOrder.php on line 15 diff --git a/app/Mail/Cnt.php b/app/Mail/Cnt.php new file mode 100755 index 0000000..864f4de --- /dev/null +++ b/app/Mail/Cnt.php @@ -0,0 +1,19 @@ +transactionId = $transactionId; + $this->transactionDate = $transactionDate; + $this->quantity = $quantity; + $this->price = $price; + $this->totalAmount = $totalAmount; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + return $this->view('emails.transaction_notification') + ->with([ + 'transactionId' => $this->transactionId, + 'transactionDate' => $this->transactionDate, + 'quantity' => $this->quantity, + 'price' => $this->price, + 'totalAmount' => $this->totalAmount, + ]); + } +} diff --git a/app/Models/Address.php b/app/Models/Address.php new file mode 100755 index 0000000..7f6d2f6 --- /dev/null +++ b/app/Models/Address.php @@ -0,0 +1,26 @@ +'boolean' + ]; +} diff --git a/app/Models/BankAccount.php b/app/Models/BankAccount.php new file mode 100755 index 0000000..9a58e43 --- /dev/null +++ b/app/Models/BankAccount.php @@ -0,0 +1,29 @@ +'در انتظار تایید', + 2=>'تایید شده', + 3=>'رد شده', + ]; + + public function customer(){ + return $this->belongsTo(Customer::class); + } +} diff --git a/app/Models/City.php b/app/Models/City.php new file mode 100755 index 0000000..5a8d015 --- /dev/null +++ b/app/Models/City.php @@ -0,0 +1,32 @@ +'boolean' + ]; + static $LEVEL = [ + 1=>'استان', + 2=>'شهر', + ]; + public function children(){ + return $this->hasMany(City::class,'parent_id')->with('children'); + } + public function parent(){ + return $this->belongsTo(City::class,'parent_id')->with('parent'); + } +} diff --git a/app/Models/Cnt.php b/app/Models/Cnt.php new file mode 100755 index 0000000..e943c84 --- /dev/null +++ b/app/Models/Cnt.php @@ -0,0 +1,21 @@ +'array' + ]; +} diff --git a/app/Models/Customer.php b/app/Models/Customer.php new file mode 100755 index 0000000..856f04c --- /dev/null +++ b/app/Models/Customer.php @@ -0,0 +1,123 @@ + "boolean", + "gold" => "float", + "is_archive" => "boolean", + "finger_print" => "boolean", + ]; + static $TYPE = [ + 1=>'همکار', + 2=>'خانگی', + 3=>'سرمایه گذار' + ]; + static $TYPES = [ + 1=>'همکار', + 2=>'خانگی', + 3=>'سرمایه گذار' + ]; + public function setNameAttribute($value = null) + { + $fname = $this->attributes['fname'] ?? ''; + $lname = $this->attributes['lname'] ?? ''; + + $this->attributes['name'] = trim("$fname $lname"); + } + + + public function wallet() + { + return $this->hasMany(Wallet::class ,'owner')->with(['fund','product'])->select(['cash', 'fund_id','product_id','gold', 'owner']); + } + public function user() + { + return $this->belongsTo(User::class)->select(['id','name']); + } + public function referral() + { + return $this->belongsTo(Customer::class, 'referral_to_id', 'referral_id'); + } + +// hash password + public function setPasswordAttribute($value){ + $this->attributes['password'] = Hash::make($value); + } + + public function getJWTIdentifier() + { + return $this->getKey(); + } + + public function getJWTCustomClaims() + { + return []; + } + + public function tahesab() + { + return $this->hasMany(Tahesab::class, 'customer_id', 'id'); + } + + +} diff --git a/app/Models/Fund.php b/app/Models/Fund.php new file mode 100755 index 0000000..dd15935 --- /dev/null +++ b/app/Models/Fund.php @@ -0,0 +1,22 @@ +hasMany(Wallet::class); + } +} diff --git a/app/Models/Log.php b/app/Models/Log.php new file mode 100755 index 0000000..bbb7624 --- /dev/null +++ b/app/Models/Log.php @@ -0,0 +1,24 @@ +belongsTo(Customer::class)->select(['id','name']); + } + public function user() + { + return $this->belongsTo(User::class)->select(['id','name']); + } +} diff --git a/app/Models/Message.php b/app/Models/Message.php new file mode 100755 index 0000000..44d059a --- /dev/null +++ b/app/Models/Message.php @@ -0,0 +1,34 @@ +belongsTo(Customer::class,'receiver',"mobile")->select(['id','name','mobile','n_code','is_legal']); +// } + public function person() + { + return $this->belongsTo(Customer::class, 'receiver', 'mobile') + ->select(['id', 'name', 'mobile', 'n_code', 'is_legal']) + ->withDefault(function ($receiver) { + $mobile = $this->receiver; + if ($mobile && $user = User::where('mobile', $mobile)->first()) { + $receiver->fill($user->only(['id', 'name', 'mobile', 'n_code', 'is_legal'])); + } + }); + } + +} diff --git a/app/Models/Order.php b/app/Models/Order.php new file mode 100755 index 0000000..5711ef0 --- /dev/null +++ b/app/Models/Order.php @@ -0,0 +1,64 @@ + 'باز', + 2 => 'موفق', + 3 => 'ناموفق' + ]; + static $DIRECTION = [ + 1 => 'خرید', + 2 => 'فروش' + ]; + static $PAYMENT_STS=[ + 1 => 'در انتظار پرداخت', + 2 => 'در حال پرداخت', + 3 => 'partially_paid', + 4 => 'پرداخت شده', + 5 => 'partially_refunded', + 6 => 'مرجوعی', + 7 => 'پرداخت نشده', + ]; + static $TYPE = [ + 1=>'همکار', + 2=>'خانگی' + ]; + public function customer(){ + return $this->belongsTo(Customer::class); + } + public function transactions(){ + return $this->hasMany(Transaction::class); + } + +} diff --git a/app/Models/Price.php b/app/Models/Price.php new file mode 100755 index 0000000..cb68d3a --- /dev/null +++ b/app/Models/Price.php @@ -0,0 +1,24 @@ +belongsTo(User::class)->select(['id','name']); + } + public function order(){ + return $this->hasMany(Order::class, 'price_id'); + } +} diff --git a/app/Models/PriceCandle.php b/app/Models/PriceCandle.php new file mode 100755 index 0000000..3d1be79 --- /dev/null +++ b/app/Models/PriceCandle.php @@ -0,0 +1,18 @@ + "boolean", + ]; + public function customer() + { + return $this->belongsTo(Customer::class); + } +} diff --git a/app/Models/Product.php b/app/Models/Product.php new file mode 100755 index 0000000..82ec4cc --- /dev/null +++ b/app/Models/Product.php @@ -0,0 +1,121 @@ + 'boolean', // Cast to boolean. + 'active' => 'boolean', // Cast to boolean. + 'show' => 'boolean', // Cast to boolean. + 'for_barayand' => 'boolean', // Cast to boolean. + 'open_sell' => 'boolean', // Cast to boolean. + 'auto_sell' => 'boolean', // Cast to boolean (you mentioned this in your casts but it's missing in `$fillable`). + 'open_buy' => 'boolean', // Cast to boolean. + 'auto_buy' => 'boolean', // Cast to boolean. + 'price' => 'int', // Cast to float. + 'percent_fee_sell' => 'float', // Cast to float. + 'percent_fee_buy' => 'float', // Cast to float. + 'cash_fee_buy' => 'int', // Cast to int or decimal if needed + 'cash_fee_sell' => 'int', // Cast to int or decimal if needed + ]; + + static $METAL_ID = [ + 1=>'طلا', + 2=>'نقره', + ]; + + public function wallet() + { + return $this->hasOne(Wallet::class); + } + public function walletMy() + { + return $this->hasOne(Wallet::class)->where('owner',auth()->user()->id); + } + public function file(){ + return $this->belongsTo(File::class); + } + public function price(){ + return $this->hasOne(Price::class)->orderBy('id','desc'); + } + public function getPrices() + { + $now = Carbon::now(); + $lastMonth = Carbon::now()->subMonth(); + + $subQuery = DB::table('prices') + ->select('product_id', 'date_at', 'price') + ->whereBetween('date_at', [$lastMonth, $now]) + ->where('product_id', $this->id) + ->orderBy('date_at', 'desc') + ->distinct('date_at') + ->groupBy('date_at', 'product_id', 'price'); + + return DB::table(DB::raw("({$subQuery->toSql()}) as sub")) + ->mergeBindings($subQuery->getQuery()) + ->get(['product_id', 'date_at', 'price']); + } + public function prices(){ + $now = Carbon::now(); + $lastMonth = Carbon::now()->subMonth(); + $data = []; + $datas= $this->hasMany(Price::class, 'product_id') + ->whereBetween('date_at', [$lastMonth, $now]) + ->distinct('date_at') + ->select(['product_id', 'date_at', 'difference', 'price']); + return $datas; + } + public function default(){ + return $this->hasMany(ProductCredit::class); + } + public function sub(){ + return $this->hasOne(PackageProduct::class)->where('is_base',true); + } +// public function wallet(){ +// return $this->hasOne(Wallet::class); +// } + public function transaction(){ + return $this->hasMany(Transaction::class); + } + public function transactionAgentPanel(){ + return $this->hasMany(Transaction::class)->where('note','برداشت بابت فروش')->orwhere('note','واریز بابت خرید')->orwhere('note','سند ورود طلا'); + } + +} diff --git a/app/Models/Selector.php b/app/Models/Selector.php new file mode 100755 index 0000000..6731b49 --- /dev/null +++ b/app/Models/Selector.php @@ -0,0 +1,260 @@ + "created_at", + 'daj' => 'date_at', + 'eaj' => 'end_at', + 'saj' => 'start_at', + 'bdj' => 'birth_date', + 'mdj' => 'marriage_date', + 'vaj' => 'vision_at', + 'type_str' => "type", + 'user_type_str' => "user_type", + 'sts_str' => "sts", + 'gender_str' => "gender", + 'type_send_str' => "type_send", + 'payment_type_str' => "payment_type", + ]; + //created_at + public function getCreatedAtJAttribute($value) + { + if (is_null($value)) return null; + return Verta::instance($value)->format(self::$DATE_FORMAT); + } + public function getCajAttribute($value) + { + return $this->convertDate($value); + } + +// ------------------start_at---------------------------------- + public function getStartAtJAttribute($value) + { + if (is_null($value)) return null; + return Verta::instance($value)->format(self::$DATE_FORMAT); + } + public function getSajAttribute($value) + { + return $this->convertDate($value); + } + +// ----------------------date_at-------------------------------- + public function getDateJAttribute($value) + { + if (is_null($value)) return null; + return Verta::instance($value)->format(self::$BIRTHDAY_FORMAT); + } + public function getdajAttribute($value) + { + return $this->convertDateB($value); + } + +// ----------------------birthday_at---------------------------------- + public function getBirthDateJAttribute($value) + { + if (is_null($value)) return null; + return Verta::instance($value)->format(self::$BIRTHDAY_FORMAT); + } + public function getBdjAttribute($value) + { + return $this->convertDateB($value); + } + + // ----------------------marriage_date---------------------------------- + public function getMarriageDateJAttribute($value) + { + if (is_null($value)) return null; + return Verta::instance($value)->format(self::$BIRTHDAY_FORMAT); + } + public function getMdjAttribute($value) + { + return $this->convertDateB($value); + } +// -------------------vision_at--------------------------------------- + public function getVisionAtJAttribute($value) + { + if (is_null($value)) return null; + return Verta::instance($value)->format(self::$DATE_FORMAT); + } + public function getVajAttribute($value) + { + return $this->convertDate($value); + } + +// --------------------------end_at------------------------------------------- + public function getEndAtJAttribute($value) + { + if (is_null($value)) return null; + return Verta::instance($value)->format(self::$DATE_FORMAT); + } + public function getEajAttribute($value) + { + return $this->convertDate($value); + } + +// -------------------------type_str---------------------------------------- + public function getTypeStrAttribute($value) + { + if (is_null($value)) return $value; + + return Arr::get(self::$TYPES, $value, 'تعریف نشده'); + } + static function GetTypes($value) + { + if (is_null($value)) { + return null; + } + return Arr::get(self::$TYPES, $value, 'بدون مقدار'); + } + + // -------------------------payment_type_str---------------------------------------- + public function getPaymentTypeStrAttribute($value) + { + if (is_null($value)) return $value; + + return Arr::get(self::$PAYMENT_TYPE, $value, 'تعریف نشده'); + } + static function GetPaymentTypes($value) + { + if (is_null($value)) { + return null; + } + return Arr::get(self::$PAYMENT_TYPE, $value, 'بدون مقدار'); + } + +// ----------------------------user_type_str------------------------------- + public function getUserTypeStrAttribute($value) + { + if (is_null($value)) return $value; + $cnt = Cnt::select('value')->findOrFail($value)->pluck('value')->toArray(); + + return Arr::get($cnt, $value, 'تعریف نشده'); + } + static function GetUserType($value) + { + if (is_null($value)) { + return null; + } + return Arr::get(config('userType'), $value, 'بدون مقدار'); + } + +// -------------------------------sts_str----------------------------- + static function GetSts($value) + { + if (is_null($value)) { + return null; + } + return Arr::get(self::$STS, $value, 'بدون مقدار'); + } + public function getStsStrAttribute($value) + { + return self::GetSts($value); + } + // -------------------------gender_str---------------------------------------- + public function getGenderStrAttribute($value) + { + if (is_null($value)) return $value; + + return Arr::get(self::$GENDER, $value, 'تعریف نشده'); + } + static function GetGender($value) + { + if (is_null($value)) { + return null; + } + return Arr::get(self::$GENDER, $value, 'بدون مقدار'); + } + //---------------------type_send str-------------------------------------- + public function getTypeSendStrAttribute($value) + { + if (is_null($value)) return $value; + + return Arr::get(self::$TYPE_SEND, $value, 'تعریف نشده'); + } + static function GetTypeSend($value) + { + if (is_null($value)) { + return null; + } + return Arr::get(self::$TYPE_SEND, $value, 'بدون مقدار'); + } + + + + static function selectWithjDate() + { + return array_merge(['*'], self::$SELECT_CUJ); + } + protected function convertDate($value, $format = NULL, $farsi = TRUE) + { + if (is_null($value)) { + return NULL; + } + if (is_null($format)) { + $format = self::$formatJ; + } + return Verta::instance($value)->format($format, $farsi); + } + protected function convertDateB($value, $format = NULL, $farsi = TRUE) + { + if (is_null($value)) { + return NULL; + } + if (is_null($format)) { + $format = self::$formatBJ; + } + return Verta::instance($value)->format($format, $farsi); + } + + + public function convertColumns($key){ + + return Arr::get(self::$MAP_COLUMNS , $key , $key); + } + +// public function getUserTypeStrAttribute(){ +// if (is_null($this->attributes['user_type'])) return null; +// return Arr::get(config('userType') , $this->attributes['user_type'] , 'تعریف نشده'); +// } + + + public static function deleteUrl($src){ + return substr($src,strlen(\request()->root())+1,strlen($src)); + } + +} diff --git a/app/Models/Setting.php b/app/Models/Setting.php new file mode 100755 index 0000000..4ec3f53 --- /dev/null +++ b/app/Models/Setting.php @@ -0,0 +1,21 @@ +'array' + ]; +} diff --git a/app/Models/Tahesab.php b/app/Models/Tahesab.php new file mode 100755 index 0000000..de5441b --- /dev/null +++ b/app/Models/Tahesab.php @@ -0,0 +1,56 @@ + 'باز', + 2 => 'موفق', + 3 => 'ناموفق' + ]; + + static $DIRECTION = [ + 1 => 'خرید', + 2 => 'فروش' + ]; + + static $PAYMENT_STS=[ + 1 => 'در انتظار پرداخت', + 2 => 'در حال پرداخت', + 3 => 'partially_paid', + 4 => 'پرداخت شده', + 5 => 'partially_refunded', + 6 => 'مرجوعی', + 7 => 'پرداخت نشده', + ]; + + public function customer() + { + return $this->belongsTo(Customer::class, 'customer_id', 'id'); + } +} diff --git a/app/Models/TransactionsAdmin.php b/app/Models/TransactionsAdmin.php new file mode 100755 index 0000000..2f51a9e --- /dev/null +++ b/app/Models/TransactionsAdmin.php @@ -0,0 +1,63 @@ +'در انتظار تایید', +// 2=>'تایید شده', +// 3=>'رد شده', +// ]; + + public function customer() + { + return $this->belongsTo(Customer::class); + } + + public function customerTo() + { + return $this->belongsTo(Customer::class, 'customer_to_id'); + } + + public function user() + { + return $this->belongsTo(User::class); + } + + public function order() + { + return $this->belongsTo(Order::class); + } + +// public function transaction() +// { +// return $this->belongsTo(\Rooyesh\Wallet\Models\Transaction::class, 'transaction_id'); +// } + + + public function withdraw() + { + return $this->belongsTo(Withdraw::class); + } +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100755 index 0000000..9820d91 --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,83 @@ + + */ + protected $fillable = [ + 'fname', + 'lname', + 'name', + 'password', + 'mobile', + 'user_type', + 'token_sms', + 'last_seen_at', + 'active', + 'send_sms', + 'avatar_id', + 'email', + 'sts' + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'active'=> 'boolean', + 'send_sms'=> 'boolean', + ]; + /** + * Get the identifier that will be stored in the subject claim of the JWT. + * + * @return mixed + */ + public function getJWTIdentifier() + { + return $this->getKey(); + } + + /** + * Return a key value array, containing any custom claims to be added to the JWT. + * + * @return array + */ + public function getJWTCustomClaims() + { + return []; + } + + // hash password + public function setPasswordAttribute($value){ + $this->attributes['password'] = Hash::make($value); + } +} diff --git a/app/Models/Withdraw.php b/app/Models/Withdraw.php new file mode 100755 index 0000000..fbc12c7 --- /dev/null +++ b/app/Models/Withdraw.php @@ -0,0 +1 @@ + 'در انتظار واریز', 2 => 'واریز شد', 4 => 'واریز توسط ادمین', 5 => 'پاداش معرفی', 9 => 'سود زیر مجموعه', 3 => 'واریز ناموفق', 50 => 'در انتظار ارسال', 51 => 'ارسال شده', 52 => 'لغو شده', ]; public function customer() { return $this->belongsTo('App\Models\Customer')->select(['id','name',"mobile"]); } public function Address() { return $this->belongsTo('App\Models\Address'); } public function Transaction() { return $this->hasMany(Transaction::class, 'withdraw_id', 'id'); } public function bank_account() { return $this->hasOne('App\Models\BankAccount','id','bank_account_id'); } } \ No newline at end of file diff --git a/app/Models/error_log b/app/Models/error_log new file mode 100755 index 0000000..73f071a --- /dev/null +++ b/app/Models/error_log @@ -0,0 +1,168 @@ +[10-Jun-2024 05:12:23 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Order.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Order.php on line 8 +[10-Jun-2024 05:12:47 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Log.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Log.php on line 8 +[10-Jun-2024 08:43:37 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Fund.php:10 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Fund.php on line 10 +[10-Jun-2024 08:46:18 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Auth\User' not found in /home/montechi/public_html/server_app/app/Models/Customer.php:13 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Customer.php on line 13 +[10-Jun-2024 08:49:06 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/PriceCandle.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/PriceCandle.php on line 8 +[10-Jun-2024 08:49:30 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/BankAccount.php:9 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/BankAccount.php on line 9 +[10-Jun-2024 15:43:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Price.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Price.php on line 8 +[10-Jun-2024 15:46:46 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Withdraw.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Withdraw.php on line 8 +[10-Jun-2024 20:04:25 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Cnt.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Cnt.php on line 8 +[10-Jun-2024 20:04:25 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Auth\User' not found in /home/montechi/public_html/server_app/app/Models/Customer.php:13 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Customer.php on line 13 +[10-Jun-2024 20:04:25 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Fund.php:10 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Fund.php on line 10 +[10-Jun-2024 20:04:26 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Auth\User' not found in /home/montechi/public_html/server_app/app/Models/User.php:15 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/User.php on line 15 +[10-Jun-2024 20:04:28 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Price.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Price.php on line 8 +[10-Jun-2024 20:04:29 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Order.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Order.php on line 8 +[10-Jun-2024 20:04:30 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Log.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Log.php on line 8 +[10-Jun-2024 20:04:31 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/BankAccount.php:9 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/BankAccount.php on line 9 +[10-Jun-2024 20:04:35 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/PriceCandle.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/PriceCandle.php on line 8 +[10-Jun-2024 20:05:30 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Withdraw.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Withdraw.php on line 8 +[10-Jun-2024 20:05:32 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Log.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Log.php on line 8 +[10-Jun-2024 20:05:39 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Price.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Price.php on line 8 +[10-Jun-2024 20:05:40 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Auth\User' not found in /home/montechi/public_html/server_app/app/Models/Customer.php:13 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Customer.php on line 13 +[10-Jun-2024 20:05:46 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Fund.php:10 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Fund.php on line 10 +[10-Jun-2024 20:05:51 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Cnt.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Cnt.php on line 8 +[10-Jun-2024 20:05:54 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Order.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Order.php on line 8 +[10-Jun-2024 20:05:55 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Auth\User' not found in /home/montechi/public_html/server_app/app/Models/User.php:15 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/User.php on line 15 +[10-Jun-2024 20:06:09 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/BankAccount.php:9 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/BankAccount.php on line 9 +[10-Jun-2024 20:06:10 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/PriceCandle.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/PriceCandle.php on line 8 +[10-Jun-2024 20:07:30 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Log.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Log.php on line 8 +[10-Jun-2024 20:07:30 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Withdraw.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Withdraw.php on line 8 +[10-Jun-2024 20:07:51 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Cnt.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Cnt.php on line 8 +[10-Jun-2024 20:07:54 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Order.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Order.php on line 8 +[10-Jun-2024 20:07:56 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Auth\User' not found in /home/montechi/public_html/server_app/app/Models/User.php:15 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/User.php on line 15 +[10-Jun-2024 20:07:58 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/BankAccount.php:9 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/BankAccount.php on line 9 +[10-Jun-2024 20:07:58 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/PriceCandle.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/PriceCandle.php on line 8 +[10-Jun-2024 20:09:52 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Order.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Order.php on line 8 +[10-Jun-2024 20:09:53 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/PriceCandle.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/PriceCandle.php on line 8 +[10-Jun-2024 20:09:53 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/BankAccount.php:9 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/BankAccount.php on line 9 +[10-Jun-2024 20:10:42 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/BankAccount.php:9 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/BankAccount.php on line 9 +[10-Jun-2024 20:10:56 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Auth\User' not found in /home/montechi/public_html/server_app/app/Models/User.php:15 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/User.php on line 15 +[10-Jun-2024 20:11:06 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Cnt.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Cnt.php on line 8 +[10-Jun-2024 20:11:44 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/Fund.php:10 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/Fund.php on line 10 +[10-Jun-2024 20:11:56 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Model' not found in /home/montechi/public_html/server_app/app/Models/PriceCandle.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Models/PriceCandle.php on line 8 diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100755 index 0000000..ee8ca5b --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,28 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100755 index 0000000..395c518 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100755 index 0000000..f541a46 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,75 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + Route::prefix('auth') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/auth.php')); + Route::prefix('admin') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/admin.php')); + Route::prefix('customer') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/customer.php')); + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); + }); + } +} diff --git a/app/Providers/error_log b/app/Providers/error_log new file mode 100755 index 0000000..76fdafd --- /dev/null +++ b/app/Providers/error_log @@ -0,0 +1,20 @@ +[10-Jun-2024 01:41:36 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Support\Providers\AuthServiceProvider' not found in /home/montechi/public_html/server_app/app/Providers/AuthServiceProvider.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Providers/AuthServiceProvider.php on line 8 +[10-Jun-2024 01:42:04 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\ServiceProvider' not found in /home/montechi/public_html/server_app/app/Providers/BroadcastServiceProvider.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Providers/BroadcastServiceProvider.php on line 8 +[10-Jun-2024 01:42:33 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Support\Providers\RouteServiceProvider' not found in /home/montechi/public_html/server_app/app/Providers/RouteServiceProvider.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Providers/RouteServiceProvider.php on line 11 +[10-Jun-2024 01:43:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Support\Providers\EventServiceProvider' not found in /home/montechi/public_html/server_app/app/Providers/EventServiceProvider.php:10 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Providers/EventServiceProvider.php on line 10 +[10-Jun-2024 01:46:49 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\ServiceProvider' not found in /home/montechi/public_html/server_app/app/Providers/AppServiceProvider.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/app/Providers/AppServiceProvider.php on line 7 diff --git a/app/Services/NotificationService.php b/app/Services/NotificationService.php new file mode 100755 index 0000000..ce104b0 --- /dev/null +++ b/app/Services/NotificationService.php @@ -0,0 +1,29 @@ +endpoint = 'https://.servicebus.windows.net//messages'; + $this->primaryKey = env('AZURE_NOTIFICATION_HUB_PRIMARY_KEY'); + } + + public function sendNotification($message) + { + $response = Http::withHeaders([ + 'Authorization' => $this->primaryKey, + 'Content-Type' => 'application/json' + ])->post($this->endpoint, [ + 'data' => $message + ]); + + return $response->json(); + } +} diff --git a/app/pusher/CHANGELOG.md b/app/pusher/CHANGELOG.md new file mode 100755 index 0000000..219be46 --- /dev/null +++ b/app/pusher/CHANGELOG.md @@ -0,0 +1,256 @@ +# Changelog + +## 7.2.4 + +* [Fixed] Timeout option is propagated to guzzle client + +## 7.2.3 + +* [Fixed] Include socket_id in batch trigger if included. + +## 7.2.2 + +* [FIXED] composer.phar file removed from package + +## 7.2.1 + +* [FIXED] authenticateUser returns correct auth value + +## 7.2.0 + +* [CHANGED] explicit support for 8.1 +* [CHANGED] Ignore pull_request_template.md on vendor +* [ADDED] has_mixed_channels method to allow triggering a single event on multiple channels +* [FIXED] path option can be used for proxied servers under subdirectory. +* [CHANGED] base_path's leading slash is trimmed on every call to Guzzle. + +## 7.1.0-beta + +* [ADDED] `authenticateUser`, `authorizeChannel` and `authorizePresenceChannel` +* [ADDED] `sendToUser` and `sendToUserAsync` +* [ADDED] `terminateUserConnections` and `terminateUserConnectionsAsync` +* [FIXED] `get_object_vars()` error on `/src/Pusher.php` +* [DEPRECATED] `socketAuth` and `presenceAuth` in favour of `authorizeChannel` and `authorizePresenceChannel` +* [DEPRECATED] Internal functions `make_request` and `make_batch_request` that were exposed as public + +## 7.0.2 + +* [CHANGED] Add psr/log v2.0 and v3.0 compatibility + +## 7.0.1 + +* [FIXED] Infinite recursion in `presence_auth`. + +## 7.0.0 + +* [DEPRECATED] `get_channel_info`, `get_channels`, `socket_auth`, `presence_auth` in favour of camelCased versions +* [DEPRECATED] `get_users_info` in favour of `getPresenceUsers` +* [DEPRECATED] `ensure_valid_signature` in favour of `verifySignature` +* [CHANGED] Restrict `$app_id` parameter of the `Pusher()` object to `string` (`int` was possible). +* [ADDED] Return types. +* [ADDED] Namespacing, PSR-12 formatting. + +## 6.1.0 + +* [ADDED] triggerAsync and triggerBatchAsync using the Guzzle async interface. + +## 6.0.1 + +* [CHANGED] Use type hints where possible (mixed type not available in PHP7). +* [CHANGED] Document that functions can throw GuzzleException. + +## 6.0.0 + +* [CHANGED] internal HTTP client to Guzzle +* [ADDED] optional client parameter to constructor +* [CHANGED] useTLS is true by default +* [REMOVED] `curl_options` from options +* [REMOVED] customer logger +* [REMOVED] host, port and timeout constructor parameters +* [REMOVED] support for PHP 7.1 +* [CHANGED] lower severity level of logging to DEBUG level + +## 5.0.3 + +* [CHANGED] Ensure version in Pusher.php is bumped on release. + +## 5.0.2 + +* [CHANGED] Add release automation actions. + +## 5.0.1 + +* [FIXED] Notice raised due to reference to potentially missing object property in `trigger` method + +## 5.0.0 + +* [CHANGED] The methods that make HTTP requests now throw an `ApiErrorException` instead of returning `false` for non-2xx responses +* [CHANGED] `trigger` now accepts a `$params` associative array instead of a `$socket_id` as the third parameter +* [ADDED] Support for requesting channel attributes as part of a `trigger` and `triggerBatch` request via an `info` parameter +* [REMOVED] `debug` parameter from methods that make HTTP requests and from the constructor options +* [REMOVED] Support for legacy push notifications (this has been superseded by https://github.com/pusher/push-notifications-php) + +## 4.1.5 + +* [ADDED] Support for PHP 8. + +## 4.1.4 + +* [FIXED] Errors in the failure path of `get_...` methods revealed by stricter type checking in PHP7.4 + +## 4.1.3 + +* No functional change, previous release was only partially successful + +## 4.1.2 + +* [ADDED] option `encryption_master_key_base64` +* [DEPRECATED] option `encryption_master_key` + +## 4.1.1 + +* [ADDED] Support for PHP 7.4. + +## 4.1.0 + +* [ADDED] `path` configuration option. + +## 4.0.0 + +* [REMOVED] Support for PHP 5.x, PHP 7.0 and HHVM. + +## 3.4.1 + +* [ADDED] Support for PHP 7.3. + +## 3.4.0 + +* [ADDED] `get_users_info` method. + +## 3.3.1 + +* [FIXED] PHP Notice for Undefined `socket_id` in triggerBatch + +## 3.3.0 + +* [ADDED] Support for End-to-end encrypted channels for triggerbatch +* [FIXED] trigger behavior with mixtures of encrypted and non-encrypted channels + +## 3.2.0 + +* [ADDED] This release adds support for end to end encrypted channels, a new feature for Channels. Read more [in our docs](https://pusher.com/docs/client_api_guide/client_encrypted_channels). +* [DEPRECATED] Renamed `encrypted` option to `useTLS` - `encrypted` will still work! + +## 3.1.0 + +* [ADDED] This release adds Webhook validation as well as a data structure to store Webhook payloads. + +## 3.0.4 + +* [FIXED] Non zero indexed arrays of channels no longer get serialized as an object. + +## 3.0.3 + +* [ADDED] PSR-3 logger compatibility. +* [CHANGED] Improved PHP docs. + +## 3.0.2 + +* [FIXED] Insufficient check for un-initialized curl resource. +* [FIXED] Acceptance tests. + +## 3.0.1 + +* [CHANGED] Info messages are now prefixed with INFO and errors are now prefixed with ERROR. + +## 3.0.0 + +* [NEW] Added namespaces (thanks [@vinkla](https://github.com/vinkla)). + +## 2.6.4 + +* [FIXED] Log the curl error in more circumstances + +## 2.6.1 + +* [FIXED] Check for correct status code when POSTing to native push notifications API. + +## 2.6.0 + +* [ADDED] support for publishing push notifications on up to 10 interests. + +## 2.5.0 + +* [REMOVED] Native push notifications payload validation in the client. + +## 2.5.0-rc2 + +* [FIXED] DDN and Native Push endpoints were not assembled correctly. + +## 2.5.0-rc1 + +* [NEW] Native push notifications + +## 2.4.2 + +* [CHANGED] One curl instance per Pusher instance + +## 2.4.1 + +* [FIXED] Presence data could not be submitted after the style changes + +## 2.4.0 + +* [ADDED] Support for batch events +* [ADDED] Curl options +* [FIXED] Applied fixes from StyleCI + +## 2.3.0 + +* [ADDED] A new `cluster` option for the Pusher constructor. + +## 2.2.2 + +* [FIXED] Fixed a PHP 5.2 incompatibility caused by referencing a private method in array_walk. + +## 2.2.1 + +* [FIXED] Channel name and socket_id values are now validated. +* [BROKE] Inadvertently broke PHP 5.2 compatibility by referencing a private method in array_walk. + +## 2.2.0 + +* [CHANGED] `new Pusher($app_key, $app_secret, $app_id, $options)` - The `$options` parameter + has been added as the forth parameter to the constructor and other additional + parameters are now deprecated. + +## 2.1.3 + +* [NEW] `$pusher->trigger` can now take an `array` of channel names as a first parameter to allow the same event to be published on multiple channels. +* [NEW] `$pusher->get` generic function can be used to make `GET` calls to the REST API +* [NEW] `$pusher->set_logger` to allow internal logging to be exposed and logged in your own logs. + +## 2.1.2 + +* [CHANGED] Debug response from `$pusher->trigger` call is now an associative array in the form `array( 'body' => '{String} body text of response', 'status' => '{Number} http status of the response' )` + +## 2.1.1 + +* [CHANGED] Added optional $options parameter to get_channel_info. get_channel_info($channel, $options = array() ) + +## 2.1.0 + +* [CHANGED] Renamed get_channel_stats to get_channel_info +* [CHANGED] get_channels now takes and $options parameter. get_channels( $options = array() ) +* [REMOVED] get_presence_channels + +## 2.0.1 + +* [FIXED] Overwritten socket_id parameter in trigger: https://github.com/pusher/pusher-php-server/pull/3 + +## 2.0.0 + +* [NEW] Versioning introduced at 2.0.0 +* [NEW] Added composer.json for submission to https://packagist.org/ +* [CHANGED] `get_channels()` now returns an object which has a `channels` property. This must be accessed to get the Array of channels in an application. +* [CHANGED] `get_presence_channels()` now returns an object which has a `channels` property. This must be accessed to get the Array of channels in an application. diff --git a/app/pusher/composer.json b/app/pusher/composer.json new file mode 100755 index 0000000..7a0b7fa --- /dev/null +++ b/app/pusher/composer.json @@ -0,0 +1,36 @@ +{ + "name": "pusher/pusher-php-server", + "description" : "Library for interacting with the Pusher REST API", + "keywords": ["php-pusher-server", "pusher", "rest", "realtime", "real-time", "real time", "messaging", "push", "trigger", "publish", "events"], + "license": "MIT", + "require": { + "php": "^7.3|^8.0", + "ext-curl": "*", + "ext-json": "*", + "guzzlehttp/guzzle": "^7.2", + "psr/log": "^1.0|^2.0|^3.0", + "paragonie/sodium_compat": "^1.6" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "overtrue/phplint": "^2.3" + }, + "autoload": { + "psr-4": { + "Pusher\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { "": "tests/" } + }, + "config": { + "preferred-install": "dist" + }, + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/app/pusher/send_notification.php b/app/pusher/send_notification.php new file mode 100755 index 0000000..487dc64 --- /dev/null +++ b/app/pusher/send_notification.php @@ -0,0 +1,16 @@ + 'your_cluster', + 'useTLS' => true +]; +$pusher = new Pusher\Pusher( + 'your_app_key', + 'your_app_secret', + 'your_app_id', + $options +); + +$data['message'] = 'hello world'; +$pusher->trigger('my-channel', 'my-event', $data); diff --git a/app/pusher/src/ApiErrorException.php b/app/pusher/src/ApiErrorException.php new file mode 100755 index 0000000..5ae4bdb --- /dev/null +++ b/app/pusher/src/ApiErrorException.php @@ -0,0 +1,21 @@ +getCode()}) {$this->getMessage()}"; + } +} diff --git a/app/pusher/src/Pusher.php b/app/pusher/src/Pusher.php new file mode 100755 index 0000000..72b6b8a --- /dev/null +++ b/app/pusher/src/Pusher.php @@ -0,0 +1,1212 @@ + 'http', + 'port' => 80, + 'path' => '', + 'timeout' => 30, + ]; + + /** + * @var null|resource + */ + private $client = null; // Guzzle client + + /** + * Initializes a new Pusher instance with key, secret, app ID and channel. + * + * @param string $auth_key + * @param string $secret + * @param string $app_id + * @param array $options [optional] + * Options to configure the Pusher instance. + * scheme - e.g. http or https + * host - the host e.g. api-mt1.pusher.com. No trailing forward slash. + * port - the http port + * timeout - the http timeout + * useTLS - quick option to use scheme of https and port 443 (default is true). + * cluster - cluster name to connect to. + * encryption_master_key_base64 - a 32 byte key, encoded as base64. This key, along with the channel name, are used to derive per-channel encryption keys. Per-channel keys are used to encrypt event data on encrypted channels. + * @param ClientInterface|null $client [optional] - a Guzzle client to use for all HTTP requests + * + * @throws PusherException Throws exception if any required dependencies are missing + */ + public function __construct(string $auth_key, string $secret, string $app_id, array $options = [], ClientInterface $client = null) + { + $this->check_compatibility(); + + $useTLS = true; + if (isset($options['useTLS'])) { + $useTLS = $options['useTLS'] === true; + } + if ( + $useTLS && + !isset($options['scheme']) && + !isset($options['port']) + ) { + $options['scheme'] = 'https'; + $options['port'] = 443; + } + + $this->settings['auth_key'] = $auth_key; + $this->settings['secret'] = $secret; + $this->settings['app_id'] = $app_id; + $this->settings['base_path'] = '/apps/' . $this->settings['app_id']; + + foreach ($options as $key => $value) { + // only set if valid setting/option + if (isset($this->settings[$key])) { + $this->settings[$key] = $value; + } + } + + // handle the case when 'host' and 'cluster' are specified in the options. + if (!array_key_exists('host', $this->settings)) { + if (array_key_exists('host', $options)) { + $this->settings['host'] = $options['host']; + } elseif (array_key_exists('cluster', $options)) { + $this->settings['host'] = 'api-' . $options['cluster'] . '.pusher.com'; + } else { + $this->settings['host'] = 'api-mt1.pusher.com'; + } + } + + // ensure host doesn't have a scheme prefix + $this->settings['host'] = preg_replace('/http[s]?\:\/\//', '', $this->settings['host'], 1); + + if (!array_key_exists('encryption_master_key_base64', $options)) { + $options['encryption_master_key_base64'] = ''; + } + + if ($options['encryption_master_key_base64'] !== '') { + $parsedKey = PusherCrypto::parse_master_key( + $options['encryption_master_key_base64'] + ); + $this->crypto = new PusherCrypto($parsedKey); + } + + + if (!is_null($client)) { + $this->client = $client; + } else { + $this->client = new \GuzzleHttp\Client(['timeout' => $this->settings['timeout'],]); + } + } + + /** + * Fetch the settings. + * + * @return array + */ + public function getSettings(): array + { + return $this->settings; + } + + /** + * Log a string. + * + * @param string $msg The message to log + * @param array|\Exception $context [optional] Any extraneous information that does not fit well in a string. + * @param string $level [optional] Importance of log message, highly recommended to use Psr\Log\LogLevel::{level} + */ + private function log(string $msg, array $context = [], string $level = LogLevel::DEBUG): void + { + if (is_null($this->logger)) { + return; + } + + if ($this->logger instanceof LoggerInterface) { + $this->logger->log($level, $msg, $context); + + return; + } + + // Support old style logger (deprecated) + $msg = sprintf('Pusher: %s: %s', strtoupper($level), $msg); + $replacement = []; + + foreach ($context as $k => $v) { + $replacement['{' . $k . '}'] = $v; + } + + $this->logger->log($level, strtr($msg, $replacement)); + } + + /** + * Check if the current PHP setup is sufficient to run this class. + * + * @throws PusherException If any required dependencies are missing + */ + private function check_compatibility(): void + { + if (!extension_loaded('json')) { + throw new PusherException('The Pusher library requires the PHP JSON module. Please ensure it is installed'); + } + + if (!in_array('sha256', hash_algos(), true)) { + throw new PusherException('SHA256 appears to be unsupported - make sure you have support for it, or upgrade your version of PHP.'); + } + } + + /** + * Validate number of channels and channel name format. + * + * @param string[] $channels An array of channel names to validate + * + * @throws PusherException If $channels is too big or any channel is invalid + */ + private function validate_channels(array $channels): void + { + if (count($channels) > 100) { + throw new PusherException('An event can be triggered on a maximum of 100 channels in a single call.'); + } + + foreach ($channels as $channel) { + $this->validate_channel($channel); + } + } + + /** + * Ensure a channel name is valid based on our spec. + * + * @param string $channel The channel name to validate + * + * @throws PusherException If $channel is invalid + */ + private function validate_channel(string $channel): void + { + if (!preg_match('/\A#?[-a-zA-Z0-9_=@,.;]+\z/', $channel)) { + throw new PusherException('Invalid channel name ' . $channel); + } + } + + /** + * Ensure a socket_id is valid based on our spec. + * + * @param string $socket_id The socket ID to validate + * + * @throws PusherException If $socket_id is invalid + */ + private function validate_socket_id(string $socket_id): void + { + if ($socket_id !== null && !preg_match('/\A\d+\.\d+\z/', $socket_id)) { + throw new PusherException('Invalid socket ID ' . $socket_id); + } + } + + /** + * Ensure an user id is valid based on our spec. + * + * @param string $user_id The user id to validate + * + * @throws PusherException If $user_id is invalid + */ + private function validate_user_id(string $user_id): void + { + if ($user_id === null || empty($user_id)) { + throw new PusherException('Invalid user id ' . $user_id); + } + } + + /** + * Utility function used to generate signing headers + * + * @param string $path + * @param string $request_method + * @param array $query_params [optional] + * + * @return array + */ + private function sign(string $path, string $request_method = 'GET', array $query_params = []): array + { + return self::build_auth_query_params( + $this->settings['auth_key'], + $this->settings['secret'], + $request_method, + $path, + $query_params + ); + } + + /** + * Build the Channels url prefix. + * + * @return string + */ + private function channels_url_prefix(): string + { + return $this->settings['scheme'] . '://' . $this->settings['host'] . ':' . $this->settings['port'] . $this->settings['path']; + } + + /** + * Build the required HMAC'd auth string. + * + * @param string $auth_key + * @param string $auth_secret + * @param string $request_method + * @param string $request_path + * @param array $query_params [optional] + * @param string $auth_version [optional] + * @param string|null $auth_timestamp [optional] + * @return array + */ + public static function build_auth_query_params( + string $auth_key, + string $auth_secret, + string $request_method, + string $request_path, + array $query_params = [], + string $auth_version = '1.0', + string $auth_timestamp = null + ): array { + $params = []; + $params['auth_key'] = $auth_key; + $params['auth_timestamp'] = (is_null($auth_timestamp) ? time() : $auth_timestamp); + $params['auth_version'] = $auth_version; + + $params = array_merge($params, $query_params); + ksort($params); + + $string_to_sign = "$request_method\n" . $request_path . "\n" . self::array_implode('=', '&', $params); + + $auth_signature = hash_hmac('sha256', $string_to_sign, $auth_secret, false); + + $params['auth_signature'] = $auth_signature; + + return $params; + } + + /** + * Implode an array with the key and value pair giving + * a glue, a separator between pairs and the array + * to implode. + * + * @param string $glue The glue between key and value + * @param string $separator Separator between pairs + * @param array|string $array The array to implode + * + * @return string The imploded array + */ + public static function array_implode(string $glue, string $separator, $array): string + { + if (!is_array($array)) { + return $array; + } + + $string = []; + foreach ($array as $key => $val) { + if (is_array($val)) { + $val = implode(',', $val); + } + $string[] = "{$key}{$glue}{$val}"; + } + + return implode($separator, $string); + } + + /** + * @deprecated in favour of of trigger and triggerAsync + */ + public function make_request($channels, string $event, $data, array $params = [], bool $already_encoded = false): Request + { + if (is_string($channels) === true) { + $channels = [$channels]; + } + + $this->validate_channels($channels); + if (isset($params['socket_id'])) { + $this->validate_socket_id($params['socket_id']); + } + + $has_encrypted_channel = false; + foreach ($channels as $chan) { + if (PusherCrypto::is_encrypted_channel($chan)) { + $has_encrypted_channel = true; + break; + } + } + + if ($has_encrypted_channel) { + if (count($channels) > 1) { + // For rationale, see limitations of end-to-end encryption in the README + throw new PusherException('You cannot trigger to multiple channels when using encrypted channels'); + } else { + try { + $data_encoded = $this->crypto->encrypt_payload( + $channels[0], + $already_encoded ? $data : json_encode($data, JSON_THROW_ON_ERROR) + ); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + } + } else { + try { + $data_encoded = $already_encoded ? $data : json_encode($data, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + } + + $query_params = []; + + $path = $this->settings['base_path'] . '/events'; + + // json_encode might return false on failure + if (!$data_encoded) { + $this->log('Failed to perform json_encode on the the provided data: {error}', [ + 'error' => print_r($data, true), + ], LogLevel::ERROR); + } + + $post_params = []; + $post_params['name'] = $event; + $post_params['data'] = $data_encoded; + $post_params['channels'] = array_values($channels); + + $all_params = array_merge($post_params, $params); + + try { + $post_value = json_encode($all_params, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + + $query_params['body_md5'] = md5($post_value); + + $signature = $this->sign($path, 'POST', $query_params); + + $this->log('trigger POST: {post_value}', compact('post_value')); + + $headers = [ + 'Content-Type' => 'application/json', + 'X-Pusher-Library' => 'pusher-http-php ' . self::$VERSION + ]; + + $params = array_merge($signature, $query_params); + $query_string = self::array_implode('=', '&', $params); + $full_path = ltrim($path, '/') . "?" . $query_string; + return new Request('POST', $full_path, $headers, $post_value); + } + + /** + * Trigger an event by providing event name and payload. + * Optionally provide a socket ID to exclude a client (most likely the sender). + * + * @param array|string $channels A channel name or an array of channel names to publish the event on. + * @param string $event + * @param mixed $data Event data + * @param array $params [optional] + * @param bool $already_encoded [optional] + * + * @return object + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * @throws PusherException Throws PusherException if $channels is an array of size 101 or above or $socket_id is invalid + */ + public function trigger($channels, string $event, $data, array $params = [], bool $already_encoded = false): object + { + $post_value = $this->make_trigger_body($channels, $event, $data, $params, $already_encoded); + $this->log('trigger POST: {post_value}', compact('post_value')); + return $this->process_trigger_result($this->post('/events', $post_value)); + } + + /** + * Asynchronously trigger an event by providing event name and payload. + * Optionally provide a socket ID to exclude a client (most likely the sender). + * + * @param array|string $channels A channel name or an array of channel names to publish the event on. + * @param string $event + * @param mixed $data Event data + * @param array $params [optional] + * @param bool $already_encoded [optional] + * + * @return PromiseInterface + * @throws PusherException + */ + public function triggerAsync($channels, string $event, $data, array $params = [], bool $already_encoded = false): PromiseInterface + { + $post_value = $this->make_trigger_body($channels, $event, $data, $params, $already_encoded); + $this->log('trigger POST: {post_value}', compact('post_value')); + return $this->postAsync('/events', $post_value)->then(function ($result) { + return $this->process_trigger_result($result); + }); + } + + /** + * Send an event to a user. + * + * @param string $user_id + * @param string $event + * @param mixed $data Event data + * @param bool $already_encoded [optional] + * + * @return object + * @throws PusherException + */ + public function sendToUser(string $user_id, string $event, $data, bool $already_encoded = false): object + { + $this->validate_user_id($user_id); + return $this->trigger(["#server-to-user-$user_id"], $event, $data, [], $already_encoded); + } + + /** + * Asynchronously send an event to a user. + * + * @param string $user_id + * @param string $event + * @param mixed $data Event data + * @param bool $already_encoded [optional] + * + * @return PromiseInterface + * @throws PusherException + */ + public function sendToUserAsync(string $user_id, string $event, $data, bool $already_encoded = false): PromiseInterface + { + $this->validate_user_id($user_id); + return $this->triggerAsync(["#server-to-user-$user_id"], $event, $data, [], $already_encoded); + } + + + /** + * @deprecated in favour of of trigger and triggerAsync + */ + public function make_batch_request(array $batch = [], bool $already_encoded = false): Request + { + foreach ($batch as $key => $event) { + $this->validate_channel($event['channel']); + if (isset($event['socket_id'])) { + $this->validate_socket_id($event['socket_id']); + } + + $data = $event['data']; + if (!is_string($data)) { + try { + $data = $already_encoded ? $data : json_encode($data, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + } + + if (PusherCrypto::is_encrypted_channel($event['channel'])) { + $batch[$key]['data'] = $this->crypto->encrypt_payload($event['channel'], $data); + } else { + $batch[$key]['data'] = $data; + } + } + + $post_params = []; + $post_params['batch'] = $batch; + try { + $post_value = json_encode($post_params, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + + $query_params = []; + $query_params['body_md5'] = md5($post_value); + $path = $this->settings['base_path'] . '/batch_events'; + + $signature = $this->sign($path, 'POST', $query_params); + + $this->log('trigger POST: {post_value}', compact('post_value')); + + $headers = [ + 'Content-Type' => 'application/json', + 'X-Pusher-Library' => 'pusher-http-php ' . self::$VERSION + ]; + + $params = array_merge($signature, $query_params); + $query_string = self::array_implode('=', '&', $params); + $full_path = $path . "?" . $query_string; + return new Request('POST', $full_path, $headers, $post_value); + } + + /** + * Trigger multiple events at the same time. + * + * @param array $batch [optional] An array of events to send + * @param bool $already_encoded [optional] + * + * @return object + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * @throws PusherException + */ + public function triggerBatch(array $batch = [], bool $already_encoded = false): object + { + $post_value = $this->make_trigger_batch_body($batch, $already_encoded); + $this->log('trigger POST: {post_value}', compact('post_value')); + return $this->process_trigger_result($this->post('/batch_events', $post_value)); + } + + /** + * Asynchronously trigger multiple events at the same time. + * + * @param array $batch [optional] An array of events to send + * @param bool $already_encoded [optional] + * + * @return PromiseInterface + * @throws PusherException + */ + public function triggerBatchAsync(array $batch = [], bool $already_encoded = false): PromiseInterface + { + $post_value = $this->make_trigger_batch_body($batch, $already_encoded); + $this->log('trigger POST: {post_value}', compact('post_value')); + return $this->postAsync('/batch_events', $post_value)->then(function ($result) { + return $this->process_trigger_result($result); + }); + } + + /** + * Terminates all connections established by the user with the given user id. + * + * @param string $user_id + * + * @throws PusherException If $user_id is invalid + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * + * @return object response body + * + */ + public function terminateUserConnections(string $user_id): object + { + $this->validate_user_id($user_id); + return $this->post("/users/$user_id/terminate_connections", "{}"); + } + + /** + * Asynchronous request to terminates all connections established by the user with the given user id. + * + * @param string $user_id + * + * @throws PusherException If $userId is invalid + * + * @return PromiseInterface promise wrapping response body + * + */ + public function terminateUserConnectionsAsync(string $user_id): PromiseInterface + { + $this->validate_user_id($user_id); + return $this->postAsync("/users/$user_id/terminate_connections", "{}"); + } + + + /** + * Fetch channel information for a specific channel. + * + * @param string $channel The name of the channel + * @param array $params Additional parameters for the query e.g. $params = array( 'info' => 'connection_count' ) + * + * @throws PusherException If $channel is invalid + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * + */ + public function getChannelInfo(string $channel, array $params = []): object + { + $this->validate_channel($channel); + + return $this->get('/channels/' . $channel, $params); + } + + /** + * @deprecated in favour of getChannelInfo + */ + public function get_channel_info(string $channel, array $params = []): object + { + return $this->getChannelInfo($channel, $params); + } + + /** + * Fetch a list containing all channels. + * + * @param array $params Additional parameters for the query e.g. $params = array( 'info' => 'connection_count' ) + * + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * + */ + public function getChannels(array $params = []): object + { + $result = $this->get('/channels', $params); + + $result->channels = get_object_vars($result->channels); + + return $result; + } + + /** + * @deprecated in favour of getChannels + */ + public function get_channels(array $params = []): object + { + return $this->getChannels($params); + } + + /** + * Fetch user ids currently subscribed to a presence channel. + * + * @param string $channel The name of the channel + * + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * + */ + public function getPresenceUsers(string $channel): object + { + return $this->get('/channels/' . $channel . '/users'); + } + + /** + * @deprecated in favour of getPresenceUsers + */ + public function get_users_info(string $channel): object + { + return $this->getPresenceUsers($channel); + } + + /** + * GET arbitrary REST API resource using a synchronous http client. + * All request signing is handled automatically. + * + * @param string $path Path excluding /apps/APP_ID + * @param array $params API params (see http://pusher.com/docs/rest_api) + * @param bool $associative When true, return the response body as an associative array, else return as an object + * + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * @throws PusherException + * + * @return mixed See Pusher API docs + */ + public function get(string $path, array $params = [], $associative = false) + { + $path = $this->settings['base_path'] . $path; + + $signature = $this->sign($path, 'GET', $params); + + $headers = [ + 'Content-Type' => 'application/json', + 'X-Pusher-Library' => 'pusher-http-php ' . self::$VERSION + ]; + + $response = $this->client->get(ltrim($path, '/'), [ + 'query' => $signature, + 'http_errors' => false, + 'headers' => $headers, + 'base_uri' => $this->channels_url_prefix(), + 'timeout' => $this->settings['timeout'] + ]); + + $status = $response->getStatusCode(); + + if ($status !== 200) { + $body = (string) $response->getBody(); + throw new ApiErrorException($body, $status); + } + + try { + $body = json_decode($response->getBody(), $associative, 512, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new PusherException('Data decoding error.'); + } + + return $body; + } + + /** + * POST arbitrary REST API resource using a synchronous http client. + * All request signing is handled automatically. + * + * @param string $path Path excluding /apps/APP_ID + * @param mixed $body Request payload (see http://pusher.com/docs/rest_api) + * @param array $params API params (see http://pusher.com/docs/rest_api) + * + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * @throws PusherException + * + * @return mixed Post response body + */ + public function post(string $path, $body, array $params = []) + { + $path = $this->settings['base_path'] . $path; + + $params['body_md5'] = md5($body); + + $params_with_signature = $this->sign($path, 'POST', $params); + + $headers = [ + 'Content-Type' => 'application/json', + 'X-Pusher-Library' => 'pusher-http-php ' . self::$VERSION + ]; + + try { + $response = $this->client->post(ltrim($path, '/'), [ + 'query' => $params_with_signature, + 'body' => $body, + 'http_errors' => false, + 'headers' => $headers, + 'base_uri' => $this->channels_url_prefix(), + 'timeout' => $this->settings['timeout'] + ]); + } catch (ConnectException $e) { + throw new ApiErrorException($e->getMessage()); + } + + $status = $response->getStatusCode(); + + if ($status !== 200) { + $body = (string) $response->getBody(); + throw new ApiErrorException($body, $status); + } + + try { + $response_body = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new PusherException('Data decoding error.'); + } + + return $response_body; + } + + /** + * Asynchronously POST arbitrary REST API resource using a synchronous http client. + * All request signing is handled automatically. + * + * @param string $path Path excluding /apps/APP_ID + * @param mixed $body Request payload (see http://pusher.com/docs/rest_api) + * @param array $params API params (see http://pusher.com/docs/rest_api) + * + * @return PromiseInterface Promise wrapping POST response body + */ + public function postAsync(string $path, $body, array $params = []): PromiseInterface + { + $path = $this->settings['base_path'] . $path; + + $params['body_md5'] = md5($body); + + $params_with_signature = $this->sign($path, 'POST', $params); + + $headers = [ + 'Content-Type' => 'application/json', + 'X-Pusher-Library' => 'pusher-http-php ' . self::$VERSION + ]; + + return $this->client->postAsync(ltrim($path, '/'), [ + 'query' => $params_with_signature, + 'body' => $body, + 'http_errors' => false, + 'headers' => $headers, + 'base_uri' => $this->channels_url_prefix(), + 'timeout' => $this->settings['timeout'], + ])->then(function ($response) { + $status = $response->getStatusCode(); + + if ($status !== 200) { + $body = (string) $response->getBody(); + throw new ApiErrorException($body, $status); + } + + try { + $response_body = json_decode($response->getBody(), false, 512, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new PusherException('Data decoding error.'); + } + + return $response_body; + }, function (ConnectException $e) { + throw new ApiErrorException($e->getMessage()); + }); + } + + /** + * Creates a user authentication signature. + * + * @param string $socket_id + * @param array $user_data + * + * @return string Json encoded authentication string. + * @throws PusherException Throws exception if $channel is invalid or above or $socket_id is invalid + */ + public function authenticateUser(string $socket_id, array $user_data): string + { + $this->validate_socket_id($socket_id); + $this->validate_user_data($user_data); + $serialized_user_data = json_encode($user_data, JSON_THROW_ON_ERROR); + $signature = hash_hmac('sha256', "$socket_id::user::$serialized_user_data", $this->settings['secret'], false); + $auth = $this->settings['auth_key'] . ':' . $signature; + + return json_encode( + ['auth' => $auth, 'user_data' => $serialized_user_data], + JSON_THROW_ON_ERROR + ); + } + + /** + * Creates a channel authorization signature. + * + * @param string $channel + * @param string $socket_id + * @param string|null $custom_data + * + * @return string Json encoded authentication string. + * @throws PusherException Throws exception if $channel is invalid or above or $socket_id is invalid + */ + public function authorizeChannel(string $channel, string $socket_id, string $custom_data = null): string + { + $this->validate_channel($channel); + $this->validate_socket_id($socket_id); + + if ($custom_data) { + $signature = hash_hmac('sha256', $socket_id . ':' . $channel . ':' . $custom_data, $this->settings['secret'], false); + } else { + $signature = hash_hmac('sha256', $socket_id . ':' . $channel, $this->settings['secret'], false); + } + + $signature = ['auth' => $this->settings['auth_key'] . ':' . $signature]; + // add the custom data if it has been supplied + if ($custom_data) { + $signature['channel_data'] = $custom_data; + } + + if (PusherCrypto::is_encrypted_channel($channel)) { + if (!is_null($this->crypto)) { + $signature['shared_secret'] = base64_encode($this->crypto->generate_shared_secret($channel)); + } else { + throw new PusherException('You must specify an encryption master key to authorize an encrypted channel'); + } + } + + try { + $response = json_encode($signature, JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + + return $response; + } + + /** + * Convenience function for presence channel authorization. + * + * Equivalent to authorizeChannel($channel, $socket_id, json_encode(['user_id' => $user_id, 'user_info' => $user_info], JSON_THROW_ON_ERROR)) + * + * @param string $channel + * @param string $socket_id + * @param string $user_id + * @param mixed $user_info + * + * @return string + * @throws PusherException Throws exception if $channel is invalid or above or $socket_id is invalid + */ + public function authorizePresenceChannel(string $channel, string $socket_id, string $user_id, $user_info = null): string + { + $user_data = ['user_id' => $user_id]; + if ($user_info) { + $user_data['user_info'] = $user_info; + } + + try { + return $this->authorizeChannel($channel, $socket_id, json_encode($user_data, JSON_THROW_ON_ERROR)); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + } + + + /** + * @deprecated in favour of authorizeChannel + */ + public function socketAuth(string $channel, string $socket_id, string $custom_data = null): string + { + return $this->authorizeChannel($channel, $socket_id, $custom_data); + } + + /** + * @deprecated in favour of authorizeChannel + */ + public function socket_auth(string $channel, string $socket_id, string $custom_data = null): string + { + return $this->authorizeChannel($channel, $socket_id, $custom_data); + } + + /** + * @deprecated in favour of authorizePresenceChannel + */ + public function presenceAuth(string $channel, string $socket_id, string $user_id, $user_info = null): string + { + return $this->authorizePresenceChannel($channel, $socket_id, $user_id, $user_info); + } + + /** + * @deprecated in favour of authorizePresenceChannel + */ + public function presence_auth(string $channel, string $socket_id, string $user_id, $user_info = null): string + { + return $this->authorizePresenceChannel($channel, $socket_id, $user_id, $user_info); + } + + /** + * Verify that a webhook actually came from Pusher, decrypts any encrypted events, and marshals them into a PHP object. + * + * @param array $headers a array of headers from the request (for example, from getallheaders()) + * @param string $body the body of the request (for example, from file_get_contents('php://input')) + * + * @throws PusherException + * + * @return Webhook marshalled object with the properties time_ms (an int) and events (an array of event objects) + */ + public function webhook(array $headers, string $body): object + { + $this->verifySignature($headers, $body); + + $decoded_events = []; + try { + $decoded_json = json_decode($body, false, 512, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + $this->log('Unable to decrypt webhook event payload.', null, LogLevel::WARNING); + throw new PusherException('Data encoding error.'); + } + + foreach ($decoded_json->events as $event) { + if (PusherCrypto::is_encrypted_channel($event->channel)) { + if (!is_null($this->crypto)) { + $decryptedEvent = $this->crypto->decrypt_event($event); + + if ($decryptedEvent === false) { + $this->log('Unable to decrypt webhook event payload. Wrong key? Ignoring.', null, LogLevel::WARNING); + continue; + } + $decoded_events[] = $decryptedEvent; + } else { + $this->log('Got an encrypted webhook event payload, but no master key specified. Ignoring.', null, LogLevel::WARNING); + } + } else { + $decoded_events[] = $event; + } + } + return new Webhook($decoded_json->time_ms, $decoded_events); + } + + /** + * Verify that a given Pusher Signature is valid. + * + * @param array $headers an array of headers from the request (for example, from getallheaders()) + * @param string $body the body of the request (for example, from file_get_contents('php://input')) + * + * @throws PusherException if signature is incorrect. + */ + public function verifySignature(array $headers, string $body): void + { + $x_pusher_key = $headers['X-Pusher-Key']; + $x_pusher_signature = $headers['X-Pusher-Signature']; + if ($x_pusher_key === $this->settings['auth_key']) { + $expected = hash_hmac('sha256', $body, $this->settings['secret']); + if ($expected === $x_pusher_signature) { + return; + } + } + + throw new PusherException(sprintf('Received WebHook with invalid signature: got %s.', $x_pusher_signature)); + } + + /** + * @deprecated in favour of verifySignature + */ + public function ensure_valid_signature(array $headers, string $body): void + { + $this->verifySignature($headers, $body); + } + + /** + * Returns an event represented by an associative array to be used in creating events and batch_events requests + * + * @param array|string $channels A channel name or an array of channel names to publish the event on. + * @param string $event + * @param mixed $data Event data + * @param array $params [optional] + * @param bool $already_encoded [optional] + * + * @throws PusherException + * + * @return array Event associative array + */ + private function make_event(array $channels, string $event, $data, array $params = [], ?string $info = null, bool $already_encoded = false): array + { + $has_encrypted_channel = false; + foreach ($channels as $chan) { + if (PusherCrypto::is_encrypted_channel($chan)) { + $has_encrypted_channel = true; + break; + } + } + + if ($has_encrypted_channel) { + if (PusherCrypto::has_mixed_channels($channels)) { + throw new PusherException('You cannot trigger to encrypted and non-encrypted channels at the same time'); + } else { + try { + $data_encoded = $this->crypto->encrypt_payload( + $channels[0], + $already_encoded ? $data : json_encode($data, JSON_THROW_ON_ERROR) + ); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + } + } else { + try { + $data_encoded = $already_encoded ? $data : json_encode($data, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + } + + // json_encode might return false on failure + if (!$data_encoded) { + $this->log('Failed to perform json_encode on the the provided data: {error}', [ + 'error' => print_r($data, true), + ], LogLevel::ERROR); + } + + $post_params = []; + $post_params['name'] = $event; + $post_params['data'] = $data_encoded; + $channel_values = array_values($channels); + if (count($channel_values) == 1) { + $post_params['channel'] = $channel_values[0]; + } else { + $post_params['channels'] = $channel_values; + } + if (!is_null($info)) { + $post_params['info'] = $info; + } + + return array_merge($post_params, $params); + } + + /** + * Returns the body of a trigger events request serialized as string ready to be sent in a request + * + * @param array|string $channels A channel name or an array of channel names to publish the event on. + * @param string $event + * @param mixed $data Event data + * @param array $params [optional] + * @param bool $already_encoded [optional] + * + * @throws PusherException + * + * @return string + */ + private function make_trigger_body($channels, string $event, $data, array $params = [], bool $already_encoded = false): string + { + if (is_string($channels) === true) { + $channels = [$channels]; + } + + $this->validate_channels($channels); + if (isset($params['socket_id'])) { + $this->validate_socket_id($params['socket_id']); + } + + try { + return json_encode( + $this->make_event($channels, $event, $data, $params, null, $already_encoded), + JSON_THROW_ON_ERROR + ); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + } + + /** + * Returns the body of a trigger batch events request serialized as string ready to be sent in a request + * + * @param array|string $channels A channel name or an array of channel names to publish the event on. + * @param string $event + * @param mixed $data Event data + * @param array $params [optional] + * @param bool $already_encoded [optional] + * + * @throws PusherException + * + * @return string + */ + private function make_trigger_batch_body(array $batch = [], bool $already_encoded = false): string + { + foreach ($batch as $key => $event) { + $this->validate_channel($event['channel']); + if (isset($event['socket_id'])) { + $this->validate_socket_id($event['socket_id']); + $batch[$key] = $this->make_event([$event['channel']], $event['name'], $event['data'], ['socket_id' => $event['socket_id']], $event['info'] ?? null, $already_encoded); + } else { + $batch[$key] = $this->make_event([$event['channel']], $event['name'], $event['data'], [], $event['info'] ?? null, $already_encoded); + } + } + + try { + return json_encode(['batch' => $batch], JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + } + + /** + * Mutates the result of a trigger (batch) request to replace channel names with channel objects + * + * @param object $result result of the trigger (batch) request + * + * @return object + */ + private function process_trigger_result(object $result): object + { + if (property_exists($result, 'channels') && is_object($result->channels)) { + $result->channels = get_object_vars($result->channels); + } + + return $result; + } + + private function validate_user_data(array $user_data): void + { + if (is_null($user_data)) { + throw new PusherException('user_data is null'); + } + if (!array_key_exists('id', $user_data)) { + throw new PusherException('user_data has no id field'); + } + $this->validate_user_id($user_data['id']); + } +} diff --git a/app/pusher/src/PusherCrypto.php b/app/pusher/src/PusherCrypto.php new file mode 100755 index 0000000..8a55216 --- /dev/null +++ b/app/pusher/src/PusherCrypto.php @@ -0,0 +1,230 @@ +encryption_master_key = $encryption_master_key; + } + + /** + * Decrypts a given event. + * + * @param object $event an object that has an encrypted data property and a channel property. + * + * @return object the event with a decrypted payload, or false if decryption was unsuccessful. + * @throws PusherException + */ + public function decrypt_event(object $event): object + { + $parsed_payload = $this->parse_encrypted_message($event->data); + $shared_secret = $this->generate_shared_secret($event->channel); + $decrypted_payload = $this->decrypt_payload($parsed_payload->ciphertext, $parsed_payload->nonce, $shared_secret); + if (!$decrypted_payload) { + throw new PusherException('Decryption of the payload failed. Wrong key?'); + } + $event->data = $decrypted_payload; + + return $event; + } + + /** + * Derives a shared secret from the secret key and the channel to broadcast to. + * + * @param string $channel the name of the channel + * + * @return string a SHA256 hash (encoded as base64) of the channel name appended to the encryption key + * @throws PusherException + */ + public function generate_shared_secret(string $channel): string + { + if (!self::is_encrypted_channel($channel)) { + throw new PusherException('You must specify a channel of the form private-encrypted-* for E2E encryption. Got ' . $channel); + } + + return hash('sha256', $channel . $this->encryption_master_key, true); + } + + /** + * Encrypts a given plaintext for broadcast on a particular channel. + * + * @param string $channel the name of the channel the payloads event will be broadcast on + * @param string $plaintext the data to encrypt + * + * @return string a string ready to be sent as the data of an event. + * @throws PusherException + * @throws \SodiumException + */ + public function encrypt_payload(string $channel, string $plaintext): string + { + if (!self::is_encrypted_channel($channel)) { + throw new PusherException('Cannot encrypt plaintext for a channel that is not of the form private-encrypted-*. Got ' . $channel); + } + $nonce = $this->generate_nonce(); + $shared_secret = $this->generate_shared_secret($channel); + $cipher_text = sodium_crypto_secretbox($plaintext, $nonce, $shared_secret); + + try { + return $this->format_encrypted_message($nonce, $cipher_text); + } catch (\JsonException $e) { + throw new PusherException('Data encoding error.'); + } + } + + /** + * Decrypts a given payload using the nonce and shared secret. + * + * @param string $payload the ciphertext + * @param string $nonce the nonce used in the encryption + * @param string $shared_secret the shared_secret used in the encryption + * + * @return string plaintext + * @throws \SodiumException + */ + public function decrypt_payload(string $payload, string $nonce, string $shared_secret) + { + $plaintext = sodium_crypto_secretbox_open($payload, $nonce, $shared_secret); + if (empty($plaintext)) { + return false; + } + + return $plaintext; + } + + /** + * Formats an encrypted message ready for broadcast. + * + * @param string $nonce the nonce used in the encryption process (bytes) + * @param string $ciphertext the ciphertext (bytes) + * + * @return string JSON with base64 encoded nonce and ciphertext` + * @throws \JsonException + */ + private function format_encrypted_message(string $nonce, string $ciphertext): string + { + $encrypted_message = new \stdClass(); + $encrypted_message->nonce = base64_encode($nonce); + $encrypted_message->ciphertext = base64_encode($ciphertext); + + return json_encode($encrypted_message, JSON_THROW_ON_ERROR); + } + + /** + * Parses an encrypted message into its nonce and ciphertext components. + * + * + * @param string $payload the encrypted message payload + * + * @return object php object with decoded nonce and ciphertext + * @throws PusherException + */ + private function parse_encrypted_message(string $payload): object + { + try { + $decoded_payload = json_decode($payload, false, 512, JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new PusherException('Data decoding error.'); + } + + $decoded_payload->nonce = base64_decode($decoded_payload->nonce); + $decoded_payload->ciphertext = base64_decode($decoded_payload->ciphertext); + if ($decoded_payload->ciphertext === '' || strlen($decoded_payload->nonce) !== SODIUM_CRYPTO_SECRETBOX_NONCEBYTES) { + throw new PusherException('Received a payload that cannot be parsed.'); + } + + return $decoded_payload; + } + + /** + * Generates a nonce that is SODIUM_CRYPTO_SECRETBOX_NONCEBYTES long. + * @return string + * @throws \Exception + */ + private function generate_nonce(): string + { + return random_bytes( + SODIUM_CRYPTO_SECRETBOX_NONCEBYTES + ); + } +} diff --git a/app/pusher/src/PusherException.php b/app/pusher/src/PusherException.php new file mode 100755 index 0000000..d087ad9 --- /dev/null +++ b/app/pusher/src/PusherException.php @@ -0,0 +1,9 @@ + 'connection_count' ) + * + * @throws PusherException If $channel is invalid or if curl wasn't initialized correctly + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * + */ + public function getChannelInfo(string $channel, array $params = []): object; + + /** + * Fetch a list containing all channels. + * + * @param array $params Additional parameters for the query e.g. $params = array( 'info' => 'connection_count' ) + * + * @throws PusherException Throws exception if curl wasn't initialized correctly + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * + */ + public function getChannels(array $params = []): object; + + /** + * Fetch user ids currently subscribed to a presence channel. + * + * @param string $channel The name of the channel + * + * @throws PusherException Throws exception if curl wasn't initialized correctly + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * + */ + public function getPresenceUsers(string $channel): object; + + /** + * GET arbitrary REST API resource using a synchronous http client. + * All request signing is handled automatically. + * + * @param string $path Path excluding /apps/APP_ID + * @param array $params API params (see http://pusher.com/docs/rest_api) + * @param bool $associative When true, return the response body as an associative array, else return as an object + * + * @throws PusherException Throws exception if curl wasn't initialized correctly + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * + * @return mixed See Pusher API docs + */ + public function get(string $path, array $params = [], bool $associative = false); + + /** + * Creates a socket signature. + * + * @param string $channel + * @param string $socket_id + * @param string|null $custom_data + * @return string Json encoded authentication string. + * @throws PusherException Throws exception if $channel is invalid or above or $socket_id is invalid + */ + public function socketAuth(string $channel, string $socket_id, string $custom_data = null): string; + + /** + * Creates a presence signature (an extension of socket signing). + * + * @param mixed $user_info + * + * @throws PusherException Throws exception if $channel is invalid or above or $socket_id is invalid + * + */ + public function presenceAuth(string $channel, string $socket_id, string $user_id, $user_info = null): string; + + /** + * Verify that a webhook actually came from Pusher, decrypts any + * encrypted events, and marshals them into a PHP object. + * + * @param array $headers a array of headers from the request (for example, from getallheaders()) + * @param string $body the body of the request (for example, from file_get_contents('php://input')) + * + * @throws PusherException + * + * @return Webhook marshalled object with the properties time_ms (an int) and events (an array of event objects) + */ + public function webhook(array $headers, string $body): object; + + /** + * Verify that a given Pusher Signature is valid. + * + * @param array $headers an array of headers from the request (for example, from getallheaders()) + * @param string $body the body of the request (for example, from file_get_contents('php://input')) + * + * @throws PusherException if signature is incorrect. + */ + public function verifySignature(array $headers, string $body); + + + /******************************************************************* + * + * DEPRECATION WARNING: + * + * all the functions below have been deprecated in favour of their + * camelCased variants. They will be removed in the next major + * update. + */ + + /** + * Get information, such as subscriber and user count, for a channel. + * + * @deprecated in favour of getChannelInfo + * + * @param string $channel The name of the channel + * @param array $params Additional parameters for the query e.g. $params = array( 'info' => 'connection_count' ) + * + * @throws PusherException If $channel is invalid or if curl wasn't initialized correctly + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * + */ + public function get_channel_info(string $channel, array $params = []): object; + + /** + * Fetch a list containing all channels. + * + * @deprecated in favour of getChannels + * + * @param array $params Additional parameters for the query e.g. $params = array( 'info' => 'connection_count' ) + * + * @throws PusherException Throws exception if curl wasn't initialized correctly + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * + */ + public function get_channels(array $params = []): object; + + /** + * Fetch user ids currently subscribed to a presence channel. + * + * @deprecated in favour of getPresenceUsers + * + * @param string $channel The name of the channel + * + * @throws PusherException Throws exception if curl wasn't initialized correctly + * @throws ApiErrorException Throws ApiErrorException if the Channels HTTP API responds with an error + * @throws GuzzleException + * + */ + public function get_users_info(string $channel): object; + + /** + * Creates a socket signature. + * + * @deprecated in favour of socketAuth + * + * @param string $channel + * @param string $socket_id + * @param string|null $custom_data + * @return string Json encoded authentication string. + * @throws PusherException Throws exception if $channel is invalid or above or $socket_id is invalid + */ + public function socket_auth(string $channel, string $socket_id, string $custom_data = null): string; + + /** + * Creates a presence signature (an extension of socket signing). + * + * @deprecated in favour of presenceAuth + * + * @param mixed $user_info + * + * @throws PusherException Throws exception if $channel is invalid or above or $socket_id is invalid + * + */ + public function presence_auth(string $channel, string $socket_id, string $user_id, $user_info = null): string; + + /** + * Verify that a given Pusher Signature is valid. + * + * @deprecated in favour of verifySignature + * + * @param array $headers an array of headers from the request (for example, from getallheaders()) + * @param string $body the body of the request (for example, from file_get_contents('php://input')) + * + * @throws PusherException if signature is incorrect. + */ + public function ensure_valid_signature(array $headers, string $body); +} diff --git a/app/pusher/src/Webhook.php b/app/pusher/src/Webhook.php new file mode 100755 index 0000000..f1bbd48 --- /dev/null +++ b/app/pusher/src/Webhook.php @@ -0,0 +1,27 @@ +time_ms = $time_ms; + $this->events = $events; + } + + public function get_events(): array + { + return $this->events; + } + + public function get_time_ms(): int + { + return $this->time_ms; + } +} diff --git a/artisan b/artisan new file mode 100755 index 0000000..67a3329 --- /dev/null +++ b/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100755 index 0000000..037e17d --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/bootstrap/error_log b/bootstrap/error_log new file mode 100755 index 0000000..b914d13 --- /dev/null +++ b/bootstrap/error_log @@ -0,0 +1,56 @@ +[07-Jun-2024 21:28:52 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[07-Jun-2024 21:28:55 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[07-Jun-2024 21:28:56 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[07-Jun-2024 21:29:06 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[07-Jun-2024 21:29:10 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[08-Jun-2024 22:11:35 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[08-Jun-2024 22:11:35 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[08-Jun-2024 22:11:36 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[08-Jun-2024 22:11:52 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[10-Jun-2024 19:08:31 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[10-Jun-2024 19:10:31 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[10-Jun-2024 19:10:42 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[10-Jun-2024 19:11:02 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 +[10-Jun-2024 19:11:11 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' not found in /home/montechi/public_html/server_app/bootstrap/app.php:14 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/bootstrap/app.php on line 14 diff --git a/composer.json b/composer.json new file mode 100755 index 0000000..d4b8bce --- /dev/null +++ b/composer.json @@ -0,0 +1,67 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "php": "^7.3|^8.0", + "fruitcake/laravel-cors": "^2.0", + "guzzlehttp/guzzle": "^7.0.1", + "hekmatinasser/verta": "^2.1", + "laravel/framework": "^8.75", + "laravel/sanctum": "^2.11", + "laravel/tinker": "^2.5", + "tymon/jwt-auth": "^1.0", + "morilog/jalali": "^3.4" + }, + "require-dev": { + "facade/ignition": "^2.5", + "fakerphp/faker": "^1.9.1", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^5.10", + "phpunit/phpunit": "^9.5.10" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/", + "Rooyesh\\Wallet\\": "packages/rooyesh/wallet/src/", + "Morilog\\Jalali\\": "vendor/morilog/jalali" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100755 index 0000000..d1b6f00 --- /dev/null +++ b/composer.lock @@ -0,0 +1,8299 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "b54cf60d425ecf4c236afb86b8d7732a", + "packages": [ + { + "name": "asm89/stack-cors", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/asm89/stack-cors.git", + "reference": "50f57105bad3d97a43ec4a485eb57daf347eafea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/50f57105bad3d97a43ec4a485eb57daf347eafea", + "reference": "50f57105bad3d97a43ec4a485eb57daf347eafea", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0", + "symfony/http-foundation": "^5.3|^6|^7", + "symfony/http-kernel": "^5.3|^6|^7" + }, + "require-dev": { + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "Asm89\\Stack\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander", + "email": "iam.asm89@gmail.com" + } + ], + "description": "Cross-origin resource sharing library and stack middleware", + "homepage": "https://github.com/asm89/stack-cors", + "keywords": [ + "cors", + "stack" + ], + "support": { + "issues": "https://github.com/asm89/stack-cors/issues", + "source": "https://github.com/asm89/stack-cors/tree/v2.2.0" + }, + "time": "2023-11-14T13:51:46+00:00" + }, + { + "name": "brick/math", + "version": "0.12.1", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.12.1" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2023-11-29T23:19:16+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2024-02-18T20:23:39+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2023-08-10T19:36:49+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.25", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2020-12-29T14:50:06+00:00" + }, + { + "name": "fruitcake/laravel-cors", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/laravel-cors.git", + "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534", + "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534", + "shasum": "" + }, + "require": { + "asm89/stack-cors": "^2.0.1", + "illuminate/contracts": "^6|^7|^8|^9", + "illuminate/support": "^6|^7|^8|^9", + "php": ">=7.2" + }, + "require-dev": { + "laravel/framework": "^6|^7.24|^8", + "orchestra/testbench-dusk": "^4|^5|^6|^7", + "phpunit/phpunit": "^6|^7|^8|^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + }, + "laravel": { + "providers": [ + "Fruitcake\\Cors\\CorsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", + "keywords": [ + "api", + "cors", + "crossdomain", + "laravel" + ], + "support": { + "issues": "https://github.com/fruitcake/laravel-cors/issues", + "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "abandoned": true, + "time": "2022-02-23T14:25:13+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.2", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2023-11-12T22:16:48+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:35:24+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:19:20+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.6.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.6.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:05:35+00:00" + }, + { + "name": "hekmatinasser/notowo", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/hekmatinasser/notowo.git", + "reference": "c51ad5dcedac966dd93ce558ac7e6a84e0020d6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hekmatinasser/notowo/zipball/c51ad5dcedac966dd93ce558ac7e6a84e0020d6d", + "reference": "c51ad5dcedac966dd93ce558ac7e6a84e0020d6d", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Hekmatinasser\\Notowo\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nasser Hekmati", + "email": "hekmati.nasser@gmail.com" + } + ], + "description": "This Package helps developers change number to word for all language on Laravel freamwork PHP", + "keywords": [ + "Notowo", + "laravel", + "n2w", + "number", + "word" + ], + "support": { + "issues": "https://github.com/hekmatinasser/notowo/issues", + "source": "https://github.com/hekmatinasser/notowo/tree/v1.0.1" + }, + "time": "2017-09-22T13:41:16+00:00" + }, + { + "name": "hekmatinasser/verta", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hekmatinasser/verta.git", + "reference": "8659810fce313f49fd4f665ca9fb05a371aa6da7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hekmatinasser/verta/zipball/8659810fce313f49fd4f665ca9fb05a371aa6da7", + "reference": "8659810fce313f49fd4f665ca9fb05a371aa6da7", + "shasum": "" + }, + "require": { + "hekmatinasser/notowo": "^1.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "illuminate/validation": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.3|^8.0" + }, + "require-dev": { + "orchestra/testbench": "^4.18|^5.20|^6.24|^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Hekmatinasser\\Verta\\Laravel\\VertaServiceProvider" + ], + "aliases": { + "Verta": "Hekmatinasser\\Verta\\Verta" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Hekmatinasser\\Verta\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nasser Hekmati", + "email": "hekmati.nasser@gmail.com" + } + ], + "description": "This Package helps developers to work with Jalali Datetime class for Laravel Framework PHP", + "keywords": [ + "Jalali", + "Verta", + "date", + "datetime", + "laravel", + "shamsi" + ], + "support": { + "issues": "https://github.com/hekmatinasser/verta/issues", + "source": "https://github.com/hekmatinasser/verta/tree/v2.1.1" + }, + "funding": [ + { + "url": "https://github.com/hekmatinasser", + "type": "github" + } + ], + "time": "2022-04-11T07:22:34+00:00" + }, + { + "name": "laravel/framework", + "version": "v8.83.27", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49", + "reference": "e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^3.0.2", + "egulias/email-validator": "^2.1.10", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "laravel/serializable-closure": "^1.0", + "league/commonmark": "^1.3|^2.0.2", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.53.1", + "opis/closure": "^3.6", + "php": "^7.3|^8.0", + "psr/container": "^1.0", + "psr/log": "^1.0|^2.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^4.2.2", + "swiftmailer/swiftmailer": "^6.3", + "symfony/console": "^5.4", + "symfony/error-handler": "^5.4", + "symfony/finder": "^5.4", + "symfony/http-foundation": "^5.4", + "symfony/http-kernel": "^5.4", + "symfony/mime": "^5.4", + "symfony/process": "^5.4", + "symfony/routing": "^5.4", + "symfony/var-dumper": "^5.4", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^1.6.1" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.198.1", + "doctrine/dbal": "^2.13.3|^3.1.4", + "filp/whoops": "^2.14.3", + "guzzlehttp/guzzle": "^6.5.5|^7.0.1", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.4.4", + "orchestra/testbench-core": "^6.27", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^8.5.19|^9.5.8", + "predis/predis": "^1.1.9", + "symfony/cache": "^5.4" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-bcmath": "Required to use the multiple_of validation rule.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (^1.4.4).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.4).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-12-08T15:28:55+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v2.15.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", + "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^6.9|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.9|^7.0|^8.0|^9.0", + "illuminate/database": "^6.9|^7.0|^8.0|^9.0", + "illuminate/support": "^6.9|^7.0|^8.0|^9.0", + "php": "^7.2|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0", + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2022-04-08T13:39:49+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2023-11-08T14:08:06+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.9.0" + }, + "time": "2024-01-04T16:10:04+00:00" + }, + { + "name": "lcobucci/clock", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/clock.git", + "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/039ef98c6b57b101d10bd11d8fdfda12cbd996dc", + "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc", + "shasum": "" + }, + "require": { + "php": "~8.1.0 || ~8.2.0", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "infection/infection": "^0.26", + "lcobucci/coding-standard": "^9.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^9.5.27" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "description": "Yet another clock abstraction", + "support": { + "issues": "https://github.com/lcobucci/clock/issues", + "source": "https://github.com/lcobucci/clock/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2022-12-19T15:00:24+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "4.3.0", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "4d7de2fe0d51a96418c0d04004986e410e87f6b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/4d7de2fe0d51a96418c0d04004986e410e87f6b4", + "reference": "4d7de2fe0d51a96418c0d04004986e410e87f6b4", + "shasum": "" + }, + "require": { + "ext-hash": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-sodium": "*", + "lcobucci/clock": "^2.0 || ^3.0", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "infection/infection": "^0.21", + "lcobucci/coding-standard": "^6.0", + "mikey179/vfsstream": "^1.6.7", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/php-invoker": "^3.1", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/4.3.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2023-01-02T13:28:00+00:00" + }, + { + "name": "league/commonmark", + "version": "2.4.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.3", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2024-02-02T11:59:32+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "1.1.10", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2022-10-04T09:16:37+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.15.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-01-28T23:22:08+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.9.3", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a30bfe2e142720dfa990d0a7e573997f5d884215", + "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.38 || ^9.6.19", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.9.3" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2024-04-12T20:52:51+00:00" + }, + { + "name": "namshi/jose", + "version": "7.2.3", + "source": { + "type": "git", + "url": "https://github.com/namshi/jose.git", + "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff", + "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff", + "shasum": "" + }, + "require": { + "ext-date": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-spl": "*", + "php": ">=5.5", + "symfony/polyfill-php56": "^1.0" + }, + "require-dev": { + "phpseclib/phpseclib": "^2.0", + "phpunit/phpunit": "^4.5|^5.0", + "satooshi/php-coveralls": "^1.0" + }, + "suggest": { + "ext-openssl": "Allows to use OpenSSL as crypto engine.", + "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0." + }, + "type": "library", + "autoload": { + "psr-4": { + "Namshi\\JOSE\\": "src/Namshi/JOSE/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Nadalin", + "email": "alessandro.nadalin@gmail.com" + }, + { + "name": "Alessandro Cinelli (cirpo)", + "email": "alessandro.cinelli@gmail.com" + } + ], + "description": "JSON Object Signing and Encryption library for PHP.", + "keywords": [ + "JSON Web Signature", + "JSON Web Token", + "JWS", + "json", + "jwt", + "token" + ], + "support": { + "issues": "https://github.com/namshi/jose/issues", + "source": "https://github.com/namshi/jose/tree/master" + }, + "time": "2016-12-05T07:27:31+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.72.5", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed", + "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "*", + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2024-06-03T19:18:41+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.3" + }, + "require-dev": { + "nette/tester": "^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.0" + }, + "time": "2023-12-11T11:54:22+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "shasum": "" + }, + "require": { + "php": ">=8.0 <8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.4" + }, + "time": "2024-01-17T16:50:36+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.0.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + }, + "time": "2024-03-05T20:51:40+00:00" + }, + { + "name": "opis/closure", + "version": "3.6.3", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Opis\\Closure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.3" + }, + "time": "2022-01-27T09:35:39+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.2", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2023-11-12T21:59:55+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" + }, + "time": "2021-11-05T16:50:12+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/2.0.0" + }, + "time": "2021-07-14T16:41:46+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.3", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73", + "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.12.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.3" + }, + "time": "2024-04-02T15:57:53+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-31T21:50:55+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.6", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.7.6" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2024-04-27T21:32:50+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.0|^3.1", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.4" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "abandoned": "symfony/mailer", + "time": "2021-10-18T15:26:12+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.40", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "aa73115c0c24220b523625bfcfa655d7d73662dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/aa73115c0c24220b523625bfcfa655d7d73662dd", + "reference": "aa73115c0c24220b523625bfcfa655d7d73662dd", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.40" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:33:22+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4b61b02fe15db48e3687ce1c45ea385d1780fe08", + "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:49:08+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.4.40", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "c6c8f965a87b22d5005a7806783c7f10ae7e58cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c6c8f965a87b22d5005a7806783c7f10ae7e58cd", + "reference": "c6c8f965a87b22d5005a7806783c7f10ae7e58cd", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.4.40" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:33:22+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b", + "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:49:08+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.40", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "f51cff4687547641c7d8180d74932ab40b2205ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/f51cff4687547641c7d8180d74932ab40b2205ce", + "reference": "f51cff4687547641c7d8180d74932ab40b2205ce", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.40" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:33:22+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.4.40", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "cf4893ca4eca3fac4ae06da1590afdbbb4217847" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cf4893ca4eca3fac4ae06da1590afdbbb4217847", + "reference": "cf4893ca4eca3fac4ae06da1590afdbbb4217847", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "predis/predis": "^1.0|^2.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.4.40" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:33:22+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v5.4.40", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "3ad03183c6985adc2eece16f239f8cfe1c4ccbe3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3ad03183c6985adc2eece16f239f8cfe1c4ccbe3", + "reference": "3ad03183c6985adc2eece16f239f8cfe1c4ccbe3", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/var-dumper": "^4.4.31|^5.4", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.4.40" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-06-02T15:53:08+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.4.40", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "8c6dc1fb0b1f990aa15086abcde66dbde3a9bdad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/8c6dc1fb0b1f990aa15086abcde66dbde3a9bdad", + "reference": "8c6dc1fb0b1f990aa15086abcde66dbde3a9bdad", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4", + "symfony/serializer": "<5.4.35|>=6,<6.3.12|>=6.4,<6.4.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/process": "^5.4|^6.4", + "symfony/property-access": "^4.4|^5.1|^6.0", + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/serializer": "^5.4.35|~6.3.12|^6.4.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.4.40" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:33:22+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", + "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-iconv": "*" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "metapackage", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", + "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.40", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/deedcb3bb4669cae2148bc920eafd2b16dc7c046", + "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.40" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:33:22+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.4.40", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "6df1dd8b306649303267a760699cf04cf39b1f7b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/6df1dd8b306649303267a760699cf04cf39b1f7b", + "reference": "6df1dd8b306649303267a760699cf04cf39b1f7b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.4.40" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:33:22+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/string", + "version": "v6.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/a147c0f826c4a1f3afb763ab8e009e37c877a44d", + "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:49:08+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/a002933b13989fc4bd0b58e04bf7eec5210e438a", + "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:49:08+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.4.40", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "af8868a6e9d6082dfca11f1a1f205ae93a8b6d93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/af8868a6e9d6082dfca11f1a1f205ae93a8b6d93", + "reference": "af8868a6e9d6082dfca11f1a1f205ae93a8b6d93", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.4.40" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:33:22+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.2.7", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + }, + "time": "2023-12-08T13:03:43+00:00" + }, + { + "name": "tymon/jwt-auth", + "version": "dev-develop", + "source": { + "type": "git", + "url": "https://github.com/tymondesigns/jwt-auth.git", + "reference": "014be8d493d228d14bbc291b24e835d330c092a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tymondesigns/jwt-auth/zipball/014be8d493d228d14bbc291b24e835d330c092a0", + "reference": "014be8d493d228d14bbc291b24e835d330c092a0", + "shasum": "" + }, + "require": { + "illuminate/auth": "^5.2|^6|^7|^8|^9", + "illuminate/contracts": "^5.2|^6|^7|^8|^9", + "illuminate/http": "^5.2|^6|^7|^8|^9", + "illuminate/support": "^5.2|^6|^7|^8|^9", + "lcobucci/jwt": "^3.4|^4.0", + "namshi/jose": "^7.0", + "nesbot/carbon": "^1.0|^2.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "illuminate/console": "^5.2|^6|^7|^8|^9", + "illuminate/database": "^5.2|^6|^7|^8|^9", + "illuminate/routing": "^5.2|^6|^7|^8|^9", + "mockery/mockery": ">=0.9.9", + "phpunit/phpunit": "^8.5|^9.4", + "yoast/phpunit-polyfills": "^0.2.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "1.0-dev" + }, + "laravel": { + "aliases": { + "JWTAuth": "Tymon\\JWTAuth\\Facades\\JWTAuth", + "JWTFactory": "Tymon\\JWTAuth\\Facades\\JWTFactory" + }, + "providers": [ + "Tymon\\JWTAuth\\Providers\\LaravelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Tymon\\JWTAuth\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sean Tymon", + "email": "tymon148@gmail.com", + "homepage": "https://tymon.xyz", + "role": "Developer" + } + ], + "description": "JSON Web Token Authentication for Laravel and Lumen", + "homepage": "https://github.com/tymondesigns/jwt-auth", + "keywords": [ + "Authentication", + "JSON Web Token", + "auth", + "jwt", + "laravel" + ], + "support": { + "issues": "https://github.com/tymondesigns/jwt-auth/issues", + "source": "https://github.com/tymondesigns/jwt-auth" + }, + "funding": [ + { + "url": "https://www.patreon.com/seantymon", + "type": "patreon" + } + ], + "time": "2022-04-27T08:53:50+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2023-11-12T22:43:29+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-01-24T18:55:24+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "facade/flare-client-php", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/facade/flare-client-php.git", + "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", + "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "~1.0", + "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", + "php": "^7.1|^8.0", + "symfony/http-foundation": "^3.3|^4.1|^5.0", + "symfony/mime": "^3.4|^4.0|^5.1", + "symfony/var-dumper": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "phpunit/phpunit": "^7.5", + "spatie/phpunit-snapshot-assertions": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Facade\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/facade/flare-client-php", + "keywords": [ + "exception", + "facade", + "flare", + "reporting" + ], + "support": { + "issues": "https://github.com/facade/flare-client-php/issues", + "source": "https://github.com/facade/flare-client-php/tree/1.10.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-08-09T11:23:57+00:00" + }, + { + "name": "facade/ignition", + "version": "2.17.7", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition.git", + "reference": "b4f5955825bb4b74cba0f94001761c46335c33e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition/zipball/b4f5955825bb4b74cba0f94001761c46335c33e9", + "reference": "b4f5955825bb4b74cba0f94001761c46335c33e9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "facade/flare-client-php": "^1.9.1", + "facade/ignition-contracts": "^1.0.2", + "illuminate/support": "^7.0|^8.0", + "monolog/monolog": "^2.0", + "php": "^7.2.5|^8.0", + "symfony/console": "^5.0", + "symfony/var-dumper": "^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "livewire/livewire": "^2.4", + "mockery/mockery": "^1.3", + "orchestra/testbench": "^5.0|^6.0", + "psalm/plugin-laravel": "^1.2" + }, + "suggest": { + "laravel/telescope": "^3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Facade\\Ignition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Facade\\Ignition\\Facades\\Flare" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Facade\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://github.com/facade/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/facade/ignition/issues", + "source": "https://github.com/facade/ignition" + }, + "time": "2023-01-26T12:34:59+00:00" + }, + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" + }, + "time": "2024-01-02T13:46:09+00:00" + }, + { + "name": "filp/whoops", + "version": "2.15.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.15.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2023-11-03T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "e81a7bd7ac1a745ccb25572830fecf74a89bb48a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/e81a7bd7ac1a745ccb25572830fecf74a89bb48a", + "reference": "e81a7bd7ac1a745ccb25572830fecf74a89bb48a", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0", + "illuminate/contracts": "^8.0|^9.0|^10.0", + "illuminate/support": "^8.0|^9.0|^10.0", + "php": "^8.0", + "symfony/yaml": "^6.0" + }, + "require-dev": { + "orchestra/testbench": "^6.0|^7.0|^8.0", + "phpstan/phpstan": "^1.10" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2023-09-11T17:37:09+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v5.11.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461", + "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.14.3", + "php": "^7.3 || ^8.0", + "symfony/console": "^5.0" + }, + "require-dev": { + "brianium/paratest": "^6.1", + "fideloper/proxy": "^4.4.1", + "fruitcake/laravel-cors": "^2.0.3", + "laravel/framework": "8.x-dev", + "nunomaduro/larastan": "^0.6.2", + "nunomaduro/mock-final-classes": "^1.0", + "orchestra/testbench": "^6.0", + "phpstan/phpstan": "^0.12.64", + "phpunit/phpunit": "^9.5.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2022-01-10T16:22:52+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.31", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:37:42+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.19", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.28", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-04-05T04:35:58+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:27:43+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:30:58+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:33:00+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:35:11+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-14T16:00:52+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "52903de178d542850f6f341ba92995d3d63e60c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9", + "reference": "52903de178d542850f6f341ba92995d3d63e60c9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-05-31T14:49:08+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^7.3|^8.0" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/config/add_sell_price.php b/config/add_sell_price.php new file mode 100755 index 0000000..f4df2c5 --- /dev/null +++ b/config/add_sell_price.php @@ -0,0 +1,5 @@ +300000, + 'major'=>500000 +]; diff --git a/config/app.php b/config/app.php new file mode 100755 index 0000000..0f49904 --- /dev/null +++ b/config/app.php @@ -0,0 +1,236 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL', null), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'Asia/Tehran', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + Rooyesh\Wallet\WalletServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Arr' => Illuminate\Support\Arr::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'Date' => Illuminate\Support\Facades\Date::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Http' => Illuminate\Support\Facades\Http::class, + 'Js' => Illuminate\Support\Js::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Notification' => Illuminate\Support\Facades\Notification::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + // 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'Str' => Illuminate\Support\Str::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100755 index 0000000..0c0ba79 --- /dev/null +++ b/config/auth.php @@ -0,0 +1,125 @@ + [ + 'guard' => 'user', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + 'user' => [ + 'driver' => 'jwt', + 'provider' => 'users', + 'hash' => true, + ], + 'customer' => [ + 'driver' => 'jwt', + 'provider' => 'customers', + 'hash' => true, + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + 'customers' => [ + 'driver' => 'eloquent', + 'model' => App\Models\Customer::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100755 index 0000000..2d52982 --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,64 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'useTLS' => true, + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100755 index 0000000..8736c7a --- /dev/null +++ b/config/cache.php @@ -0,0 +1,110 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), + +]; diff --git a/config/company.php b/config/company.php new file mode 100755 index 0000000..8241831 --- /dev/null +++ b/config/company.php @@ -0,0 +1,4 @@ + 'https://app.gholaktala.ir', + 'admin' => 'https://admin.gholaktala.ir', // Replace with the correct URL +]; \ No newline at end of file diff --git a/config/cors.php b/config/cors.php new file mode 100755 index 0000000..005e772 --- /dev/null +++ b/config/cors.php @@ -0,0 +1,34 @@ + ['*'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/config/database.php b/config/database.php new file mode 100755 index 0000000..b42d9b3 --- /dev/null +++ b/config/database.php @@ -0,0 +1,147 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'schema' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/config/error_log b/config/error_log new file mode 100755 index 0000000..aef2f1c --- /dev/null +++ b/config/error_log @@ -0,0 +1,484 @@ +[07-Jun-2024 21:28:51 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[07-Jun-2024 21:28:51 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[07-Jun-2024 21:28:51 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/logging.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/logging.php on line 20 +[07-Jun-2024 21:28:52 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[07-Jun-2024 21:28:52 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[07-Jun-2024 21:28:52 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[07-Jun-2024 21:28:52 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/database.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/database.php on line 18 +[07-Jun-2024 21:28:52 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[07-Jun-2024 21:28:52 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/jwt.php:28 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/jwt.php on line 28 +[07-Jun-2024 21:28:52 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/mail.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/mail.php on line 16 +[07-Jun-2024 21:28:52 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/mail.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/mail.php on line 16 +[07-Jun-2024 21:28:53 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/mail.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/mail.php on line 16 +[07-Jun-2024 21:28:53 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/hashing.php:32 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/hashing.php on line 32 +[07-Jun-2024 21:28:53 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/logging.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/logging.php on line 20 +[07-Jun-2024 21:28:54 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/mail.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/mail.php on line 16 +[07-Jun-2024 21:28:54 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/database.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/database.php on line 18 +[07-Jun-2024 21:28:54 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[07-Jun-2024 21:28:55 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[07-Jun-2024 21:28:55 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[07-Jun-2024 21:28:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/hashing.php:32 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/hashing.php on line 32 +[07-Jun-2024 21:28:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[07-Jun-2024 21:28:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/database.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/database.php on line 18 +[07-Jun-2024 21:28:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/jwt.php:28 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/jwt.php on line 28 +[07-Jun-2024 21:28:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[07-Jun-2024 21:28:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/hashing.php:32 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/hashing.php on line 32 +[07-Jun-2024 21:28:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[07-Jun-2024 21:28:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/mail.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/mail.php on line 16 +[07-Jun-2024 21:28:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/logging.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/logging.php on line 20 +[07-Jun-2024 21:28:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[07-Jun-2024 21:28:59 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/hashing.php:32 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/hashing.php on line 32 +[07-Jun-2024 21:29:00 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[07-Jun-2024 21:29:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[07-Jun-2024 21:29:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/jwt.php:28 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/jwt.php on line 28 +[07-Jun-2024 21:29:03 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/logging.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/logging.php on line 20 +[07-Jun-2024 21:29:07 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[07-Jun-2024 21:29:17 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[08-Jun-2024 22:11:55 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[08-Jun-2024 22:11:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[08-Jun-2024 22:11:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[08-Jun-2024 22:11:57 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[08-Jun-2024 22:11:57 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[08-Jun-2024 22:11:57 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/jwt.php:28 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/jwt.php on line 28 +[08-Jun-2024 22:11:57 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/jwt.php:28 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/jwt.php on line 28 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/jwt.php:28 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/jwt.php on line 28 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/database.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/database.php on line 18 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/database.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/database.php on line 18 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/database.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/database.php on line 18 +[08-Jun-2024 22:11:59 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/hashing.php:32 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/hashing.php on line 32 +[08-Jun-2024 22:11:59 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/hashing.php:32 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/hashing.php on line 32 +[08-Jun-2024 22:11:59 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[08-Jun-2024 22:12:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[08-Jun-2024 22:12:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[08-Jun-2024 22:12:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/hashing.php:32 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/hashing.php on line 32 +[08-Jun-2024 22:12:03 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[08-Jun-2024 22:12:03 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/database.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/database.php on line 18 +[08-Jun-2024 22:12:07 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[08-Jun-2024 22:12:11 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[08-Jun-2024 22:12:13 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/hashing.php:32 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/hashing.php on line 32 +[08-Jun-2024 22:12:23 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/jwt.php:28 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/jwt.php on line 28 +[09-Jun-2024 23:32:28 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[09-Jun-2024 23:32:28 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[09-Jun-2024 23:32:28 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[09-Jun-2024 23:32:29 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[09-Jun-2024 23:32:29 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[09-Jun-2024 23:32:30 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[09-Jun-2024 23:32:30 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[09-Jun-2024 23:32:31 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[09-Jun-2024 23:32:35 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[09-Jun-2024 23:32:35 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[09-Jun-2024 23:32:36 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[09-Jun-2024 23:34:43 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[10-Jun-2024 19:08:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/sanctum.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/sanctum.php on line 16 +[10-Jun-2024 19:08:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/hashing.php:32 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/hashing.php on line 32 +[10-Jun-2024 19:08:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/queue.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/queue.php on line 16 +[10-Jun-2024 19:08:06 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/services.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/services.php on line 18 +[10-Jun-2024 19:10:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/sanctum.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/sanctum.php on line 16 +[10-Jun-2024 19:10:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/services.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/services.php on line 18 +[10-Jun-2024 19:10:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[10-Jun-2024 19:10:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[10-Jun-2024 19:10:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/logging.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/logging.php on line 20 +[10-Jun-2024 19:10:03 UTC] PHP Fatal error: Uncaught Error: Call to undefined function resource_path() in /home/montechi/public_html/server_app/config/view.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/view.php on line 17 +[10-Jun-2024 19:10:04 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/session.php:21 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/session.php on line 21 +[10-Jun-2024 19:10:31 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[10-Jun-2024 19:10:45 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/mail.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/mail.php on line 16 +[10-Jun-2024 19:10:47 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[10-Jun-2024 19:10:54 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/app.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/app.php on line 16 +[10-Jun-2024 19:11:02 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/mail.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/mail.php on line 16 +[10-Jun-2024 19:11:29 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/sanctum.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/sanctum.php on line 16 +[10-Jun-2024 19:11:36 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/services.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/services.php on line 18 +[10-Jun-2024 19:11:38 UTC] PHP Fatal error: Uncaught Error: Call to undefined function resource_path() in /home/montechi/public_html/server_app/config/view.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/view.php on line 17 +[10-Jun-2024 19:11:40 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/logging.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/logging.php on line 20 +[10-Jun-2024 19:11:43 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[10-Jun-2024 19:11:44 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/session.php:21 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/session.php on line 21 +[10-Jun-2024 19:11:44 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/database.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/database.php on line 18 +[10-Jun-2024 19:11:45 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[10-Jun-2024 19:11:57 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[10-Jun-2024 19:12:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/queue.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/queue.php on line 16 +[10-Jun-2024 19:12:54 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[10-Jun-2024 19:12:57 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/sanctum.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/sanctum.php on line 16 +[10-Jun-2024 19:12:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[10-Jun-2024 19:12:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function resource_path() in /home/montechi/public_html/server_app/config/view.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/view.php on line 17 +[10-Jun-2024 19:12:59 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/database.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/database.php on line 18 +[10-Jun-2024 19:13:00 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/session.php:21 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/session.php on line 21 +[10-Jun-2024 19:13:00 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/services.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/services.php on line 18 +[10-Jun-2024 19:13:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/logging.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/logging.php on line 20 +[10-Jun-2024 19:13:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[10-Jun-2024 19:13:08 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/logging.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/logging.php on line 20 +[10-Jun-2024 19:13:22 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/hashing.php:32 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/hashing.php on line 32 +[10-Jun-2024 19:13:54 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/sanctum.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/sanctum.php on line 16 +[10-Jun-2024 19:13:58 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/cache.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/cache.php on line 18 +[10-Jun-2024 19:13:59 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/filesystems.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/filesystems.php on line 16 +[10-Jun-2024 19:13:59 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/services.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/services.php on line 18 +[10-Jun-2024 19:14:06 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/session.php:21 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/session.php on line 21 +[10-Jun-2024 19:14:07 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/database.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/database.php on line 18 +[10-Jun-2024 19:14:08 UTC] PHP Fatal error: Uncaught Error: Call to undefined function env() in /home/montechi/public_html/server_app/config/broadcasting.php:18 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/broadcasting.php on line 18 +[10-Jun-2024 19:14:11 UTC] PHP Fatal error: Uncaught Error: Call to undefined function resource_path() in /home/montechi/public_html/server_app/config/view.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/view.php on line 17 +[10-Jun-2024 19:14:24 UTC] PHP Fatal error: Uncaught Error: Call to undefined function resource_path() in /home/montechi/public_html/server_app/config/view.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/config/view.php on line 17 diff --git a/config/fee.php b/config/fee.php new file mode 100755 index 0000000..d130d57 --- /dev/null +++ b/config/fee.php @@ -0,0 +1,8 @@ + 500000, + 'service_charge_percentage' => 0.01, + 'gold' => 0.01, + 'single' => 500000, + 'major' => 500000 +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100755 index 0000000..760ef97 --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,73 @@ + env('FILESYSTEM_DRIVER', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/config/hashing.php b/config/hashing.php new file mode 100755 index 0000000..bcd3be4 --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + ], + +]; diff --git a/config/jwt.php b/config/jwt.php new file mode 100755 index 0000000..194c04a --- /dev/null +++ b/config/jwt.php @@ -0,0 +1,304 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | JWT Authentication Secret + |-------------------------------------------------------------------------- + | + | Don't forget to set this in your .env file, as it will be used to sign + | your tokens. A helper command is provided for this: + | `php artisan jwt:secret` + | + | Note: This will be used for Symmetric algorithms only (HMAC), + | since RSA and ECDSA use a private/public key combo (See below). + | + */ + + 'secret' => env('JWT_SECRET'), + + /* + |-------------------------------------------------------------------------- + | JWT Authentication Keys + |-------------------------------------------------------------------------- + | + | The algorithm you are using, will determine whether your tokens are + | signed with a random string (defined in `JWT_SECRET`) or using the + | following public & private keys. + | + | Symmetric Algorithms: + | HS256, HS384 & HS512 will use `JWT_SECRET`. + | + | Asymmetric Algorithms: + | RS256, RS384 & RS512 / ES256, ES384 & ES512 will use the keys below. + | + */ + + 'keys' => [ + + /* + |-------------------------------------------------------------------------- + | Public Key + |-------------------------------------------------------------------------- + | + | A path or resource to your public key. + | + | E.g. 'file://path/to/public/key' + | + */ + + 'public' => env('JWT_PUBLIC_KEY'), + + /* + |-------------------------------------------------------------------------- + | Private Key + |-------------------------------------------------------------------------- + | + | A path or resource to your private key. + | + | E.g. 'file://path/to/private/key' + | + */ + + 'private' => env('JWT_PRIVATE_KEY'), + + /* + |-------------------------------------------------------------------------- + | Passphrase + |-------------------------------------------------------------------------- + | + | The passphrase for your private key. Can be null if none set. + | + */ + + 'passphrase' => env('JWT_PASSPHRASE'), + + ], + + /* + |-------------------------------------------------------------------------- + | JWT time to live + |-------------------------------------------------------------------------- + | + | Specify the length of time (in minutes) that the token will be valid for. + | Defaults to 1 hour. + | + | You can also set this to null, to yield a never expiring token. + | Some people may want this behaviour for e.g. a mobile app. + | This is not particularly recommended, so make sure you have appropriate + | systems in place to revoke the token if necessary. + | Notice: If you set this to null you should remove 'exp' element from 'required_claims' list. + | + */ + + 'ttl' => env('JWT_TTL', 43200), + + /* + |-------------------------------------------------------------------------- + | Refresh time to live + |-------------------------------------------------------------------------- + | + | Specify the length of time (in minutes) that the token can be refreshed + | within. I.E. The user can refresh their token within a 2 week window of + | the original token being created until they must re-authenticate. + | Defaults to 2 weeks. + | + | You can also set this to null, to yield an infinite refresh time. + | Some may want this instead of never expiring tokens for e.g. a mobile app. + | This is not particularly recommended, so make sure you have appropriate + | systems in place to revoke the token if necessary. + | + */ + + 'refresh_ttl' => env('JWT_REFRESH_TTL', 20160), + + /* + |-------------------------------------------------------------------------- + | JWT hashing algorithm + |-------------------------------------------------------------------------- + | + | Specify the hashing algorithm that will be used to sign the token. + | + | See here: https://github.com/namshi/jose/tree/master/src/Namshi/JOSE/Signer/OpenSSL + | for possible values. + | + */ + + 'algo' => env('JWT_ALGO', 'HS256'), + + /* + |-------------------------------------------------------------------------- + | Required Claims + |-------------------------------------------------------------------------- + | + | Specify the required claims that must exist in any token. + | A TokenInvalidException will be thrown if any of these claims are not + | present in the payload. + | + */ + + 'required_claims' => [ + 'iss', + 'iat', + 'exp', + 'nbf', + 'sub', + 'jti', + ], + + /* + |-------------------------------------------------------------------------- + | Persistent Claims + |-------------------------------------------------------------------------- + | + | Specify the claim keys to be persisted when refreshing a token. + | `sub` and `iat` will automatically be persisted, in + | addition to the these claims. + | + | Note: If a claim does not exist then it will be ignored. + | + */ + + 'persistent_claims' => [ + // 'foo', + // 'bar', + ], + + /* + |-------------------------------------------------------------------------- + | Lock Subject + |-------------------------------------------------------------------------- + | + | This will determine whether a `prv` claim is automatically added to + | the token. The purpose of this is to ensure that if you have multiple + | authentication models e.g. `App\User` & `App\OtherPerson`, then we + | should prevent one authentication request from impersonating another, + | if 2 tokens happen to have the same id across the 2 different models. + | + | Under specific circumstances, you may want to disable this behaviour + | e.g. if you only have one authentication model, then you would save + | a little on token size. + | + */ + + 'lock_subject' => true, + + /* + |-------------------------------------------------------------------------- + | Leeway + |-------------------------------------------------------------------------- + | + | This property gives the jwt timestamp claims some "leeway". + | Meaning that if you have any unavoidable slight clock skew on + | any of your servers then this will afford you some level of cushioning. + | + | This applies to the claims `iat`, `nbf` and `exp`. + | + | Specify in seconds - only if you know you need it. + | + */ + + 'leeway' => env('JWT_LEEWAY', 0), + + /* + |-------------------------------------------------------------------------- + | Blacklist Enabled + |-------------------------------------------------------------------------- + | + | In order to invalidate tokens, you must have the blacklist enabled. + | If you do not want or need this functionality, then set this to false. + | + */ + + 'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true), + + /* + | ------------------------------------------------------------------------- + | Blacklist Grace Period + | ------------------------------------------------------------------------- + | + | When multiple concurrent requests are made with the same JWT, + | it is possible that some of them fail, due to token regeneration + | on every request. + | + | Set grace period in seconds to prevent parallel request failure. + | + */ + + 'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0), + + /* + |-------------------------------------------------------------------------- + | Cookies encryption + |-------------------------------------------------------------------------- + | + | By default Laravel encrypt cookies for security reason. + | If you decide to not decrypt cookies, you will have to configure Laravel + | to not encrypt your cookie token by adding its name into the $except + | array available in the middleware "EncryptCookies" provided by Laravel. + | see https://laravel.com/docs/master/responses#cookies-and-encryption + | for details. + | + | Set it to true if you want to decrypt cookies. + | + */ + + 'decrypt_cookies' => false, + + /* + |-------------------------------------------------------------------------- + | Providers + |-------------------------------------------------------------------------- + | + | Specify the various providers used throughout the package. + | + */ + + 'providers' => [ + + /* + |-------------------------------------------------------------------------- + | JWT Provider + |-------------------------------------------------------------------------- + | + | Specify the provider that is used to create and decode the tokens. + | + */ + + 'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class, + + /* + |-------------------------------------------------------------------------- + | Authentication Provider + |-------------------------------------------------------------------------- + | + | Specify the provider that is used to authenticate users. + | + */ + + 'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate::class, + + /* + |-------------------------------------------------------------------------- + | Storage Provider + |-------------------------------------------------------------------------- + | + | Specify the provider that is used to store tokens in the blacklist. + | + */ + + 'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class, + + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100755 index 0000000..ca8e083 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,120 @@ + env('LOG_CHANNEL', 'daily'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'permission' => 0777, + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => SyslogUdpHandler::class, + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100755 index 0000000..f96c6c7 --- /dev/null +++ b/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'auth_mode' => null, + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -t -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/config/message.php b/config/message.php new file mode 100755 index 0000000..e1e1bc5 --- /dev/null +++ b/config/message.php @@ -0,0 +1,10 @@ +[ + 'active'=>true, + 'user_name'=>'ysms1362', + 'password'=>'1234@Abcgh', + 'sender'=>'3000164545', + ], + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100755 index 0000000..25ea5a8 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/sanctum.php b/config/sanctum.php new file mode 100755 index 0000000..9281c92 --- /dev/null +++ b/config/sanctum.php @@ -0,0 +1,65 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : '' + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100755 index 0000000..2a1d616 --- /dev/null +++ b/config/services.php @@ -0,0 +1,33 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100755 index 0000000..ac0802b --- /dev/null +++ b/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION', null), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE', null), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/config/validation.php b/config/validation.php new file mode 100755 index 0000000..aa3c020 --- /dev/null +++ b/config/validation.php @@ -0,0 +1,35 @@ +[ + 'mobile' => 'required|digits:11', + 'provider'=>'required' + ], + 'auth/verify@post'=>[ + 'token' => 'required|numeric', + 'id'=>'required|numeric', + 'provider'=>'required' + ], + 'auth/register@post'=>[ + 'mobile' => 'required|digits:11|unique:customers,mobile,NULL,NULL,deleted_at,NULL', + 'fname'=>'required', + 'lname'=>'required', + ], + //--------------------user--------------------- + 'admin/user@post'=>[ + 'mobile'=>'required|digits:11|unique:users,mobile,NULL,NULL,deleted_at,NULL', + 'fname'=>'required', + 'lname'=>'required' + ], + 'admin/user/{id}@put'=>[ + 'mobile'=>'required|digits:11|unique:users,mobile,update_id,id,deleted_at,NULL', + 'fname'=>'required', + 'lname'=>'required' + ], + //--------------------Customer Fund--------------------- + 'customer/wallet/withdraw@post'=>[ + 'value' => 'required|numeric|min:5000', + 'card_id' => 'required|numeric|exists:bank_accounts,id', + ], + +]; diff --git a/config/view.php b/config/view.php new file mode 100755 index 0000000..22b8a18 --- /dev/null +++ b/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100755 index 0000000..9b19b93 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100755 index 0000000..a3eb239 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,39 @@ + $this->faker->name(), + 'email' => $this->faker->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + * + * @return \Illuminate\Database\Eloquent\Factories\Factory + */ + public function unverified() + { + return $this->state(function (array $attributes) { + return [ + 'email_verified_at' => null, + ]; + }); + } +} diff --git a/database/factories/error_log b/database/factories/error_log new file mode 100755 index 0000000..14b1340 --- /dev/null +++ b/database/factories/error_log @@ -0,0 +1,16 @@ +[10-Jun-2024 20:04:49 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Factories\Factory' not found in /home/montechi/public_html/server_app/database/factories/UserFactory.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/factories/UserFactory.php on line 8 +[10-Jun-2024 20:08:40 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Factories\Factory' not found in /home/montechi/public_html/server_app/database/factories/UserFactory.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/factories/UserFactory.php on line 8 +[10-Jun-2024 20:10:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Factories\Factory' not found in /home/montechi/public_html/server_app/database/factories/UserFactory.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/factories/UserFactory.php on line 8 +[10-Jun-2024 20:11:58 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Eloquent\Factories\Factory' not found in /home/montechi/public_html/server_app/database/factories/UserFactory.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/factories/UserFactory.php on line 8 diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100755 index 0000000..105bc2d --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,43 @@ +id(); + $table->string('fname',100)->nullable(); + $table->string('lname',100)->nullable(); + $table->string('name',200)->nullable(); + $table->boolean('active')->default(true); + $table->string('mobile',20)->nullable(); + $table->integer('avatar_id')->nullable()->unsigned(); + $table->timestamp('last_seen_at')->nullable(); + $table->tinyInteger('sts')->nullable()->unsigned(); + $table->integer('user_type')->nullable()->unsigned(); + $table->string('token_sms',10)->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +} diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100755 index 0000000..0ee0a36 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +} diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100755 index 0000000..6aa6d74 --- /dev/null +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +} diff --git a/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100755 index 0000000..4315e16 --- /dev/null +++ b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,36 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +} diff --git a/database/migrations/2023_11_30_071902_create_customers_table.php b/database/migrations/2023_11_30_071902_create_customers_table.php new file mode 100755 index 0000000..e9da3c5 --- /dev/null +++ b/database/migrations/2023_11_30_071902_create_customers_table.php @@ -0,0 +1,55 @@ +id(); + $table->string('fname',100)->nullable(); + $table->string('lname',100)->nullable(); + $table->string('name',200)->nullable(); + $table->boolean('active')->default(true); + $table->string('mobile',20)->nullable(); + $table->integer('avatar_id')->nullable()->unsigned(); + $table->timestamp('last_seen_at')->nullable(); + $table->integer('default_address_id')->nullable()->unsigned(); + $table->tinyInteger('sts')->nullable()->unsigned(); + $table->tinyInteger('type')->default(1); + $table->integer('total_transaction')->default(0); + $table->string('token_sms',10)->nullable(); + $table->string('password')->nullable(); + $table->integer('orders_count')->default(0); + $table->timestamp('birth_date')->nullable(); + $table->string('shop_name',100)->nullable(); + $table->string('phone_number',20)->nullable(); + $table->string('city',50)->nullable(); + $table->string('province',50)->nullable(); + $table->string('n_code',20)->nullable(); + $table->boolean('is_archive')->default(0); + $table->boolean('trade_active')->default(0); + $table->integer('gram')->default(0); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('customers'); + } +} diff --git a/database/migrations/2023_12_09_183053_create_const.php b/database/migrations/2023_12_09_183053_create_const.php new file mode 100755 index 0000000..020a743 --- /dev/null +++ b/database/migrations/2023_12_09_183053_create_const.php @@ -0,0 +1,34 @@ +id(); + $table->string('key',50)->nullable(); + $table->string('title_fa',50)->nullable(); + $table->string('value',100)->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('const'); + } +} diff --git a/database/migrations/2023_12_09_194437_create_orders_table.php b/database/migrations/2023_12_09_194437_create_orders_table.php new file mode 100755 index 0000000..a8460b7 --- /dev/null +++ b/database/migrations/2023_12_09_194437_create_orders_table.php @@ -0,0 +1,46 @@ +id(); + $table->integer('customer_id')->nullable()->unsigned(); + $table->tinyInteger('sts')->nullable()->unsigned(); + $table->tinyInteger('direction')->nullable()->unsigned(); + $table->tinyInteger('payment_sts')->nullable()->unsigned(); + $table->tinyInteger('type')->default(1); + $table->double('amount',15,6)->nullable()->unsigned(); + $table->integer('total_fee')->nullable()->unsigned(); + $table->integer('price')->nullable()->unsigned(); + $table->integer('price_original')->nullable()->unsigned(); + $table->integer('total_price')->nullable()->unsigned(); + $table->integer('total_price_original')->nullable()->unsigned(); + $table->integer('fee')->nullable()->unsigned(); + $table->integer('payment_remind')->nullable()->unsigned(); + $table->integer('payment_amount')->nullable()->unsigned(); + $table->string('description',1024)->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('orders'); + } +} diff --git a/database/migrations/2023_12_12_183319_create_prices_table.php b/database/migrations/2023_12_12_183319_create_prices_table.php new file mode 100755 index 0000000..f4e932d --- /dev/null +++ b/database/migrations/2023_12_12_183319_create_prices_table.php @@ -0,0 +1,35 @@ +id(); + $table->integer('price')->nullable()->unsigned(); + $table->date('date_at')->nullable(); + $table->time('time_at')->nullable(); + $table->integer('user_id')->nullable()->unsigned(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('prices'); + } +} diff --git a/database/migrations/2023_12_12_183618_create_price_candles_table.php b/database/migrations/2023_12_12_183618_create_price_candles_table.php new file mode 100755 index 0000000..54d334b --- /dev/null +++ b/database/migrations/2023_12_12_183618_create_price_candles_table.php @@ -0,0 +1,36 @@ +id(); + $table->integer('start')->nullable()->unsigned(); + $table->integer('end')->nullable()->unsigned(); + $table->integer('high')->nullable()->unsigned(); + $table->integer('low')->nullable()->unsigned(); + $table->date('date_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('price_candles'); + } +} diff --git a/database/migrations/2023_12_14_115025_create_logs_table.php b/database/migrations/2023_12_14_115025_create_logs_table.php new file mode 100755 index 0000000..203ae2f --- /dev/null +++ b/database/migrations/2023_12_14_115025_create_logs_table.php @@ -0,0 +1,34 @@ +id(); + $table->integer('user_id')->unsigned()->nullable(); + $table->integer('customer_id')->unsigned()->nullable(); + $table->string('data',1024)->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('logs'); + } +} diff --git a/database/migrations/2023_12_14_144824_create_funds_table.php b/database/migrations/2023_12_14_144824_create_funds_table.php new file mode 100755 index 0000000..490574c --- /dev/null +++ b/database/migrations/2023_12_14_144824_create_funds_table.php @@ -0,0 +1,35 @@ +id(); + $table->string('title',100)->nullable(); + $table->integer('file_id')->nullable()->unsigned(); + $table->integer('customer_id')->nullable()->unsigned(); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('funds'); + } +} diff --git a/database/migrations/2023_12_24_062013_create_withdraws_table.php b/database/migrations/2023_12_24_062013_create_withdraws_table.php new file mode 100755 index 0000000..52300f4 --- /dev/null +++ b/database/migrations/2023_12_24_062013_create_withdraws_table.php @@ -0,0 +1,38 @@ +id(); + $table->integer('customer_id')->unsigned()->nullable(); + $table->integer('user_id')->unsigned()->nullable(); + $table->bigInteger('cash')->unsigned()->nullable(); + $table->double('gold')->unsigned()->nullable(); + $table->string('tracked_number',50)->nullable(); + $table->timestamp('date_at')->nullable(); + $table->tinyInteger('sts')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('withdraws'); + } +} diff --git a/database/migrations/2024_01_19_131402_create_bank_accounts_table.php b/database/migrations/2024_01_19_131402_create_bank_accounts_table.php new file mode 100755 index 0000000..7aee40e --- /dev/null +++ b/database/migrations/2024_01_19_131402_create_bank_accounts_table.php @@ -0,0 +1,38 @@ +id(); + $table->integer('customer_id')->nullable()->unsigned(); + $table->string('cart_number')->nullable(); + $table->string('shaba_number')->nullable(); + $table->string('bank_name')->nullable(); + $table->string('account_number')->nullable(); + $table->tinyInteger('sts')->default(1); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('bank_accounts'); + } +} diff --git a/database/migrations/error_log b/database/migrations/error_log new file mode 100755 index 0000000..b660fb5 --- /dev/null +++ b/database/migrations/error_log @@ -0,0 +1,116 @@ +[09-Jun-2024 19:43:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php on line 7 +[09-Jun-2024 19:47:15 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_24_062013_create_withdraws_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_24_062013_create_withdraws_table.php on line 7 +[09-Jun-2024 19:48:34 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_09_183053_create_const.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_09_183053_create_const.php on line 7 +[09-Jun-2024 19:54:46 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_09_194437_create_orders_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_09_194437_create_orders_table.php on line 7 +[09-Jun-2024 20:17:05 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_14_144824_create_funds_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_14_144824_create_funds_table.php on line 7 +[09-Jun-2024 20:22:19 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_12_183618_create_price_candles_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_12_183618_create_price_candles_table.php on line 7 +[09-Jun-2024 23:51:58 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_14_115025_create_logs_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_14_115025_create_logs_table.php on line 7 +[10-Jun-2024 00:18:12 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_12_183319_create_prices_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_12_183319_create_prices_table.php on line 7 +[10-Jun-2024 03:17:56 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2014_10_12_000000_create_users_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2014_10_12_000000_create_users_table.php on line 7 +[10-Jun-2024 04:13:05 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2014_10_12_100000_create_password_resets_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2014_10_12_100000_create_password_resets_table.php on line 7 +[10-Jun-2024 20:07:19 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2014_10_12_100000_create_password_resets_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2014_10_12_100000_create_password_resets_table.php on line 7 +[10-Jun-2024 20:07:19 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_09_183053_create_const.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_09_183053_create_const.php on line 7 +[10-Jun-2024 20:07:20 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php on line 7 +[10-Jun-2024 20:07:21 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php on line 7 +[10-Jun-2024 20:09:19 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_09_183053_create_const.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_09_183053_create_const.php on line 7 +[10-Jun-2024 20:09:20 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php on line 7 +[10-Jun-2024 20:09:21 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2014_10_12_100000_create_password_resets_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2014_10_12_100000_create_password_resets_table.php on line 7 +[10-Jun-2024 20:09:21 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php on line 7 +[10-Jun-2024 20:10:34 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php on line 7 +[10-Jun-2024 20:11:10 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php on line 7 +[10-Jun-2024 20:11:52 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_09_183053_create_const.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_09_183053_create_const.php on line 7 +[10-Jun-2024 20:11:59 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_12_09_183053_create_const.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_12_09_183053_create_const.php on line 7 +[10-Jun-2024 20:12:10 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php on line 7 +[10-Jun-2024 20:12:36 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2014_10_12_000000_create_users_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2014_10_12_000000_create_users_table.php on line 7 +[10-Jun-2024 20:13:19 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2014_10_12_100000_create_password_resets_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2014_10_12_100000_create_password_resets_table.php on line 7 +[10-Jun-2024 20:13:47 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2023_11_30_071902_create_customers_table.php on line 7 +[10-Jun-2024 20:14:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2014_10_12_000000_create_users_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2014_10_12_000000_create_users_table.php on line 7 +[10-Jun-2024 20:14:07 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2014_10_12_100000_create_password_resets_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2014_10_12_100000_create_password_resets_table.php on line 7 +[10-Jun-2024 20:14:13 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Database\Migrations\Migration' not found in /home/montechi/public_html/server_app/database/migrations/2014_10_12_000000_create_users_table.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/database/migrations/2014_10_12_000000_create_users_table.php on line 7 diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100755 index 0000000..57b73b5 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,18 @@ +create(); + } +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100755 index 0000000..b2cd948 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,51 @@ +version: '3.8' + +services: + app: + build: + context: . + dockerfile: Dockerfile + image: vatani-server + ports: + - "8000:80" + volumes: + - .:/var/www/html + environment: + - APP_ENV=local + - APP_DEBUG=true + - APP_KEY=base64:YOUR_APP_KEY + - DB_CONNECTION=mysql + - DB_HOST=db + - DB_PORT=3306 + - DB_USERNAME=${DB_USERNAME} + - DB_DATABASE=${DB_DATABASE} + - DB_PASSWORD_FILE=/run/secrets/db_password + secrets: + - db_password + depends_on: + - db + + db: + image: mysql:8.0 + container_name: laravel-db + ports: + - "3306:3306" + environment: + MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_pass + MYSQL_USER: ${DB_USERNAME} + MYSQL_DATABASE: ${DB_DATABASE} + MYSQL_PASSWORD_FILE: /run/secrets/db_password + volumes: + - db:/var/lib/mysql + secrets: + - db_root_pass + - db_password + +secrets: + db_root_pass: + file: ./secrets/db_root_pass.txt + db_password: + file: ./secrets/db_password.txt + +volumes: + db: diff --git a/error_log b/error_log new file mode 100755 index 0000000..fa545b0 --- /dev/null +++ b/error_log @@ -0,0 +1,94 @@ +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:27 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:28 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:28 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:29 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:29 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:30 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:31 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:31 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:32 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:32 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:33 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:34 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:34 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:35 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:35 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:36 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:49 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:54:36 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:54:49 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:58:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:58:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:07:37 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:07:38 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:07:40 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:07:40 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:32:46 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:37:02 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 21:28:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 21:28:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 21:28:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 21:28:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 21:28:33 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 22:04:19 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 22:36:13 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 22:53:25 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 22:53:25 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 01:00:07 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 01:04:36 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 02:05:42 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 02:09:26 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 03:02:28 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 03:16:01 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 03:53:33 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 09:59:28 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 10:25:46 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 11:41:19 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 17:52:45 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 17:52:53 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 17:53:06 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 17:53:06 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 17:53:09 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jul-2024 16:37:59 Asia/Tehran] Error: 'code' key is not set in the product response. +[28-Jul-2024 13:01:33 Asia/Tehran] PHP Fatal error: Declaration of App\Http\Controllers\Admin\CustomerController::table() must be compatible with App\Http\Controllers\SuperController::table(Illuminate\Http\Request $request) in /home/montechi/public_html/server_app/app/Http/Controllers/Admin/CustomerController.php on line 27 +[28-Jul-2024 13:01:34 Asia/Tehran] PHP Fatal error: Declaration of App\Http\Controllers\Admin\CustomerController::table() must be compatible with App\Http\Controllers\SuperController::table(Illuminate\Http\Request $request) in /home/montechi/public_html/server_app/app/Http/Controllers/Admin/CustomerController.php on line 27 +[30-Nov-2024 13:11:27 UTC] PHP Warning: require(/home/montechi/afjo.gholaktala.ir/server/../vendor/autoload.php): Failed to open stream: No such file or directory in /home/montechi/afjo.gholaktala.ir/server/index.php on line 33 +[30-Nov-2024 13:11:27 UTC] PHP Fatal error: Uncaught Error: Failed opening required '/home/montechi/afjo.gholaktala.ir/server/../vendor/autoload.php' (include_path='.:/opt/cpanel/ea-php82/root/usr/share/pear') in /home/montechi/afjo.gholaktala.ir/server/index.php:33 +Stack trace: +#0 {main} + thrown in /home/montechi/afjo.gholaktala.ir/server/index.php on line 33 +[07-Dec-2024 16:37:03 Asia/Tehran] PHP Fatal error: Cannot redeclare App\Models\Product::wallet() in /home/montechi/afjo.gholaktala.ir/server/app/Models/Product.php on line 95 +[07-Dec-2024 16:37:43 Asia/Tehran] PHP Fatal error: Cannot redeclare App\Models\Product::wallet() in /home/montechi/afjo.gholaktala.ir/server/app/Models/Product.php on line 96 diff --git a/favicon.ico b/favicon.ico new file mode 100755 index 0000000..e69de29 diff --git a/index.php b/index.php new file mode 100755 index 0000000..b0ba454 --- /dev/null +++ b/index.php @@ -0,0 +1,54 @@ +make(Kernel::class); + +$response = $kernel->handle( + $request = Request::capture() +)->send(); + +$kernel->terminate($request, $response); diff --git a/package-lock.json b/package-lock.json new file mode 100755 index 0000000..5c2e35e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6881 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true + }, + "@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "requires": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "dev": true, + "requires": { + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" + } + }, + "@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "requires": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + } + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "requires": { + "@babel/types": "^7.25.2" + } + }, + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + } + }, + "@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/preset-env": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + } + }, + "@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/clean-css": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.11.tgz", + "integrity": "sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==", + "dev": true, + "requires": { + "@types/node": "*", + "source-map": "^0.6.0" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-9.0.0.tgz", + "integrity": "sha512-4IaT+BdPUAFf/AAy3XlFAbqGk4RawhdidxWO5XTe+PJAYAr4d7m2FHiqyEPXbDpwS+IaLIJq5AIjLE9HcwMGBg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin-gifsicle": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.4.tgz", + "integrity": "sha512-ZghMBd/Jgqg5utTJNPmvf6DkuHzMhscJ8vgf/7MUGCpO+G+cLrhYltL+5d+h3A1B4W73S2SrmJZ1jS5LACpX+A==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-mozjpeg": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.4.tgz", + "integrity": "sha512-ZCAxV8SYJB8ehwHpnbRpHjg5Wc4HcyuAMiDhXbkgC7gujDoOTyHO3dhDkUtZ1oK1DLBRZapqG9etdLVhUml7yQ==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-optipng": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.4.tgz", + "integrity": "sha512-mvKnDMC8eCYZetAQudjs1DbgpR84WhsTx1wgvdiXnpuUEti3oJ+MaMYBRWPY0JlQ4+y4TXKOfa7+LOuT8daegQ==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-svgo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", + "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", + "dev": true, + "requires": { + "@types/imagemin": "*", + "@types/svgo": "^1" + } + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "@types/node": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", + "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "dev": true, + "requires": { + "undici-types": "~6.13.0" + } + }, + "@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/svgo": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", + "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", + "dev": true + }, + "@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true + }, + "@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true + }, + "acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dev": true, + "requires": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + } + } + }, + "autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "requires": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001647", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001647.tgz", + "integrity": "sha512-n83xdNiyeNcHpzWY+1aFbqCK7LuLfBricc4+alSQL2Xb6OR3XpnQAmlDG+pQcdTfiHRuLcQ96VOfrPSGiNJYSg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "collect.js": { + "version": "4.36.1", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.36.1.tgz", + "integrity": "sha512-jd97xWPKgHn6uvK31V6zcyPd40lUJd7gpYxbN2VOVxGWO4tyvS9Li4EpsFjXepGTo2tYcOTC4a8YsbQXMJ4XUw==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha512-f/ZaH1aLe64qHgTILdldbvyfGiGF4uzeo9IuXUloIOLQzFmIPloy9QbZadNsuVv0j5qbKQvQb/H/UYf2UsKTpw==", + "dev": true, + "requires": { + "commander": "^2.9.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dev": true, + "requires": { + "browserslist": "^4.23.0" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true + }, + "css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "dev": true + }, + "elliptic": { + "version": "6.5.6", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.6.tgz", + "integrity": "sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "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==", + "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "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==", + "dev": true + }, + "fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-type": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", + "dev": true + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true + }, + "html-loader": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", + "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", + "dev": true, + "requires": { + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + } + } + }, + "htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "imagemin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", + "dev": true, + "requires": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" + } + }, + "img-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-4.0.0.tgz", + "integrity": "sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "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==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true + }, + "laravel-mix": { + "version": "6.0.49", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.49.tgz", + "integrity": "sha512-bBMFpFjp26XfijPvY5y9zGKud7VqlyOE0OWUcPo3vTBY5asw8LTjafAbee1dhfLz6PWNqDziz69CP78ELSpfKw==", + "dev": true, + "requires": { + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/runtime": "^7.15.4", + "@types/babel__core": "^7.1.16", + "@types/clean-css": "^4.2.5", + "@types/imagemin-gifsicle": "^7.0.1", + "@types/imagemin-mozjpeg": "^8.0.1", + "@types/imagemin-optipng": "^5.2.1", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.4.0", + "babel-loader": "^8.2.3", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "clean-css": "^5.2.4", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.5", + "commander": "^7.2.0", + "concat": "^1.0.3", + "css-loader": "^5.2.6", + "cssnano": "^5.0.8", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^4.0.0", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.6.2", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.1.0", + "postcss-loader": "^6.2.0", + "semver": "^7.3.5", + "strip-ansi": "^6.0.0", + "style-loader": "^2.0.0", + "terser": "^5.9.0", + "terser-webpack-plugin": "^5.2.4", + "vue-style-loader": "^4.1.3", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.8.0", + "webpack-notifier": "^1.14.1", + "webpackbar": "^5.0.0-3", + "yargs": "^17.2.1" + } + }, + "launch-editor": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", + "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, + "node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "dev": true, + "requires": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + } + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "postcss": { + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "dev": true, + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + } + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + } + }, + "postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + } + }, + "postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "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==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "requires": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + } + }, + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "undici-types": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "requires": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "dev": true, + "requires": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + } + }, + "webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + } + }, + "webpack-notifier": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", + "dev": true, + "requires": { + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100755 index 0000000..00c6506 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "private": true, + "scripts": { + "dev": "npm run development", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", + "prod": "npm run production", + "production": "mix --production" + }, + "devDependencies": { + "axios": "^0.21", + "laravel-mix": "^6.0.6", + "lodash": "^4.17.19", + "postcss": "^8.1.14" + } +} diff --git a/packages/rooyesh/wallet/composer.json b/packages/rooyesh/wallet/composer.json new file mode 100755 index 0000000..2372b1c --- /dev/null +++ b/packages/rooyesh/wallet/composer.json @@ -0,0 +1,19 @@ +{ + "name": "rooyesh/wallet", + "description": "wallet module for source transaction system , balance management system ...", + "autoload": { + "psr-4": { + "Rooyesh\\Wallet\\": "src/" + } + }, + "authors": [ + { + "name": "yousef amini", + "email": "yo3ef.amini@gmail.com" + } + ], + "minimum-stability": "dev", + "require": { + + } +} diff --git a/packages/rooyesh/wallet/composer.json.bak b/packages/rooyesh/wallet/composer.json.bak new file mode 100755 index 0000000..fa82c27 --- /dev/null +++ b/packages/rooyesh/wallet/composer.json.bak @@ -0,0 +1,20 @@ +{ + "name": "rooyesh/wallet", + "description": "wallet module for source transaction system , balance management system ...", + "type": "composer-plugin", + "autoload": { + "psr-4": { + "Rooyesh\\Wallet\\": "src/" + } + }, + "authors": [ + { + "name": "yousef amini", + "email": "yo3ef.amini@gmail.com" + } + ], + "minimum-stability": "dev", + "require": { + + } +} diff --git a/packages/rooyesh/wallet/index.php b/packages/rooyesh/wallet/index.php new file mode 100755 index 0000000..51d0669 --- /dev/null +++ b/packages/rooyesh/wallet/index.php @@ -0,0 +1,5 @@ +wallet_id = $wallet->id; + } + + public function context() + { + return [' ' => $this->wallet_id]; + } +} diff --git a/packages/rooyesh/wallet/src/WalletServiceProvider.php b/packages/rooyesh/wallet/src/WalletServiceProvider.php new file mode 100755 index 0000000..88cf8b1 --- /dev/null +++ b/packages/rooyesh/wallet/src/WalletServiceProvider.php @@ -0,0 +1,18 @@ +loadMigrationsFrom(__DIR__ . "/migrations"); + } + + public function register() + { + + } +} diff --git a/packages/rooyesh/wallet/src/interfaces/TransactionInterface.php b/packages/rooyesh/wallet/src/interfaces/TransactionInterface.php new file mode 100755 index 0000000..266ad27 --- /dev/null +++ b/packages/rooyesh/wallet/src/interfaces/TransactionInterface.php @@ -0,0 +1,118 @@ +transaction = TransactionInterface::apply_transaction($wallet_interface, $_inp, $_type,$deposit_gold ,$deposit_cash,$gold_block,$meta); + } + + static function validate_last_transaction($wallet_id) + { +// $last_transaction = Transaction::where('wallet', '=', $wallet_id)->orderBy('created_at', 'DESC')->first(); +// if ($last_transaction and $last_transaction->hash !== TransactionInterface::generate_hash($last_transaction)) { +// throw new Exceptions\LastTransactionValidateFailed(); +// } + } + + private static function generate_hash($transaction) + { + $last_transaction_hash = ''; + $last_user_transaction = Transaction::where('wallet', '=', $transaction->wallet)->orderBy('created_at', 'DESC'); + if ($last_user_transaction->count() and $last_user_transaction->first() != $transaction) { + $last_transaction_hash = $last_user_transaction->first()->hash; + } + return hash('sha256', + hash('sha256', $transaction->gold) . + hash('sha256', $transaction->cash) . + hash('sha256', $transaction->wallet) . + "yhoenszeaf" . $last_transaction_hash + ); + } + + private static function set_hash($transaction) + { + $transaction->hash = TransactionInterface::generate_hash($transaction); + $transaction->save(); + } + + public static function apply_transaction($wallet_interface, $_inp, $_type,$deposit_gold,$deposit_cash,$gold_block, $meta = []) + { + $wallet = $wallet_interface->wallet; + TransactionInterface::validate_last_transaction($wallet->id); + #-------------Check Balance -------- + if (!$deposit_gold) { +// if ($_type === 1 && $wallet->cash < $_inp['value']) { +// throw new Exceptions\NotEnoughCashBalance(); +// +// } + if ($_type === 2 && $wallet->gold < $_inp['gold']) { + throw new UnprocessableEntityHttpException('مقدار وارد شده کمتر از موجودی شماست'); + + } + } +// $_inp['value'] = abs($_inp['value']) * ($deposit ? 1 : -1); + if (isset($_inp['gold'])){ + $_inp['gold'] = abs($_inp['gold']) * ($deposit_gold ? 1 : -1); + $wallet->gold += $_inp['gold']; + $_inp['balance_gold'] = $wallet->gold; + } + if (isset($_inp['cash'])){ + $_inp['cash'] = abs($_inp['cash']) * ($deposit_cash ? 1 : -1); + $wallet->cash += $_inp['cash']; + $_inp['balance_cash'] = $wallet->cash; + } + if($gold_block != 0){ + $wallet->gold_block += $gold_block; + } + $_inp['wallet'] = $wallet->id; + $_inp['type'] = $_type; +// $_inp['transaction_type'] = $_type; + $_inp['customer_id'] = $wallet->owner; +// $_inp['balance'] = $wallet->cash + $_inp['cash']; + $transaction_validate_rules = [ + 'wallet' => 'required', + 'type' => 'required', + 'expire_at' => 'date', + 'cash' => 'integer', + 'note' => 'string', + 'balance' => 'integer', + ]; + $transaction_validator = Validator::make($_inp, $transaction_validate_rules); + if ($transaction_validator->failed()) { + throw ValidationException::withMessages($transaction_validator->errors()->all()); + } + $transaction = Transaction::create($_inp); + $transaction->save(); + TransactionInterface::set_hash($transaction); + $meta['transaction'] = $transaction->id; + $transaction_metas = TransactionMeta::create($meta); + +// if ($_inp['type'] == 1) { +// $wallet->cash += $_inp['value']; +// } elseif ($_inp['type'] == 2) { +// $wallet->gold += $_inp['value']; +// } + $wallet->save(); + $wallet_interface->set_hash(); + return $transaction; + } + +} diff --git a/packages/rooyesh/wallet/src/interfaces/WalletInterface.php b/packages/rooyesh/wallet/src/interfaces/WalletInterface.php new file mode 100755 index 0000000..1c9e178 --- /dev/null +++ b/packages/rooyesh/wallet/src/interfaces/WalletInterface.php @@ -0,0 +1,73 @@ +owner_id = $owner_id; + $this->owner_type = $owner_type; + + if (wallet::where([ + ['owner', '=', $owner_id], + ['owner_type', '=', $owner_type], + ['fund_id', '=', $fund_id], + ['product_id', '=', $product_id], + ])->count()) { + $this->wallet = wallet::where([ + ['owner', '=', $owner_id], + ['owner_type', '=', $owner_type], + ['fund_id', '=', $fund_id], + ['product_id', '=', $product_id], + ])->first(); + $this->validate(); + } else { + $this->wallet = Wallet::create([ + 'owner' => $owner_id, + 'owner_type' => $owner_type, + 'gold' => 0, + 'cash' => 0, + 'fund_id'=>$fund_id, + 'product_id'=>$product_id + ]); + $this->set_hash(); + } + } + + public function validate(): bool + { + +// if ($this->wallet->hash !== $this->generate_hash()) { +// throw new UnprocessableEntityHttpException('امکان شارز این کیف پول وجود ندارد'); +// } + return true; + } + + private function generate_hash(): string + { + $last_transaction = Transaction::where('wallet', '=', $this->wallet->id)->orderBy('created_at', 'DESC')->first(); + $last_transaction_hash = $last_transaction ? hash('sha256', $last_transaction->hash) : ''; + return hash('sha256', hash('sha256', $this->wallet->gold) . + hash('sha256', $this->wallet->cash) . hash('sha256', $this->wallet->owner) . $last_transaction_hash . "yhoenszeaf"); + } + + public function set_hash(): bool + { + $this->wallet->hash = $this->generate_hash(); + $this->wallet->save(); + return true; + } +} + diff --git a/packages/rooyesh/wallet/src/migrations/2021_12_02_065938_create_wallet_moudle_table.php b/packages/rooyesh/wallet/src/migrations/2021_12_02_065938_create_wallet_moudle_table.php new file mode 100755 index 0000000..9dd76fc --- /dev/null +++ b/packages/rooyesh/wallet/src/migrations/2021_12_02_065938_create_wallet_moudle_table.php @@ -0,0 +1,73 @@ +id(); + $ownerTypes = [ + 1 => "user", + 2 => "shop", + ]; + $table->enum('owner_type', array_keys($ownerTypes))->default(1); + $table->timestamps(); + $table->bigInteger('owner'); + $table->bigInteger('cash'); + $table->string('hash', 128)->nullable(true); + $table->float('gold'); + $table->bigInteger('fund_id')->nullable(); + + }); + + Schema::create('transactions', function (Blueprint $table) { + $transactionTypes = [ + 1 => "cash", + 2 => "gold", + 3 => "expire", + ]; + $table->id(); + $table->bigInteger('wallet', false, true); + $table->enum('transaction_type', array_keys($transactionTypes))->default(1); + $table->timestamps(); + $table->bigInteger('cash')->nullable(); + $table->float('gold')->default(0); + $table->dateTime('expire_at')->nullable(true); + $table->string('hash', 128)->nullable(true); + $table->text('note')->nullable(true); + $table->bigInteger('customer_id')->nullable()->unsigned(); + $table->integer('type')->nullable()->unsigned(); + $table->bigInteger('fund_id')->nullable(); + $table->timestamp('start_at')->nullable(); + $table->timestamp('end_at')->nullable(); + + }); + + Schema::create('transaction_metas', function (Blueprint $table) { + $table->bigInteger('transaction', false, true); + $table->bigInteger('order_id')->nullable()->unsigned(); + $table->id(); + $table->timestamps(); + }); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/packages/rooyesh/wallet/src/models/Transaction.php b/packages/rooyesh/wallet/src/models/Transaction.php new file mode 100755 index 0000000..1a0b19d --- /dev/null +++ b/packages/rooyesh/wallet/src/models/Transaction.php @@ -0,0 +1,55 @@ +'boolean', + 'number'=>'float', + ]; + static $TYPES = [ + 1 => 'خرید طلا', + 2 => 'فروش طلا', + 3 => 'واریز ریالی', + 7 => 'واریز طلایی', + 4 => 'برداشت ریالی', + 5 => 'واریز', + 6 => 'برداشت', + 8 => ' پاداش بابت معرفی', + 9 => 'سود زیر مجموعه', + ]; + public function customer() + { + return $this->belongsTo('App\Models\Customer')->select(['id','name']); + } + + + public function wallet() + { + return $this->belongsTo(Wallet::class, 'wallet', 'id'); // 'wallet' is the foreign key in transactions table + } + public function fund() + { + return $this->belongsTo('App\Models\Fund','fund_id')->select(['id','title']); + } + public function product() + { + return $this->belongsTo('App\Models\Product','product_id')->select(['id','title','group_type']); + } + public function order() + { + return $this->belongsTo('App\Models\Order','order_id'); + } + public function withdraw() + { + return $this->belongsTo('App\Models\Withdraw','withdraw_id'); + } +} diff --git a/packages/rooyesh/wallet/src/models/TransactionMeta.php b/packages/rooyesh/wallet/src/models/TransactionMeta.php new file mode 100755 index 0000000..33ce360 --- /dev/null +++ b/packages/rooyesh/wallet/src/models/TransactionMeta.php @@ -0,0 +1,13 @@ +belongsTo('App\Models\Customer','owner')->select(['id','name']); + } + public function fund() + { + return $this->belongsTo('App\Models\Fund','fund_id')->select(['id','title']); + } + public function Product() + { + return $this->belongsTo('App\Models\Product','product_id'); + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100755 index 0000000..4ae4d97 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,31 @@ + + + + + ./tests/Unit + + + ./tests/Feature + + + + + ./app + + + + + + + + + + + + + + diff --git a/public/.htaccess b/public/.htaccess new file mode 100755 index 0000000..841d260 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,28 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + + +# php -- BEGIN cPanel-generated handler, do not edit +# Set the “ea-php82” package as the default “PHP” programming language. + + AddHandler application/x-httpd-ea-php82___lsphp .php .php8 .phtml + +# php -- END cPanel-generated handler, do not edit diff --git a/public/error_log b/public/error_log new file mode 100755 index 0000000..06503dc --- /dev/null +++ b/public/error_log @@ -0,0 +1,87 @@ +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:21 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:27 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:28 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:28 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:29 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:29 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:30 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:31 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:31 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:32 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:32 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:33 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:34 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:34 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:35 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:35 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:36 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:49 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:53:50 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:54:36 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:54:49 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:58:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 19:58:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:07:37 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:07:38 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:07:40 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:07:40 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:32:46 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 20:37:02 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 21:28:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 21:28:22 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 21:28:23 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 21:28:24 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 21:28:33 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 22:04:19 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 22:36:13 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 22:53:25 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[07-Jun-2024 22:53:25 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 01:00:07 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 01:04:36 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 02:05:42 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 02:09:26 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 03:02:28 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 03:16:01 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 03:53:33 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 09:59:28 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 10:25:46 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 11:41:19 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 17:52:45 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 17:52:53 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 17:53:06 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 17:53:06 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jun-2024 17:53:09 UTC] PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.4.33. in /home/montechi/public_html/server_app/vendor/composer/platform_check.php on line 24 +[08-Jul-2024 16:37:59 Asia/Tehran] Error: 'code' key is not set in the product response. +[28-Jul-2024 13:01:33 Asia/Tehran] PHP Fatal error: Declaration of App\Http\Controllers\Admin\CustomerController::table() must be compatible with App\Http\Controllers\SuperController::table(Illuminate\Http\Request $request) in /home/montechi/public_html/server_app/app/Http/Controllers/Admin/CustomerController.php on line 27 +[28-Jul-2024 13:01:34 Asia/Tehran] PHP Fatal error: Declaration of App\Http\Controllers\Admin\CustomerController::table() must be compatible with App\Http\Controllers\SuperController::table(Illuminate\Http\Request $request) in /home/montechi/public_html/server_app/app/Http/Controllers/Admin/CustomerController.php on line 27 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100755 index 0000000..e69de29 diff --git a/public/index.php b/public/index.php new file mode 100755 index 0000000..24d0093 --- /dev/null +++ b/public/index.php @@ -0,0 +1,54 @@ +make(Kernel::class); + +$response = $kernel->handle( + $request = Request::capture() +)->send(); + +$kernel->terminate($request, $response); diff --git a/public/robots.txt b/public/robots.txt new file mode 100755 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100755 index 0000000..e69de29 diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100755 index 0000000..a19378c --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1,10 @@ +require('./bootstrap'); +if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('/service-worker.js') + .then(function(registration) { + console.log('Service Worker registered with scope:', registration.scope); + }) + .catch(function(error) { + console.error('Service Worker registration failed:', error); + }); +} \ No newline at end of file diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js new file mode 100755 index 0000000..6922577 --- /dev/null +++ b/resources/js/bootstrap.js @@ -0,0 +1,28 @@ +window._ = require('lodash'); + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// window.Pusher = require('pusher-js'); + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: process.env.MIX_PUSHER_APP_KEY, +// cluster: process.env.MIX_PUSHER_APP_CLUSTER, +// forceTLS: true +// }); diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php new file mode 100755 index 0000000..6598e2c --- /dev/null +++ b/resources/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php new file mode 100755 index 0000000..d481411 --- /dev/null +++ b/resources/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php new file mode 100755 index 0000000..2345a56 --- /dev/null +++ b/resources/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php new file mode 100755 index 0000000..4780fc2 --- /dev/null +++ b/resources/lang/en/validation.php @@ -0,0 +1,132 @@ + ':attribute باید پذیرفته شود.', + 'accepted_if' => ':attribute باید پذیرفته شود وقتی :other برابر :value باشد.', + 'active_url' => ':attribute یک URL معتبر نیست.', + 'after' => ':attribute باید تاریخی بعد از :date باشد.', + 'after_or_equal' => ':attribute باید تاریخی بعد یا برابر با :date باشد.', + 'alpha' => ':attribute فقط باید شامل حروف باشد.', + 'alpha_dash' => ':attribute فقط باید شامل حروف، اعداد، خط تیره و زیرخط باشد.', + 'alpha_num' => ':attribute فقط باید شامل حروف و اعداد باشد.', + 'array' => ':attribute باید یک آرایه باشد.', + 'before' => ':attribute باید تاریخی قبل از :date باشد.', + 'before_or_equal' => ':attribute باید تاریخی قبل یا برابر با :date باشد.', + 'between' => [ + 'numeric' => ':attribute باید بین :min و :max باشد.', + 'file' => ':attribute باید بین :min و :max کیلوبایت باشد.', + 'string' => ':attribute باید بین :min و :max کاراکتر باشد.', + 'array' => ':attribute باید بین :min و :max آیتم داشته باشد.', + ], + 'boolean' => ':attribute باید صحیح یا غلط باشد.', + 'confirmed' => ':attribute با تاییدیه مطابقت ندارد.', + 'current_password' => 'رمز عبور اشتباه است.', + 'date' => ':attribute یک تاریخ معتبر نیست.', + 'date_equals' => ':attribute باید تاریخی برابر با :date باشد.', + 'date_format' => ':attribute با فرمت :format مطابقت ندارد.', + 'declined' => ':attribute باید رد شود.', + 'declined_if' => ':attribute باید رد شود وقتی :other برابر :value باشد.', + 'different' => ':attribute و :other باید متفاوت باشند.', + 'digits' => ':attribute باید :digits رقم باشد.', + 'digits_between' => ':attribute باید بین :min و :max رقم باشد.', + 'dimensions' => ':attribute ابعاد تصویر نامعتبر است.', + 'distinct' => ':attribute دارای مقدار تکراری است.', + 'email' => ':attribute باید یک آدرس ایمیل معتبر باشد.', + 'ends_with' => ':attribute باید با یکی از موارد زیر به پایان برسد: :values.', + 'enum' => ':attribute انتخاب شده نامعتبر است.', + 'exists' => ':attribute انتخاب شده نامعتبر است.', + 'file' => ':attribute باید یک فایل باشد.', + 'filled' => ':attribute باید مقداری داشته باشد.', + 'gt' => [ + 'numeric' => ':attribute باید بزرگتر از :value باشد.', + 'file' => ':attribute باید بزرگتر از :value کیلوبایت باشد.', + 'string' => ':attribute باید بزرگتر از :value کاراکتر باشد.', + 'array' => ':attribute باید بیشتر از :value آیتم داشته باشد.', + ], + 'gte' => [ + 'numeric' => ':attribute باید بزرگتر یا برابر با :value باشد.', + 'file' => ':attribute باید بزرگتر یا برابر با :value کیلوبایت باشد.', + 'string' => ':attribute باید بزرگتر یا برابر با :value کاراکتر باشد.', + 'array' => ':attribute باید :value آیتم یا بیشتر داشته باشد.', + ], + 'image' => ':attribute باید یک تصویر باشد.', + 'in' => ':attribute انتخاب شده نامعتبر است.', + 'in_array' => ':attribute در :other وجود ندارد.', + 'integer' => ':attribute باید یک عدد صحیح باشد.', + 'ip' => ':attribute باید یک آدرس IP معتبر باشد.', + 'ipv4' => ':attribute باید یک آدرس IPv4 معتبر باشد.', + 'ipv6' => ':attribute باید یک آدرس IPv6 معتبر باشد.', + 'json' => ':attribute باید یک رشته JSON معتبر باشد.', + 'lt' => [ + 'numeric' => ':attribute باید کمتر از :value باشد.', + 'file' => ':attribute باید کمتر از :value کیلوبایت باشد.', + 'string' => ':attribute باید کمتر از :value کاراکتر باشد.', + 'array' => ':attribute باید کمتر از :value آیتم داشته باشد.', + ], + 'lte' => [ + 'numeric' => ':attribute باید کمتر یا برابر با :value باشد.', + 'file' => ':attribute باید کمتر یا برابر با :value کیلوبایت باشد.', + 'string' => ':attribute باید کمتر یا برابر با :value کاراکتر باشد.', + 'array' => ':attribute نباید بیشتر از :value آیتم داشته باشد.', + ], + 'mac_address' => ':attribute باید یک آدرس MAC معتبر باشد.', + 'max' => [ + 'numeric' => ':attribute نباید بزرگتر از :max باشد.', + 'file' => ':attribute نباید بزرگتر از :max کیلوبایت باشد.', + 'string' => ':attribute نباید بزرگتر از :max کاراکتر باشد.', + 'array' => ':attribute نباید بیشتر از :max آیتم داشته باشد.', + ], + 'mimes' => ':attribute باید یک فایل از نوع: :values باشد.', + 'mimetypes' => ':attribute باید یک فایل از نوع: :values باشد.', + 'min' => [ + 'numeric' => ':attribute نباید کمتر از :min باشد.', + 'file' => ':attribute نباید کمتر از :min کیلوبایت باشد.', + 'string' => ':attribute نباید کمتر از :min کاراکتر باشد.', + 'array' => ':attribute نباید کمتر از :min آیتم داشته باشد.', + ], + 'multiple_of' => ':attribute باید مضربی از :value باشد.', + 'not_in' => ':attribute انتخاب شده نامعتبر است.', + 'not_regex' => ':attribute فرمت نامعتبر است.', + 'numeric' => ':attribute باید یک عدد باشد.', + 'password' => 'رمز عبور اشتباه است.', + 'present' => ':attribute باید حضور داشته باشد.', + 'prohibited' => ':attribute ممنوع است.', + 'prohibited_if' => ':attribute ممنوع است وقتی :other برابر :value باشد.', + 'prohibited_unless' => ':attribute ممنوع است مگر اینکه :other در :values باشد.', + 'prohibits' => ':attribute اجازه نمی‌دهد که :other حضور داشته باشد.', + 'regex' => ':attribute فرمت نامعتبر است.', + 'required' => ':attribute اجباری است.', + 'required_array_keys' => ':attribute باید شامل ورودی‌های: :values باشد.', + 'required_if' => ':attribute اجباری است وقتی :other برابر :value باشد.', + 'required_unless' => ':attribute اجباری است مگر اینکه :other در :values باشد.', + 'required_with' => ':attribute اجباری است وقتی :values حضور داشته باشد.', + 'required_with_all' => ':attribute اجباری است وقتی :values حضور داشته باشند.', + 'required_without' => ':attribute اجباری است وقتی :values حضور نداشته باشد.', + 'required_without_all' => ':attribute اجباری است وقتی هیچکدام از :values حضور ندارند.', + 'same' => ':attribute و :other باید مطابقت داشته باشند.', + 'size' => [ + 'numeric' => ':attribute باید برابر :size باشد.', + 'file' => ':attribute باید برابر :size کیلوبایت باشد.', + 'string' => ':attribute باید برابر :size کاراکتر باشد.', + 'array' => ':attribute باید شامل :size آیتم باشد.', + ], + 'starts_with' => ':attribute باید با یکی از موارد زیر شروع شود: :values.', + 'string' => ':attribute باید یک رشته باشد.', + 'timezone' => ':attribute باید یک منطقه زمانی معتبر باشد.', + 'unique' => ':attribute قبلاً انتخاب شده است.', + 'uploaded' => 'بارگذاری :attribute شکست خورد.', + 'url' => ':attribute باید یک URL معتبر باشد.', + 'uuid' => ':attribute باید یک UUID معتبر باشد.', + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'پیام دلخواه', + ], + ], + + 'attributes' => [ + 'card_id' => 'شناسه کارت', + ], + +]; diff --git a/resources/lang/en/validationOrginal.php b/resources/lang/en/validationOrginal.php new file mode 100755 index 0000000..783003c --- /dev/null +++ b/resources/lang/en/validationOrginal.php @@ -0,0 +1,163 @@ + 'The :attribute must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute must only contain letters.', + 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute must only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal to :value.', + 'file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal to :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal to :value.', + 'file' => 'The :attribute must be less than or equal to :value kilobytes.', + 'string' => 'The :attribute must be less than or equal to :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'max' => [ + 'numeric' => 'The :attribute must not be greater than :max.', + 'file' => 'The :attribute must not be greater than :max kilobytes.', + 'string' => 'The :attribute must not be greater than :max characters.', + 'array' => 'The :attribute must not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => 'The password is incorrect.', + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute must be a valid URL.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/views/app.blade.php b/resources/views/app.blade.php new file mode 100755 index 0000000..f349030 --- /dev/null +++ b/resources/views/app.blade.php @@ -0,0 +1,701 @@ + + + + + + + + gholaktala Dashboard | Dashboard + + + + + + + +
+ + +
+ + +
+ + + +
+
+

Dashboard

+
+
+
+
+ +
+
+

{{$GT_active_customers}}

+

کاربران فعال

+

+ + 4.07% + + Last month +

+
+
+
+ +
+
+
+ +
+
+

{{$GT_all_customers}}

+

همه کاربران

+

+ + 0.24% + + Last month +

+
+
+
+ +
+
+
+ +
+
+

{{$GT_deActive_customers}}

+

کاربران غیر فعال

+

+ + 1.64% + + Last month +

+
+
+
+ +
+
+
+ +
+
+

{{$GT_no_login_customers}}

+

کاربرانی که لاگین نکرده اند

+

+ + 0.00% + + Last month +

+
+
+
+ +
+
+
+ +
+
+

{{$GT_no_valid_customers}}

+

کاربرانی که احراز نشده اند

+

+ + 1.64% + + Last month +

+
+
+
+
+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + TitleAuthorStatusDateAction
+ + + Starting your traveling blog with Vasco + +
+ + + User Name + Jenny Wilson +
+
Pending17.04.2021 + + + + +
+ + + Start a blog to reach your creative peak + +
+ + + User Name + Annette Black +
+
Pending23.04.2021 + + + + +
+ + + Helping a local business reinvent itself + +
+ + + User Name + Kathryn Murphy +
+
Active17.04.2021 + + + + +
+ + + Caring is the new marketing + +
+ + + User Name + Guy Hawkins +
+
Active17.04.2021 + + + + +
+ + + How to build a loyal community online and offline + +
+ + + User Name + Robert Fox +
+
Active17.04.2021 + + + + +
+ + + How to build a loyal community online and offline + +
+ + + User Name + Robert Fox +
+
Active17.04.2021 + + + + +
+
+
+
+
+ + +
+
+
+

پاداش های معرفی

+

28 Categories, 1400 Posts

+
+ +
+
+
+
+
+ + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/resources/views/emails/transaction_notification.blade.php b/resources/views/emails/transaction_notification.blade.php new file mode 100755 index 0000000..2861e36 --- /dev/null +++ b/resources/views/emails/transaction_notification.blade.php @@ -0,0 +1,61 @@ + + + + + + اطلاعیه خرید و فروش طلا + + + +
+

{{ $transactionId }}

+ +
+ + diff --git a/resources/views/emails/your_template.blade.php b/resources/views/emails/your_template.blade.php new file mode 100755 index 0000000..5fdbaf2 --- /dev/null +++ b/resources/views/emails/your_template.blade.php @@ -0,0 +1,89 @@ + + + + + + اطلاعیه خرید و فروش + + + +
+
+

اطلاعیه خرید و فروش طلا

+
+
+

سلام،

+

اطلاعیه‌ای برای شما در مورد تراکنش جدید خرید و فروش طلا دریافت کرده‌ایم. لطفاً جزئیات زیر را بررسی کنید:

+

شناسه تراکنش: [شناسه تراکنش]

+

تاریخ تراکنش: [تاریخ تراکنش]

+

جزئیات تراکنش:

+
    +
  • آیتم: طلا 18 عیار
  • +
  • مقدار: [مقدار]
  • +
  • قیمت واحد: [قیمت]
  • +
  • مبلغ کل: [مبلغ کل]
  • +
+

برای مشاهده جزئیات بیشتر و مدیریت تراکنش‌ها، لطفاً روی دکمه زیر کلیک کنید:

+ پنل ادمین +

با احترام،
شرکت قلک طلا

+
+ +
+ + diff --git a/resources/views/notification.blade.php b/resources/views/notification.blade.php new file mode 100755 index 0000000..02922f3 --- /dev/null +++ b/resources/views/notification.blade.php @@ -0,0 +1,42 @@ + + + Pusher Test + + +

Pusher Test

+

+ Publish an event to channel my-channel + with event name my-event; it will appear below: +

+
+
    +
  • +{{-- {{message}}--}} +
  • +
+
+ + + + + \ No newline at end of file diff --git a/resources/views/showTransactionReport.blade.php b/resources/views/showTransactionReport.blade.php new file mode 100755 index 0000000..5fdea27 --- /dev/null +++ b/resources/views/showTransactionReport.blade.php @@ -0,0 +1,374 @@ +@if($Withdraw->sts == 3) +@php($color = "#FF1010FF") +@php($lable = "تراکنش ناموفق ") +@php($image = "https://gholaktala.ir/images/red-x-icon.png") +@endif +@if($Withdraw->sts == 2) +@php($color = "#66FF6EFF") +@php($lable = "تراکنش موفق ") +@php($image = "https://uxwing.com/wp-content/themes/uxwing/download/checkmark-cross/done-icon.png") +@endif + + + + + + + + + + + + + + + +
+
+
+
+ + + {{$lable}} + + + {{-- --}} + {{-- تراکنش ناموفق --}} + +
+ به مبلغ + +
+ + {{$Withdraw->cash}} + IRR + +
+ کد پیگیری + +
+ + {{$Withdraw->tracked_number}} + +
+
+ + کد درگاه + +
+ + {{$Withdraw->zify_code}} + +
+ +
+ + + {{-- --}} + + + {{-- --}} + + +
+
+ +
+
+ + +{{--
--}} + + +{{-- @if($Withdraw->sts == 2)--}} +{{--

--}} +{{-- موفق--}} +{{--

--}} +{{-- @endif--}} +{{-- @if($Withdraw->sts == 3)--}} +{{--

--}} +{{-- ناموفق--}} +{{--

--}} +{{-- @endif--}} +{{-- --}} +{{--
--}} + +{{-- --}} + + + + diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100755 index 0000000..dd6a45d --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,132 @@ + + + + + + + Laravel + + + + + + + + + + +
+ @if (Route::has('login')) + + @endif + +
+
+ + + + + +
+ +
+
+
+ + +
+
+ Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. +
+
+
+ +
+
+ + +
+ +
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. +
+
+
+ +
+
+ + +
+ +
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. +
+
+
+ +
+
+ +
Vibrant Ecosystem
+
+ +
+
+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +
+
+
+
+
+ +
+
+
+ + + + + + Shop + + + + + + + + Sponsor + +
+
+ +
+ Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
+
+
+
+ + diff --git a/robots.txt b/robots.txt new file mode 100755 index 0000000..eb05362 --- /dev/null +++ b/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/routes/admin.php b/routes/admin.php new file mode 100755 index 0000000..84a2078 --- /dev/null +++ b/routes/admin.php @@ -0,0 +1,137 @@ +group(function (){ + Route::middleware('validation')->group(function (){ + Route::get('/p', function () { + return Http::get('https://pricing.liman.gold/pricingApi', [])->json(); + }); + //------------balence + Route::post('getBalance', [DashboardController::class, 'getBalance']); + //------------PriceTrigger + Route::post('price_triggers/table', [PriceTriggerController::class, 'table']); + //-----------product + Route::post('/product/table',[ProductController::class, 'tableProduct']); + Route::get('/product/active/{id}',[ProductController::class, 'active']); + Route::get('/product/hide/{id}',[ProductController::class, 'hide']); + Route::get('/product/credit',[ProductController::class, 'listProductCredit']); + Route::get('/product/list',[ProductController::class, 'listProduct']); + Route::get('/product/open_sell/{id}',[ProductController::class, 'openSell']); + Route::get('/product/open_buy/{id}',[ProductController::class, 'openBuy']); + Route::get('/product/auto_sell/{id}',[ProductController::class, 'auto_sell']); + Route::get('/product/auto_buy/{id}',[ProductController::class, 'auto_buy']); + Route::get('/product/auto/{method}/{action}',[ProductController::class, 'auto_group']); + Route::get('/getProduct/{id}',[ProductController::class, 'getProduct']); + Route::put('/products',[ProductController::class, 'editProducts']); + Route::resource('/product',ProductController::class)->except(['destroy']); + + //--------const + Route::get('/const/key/{key}',[ConstController::class, 'showValue']); + Route::post('/const/table',[ConstController::class, 'table']); + Route::resource('/const',ConstController::class); + //--------user + Route::get('/me',[UserController::class,'me']); + Route::get('/user/type/{user_type}',[UserController::class,'getByUserType']); + Route::post('/me/update',[UserController::class,'updateMe']); + Route::post('/user/table',[UserController::class,'table']); + Route::get('/user/list',[UserController::class,'listUser']); + Route::resource('/user',UserController::class); + + //--------customer + Route::post('/customer/table',[CustomerController::class,'tableWallets']); + Route::get('/customer/active/{id}',[CustomerController::class,'active']); + Route::get('/customer/archive/{id}',[CustomerController::class,'archive']); + Route::get('/customer/trade/{id}',[CustomerController::class,'changeTradeActive']); + Route::post('/customer/archive/table',[CustomerController::class,'archiveTable']); + Route::get('/customer/is_valid/{id}',[CustomerController::class,'MakeValidByAdmin']); + Route::get('/customer/list',[CustomerController::class,'listUser']); + Route::post('/customers/{customer_id}/referrals',[CustomerController::class,'referrals']); + Route::post('/customers/{customer_id}/funds',[CustomerController::class,'funds']); + Route::put('/customer/{id}',[CustomerController::class,'updateAdmin']); + Route::resource('/customer', CustomerController::class)->except(['update']); + + //------massages + Route::post('messages/table', [MassageController::class, 'messagesTable']); + Route::get('messages/functions', [MassageController::class, 'getFunctionDescriptions']); + Route::post('messages/get_customer_list', [MassageController::class, 'getCustomerList']); + Route::post('messages/get_customer_list/table', [MassageController::class, 'getCustomerListTable']); + Route::post('messages/send_message', [MassageController::class, 'send_message']); + Route::resource('messages', MassageController::class); + + //------------single customer + Route::post('/customer/single/table',[CustomerController::class,'singleCustomerTable']); + Route::post('/customer/single/archive/table',[CustomerController::class,'singleArchiveTable']); + + //-------------wallet + Route::post('/wallet/charge',[WalletController::class,'charge']); + Route::post('/wallet/charge_gold',[WalletController::class,'charge_gold']); + Route::post('/wallet/table',[WalletController::class,'indexWallet']); + Route::post('/wallet/transaction/table',[WalletController::class,'index']); + Route::post('/wallet/transaction/update',[WalletController::class,'updateTransaction']); + Route::post('/wallet/withdraw/table',[WalletController::class,'indexWithdraw']); + Route::put('/wallet/withdraw/{id}',[WalletController::class,'updateWithdraw']); + Route::get('/wallet/withdraw/{id}',[WalletController::class,'getWithdraw']); + Route::post('/wallet/withdraw/complete',[WalletController::class,'completeWithdraw']); + + //---------------order + Route::post('order/table', [OrderController::class, 'table']); + Route::post('order/single/table', [OrderController::class, 'singleOrderTable']); + Route::post('single/order', [SingleOrderController::class, 'store']); + + //-------------------price + Route::post('price', [PriceController::class, 'store']); + Route::post('price/table', [PriceController::class, 'table']); + Route::post('prices', [PriceController::class, 'priceData']); + + + Route::post('finance', [FinanceController::class, 'fall']); + + + //dashboard + Route::post('dashboard/finance', [DashboardController::class, 'finance']); + Route::get('dashboard', [DashboardController::class, 'dashboardMaster']); + Route::post('dashboard/customer/all_sell', [DashboardController::class, 'sumSellToCustomerMajor']); + Route::post('dashboard/customer/single/all_sell', [DashboardController::class, 'sumSellToCustomerSingle']); + Route::post('dashboard/customer/flow', [DashboardController::class, 'flow']); + + //bank account + Route::post('account/table', [BankAccountController::class, 'table']); + Route::get('account/{id}', [BankAccountController::class, 'show']); + Route::post('account/sts', [BankAccountController::class, 'changeSts']); + + Route::post('wallet/tahesab', [TahesabController::class, 'wallet']); + + Route::get('test', function () { + $data = [ + "value" => 2000, + "customer_id" => 466, + "note" => "test", + "direction" => "0" + ]; + $tahesab = new TahesabController(); + try { + $tahesab->wallet($data); + + }catch (Exception $e) { + dd($e->getMessage()); + } + return "OK"; + } + ); + }); + }); diff --git a/routes/api.php b/routes/api.php new file mode 100755 index 0000000..d3b42a3 --- /dev/null +++ b/routes/api.php @@ -0,0 +1,34 @@ +group(function () { + Route::post('login',[AuthController::class,'login']); + Route::post('verify',[AuthController::class,'tokenVerify']); + Route::post('register',[AuthController::class,'register']); +}); diff --git a/routes/channels.php b/routes/channels.php new file mode 100755 index 0000000..5d451e1 --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,18 @@ +id === (int) $id; +}); diff --git a/routes/console.php b/routes/console.php new file mode 100755 index 0000000..e05f4c9 --- /dev/null +++ b/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/routes/customer.php b/routes/customer.php new file mode 100755 index 0000000..b6d4ac5 --- /dev/null +++ b/routes/customer.php @@ -0,0 +1,99 @@ +group(function () { + Route::middleware('validation')->group(function () { + //-----------Address + Route::post('/address/table', [AddressController::class, 'table']); + Route::resource('/address', AddressController::class); + + //---------PriceTrigger + Route::resource('price_triggers', PriceTriggerController::class); + + //-----------product + Route::post('/product/table',[AdminProductController::class, 'table']); + Route::get('/product/list',[AdminProductController::class, 'listProduct']); + + //-----gateway + Route::post('/charge_account ', [paypingController::class, 'startTransation']); + + + //--------------Customer + Route::get('/me', [CustomerController::class, 'me']); + Route::post('/me/update', [CustomerController::class, 'updateMe']); + + //----------------code + Route::post('/im_from/{code}', [CustomerController::class, 'imFrom']); + Route::get('/i_have_referrals', [CustomerController::class, 'i_have']); + + + Route::get('/active_finger', [CustomerController::class, 'active_finger']); + + //------------------wallet + Route::get('wallet/me', [WalletController::class, 'walletMe']); + Route::post('wallet/withdraw', [WalletController::class, 'withdraw']); + Route::post('wallet/withdraw_physical', [WalletController::class, 'withdraw_physical']); + Route::post('/wallet/withdraw/table', [WalletController::class, 'indexWithdraw']); + Route::post('/wallet/withdraw_physical/table', [WalletController::class, 'index_withdraw_physical']); + Route::post('wallet/withdraw/otp', [WalletController::class, 'withdrawOtp']); + + Route::post('/withdraw/table', [WalletController::class, 'withdrawTable']); + + + //---------------------transaction + Route::post('transaction/table', [WalletController::class, 'transactionTable']); + Route::post('prices/all', [WalletController::class, 'priceData']); + + //-----------------order + Route::post('order/table', [OrderController::class, 'table']); + Route::post('order', [OrderController::class, 'store']); + + //-----------------single order + Route::post('single/order/table', [SingleOrderController::class, 'table']); +// Route::post('single/order', [SingleOrderController::class, 'storeBackUp']); + Route::post('single/order', [SingleOrderController::class, 'store']); + + //--------------------fund + Route::post('fund/deposit', [FundController::class, 'deposit']); + Route::post('fund/withdraw', [FundController::class, 'withdraw']); + Route::post('fund/table', [FundController::class, 'table']); + Route::post('fund/transaction/table', [WalletController::class, 'transactionTable']); + Route::resource('/fund',FundController::class); + //--------------------product + Route::post('wallet/product/deposit', [ProductController::class, 'deposit']); + Route::post('wallet/product/withdraw', [ProductController::class, 'withdraw']); + Route::post('wallet/product/table', [ProductController::class, 'pTable']); + Route::post('wallet/product/transaction/table', [WalletController::class, 'transactionTable']); + Route::get('wallet/product/{id}', [ProductController::class, 'show']); + Route::resource('wallet/product',ProductController::class); + //--------------------account + Route::post('account/table', [BankAccountController::class, 'table']); + Route::get('account/active', [BankAccountController::class, 'listActiveBankAccount']); + Route::resource('/account',BankAccountController::class)->except(['update']); + Route::post('account', [BankAccountController::class, 'StoreBankAccount']); + + //tahesab + Route::post('account/tahesab', [TahesabController::class, 'store']); + Route::post('account/tahesab/trade', [TahesabController::class, 'storeTrade']); + }); +}); diff --git a/routes/error_log b/routes/error_log new file mode 100755 index 0000000..5cf305c --- /dev/null +++ b/routes/error_log @@ -0,0 +1,344 @@ +[08-Jun-2024 22:11:53 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[08-Jun-2024 22:11:53 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[08-Jun-2024 22:11:55 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[08-Jun-2024 22:11:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[08-Jun-2024 22:11:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[08-Jun-2024 22:11:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[08-Jun-2024 22:11:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[08-Jun-2024 22:11:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[08-Jun-2024 22:11:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[08-Jun-2024 22:11:58 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[08-Jun-2024 22:11:59 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[08-Jun-2024 22:11:59 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/web.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/web.php on line 16 +[08-Jun-2024 22:11:59 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[08-Jun-2024 22:12:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/web.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/web.php on line 16 +[08-Jun-2024 22:12:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[08-Jun-2024 22:12:02 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[08-Jun-2024 22:12:03 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[08-Jun-2024 22:12:07 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[08-Jun-2024 22:12:11 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[08-Jun-2024 22:12:23 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[08-Jun-2024 22:12:23 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[08-Jun-2024 22:12:37 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[09-Jun-2024 23:32:27 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[09-Jun-2024 23:32:27 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[09-Jun-2024 23:32:27 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[09-Jun-2024 23:32:27 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[09-Jun-2024 23:32:27 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/web.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/web.php on line 16 +[09-Jun-2024 23:32:27 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[09-Jun-2024 23:32:28 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[09-Jun-2024 23:32:29 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[09-Jun-2024 23:32:29 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[09-Jun-2024 23:32:30 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/web.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/web.php on line 16 +[09-Jun-2024 23:32:30 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[09-Jun-2024 23:32:30 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[09-Jun-2024 23:32:30 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[09-Jun-2024 23:32:30 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[09-Jun-2024 23:32:31 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[09-Jun-2024 23:32:31 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[09-Jun-2024 23:32:31 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[09-Jun-2024 23:32:32 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[09-Jun-2024 23:32:33 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/web.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/web.php on line 16 +[09-Jun-2024 23:32:34 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[09-Jun-2024 23:32:35 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[09-Jun-2024 23:32:39 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[09-Jun-2024 23:34:41 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[09-Jun-2024 23:34:43 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[09-Jun-2024 23:34:54 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[09-Jun-2024 23:34:54 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[09-Jun-2024 23:34:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[09-Jun-2024 23:35:00 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/web.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/web.php on line 16 +[10-Jun-2024 19:08:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[10-Jun-2024 19:08:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[10-Jun-2024 19:08:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[10-Jun-2024 19:08:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[10-Jun-2024 19:08:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[10-Jun-2024 19:08:02 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[10-Jun-2024 19:10:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[10-Jun-2024 19:10:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[10-Jun-2024 19:10:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[10-Jun-2024 19:10:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[10-Jun-2024 19:10:02 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[10-Jun-2024 19:10:02 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[10-Jun-2024 19:11:20 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[10-Jun-2024 19:11:21 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[10-Jun-2024 19:11:27 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[10-Jun-2024 19:11:29 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[10-Jun-2024 19:11:31 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[10-Jun-2024 19:11:35 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/api.php:20 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/api.php on line 20 +[10-Jun-2024 19:11:36 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[10-Jun-2024 19:11:37 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[10-Jun-2024 19:11:42 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[10-Jun-2024 19:11:47 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/web.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/web.php on line 16 +[10-Jun-2024 19:12:50 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Broadcast' not found in /home/montechi/public_html/server_app/routes/channels.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/channels.php on line 16 +[10-Jun-2024 19:12:54 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[10-Jun-2024 19:12:54 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[10-Jun-2024 19:12:55 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 +[10-Jun-2024 19:12:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[10-Jun-2024 19:12:58 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/web.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/web.php on line 16 +[10-Jun-2024 19:13:57 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/admin.php:12 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/admin.php on line 12 +[10-Jun-2024 19:14:01 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/auth.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/auth.php on line 7 +[10-Jun-2024 19:14:02 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Artisan' not found in /home/montechi/public_html/server_app/routes/console.php:17 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/console.php on line 17 +[10-Jun-2024 19:14:11 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/web.php:16 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/web.php on line 16 +[10-Jun-2024 19:14:11 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in /home/montechi/public_html/server_app/routes/customer.php:11 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/routes/customer.php on line 11 diff --git a/routes/web.php b/routes/web.php new file mode 100755 index 0000000..558e62b --- /dev/null +++ b/routes/web.php @@ -0,0 +1,334 @@ +get('http://212.23.201.173:8381/price_list', [])->json(); + + $products = Product::with([])->whereNotNull('reading_method')->get(); + foreach ($products as $product) { + foreach ($RPrices as $RPrice) { + if ($product->reading_method == $RPrice['name']) { + $p = Product::where('id', $product->id)->update([ + 'price' => $RPrice['price'], + 'price_profit' => $RPrice['profit'], + ]); + + + } + } + } + return response()->json(true); +}); + +Route::get('/1', function () { + $tah = new \App\Http\Controllers\Admin\TahesabController(); + return $tah->wallet([ + "customer_id" => "466", + "value" => "50000", + "direction" => "0", + ]); + $formattedDate = Carbon::today()->format('d')*7; // خروجی: 2025-01-20 + + // بازگشت تغییرات به‌روزرسانی‌شده به‌صورت منطقی و ساختاریافته + return response()->json([ +// 'message' => 'اطلاعات مشتری‌ها با موفقیت به‌روزرسانی شدند.', + + 'pass' => ((Carbon::today()->format('d')*7)."qSc#144".(Carbon::today()->format('d')*3)-1), + + ]); +}); + + +//Route::get('/getdatabase', function () { +// // دریافت لیست جداول +// $tables = DB::select('SHOW TABLES'); +// +// $databaseFields = []; +// +// // حلقه برای دریافت ستون‌های هر جدول +// foreach ($tables as $table) { +// // استخراج نام جدول از ستون 'Tables_in_montechi_afjo' +// $tableName = $table->{'Tables_in_montechi_afjo'}; +// +// // دریافت ستون‌های جدول +// $columns = DB::select("DESCRIBE $tableName"); +// +// // استخراج نام ستون‌ها +// $columnNames = array_map(function ($column) { +// return $column->Field; // استخراج نام ستون +// }, $columns); +// +// // اضافه کردن نام ستون‌ها به آرایه اصلی +// $databaseFields[$tableName] = $columnNames; +// } +// +// // نمایش نتایج +// return response()->json($databaseFields); +//}); + + +// +//Route::prefix('payman')->group(function () { +// Route::get('login', [PaymanController::class, 'login']); +// Route::get('create', [PaymanController::class, 'create']); +// Route::get('create-trace', [PaymanController::class, 'createTrace']); +// Route::get('get-id', [PaymanController::class, 'getId']); +//}); +//Route::get('/aryanrashidi', function () { +// $p=Http::post('https://aryanrashidi.ir/server/api/prices/list.php', [])->json(); +// return$p['prices'][0]; +//}); +// +//Route::get('/payman_create', function () { +// $t = Uuid::uuid4()->toString(); +// $response = Http::timeout(4)->withHeaders([ +// 'Cookie' => 'cookiesession1=678A8C341A085F7AF93FECC7B44ACDFO', +// 'app-key' => 'demopayman', +// 'Client-Ip-Address' => $_SERVER['REMOTE_ADDR'], +// 'Client-Platform-Type' => 'web', +// 'Client-Device-Id' => '169.254.75.178', +// 'Client-User-Id' => '09352673656', +// 'Client-User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36', +// 'Content-Type' => 'application/json', +// 'Mobile-no' => '09352673656', +// 'National-code' => '0082205388', +// 'Authorization' => 'Bearer b71c3737-7b89-4f2c-9301-767439079407', +// ])->post('https://payman2.sandbox.faraboom.co/v1/payman/create', [ +// 'payman' => [ +// 'bank_code' => 'SINAIR', +// 'user_id' => 'demopayman', +// 'permission_ids' => [1], +// 'contract' => [ +// 'expiration_date' => '2026-01-15T01:28:09.5662061+04:30', // Updated expiration date +// 'max_daily_transaction_count' => 50, +// 'max_monthly_transaction_count' => 100, +// 'max_transaction_amount' => 500000, +// 'start_date' => '2025-01-15T08:28:09.5662061+04:30' +// ] +// ], +// 'redirect_url' => 'https://api.gholaktala.ir/', +// 'trace_id' => $t, +// ]); +// return $response->headers(); +// return redirect()->away($location); +//return $t.$response; +// /*{ +// "access_token": "b71c3737-7b89-4f2c-9301-767439079407", +// "token_type": "bearer", +// "scope": "all", +// "expires_in": 28954155 +// }*/ +//}); +//Route::get('/payman_create_v', function () { +////  +// return $response = Http::timeout(4)->withHeaders([ +// 'Cookie' => 'cookiesession1=678A8C341A085F7AF93FECC7B44ACDFO', +// 'Authorization' => 'Bearer b71c3737-7b89-4f2c-9301-767439079407', +// ])->get('https://payman2.sandbox.faraboom.co/v1/payman/create/trace?trace-id=d307daff-138e-462e-a9bf-00c69f83b26d', [ +// +// 'redirect_url' => 'https://api.gholaktala.ir/', +// 'trace_id' => Uuid::uuid4()->toString(), +// ]); +// +// dd([ +// 'headers' => $response->headers(), // Get the response headers +// 'body' => $response->body(), // Get the raw body of the response +// 'json' => $response->json(), // Get the JSON decoded response (if applicable) +// ]); +// if ($response->status() === 302) { +// $location = $response->header('Location'); +// +// // هدایت به آدرس جدید که در هدر Location آمده است +// return redirect()->away($location); +// } +// +//// در صورت بروز خطا یا وضعیت دیگر +// return response()->json(['error' => 'Failed to redirect'], 400); +// $responseBody = $response->json(); +// +// /*{ +// "access_token": "b71c3737-7b89-4f2c-9301-767439079407", +// "token_type": "bearer", +// "scope": "all", +// "expires_in": 28954155 +// }*/ +//}); +//Route::get('/payman_id', function () { +// // Set the request URL with query parameter +// $url = 'https://payman2.sandbox.faraboom.co/v1/payman/getId?payman_code=2gZ04Yx9iHEP'; +// +// // Define the headers +// $headers = [ +// 'Authorization' => 'Bearer HjS5tzmChsfngBZKEMpxl4KzFYfWfY6ABSKmI9pB1faSZPMWmRFfAh2BsHJXHJaBGPszpL3BQJGQSAXBAz5H3y3gI', +// 'App-Key' => 'demopayman', +// 'Cookie' => 'cookiesession1=678A8C341A085F7AF93FECC7B44ACDFF', +// ]; +// +// // Make the GET request +// $response = Http::timeout(4) +// ->withHeaders($headers) +// ->get($url); +// +// // Return the response +// return $response->json(); // Convert the response to JSON and return it +//}); +// +//Route::get('/payman_pay', function () { +// // Set the request URL +// $url = 'https://payman2.sandbox.faraboom.co/v1/payman/pay'; +// +// // Define the headers +// $headers = [ +// 'Authorization' => 'Bearer b71c3737-7b89-4f2c-9301-767439079407', +// 'App-Key' => 'demopayman', +// 'Content-Type' => 'application/json', +// 'Cookie' => 'cookiesession1=678A8C341A085F7AF93FECC7B44ACDFF', +// ]; +// +// // Define the payload +// $payload = [ +// 'trace_id' => Uuid::uuid4()->toString(), +// 'payman_id' => 'vDZsJGKXPIVS', +// 'amount' => 300000, +// 'description' => 'لللللل', +// 'client_transaction_date' => '2024-01-17T18:46:11.000Z', +// ]; +// +// // Make the POST request using Laravel's HTTP client +// $response = Http::timeout(4) +// ->withHeaders($headers) +// ->post($url, $payload); +// +// // Return the response +// return $response->json(); +//}); +// +//Route::get('config', function () { +// $response = Http::withToken('')->get('https://pm.gholaktala.ir/config/'.strtr($_SERVER['SERVER_NAME'], '.', '_'))->json(); +// $subs = collect($response['subs'])->mapWithKeys(function ($sub) { +// return [$sub['name'] => $sub['value']]; +// }); +// return $subs; +//}); +//Route::get('testliman', function () { +// $payload = [ +// 'amount' => "0.02", +// 'description' =>$this->Config('name_fa')." - "."سس ", +// 'ref_id' => 000, +// 'direction' => 1, +// 'product_id' => 2 +// ]; +// +// return $response = Http::withToken($this->Config('liman_token')) +// ->post("https://limangold.ir/kernel/customer/order",$payload)->json(); +// +//}); +//Route::get('/gDom', function () { +// +// return strtr($_SERVER['SERVER_NAME'], '.', '_'); +//}); +//Route::get('/exporter', function () { +// $query_table = Customer::with(['wallet' => function ($query) { +// $query->select('owner', DB::raw('SUM(gold) as total_gold'))->groupBy('owner'); +// }]) +// ->where('is_archive', false) +// ->get() +// ->each(function ($customer) { +// $sum_gold = $customer->wallet->sum(function ($wallet) { +// return (float) $wallet->total_gold; +// }); +// $customer->sum_gold = $sum_gold; // Sum the gold from wallet +// $customer->save(); // Save the updated sum_gold into the database +// }); +//}); +//Route::get('/SENDtrAORDOR', function () { +// $payload = [ +// 'amount' => "1", +// 'direction' => 1, +// 'product_id' => 2 +// ]; +// $response = Http::withToken("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvbGltYW5nb2xkLmlyXC9rZXJuZWxcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNzI3NjI3NTc1LCJleHAiOjE3MzAyMTk1NzUsIm5iZiI6MTcyNzYyNzU3NSwianRpIjoiZTNTUk1kcEdmSTh3clZwUCIsInN1YiI6MjMsInBydiI6IjFkMGEwMjBhY2Y1YzRiNmM0OTc5ODlkZjFhYmYwZmJkNGU4YzhkNjMifQ.5miGMG7jo1ISRjV_4hXiCceubc5IJ-qe_nq9zUj7-7Y") +// ->post("https://limangold.ir/kernel/customer/order",$payload)->json(); +// return $response; +//}); +//Route::get('/SENDtrAORDOR2', function () { +// $response = Http::withToken("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvbGltYW5nb2xkLmlyXC9rZXJuZWxcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNzI3NjI3NTc1LCJleHAiOjE3MzAyMTk1NzUsIm5iZiI6MTcyNzYyNzU3NSwianRpIjoiZTNTUk1kcEdmSTh3clZwUCIsInN1YiI6MjMsInBydiI6IjFkMGEwMjBhY2Y1YzRiNmM0OTc5ODlkZjFhYmYwZmJkNGU4YzhkNjMifQ.5miGMG7jo1ISRjV_4hXiCceubc5IJ-qe_nq9zUj7-7Y") +// ->get("https://limangold.ir/kernel/customer/product/list")->json(); +// return $response; +//}); +//Route::get('/TEST', function () { +// $url = 'https://zify.ir/api/order/v2/create'; +// +// $payload = [ +// "payer" => [ +// "first_name" => '', +// "last_name" => '', +// "phone" => '09372281182', +// "email" => "", +// "state" => '', +// "city" => '', +// "address_1" => "", +// "address_2" =>"" +// ], +// "products" => [ +// [ +// "code" => "1", +// "sellQuantity" => 1, +// "title" => "IRR", +// "amount" => 1000, +// "unlimited" => true, +// "quantity" => 1, +// "description" => "charge_account" +// ] +// ], +// "returnUrl" => "https://api.gholaktala.ir", +// "clientRefId" => "1212126266612212123", +// "shipping_total" => 0, +// "off_total" => 0, +// "tax_total" => 0 +// ]; +// +// return $response = Http::withToken("cf09ee0187335f173c786e7660d778d2dd71ab582d282999f751427f5923d525") +// ->post($url, $payload)->json(); +//// $dbPassword = 1; +//// echo $dbPassword; +//// echo $transactionId = '123456'; +//// $transactionDate = '2024-08-28'; +//// $quantity = '10 گرم'; +//// $price = '5,000,000 ریال'; +//// $totalAmount = '50,000,000 ریال'; +////// $message->to('atrenejat@yahoo.com') +//// Mail::to('mmoobbiinn1383@gmail.com')->send(new YourMailableClass($transactionId, $transactionDate, $quantity, $price, $totalAmount)); +// +//}); +// +//Route::get('/TEST/{code}', function ($code) { +// $url = 'https://zify.ir/api/order/v2/verify'; +// $payload = [ +// "order" => "$code", +// ]; +// return $verifyResponse = Http::withToken("cf09ee0187335f173c786e7660d778d2dd71ab582d282999f751427f5923d525") +// ->post($url, $payload);}); +// +//Route::get('/', [FinanceController::class, 'index']); +//Route::get('/send-notification', [myNotificationController::class, 'send']); +// +//Route::get('/send-notification2', function () { +// +// return view('notification'); +//}); + + + + diff --git a/server.php b/server.php new file mode 100755 index 0000000..1e44b88 --- /dev/null +++ b/server.php @@ -0,0 +1,21 @@ + + */ + +$uri = urldecode( + parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ?? '' +); + +// This file allows us to emulate Apache's "mod_rewrite" functionality from the +// built-in PHP web server. This provides a convenient way to test a Laravel +// application without having installed a "real" web server software here. +if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { + return false; +} + +require_once __DIR__.'/public/index.php'; diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100755 index 0000000..8f4803c --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100755 index 0000000..05c4471 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100755 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/web.php b/storage/web.php new file mode 100755 index 0000000..d6140d0 --- /dev/null +++ b/storage/web.php @@ -0,0 +1,128 @@ +get('https://pm.gholaktala.ir/config/'.strtr($_SERVER['SERVER_NAME'], '.', '_'))->json(); + $subs = collect($response['subs'])->mapWithKeys(function ($sub) { + return [$sub['name'] => $sub['value']]; + }); + return $subs; +}); +Route::get('testliman', function () { + $payload = [ + 'amount' => "0.02", + 'description' =>$this->Config('name_fa')." - "."سس ", + 'ref_id' => 000, + 'direction' => 1, + 'product_id' => 2 + ]; + + return $response = Http::withToken($this->Config('liman_token')) + ->post("https://limangold.ir/kernel/customer/order",$payload)->json(); + +}); +Route::get('/gDom', function () { + + return strtr($_SERVER['SERVER_NAME'], '.', '_'); +}); +Route::get('/exporter', function () { + $query_table = Customer::with(['wallet' => function ($query) { + $query->select('owner', DB::raw('SUM(gold) as total_gold'))->groupBy('owner'); + }]) + ->where('is_archive', false) + ->get() + ->each(function ($customer) { + $sum_gold = $customer->wallet->sum(function ($wallet) { + return (float) $wallet->total_gold; + }); + $customer->sum_gold = $sum_gold; // Sum the gold from wallet + $customer->save(); // Save the updated sum_gold into the database + }); +}); +Route::get('/SENDtrAORDOR', function () { + $payload = [ + 'amount' => "1", + 'direction' => 1, + 'product_id' => 2 + ]; + $response = Http::withToken("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvbGltYW5nb2xkLmlyXC9rZXJuZWxcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNzI3NjI3NTc1LCJleHAiOjE3MzAyMTk1NzUsIm5iZiI6MTcyNzYyNzU3NSwianRpIjoiZTNTUk1kcEdmSTh3clZwUCIsInN1YiI6MjMsInBydiI6IjFkMGEwMjBhY2Y1YzRiNmM0OTc5ODlkZjFhYmYwZmJkNGU4YzhkNjMifQ.5miGMG7jo1ISRjV_4hXiCceubc5IJ-qe_nq9zUj7-7Y") + ->post("https://limangold.ir/kernel/customer/order",$payload)->json(); + return $response; +}); +Route::get('/SENDtrAORDOR2', function () { + $response = Http::withToken("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvbGltYW5nb2xkLmlyXC9rZXJuZWxcL2F1dGhcL2xvZ2luIiwiaWF0IjoxNzI3NjI3NTc1LCJleHAiOjE3MzAyMTk1NzUsIm5iZiI6MTcyNzYyNzU3NSwianRpIjoiZTNTUk1kcEdmSTh3clZwUCIsInN1YiI6MjMsInBydiI6IjFkMGEwMjBhY2Y1YzRiNmM0OTc5ODlkZjFhYmYwZmJkNGU4YzhkNjMifQ.5miGMG7jo1ISRjV_4hXiCceubc5IJ-qe_nq9zUj7-7Y") + ->get("https://limangold.ir/kernel/customer/product/list")->json(); + return $response; +}); +Route::get('/TEST', function () { + $url = 'https://zify.ir/api/order/v2/create'; + + $payload = [ + "payer" => [ + "first_name" => '', + "last_name" => '', + "phone" => '09372281182', + "email" => "", + "state" => '', + "city" => '', + "address_1" => "", + "address_2" =>"" + ], + "products" => [ + [ + "code" => "1", + "sellQuantity" => 1, + "title" => "IRR", + "amount" => 1000, + "unlimited" => true, + "quantity" => 1, + "description" => "charge_account" + ] + ], + "returnUrl" => "https://api.gholaktala.ir", + "clientRefId" => "1212126266612212123", + "shipping_total" => 0, + "off_total" => 0, + "tax_total" => 0 + ]; + + return $response = Http::withToken("cf09ee0187335f173c786e7660d778d2dd71ab582d282999f751427f5923d525") + ->post($url, $payload)->json(); +// $dbPassword = 1; +// echo $dbPassword; +// echo $transactionId = '123456'; +// $transactionDate = '2024-08-28'; +// $quantity = '10 گرم'; +// $price = '5,000,000 ریال'; +// $totalAmount = '50,000,000 ریال'; +//// $message->to('atrenejat@yahoo.com') +// Mail::to('mmoobbiinn1383@gmail.com')->send(new YourMailableClass($transactionId, $transactionDate, $quantity, $price, $totalAmount)); + +}); + +Route::get('/TEST/{code}', function ($code) { + $url = 'https://zify.ir/api/order/v2/verify'; + $payload = [ + "order" => "$code", + ]; + return $verifyResponse = Http::withToken("cf09ee0187335f173c786e7660d778d2dd71ab582d282999f751427f5923d525") + ->post($url, $payload);}); + +Route::get('/', [FinanceController::class, 'index']); +Route::get('/send-notification', [myNotificationController::class, 'send']); + +Route::get('/send-notification2', function () { + +return view('notification'); +}); + + + + diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php new file mode 100755 index 0000000..547152f --- /dev/null +++ b/tests/CreatesApplication.php @@ -0,0 +1,22 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100755 index 0000000..4ae02bc --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,21 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/tests/Feature/error_log b/tests/Feature/error_log new file mode 100755 index 0000000..b6ff158 --- /dev/null +++ b/tests/Feature/error_log @@ -0,0 +1,24 @@ +[10-Jun-2024 03:18:20 UTC] PHP Fatal error: Uncaught Error: Class 'Tests\TestCase' not found in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php on line 8 +[10-Jun-2024 20:09:06 UTC] PHP Fatal error: Uncaught Error: Class 'Tests\TestCase' not found in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php on line 8 +[10-Jun-2024 20:10:35 UTC] PHP Fatal error: Uncaught Error: Class 'Tests\TestCase' not found in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php on line 8 +[10-Jun-2024 20:12:05 UTC] PHP Fatal error: Uncaught Error: Class 'Tests\TestCase' not found in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php on line 8 +[10-Jun-2024 20:13:46 UTC] PHP Fatal error: Uncaught Error: Class 'Tests\TestCase' not found in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php on line 8 +[10-Jun-2024 20:14:07 UTC] PHP Fatal error: Uncaught Error: Class 'Tests\TestCase' not found in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php:8 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/Feature/ExampleTest.php on line 8 diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100755 index 0000000..2932d4a --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/tests/Unit/error_log b/tests/Unit/error_log new file mode 100755 index 0000000..356ff2c --- /dev/null +++ b/tests/Unit/error_log @@ -0,0 +1,16 @@ +[10-Jun-2024 20:08:59 UTC] PHP Fatal error: Uncaught Error: Class 'PHPUnit\Framework\TestCase' not found in /home/montechi/public_html/server_app/tests/Unit/ExampleTest.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/Unit/ExampleTest.php on line 7 +[10-Jun-2024 20:10:07 UTC] PHP Fatal error: Uncaught Error: Class 'PHPUnit\Framework\TestCase' not found in /home/montechi/public_html/server_app/tests/Unit/ExampleTest.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/Unit/ExampleTest.php on line 7 +[10-Jun-2024 20:12:00 UTC] PHP Fatal error: Uncaught Error: Class 'PHPUnit\Framework\TestCase' not found in /home/montechi/public_html/server_app/tests/Unit/ExampleTest.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/Unit/ExampleTest.php on line 7 +[10-Jun-2024 20:13:50 UTC] PHP Fatal error: Uncaught Error: Class 'PHPUnit\Framework\TestCase' not found in /home/montechi/public_html/server_app/tests/Unit/ExampleTest.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/Unit/ExampleTest.php on line 7 diff --git a/tests/error_log b/tests/error_log new file mode 100755 index 0000000..ac34670 --- /dev/null +++ b/tests/error_log @@ -0,0 +1,36 @@ +[07-Jun-2024 21:28:43 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Testing\TestCase' not found in /home/montechi/public_html/server_app/tests/TestCase.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/TestCase.php on line 7 +[07-Jun-2024 21:28:44 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Testing\TestCase' not found in /home/montechi/public_html/server_app/tests/TestCase.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/TestCase.php on line 7 +[07-Jun-2024 21:28:45 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Testing\TestCase' not found in /home/montechi/public_html/server_app/tests/TestCase.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/TestCase.php on line 7 +[07-Jun-2024 21:29:10 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Testing\TestCase' not found in /home/montechi/public_html/server_app/tests/TestCase.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/TestCase.php on line 7 +[08-Jun-2024 22:11:53 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Testing\TestCase' not found in /home/montechi/public_html/server_app/tests/TestCase.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/TestCase.php on line 7 +[08-Jun-2024 22:11:53 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Testing\TestCase' not found in /home/montechi/public_html/server_app/tests/TestCase.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/TestCase.php on line 7 +[08-Jun-2024 22:12:23 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Testing\TestCase' not found in /home/montechi/public_html/server_app/tests/TestCase.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/TestCase.php on line 7 +[10-Jun-2024 19:08:06 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Testing\TestCase' not found in /home/montechi/public_html/server_app/tests/TestCase.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/TestCase.php on line 7 +[10-Jun-2024 19:10:10 UTC] PHP Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Testing\TestCase' not found in /home/montechi/public_html/server_app/tests/TestCase.php:7 +Stack trace: +#0 {main} + thrown in /home/montechi/public_html/server_app/tests/TestCase.php on line 7 diff --git a/tmp/restart.txt b/tmp/restart.txt new file mode 100755 index 0000000..e69de29 diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100755 index 0000000..2a22dc1 --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,17 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel applications. By default, we are compiling the CSS + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/js/app.js', 'public/js') + .postCss('resources/css/app.css', 'public/css', [ + // + ]);