diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 000000000..9c6888335
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,4 @@
+docker/development/mysql
+docker/standalone/mysql
+vendor
+node_modules
diff --git a/.env.example b/.env.example
index bf995c5bc..505e4c54e 100644
--- a/.env.example
+++ b/.env.example
@@ -61,7 +61,7 @@ MAIL_FROM_NAME="${APP_NAME}"
### --- Logging Settings --- ###
LOG_CHANNEL=stack
-LOG_LEVEL=debug
+LOG_LEVEL=warning
### --- Logging Settings End --- ###
### --- Cache and Queue Settings --- ###
@@ -69,6 +69,7 @@ CACHE_DRIVER=file
QUEUE_CONNECTION=database
SESSION_DRIVER=file
SESSION_LIFETIME=120
+SESSION_SECURE_COOKIE=true
SETTINGS_CACHE_ENABLED=true
### --- Cache and Queue Settings End --- ###
diff --git a/CODE_REVIEW_FINDINGS_2026-03-27.md b/CODE_REVIEW_FINDINGS_2026-03-27.md
new file mode 100644
index 000000000..0271df939
--- /dev/null
+++ b/CODE_REVIEW_FINDINGS_2026-03-27.md
@@ -0,0 +1,130 @@
+# Code Review Findings
+
+Date: 2026-03-27
+Scope: static review of the current `cpgg` workspace
+Notes: archived review snapshot. The findings below were used as the remediation checklist for the follow-up fix pass on the same date and should not be treated as the current open-issues list.
+
+## Critical
+
+1. `app/Extensions/PaymentGateways/PayPal/PayPalExtension.php:257-278` selects sandbox vs live API base URL and credentials from `config('app.env')`. A production install running in a non-`local` test environment will hit live PayPal with the wrong credentials.
+2. `app/Extensions/PaymentGateways/Stripe/StripeExtension.php:282-289` selects Stripe live vs test secret from `config('app.env')` instead of an explicit gateway mode setting.
+3. `app/Extensions/PaymentGateways/Stripe/StripeExtension.php:294-299` selects the webhook signing secret from raw `env('APP_ENV')` at runtime, creating the same mode drift and bypassing Laravel config caching semantics.
+4. `app/Extensions/PaymentGateways/PayPal/routes.php:6-12` protects the browser return route with `auth`. If the session is lost during the provider round-trip, a completed payment cannot be confirmed by the returning user.
+5. `app/Extensions/PaymentGateways/Stripe/routes.php:6-12` has the same `auth`-gated browser return problem for Stripe.
+6. `app/Extensions/PaymentGateways/Mollie/routes.php:6-12` has the same `auth`-gated browser return problem for Mollie.
+7. `app/Extensions/PaymentGateways/MercadoPago/routes.php:6-12` has the same `auth`-gated browser return problem for Mercado Pago.
+8. `app/Extensions/PaymentGateways/Mollie/MollieExtension.php:99-100` marks the local payment as `processing` on the success redirect without verifying the remote payment status.
+9. `app/Extensions/PaymentGateways/MercadoPago/MercadoPagoExtension.php:120-121` marks the local payment as `processing` on the success redirect without verifying the remote payment status.
+10. `app/Extensions/PaymentGateways/MercadoPago/MercadoPagoExtension.php:60-64` sends both `success` and `pending` returns to the same success handler, so pending payments are treated like approved browser returns.
+11. `app/Extensions/PaymentGateways/MercadoPago/MercadoPagoExtension.php:135-137` immediately returns success for webhook topics `merchant_order` and `payment`, which can skip legitimate webhook processing depending on Mercado Pago’s payload format.
+12. `app/Extensions/PaymentGateways/MercadoPago/MercadoPagoExtension.php:147-150` contains a hard-coded webhook test bypass for notification ID `123456` in production code.
+13. `app/Models/User.php:112-143` performs destructive account deletion work outside a transaction. A mid-delete failure can leave orphaned rows and an out-of-sync remote Pterodactyl user.
+14. `app/Console/Commands/ChargeServers.php:124-137` returns `false` both for canceled servers and for insufficient credits, and the caller suspends on any `false`, so canceled servers can still be suspended.
+
+## High
+
+15. `app/Extensions/PaymentGateways/Mollie/MollieExtension.php:58` builds the payment description with `$shopProduct->name`, but `ShopProduct` exposes `display`, not `name` (`app/Models/ShopProduct.php:35-43`).
+16. `app/Extensions/PaymentGateways/MercadoPago/MercadoPagoExtension.php:72` has the same nonexistent `$shopProduct->name` usage.
+17. `app/Providers/SettingsServiceProvider.php:47` overwrites the Discord redirect URL from `app.url` on every request, ignoring any explicit redirect override in configuration.
+18. `app/Providers/SettingsServiceProvider.php:64-65` swallows broad settings-load exceptions and keeps booting, which can leave the app running with partial configuration and only a log line.
+19. `app/Providers/SettingsServiceProvider.php:71-73` falls back to theme `default` only in memory. The invalid theme value is never repaired, so the fallback work repeats every request.
+20. `app/Providers/SettingsServiceProvider.php:84-85` swallows mail/theme bootstrap failures the same way, hiding broken runtime state behind a generic log entry.
+21. `app/Providers/SettingsServiceProvider.php:35` calls `Schema::hasColumn('settings', 'payload')` during every boot cycle, which is an avoidable schema lookup on every request.
+22. `app/Http/Controllers/Admin/SettingsController.php:81-82` dereferences `$optionInputData[$key]['type']` without a null check. Settings without metadata trigger an undefined index notice.
+23. `app/Models/DiscordUser.php:92` logs `$this->role_id_on_purchase`, but that property is not defined on the model, so the activity log message is wrong or noisy.
+24. `app/Http/Controllers/Admin/UserController.php:438` hard-codes role ID `1` to detect the last admin instead of checking by role name/permission.
+25. `app/Listeners/UserPayment.php:98-99` hard-codes role IDs `4` and `3`, so role table reordering or reseeding breaks referral-role promotion.
+26. `app/Console/Commands/ImportUsersFromPteroCommand.php:58-60` calls `array_key_exists(2, $json)` without verifying that `json_decode()` returned an array-like structure, so invalid JSON can trigger a fatal type error.
+27. `app/Console/Commands/ImportUsersFromPteroCommand.php:64` assumes `$json[2]->data` exists. Any export format drift breaks the import path immediately.
+28. `app/Console/Commands/ImportUsersFromPteroCommand.php:119-120` writes the discontinued `role` column instead of assigning Spatie roles, so imported admin/member state is not migrated correctly.
+29. `app/Console/Commands/ImportUsersFromPteroCommand.php:119` copies the external password field blindly, with no hash compatibility check or rehash flow.
+30. `app/Console/Commands/update.php:48-49` claims the minimum supported PHP version is `8.0.0`, which no longer matches the project’s current runtime requirements.
+31. `app/Console/Commands/update.php:54-166` only performs work inside the interactive branch. In non-interactive runs it becomes a silent no-op.
+32. `app/Console/Commands/update.php:101-105` ignores the exit status of `git pull`, so a failed update can continue as if the source tree changed successfully.
+33. `app/Console/Commands/update.php:128-132` ignores the exit status of `composer install`, so the command can continue after a dependency failure.
+34. `app/Console/Commands/update.php:150-156` recursively `chown`s the whole project root, including `.git` and non-runtime files, which is unsafe for many deployment layouts.
+35. `app/Models/Server.php:98-99` assumes the Pterodactyl error payload always contains `errors[0]`. Unexpected API bodies will cause undefined index errors while deleting servers.
+36. `app/Models/Server.php:126-134` returns the server model even when remote suspension fails, so callers cannot distinguish success from no-op failure.
+37. `app/Models/Server.php:142-153` has the same silent-failure behavior for unsuspension.
+38. `app/Models/User.php:281-283` unsuspends each server if the user has enough credits for that one server, but never reserves/decrements credits across the loop, so one balance can unlock multiple servers.
+39. `app/Models/User.php:267-289` ignores whether `Server::suspend()` or `Server::unSuspend()` actually succeeded remotely before updating the user’s suspended state.
+40. `app/Console/Commands/CleanupOpenPayments.php:33` deletes all locally open payments after one hour without checking provider state first, so slow-but-valid offsite payments can be discarded.
+41. `app/Http/Controllers/Admin/CouponController.php:75-86` bulk coupon creation is not wrapped in a transaction. A duplicate code or DB error leaves a partial batch committed.
+42. `app/Models/Coupon.php:139-149` generates coupon codes without any uniqueness check against the database or the current batch, so collisions are possible.
+43. `app/Http/Controllers/TicketsController.php:246` renders an extra stray `` in the actions column HTML, which can break the DOM around the datatable row.
+
+## Medium
+
+44. `app/Http/Controllers/Api/NotificationController.php:40` accepts an unbounded `per_page` query value, allowing very large paginated reads from the notifications API.
+45. `app/Http/Requests/Api/Notifications/SendToUsersNotificationRequest.php:28` has no maximum length for notification titles.
+46. `app/Http/Requests/Api/Notifications/SendToUsersNotificationRequest.php:29` has no maximum length for notification content.
+47. `app/Http/Requests/Api/Notifications/SendToAllUsersNotificationRequest.php:26` has no maximum length for global notification titles.
+48. `app/Http/Requests/Api/Notifications/SendToAllUsersNotificationRequest.php:27` has no maximum length for global notification content.
+49. `app/Http/Middleware/ApiAuthToken.php:33` updates `last_used` before the request is actually handled, so failed requests still mutate token usage and every API hit performs an immediate write.
+50. `app/Http/Middleware/SecurityHeaders.php:31-33` only emits HSTS when `app.env === production`, so HTTPS staging or custom environments miss HSTS entirely.
+51. `app/Http/Middleware/LastSeen.php:20-21` disables last-seen and IP tracking for all `local` environments, which makes local parity debugging and QA less accurate.
+52. `app/Models/User.php:108-110` sends `WelcomeMessage` on every user creation, including imports, seeders, tests, and admin-created accounts.
+53. `app/Models/User.php:115-118` deletes owned servers one-by-one without chunking, which is a poor fit for large accounts and can exhaust memory or lock time.
+54. `app/Models/User.php:142` ignores the result of the remote Pterodactyl user deletion request entirely.
+55. `app/Console/Commands/ChargeServers.php:51-145` does not return a proper command status code from `handle()`.
+56. `app/Console/Commands/update.php:92-94` returns `false` instead of a Symfony command status constant.
+57. `app/Console/Commands/ImportUsersFromPteroCommand.php:30` still uses the placeholder description `Command description`.
+58. `app/Console/Commands/ImportUsersFromPteroCommand.php:100` returns `true` instead of a Symfony command status constant.
+59. `database/factories/PaymentFactory.php:20` still defines `payer_id`, which is not part of the current `Payment` model fillable schema (`app/Models/Payment.php:21-35`).
+60. `database/factories/PaymentFactory.php:27` still defines `payer`, which is also absent from the current `Payment` model schema.
+61. `database/factories/PaymentFactory.php:23` uses the legacy status string `Completed` instead of the current payment status enum values (`app/Enums/PaymentStatus.php:6-11`).
+62. `database/factories/PaymentFactory.php:18-28` no longer reflects the modern payment shape at all: it omits fields like `tax_value`, `tax_percent`, `total_price`, `shop_item_product_id`, and `payment_method`, making factory-backed tests misleading.
+63. `app/Helpers/CallHomeHelper.php:32-35` performs an outbound install telemetry request with no timeout.
+64. `app/Helpers/CallHomeHelper.php:32-35` uses `Http::async()->post(...)->wait()`, so the code still blocks the request path even though it is labeled async.
+65. `app/Helpers/CallHomeHelper.php:31-33` hashes the installation host with MD5 into a stable external identifier. Even if pseudonymous, it is still persistent installation fingerprinting.
+66. `app/Helpers/CallHomeHelper.php:37` writes the flag file without file locking, so concurrent first-hit requests can race.
+67. `app/Classes/PterodactylClient.php:52-56` builds the user client without any request timeout, so panel calls can hang indefinitely on network issues.
+68. `app/Classes/PterodactylClient.php:61-65` builds the admin client without any request timeout.
+69. `app/Models/DiscordUser.php:64-77` calls Discord role add/remove endpoints without a timeout.
+70. `app/Http/Controllers/Auth/SocialiteController.php:86-94` calls the Discord guild join endpoint without a timeout.
+71. `app/Extensions/PaymentGateways/Mollie/MollieExtension.php:50-53` creates Mollie payments without a timeout.
+72. `app/Extensions/PaymentGateways/Mollie/MollieExtension.php:111-114` looks up Mollie webhook payments without a timeout.
+73. `app/Extensions/PaymentGateways/MercadoPago/MercadoPagoExtension.php:56-59` creates Mercado Pago checkout preferences without a timeout.
+74. `app/Extensions/PaymentGateways/MercadoPago/MercadoPagoExtension.php:159-162` looks up Mercado Pago payments without a timeout.
+75. `app/Http/Controllers/Admin/CouponController.php:217` validates `range_codes` with `digits_between:1,100`, which constrains the number of digits, not the actual batch size. Values like `9999999999` still pass as “10 digits”.
+
+## Security Hygiene
+
+76. `app/Http/Controllers/Admin/ServerController.php:361` opens a new tab with `target="_blank"` and no `rel="noopener noreferrer"`, allowing reverse-tabnabbing.
+77. `app/Http/Controllers/Admin/UserController.php:715` has the same reverse-tabnabbing issue.
+78. `app/Http/Controllers/Admin/VoucherController.php:226` has the same reverse-tabnabbing issue.
+79. `themes/BlueInfinity/views/layouts/main.blade.php:476` has the same reverse-tabnabbing issue.
+80. `themes/BlueInfinity/views/layouts/main.blade.php:479` has the same reverse-tabnabbing issue.
+81. `themes/BlueInfinity/views/layouts/main.blade.php:482` has the same reverse-tabnabbing issue.
+82. `themes/default/views/admin/activitylogs/index.blade.php:32` has the same reverse-tabnabbing issue.
+83. `themes/default/views/admin/store/create.blade.php:78` has the same reverse-tabnabbing issue.
+84. `themes/default/views/admin/store/edit.blade.php:77` has the same reverse-tabnabbing issue.
+85. `themes/default/views/admin/usefullinks/create.blade.php:45` has the same reverse-tabnabbing issue.
+86. `themes/default/views/admin/usefullinks/edit.blade.php:47` has the same reverse-tabnabbing issue.
+87. `themes/default/views/auth/login.blade.php:144` has the same reverse-tabnabbing issue.
+88. `themes/default/views/auth/login.blade.php:147` has the same reverse-tabnabbing issue.
+89. `themes/default/views/auth/login.blade.php:150` has the same reverse-tabnabbing issue.
+90. `themes/default/views/auth/passwords/email.blade.php:94` has the same reverse-tabnabbing issue.
+91. `themes/default/views/auth/passwords/email.blade.php:97` has the same reverse-tabnabbing issue.
+92. `themes/default/views/auth/passwords/email.blade.php:100` has the same reverse-tabnabbing issue.
+93. `themes/default/views/auth/passwords/reset.blade.php:88` has the same reverse-tabnabbing issue.
+94. `themes/default/views/auth/passwords/reset.blade.php:91` has the same reverse-tabnabbing issue.
+95. `themes/default/views/auth/passwords/reset.blade.php:94` has the same reverse-tabnabbing issue.
+96. `themes/default/views/auth/register.blade.php:162` has the same reverse-tabnabbing issue.
+97. `themes/default/views/auth/register.blade.php:194` has the same reverse-tabnabbing issue.
+98. `themes/default/views/auth/register.blade.php:197` has the same reverse-tabnabbing issue.
+99. `themes/default/views/auth/register.blade.php:200` has the same reverse-tabnabbing issue.
+100. `themes/default/views/information/privacy-content.blade.php:6` has the same reverse-tabnabbing issue.
+101. `themes/default/views/information/privacy-content.blade.php:103` has the same reverse-tabnabbing issue.
+102. `themes/default/views/layouts/main.blade.php:474` has the same reverse-tabnabbing issue.
+103. `themes/default/views/layouts/main.blade.php:477` has the same reverse-tabnabbing issue.
+104. `themes/default/views/layouts/main.blade.php:480` has the same reverse-tabnabbing issue.
+105. `themes/default/views/mail/server/suspended.blade.php:6` has the same reverse-tabnabbing issue.
+106. `themes/default/views/mail/server/unsuspended.blade.php:6` has the same reverse-tabnabbing issue.
+107. `themes/default/views/servers/index.blade.php:41` has the same reverse-tabnabbing issue.
+
+## Summary
+
+- Total findings: 107
+- Highest-risk areas: payment gateway state handling, environment-coupled gateway config, destructive model hooks, updater/import commands, and link security hygiene.
+- Existing safe exception: `themes/default/views/information/privacy-content.blade.php:53` already includes `rel="external nofollow noopener"`.
diff --git a/CODE_REVIEW_FINDINGS_2026-03-27_PASS2.md b/CODE_REVIEW_FINDINGS_2026-03-27_PASS2.md
new file mode 100644
index 000000000..45a89de8d
--- /dev/null
+++ b/CODE_REVIEW_FINDINGS_2026-03-27_PASS2.md
@@ -0,0 +1,81 @@
+# Code Review Findings (Second Pass)
+
+Status: archived review snapshot. The issues listed here were used as the basis for the follow-up fix pass on 2026-03-27.
+
+Additional findings beyond the archived first-pass review in `CODE_REVIEW_FINDINGS_2026-03-27.md`.
+
+Scope note: this is a static code review pass. Findings are line-referenced and concrete, but not all of them were reproduced end-to-end at runtime.
+
+1. High - `app/Traits/Referral.php:17-19` calls `generateReferralCode()` on collision, but the trait only defines `createReferralCode()`. The first referral-code collision will fatal.
+2. High - `app/Traits/Coupon.php:74-75` uses `firstOrFail()` in `isCouponValid()`. An invalid or deleted coupon becomes an exception instead of a clean `false`.
+3. High - `app/Traits/Coupon.php:98-111` dereferences `$coupon` without checking for `null`. If the coupon disappears between validation and application, checkout can crash.
+4. High - `app/Traits/Coupon.php:100-111` returns raw float math for discounts even though prices are stored in integer milli-units. That can introduce rounding drift.
+5. High - `app/Actions/ProcessReferralAction.php:46-51` inserts directly into `user_referrals` without checking for an existing row. Repeated execution can duplicate referral links.
+6. High - `app/Actions/ProcessReferralAction.php:25-51` increments credits, queues a notification, logs activity, and inserts the referral row without a transaction. Partial referral state is possible.
+7. Medium - `app/Actions/ProcessReferralAction.php:23-25` does not guard against self-referrals. If the action is reused outside signup, a user can reward themselves.
+8. High - `app/Listeners/Verified.php:31-35` grants email-verification rewards without a transaction or lock. Duplicate event delivery can double-credit a user.
+9. High - `app/Services/ServerCreationService.php:42,58` resolves `$egg` once and never validates it before calling `createServer()`. Reusing the service outside the current request validator can pass `null`.
+10. High - `app/Services/ServerCreationService.php:67` deletes the local server before `pterodactyl_id` is set. The model delete hook still fires and issues a remote delete against an empty server ID.
+11. High - `app/Services/ServerCreationService.php:72-75` assumes `response->json()['attributes']` exists. Malformed upstream responses become undefined-index errors.
+12. High - `app/Services/ServerUpgradeService.php:106-117` calculates credit deltas as floats even though credits are stored as integer milli-units. Upgrades can overcharge or undercharge due to precision drift.
+13. High - `app/Services/ServerUpgradeService.php:43-57,93-97` updates the remote Pterodactyl server before local billing and product changes are committed. Any later DB failure leaves local and remote state diverged.
+14. High - `app/Services/ServerUpgradeService.php:43-57` never verifies that the target product is compatible with the server's current egg, node, or allocation. Service-level callers can request invalid upgrades.
+15. Medium - `app/Rules/EggBelongsToProduct.php:36-42` dereferences `$this->data['product_id']` without guarding for a missing key. Bad validation context turns into an undefined-index error.
+16. Medium - `app/Rules/ValidateEggVariables.php:45-56` assumes decoded egg metadata is an array of arrays containing `rules`, `default_value`, and `env_variable`. Corrupt egg metadata can trigger type errors.
+17. Medium - `app/Helpers/CurrencyHelper.php:55-57` truncates with `(int) ($amount * 1000)` instead of rounding. Inputs like `0.015` lose value.
+18. Medium - `app/Console/Commands/GetGithubVersion.php:35` performs an external GitHub request with no timeout. A slow network call can hang the command.
+19. Medium - `app/Console/Commands/GetGithubVersion.php:35-36` assumes the GitHub tags API always returns `[0]['name']`. Rate limits or API changes can break the command with undefined indexes.
+20. Medium - `app/Console/Commands/MakeUserCommand.php:69` returns `0` on validation failure. Symfony/Laravel commands expect non-zero exit codes for failures.
+21. Medium - `app/Console/Commands/MakeUserCommand.php:86` returns `0` when the Pterodactyl lookup fails, again reporting failure as success to automation.
+22. Medium - `app/Console/Commands/MakeUserCommand.php:93` returns `0` when required keys are missing from the upstream response.
+23. Medium - `app/Console/Commands/MakeUserCommand.php:103` returns `0` when the local user already exists.
+24. Medium - `app/Console/Commands/MakeUserCommand.php:132` returns `0` when the admin role is missing.
+25. Medium - `app/Console/Commands/MakeUserCommand.php:137` returns `1` on success. Success and failure exit codes are inverted.
+26. Medium - `app/Classes/PterodactylClient.php:150` assumes `getEggs()` always receives a JSON payload containing `data`. Unexpected response shapes crash the sync.
+27. Medium - `app/Classes/PterodactylClient.php:169` assumes `getNodes()` always receives `data`.
+28. Medium - `app/Classes/PterodactylClient.php:189` assumes `getNode()` always receives `attributes`.
+29. Medium - `app/Classes/PterodactylClient.php:203` assumes `getServers()` always receives `data`.
+30. Medium - `app/Classes/PterodactylClient.php:222` assumes `getNests()` always receives `data`.
+31. Medium - `app/Classes/PterodactylClient.php:385` assumes `getUser()` always receives `attributes`.
+32. High - `app/Classes/PterodactylClient.php:427-428` does `first()->delete()` in `getServerAttributes(..., deleteOn404: true)` with no null check. If the local row is already gone, the cleanup path crashes.
+33. High - `app/Classes/PterodactylClient.php:486` sets `oom_disabled` to `$product->oom_killer` in `updateServerBuild()`, which is inverted relative to the create path's `!$server->product->oom_killer`.
+34. Medium - `app/Classes/PterodactylClient.php:252` assumes the first free allocation always has `['attributes']['id']`.
+35. Medium - `app/Classes/PterodactylClient.php:269` assumes every allocation includes `['attributes']['assigned']`.
+36. High - `app/Classes/PterodactylClient.php:571-576` never checks `failed()` in `checkNodeResources()` before indexing the response body. 4xx/5xx responses can become array-access errors or bogus resource calculations.
+37. Medium - `app/Classes/PterodactylClient.php:592` silently accepts invalid JSON in `getEnvironmentVariables()`. Bad payloads degrade into an empty collection instead of a validation error.
+38. Medium - `app/Classes/PterodactylClient.php:600` merges arbitrary caller-supplied keys into the environment without whitelisting egg variables. Unexpected env vars can be sent upstream.
+39. Medium - `app/Models/Pterodactyl/Egg.php:63-72` assumes every synced egg payload includes `relationships.variables.data`. Missing relationship data breaks sync.
+40. Medium - `app/Models/Pterodactyl/Location.php:22-25` cascades node deletes one by one in model events with no transaction or chunking. Large sync removals can leave partial local state.
+41. Medium - `app/Models/Pterodactyl/Nest.php:26-29` cascades egg deletes one by one in model events with no transaction or chunking.
+42. Medium - `app/Models/Pterodactyl/Node.php:25-26` detaches products in a model event without a surrounding transaction. Partial detach state is possible if deletion fails mid-flight.
+43. High - `app/Http/Controllers/Api/ServerController.php:152-159` sends the local `user_id` to Pterodactyl when changing ownership. Pterodactyl expects the remote user ID.
+44. High - `app/Http/Controllers/Api/ServerController.php:148-165` updates Pterodactyl first and saves the local server afterward without a transaction. A local save failure leaves systems out of sync.
+45. Medium - `app/Http/Controllers/Api/UserController.php:359-360` hardcodes Pterodactyl `external_id` to `"0"` for every created user, which destroys cross-system uniqueness.
+46. Medium - `app/Http/Controllers/Api/UserController.php:379-380` assumes the create-user response always contains `json()['attributes']['id']`.
+47. High - `app/Http/Controllers/Api/UserController.php:357-380` processes referral side effects before remote Pterodactyl user creation is confirmed. Notification jobs and side effects can escape before the external create succeeds.
+48. High - `app/Http/Controllers/Api/UserController.php:452-457` inserts into `user_referrals` without checking for an existing row, allowing duplicate referral links through the API path.
+49. High - `app/Http/Controllers/Api/UserController.php:447-452` increments credits and queues a referral notification outside a transaction with the referral insert.
+50. Medium - `app/Http/Controllers/Admin/OverViewController.php:62,71` loads long payment ranges into memory and aggregates in PHP. The dashboard will not scale well.
+51. Medium - `app/Http/Controllers/Admin/OverViewController.php:164` calls `getNode()` for every node after already fetching `getNodes()`, causing an avoidable N+1 remote API pattern on every overview request.
+52. Medium - `app/Http/Controllers/Admin/OverViewController.php:173` divides average usage by the count of local DB nodes even when stale nodes were skipped. The displayed average is wrong when deleted remote nodes still exist locally.
+53. High - `app/Http/Controllers/Admin/OverViewController.php:179-180` assumes every synced server still has a local product row. Missing products become null dereferences.
+54. Medium - `app/Http/Controllers/Admin/OverViewController.php:175-191` performs per-server local DB lookups inside the remote server loop, creating another N+1-heavy path.
+55. High - `app/Http/Controllers/Admin/OverViewController.php:199-201` assumes the latest ticket still has a user row. Deleted users break the overview widget.
+56. Medium - `app/Listeners/AssociateDiscordRoles.php:29-30` counts all related servers, not active uncanceled servers, when deciding whether to assign the active-client Discord role.
+57. Medium - `app/Listeners/DisassociateDiscordRoles.php:30-31` removes the active-client Discord role based on the total relation count, again ignoring canceled or otherwise inactive servers.
+58. Medium - `app/Services/NotificationService.php:16-18` sends notifications to the full collection in one call with no chunking. Large "notify all" operations can spike memory and queue payload size.
+59. Medium - `app/Support/HtmlSanitizer.php:13-29` allows `` tags but never normalizes `target`/`rel` attributes. Sanitized HTML can still preserve unsafe new-tab links.
+60. High - `app/Http/Controllers/Auth/RegisterController.php:164` hardcodes `Role::findById(4)` for new registrations. Installs with different role IDs break signup role assignment.
+61. High - `app/Http/Controllers/Auth/RegisterController.php:127-168` is not transactional across remote Pterodactyl creation, local user creation, role assignment, and referral processing. A local failure can orphan the remote user or leave partial referral state.
+62. Medium - `app/Http/Controllers/Auth/RegisterController.php:129-130` creates remote users with `external_id => null`, so the local and remote accounts have no stable external linkage.
+63. Medium - `app/Http/Controllers/Api/ServerController.php:100-112` accepts `description` in the request, but the creation path never persists it because `ServerCreationService` only writes `name`, `user_id`, `product_id`, `node_id`, `last_billed`, and `billing_priority`.
+64. Medium - `app/Http/Controllers/ServerController.php:516-536` trusts client-supplied validation rules in `validateDeploymentVariables()` instead of authoritative egg metadata. Callers can fabricate rule sets and get meaningless validation results.
+65. Medium - `app/Http/Controllers/ServerController.php:313-320` assigns the active-client Discord role based on the raw server relation count, not active uncanceled servers.
+66. Medium - `app/Http/Controllers/ServerController.php:360-364` removes the active-client Discord role using the same raw count logic, so canceled servers can keep the role incorrectly.
+67. Medium - `app/Models/Product.php:98-101` treats `0` as falsy in the `minimumCredits` setter, so explicitly setting a zero minimum is silently converted to `null`.
+68. Medium - `app/Http/Requests/Api/Products/CreateProductRequest.php:39-47` validates integer-backed resource fields as `numeric` instead of `integer`. Fractional values can pass validation and then be silently truncated.
+69. Medium - `app/Http/Requests/Api/Products/UpdateProductRequest.php:40-48` has the same issue on the update path.
+70. Medium - `app/Http/Requests/Api/Vouchers/CreateVoucherRequest.php:28` validates `uses` as `numeric` instead of `integer`, so fractional use counts can pass validation.
+71. Medium - `app/Http/Requests/Api/Vouchers/UpdateVoucherRequest.php:28` repeats the same issue on the update path.
+72. High - `app/Traits/Invoiceable.php:26-27,81-89` derives invoice sequence numbers from `count()` and then writes the PDF and DB row separately. Concurrent invoice generation can produce duplicate invoice numbers and orphaned files.
+73. Low - `app/Console/Commands/NotifyServerSuspension.php:67` returns `0` instead of `Command::SUCCESS`. That reports success only accidentally and is inconsistent with the rest of the command layer.
diff --git a/SECURITY_AUDIT_FINDINGS.md b/SECURITY_AUDIT_FINDINGS.md
new file mode 100644
index 000000000..622a9b7b0
--- /dev/null
+++ b/SECURITY_AUDIT_FINDINGS.md
@@ -0,0 +1,588 @@
+# Security Audit Findings - CtrlPanel.gg
+
+**Date:** March 23, 2026
+**Severity Classification:**
+- 🔴 CRITICAL - Requires immediate fix
+- 🟠 HIGH - Fix urgently, affects security
+- 🟡 MEDIUM - Should be fixed soon
+- 🔵 LOW - Code quality/best practices
+
+---
+
+## CRITICAL VULNERABILITIES
+
+### 1. 🔴 Weak Random ID Generation in Payment Processing
+
+**Location:**
+- `app/Extensions/PaymentGateways/PayPal/PayPalExtension.php` line 50
+- `app/Http/Controllers/Admin/PaymentController.php` line 112
+
+**Issue:** Uses `uniqid()` for generating payment reference IDs and payment_id values. `uniqid()` is NOT cryptographically secure and can be predicted/guessed.
+
+```php
+// VULNERABLE
+"reference_id" => uniqid(),
+'payment_id' => uniqid(),
+```
+
+**Impact:** Attackers could manipulate payment IDs or forge payment references.
+
+**Fix:** Use `Illuminate\Support\Str::random()` or `random_bytes()` instead.
+
+```php
+"reference_id" => \Illuminate\Support\Str::uuid(), // or random(16)
+'payment_id' => \Illuminate\Support\Str::random(32),
+```
+
+---
+
+### 2. 🔴 API Authorization Bypass via Role Manipulation
+
+**Location:** `app/Http/Controllers/Api/UserController.php` line ~115
+
+**Issue:** The API allows role_id updates for scoped tokens with **ensureCanAccessUser** check passing but no verification that the token owner is authorized to change roles.
+
+```php
+if ($this->ownerScopedUserId($request) !== null && isset($data['role_id'])) {
+ abort(403, 'This API token cannot change roles.');
+}
+```
+
+This check only works if the token is owner-scoped. A **global API token** with `users.write` can change ANY user's role, including promoting regular users to admin.
+
+**Impact:** Privilege escalation - API users could become admins.
+
+**Fix:** Ensure global tokens also validate role change authorization:
+
+```php
+// Check if user changing role is admin
+$this->authorize('admin.users.write.role');
+```
+
+---
+
+### 3. 🔴 Admin Bypass via Missing Authorization Check in Admin Controllers
+
+**Location:** `app/Http/Controllers/Admin/PaymentController.php` line 112-130
+
+**Issue:** Manual payment creation endpoint doesn't validate the user actually has permission to create payments. While there's an `authorize()` check missing, the more critical issue is:
+
+The payment creation allows admin-only manual payment entry without proper authorization checks across payment types.
+
+**Impact:** Users with limited admin permissions could create fraudulent payments.
+
+**Fix:** Add explicit permission checks in PaymentController methods.
+
+---
+
+### 4. 🔴 Unencrypted Sensitive Data in Activity Logs
+
+**Location:** `app/Models/User.php` line 130-140
+**Location:** `app/Models/Voucher.php` tapping activity
+**Location:** `app/Models/Server.php` LogsActivity trait
+
+**Issue:** Activity log system logs user mutations including potentially sensitive fields. While `$logAttributes` appears limited, the `CausesActivity` trait could log credential data if not properly configured.
+
+```php
+protected static $logAttributes = ['name', 'email'];
+```
+
+Email changes ARE being logged to activity logs which are stored in database without encryption.
+
+**Impact:** Sensitive user data exposed in audit logs.
+
+**Fix:**
+- Move sensitive data to separate encrypted table
+- Use masking/hashing for email in logs
+- Implement log purge policies
+
+---
+
+### 5. 🔴 Race Condition in Credit/Voucher Consumption
+
+**Location:** `app/Models/Voucher.php` line 149
+**Location:** `app/Console/Commands/ChargeServers.php` billing logic
+
+**Issue:** While pessimistic locking (lockForUpdate) is used in some places, the voucher redemption and server billing system has a time-of-check to time-of-use (TOCTOU) vulnerability.
+
+The check for voucher validity happens in `isCouponValid()` but the actual consumption happens later, allowing potential double-redemption race conditions.
+
+**Impact:** Users could use coupons multiple times or servers could be charged twice.
+
+**Fix:** Use database transactions with proper locking:
+
+```php
+DB::transaction(function() {
+ $voucher = Voucher::lockForUpdate()->find($id);
+ // Validate and consume atomically
+}, 3); // 3 retries for deadlocks
+```
+
+---
+
+## HIGH SEVERITY VULNERABILITIES
+
+### 6. 🟠 Missing CSRF Protection on Webhook Routes
+
+**Location:** `app/Http/Middleware/VerifyCsrfToken.php`
+
+**Issue:** Webhook routes are correctly excluded from CSRF verification via `RoutesIgnoreCsrf` config. However, there's no verification of webhook authenticity (no signature validation visible for at least Mollie/Stripe).
+
+While payment gateways handle signature validation in their SDK, the exception list is dynamically built, creating a potential for misconfig.
+
+**Impact:** Unverified webhooks could cause payment state corruption.
+
+**Fix:** Add explicit webhook signature verification in all gateway handlers.
+
+---
+
+### 7. 🟠 API Scope Override Potential
+
+**Location:** `app/Http/Middleware/ApplicationApiScope.php`
+
+**Issue:** The scope checking uses `hasAnyAbility()` which checks against token abilities. However, there's no lifecycle enforcement on API token expiration or revocation check.
+
+Once an `expires_at` date passes, `isActive()` returns false, but there's no explicit background revocation of expired tokens, and they remain queryable.
+
+**Impact:** Expired tokens might be replayed if not strictly enforced.
+
+**Fix:** Add automatic token purging:
+
+```php
+// In middleware
+if (!$token->isActive()) {
+ $token->forceDelete(); // Or soft delete
+ abort(401);
+}
+```
+
+---
+
+### 8. 🟠 Mass Assignment Vulnerability in Admin Controllers
+
+**Location:** Multiple admin controllers, e.g., `app/Http/Controllers/Admin/ShopProductController.php` line 79, 123
+
+**Issue:** Direct use of `array_merge($request->all(), ...)` without explicitly validating which fields got through.
+
+```php
+ShopProduct::create(array_merge($request->all(), ['disabled' => $disabled]));
+$shopProduct->update(array_merge($request->all(), ['disabled' => $disabled]));
+```
+
+While models have `$fillable` arrays defined, explicitly using `all()` could catch unintended fields if validation is bypassed.
+
+**Impact:** Unintended field modification.
+
+**Fix:** Use `only()` explicitly:
+
+```php
+$shopProduct->update($request->validated());
+```
+
+---
+
+### 9. 🟠 Unencrypted Database Credentials in Environment Variables
+
+**Location:** `.env.example` + config/database.php
+
+**Issue:** While this is expected for example file, there's no indication of database encryption at rest or SQL file backups being encrypted.
+
+**Impact:** Database backup exposure leaks all user/payment data.
+
+**Fix:**
+- Document database encryption requirements
+- Enforce encrypted backups
+- Use read replicas with restricted access
+
+---
+
+### 10. 🟠 SQL Injection Risk via DB::raw() in Migrations/Queries
+
+**Location:** `database/migrations/2026_02_02_175351_migrate_product_minimum_credits_values.php` line 32
+
+**Issue:** While not user input, the use of `DB::raw()` could be dangerous if any part becomes dynamic:
+
+```php
+->where('type', 'free')
+->update(['minimum_credits' => DB::raw('price')]);
+```
+
+This is safe as-is, but pattern encourages risky usage elsewhere.
+
+**Impact:** Potential SQL injection if this pattern spreads.
+
+**Fix:** Use parameter binding instead:
+
+```php
+// Use raw only when absolutely necessary, never with user input
+// Document the reason for using raw
+```
+
+---
+
+## MEDIUM SEVERITY ISSUES
+
+### 11. 🟡 Missing Rate Limiting on API Endpoints
+
+**Location:** `routes/api.php`
+
+**Issue:** API routes lack rate limiting middleware. Anyone with a valid token can make unlimited requests.
+
+**Example:**
+```php
+Route::middleware('api.token')->group(function () {
+ Route::get('users', [UserController::class, 'index'])
+ // No rate limiting!
+});
+```
+
+**Impact:** API abuse, DOS attacks on database queries.
+
+**Fix:** Add rate limiting:
+
+```php
+Route::middleware(['api.token', 'throttle:60,1'])->group(...)
+```
+
+---
+
+### 12. 🟡 Missing Input Validation on Filters
+
+**Location:** `app/Http/Controllers/Api/UserController.php` line 56-64
+
+**Issue:** API uses `QueryBuilder::allowedFilters()` which restricts field names, but user input like `name` is passed directly to query builder.
+
+While the library prevents field traversal, complex filter chains could cause database load issues.
+
+**Impact:** Resource exhaustion attacks.
+
+**Fix:** Add pagination limits and query complexity limits:
+
+```php
+->paginate(min($request->input('per_page') ?? 50, 100))
+```
+
+---
+
+### 13. 🟡 Weak Gravatar Hash Dependency
+
+**Location:** `app/Models/User.php` line 297
+
+**Issue:** Uses MD5 for Gravatar URL generation. While MD5 is acceptable for Gravatar (it's their standard), it indicates older security practices in codebase.
+
+**Impact:** Low - but indicates legacy security thinking.
+
+**Fix:** No fix needed for Gravatar (it's their standard), but document this exception.
+
+---
+
+### 14. 🟡 Missing HEADERS Security Headers
+
+**Location:** HTTP response headers configuration
+
+**Issue:** No evidence of security headers configuration (X-Frame-Options, X-Content-Type-Options, etc)
+
+**Impact:** XSS, clickjacking, MIME sniffing attacks.
+
+**Fix:** Add middleware:
+
+```php
+// config/http.php or middleware
+'X-Frame-Options' => 'DENY',
+'X-Content-Type-Options' => 'nosniff',
+'X-XSS-Protection' => '1; mode=block',
+'Strict-Transport-Security' => 'max-age=31536000'
+```
+
+---
+
+### 15. 🟡 Insecure Redirect Potential
+
+**Location:** `app/Extensions/PaymentGateways/PayPal/PayPalExtension.php` line 60-65
+
+**Issue:** Success/cancel URLs are constructed using route() helper, which is safe, but there's no validation that users are redirected to their own payment checkout, not another user's.
+
+Actually, checking line 100+ shows proper user_id verification, so this is safe.
+
+**Noted:** Code does verify payment ownership correctly.
+
+---
+
+### 16. 🟡 Sensitive Data in Logs
+
+**Location:** `app/Listeners/UserPayment.php` and other listeners
+
+**Issue:** Logging with full details of payments and users without masking PII.
+
+```php
+logger()->warning('Failed to update user in Pterodactyl.', [
+ 'user_id' => $user->id, // OK
+ 'status' => $response->status(),
+]);
+```
+
+Better, but more complex operations log full objects.
+
+**Impact:** Sensitive data in log files.
+
+**Fix:** Mask PII in logs:
+
+```php
+logger()->warning('Payment processing error', [
+ 'user_id' => auth()->id(),
+ 'payment_hash' => hash('sha256', $payment->id),
+]);
+```
+
+---
+
+### 17. 🟡 No Audit Trail for API Operations
+
+**Location:** `app/Http/Controllers/Api/*`
+
+**Issue:** API operations don't trigger activity logging like admin operations do. An API user could make massive changes without audit trail.
+
+**Impact:** Untrackable malicious API usage.
+
+**Fix:** Add activity logging to API controllers via middleware or trait.
+
+---
+
+### 18. 🟡 Inadequate Payment Status Validation
+
+**Location:** `app/Extensions/PaymentGateways/Stripe/StripeExtension.php` line 127-160
+
+**Issue:** Payment status update only checks for non-PAID status:
+
+```php
+$updated = Payment::whereKey($payment->id)
+ ->where('status', '!=', PaymentStatus::PAID->value)
+ ->update([...]);
+```
+
+This allows PROCESSING status payments to be marked as PAID, which is correct. However, there's no verification that the amount matches what was requested.
+
+**Impact:** Could cause payment amount mismatches.
+
+**Fix:** Verify payment amount matches:
+
+```php
+if ((int)$paymentIntent->amount_received !== $payment->amount_integer) {
+ abort(400, 'Amount mismatch');
+}
+```
+
+---
+
+### 19. 🟡 No Backup/Recovery Plan for API Tokens
+
+**Location:** `app/Models/ApplicationApi.php`
+
+**Issue:** Once an API token is created and shown once, there's no recovery mechanism if lost. This is OK for security, but dangerous operationally.
+
+**Impact:** Lost access could lock out API consumers.
+
+**Fix:** Document token backup requirements for users.
+
+---
+
+---
+
+## LOW SEVERITY ISSUES
+
+### 20. 🔵 Deprecated md5() Usage for Gravatar
+
+Already mentioned in Medium section - acceptable for Gravatar but elsewhere it's weak.
+
+---
+
+### 21. 🔵 Missing @throws Documentation
+
+**Location:** Multiple controllers
+
+**Issue:** Methods using findOrFail() don't document ModelNotFoundException in docblocks, though types hint it.
+
+**Impact:** Developer confusion.
+
+**Fix:** Add proper docblock documentation.
+
+---
+
+### 22. 🔵 Inconsistent Error Handling
+
+**Location:** Multiple payment gateways
+
+**Issue:** Some gateways log failed responses, others might not. Inconsistent error handling patterns make maintenance harder.
+
+**Impact:** Potential missed errors in production.
+
+**Fix:** Create unified payment error handler.
+
+---
+
+### 23. 🔵 Permission String Typos Potential
+
+**Location:** `config/permissions_web.php` and usage throughout
+
+**Issue:** Permission strings are magic strings. A typo could silently fail permission checks.
+
+**Impact:** Accidental authorization bypass if permission names are mistyped.
+
+**Fix:** Create constants for permission names:
+
+```php
+const ADMIN_USERS_READ = 'admin.users.read';
+const ADMIN_USERS_WRITE = 'admin.users.write';
+```
+
+---
+
+### 24. 🔵 No Request/Response Logging for API
+
+**Location:** `routes/api.php`
+
+**Issue:** No middleware to log API requests/responses for debugging.
+
+**Impact:** Hard to debug production issues.
+
+**Fix:** Add debug logging middleware.
+
+---
+
+### 25. 🔵 Timezone Issues Possible in Scheduling
+
+**Location:** `app/Console/Commands/*`
+
+**Issue:** Commands use Carbon for date comparison. If timezone isn't properly set, could cause off-by-one billing.
+
+```php
+Carbon::now(config('app.timezone'))
+```
+
+This is actually done correctly! Good practice observed.
+
+**Noted:** This is handled properly.
+
+---
+
+---
+
+## ADDITIONAL OBSERVATIONS & BEST PRACTICES
+
+### ✅ Strengths Observed:
+
+1. **Proper use of Pessimistic Locking** - Server charging uses `lockForUpdate()`
+2. **Strong Password Hashing** - Uses Laravel's Hash facade (bcrypt)
+3. **CSRF Protection** - Properly configured middleware with extension exceptions
+4. **Authorization Checks** - Most routes check permissions via `$this->checkPermission()`
+5. **API Scope Validation** - Token scopes are properly validated
+6. **SQL Prepared Statements** - Consistent use of parameter binding in queries
+7. **Activity Logging** - Spatie activity log captures changes
+8. **Database Transactions** - Used correctly in critical operations
+
+### ⚠️ Recommended Improvements:
+
+1. Implement **API rate limiting** globally
+2. Add **request signing** for extra-sensitive operations
+3. Implement **circuit breaker** for Pterodactyl API calls
+4. Add **audit event webhooks** for security events
+5. Implement **two-factor authentication** for admin accounts
+6. Add **security headers** to all responses
+7. Encrypt **sensitive configuration** values
+8. Implement **IP whitelisting** for admin area
+9. Add **SIEM integration** for security events
+10. Implement **database activity monitoring**
+
+---
+
+## QUICK PRIORITY FIX LIST
+
+**Fix immediately (Next 24 hours):**
+1. ✅ Replace `uniqid()` with cryptographically secure random
+2. ✅ Add authorization check for global token role changes
+3. ✅ Verify webhook signatures explicitly
+4. ✅ Add payment amount verification
+
+**Fix this week:**
+5. Add rate limiting to API
+6. Add security headers middleware
+7. Implement API operation logging
+8. Fix race condition in voucher/billing
+
+**Fix this sprint:**
+9. Encrypt sensitive data in activity logs
+10. Add IP whitelisting for admin area
+11. Implement 2FA for admins
+12. Add request signing for critical operations
+
+---
+
+## APPENDIX: Code Examples for Fixes
+
+### Fix 1: Replace uniqid()
+
+```php
+// BEFORE
+'payment_id' => uniqid(),
+
+// AFTER
+'payment_id' => Str::random(16),
+// OR
+'payment_id' => (string) Uuid::generate(),
+```
+
+### Fix 2: Add Security Headers
+
+```php
+// app/Http/Middleware/SecurityHeaders.php
+public function handle(Request $request, Closure $next): Response
+{
+ $response = $next($request);
+
+ $response->headers->set('X-Frame-Options', 'DENY');
+ $response->headers->set('X-Content-Type-Options', 'nosniff');
+ $response->headers->set('X-XSS-Protection', '1; mode=block');
+ $response->headers->set('Referrer-Policy', 'strict-origin-when-cross-origin');
+
+ if (config('app.env') === 'production') {
+ $response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
+ }
+
+ return $response;
+}
+
+// Register in Kernel.php
+protected $middleware = [
+ // ...
+ \App\Http\Middleware\SecurityHeaders::class,
+];
+```
+
+### Fix 3: Add API Rate Limiting
+
+```php
+// routes/api.php
+Route::middleware(['api.token', 'throttle:60,1'])->group(function () {
+ // API routes
+});
+```
+
+### Fix 4: Verify Payment Amount
+
+```php
+// In Stripe/PayPal webhook handlers
+if ((int)$remotePaymentAmount !== (int)$payment->amount_integer) {
+ Log::critical('Payment amount mismatch', [
+ 'payment_id' => $payment->id,
+ 'expected' => $payment->amount_integer,
+ 'received' => $remotePaymentAmount,
+ ]);
+ abort(400, 'Amount verification failed');
+}
+```
+
+---
+
+**Report Generated:** 2026-03-23
+**Auditor:** Security Analysis
+**Status:** Review Complete - 25 Issues Found
diff --git a/app/Actions/ProcessReferralAction.php b/app/Actions/ProcessReferralAction.php
index fe24ec678..1d5a81df1 100644
--- a/app/Actions/ProcessReferralAction.php
+++ b/app/Actions/ProcessReferralAction.php
@@ -20,12 +20,33 @@ public function __construct(
public function execute(User $user, string $referral_code, bool $log_activity = false)
{
- $ref_user = User::query()->where('referral_code', $referral_code)->first();
+ return DB::transaction(function () use ($user, $referral_code, $log_activity) {
+ $refUser = User::query()
+ ->where('referral_code', $referral_code)
+ ->lockForUpdate()
+ ->first();
+
+ if ($refUser === null || $refUser->id === $user->id) {
+ return false;
+ }
+
+ $existingReferral = DB::table('user_referrals')
+ ->where('registered_user_id', $user->id)
+ ->exists();
+
+ if ($existingReferral) {
+ return false;
+ }
+
+ DB::table('user_referrals')->insert([
+ 'referral_id' => $refUser->id,
+ 'registered_user_id' => $user->id,
+ 'created_at' => now(),
+ 'updated_at' => now(),
+ ]);
- if ($ref_user) {
if ($this->referralSettings->mode === 'sign-up' || $this->referralSettings->mode === 'both') {
- $ref_user->increment('credits', $this->referralSettings->reward);
- $ref_user->notify(new ReferralNotification($user));
+ $refUser->increment('credits', $this->referralSettings->reward);
if ($log_activity) {
$log = sprintf(
@@ -38,17 +59,16 @@ public function execute(User $user, string $referral_code, bool $log_activity =
activity()
->performedOn($user)
- ->causedBy($ref_user)
+ ->causedBy($refUser)
->log($log);
}
+
+ DB::afterCommit(static function () use ($refUser, $user): void {
+ $refUser->notify(new ReferralNotification($user));
+ });
}
- DB::table('user_referrals')->insert([
- 'referral_id' => $ref_user->id,
- 'registered_user_id' => $user->id,
- 'created_at' => now(),
- 'updated_at' => now(),
- ]);
- }
+ return true;
+ });
}
-}
\ No newline at end of file
+}
diff --git a/app/Classes/PterodactylClient.php b/app/Classes/PterodactylClient.php
index 2ecbad68c..8af40d972 100644
--- a/app/Classes/PterodactylClient.php
+++ b/app/Classes/PterodactylClient.php
@@ -24,9 +24,11 @@ class PterodactylClient
private int $allocation_limit = 200;
- public PendingRequest $client;
+ public ?PendingRequest $client = null;
- public PendingRequest $application;
+ public ?PendingRequest $application = null;
+
+ private ?Exception $constructionException = null;
public function __construct(PterodactylSettings $ptero_settings)
{
@@ -38,6 +40,7 @@ public function __construct(PterodactylSettings $ptero_settings)
$this->per_page_limit = $ptero_settings->per_page_limit;
$this->allocation_limit = $server_settings->allocation_limit;
} catch (Exception $exception) {
+ $this->constructionException = $exception;
logger('Failed to construct Pterodactyl client, Settings table not available?', ['exception' => $exception]);
}
}
@@ -50,7 +53,7 @@ public function client(PterodactylSettings $ptero_settings)
'Authorization' => 'Bearer ' . $ptero_settings->user_token,
'Content-type' => 'application/json',
'Accept' => 'Application/vnd.pterodactyl.v1+json',
- ])->baseUrl($ptero_settings->getUrl() . 'api' . '/');
+ ])->timeout(30)->connectTimeout(10)->baseUrl($ptero_settings->getUrl() . 'api' . '/');
}
public function clientAdmin(PterodactylSettings $ptero_settings)
@@ -59,7 +62,7 @@ public function clientAdmin(PterodactylSettings $ptero_settings)
'Authorization' => 'Bearer ' . $ptero_settings->admin_token,
'Content-type' => 'application/json',
'Accept' => 'Application/vnd.pterodactyl.v1+json',
- ])->baseUrl($ptero_settings->getUrl() . 'api' . '/');
+ ])->timeout(30)->connectTimeout(10)->baseUrl($ptero_settings->getUrl() . 'api' . '/');
}
/**
@@ -95,6 +98,38 @@ private function getException(string $message = '', ?int $status = null): HttpEx
return new Exception('Request Failed, is pterodactyl set-up correctly? - ' . $message);
}
+ /**
+ * @throws Exception
+ */
+ private function applicationRequest(): PendingRequest
+ {
+ if ($this->constructionException) {
+ throw new Exception('Failed to construct Pterodactyl client.', 0, $this->constructionException);
+ }
+
+ if (! $this->application) {
+ throw new Exception('Pterodactyl application client is not configured.');
+ }
+
+ return $this->application;
+ }
+
+ /**
+ * @throws Exception
+ */
+ private function clientRequest(): PendingRequest
+ {
+ if ($this->constructionException) {
+ throw new Exception('Failed to construct Pterodactyl client.', 0, $this->constructionException);
+ }
+
+ if (! $this->client) {
+ throw new Exception('Pterodactyl client is not configured.');
+ }
+
+ return $this->client;
+ }
+
/**
* @param Nest $nest
* @return mixed
@@ -104,7 +139,7 @@ private function getException(string $message = '', ?int $status = null): HttpEx
public function getEggs(Nest $nest)
{
try {
- $response = $this->application->get("application/nests/{$nest->id}/eggs?include=nest,variables&per_page=" . $this->per_page_limit);
+ $response = $this->applicationRequest()->get("application/nests/{$nest->id}/eggs?include=nest,variables&per_page=" . $this->per_page_limit);
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -112,7 +147,7 @@ public function getEggs(Nest $nest)
throw self::getException('Failed to get eggs from pterodactyl - ', $response->status());
}
- return $response->json()['data'];
+ return $this->extractRequiredArray($response, 'data', 'Failed to parse eggs response from Pterodactyl.');
}
/**
@@ -123,7 +158,7 @@ public function getEggs(Nest $nest)
public function getNodes()
{
try {
- $response = $this->application->get('application/nodes?per_page=' . $this->per_page_limit);
+ $response = $this->applicationRequest()->get('application/nodes?per_page=' . $this->per_page_limit);
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -131,7 +166,7 @@ public function getNodes()
throw self::getException('Failed to get nodes from pterodactyl - ', $response->status());
}
- return $response->json()['data'];
+ return $this->extractRequiredArray($response, 'data', 'Failed to parse nodes response from Pterodactyl.');
}
/**
@@ -143,7 +178,7 @@ public function getNodes()
public function getNode($id)
{
try {
- $response = $this->application->get('application/nodes/' . $id);
+ $response = $this->applicationRequest()->get('application/nodes/' . $id);
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -151,13 +186,13 @@ public function getNode($id)
throw self::getException('Failed to get node id ' . $id . ' - ' . $response->status());
}
- return $response->json()['attributes'];
+ return $this->extractRequiredArray($response, 'attributes', 'Failed to parse node response from Pterodactyl.');
}
public function getServers()
{
try {
- $response = $this->application->get('application/servers?per_page=' . $this->per_page_limit);
+ $response = $this->applicationRequest()->get('application/servers?per_page=' . $this->per_page_limit);
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -165,7 +200,7 @@ public function getServers()
throw self::getException('Failed to get list of servers - ', $response->status());
}
- return $response->json()['data'];
+ return $this->extractRequiredArray($response, 'data', 'Failed to parse servers response from Pterodactyl.');
}
/**
@@ -176,7 +211,7 @@ public function getServers()
public function getNests()
{
try {
- $response = $this->application->get('application/nests?per_page=' . $this->per_page_limit);
+ $response = $this->applicationRequest()->get('application/nests?per_page=' . $this->per_page_limit);
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -184,7 +219,7 @@ public function getNests()
throw self::getException('Failed to get nests from pterodactyl', $response->status());
}
- return $response->json()['data'];
+ return $this->extractRequiredArray($response, 'data', 'Failed to parse nests response from Pterodactyl.');
}
/**
@@ -195,7 +230,7 @@ public function getNests()
public function getLocations()
{
try {
- $response = $this->application->get('application/locations?per_page=' . $this->per_page_limit);
+ $response = $this->applicationRequest()->get('application/locations?per_page=' . $this->per_page_limit);
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -203,7 +238,7 @@ public function getLocations()
throw self::getException('Failed to get locations from pterodactyl - ', $response->status());
}
- return $response->json()['data'];
+ return $this->extractRequiredArray($response, 'data', 'Failed to parse locations response from Pterodactyl.');
}
/**
@@ -214,7 +249,15 @@ public function getLocations()
*/
public function getFreeAllocationId(Node $node)
{
- return self::getFreeAllocations($node)[0]['attributes']['id'] ?? null;
+ foreach ($this->getFreeAllocations($node) as $allocation) {
+ $allocationId = data_get($allocation, 'attributes.id');
+
+ if (is_int($allocationId) || ctype_digit((string) $allocationId)) {
+ return (int) $allocationId;
+ }
+ }
+
+ return null;
}
/**
@@ -228,12 +271,14 @@ public function getFreeAllocations(Node $node)
$response = self::getAllocations($node);
$freeAllocations = [];
- if (isset($response['data'])) {
- if (!empty($response['data'])) {
- foreach ($response['data'] as $allocation) {
- if (!$allocation['attributes']['assigned']) {
- array_push($freeAllocations, $allocation);
- }
+ if (isset($response['data']) && is_array($response['data'])) {
+ foreach ($response['data'] as $allocation) {
+ if (! is_array($allocation)) {
+ continue;
+ }
+
+ if (! (bool) data_get($allocation, 'attributes.assigned', true)) {
+ $freeAllocations[] = $allocation;
}
}
}
@@ -250,7 +295,7 @@ public function getFreeAllocations(Node $node)
public function getAllocations(Node $node)
{
try {
- $response = $this->application->get("application/nodes/{$node->id}/allocations?per_page={$this->allocation_limit}");
+ $response = $this->applicationRequest()->get("application/nodes/{$node->id}/allocations?per_page={$this->allocation_limit}");
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -258,7 +303,13 @@ public function getAllocations(Node $node)
throw self::getException('Failed to get allocations from pterodactyl - ', $response->status());
}
- return $response->json();
+ $payload = $response->json();
+
+ if (! is_array($payload)) {
+ throw new Exception('Failed to parse allocations response from Pterodactyl.');
+ }
+
+ return $payload;
}
/**
@@ -270,7 +321,7 @@ public function getAllocations(Node $node)
public function createServer(Server $server, Egg $egg, int $allocationId, mixed $eggVariables = null)
{
try {
- $response = $this->application->post('application/servers', [
+ $response = $this->applicationRequest()->post('application/servers', [
'name' => $server->name,
'external_id' => $server->id,
'user' => $server->user->pterodactyl_id,
@@ -305,7 +356,7 @@ public function createServer(Server $server, Egg $egg, int $allocationId, mixed
public function suspendServer(Server $server)
{
try {
- $response = $this->application->post("application/servers/$server->pterodactyl_id/suspend");
+ $response = $this->applicationRequest()->post("application/servers/$server->pterodactyl_id/suspend");
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -319,7 +370,7 @@ public function suspendServer(Server $server)
public function unSuspendServer(Server $server)
{
try {
- $response = $this->application->post("application/servers/$server->pterodactyl_id/unsuspend");
+ $response = $this->applicationRequest()->post("application/servers/$server->pterodactyl_id/unsuspend");
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -339,7 +390,7 @@ public function unSuspendServer(Server $server)
public function getUser(int $pterodactylId)
{
try {
- $response = $this->application->get("application/users/{$pterodactylId}");
+ $response = $this->applicationRequest()->get("application/users/{$pterodactylId}");
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -347,7 +398,7 @@ public function getUser(int $pterodactylId)
throw self::getException('Failed to get user from pterodactyl - ', $response->status());
}
- return $response->json()['attributes'];
+ return $this->extractRequiredArray($response, 'attributes', 'Failed to parse user response from Pterodactyl.');
}
/**
@@ -361,7 +412,7 @@ public function getUser(int $pterodactylId)
public function updateUser(int $pterodactylId, array $data)
{
try {
- $response = $this->application->patch("application/users/{$pterodactylId}", $data);
+ $response = $this->applicationRequest()->patch("application/users/{$pterodactylId}", $data);
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -381,7 +432,7 @@ public function updateUser(int $pterodactylId, array $data)
public function getServerAttributes(int $pterodactylId, bool $deleteOn404 = false)
{
try {
- $response = $this->application->get("application/servers/{$pterodactylId}?include=egg,node,nest,location");
+ $response = $this->applicationRequest()->get("application/servers/{$pterodactylId}?include=egg,node,nest,location");
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -389,16 +440,20 @@ public function getServerAttributes(int $pterodactylId, bool $deleteOn404 = fals
//print response body
if ($response->failed()) {
- if ($deleteOn404) { //Delete the server if it does not exist (server deleted on pterodactyl)
- Server::where('pterodactyl_id', $pterodactylId)->first()->delete();
+ if ($deleteOn404 && $response->status() === 404) { //Delete the server if it does not exist (server deleted on pterodactyl)
+ $server = Server::query()->where('pterodactyl_id', $pterodactylId)->first();
+
+ if ($server) {
+ $server->deleteQuietly();
+ }
- return;
+ return null;
} else {
throw self::getException('Failed to get server attributes from pterodactyl - ', $response->status());
}
}
- return $response->json()['attributes'];
+ return $this->extractRequiredArray($response, 'attributes', 'Failed to parse server response from Pterodactyl.');
}
/**
@@ -412,7 +467,7 @@ public function getServerAttributes(int $pterodactylId, bool $deleteOn404 = fals
*/
public function updateServer(Server $server, Product $product)
{
- return $this->application->patch("application/servers/{$server->pterodactyl_id}/build", [
+ return $this->applicationRequest()->patch("application/servers/{$server->pterodactyl_id}/build", [
'allocation' => $server->allocation,
'memory' => $product->memory,
'swap' => $product->swap,
@@ -440,7 +495,7 @@ public function updateServer(Server $server, Product $product)
public function updateServerBuild(string $pterodactylId, int $pterodactylAllocation, Product $product)
{
try {
- $response = $this->application->patch("application/servers/{$pterodactylId}/build", [
+ $response = $this->applicationRequest()->patch("application/servers/{$pterodactylId}/build", [
'allocation' => $pterodactylAllocation,
'memory' => $product->memory,
'swap' => $product->swap,
@@ -448,7 +503,7 @@ public function updateServerBuild(string $pterodactylId, int $pterodactylAllocat
'io' => $product->io,
'cpu' => $product->cpu,
'threads' => null,
- 'oom_disabled' => $product->oom_killer,
+ 'oom_disabled' => !$product->oom_killer,
'feature_limits' => [
'databases' => $product->databases,
'backups' => $product->backups,
@@ -457,7 +512,7 @@ public function updateServerBuild(string $pterodactylId, int $pterodactylAllocat
]);
if ($response->failed()) {
- throw self::getException('Server not found on Pterodactyl', 404);
+ throw self::getException('Failed to update server build on Pterodactyl.', $response->status());
}
return $response;
@@ -475,7 +530,7 @@ public function updateServerBuild(string $pterodactylId, int $pterodactylAllocat
*/
public function updateServerOwner(Server $server, int $userId)
{
- return $this->application->patch("application/servers/{$server->pterodactyl_id}/details", [
+ return $this->applicationRequest()->patch("application/servers/{$server->pterodactyl_id}/details", [
'name' => $server->name,
'user' => $userId,
]);
@@ -494,7 +549,7 @@ public function updateServerOwner(Server $server, int $userId)
public function updateServerDetails(Server $server, array $data)
{
try {
- return $this->application->patch("application/servers/{$server->pterodactyl_id}/details", $data);
+ return $this->applicationRequest()->patch("application/servers/{$server->pterodactyl_id}/details", $data);
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
@@ -509,7 +564,7 @@ public function updateServerDetails(Server $server, array $data)
*/
public function powerAction(Server $server, $action)
{
- return $this->client->post("client/servers/{$server->identifier}/power", [
+ return $this->clientRequest()->post("client/servers/{$server->identifier}/power", [
'signal' => $action,
]);
}
@@ -519,7 +574,7 @@ public function powerAction(Server $server, $action)
*/
public function getClientUser()
{
- return $this->client->get('client/account');
+ return $this->clientRequest()->get('client/account');
}
/**
@@ -533,11 +588,16 @@ public function getClientUser()
public function checkNodeResources(Node $node, int $requireMemory, int $requireDisk)
{
try {
- $response = $this->application->get("application/nodes/{$node->id}");
+ $response = $this->applicationRequest()->get("application/nodes/{$node->id}");
} catch (Exception $e) {
throw self::getException($e->getMessage());
}
- $node = $response['attributes'];
+
+ if ($response->failed()) {
+ throw self::getException('Failed to get node resources from pterodactyl - ', $response->status());
+ }
+
+ $node = $this->extractRequiredArray($response, 'attributes', 'Failed to parse node resources from Pterodactyl.');
$freeMemory = ($node['memory'] * ($node['memory_overallocate'] + 100) / 100) - $node['allocated_resources']['memory'];
$freeDisk = ($node['disk'] * ($node['disk_overallocate'] + 100) / 100) - $node['allocated_resources']['disk'];
if ($freeMemory < $requireMemory) {
@@ -553,17 +613,53 @@ public function checkNodeResources(Node $node, int $requireMemory, int $requireD
private function getEnvironmentVariables(Egg $egg, $variables)
{
$environment = [];
- // Support for front-end and api variables format.
- $variables = collect(is_string($variables) ? json_decode($variables, true) : $variables);
+ $allowedVariables = [];
+
+ if (is_string($variables)) {
+ $decodedVariables = json_decode($variables, true);
+ $variables = is_array($decodedVariables) ? $decodedVariables : [];
+ }
+
+ $variables = is_array($variables) ? $variables : [];
+
+ foreach ((array) $egg->environment as $envVariable) {
+ if (! is_array($envVariable) || empty($envVariable['env_variable'])) {
+ continue;
+ }
+
+ $allowedVariables[] = $envVariable['env_variable'];
- foreach ($egg->environment as $envVariable) {
- if (!empty($envVariable['default_value'])) {
+ if (array_key_exists('default_value', $envVariable) && $envVariable['default_value'] !== null && $envVariable['default_value'] !== '') {
$environment[$envVariable['env_variable']] = $envVariable['default_value'];
}
}
- $environment = array_merge($environment, $variables->toArray());
+ foreach ($variables as $key => $value) {
+ if (in_array($key, $allowedVariables, true)) {
+ $environment[$key] = $value;
+ }
+ }
return $environment;
}
+
+ /**
+ * @throws Exception
+ */
+ private function extractRequiredArray(Response $response, string $path, string $message): array
+ {
+ $payload = $response->json();
+
+ if (! is_array($payload)) {
+ throw new Exception($message);
+ }
+
+ $value = data_get($payload, $path);
+
+ if (! is_array($value)) {
+ throw new Exception($message);
+ }
+
+ return $value;
+ }
}
diff --git a/app/Console/Commands/ChargeServers.php b/app/Console/Commands/ChargeServers.php
index c713df4e5..2724405a0 100644
--- a/app/Console/Commands/ChargeServers.php
+++ b/app/Console/Commands/ChargeServers.php
@@ -96,33 +96,58 @@ public function handle()
}
- $isCanceled = $server->canceled;
- $hasInsufficientCredits = $user->credits < $product->price && $product->price != 0;
-
- // check if the server is canceled or if user has enough credits to charge the server
- if ($isCanceled || $hasInsufficientCredits) {
- try {
- $this->suspendFunc($server, $user);
- } catch (Exception $exception) {
- $this->error($exception->getMessage());
- }
- } else {
- // charge credits to user
- $this->line(" Some Random HTML Some Random HTML Some Random HTML';
+ return '
';
})
->addColumn('credits', function (User $user, CurrencyHelper $currencyHelper) {
return ' ' . $currencyHelper->formatForDisplay($user->credits);
@@ -500,28 +659,53 @@ public function dataTable(Request $request)
$suspendColor = $user->isSuspended() ? 'btn-success' : 'btn-warning';
$suspendIcon = $user->isSuspended() ? 'fa-play-circle' : 'fa-pause-circle';
$suspendText = $user->isSuspended() ? __('Unsuspend') : __('Suspend');
+ $actions = [];
+
+ if (auth()->user()?->can(self::LOGIN_PERMISSION) && ! $this->userCanAccessAdminArea($user)) {
+ $actions[] = '
+
", $notes);
@@ -66,7 +72,7 @@ public function createInvoice(Payment $payment, ShopProduct $shopProduct, Invoic
->status(__($payment->status->value))
->series(now()->format('mY'))
->delimiter("-")
- ->sequence($newInvoiceID)
+ ->sequence($invoiceRecord->id)
->serialNumberFormat($invoice_settings->prefix . '{DELIMITER}{SERIES}{SEQUENCE}')
->currencyCode(strtoupper($payment->currency_code))
->currencySymbol(Currencies::getSymbol(strtoupper($payment->currency_code)))
@@ -77,15 +83,15 @@ public function createInvoice(Payment $payment, ShopProduct $shopProduct, Invoic
}
//Save the invoice in "storage\app\invoice\USER_ID\YEAR"
- $invoice->filename = $invoice->getSerialNumber() . '.pdf';
- $invoice->render();
- Storage::disk("local")->put("invoice/" . $user->id . "/" . now()->format('Y') . "/" . $invoice->filename, $invoice->output);
+ try {
+ $invoice->filename = $invoiceSerialNumber . '.pdf';
+ $invoice->render();
+ Storage::disk("local")->put("invoice/" . $user->id . "/" . now()->format('Y') . "/" . $invoice->filename, $invoice->output);
+ } catch (\Throwable $exception) {
+ $invoiceRecord->delete();
- Invoice::create([
- 'invoice_user' => $user->id,
- 'invoice_name' => $invoice->getSerialNumber(),
- 'payment_id' => $payment->payment_id,
- ]);
+ throw $exception;
+ }
//Send Invoice per Mail
$user->notify(new InvoiceNotification($invoice->filename, $user, $payment));
diff --git a/app/Traits/Referral.php b/app/Traits/Referral.php
index ad61e9020..d91baa3b1 100644
--- a/app/Traits/Referral.php
+++ b/app/Traits/Referral.php
@@ -16,7 +16,7 @@ public function createReferralCode()
// check if code already exists
if (User::where('referral_code', $code)->exists()) {
// if exists, generate another code
- return $this->generateReferralCode();
+ return $this->createReferralCode();
}
return $code;
}
diff --git a/composer.json b/composer.json
index 94c16c43b..787f66182 100644
--- a/composer.json
+++ b/composer.json
@@ -12,7 +12,6 @@
"ext-curl": "*",
"ext-intl": "*",
"ext-mysqli": "*",
- "biscolab/laravel-recaptcha": "^6.1",
"coderflex/laravel-turnstile": "^2.1",
"doctrine/dbal": "^4.0.4",
"guzzlehttp/guzzle": "^7.5",
@@ -24,8 +23,7 @@
"laravel/ui": "^4.5.2",
"laraveldaily/laravel-invoices": "^4.0.0",
"league/flysystem-aws-s3-v3": "^3.28.0",
- "paypal/paypal-checkout-sdk": "^1.0.2",
- "predis/predis": "*",
+ "predis/predis": "^2.3",
"qirolab/laravel-themer": "^2.3.3",
"socialiteproviders/discord": "^4.1.2",
"spatie/laravel-activitylog": "^4.9",
@@ -56,19 +54,15 @@
"php": "8.2"
}
},
- "extra": {
- "laravel": {
- "dont-discover": [
- "biscolab/laravel-recaptcha"
- ]
- }
- },
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
},
+ "files": [
+ "app/Support/helpers.php"
+ ],
"exclude-from-classmap": [
"app/Extensions/PaymentGateways/**/migrations"
]
diff --git a/composer.lock b/composer.lock
index 272786788..a0ea457d2 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "78ae00759c4f49760320646be638b4fa",
+ "content-hash": "d5f5bc742f5d85eb673b540fe8383904",
"packages": [
{
"name": "aws/aws-crt-php",
@@ -62,16 +62,16 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.369.26",
+ "version": "3.374.1",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "ad0916c6595d98f9052f60e1d7204f4740369e94"
+ "reference": "fa9801583e679aecc95660838708acfd98aa28e7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ad0916c6595d98f9052f60e1d7204f4740369e94",
- "reference": "ad0916c6595d98f9052f60e1d7204f4740369e94",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/fa9801583e679aecc95660838708acfd98aa28e7",
+ "reference": "fa9801583e679aecc95660838708acfd98aa28e7",
"shasum": ""
},
"require": {
@@ -92,12 +92,12 @@
"aws/aws-php-sns-message-validator": "~1.0",
"behat/behat": "~3.0",
"composer/composer": "^2.7.8",
- "dms/phpunit-arraysubset-asserts": "^0.4.0",
+ "dms/phpunit-arraysubset-asserts": "^v0.5.0",
"doctrine/cache": "~1.4",
"ext-dom": "*",
"ext-openssl": "*",
"ext-sockets": "*",
- "phpunit/phpunit": "^9.6",
+ "phpunit/phpunit": "^10.0",
"psr/cache": "^2.0 || ^3.0",
"psr/simple-cache": "^2.0 || ^3.0",
"sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
@@ -135,11 +135,11 @@
"authors": [
{
"name": "Amazon Web Services",
- "homepage": "http://aws.amazon.com"
+ "homepage": "https://aws.amazon.com"
}
],
"description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
- "homepage": "http://aws.amazon.com/sdkforphp",
+ "homepage": "https://aws.amazon.com/sdk-for-php",
"keywords": [
"amazon",
"aws",
@@ -153,32 +153,32 @@
"support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues",
- "source": "https://github.com/aws/aws-sdk-php/tree/3.369.26"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.374.1"
},
- "time": "2026-02-03T19:16:42+00:00"
+ "time": "2026-03-26T18:06:13+00:00"
},
{
"name": "barryvdh/laravel-dompdf",
- "version": "v3.1.1",
+ "version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-dompdf.git",
- "reference": "8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d"
+ "reference": "ee3b72b19ccdf57d0243116ecb2b90261344dedc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d",
- "reference": "8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d",
+ "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/ee3b72b19ccdf57d0243116ecb2b90261344dedc",
+ "reference": "ee3b72b19ccdf57d0243116ecb2b90261344dedc",
"shasum": ""
},
"require": {
"dompdf/dompdf": "^3.0",
- "illuminate/support": "^9|^10|^11|^12",
+ "illuminate/support": "^9|^10|^11|^12|^13.0",
"php": "^8.1"
},
"require-dev": {
"larastan/larastan": "^2.7|^3.0",
- "orchestra/testbench": "^7|^8|^9|^10",
+ "orchestra/testbench": "^7|^8|^9.16|^10|^11.0",
"phpro/grumphp": "^2.5",
"squizlabs/php_codesniffer": "^3.5"
},
@@ -220,7 +220,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-dompdf/issues",
- "source": "https://github.com/barryvdh/laravel-dompdf/tree/v3.1.1"
+ "source": "https://github.com/barryvdh/laravel-dompdf/tree/v3.1.2"
},
"funding": [
{
@@ -232,92 +232,20 @@
"type": "github"
}
],
- "time": "2025-02-13T15:07:54+00:00"
- },
- {
- "name": "biscolab/laravel-recaptcha",
- "version": "v6.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/biscolab/laravel-recaptcha.git",
- "reference": "440fc617cba9f39aab7fda5d7697b76a55286e31"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/biscolab/laravel-recaptcha/zipball/440fc617cba9f39aab7fda5d7697b76a55286e31",
- "reference": "440fc617cba9f39aab7fda5d7697b76a55286e31",
- "shasum": ""
- },
- "require": {
- "illuminate/routing": "^7.0|^8.0|^9.0|^10.0|^11.0",
- "illuminate/support": "^7.0|^8.0|^9.0|^10.0|^11.0",
- "php": "^7.3|^8.0"
- },
- "require-dev": {
- "orchestra/testbench": "5.*|6.*|^7.0|^8.0|^9.0",
- "phpunit/phpunit": "^9.1|^10.5"
- },
- "suggest": {
- "biscolab/laravel-authlog": "It allows to handle logged-in users and force log-out if needed"
- },
- "type": "library",
- "extra": {
- "laravel": {
- "aliases": {
- "ReCaptcha": "Biscolab\\ReCaptcha\\Facades\\ReCaptcha"
- },
- "providers": [
- "Biscolab\\ReCaptcha\\ReCaptchaServiceProvider"
- ]
- }
- },
- "autoload": {
- "files": [
- "src/helpers.php"
- ],
- "psr-4": {
- "Biscolab\\ReCaptcha\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Roberto Belotti",
- "email": "roby.belotti@gmail.com",
- "homepage": "https://biscolab.com",
- "role": "Developer"
- }
- ],
- "description": "Simple and painless Google reCAPTCHA package for Laravel framework",
- "homepage": "https://biscolab.com/laravel-recaptcha",
- "keywords": [
- "captcha",
- "laravel",
- "recaptcha",
- "validation"
- ],
- "support": {
- "issues": "https://github.com/biscolab/laravel-recaptcha/issues",
- "source": "https://github.com/biscolab/laravel-recaptcha/tree/v6.1.0"
- },
- "abandoned": true,
- "time": "2024-03-27T11:06:21+00:00"
+ "time": "2026-02-21T08:51:10+00:00"
},
{
"name": "brick/math",
- "version": "0.14.5",
+ "version": "0.14.8",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
- "reference": "618a8077b3c326045e10d5788ed713b341fcfe40"
+ "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/618a8077b3c326045e10d5788ed713b341fcfe40",
- "reference": "618a8077b3c326045e10d5788ed713b341fcfe40",
+ "url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629",
+ "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629",
"shasum": ""
},
"require": {
@@ -356,7 +284,7 @@
],
"support": {
"issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.14.5"
+ "source": "https://github.com/brick/math/tree/0.14.8"
},
"funding": [
{
@@ -364,7 +292,7 @@
"type": "github"
}
],
- "time": "2026-02-03T18:06:51+00:00"
+ "time": "2026-02-10T14:33:43+00:00"
},
{
"name": "carbonphp/carbon-doctrine-types",
@@ -586,16 +514,16 @@
},
{
"name": "doctrine/dbal",
- "version": "4.4.1",
+ "version": "4.4.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "3d544473fb93f5c25b483ea4f4ce99f8c4d9d44c"
+ "reference": "61e730f1658814821a85f2402c945f3883407dec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/3d544473fb93f5c25b483ea4f4ce99f8c4d9d44c",
- "reference": "3d544473fb93f5c25b483ea4f4ce99f8c4d9d44c",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/61e730f1658814821a85f2402c945f3883407dec",
+ "reference": "61e730f1658814821a85f2402c945f3883407dec",
"shasum": ""
},
"require": {
@@ -611,9 +539,9 @@
"phpstan/phpstan": "2.1.30",
"phpstan/phpstan-phpunit": "2.0.7",
"phpstan/phpstan-strict-rules": "^2",
- "phpunit/phpunit": "11.5.23",
- "slevomat/coding-standard": "8.24.0",
- "squizlabs/php_codesniffer": "4.0.0",
+ "phpunit/phpunit": "11.5.50",
+ "slevomat/coding-standard": "8.27.1",
+ "squizlabs/php_codesniffer": "4.0.1",
"symfony/cache": "^6.3.8|^7.0|^8.0",
"symfony/console": "^5.4|^6.3|^7.0|^8.0"
},
@@ -672,7 +600,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/4.4.1"
+ "source": "https://github.com/doctrine/dbal/tree/4.4.3"
},
"funding": [
{
@@ -688,33 +616,33 @@
"type": "tidelift"
}
],
- "time": "2025-12-04T10:11:03+00:00"
+ "time": "2026-03-20T08:52:12+00:00"
},
{
"name": "doctrine/deprecations",
- "version": "1.1.5",
+ "version": "1.1.6",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
- "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
+ "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
- "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca",
+ "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
- "phpunit/phpunit": "<=7.5 || >=13"
+ "phpunit/phpunit": "<=7.5 || >=14"
},
"require-dev": {
- "doctrine/coding-standard": "^9 || ^12 || ^13",
- "phpstan/phpstan": "1.4.10 || 2.1.11",
+ "doctrine/coding-standard": "^9 || ^12 || ^14",
+ "phpstan/phpstan": "1.4.10 || 2.1.30",
"phpstan/phpstan-phpunit": "^1.0 || ^2",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0",
"psr/log": "^1 || ^2 || ^3"
},
"suggest": {
@@ -734,9 +662,9 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/1.1.5"
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.6"
},
- "time": "2025-04-07T20:06:18+00:00"
+ "time": "2026-02-07T07:09:04+00:00"
},
{
"name": "doctrine/inflector",
@@ -907,16 +835,16 @@
},
{
"name": "dompdf/dompdf",
- "version": "v3.1.4",
+ "version": "v3.1.5",
"source": {
"type": "git",
"url": "https://github.com/dompdf/dompdf.git",
- "reference": "db712c90c5b9868df3600e64e68da62e78a34623"
+ "reference": "f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dompdf/dompdf/zipball/db712c90c5b9868df3600e64e68da62e78a34623",
- "reference": "db712c90c5b9868df3600e64e68da62e78a34623",
+ "url": "https://api.github.com/repos/dompdf/dompdf/zipball/f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496",
+ "reference": "f11ead23a8a76d0ff9bbc6c7c8fd7e05ca328496",
"shasum": ""
},
"require": {
@@ -965,9 +893,9 @@
"homepage": "https://github.com/dompdf/dompdf",
"support": {
"issues": "https://github.com/dompdf/dompdf/issues",
- "source": "https://github.com/dompdf/dompdf/tree/v3.1.4"
+ "source": "https://github.com/dompdf/dompdf/tree/v3.1.5"
},
- "time": "2025-10-29T12:43:30+00:00"
+ "time": "2026-03-03T13:54:37+00:00"
},
{
"name": "dompdf/php-font-lib",
@@ -1246,16 +1174,16 @@
},
{
"name": "firebase/php-jwt",
- "version": "v7.0.2",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/firebase/php-jwt.git",
- "reference": "5645b43af647b6947daac1d0f659dd1fbe8d3b65"
+ "reference": "28aa0694bcfdfa5e2959c394d5a1ee7a5083629e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/firebase/php-jwt/zipball/5645b43af647b6947daac1d0f659dd1fbe8d3b65",
- "reference": "5645b43af647b6947daac1d0f659dd1fbe8d3b65",
+ "url": "https://api.github.com/repos/firebase/php-jwt/zipball/28aa0694bcfdfa5e2959c394d5a1ee7a5083629e",
+ "reference": "28aa0694bcfdfa5e2959c394d5a1ee7a5083629e",
"shasum": ""
},
"require": {
@@ -1303,9 +1231,9 @@
],
"support": {
"issues": "https://github.com/firebase/php-jwt/issues",
- "source": "https://github.com/firebase/php-jwt/tree/v7.0.2"
+ "source": "https://github.com/firebase/php-jwt/tree/v7.0.3"
},
- "time": "2025-12-16T22:17:28+00:00"
+ "time": "2026-02-25T22:16:40+00:00"
},
{
"name": "fruitcake/php-cors",
@@ -1651,16 +1579,16 @@
},
{
"name": "guzzlehttp/psr7",
- "version": "2.8.0",
+ "version": "2.9.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "21dc724a0583619cd1652f673303492272778051"
+ "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
- "reference": "21dc724a0583619cd1652f673303492272778051",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884",
+ "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884",
"shasum": ""
},
"require": {
@@ -1676,6 +1604,7 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0",
+ "jshttp/mime-db": "1.54.0.1",
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"suggest": {
@@ -1747,7 +1676,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.8.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.9.0"
},
"funding": [
{
@@ -1763,7 +1692,7 @@
"type": "tidelift"
}
],
- "time": "2025-08-23T21:21:41+00:00"
+ "time": "2026-03-10T16:41:02+00:00"
},
{
"name": "guzzlehttp/uri-template",
@@ -1910,29 +1839,29 @@
},
{
"name": "josiasmontag/laravel-recaptchav3",
- "version": "1.0.4",
+ "version": "1.0.5",
"source": {
"type": "git",
"url": "https://github.com/josiasmontag/laravel-recaptchav3.git",
- "reference": "08548b818223a20fc7db04a8d060758f8efc4ef5"
+ "reference": "97a055fff91cd1eef0e1f0309489ea8269a487d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/josiasmontag/laravel-recaptchav3/zipball/08548b818223a20fc7db04a8d060758f8efc4ef5",
- "reference": "08548b818223a20fc7db04a8d060758f8efc4ef5",
+ "url": "https://api.github.com/repos/josiasmontag/laravel-recaptchav3/zipball/97a055fff91cd1eef0e1f0309489ea8269a487d0",
+ "reference": "97a055fff91cd1eef0e1f0309489ea8269a487d0",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "^6.2|^7.0",
- "illuminate/container": "~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
- "illuminate/http": "~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
- "illuminate/support": "~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/container": "~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/http": "~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
"php": ">=7.1.0"
},
"require-dev": {
"mockery/mockery": "^1.2",
- "orchestra/testbench": "~3.7.0|~3.8.0|^4.0|^5.0|^6.0|^7.0|^8.0|^9.0|^10.0",
- "phpunit/phpunit": "6.2|^7.0|^8.0|^9.5.10|^10.5|^11.5.3"
+ "orchestra/testbench": "~3.7.0|~3.8.0|^4.0|^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
+ "phpunit/phpunit": "6.2|^7.0|^8.0|^9.5.10|^10.5|^11.5.3|^12.5.12"
},
"type": "library",
"extra": {
@@ -1970,35 +1899,35 @@
],
"support": {
"issues": "https://github.com/josiasmontag/laravel-recaptchav3/issues",
- "source": "https://github.com/josiasmontag/laravel-recaptchav3/tree/1.0.4"
+ "source": "https://github.com/josiasmontag/laravel-recaptchav3/tree/1.0.5"
},
- "time": "2025-02-25T08:00:22+00:00"
+ "time": "2026-02-24T15:20:53+00:00"
},
{
"name": "kkomelin/laravel-translatable-string-exporter",
- "version": "1.25.0",
+ "version": "1.26.0",
"source": {
"type": "git",
"url": "https://github.com/kkomelin/laravel-translatable-string-exporter.git",
- "reference": "e0feda8878a8b2a3dd5f4f66f14e5d808421346e"
+ "reference": "6e8b5596df329d0678574982666ff4493b9be829"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/kkomelin/laravel-translatable-string-exporter/zipball/e0feda8878a8b2a3dd5f4f66f14e5d808421346e",
- "reference": "e0feda8878a8b2a3dd5f4f66f14e5d808421346e",
+ "url": "https://api.github.com/repos/kkomelin/laravel-translatable-string-exporter/zipball/6e8b5596df329d0678574982666ff4493b9be829",
+ "reference": "6e8b5596df329d0678574982666ff4493b9be829",
"shasum": ""
},
"require": {
"ext-json": "*",
- "illuminate/support": "^8|^9|^10.0|^11.0|^12.0",
- "illuminate/translation": "^8|^9|^10.0|^11.0|^12.0",
- "php": "^8.0",
- "symfony/finder": "^5|^6|^7.0"
+ "illuminate/support": "^8|^9|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/translation": "^8|^9|^10.0|^11.0|^12.0|^13.0",
+ "php": "^8.2",
+ "symfony/finder": "^5|^6|^7.0|^8.0"
},
"require-dev": {
"larastan/larastan": "^1.0|^2.0|^3.0",
- "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "phpunit/phpunit": "^9.0|^10.5|^11.5|^12.0"
+ "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
+ "phpunit/phpunit": "^9.0|^10.5|^11.5|^12.0|^13.0"
},
"type": "library",
"extra": {
@@ -2035,22 +1964,32 @@
],
"support": {
"issues": "https://github.com/kkomelin/laravel-translatable-string-exporter/issues",
- "source": "https://github.com/kkomelin/laravel-translatable-string-exporter/tree/1.25.0"
+ "source": "https://github.com/kkomelin/laravel-translatable-string-exporter/tree/1.26.0"
},
- "time": "2025-10-03T09:34:30+00:00"
+ "funding": [
+ {
+ "url": "https://www.buymeacoffee.com/kkomelin",
+ "type": "buy_me_a_coffee"
+ },
+ {
+ "url": "https://github.com/kkomelin",
+ "type": "github"
+ }
+ ],
+ "time": "2026-03-18T09:33:34+00:00"
},
{
"name": "laravel/framework",
- "version": "v11.48.0",
+ "version": "v11.51.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "5b23ab29087dbcb13077e5c049c431ec4b82f236"
+ "reference": "c8f9a04594b7044a189a3194cfb3594251eb74e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/5b23ab29087dbcb13077e5c049c431ec4b82f236",
- "reference": "5b23ab29087dbcb13077e5c049c431ec4b82f236",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/c8f9a04594b7044a189a3194cfb3594251eb74e5",
+ "reference": "c8f9a04594b7044a189a3194cfb3594251eb74e5",
"shasum": ""
},
"require": {
@@ -2158,10 +2097,10 @@
"league/flysystem-read-only": "^3.25.1",
"league/flysystem-sftp-v3": "^3.25.1",
"mockery/mockery": "^1.6.10",
- "orchestra/testbench-core": "^9.16.1",
+ "orchestra/testbench-core": "^9.18.0",
"pda/pheanstalk": "^5.0.6",
"php-http/discovery": "^1.15",
- "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan": "2.1.41",
"phpunit/phpunit": "^10.5.35|^11.3.6|^12.0.1",
"predis/predis": "^2.3",
"resend/resend-php": "^0.10.0",
@@ -2252,34 +2191,34 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2026-01-20T15:26:20+00:00"
+ "time": "2026-03-26T14:54:53+00:00"
},
{
"name": "laravel/prompts",
- "version": "v0.3.11",
+ "version": "v0.3.16",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "dd2a2ed95acacbcccd32fd98dee4c946ae7a7217"
+ "reference": "11e7d5f93803a2190b00e145142cb00a33d17ad2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/dd2a2ed95acacbcccd32fd98dee4c946ae7a7217",
- "reference": "dd2a2ed95acacbcccd32fd98dee4c946ae7a7217",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/11e7d5f93803a2190b00e145142cb00a33d17ad2",
+ "reference": "11e7d5f93803a2190b00e145142cb00a33d17ad2",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2.2",
"ext-mbstring": "*",
"php": "^8.1",
- "symfony/console": "^6.2|^7.0"
+ "symfony/console": "^6.2|^7.0|^8.0"
},
"conflict": {
"illuminate/console": ">=10.17.0 <10.25.0",
"laravel/framework": ">=10.17.0 <10.25.0"
},
"require-dev": {
- "illuminate/collections": "^10.0|^11.0|^12.0",
+ "illuminate/collections": "^10.0|^11.0|^12.0|^13.0",
"mockery/mockery": "^1.5",
"pestphp/pest": "^2.3|^3.4|^4.0",
"phpstan/phpstan": "^1.12.28",
@@ -2309,33 +2248,33 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
- "source": "https://github.com/laravel/prompts/tree/v0.3.11"
+ "source": "https://github.com/laravel/prompts/tree/v0.3.16"
},
- "time": "2026-01-27T02:55:06+00:00"
+ "time": "2026-03-23T14:35:33+00:00"
},
{
"name": "laravel/serializable-closure",
- "version": "v2.0.8",
+ "version": "v2.0.10",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b"
+ "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/7581a4407012f5f53365e11bafc520fd7f36bc9b",
- "reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/870fc81d2f879903dfc5b60bf8a0f94a1609e669",
+ "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
- "illuminate/support": "^10.0|^11.0|^12.0",
+ "illuminate/support": "^10.0|^11.0|^12.0|^13.0",
"nesbot/carbon": "^2.67|^3.0",
"pestphp/pest": "^2.36|^3.0|^4.0",
"phpstan/phpstan": "^2.0",
- "symfony/var-dumper": "^6.2.0|^7.0.0"
+ "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0"
},
"type": "library",
"extra": {
@@ -2372,36 +2311,36 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2026-01-08T16:22:46+00:00"
+ "time": "2026-02-20T19:59:49+00:00"
},
{
"name": "laravel/socialite",
- "version": "v5.24.2",
+ "version": "v5.26.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/socialite.git",
- "reference": "5cea2eebf11ca4bc6c2f20495c82a70a9b3d1613"
+ "reference": "1d26f0c653a5f0e88859f4197830a29fe0cc59d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/socialite/zipball/5cea2eebf11ca4bc6c2f20495c82a70a9b3d1613",
- "reference": "5cea2eebf11ca4bc6c2f20495c82a70a9b3d1613",
+ "url": "https://api.github.com/repos/laravel/socialite/zipball/1d26f0c653a5f0e88859f4197830a29fe0cc59d0",
+ "reference": "1d26f0c653a5f0e88859f4197830a29fe0cc59d0",
"shasum": ""
},
"require": {
"ext-json": "*",
"firebase/php-jwt": "^6.4|^7.0",
"guzzlehttp/guzzle": "^6.0|^7.0",
- "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
- "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
- "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
"league/oauth1-client": "^1.11",
"php": "^7.2|^8.0",
"phpseclib/phpseclib": "^3.0"
},
"require-dev": {
"mockery/mockery": "^1.0",
- "orchestra/testbench": "^4.18|^5.20|^6.47|^7.55|^8.36|^9.15|^10.8",
+ "orchestra/testbench": "^4.18|^5.20|^6.47|^7.55|^8.36|^9.15|^10.8|^11.0",
"phpstan/phpstan": "^1.12.23",
"phpunit/phpunit": "^8.0|^9.3|^10.4|^11.5|^12.0"
},
@@ -2444,20 +2383,20 @@
"issues": "https://github.com/laravel/socialite/issues",
"source": "https://github.com/laravel/socialite"
},
- "time": "2026-01-10T16:07:28+00:00"
+ "time": "2026-03-24T18:37:47+00:00"
},
{
"name": "laravel/tinker",
- "version": "v2.11.0",
+ "version": "v2.11.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/tinker.git",
- "reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468"
+ "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/tinker/zipball/3d34b97c9a1747a81a3fde90482c092bd8b66468",
- "reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/c9f80cc835649b5c1842898fb043f8cc098dd741",
+ "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741",
"shasum": ""
},
"require": {
@@ -2508,35 +2447,35 @@
],
"support": {
"issues": "https://github.com/laravel/tinker/issues",
- "source": "https://github.com/laravel/tinker/tree/v2.11.0"
+ "source": "https://github.com/laravel/tinker/tree/v2.11.1"
},
- "time": "2025-12-19T19:16:45+00:00"
+ "time": "2026-02-06T14:12:35+00:00"
},
{
"name": "laravel/ui",
- "version": "v4.6.1",
+ "version": "v4.6.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/ui.git",
- "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88"
+ "reference": "ff27db15416c1ed8ad9848f5692e47595dd5de27"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/ui/zipball/7d6ffa38d79f19c9b3e70a751a9af845e8f41d88",
- "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88",
+ "url": "https://api.github.com/repos/laravel/ui/zipball/ff27db15416c1ed8ad9848f5692e47595dd5de27",
+ "reference": "ff27db15416c1ed8ad9848f5692e47595dd5de27",
"shasum": ""
},
"require": {
- "illuminate/console": "^9.21|^10.0|^11.0|^12.0",
- "illuminate/filesystem": "^9.21|^10.0|^11.0|^12.0",
- "illuminate/support": "^9.21|^10.0|^11.0|^12.0",
- "illuminate/validation": "^9.21|^10.0|^11.0|^12.0",
+ "illuminate/console": "^9.21|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/filesystem": "^9.21|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^9.21|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/validation": "^9.21|^10.0|^11.0|^12.0|^13.0",
"php": "^8.0",
- "symfony/console": "^6.0|^7.0"
+ "symfony/console": "^6.0|^7.0|^8.0"
},
"require-dev": {
- "orchestra/testbench": "^7.35|^8.15|^9.0|^10.0",
- "phpunit/phpunit": "^9.3|^10.4|^11.5"
+ "orchestra/testbench": "^7.35|^8.15|^9.0|^10.0|^11.0",
+ "phpunit/phpunit": "^9.3|^10.4|^11.5|^12.5|^13.0"
},
"type": "library",
"extra": {
@@ -2571,30 +2510,30 @@
"ui"
],
"support": {
- "source": "https://github.com/laravel/ui/tree/v4.6.1"
+ "source": "https://github.com/laravel/ui/tree/v4.6.3"
},
- "time": "2025-01-28T15:15:29+00:00"
+ "time": "2026-03-17T13:41:52+00:00"
},
{
"name": "laraveldaily/laravel-invoices",
- "version": "4.1.1",
+ "version": "4.2.0",
"source": {
"type": "git",
"url": "https://github.com/LaravelDaily/laravel-invoices.git",
- "reference": "9ab45bdcfa06346f88d4849afa7514851c89bdac"
+ "reference": "67fd16b34c700a65a72669af20f6f479d8a52df1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/LaravelDaily/laravel-invoices/zipball/9ab45bdcfa06346f88d4849afa7514851c89bdac",
- "reference": "9ab45bdcfa06346f88d4849afa7514851c89bdac",
+ "url": "https://api.github.com/repos/LaravelDaily/laravel-invoices/zipball/67fd16b34c700a65a72669af20f6f479d8a52df1",
+ "reference": "67fd16b34c700a65a72669af20f6f479d8a52df1",
"shasum": ""
},
"require": {
"barryvdh/laravel-dompdf": "^v3.1.1",
- "illuminate/http": "^10|^11|^12",
- "illuminate/support": "^10|^11|^12",
+ "illuminate/http": "^10|^11|^12|^13.0",
+ "illuminate/support": "^10|^11|^12|^13.0",
"php": ">=8.2",
- "symfony/http-foundation": "^6|^7"
+ "symfony/http-foundation": "^6|^7|^8"
},
"require-dev": {
"phpunit/phpunit": "^10.1"
@@ -2637,22 +2576,22 @@
],
"support": {
"issues": "https://github.com/LaravelDaily/laravel-invoices/issues",
- "source": "https://github.com/LaravelDaily/laravel-invoices/tree/4.1.1"
+ "source": "https://github.com/LaravelDaily/laravel-invoices/tree/4.2.0"
},
- "time": "2026-01-07T08:23:34+00:00"
+ "time": "2026-03-19T13:35:29+00:00"
},
{
"name": "league/commonmark",
- "version": "2.8.0",
+ "version": "2.8.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb"
+ "reference": "59fb075d2101740c337c7216e3f32b36c204218b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
- "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b",
+ "reference": "59fb075d2101740c337c7216e3f32b36c204218b",
"shasum": ""
},
"require": {
@@ -2677,9 +2616,9 @@
"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/process": "^5.4 | ^6.0 | ^7.0",
- "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
+ "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0",
+ "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0",
"unleashedtech/php-coding-standard": "^3.1.1",
"vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
},
@@ -2746,7 +2685,7 @@
"type": "tidelift"
}
],
- "time": "2025-11-26T21:48:24+00:00"
+ "time": "2026-03-19T13:16:38+00:00"
},
{
"name": "league/config",
@@ -2832,16 +2771,16 @@
},
{
"name": "league/flysystem",
- "version": "3.31.0",
+ "version": "3.33.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff"
+ "reference": "570b8871e0ce693764434b29154c54b434905350"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1717e0b3642b0df65ecb0cc89cdd99fa840672ff",
- "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/570b8871e0ce693764434b29154c54b434905350",
+ "reference": "570b8871e0ce693764434b29154c54b434905350",
"shasum": ""
},
"require": {
@@ -2909,22 +2848,22 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.31.0"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.33.0"
},
- "time": "2026-01-23T15:38:47+00:00"
+ "time": "2026-03-25T07:59:30+00:00"
},
{
"name": "league/flysystem-aws-s3-v3",
- "version": "3.31.0",
+ "version": "3.32.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
- "reference": "e36a2bc60b06332c92e4435047797ded352b446f"
+ "reference": "a1979df7c9784d334ea6df356aed3d18ac6673d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/e36a2bc60b06332c92e4435047797ded352b446f",
- "reference": "e36a2bc60b06332c92e4435047797ded352b446f",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/a1979df7c9784d334ea6df356aed3d18ac6673d0",
+ "reference": "a1979df7c9784d334ea6df356aed3d18ac6673d0",
"shasum": ""
},
"require": {
@@ -2964,9 +2903,9 @@
"storage"
],
"support": {
- "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.31.0"
+ "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.32.0"
},
- "time": "2026-01-23T15:30:45+00:00"
+ "time": "2026-02-25T16:46:44+00:00"
},
{
"name": "league/flysystem-local",
@@ -3151,20 +3090,20 @@
},
{
"name": "league/uri",
- "version": "7.8.0",
+ "version": "7.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri.git",
- "reference": "4436c6ec8d458e4244448b069cc572d088230b76"
+ "reference": "08cf38e3924d4f56238125547b5720496fac8fd4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76",
- "reference": "4436c6ec8d458e4244448b069cc572d088230b76",
+ "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4",
+ "reference": "08cf38e3924d4f56238125547b5720496fac8fd4",
"shasum": ""
},
"require": {
- "league/uri-interfaces": "^7.8",
+ "league/uri-interfaces": "^7.8.1",
"php": "^8.1",
"psr/http-factory": "^1"
},
@@ -3237,7 +3176,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri/tree/7.8.0"
+ "source": "https://github.com/thephpleague/uri/tree/7.8.1"
},
"funding": [
{
@@ -3245,20 +3184,20 @@
"type": "github"
}
],
- "time": "2026-01-14T17:24:56+00:00"
+ "time": "2026-03-15T20:22:25+00:00"
},
{
"name": "league/uri-interfaces",
- "version": "7.8.0",
+ "version": "7.8.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-interfaces.git",
- "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4"
+ "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
- "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4",
+ "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928",
+ "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928",
"shasum": ""
},
"require": {
@@ -3321,7 +3260,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
- "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.0"
+ "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1"
},
"funding": [
{
@@ -3329,7 +3268,7 @@
"type": "github"
}
],
- "time": "2026-01-15T06:54:53+00:00"
+ "time": "2026-03-08T20:05:35+00:00"
},
{
"name": "masterminds/html5",
@@ -3569,16 +3508,16 @@
},
{
"name": "nesbot/carbon",
- "version": "3.11.1",
+ "version": "3.11.3",
"source": {
"type": "git",
"url": "https://github.com/CarbonPHP/carbon.git",
- "reference": "f438fcc98f92babee98381d399c65336f3a3827f"
+ "reference": "6a7e652845bb018c668220c2a545aded8594fbbf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/f438fcc98f92babee98381d399c65336f3a3827f",
- "reference": "f438fcc98f92babee98381d399c65336f3a3827f",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/6a7e652845bb018c668220c2a545aded8594fbbf",
+ "reference": "6a7e652845bb018c668220c2a545aded8594fbbf",
"shasum": ""
},
"require": {
@@ -3670,20 +3609,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-29T09:26:29+00:00"
+ "time": "2026-03-11T17:23:39+00:00"
},
{
"name": "nette/schema",
- "version": "v1.3.3",
+ "version": "v1.3.5",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
- "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004"
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004",
- "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004",
+ "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002",
+ "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002",
"shasum": ""
},
"require": {
@@ -3691,8 +3630,10 @@
"php": "8.1 - 8.5"
},
"require-dev": {
- "nette/tester": "^2.5.2",
- "phpstan/phpstan-nette": "^2.0@stable",
+ "nette/phpstan-rules": "^1.0",
+ "nette/tester": "^2.6",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1.39@stable",
"tracy/tracy": "^2.8"
},
"type": "library",
@@ -3733,22 +3674,22 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
- "source": "https://github.com/nette/schema/tree/v1.3.3"
+ "source": "https://github.com/nette/schema/tree/v1.3.5"
},
- "time": "2025-10-30T22:57:59+00:00"
+ "time": "2026-02-23T03:47:12+00:00"
},
{
"name": "nette/utils",
- "version": "v4.1.2",
+ "version": "v4.1.3",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5"
+ "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/f76b5dc3d6c6d3043c8d937df2698515b99cbaf5",
- "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5",
+ "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe",
+ "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe",
"shasum": ""
},
"require": {
@@ -3760,8 +3701,10 @@
},
"require-dev": {
"jetbrains/phpstorm-attributes": "^1.2",
+ "nette/phpstan-rules": "^1.0",
"nette/tester": "^2.5",
- "phpstan/phpstan": "^2.0@stable",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1@stable",
"tracy/tracy": "^2.9"
},
"suggest": {
@@ -3822,9 +3765,9 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.1.2"
+ "source": "https://github.com/nette/utils/tree/v4.1.3"
},
- "time": "2026-02-03T17:21:09+00:00"
+ "time": "2026-02-13T03:05:33+00:00"
},
{
"name": "nikic/php-parser",
@@ -3886,31 +3829,31 @@
},
{
"name": "nunomaduro/termwind",
- "version": "v2.3.3",
+ "version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/termwind.git",
- "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017"
+ "reference": "712a31b768f5daea284c2169a7d227031001b9a8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/6fb2a640ff502caace8e05fd7be3b503a7e1c017",
- "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017",
+ "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8",
+ "reference": "712a31b768f5daea284c2169a7d227031001b9a8",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": "^8.2",
- "symfony/console": "^7.3.6"
+ "symfony/console": "^7.4.4 || ^8.0.4"
},
"require-dev": {
- "illuminate/console": "^11.46.1",
- "laravel/pint": "^1.25.1",
+ "illuminate/console": "^11.47.0",
+ "laravel/pint": "^1.27.1",
"mockery/mockery": "^1.6.12",
- "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.1.3",
+ "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2",
"phpstan/phpstan": "^1.12.32",
"phpstan/phpstan-strict-rules": "^1.6.2",
- "symfony/var-dumper": "^7.3.5",
+ "symfony/var-dumper": "^7.3.5 || ^8.0.4",
"thecodingmachine/phpstan-strict-rules": "^1.0.0"
},
"type": "library",
@@ -3942,7 +3885,7 @@
"email": "enunomaduro@gmail.com"
}
],
- "description": "Its like Tailwind CSS, but for the console.",
+ "description": "It's like Tailwind CSS, but for the console.",
"keywords": [
"cli",
"console",
@@ -3953,7 +3896,7 @@
],
"support": {
"issues": "https://github.com/nunomaduro/termwind/issues",
- "source": "https://github.com/nunomaduro/termwind/tree/v2.3.3"
+ "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0"
},
"funding": [
{
@@ -3969,7 +3912,7 @@
"type": "github"
}
],
- "time": "2025-11-20T02:34:59+00:00"
+ "time": "2026-02-16T23:10:27+00:00"
},
{
"name": "paragonie/constant_time_encoding",
@@ -4090,103 +4033,6 @@
},
"time": "2020-10-15T08:29:30+00:00"
},
- {
- "name": "paypal/paypal-checkout-sdk",
- "version": "1.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/paypal/Checkout-PHP-SDK.git",
- "reference": "19992ce7051ff9e47e643f28abb8cc1b3e5f1812"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/paypal/Checkout-PHP-SDK/zipball/19992ce7051ff9e47e643f28abb8cc1b3e5f1812",
- "reference": "19992ce7051ff9e47e643f28abb8cc1b3e5f1812",
- "shasum": ""
- },
- "require": {
- "paypal/paypalhttp": "1.0.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^5.7"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Sample\\": "samples/",
- "PayPalCheckoutSdk\\": "lib/PayPalCheckoutSdk"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "https://github.com/paypal/Checkout-PHP-SDK/blob/master/LICENSE"
- ],
- "authors": [
- {
- "name": "PayPal",
- "homepage": "https://github.com/paypal/Checkout-PHP-SDK/contributors"
- }
- ],
- "description": "PayPal's PHP SDK for Checkout REST APIs",
- "homepage": "http://github.com/paypal/Checkout-PHP-SDK/",
- "keywords": [
- "checkout",
- "orders",
- "payments",
- "paypal",
- "rest",
- "sdk"
- ],
- "support": {
- "source": "https://github.com/paypal/Checkout-PHP-SDK/tree/1.0.2"
- },
- "abandoned": "paypal/paypal-server-sdk",
- "time": "2021-09-21T20:57:38+00:00"
- },
- {
- "name": "paypal/paypalhttp",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/paypal/paypalhttp_php.git",
- "reference": "7b09c89c80828e842c79230e7f156b61fbb68d25"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/paypal/paypalhttp_php/zipball/7b09c89c80828e842c79230e7f156b61fbb68d25",
- "reference": "7b09c89c80828e842c79230e7f156b61fbb68d25",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*"
- },
- "require-dev": {
- "phpunit/phpunit": "^5.7",
- "wiremock-php/wiremock-php": "1.43.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "PayPalHttp\\": "lib/PayPalHttp"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PayPal",
- "homepage": "https://github.com/paypal/paypalhttp_php/contributors"
- }
- ],
- "support": {
- "issues": "https://github.com/paypal/paypalhttp_php/issues",
- "source": "https://github.com/paypal/paypalhttp_php/tree/1.0.1"
- },
- "abandoned": true,
- "time": "2021-09-14T21:35:26+00:00"
- },
{
"name": "phpdocumentor/reflection-common",
"version": "2.2.0",
@@ -4242,38 +4088,38 @@
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.12.0",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195"
+ "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195",
- "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9",
+ "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1.0",
- "php": "^7.3 || ^8.0",
+ "php": "^7.4 || ^8.0",
"phpdocumentor/reflection-common": "^2.0",
- "phpstan/phpdoc-parser": "^1.18|^2.0"
+ "phpstan/phpdoc-parser": "^2.0"
},
"require-dev": {
"ext-tokenizer": "*",
"phpbench/phpbench": "^1.2",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^9.5",
- "rector/rector": "^0.13.9",
- "vimeo/psalm": "^4.25"
+ "psalm/phar": "^4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-1.x": "1.x-dev"
+ "dev-1.x": "1.x-dev",
+ "dev-2.x": "2.x-dev"
}
},
"autoload": {
@@ -4294,9 +4140,9 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.0.0"
},
- "time": "2025-11-21T15:09:14+00:00"
+ "time": "2026-01-06T21:53:42+00:00"
},
{
"name": "phpoption/phpoption",
@@ -4375,16 +4221,16 @@
},
{
"name": "phpseclib/phpseclib",
- "version": "3.0.49",
+ "version": "3.0.50",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "6233a1e12584754e6b5daa69fe1289b47775c1b9"
+ "reference": "aa6ad8321ed103dc3624fb600a25b66ebf78ec7b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/6233a1e12584754e6b5daa69fe1289b47775c1b9",
- "reference": "6233a1e12584754e6b5daa69fe1289b47775c1b9",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/aa6ad8321ed103dc3624fb600a25b66ebf78ec7b",
+ "reference": "aa6ad8321ed103dc3624fb600a25b66ebf78ec7b",
"shasum": ""
},
"require": {
@@ -4465,7 +4311,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
- "source": "https://github.com/phpseclib/phpseclib/tree/3.0.49"
+ "source": "https://github.com/phpseclib/phpseclib/tree/3.0.50"
},
"funding": [
{
@@ -4481,7 +4327,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-27T09:17:28+00:00"
+ "time": "2026-03-19T02:57:58+00:00"
},
{
"name": "phpstan/phpdoc-parser",
@@ -4532,27 +4378,26 @@
},
{
"name": "predis/predis",
- "version": "v3.3.0",
+ "version": "v2.4.1",
"source": {
"type": "git",
"url": "https://github.com/predis/predis.git",
- "reference": "153097374b39a2f737fe700ebcd725642526cdec"
+ "reference": "07105e050622ed80bd60808367ced9e379f31530"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/predis/predis/zipball/153097374b39a2f737fe700ebcd725642526cdec",
- "reference": "153097374b39a2f737fe700ebcd725642526cdec",
+ "url": "https://api.github.com/repos/predis/predis/zipball/07105e050622ed80bd60808367ced9e379f31530",
+ "reference": "07105e050622ed80bd60808367ced9e379f31530",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0",
- "psr/http-message": "^1.0|^2.0"
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.3",
"phpstan/phpstan": "^1.9",
"phpunit/phpcov": "^6.0 || ^8.0",
- "phpunit/phpunit": "^8.0 || ~9.4.4"
+ "phpunit/phpunit": "^8.0 || ^9.4"
},
"suggest": {
"ext-relay": "Faster connection with in-memory caching (>=0.6.2)"
@@ -4583,7 +4428,7 @@
],
"support": {
"issues": "https://github.com/predis/predis/issues",
- "source": "https://github.com/predis/predis/tree/v3.3.0"
+ "source": "https://github.com/predis/predis/tree/v2.4.1"
},
"funding": [
{
@@ -4591,7 +4436,7 @@
"type": "github"
}
],
- "time": "2025-11-24T17:48:50+00:00"
+ "time": "2025-11-12T18:00:11+00:00"
},
{
"name": "psr/cache",
@@ -5056,16 +4901,16 @@
},
{
"name": "psy/psysh",
- "version": "v0.12.19",
+ "version": "v0.12.22",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "a4f766e5c5b6773d8399711019bb7d90875a50ee"
+ "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a4f766e5c5b6773d8399711019bb7d90875a50ee",
- "reference": "a4f766e5c5b6773d8399711019bb7d90875a50ee",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3be75d5b9244936dd4ac62ade2bfb004d13acf0f",
+ "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f",
"shasum": ""
},
"require": {
@@ -5129,9 +4974,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.12.19"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.22"
},
- "time": "2026-01-30T17:33:13+00:00"
+ "time": "2026-03-22T23:03:24+00:00"
},
{
"name": "qirolab/laravel-themer",
@@ -5403,33 +5248,35 @@
},
{
"name": "sabberworm/php-css-parser",
- "version": "v9.1.0",
+ "version": "v9.3.0",
"source": {
"type": "git",
"url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
- "reference": "1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb"
+ "reference": "88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb",
- "reference": "1b363fdbdc6dd0ca0f4bf98d3a4d7f388133f1fb",
+ "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949",
+ "reference": "88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949",
"shasum": ""
},
"require": {
"ext-iconv": "*",
"php": "^7.2.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
- "thecodingmachine/safe": "^1.3 || ^2.5 || ^3.3"
+ "thecodingmachine/safe": "^1.3 || ^2.5 || ^3.4"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "1.4.0",
"phpstan/extension-installer": "1.4.3",
- "phpstan/phpstan": "1.12.28 || 2.1.25",
- "phpstan/phpstan-phpunit": "1.4.2 || 2.0.7",
- "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.6",
- "phpunit/phpunit": "8.5.46",
+ "phpstan/phpstan": "1.12.32 || 2.1.32",
+ "phpstan/phpstan-phpunit": "1.4.2 || 2.0.8",
+ "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.7",
+ "phpunit/phpunit": "8.5.52",
"rawr/phpunit-data-provider": "3.3.1",
- "rector/rector": "1.2.10 || 2.1.7",
- "rector/type-perfect": "1.0.0 || 2.1.0"
+ "rector/rector": "1.2.10 || 2.2.8",
+ "rector/type-perfect": "1.0.0 || 2.1.0",
+ "squizlabs/php_codesniffer": "4.0.1",
+ "thecodingmachine/phpstan-safe-rule": "1.2.0 || 1.4.1"
},
"suggest": {
"ext-mbstring": "for parsing UTF-8 CSS"
@@ -5437,10 +5284,14 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "9.2.x-dev"
+ "dev-main": "9.4.x-dev"
}
},
"autoload": {
+ "files": [
+ "src/Rule/Rule.php",
+ "src/RuleSet/RuleContainer.php"
+ ],
"psr-4": {
"Sabberworm\\CSS\\": "src/"
}
@@ -5471,9 +5322,9 @@
],
"support": {
"issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
- "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.1.0"
+ "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.3.0"
},
- "time": "2025-09-14T07:37:21+00:00"
+ "time": "2026-03-03T17:31:43+00:00"
},
{
"name": "socialiteproviders/discord",
@@ -5527,22 +5378,22 @@
},
{
"name": "socialiteproviders/manager",
- "version": "v4.8.1",
+ "version": "4.9.2",
"source": {
"type": "git",
"url": "https://github.com/SocialiteProviders/Manager.git",
- "reference": "8180ec14bef230ec2351cff993d5d2d7ca470ef4"
+ "reference": "35372dc62787e61e91cfec73f45fd5d5ae0f8891"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/8180ec14bef230ec2351cff993d5d2d7ca470ef4",
- "reference": "8180ec14bef230ec2351cff993d5d2d7ca470ef4",
+ "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/35372dc62787e61e91cfec73f45fd5d5ae0f8891",
+ "reference": "35372dc62787e61e91cfec73f45fd5d5ae0f8891",
"shasum": ""
},
"require": {
- "illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
+ "illuminate/support": "^11.0 || ^12.0 || ^13.0",
"laravel/socialite": "^5.5",
- "php": "^8.1"
+ "php": "^8.2"
},
"require-dev": {
"mockery/mockery": "^1.2",
@@ -5597,33 +5448,33 @@
"issues": "https://github.com/socialiteproviders/manager/issues",
"source": "https://github.com/socialiteproviders/manager"
},
- "time": "2025-02-24T19:33:30+00:00"
+ "time": "2026-03-18T22:13:24+00:00"
},
{
"name": "spatie/laravel-activitylog",
- "version": "4.11.0",
+ "version": "4.12.3",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-activitylog.git",
- "reference": "cd7c458f0e128e56eb2d71977d67a846ce4cc10f"
+ "reference": "2a2024fcac05628b0d1bfdbb1b94dda8b0661dc0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-activitylog/zipball/cd7c458f0e128e56eb2d71977d67a846ce4cc10f",
- "reference": "cd7c458f0e128e56eb2d71977d67a846ce4cc10f",
+ "url": "https://api.github.com/repos/spatie/laravel-activitylog/zipball/2a2024fcac05628b0d1bfdbb1b94dda8b0661dc0",
+ "reference": "2a2024fcac05628b0d1bfdbb1b94dda8b0661dc0",
"shasum": ""
},
"require": {
- "illuminate/config": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
- "illuminate/database": "^8.69 || ^9.27 || ^10.0 || ^11.0 || ^12.0",
- "illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0",
+ "illuminate/config": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0 || ^13.0",
+ "illuminate/database": "^8.69 || ^9.27 || ^10.0 || ^11.0 || ^12.0 || ^13.0",
+ "illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0 || ^12.0 || ^13.0",
"php": "^8.1",
"spatie/laravel-package-tools": "^1.6.3"
},
"require-dev": {
"ext-json": "*",
- "orchestra/testbench": "^6.23 || ^7.0 || ^8.0 || ^9.6 || ^10.0",
- "pestphp/pest": "^1.20 || ^2.0 || ^3.0"
+ "orchestra/testbench": "^6.23 || ^7.0 || ^8.0 || ^9.6 || ^10.0 || ^11.0",
+ "pestphp/pest": "^1.20 || ^2.0 || ^3.0 || ^4.0"
},
"type": "library",
"extra": {
@@ -5676,7 +5527,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-activitylog/issues",
- "source": "https://github.com/spatie/laravel-activitylog/tree/4.11.0"
+ "source": "https://github.com/spatie/laravel-activitylog/tree/4.12.3"
},
"funding": [
{
@@ -5688,33 +5539,33 @@
"type": "github"
}
],
- "time": "2026-01-31T12:25:02+00:00"
+ "time": "2026-03-24T12:33:53+00:00"
},
{
"name": "spatie/laravel-package-tools",
- "version": "1.92.7",
+ "version": "1.93.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-package-tools.git",
- "reference": "f09a799850b1ed765103a4f0b4355006360c49a5"
+ "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/f09a799850b1ed765103a4f0b4355006360c49a5",
- "reference": "f09a799850b1ed765103a4f0b4355006360c49a5",
+ "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/0d097bce95b2bf6802fb1d83e1e753b0f5a948e7",
+ "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7",
"shasum": ""
},
"require": {
- "illuminate/contracts": "^9.28|^10.0|^11.0|^12.0",
- "php": "^8.0"
+ "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0",
+ "php": "^8.1"
},
"require-dev": {
"mockery/mockery": "^1.5",
- "orchestra/testbench": "^7.7|^8.0|^9.0|^10.0",
- "pestphp/pest": "^1.23|^2.1|^3.1",
- "phpunit/php-code-coverage": "^9.0|^10.0|^11.0",
- "phpunit/phpunit": "^9.5.24|^10.5|^11.5",
- "spatie/pest-plugin-test-time": "^1.1|^2.2"
+ "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0",
+ "pestphp/pest": "^2.1|^3.1|^4.0",
+ "phpunit/php-code-coverage": "^10.0|^11.0|^12.0",
+ "phpunit/phpunit": "^10.5|^11.5|^12.5",
+ "spatie/pest-plugin-test-time": "^2.2|^3.0"
},
"type": "library",
"autoload": {
@@ -5741,7 +5592,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-package-tools/issues",
- "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.7"
+ "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.0"
},
"funding": [
{
@@ -5749,34 +5600,35 @@
"type": "github"
}
],
- "time": "2025-07-17T15:46:43+00:00"
+ "time": "2026-02-21T12:49:54+00:00"
},
{
"name": "spatie/laravel-permission",
- "version": "6.24.0",
+ "version": "6.25.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-permission.git",
- "reference": "76adb1fc8d07c16a0721c35c4cc330b7a12598d7"
+ "reference": "d7d4cb0d58616722f1afc90e0484e4825155b9b3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/76adb1fc8d07c16a0721c35c4cc330b7a12598d7",
- "reference": "76adb1fc8d07c16a0721c35c4cc330b7a12598d7",
+ "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/d7d4cb0d58616722f1afc90e0484e4825155b9b3",
+ "reference": "d7d4cb0d58616722f1afc90e0484e4825155b9b3",
"shasum": ""
},
"require": {
- "illuminate/auth": "^8.12|^9.0|^10.0|^11.0|^12.0",
- "illuminate/container": "^8.12|^9.0|^10.0|^11.0|^12.0",
- "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0|^12.0",
- "illuminate/database": "^8.12|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/auth": "^8.12|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/container": "^8.12|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/database": "^8.12|^9.0|^10.0|^11.0|^12.0|^13.0",
"php": "^8.0"
},
"require-dev": {
- "laravel/passport": "^11.0|^12.0",
+ "laravel/passport": "^11.0|^12.0|^13.0",
"laravel/pint": "^1.0",
- "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0",
- "phpunit/phpunit": "^9.4|^10.1|^11.5"
+ "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0|^10.0|^11.0",
+ "pestphp/pest": "^2.0|^3.0|^4.0",
+ "pestphp/pest-plugin-laravel": "^2.0|^3.0|^4.0"
},
"type": "library",
"extra": {
@@ -5824,7 +5676,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-permission/issues",
- "source": "https://github.com/spatie/laravel-permission/tree/6.24.0"
+ "source": "https://github.com/spatie/laravel-permission/tree/6.25.0"
},
"funding": [
{
@@ -5832,26 +5684,26 @@
"type": "github"
}
],
- "time": "2025-12-13T21:45:21+00:00"
+ "time": "2026-03-17T22:46:46+00:00"
},
{
"name": "spatie/laravel-query-builder",
- "version": "6.4.1",
+ "version": "6.4.4",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-query-builder.git",
- "reference": "9c7427c0dff87d7232beeecd2d33bf7d21952b43"
+ "reference": "ab9c4c369fc913d6c020a0f6776f3c82f3e523fb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-query-builder/zipball/9c7427c0dff87d7232beeecd2d33bf7d21952b43",
- "reference": "9c7427c0dff87d7232beeecd2d33bf7d21952b43",
+ "url": "https://api.github.com/repos/spatie/laravel-query-builder/zipball/ab9c4c369fc913d6c020a0f6776f3c82f3e523fb",
+ "reference": "ab9c4c369fc913d6c020a0f6776f3c82f3e523fb",
"shasum": ""
},
"require": {
- "illuminate/database": "^10.0|^11.0|^12.0",
- "illuminate/http": "^10.0|^11.0|^12.0",
- "illuminate/support": "^10.0|^11.0|^12.0",
+ "illuminate/database": "^10.0|^11.0|^12.0|^13.0",
+ "illuminate/http": "^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^10.0|^11.0|^12.0|^13.0",
"php": "^8.2",
"spatie/laravel-package-tools": "^1.11"
},
@@ -5859,7 +5711,7 @@
"ext-json": "*",
"larastan/larastan": "^2.7 || ^3.3",
"mockery/mockery": "^1.4",
- "orchestra/testbench": "^7.0|^8.0|^10.0",
+ "orchestra/testbench": "^7.0|^8.0|^10.0|^11.0",
"pestphp/pest": "^2.0|^3.7|^4.0",
"phpunit/phpunit": "^10.0|^11.5.3|^12.0",
"spatie/invade": "^2.0"
@@ -5906,35 +5758,35 @@
"type": "custom"
}
],
- "time": "2026-01-27T07:27:24+00:00"
+ "time": "2026-03-08T13:45:05+00:00"
},
{
"name": "spatie/laravel-settings",
- "version": "3.6.0",
+ "version": "3.7.2",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-settings.git",
- "reference": "fae93dadb8f748628ecaf5710f494adf790255b2"
+ "reference": "3e4e9ca8b16ef327839ed5486511b91186cdbbdb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-settings/zipball/fae93dadb8f748628ecaf5710f494adf790255b2",
- "reference": "fae93dadb8f748628ecaf5710f494adf790255b2",
+ "url": "https://api.github.com/repos/spatie/laravel-settings/zipball/3e4e9ca8b16ef327839ed5486511b91186cdbbdb",
+ "reference": "3e4e9ca8b16ef327839ed5486511b91186cdbbdb",
"shasum": ""
},
"require": {
"ext-json": "*",
- "illuminate/database": "^11.0|^12.0",
+ "illuminate/database": "^11.0|^12.0|^13.0",
"php": "^8.2",
- "phpdocumentor/type-resolver": "^1.5",
+ "phpdocumentor/type-resolver": "^1.5|^2.0",
"spatie/temporary-directory": "^1.3|^2.0"
},
"require-dev": {
"ext-redis": "*",
"mockery/mockery": "^1.4",
- "orchestra/testbench": "^9.0|^10.0",
- "pestphp/pest": "^2.0|^3.0",
- "pestphp/pest-plugin-laravel": "^2.0|^3.0",
+ "orchestra/testbench": "^9.0|^10.0|^11.0",
+ "pestphp/pest": "^2.0|^3.0|^4.0",
+ "pestphp/pest-plugin-laravel": "^2.0|^3.0|^4.0",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
@@ -5979,7 +5831,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-settings/issues",
- "source": "https://github.com/spatie/laravel-settings/tree/3.6.0"
+ "source": "https://github.com/spatie/laravel-settings/tree/3.7.2"
},
"funding": [
{
@@ -5991,7 +5843,7 @@
"type": "github"
}
],
- "time": "2025-12-03T10:29:27+00:00"
+ "time": "2026-03-17T09:11:43+00:00"
},
{
"name": "spatie/temporary-directory",
@@ -6194,16 +6046,16 @@
},
{
"name": "symfony/console",
- "version": "v7.4.4",
+ "version": "v7.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894"
+ "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894",
- "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894",
+ "url": "https://api.github.com/repos/symfony/console/zipball/e1e6770440fb9c9b0cf725f81d1361ad1835329d",
+ "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d",
"shasum": ""
},
"require": {
@@ -6268,7 +6120,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.4.4"
+ "source": "https://github.com/symfony/console/tree/v7.4.7"
},
"funding": [
{
@@ -6288,20 +6140,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-13T11:36:38+00:00"
+ "time": "2026-03-06T14:06:20+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v7.4.0",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135"
+ "reference": "2e7c52c647b406e2107dd867db424a4dbac91864"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab862f478513e7ca2fe9ec117a6f01a8da6e1135",
- "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/2e7c52c647b406e2107dd867db424a4dbac91864",
+ "reference": "2e7c52c647b406e2107dd867db424a4dbac91864",
"shasum": ""
},
"require": {
@@ -6337,7 +6189,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v7.4.0"
+ "source": "https://github.com/symfony/css-selector/tree/v7.4.6"
},
"funding": [
{
@@ -6357,7 +6209,7 @@
"type": "tidelift"
}
],
- "time": "2025-10-30T13:39:42+00:00"
+ "time": "2026-02-17T07:53:42+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -6671,16 +6523,16 @@
},
{
"name": "symfony/filesystem",
- "version": "v7.4.0",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "d551b38811096d0be9c4691d406991b47c0c630a"
+ "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a",
- "reference": "d551b38811096d0be9c4691d406991b47c0c630a",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/3ebc794fa5315e59fd122561623c2e2e4280538e",
+ "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e",
"shasum": ""
},
"require": {
@@ -6717,7 +6569,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v7.4.0"
+ "source": "https://github.com/symfony/filesystem/tree/v7.4.6"
},
"funding": [
{
@@ -6737,20 +6589,20 @@
"type": "tidelift"
}
],
- "time": "2025-11-27T13:27:24+00:00"
+ "time": "2026-02-25T16:50:00+00:00"
},
{
"name": "symfony/finder",
- "version": "v7.4.5",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb"
+ "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
- "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf",
+ "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf",
"shasum": ""
},
"require": {
@@ -6785,7 +6637,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v7.4.5"
+ "source": "https://github.com/symfony/finder/tree/v7.4.6"
},
"funding": [
{
@@ -6805,20 +6657,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-26T15:07:59+00:00"
+ "time": "2026-01-29T09:40:50+00:00"
},
{
"name": "symfony/http-client",
- "version": "v7.4.5",
+ "version": "v7.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "84bb634857a893cc146cceb467e31b3f02c5fe9f"
+ "reference": "1010624285470eb60e88ed10035102c75b4ea6af"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/84bb634857a893cc146cceb467e31b3f02c5fe9f",
- "reference": "84bb634857a893cc146cceb467e31b3f02c5fe9f",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/1010624285470eb60e88ed10035102c75b4ea6af",
+ "reference": "1010624285470eb60e88ed10035102c75b4ea6af",
"shasum": ""
},
"require": {
@@ -6886,7 +6738,7 @@
"http"
],
"support": {
- "source": "https://github.com/symfony/http-client/tree/v7.4.5"
+ "source": "https://github.com/symfony/http-client/tree/v7.4.7"
},
"funding": [
{
@@ -6906,7 +6758,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-27T16:16:02+00:00"
+ "time": "2026-03-05T11:16:58+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -6988,16 +6840,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v7.4.5",
+ "version": "v7.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "446d0db2b1f21575f1284b74533e425096abdfb6"
+ "reference": "f94b3e7b7dafd40e666f0c9ff2084133bae41e81"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/446d0db2b1f21575f1284b74533e425096abdfb6",
- "reference": "446d0db2b1f21575f1284b74533e425096abdfb6",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f94b3e7b7dafd40e666f0c9ff2084133bae41e81",
+ "reference": "f94b3e7b7dafd40e666f0c9ff2084133bae41e81",
"shasum": ""
},
"require": {
@@ -7046,7 +6898,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v7.4.5"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.4.7"
},
"funding": [
{
@@ -7066,20 +6918,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-27T16:16:02+00:00"
+ "time": "2026-03-06T13:15:18+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.4.5",
+ "version": "v7.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "229eda477017f92bd2ce7615d06222ec0c19e82a"
+ "reference": "3b3fcf386c809be990c922e10e4c620d6367cab1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/229eda477017f92bd2ce7615d06222ec0c19e82a",
- "reference": "229eda477017f92bd2ce7615d06222ec0c19e82a",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3b3fcf386c809be990c922e10e4c620d6367cab1",
+ "reference": "3b3fcf386c809be990c922e10e4c620d6367cab1",
"shasum": ""
},
"require": {
@@ -7121,7 +6973,7 @@
"symfony/config": "^6.4|^7.0|^8.0",
"symfony/console": "^6.4|^7.0|^8.0",
"symfony/css-selector": "^6.4|^7.0|^8.0",
- "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0",
"symfony/dom-crawler": "^6.4|^7.0|^8.0",
"symfony/expression-language": "^6.4|^7.0|^8.0",
"symfony/finder": "^6.4|^7.0|^8.0",
@@ -7165,7 +7017,7 @@
"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/v7.4.5"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.4.7"
},
"funding": [
{
@@ -7185,20 +7037,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-28T10:33:42+00:00"
+ "time": "2026-03-06T16:33:18+00:00"
},
{
"name": "symfony/intl",
- "version": "v7.4.4",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
- "reference": "7fa2d46174166bcd7829abc8717949f8a0b21fb7"
+ "reference": "6d6a398b18f73b3110140dbb030dcee2ae4ea81f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/intl/zipball/7fa2d46174166bcd7829abc8717949f8a0b21fb7",
- "reference": "7fa2d46174166bcd7829abc8717949f8a0b21fb7",
+ "url": "https://api.github.com/repos/symfony/intl/zipball/6d6a398b18f73b3110140dbb030dcee2ae4ea81f",
+ "reference": "6d6a398b18f73b3110140dbb030dcee2ae4ea81f",
"shasum": ""
},
"require": {
@@ -7255,7 +7107,7 @@
"localization"
],
"support": {
- "source": "https://github.com/symfony/intl/tree/v7.4.4"
+ "source": "https://github.com/symfony/intl/tree/v7.4.6"
},
"funding": [
{
@@ -7275,20 +7127,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-12T12:19:02+00:00"
+ "time": "2026-02-09T09:33:46+00:00"
},
{
"name": "symfony/mailer",
- "version": "v7.4.4",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6"
+ "reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/7b750074c40c694ceb34cb926d6dffee231c5cd6",
- "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/b02726f39a20bc65e30364f5c750c4ddbf1f58e9",
+ "reference": "b02726f39a20bc65e30364f5c750c4ddbf1f58e9",
"shasum": ""
},
"require": {
@@ -7339,7 +7191,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v7.4.4"
+ "source": "https://github.com/symfony/mailer/tree/v7.4.6"
},
"funding": [
{
@@ -7359,7 +7211,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-08T08:25:11+00:00"
+ "time": "2026-02-25T16:50:00+00:00"
},
{
"name": "symfony/mailgun-mailer",
@@ -7436,16 +7288,16 @@
},
{
"name": "symfony/mime",
- "version": "v7.4.5",
+ "version": "v7.4.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148"
+ "reference": "da5ab4fde3f6c88ab06e96185b9922f48b677cd1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/b18c7e6e9eee1e19958138df10412f3c4c316148",
- "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/da5ab4fde3f6c88ab06e96185b9922f48b677cd1",
+ "reference": "da5ab4fde3f6c88ab06e96185b9922f48b677cd1",
"shasum": ""
},
"require": {
@@ -7456,7 +7308,7 @@
},
"conflict": {
"egulias/email-validator": "~3.0.0",
- "phpdocumentor/reflection-docblock": "<5.2|>=6",
+ "phpdocumentor/reflection-docblock": "<5.2|>=7",
"phpdocumentor/type-resolver": "<1.5.1",
"symfony/mailer": "<6.4",
"symfony/serializer": "<6.4.3|>7.0,<7.0.3"
@@ -7464,7 +7316,7 @@
"require-dev": {
"egulias/email-validator": "^2.1.10|^3.1|^4",
"league/html-to-markdown": "^5.0",
- "phpdocumentor/reflection-docblock": "^5.2",
+ "phpdocumentor/reflection-docblock": "^5.2|^6.0",
"symfony/dependency-injection": "^6.4|^7.0|^8.0",
"symfony/process": "^6.4|^7.0|^8.0",
"symfony/property-access": "^6.4|^7.0|^8.0",
@@ -7501,7 +7353,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v7.4.5"
+ "source": "https://github.com/symfony/mime/tree/v7.4.7"
},
"funding": [
{
@@ -7521,7 +7373,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-27T08:59:58+00:00"
+ "time": "2026-03-05T15:24:09+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -8339,16 +8191,16 @@
},
{
"name": "symfony/routing",
- "version": "v7.4.4",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "0798827fe2c79caeed41d70b680c2c3507d10147"
+ "reference": "238d749c56b804b31a9bf3e26519d93b65a60938"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/0798827fe2c79caeed41d70b680c2c3507d10147",
- "reference": "0798827fe2c79caeed41d70b680c2c3507d10147",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/238d749c56b804b31a9bf3e26519d93b65a60938",
+ "reference": "238d749c56b804b31a9bf3e26519d93b65a60938",
"shasum": ""
},
"require": {
@@ -8400,7 +8252,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v7.4.4"
+ "source": "https://github.com/symfony/routing/tree/v7.4.6"
},
"funding": [
{
@@ -8420,7 +8272,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-12T12:19:02+00:00"
+ "time": "2026-02-25T16:50:00+00:00"
},
{
"name": "symfony/service-contracts",
@@ -8511,16 +8363,16 @@
},
{
"name": "symfony/string",
- "version": "v7.4.4",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f"
+ "reference": "9f209231affa85aa930a5e46e6eb03381424b30b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f",
- "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f",
+ "url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b",
+ "reference": "9f209231affa85aa930a5e46e6eb03381424b30b",
"shasum": ""
},
"require": {
@@ -8578,7 +8430,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.4.4"
+ "source": "https://github.com/symfony/string/tree/v7.4.6"
},
"funding": [
{
@@ -8598,20 +8450,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-12T10:54:30+00:00"
+ "time": "2026-02-09T09:33:46+00:00"
},
{
"name": "symfony/translation",
- "version": "v7.4.4",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "bfde13711f53f549e73b06d27b35a55207528877"
+ "reference": "1888cf064399868af3784b9e043240f1d89d25ce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/bfde13711f53f549e73b06d27b35a55207528877",
- "reference": "bfde13711f53f549e73b06d27b35a55207528877",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/1888cf064399868af3784b9e043240f1d89d25ce",
+ "reference": "1888cf064399868af3784b9e043240f1d89d25ce",
"shasum": ""
},
"require": {
@@ -8678,7 +8530,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v7.4.4"
+ "source": "https://github.com/symfony/translation/tree/v7.4.6"
},
"funding": [
{
@@ -8698,7 +8550,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-13T10:40:19+00:00"
+ "time": "2026-02-17T07:53:42+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -8862,16 +8714,16 @@
},
{
"name": "symfony/var-dumper",
- "version": "v7.4.4",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "0e4769b46a0c3c62390d124635ce59f66874b282"
+ "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e4769b46a0c3c62390d124635ce59f66874b282",
- "reference": "0e4769b46a0c3c62390d124635ce59f66874b282",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/045321c440ac18347b136c63d2e9bf28a2dc0291",
+ "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291",
"shasum": ""
},
"require": {
@@ -8925,7 +8777,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v7.4.4"
+ "source": "https://github.com/symfony/var-dumper/tree/v7.4.6"
},
"funding": [
{
@@ -8945,20 +8797,20 @@
"type": "tidelift"
}
],
- "time": "2026-01-01T22:13:48+00:00"
+ "time": "2026-02-15T10:53:20+00:00"
},
{
"name": "thecodingmachine/safe",
- "version": "v3.3.0",
+ "version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/thecodingmachine/safe.git",
- "reference": "2cdd579eeaa2e78e51c7509b50cc9fb89a956236"
+ "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/2cdd579eeaa2e78e51c7509b50cc9fb89a956236",
- "reference": "2cdd579eeaa2e78e51c7509b50cc9fb89a956236",
+ "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/705683a25bacf0d4860c7dea4d7947bfd09eea19",
+ "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19",
"shasum": ""
},
"require": {
@@ -9068,7 +8920,7 @@
"description": "PHP core functions that throw exceptions instead of returning FALSE on error",
"support": {
"issues": "https://github.com/thecodingmachine/safe/issues",
- "source": "https://github.com/thecodingmachine/safe/tree/v3.3.0"
+ "source": "https://github.com/thecodingmachine/safe/tree/v3.4.0"
},
"funding": [
{
@@ -9079,12 +8931,16 @@
"url": "https://github.com/shish",
"type": "github"
},
+ {
+ "url": "https://github.com/silasjoisten",
+ "type": "github"
+ },
{
"url": "https://github.com/staabm",
"type": "github"
}
],
- "time": "2025-05-14T06:15:44+00:00"
+ "time": "2026-02-04T18:08:13+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -9662,28 +9518,28 @@
},
{
"name": "laravel/sail",
- "version": "v1.52.0",
+ "version": "v1.55.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
- "reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3"
+ "reference": "67dc1b72da4e066a2fb54c1c7582fd2f140ea191"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sail/zipball/64ac7d8abb2dbcf2b76e61289451bae79066b0b3",
- "reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/67dc1b72da4e066a2fb54c1c7582fd2f140ea191",
+ "reference": "67dc1b72da4e066a2fb54c1c7582fd2f140ea191",
"shasum": ""
},
"require": {
- "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0",
- "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0",
- "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0",
+ "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
"php": "^8.0",
- "symfony/console": "^6.0|^7.0",
- "symfony/yaml": "^6.0|^7.0"
+ "symfony/console": "^6.0|^7.0|^8.0",
+ "symfony/yaml": "^6.0|^7.0|^8.0"
},
"require-dev": {
- "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0",
+ "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0|^11.0",
"phpstan/phpstan": "^2.0"
},
"bin": [
@@ -9721,7 +9577,7 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
- "time": "2026-01-01T02:46:03+00:00"
+ "time": "2026-03-23T15:56:34+00:00"
},
{
"name": "mockery/mockery",
@@ -9868,39 +9724,36 @@
},
{
"name": "nunomaduro/collision",
- "version": "v8.8.3",
+ "version": "v8.9.1",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4"
+ "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/1dc9e88d105699d0fee8bb18890f41b274f6b4c4",
- "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/a1ed3fa530fd60bc515f9303e8520fcb7d4bd935",
+ "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935",
"shasum": ""
},
"require": {
- "filp/whoops": "^2.18.1",
- "nunomaduro/termwind": "^2.3.1",
+ "filp/whoops": "^2.18.4",
+ "nunomaduro/termwind": "^2.4.0",
"php": "^8.2.0",
- "symfony/console": "^7.3.0"
+ "symfony/console": "^7.4.4 || ^8.0.4"
},
"conflict": {
- "laravel/framework": "<11.44.2 || >=13.0.0",
- "phpunit/phpunit": "<11.5.15 || >=13.0.0"
+ "laravel/framework": "<11.48.0 || >=14.0.0",
+ "phpunit/phpunit": "<11.5.50 || >=14.0.0"
},
"require-dev": {
- "brianium/paratest": "^7.8.3",
- "larastan/larastan": "^3.4.2",
- "laravel/framework": "^11.44.2 || ^12.18",
- "laravel/pint": "^1.22.1",
- "laravel/sail": "^1.43.1",
- "laravel/sanctum": "^4.1.1",
- "laravel/tinker": "^2.10.1",
- "orchestra/testbench-core": "^9.12.0 || ^10.4",
- "pestphp/pest": "^3.8.2 || ^4.0.0",
- "sebastian/environment": "^7.2.1 || ^8.0"
+ "brianium/paratest": "^7.8.5",
+ "larastan/larastan": "^3.9.2",
+ "laravel/framework": "^11.48.0 || ^12.52.0",
+ "laravel/pint": "^1.27.1",
+ "orchestra/testbench-core": "^9.12.0 || ^10.9.0",
+ "pestphp/pest": "^3.8.5 || ^4.4.1 || ^5.0.0",
+ "sebastian/environment": "^7.2.1 || ^8.0.3 || ^9.0.0"
},
"type": "library",
"extra": {
@@ -9963,7 +9816,7 @@
"type": "patreon"
}
],
- "time": "2025-11-20T02:55:25+00:00"
+ "time": "2026-02-17T17:33:08+00:00"
},
{
"name": "phar-io/manifest",
@@ -10506,16 +10359,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "11.5.50",
+ "version": "11.5.55",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "fdfc727f0fcacfeb8fcb30c7e5da173125b58be3"
+ "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fdfc727f0fcacfeb8fcb30c7e5da173125b58be3",
- "reference": "fdfc727f0fcacfeb8fcb30c7e5da173125b58be3",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00",
+ "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00",
"shasum": ""
},
"require": {
@@ -10530,7 +10383,7 @@
"phar-io/version": "^3.2.1",
"php": ">=8.2",
"phpunit/php-code-coverage": "^11.0.12",
- "phpunit/php-file-iterator": "^5.1.0",
+ "phpunit/php-file-iterator": "^5.1.1",
"phpunit/php-invoker": "^5.0.1",
"phpunit/php-text-template": "^4.0.1",
"phpunit/php-timer": "^7.0.1",
@@ -10542,6 +10395,7 @@
"sebastian/exporter": "^6.3.2",
"sebastian/global-state": "^7.0.2",
"sebastian/object-enumerator": "^6.0.1",
+ "sebastian/recursion-context": "^6.0.3",
"sebastian/type": "^5.1.3",
"sebastian/version": "^5.0.2",
"staabm/side-effects-detector": "^1.0.5"
@@ -10587,7 +10441,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.50"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55"
},
"funding": [
{
@@ -10611,7 +10465,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-27T05:59:18+00:00"
+ "time": "2026-02-18T12:37:06+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -11601,16 +11455,16 @@
},
{
"name": "spatie/backtrace",
- "version": "1.8.1",
+ "version": "1.8.2",
"source": {
"type": "git",
"url": "https://github.com/spatie/backtrace.git",
- "reference": "8c0f16a59ae35ec8c62d85c3c17585158f430110"
+ "reference": "8ffe78be5ed355b5009e3dd989d183433e9a5adc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/backtrace/zipball/8c0f16a59ae35ec8c62d85c3c17585158f430110",
- "reference": "8c0f16a59ae35ec8c62d85c3c17585158f430110",
+ "url": "https://api.github.com/repos/spatie/backtrace/zipball/8ffe78be5ed355b5009e3dd989d183433e9a5adc",
+ "reference": "8ffe78be5ed355b5009e3dd989d183433e9a5adc",
"shasum": ""
},
"require": {
@@ -11621,7 +11475,7 @@
"laravel/serializable-closure": "^1.3 || ^2.0",
"phpunit/phpunit": "^9.3 || ^11.4.3",
"spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6",
- "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0"
+ "symfony/var-dumper": "^5.1|^6.0|^7.0|^8.0"
},
"type": "library",
"autoload": {
@@ -11649,7 +11503,7 @@
],
"support": {
"issues": "https://github.com/spatie/backtrace/issues",
- "source": "https://github.com/spatie/backtrace/tree/1.8.1"
+ "source": "https://github.com/spatie/backtrace/tree/1.8.2"
},
"funding": [
{
@@ -11661,7 +11515,7 @@
"type": "other"
}
],
- "time": "2025-08-26T08:22:30+00:00"
+ "time": "2026-03-11T13:48:28+00:00"
},
{
"name": "spatie/error-solutions",
@@ -11739,26 +11593,26 @@
},
{
"name": "spatie/flare-client-php",
- "version": "1.10.1",
+ "version": "1.11.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/flare-client-php.git",
- "reference": "bf1716eb98bd689451b071548ae9e70738dce62f"
+ "reference": "fb3ffb946675dba811fbde9122224db2f84daca9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f",
- "reference": "bf1716eb98bd689451b071548ae9e70738dce62f",
+ "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/fb3ffb946675dba811fbde9122224db2f84daca9",
+ "reference": "fb3ffb946675dba811fbde9122224db2f84daca9",
"shasum": ""
},
"require": {
- "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0",
+ "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0",
"php": "^8.0",
"spatie/backtrace": "^1.6.1",
- "symfony/http-foundation": "^5.2|^6.0|^7.0",
- "symfony/mime": "^5.2|^6.0|^7.0",
- "symfony/process": "^5.2|^6.0|^7.0",
- "symfony/var-dumper": "^5.2|^6.0|^7.0"
+ "symfony/http-foundation": "^5.2|^6.0|^7.0|^8.0",
+ "symfony/mime": "^5.2|^6.0|^7.0|^8.0",
+ "symfony/process": "^5.2|^6.0|^7.0|^8.0",
+ "symfony/var-dumper": "^5.2|^6.0|^7.0|^8.0"
},
"require-dev": {
"dms/phpunit-arraysubset-asserts": "^0.5.0",
@@ -11796,7 +11650,7 @@
],
"support": {
"issues": "https://github.com/spatie/flare-client-php/issues",
- "source": "https://github.com/spatie/flare-client-php/tree/1.10.1"
+ "source": "https://github.com/spatie/flare-client-php/tree/1.11.0"
},
"funding": [
{
@@ -11804,41 +11658,44 @@
"type": "github"
}
],
- "time": "2025-02-14T13:42:06+00:00"
+ "time": "2026-03-17T08:06:16+00:00"
},
{
"name": "spatie/ignition",
- "version": "1.15.1",
+ "version": "1.16.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/ignition.git",
- "reference": "31f314153020aee5af3537e507fef892ffbf8c85"
+ "reference": "b59385bb7aa24dae81bcc15850ebecfda7b40838"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85",
- "reference": "31f314153020aee5af3537e507fef892ffbf8c85",
+ "url": "https://api.github.com/repos/spatie/ignition/zipball/b59385bb7aa24dae81bcc15850ebecfda7b40838",
+ "reference": "b59385bb7aa24dae81bcc15850ebecfda7b40838",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-mbstring": "*",
"php": "^8.0",
- "spatie/error-solutions": "^1.0",
- "spatie/flare-client-php": "^1.7",
- "symfony/console": "^5.4|^6.0|^7.0",
- "symfony/var-dumper": "^5.4|^6.0|^7.0"
+ "spatie/backtrace": "^1.7.1",
+ "spatie/error-solutions": "^1.1.2",
+ "spatie/flare-client-php": "^1.9",
+ "symfony/console": "^5.4.42|^6.0|^7.0|^8.0",
+ "symfony/http-foundation": "^5.4.42|^6.0|^7.0|^8.0",
+ "symfony/mime": "^5.4.42|^6.0|^7.0|^8.0",
+ "symfony/var-dumper": "^5.4.42|^6.0|^7.0|^8.0"
},
"require-dev": {
- "illuminate/cache": "^9.52|^10.0|^11.0|^12.0",
+ "illuminate/cache": "^9.52|^10.0|^11.0|^12.0|^13.0",
"mockery/mockery": "^1.4",
- "pestphp/pest": "^1.20|^2.0",
+ "pestphp/pest": "^1.20|^2.0|^3.0",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
"psr/simple-cache-implementation": "*",
- "symfony/cache": "^5.4|^6.0|^7.0",
- "symfony/process": "^5.4|^6.0|^7.0",
+ "symfony/cache": "^5.4.38|^6.0|^7.0|^8.0",
+ "symfony/process": "^5.4.35|^6.0|^7.0|^8.0",
"vlucas/phpdotenv": "^5.5"
},
"suggest": {
@@ -11887,38 +11744,38 @@
"type": "github"
}
],
- "time": "2025-02-21T14:31:39+00:00"
+ "time": "2026-03-17T10:51:08+00:00"
},
{
"name": "spatie/laravel-ignition",
- "version": "2.10.0",
+ "version": "2.12.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
- "reference": "2abefdcca6074a9155f90b4ccb3345af8889d5f5"
+ "reference": "45b3b6e1e73fc161cba2149972698644b99594ee"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/2abefdcca6074a9155f90b4ccb3345af8889d5f5",
- "reference": "2abefdcca6074a9155f90b4ccb3345af8889d5f5",
+ "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/45b3b6e1e73fc161cba2149972698644b99594ee",
+ "reference": "45b3b6e1e73fc161cba2149972698644b99594ee",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
- "illuminate/support": "^11.0|^12.0",
+ "illuminate/support": "^11.0|^12.0|^13.0",
"nesbot/carbon": "^2.72|^3.0",
"php": "^8.2",
- "spatie/ignition": "^1.15.1",
+ "spatie/ignition": "^1.16",
"symfony/console": "^7.4|^8.0",
"symfony/var-dumper": "^7.4|^8.0"
},
"require-dev": {
- "livewire/livewire": "^3.7.0|^4.0",
+ "livewire/livewire": "^3.7.0|^4.0|dev-josh/v3-laravel-13-support",
"mockery/mockery": "^1.6.12",
- "openai-php/client": "^0.10.3",
- "orchestra/testbench": "^v9.16.0|^10.6",
+ "openai-php/client": "^0.10.3|^0.19",
+ "orchestra/testbench": "^v9.16.0|^10.6|^11.0",
"pestphp/pest": "^3.7|^4.0",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-deprecation-rules": "^2.0.3",
@@ -11979,7 +11836,7 @@
"type": "github"
}
],
- "time": "2026-01-20T13:16:11+00:00"
+ "time": "2026-03-17T12:20:04+00:00"
},
{
"name": "staabm/side-effects-detector",
@@ -12035,16 +11892,16 @@
},
{
"name": "symfony/yaml",
- "version": "v7.4.1",
+ "version": "v7.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "24dd4de28d2e3988b311751ac49e684d783e2345"
+ "reference": "58751048de17bae71c5aa0d13cb19d79bca26391"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/24dd4de28d2e3988b311751ac49e684d783e2345",
- "reference": "24dd4de28d2e3988b311751ac49e684d783e2345",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/58751048de17bae71c5aa0d13cb19d79bca26391",
+ "reference": "58751048de17bae71c5aa0d13cb19d79bca26391",
"shasum": ""
},
"require": {
@@ -12087,7 +11944,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v7.4.1"
+ "source": "https://github.com/symfony/yaml/tree/v7.4.6"
},
"funding": [
{
@@ -12107,7 +11964,7 @@
"type": "tidelift"
}
],
- "time": "2025-12-04T18:11:45+00:00"
+ "time": "2026-02-09T09:33:46+00:00"
},
{
"name": "theseer/tokenizer",
diff --git a/config/app.php b/config/app.php
index e2f14a9eb..ac49435a4 100644
--- a/config/app.php
+++ b/config/app.php
@@ -212,7 +212,6 @@
App\Providers\RouteServiceProvider::class,
Yajra\DataTables\DataTablesServiceProvider::class,
KKomelin\TranslatableStringExporter\Providers\ExporterServiceProvider::class,
- Biscolab\ReCaptcha\ReCaptchaServiceProvider::class,
App\Providers\SettingsServiceProvider::class,
App\Providers\ExtensionServiceProvider::class,
App\Providers\CurrencyServiceProvider::class,
diff --git a/config/cors.php b/config/cors.php
index 8a39e6daa..4e6bace82 100644
--- a/config/cors.php
+++ b/config/cors.php
@@ -1,5 +1,10 @@
['*'],
- 'allowed_origins' => ['*'],
+ 'allowed_origins' => $allowedOrigins,
'allowed_origins_patterns' => [],
- 'allowed_headers' => ['*'],
+ 'allowed_headers' => ['Content-Type', 'X-Requested-With', 'Authorization', 'Accept', 'Origin'],
'exposed_headers' => [],
diff --git a/config/recaptcha.php b/config/recaptcha.php
index 1d29fbf67..1cb22b703 100644
--- a/config/recaptcha.php
+++ b/config/recaptcha.php
@@ -1,16 +1,5 @@
env('AWS_DEFAULT_REGION', 'us-east-1'),
],
+ 'discord' => [
+ 'client_id' => env('DISCORD_CLIENT_ID'),
+ 'client_secret' => env('DISCORD_CLIENT_SECRET'),
+ 'redirect' => env('DISCORD_REDIRECT_URI', rtrim(env('APP_URL', 'http://localhost'), '/').'/auth/discord/callback'),
+ ],
+
];
diff --git a/config/session.php b/config/session.php
index 8fed97c01..ca9d74179 100644
--- a/config/session.php
+++ b/config/session.php
@@ -168,7 +168,7 @@
|
*/
- 'secure' => env('SESSION_SECURE_COOKIE'),
+ 'secure' => env('SESSION_SECURE_COOKIE', env('APP_ENV') !== 'local'),
/*
|--------------------------------------------------------------------------
diff --git a/database/factories/ApplicationApiFactory.php b/database/factories/ApplicationApiFactory.php
index c85149ae6..693dc6238 100644
--- a/database/factories/ApplicationApiFactory.php
+++ b/database/factories/ApplicationApiFactory.php
@@ -2,10 +2,13 @@
namespace Database\Factories;
+use App\Models\ApplicationApi;
use Illuminate\Database\Eloquent\Factories\Factory;
class ApplicationApiFactory extends Factory
{
+ protected $model = ApplicationApi::class;
+
/**
* Define the model's default state.
*
@@ -13,8 +16,18 @@ class ApplicationApiFactory extends Factory
*/
public function definition()
{
+ $secret = fake()->bothify(str_repeat('?', 48));
+
return [
+ 'id' => fake()->bothify(str_repeat('?', 12)),
'memo' => $this->faker->word(),
+ 'token_hash' => hash('sha256', $secret),
+ 'token_hint' => substr($secret, -4),
+ 'abilities' => ApplicationApi::availableAbilities(),
+ 'owner_user_id' => null,
+ 'last_used' => null,
+ 'expires_at' => null,
+ 'revoked_at' => null,
];
}
}
diff --git a/database/factories/PaymentFactory.php b/database/factories/PaymentFactory.php
index 5a6312a2a..d6dcb3dfd 100644
--- a/database/factories/PaymentFactory.php
+++ b/database/factories/PaymentFactory.php
@@ -17,14 +17,17 @@ public function definition()
{
return [
'payment_id' => Str::random(30),
- 'payer_id' => Str::random(30),
'user_id' => User::factory(),
+ 'payment_method' => 'Stripe',
'type' => 'Credits',
- 'status' => 'Completed',
+ 'status' => \App\Enums\PaymentStatus::PAID->value,
'amount' => $this->faker->numberBetween(10, 10000),
- 'price' => $this->faker->numerify('##.##'),
+ 'price' => $this->faker->numberBetween(100, 10000),
+ 'tax_value' => 0,
+ 'tax_percent' => 0,
+ 'total_price' => $this->faker->numberBetween(100, 10000),
'currency_code' => ['EUR', 'USD'][rand(0, 1)],
- 'payer' => '{}',
+ 'shop_item_product_id' => null,
];
}
}
diff --git a/database/migrations/2026_03_22_000001_create_application_api_tokens_table.php b/database/migrations/2026_03_22_000001_create_application_api_tokens_table.php
new file mode 100644
index 000000000..6b636c41b
--- /dev/null
+++ b/database/migrations/2026_03_22_000001_create_application_api_tokens_table.php
@@ -0,0 +1,29 @@
+string('id')->primary();
+ $table->foreignId('owner_user_id')->nullable()->constrained('users')->nullOnDelete();
+ $table->string('memo')->nullable();
+ $table->string('token_hash', 64);
+ $table->string('token_hint', 8)->nullable();
+ $table->json('abilities');
+ $table->timestamp('last_used')->nullable();
+ $table->timestamp('expires_at')->nullable();
+ $table->timestamp('revoked_at')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down(): void
+ {
+ Schema::dropIfExists('application_api_tokens');
+ }
+};
diff --git a/database/migrations/2026_03_22_000002_encrypt_existing_secret_settings.php b/database/migrations/2026_03_22_000002_encrypt_existing_secret_settings.php
new file mode 100644
index 000000000..3a1234425
--- /dev/null
+++ b/database/migrations/2026_03_22_000002_encrypt_existing_secret_settings.php
@@ -0,0 +1,91 @@
+encryptedSettings() as [$group, $name]) {
+ DB::table('settings')
+ ->where('group', $group)
+ ->where('name', $name)
+ ->get(['id', 'payload'])
+ ->each(function (object $setting): void {
+ $value = json_decode($setting->payload, true);
+
+ if (! is_string($value)) {
+ return;
+ }
+
+ if ($value === '') {
+ DB::table('settings')
+ ->where('id', $setting->id)
+ ->update(['payload' => json_encode(null)]);
+
+ return;
+ }
+
+ if ($this->isEncrypted($value)) {
+ return;
+ }
+
+ DB::table('settings')
+ ->where('id', $setting->id)
+ ->update(['payload' => json_encode(Crypt::encrypt($value))]);
+ });
+ }
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ foreach ($this->encryptedSettings() as [$group, $name]) {
+ DB::table('settings')
+ ->where('group', $group)
+ ->where('name', $name)
+ ->get(['id', 'payload'])
+ ->each(function (object $setting): void {
+ $value = json_decode($setting->payload, true);
+
+ if (! is_string($value) || ! $this->isEncrypted($value)) {
+ return;
+ }
+
+ DB::table('settings')
+ ->where('id', $setting->id)
+ ->update(['payload' => json_encode(Crypt::decrypt($value))]);
+ });
+ }
+ }
+
+ private function encryptedSettings(): array
+ {
+ return [
+ ['discord', 'bot_token'],
+ ['discord', 'client_secret'],
+ ['general', 'recaptcha_secret_key'],
+ ['mail', 'mail_password'],
+ ['pterodactyl', 'admin_token'],
+ ['pterodactyl', 'user_token'],
+ ];
+ }
+
+ private function isEncrypted(string $value): bool
+ {
+ try {
+ Crypt::decrypt($value);
+
+ return true;
+ } catch (\Throwable) {
+ return false;
+ }
+ }
+};
diff --git a/database/migrations/2026_03_23_000001_add_unique_index_to_user_voucher_table.php b/database/migrations/2026_03_23_000001_add_unique_index_to_user_voucher_table.php
new file mode 100644
index 000000000..699bb32da
--- /dev/null
+++ b/database/migrations/2026_03_23_000001_add_unique_index_to_user_voucher_table.php
@@ -0,0 +1,38 @@
+select(
+ 'user_id',
+ 'voucher_id',
+ DB::raw('MIN(created_at) as created_at'),
+ DB::raw('MIN(updated_at) as updated_at')
+ )
+ ->groupBy('user_id', 'voucher_id')
+ ->get();
+
+ DB::table('user_voucher')->delete();
+ foreach ($deduplicatedRows as $row) {
+ DB::table('user_voucher')->insert((array) $row);
+ }
+
+ Schema::table('user_voucher', function (Blueprint $table) {
+ $table->unique(['user_id', 'voucher_id']);
+ });
+ }
+
+ public function down()
+ {
+ Schema::table('user_voucher', function (Blueprint $table) {
+ $table->dropUnique(['user_id', 'voucher_id']);
+ });
+ }
+};
diff --git a/database/seeders/Seeds/ApplicationApiSeeder.php b/database/seeders/Seeds/ApplicationApiSeeder.php
index 963f848fc..ef84e1761 100644
--- a/database/seeders/Seeds/ApplicationApiSeeder.php
+++ b/database/seeders/Seeds/ApplicationApiSeeder.php
@@ -14,8 +14,8 @@ class ApplicationApiSeeder extends Seeder
*/
public function run()
{
- ApplicationApi::create([
- 'memo' => 'admin',
- ]);
+ [, $plainTextToken] = ApplicationApi::issue(null, 'admin', ['*']);
+
+ $this->command?->info("Created example application API token: {$plainTextToken}");
}
}
diff --git a/docker/development/compose.yaml b/docker/development/compose.yaml
index 1e8571a05..3d0bf3f6c 100644
--- a/docker/development/compose.yaml
+++ b/docker/development/compose.yaml
@@ -21,12 +21,12 @@ services:
restart: unless-stopped
tty: true
ports:
- - "3306:3306"
+ - "127.0.0.1:3306:3306"
environment:
MYSQL_DATABASE: ctrlpanel
MYSQL_USER: ctrlpaneluser
- MYSQL_PASSWORD: root
- MYSQL_ROOT_PASSWORD: root
+ MYSQL_PASSWORD: change-me-before-use
+ MYSQL_ROOT_PASSWORD: change-me-before-use
volumes:
- "./mysql:/var/lib/mysql:delegated"
networks:
@@ -38,11 +38,11 @@ services:
depends_on:
- mysql
ports:
- - '8080:80'
+ - '127.0.0.1:8080:80'
environment:
- PMA_HOST=ctrlpanel_mysql
- PMA_USER=root
- - PMA_PASSWORD=root
+ - PMA_PASSWORD=change-me-before-use
- PMA_ARBITRARY=1
networks:
- ctrlpanel
@@ -52,7 +52,7 @@ services:
container_name: ctrlpanel_redis
restart: unless-stopped
ports:
- - "6379:6379"
+ - "127.0.0.1:6379:6379"
networks:
- ctrlpanel
diff --git a/docker/standalone/compose.yaml b/docker/standalone/compose.yaml
index b2d3ce2f4..2137a589b 100644
--- a/docker/standalone/compose.yaml
+++ b/docker/standalone/compose.yaml
@@ -22,12 +22,12 @@ services:
restart: unless-stopped
tty: true
ports:
- - "3306:3306"
+ - "127.0.0.1:3306:3306"
environment:
MYSQL_DATABASE: ctrlpanel
MYSQL_USER: ctrlpaneluser
- MYSQL_PASSWORD: root # change it
- MYSQL_ROOT_PASSWORD: root # change it
+ MYSQL_PASSWORD: change-me-before-use
+ MYSQL_ROOT_PASSWORD: change-me-before-use
volumes:
- "./mysql:/var/lib/mysql:delegated"
networks:
@@ -40,11 +40,11 @@ services:
depends_on:
- mysql
ports:
- - '8080:80'
+ - '127.0.0.1:8080:80'
environment:
- PMA_HOST=ctrlpanel_mysql
- PMA_USER=root # change it
- - PMA_PASSWORD=root # change it
+ - PMA_PASSWORD=change-me-before-use # change it
- PMA_ARBITRARY=1
networks:
- ctrlpanel
@@ -54,7 +54,7 @@ services:
container_name: ctrlpanel_redis
restart: unless-stopped
ports:
- - "6379:6379"
+ - "127.0.0.1:6379:6379"
networks:
- ctrlpanel
diff --git a/package-lock.json b/package-lock.json
index 337438197..a44e81ecd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,5 +1,5 @@
{
- "name": "relock-npm-lock-v2-ishl8Q",
+ "name": "cpgg",
"lockfileVersion": 2,
"requires": true,
"packages": {
@@ -421,70 +421,6 @@
"node": ">=18"
}
},
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "devOptional": true,
- "peer": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "devOptional": true,
- "peer": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "devOptional": true,
- "peer": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
- "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
- "devOptional": true,
- "peer": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "devOptional": true,
- "peer": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
- "devOptional": true,
- "peer": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
- }
- },
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.34.8",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz",
@@ -732,246 +668,12 @@
"win32"
]
},
- "node_modules/@types/eslint": {
- "version": "8.21.0",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz",
- "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "node_modules/@types/eslint-scope": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
- "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
- "node_modules/@types/estree": {
- "version": "0.0.51",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
- "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
- "dev": true,
- "peer": true
- },
"node_modules/@types/json-schema": {
"version": "7.0.11",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
"dev": true
},
- "node_modules/@types/node": {
- "version": "18.11.18",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
- "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==",
- "devOptional": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/ast": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/helper-numbers": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
- }
- },
- "node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
- "dev": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
- "dev": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
- "dev": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1"
- }
- },
- "node_modules/@webassemblyjs/ieee754": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@webassemblyjs/leb128": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/utf8": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
- "dev": true,
- "peer": true
- },
- "node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/helper-wasm-section": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-opt": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "@webassemblyjs/wast-printer": "1.11.1"
- }
- },
- "node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
- }
- },
- "node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1"
- }
- },
- "node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
- }
- },
- "node_modules/@webassemblyjs/wast-printer": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.11.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@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,
- "peer": true
- },
- "node_modules/@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,
- "peer": true
- },
- "node_modules/acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "devOptional": true,
- "peer": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-import-assertions": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
- "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
- "dev": true,
- "peer": true,
- "peerDependencies": {
- "acorn": "^8"
- }
- },
"node_modules/adjust-sourcemap-loader": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz",
@@ -1052,7 +754,7 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -1101,7 +803,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "devOptional": true,
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -1130,7 +832,7 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -1138,42 +840,6 @@
"node": ">=8"
}
},
- "node_modules/browserslist": {
- "version": "4.21.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
- "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- ],
- "peer": true,
- "dependencies": {
- "caniuse-lite": "^1.0.30001449",
- "electron-to-chromium": "^1.4.284",
- "node-releases": "^2.0.8",
- "update-browserslist-db": "^1.0.10"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/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==",
- "devOptional": true,
- "peer": true
- },
"node_modules/camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
@@ -1183,23 +849,6 @@
"node": ">=6"
}
},
- "node_modules/caniuse-lite": {
- "version": "1.0.30001450",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz",
- "integrity": "sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- }
- ],
- "peer": true
- },
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -1239,7 +888,7 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "devOptional": true,
+ "dev": true,
"funding": [
{
"type": "individual",
@@ -1262,16 +911,6 @@
"fsevents": "~2.3.2"
}
},
- "node_modules/chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=6.0"
- }
- },
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -1287,13 +926,6 @@
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true
},
- "node_modules/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==",
- "devOptional": true,
- "peer": true
- },
"node_modules/compose-function": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz",
@@ -1343,13 +975,6 @@
"node": ">=0.10"
}
},
- "node_modules/electron-to-chromium": {
- "version": "1.4.285",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.285.tgz",
- "integrity": "sha512-47o4PPgxfU1KMNejz+Dgaodf7YTcg48uOfV1oM6cs3adrl2+7R+dHkt3Jpxqo0LRCbGJEzTKMUt0RdvByb/leg==",
- "dev": true,
- "peer": true
- },
"node_modules/emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
@@ -1359,27 +984,6 @@
"node": ">= 4"
}
},
- "node_modules/enhanced-resolve": {
- "version": "5.12.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
- "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/es-module-lexer": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
- "dev": true,
- "peer": true
- },
"node_modules/es5-ext": {
"version": "0.10.62",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
@@ -1456,16 +1060,6 @@
"@esbuild/win32-x64": "0.24.2"
}
},
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -1475,63 +1069,6 @@
"node": ">=0.8.0"
}
},
- "node_modules/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,
- "peer": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/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,
- "peer": true,
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esrecurse/node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=0.8.x"
- }
- },
"node_modules/ext": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
@@ -1563,7 +1100,7 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -1609,7 +1146,7 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -1617,35 +1154,11 @@
"node": ">= 6"
}
},
- "node_modules/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,
- "peer": true
- },
- "node_modules/graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
- "dev": true,
- "peer": true
- },
- "node_modules/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,
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/immutable": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.3.tgz",
"integrity": "sha512-IHpmvaOIX4VLJwPOuQr1NpeBr2ZG6vpIj3blsLVxXRWJscLioaJRStqC+NcBsLeCDsnGlPpXd5/WZmnE7MbsKA==",
- "devOptional": true
+ "dev": true
},
"node_modules/inherits": {
"version": "2.0.4",
@@ -1657,7 +1170,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -1669,7 +1182,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "devOptional": true,
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -1678,7 +1191,7 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -1690,24 +1203,9 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "devOptional": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/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,
- "peer": true,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
"engines": {
- "node": ">= 10.13.0"
+ "node": ">=0.12.0"
}
},
"node_modules/jquery": {
@@ -1716,13 +1214,6 @@
"integrity": "sha512-bZ5Sy3YzKo9Fyc8wH2iIQK4JImJ6R0GWI9kL1/k7Z91ZBNgkRXE6U0JfHIizZbort8ZunhSI3jw9I6253ahKfg==",
"dev": true
},
- "node_modules/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,
- "peer": true
- },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -1765,16 +1256,6 @@
"vite": "^3.0.0 || ^4.0.0"
}
},
- "node_modules/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,
- "peer": true,
- "engines": {
- "node": ">=6.11.5"
- }
- },
"node_modules/loader-utils": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
@@ -1807,36 +1288,6 @@
"node": ">=10"
}
},
- "node_modules/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,
- "peer": true
- },
- "node_modules/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,
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/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,
- "peer": true,
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/minimist": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
@@ -1876,18 +1327,11 @@
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
"dev": true
},
- "node_modules/node-releases": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz",
- "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==",
- "dev": true,
- "peer": true
- },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "devOptional": true,
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -1957,21 +1401,11 @@
"node": ">=6"
}
},
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -2128,7 +1562,7 @@
"version": "1.58.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.58.0.tgz",
"integrity": "sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -2237,21 +1671,11 @@
"node": ">=10"
}
},
- "node_modules/serialize-javascript": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
- "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "devOptional": true,
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -2279,17 +1703,6 @@
"urix": "^0.1.0"
}
},
- "node_modules/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==",
- "devOptional": true,
- "peer": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
"node_modules/source-map-url": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
@@ -2297,86 +1710,6 @@
"deprecated": "See https://github.com/lydell/source-map-url#deprecated",
"dev": true
},
- "node_modules/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,
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/terser": {
- "version": "5.16.3",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz",
- "integrity": "sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==",
- "devOptional": true,
- "peer": true,
- "dependencies": {
- "@jridgewell/source-map": "^0.3.2",
- "acorn": "^8.5.0",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/terser-webpack-plugin": {
- "version": "5.3.6",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz",
- "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.14",
- "jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.0",
- "terser": "^5.14.1"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.1.0"
- },
- "peerDependenciesMeta": {
- "@swc/core": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- },
- "uglify-js": {
- "optional": true
- }
- }
- },
"node_modules/tinymce": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/tinymce/-/tinymce-7.0.0.tgz",
@@ -2387,7 +1720,7 @@
"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==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -2401,33 +1734,6 @@
"integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
"dev": true
},
- "node_modules/update-browserslist-db": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
- "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- ],
- "peer": true,
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "browserslist-lint": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -2525,78 +1831,6 @@
"picomatch": "^2.3.1"
}
},
- "node_modules/watchpack": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
- "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/webpack": {
- "version": "5.75.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz",
- "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==",
- "dev": true,
- "peer": true,
- "dependencies": {
- "@types/eslint-scope": "^3.7.3",
- "@types/estree": "^0.0.51",
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/wasm-edit": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "acorn": "^8.7.1",
- "acorn-import-assertions": "^1.7.6",
- "browserslist": "^4.14.5",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.10.0",
- "es-module-lexer": "^0.9.0",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.9",
- "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.1.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.1.3",
- "watchpack": "^2.4.0",
- "webpack-sources": "^3.2.3"
- },
- "bin": {
- "webpack": "bin/webpack.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- }
- }
- },
- "node_modules/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,
- "peer": true,
- "engines": {
- "node": ">=10.13.0"
- }
- },
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -2755,61 +1989,6 @@
"integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
"optional": true
},
- "@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "devOptional": true,
- "peer": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "devOptional": true,
- "peer": true
- },
- "@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "devOptional": true,
- "peer": true
- },
- "@jridgewell/source-map": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
- "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
- "devOptional": true,
- "peer": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "devOptional": true,
- "peer": true
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
- "devOptional": true,
- "peer": true,
- "requires": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
- }
- },
"@rollup/rollup-android-arm-eabi": {
"version": "4.34.8",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz",
@@ -2924,238 +2103,12 @@
"integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==",
"optional": true
},
- "@types/eslint": {
- "version": "8.21.0",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz",
- "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "@types/eslint-scope": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
- "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
- "@types/estree": {
- "version": "0.0.51",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
- "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
- "dev": true,
- "peer": true
- },
"@types/json-schema": {
"version": "7.0.11",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
"dev": true
},
- "@types/node": {
- "version": "18.11.18",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
- "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==",
- "devOptional": true,
- "peer": true
- },
- "@webassemblyjs/ast": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@webassemblyjs/helper-numbers": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
- "dev": true,
- "peer": true
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
- "dev": true,
- "peer": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
- "dev": true,
- "peer": true
- },
- "@webassemblyjs/helper-numbers": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
- "dev": true,
- "peer": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
- "dev": true,
- "peer": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/helper-wasm-section": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-opt": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "@webassemblyjs/wast-printer": "1.11.1"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
- "dev": true,
- "peer": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
- "dev": true,
- "peer": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
- "dev": true,
- "peer": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "@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,
- "peer": 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,
- "peer": true
- },
- "acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "devOptional": true,
- "peer": true
- },
- "acorn-import-assertions": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
- "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
- "dev": true,
- "peer": true,
- "requires": {}
- },
"adjust-sourcemap-loader": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz",
@@ -3201,8 +2154,7 @@
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"ansi-styles": {
"version": "3.2.1",
@@ -3217,7 +2169,7 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "devOptional": true,
+ "dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -3254,57 +2206,29 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "devOptional": true
+ "dev": true
},
"bootstrap": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz",
"integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "devOptional": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browserslist": {
- "version": "4.21.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
- "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
"dev": true,
- "peer": true,
"requires": {
- "caniuse-lite": "^1.0.30001449",
- "electron-to-chromium": "^1.4.284",
- "node-releases": "^2.0.8",
- "update-browserslist-db": "^1.0.10"
+ "fill-range": "^7.0.1"
}
},
- "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==",
- "devOptional": true,
- "peer": true
- },
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
- "caniuse-lite": {
- "version": "1.0.30001450",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz",
- "integrity": "sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==",
- "dev": true,
- "peer": true
- },
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -3337,7 +2261,7 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "devOptional": true,
+ "dev": true,
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -3349,13 +2273,6 @@
"readdirp": "~3.6.0"
}
},
- "chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
- "dev": true,
- "peer": true
- },
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -3371,13 +2288,6 @@
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true
},
- "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==",
- "devOptional": true,
- "peer": true
- },
"compose-function": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz",
@@ -3424,37 +2334,12 @@
"integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
"dev": true
},
- "electron-to-chromium": {
- "version": "1.4.285",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.285.tgz",
- "integrity": "sha512-47o4PPgxfU1KMNejz+Dgaodf7YTcg48uOfV1oM6cs3adrl2+7R+dHkt3Jpxqo0LRCbGJEzTKMUt0RdvByb/leg==",
- "dev": true,
- "peer": 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
},
- "enhanced-resolve": {
- "version": "5.12.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
- "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- }
- },
- "es-module-lexer": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
- "dev": true,
- "peer": true
- },
"es5-ext": {
"version": "0.10.62",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
@@ -3519,63 +2404,12 @@
"@esbuild/win32-x64": "0.24.2"
}
},
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "peer": 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,
- "peer": 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,
- "peer": 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,
- "peer": true
- }
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "peer": true
- },
- "events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true,
- "peer": true
- },
"ext": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
@@ -3609,7 +2443,7 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "devOptional": true,
+ "dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@@ -3630,37 +2464,16 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "devOptional": true,
+ "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,
- "peer": true
- },
- "graceful-fs": {
- "version": "4.2.10",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
- "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
- "dev": true,
- "peer": 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,
- "peer": true
- },
"immutable": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.3.tgz",
"integrity": "sha512-IHpmvaOIX4VLJwPOuQr1NpeBr2ZG6vpIj3blsLVxXRWJscLioaJRStqC+NcBsLeCDsnGlPpXd5/WZmnE7MbsKA==",
- "devOptional": true
+ "dev": true
},
"inherits": {
"version": "2.0.4",
@@ -3672,7 +2485,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "devOptional": true,
+ "dev": true,
"requires": {
"binary-extensions": "^2.0.0"
}
@@ -3681,13 +2494,13 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "devOptional": true
+ "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==",
- "devOptional": true,
+ "dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
@@ -3696,19 +2509,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "devOptional": 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,
- "peer": true,
- "requires": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- }
+ "dev": true
},
"jquery": {
"version": "3.6.3",
@@ -3716,13 +2517,6 @@
"integrity": "sha512-bZ5Sy3YzKo9Fyc8wH2iIQK4JImJ6R0GWI9kL1/k7Z91ZBNgkRXE6U0JfHIizZbort8ZunhSI3jw9I6253ahKfg==",
"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,
- "peer": true
- },
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -3753,13 +2547,6 @@
"vite-plugin-full-reload": "^1.0.5"
}
},
- "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,
- "peer": true
- },
"loader-utils": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
@@ -3786,30 +2573,6 @@
"yallist": "^4.0.0"
}
},
- "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,
- "peer": 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,
- "peer": 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,
- "peer": true,
- "requires": {
- "mime-db": "1.52.0"
- }
- },
"minimist": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
@@ -3833,18 +2596,11 @@
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
"dev": true
},
- "node-releases": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz",
- "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==",
- "dev": true,
- "peer": true
- },
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "devOptional": true
+ "dev": true
},
"picocolors": {
"version": "1.1.1",
@@ -3878,21 +2634,11 @@
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
"dev": true
},
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "peer": 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==",
- "devOptional": true,
+ "dev": true,
"requires": {
"picomatch": "^2.2.1"
}
@@ -4024,7 +2770,7 @@
"version": "1.58.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.58.0.tgz",
"integrity": "sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg==",
- "devOptional": true,
+ "dev": true,
"requires": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -4083,21 +2829,11 @@
"lru-cache": "^6.0.0"
}
},
- "serialize-javascript": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
- "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
- "dev": true,
- "peer": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "devOptional": true
+ "dev": true
},
"source-map-js": {
"version": "1.2.1",
@@ -4117,67 +2853,12 @@
"urix": "^0.1.0"
}
},
- "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==",
- "devOptional": true,
- "peer": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
"source-map-url": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
"integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
"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,
- "peer": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true,
- "peer": true
- },
- "terser": {
- "version": "5.16.3",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz",
- "integrity": "sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==",
- "devOptional": true,
- "peer": true,
- "requires": {
- "@jridgewell/source-map": "^0.3.2",
- "acorn": "^8.5.0",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- }
- },
- "terser-webpack-plugin": {
- "version": "5.3.6",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz",
- "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@jridgewell/trace-mapping": "^0.3.14",
- "jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.0",
- "terser": "^5.14.1"
- }
- },
"tinymce": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/tinymce/-/tinymce-7.0.0.tgz",
@@ -4187,7 +2868,7 @@
"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==",
- "devOptional": true,
+ "dev": true,
"requires": {
"is-number": "^7.0.0"
}
@@ -4198,17 +2879,6 @@
"integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
"dev": true
},
- "update-browserslist-db": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
- "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- }
- },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -4244,57 +2914,6 @@
"picomatch": "^2.3.1"
}
},
- "watchpack": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
- "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
- "dev": true,
- "peer": true,
- "requires": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- }
- },
- "webpack": {
- "version": "5.75.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz",
- "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==",
- "dev": true,
- "peer": true,
- "requires": {
- "@types/eslint-scope": "^3.7.3",
- "@types/estree": "^0.0.51",
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/wasm-edit": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "acorn": "^8.7.1",
- "acorn-import-assertions": "^1.7.6",
- "browserslist": "^4.14.5",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.10.0",
- "es-module-lexer": "^0.9.0",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.9",
- "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.1.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.1.3",
- "watchpack": "^2.4.0",
- "webpack-sources": "^3.2.3"
- }
- },
- "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,
- "peer": true
- },
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
diff --git a/phpunit.xml b/phpunit.xml
index 1c2c01844..bc9d3b24f 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -1,32 +1,28 @@
-
{{ __('Are cronjobs running?')}} {{ __('Check docs')}}
+{{ __('Are cronjobs running?')}} {{ __('Check docs')}}
We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the - Free Privacy Policy + Free Privacy Policy Generator.
We use both Session and Persistent Cookies for the purposes set out below: