From 7b44e90ff1d8626da44fb6762566698980521548 Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 4 May 2022 13:15:55 -0400 Subject: [PATCH 01/30] readme update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 650b376a..ff459eac 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ You may also have to authorize Laravel to write to the storage directory sudo chown -R www-data:www-data storage/ ``` -Last, you need to setup roles and admins to start using the portal and see it work. Visit the URL of the backend with the path **/install**. This will install these things for you. You will find your admin credentials generated in the Laravel log file. You may want to disable this endpoint after the initial install to prevent this install endpoint from being used again if you are planning on deploying to a production environment in the future. This is easily done by switching ENV variable **INSTALL_PATH_ENABLED** to 0, or false. You may need to run the following command if Laravel caching is on. +Last, you need to setup emailers to start using the portal and see it work. Visit the URL of the backend with the path **/install-emailer**. This will install these things for you. ```bash php artisan config:clear From 4a90584e865d8c65fb2020385d19cb5691528cfc Mon Sep 17 00:00:00 2001 From: = <=> Date: Fri, 6 May 2022 13:14:49 -0400 Subject: [PATCH 02/30] email style update --- resources/views/emails/admin_alert_email.blade.php | 12 ++++++------ resources/views/emails/confirm_email.blade.php | 12 ++++++------ resources/views/emails/contact_us.blade.php | 12 ++++++------ resources/views/emails/invitation.blade.php | 12 ++++++------ resources/views/emails/kyc_approved.blade.php | 12 ++++++------ resources/views/emails/kyc_denied.blade.php | 12 ++++++------ resources/views/emails/reset_password.blade.php | 14 +++++++------- resources/views/emails/two_fa.blade.php | 12 ++++++------ resources/views/emails/user_alert_email.blade.php | 12 ++++++------ resources/views/emails/verify_email.blade.php | 12 ++++++------ 10 files changed, 61 insertions(+), 61 deletions(-) diff --git a/resources/views/emails/admin_alert_email.blade.php b/resources/views/emails/admin_alert_email.blade.php index 5f4efdc5..3d9fa5ae 100644 --- a/resources/views/emails/admin_alert_email.blade.php +++ b/resources/views/emails/admin_alert_email.blade.php @@ -150,7 +150,7 @@

{!! $title !!}

@@ -170,11 +170,11 @@
diff --git a/resources/views/emails/confirm_email.blade.php b/resources/views/emails/confirm_email.blade.php index b3d5f485..fa3a1f0f 100644 --- a/resources/views/emails/confirm_email.blade.php +++ b/resources/views/emails/confirm_email.blade.php @@ -150,7 +150,7 @@

{!! $title !!}

@@ -174,11 +174,11 @@
diff --git a/resources/views/emails/contact_us.blade.php b/resources/views/emails/contact_us.blade.php index 1ff0192f..d56f61dd 100644 --- a/resources/views/emails/contact_us.blade.php +++ b/resources/views/emails/contact_us.blade.php @@ -150,7 +150,7 @@

Contact Us

@@ -167,11 +167,11 @@
diff --git a/resources/views/emails/invitation.blade.php b/resources/views/emails/invitation.blade.php index ccb54630..66b52ecf 100644 --- a/resources/views/emails/invitation.blade.php +++ b/resources/views/emails/invitation.blade.php @@ -150,7 +150,7 @@

Admin Privileges Granted

@@ -170,11 +170,11 @@
diff --git a/resources/views/emails/kyc_approved.blade.php b/resources/views/emails/kyc_approved.blade.php index 7d1dfa65..1faff905 100644 --- a/resources/views/emails/kyc_approved.blade.php +++ b/resources/views/emails/kyc_approved.blade.php @@ -150,7 +150,7 @@

Your KYC is approved

@@ -170,11 +170,11 @@
diff --git a/resources/views/emails/kyc_denied.blade.php b/resources/views/emails/kyc_denied.blade.php index 8f07482c..8b7205d6 100644 --- a/resources/views/emails/kyc_denied.blade.php +++ b/resources/views/emails/kyc_denied.blade.php @@ -150,7 +150,7 @@

Your KYC is denied

@@ -170,11 +170,11 @@
diff --git a/resources/views/emails/reset_password.blade.php b/resources/views/emails/reset_password.blade.php index b130bb0d..0a1f42cb 100644 --- a/resources/views/emails/reset_password.blade.php +++ b/resources/views/emails/reset_password.blade.php @@ -150,7 +150,7 @@

Reset Pasword

@@ -162,7 +162,7 @@ Reset Pasword
- +
@@ -170,11 +170,11 @@
diff --git a/resources/views/emails/two_fa.blade.php b/resources/views/emails/two_fa.blade.php index 4e754135..5f708dbe 100644 --- a/resources/views/emails/two_fa.blade.php +++ b/resources/views/emails/two_fa.blade.php @@ -150,7 +150,7 @@

Two Factor Auth

@@ -166,11 +166,11 @@
diff --git a/resources/views/emails/user_alert_email.blade.php b/resources/views/emails/user_alert_email.blade.php index 5f4efdc5..3d9fa5ae 100644 --- a/resources/views/emails/user_alert_email.blade.php +++ b/resources/views/emails/user_alert_email.blade.php @@ -150,7 +150,7 @@

{!! $title !!}

@@ -170,11 +170,11 @@
diff --git a/resources/views/emails/verify_email.blade.php b/resources/views/emails/verify_email.blade.php index 5ae351a5..f7ff7630 100644 --- a/resources/views/emails/verify_email.blade.php +++ b/resources/views/emails/verify_email.blade.php @@ -150,7 +150,7 @@

Welcome to the Casper Association portal!

@@ -166,11 +166,11 @@
From df434e9bb0408fbba356432811d74cbcc05fb499 Mon Sep 17 00:00:00 2001 From: Keep Up Dragon Date: Mon, 16 May 2022 11:29:37 +0200 Subject: [PATCH 03/30] Gitflow sync PR actions --- .github/workflows/dev_staging_sync.yml | 45 +++++++++++++++++++++++ .github/workflows/staging_master_sync.yml | 45 +++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 .github/workflows/dev_staging_sync.yml create mode 100644 .github/workflows/staging_master_sync.yml diff --git a/.github/workflows/dev_staging_sync.yml b/.github/workflows/dev_staging_sync.yml new file mode 100644 index 00000000..6e104907 --- /dev/null +++ b/.github/workflows/dev_staging_sync.yml @@ -0,0 +1,45 @@ +name: dev to staging sync + + +#Run workflow on successful merge to dev +on: + push: + branches: + - dev + + +jobs: + create-pull-request: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - uses: tibdex/github-app-token@586e1a624db6a5a4ac2c53daeeded60c5e3d50fe + id: generate-token + with: + app_id: ${{ secrets.PRBOT_APP_ID }} + private_key: ${{ secrets.PRBOT_APP_PRIVATE_KEY }} + + #Sync dev branch to the staging branch to keep it updated + - name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: 12 + + - name: Opening pull request + id: pull + uses: tretuna/sync-branches@ea58ab6e406fd3ad016a064b31270bbb41127f41 + with: + GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} + FROM_BRANCH: "dev" + TO_BRANCH: "staging" + REVIEWERS: '["ledgerleapllc"]' + CONTENT_COMPARISON: true + PULL_REQUEST_BODY: "This PR is created by the PR Bot to sync the dev branch to the staging branch. Please check the content changes also on the dev site if you want. You can feel free to ignore this or approve + merge it. If you merge, the prod deployment will start automatically. If you ignore it, it will get renewed the next time a new feature gets merged to the dev branch." + PULL_REQUEST_TITLE: "Sync dev to staging" + + #Display the pull request URL: + - name: Display the pull request URL + run: | + echo "The pull request URL is: ${{ steps.pull.outputs.PULL_REQUEST_URL }}" diff --git a/.github/workflows/staging_master_sync.yml b/.github/workflows/staging_master_sync.yml new file mode 100644 index 00000000..256a7f45 --- /dev/null +++ b/.github/workflows/staging_master_sync.yml @@ -0,0 +1,45 @@ +name: staging to master sync + + +#Run workflow on successful merge to staging +on: + push: + branches: + - staging + + +jobs: + create-pull-request: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - uses: tibdex/github-app-token@586e1a624db6a5a4ac2c53daeeded60c5e3d50fe + id: generate-token + with: + app_id: ${{ secrets.PRBOT_APP_ID }} + private_key: ${{ secrets.PRBOT_APP_PRIVATE_KEY }} + + #Sync staging branch to the master branch to keep it updated + - name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: 12 + + - name: Opening pull request + id: pull + uses: tretuna/sync-branches@ea58ab6e406fd3ad016a064b31270bbb41127f41 + with: + GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} + FROM_BRANCH: "staging" + TO_BRANCH: "master" + REVIEWERS: '["ledgerleapllc"]' + CONTENT_COMPARISON: true + PULL_REQUEST_BODY: "This PR is created by the PR Bot to sync the staging branch to the master branch. Please check the content changes also on the staging site if you want. You can feel free to ignore this or approve + merge it. If you merge, the prod deployment will start automatically. If you ignore it, it will get renewed the next time a new feature gets merged to the staging branch." + PULL_REQUEST_TITLE: "Sync staging to master" + + #Display the pull request URL: + - name: Display the pull request URL + run: | + echo "The pull request URL is: ${{ steps.pull.outputs.PULL_REQUEST_URL }}" From ca09886e4f40f7f2830b2d04da8aba800b3532a3 Mon Sep 17 00:00:00 2001 From: Keep Up Dragon Date: Mon, 16 May 2022 11:29:55 +0200 Subject: [PATCH 04/30] Basic initial CODEOWNERS file --- .github/workflows/CODEOWNERS | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .github/workflows/CODEOWNERS diff --git a/.github/workflows/CODEOWNERS b/.github/workflows/CODEOWNERS new file mode 100644 index 00000000..1be482f9 --- /dev/null +++ b/.github/workflows/CODEOWNERS @@ -0,0 +1,4 @@ +# Default reviewers +* @ledgerleapllc + + From 6bfaed454026f47a1ab86aba81955a82a5d8dceb Mon Sep 17 00:00:00 2001 From: Keep Up Dragon Date: Mon, 16 May 2022 11:30:38 +0200 Subject: [PATCH 05/30] Changing triggering for the CI --- .github/workflows/laravel.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index f5fdf629..936e712a 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -2,9 +2,9 @@ name: Laravel on: push: - branches: [ master ] + branches: "*" pull_request: - branches: [ master ] + types: [ opened, reopened, synchronize ] jobs: laravel-tests: From 883dc07f988f8173876d013d85508a748b484cb3 Mon Sep 17 00:00:00 2001 From: Ledgerleap Date: Mon, 16 May 2022 14:30:07 -0400 Subject: [PATCH 06/30] # Updates --- app/Console/Commands/CheckNodeStatus.php | 241 +++++++-- app/Console/Commands/MoveAddresses.php | 73 +++ app/Console/Commands/NodeInfo.php | 138 ++--- app/Console/Helper.php | 61 +-- app/Console/Kernel.php | 3 +- .../Controllers/Api/V1/AdminController.php | 84 +-- .../Controllers/Api/V1/MetricController.php | 167 +++--- .../Controllers/Api/V1/UserController.php | 509 ++++++++---------- .../Api/VerifyFileCasperSignerRequest.php | 3 +- app/Models/Metric.php | 1 - app/Models/User.php | 30 +- app/Models/UserAddress.php | 16 + app/Services/NodeHelper.php | 121 +++-- ...2022_05_03_150005_user_addresses_table.php | 34 ++ .../2022_05_03_153706_update_users_table.php | 31 ++ ..._11_082526_update_user_addresses_table.php | 30 ++ ...1_161022_update_user_addresses_2_table.php | 31 ++ ...2_141958_update_user_addresses_3_table.php | 31 ++ ...2_211044_update_user_addresses_4_table.php | 30 ++ ...6_020320_update_user_addresses_5_table.php | 30 ++ routes/api.php | 10 +- 21 files changed, 1018 insertions(+), 656 deletions(-) create mode 100644 app/Console/Commands/MoveAddresses.php create mode 100644 app/Models/UserAddress.php create mode 100644 database/migrations/2022_05_03_150005_user_addresses_table.php create mode 100644 database/migrations/2022_05_03_153706_update_users_table.php create mode 100644 database/migrations/2022_05_11_082526_update_user_addresses_table.php create mode 100644 database/migrations/2022_05_11_161022_update_user_addresses_2_table.php create mode 100644 database/migrations/2022_05_12_141958_update_user_addresses_3_table.php create mode 100644 database/migrations/2022_05_12_211044_update_user_addresses_4_table.php create mode 100644 database/migrations/2022_05_16_020320_update_user_addresses_5_table.php diff --git a/app/Console/Commands/CheckNodeStatus.php b/app/Console/Commands/CheckNodeStatus.php index 5e5564b5..f09854a6 100644 --- a/app/Console/Commands/CheckNodeStatus.php +++ b/app/Console/Commands/CheckNodeStatus.php @@ -4,7 +4,8 @@ use App\Models\MonitoringCriteria; use App\Models\User; - +use App\Models\UserAddress; +use App\Models\NodeInfo; use Carbon\Carbon; use Illuminate\Console\Command; @@ -66,7 +67,202 @@ public function handle() $updateResponsiveness = MonitoringCriteria::where('type', 'update-responsiveness')->first(); $updateResponsivenessProbationStart = (float) $updateResponsiveness->probation_start; if ($updateResponsiveness->given_to_correct_unit == 'Weeks') { - $updateResponsivenessTime = (float)$updateResponsiveness->given_to_correct_value * 7 * 24; + $updateResponsivenessTime = (float) $updateResponsiveness->given_to_correct_value * 7 * 24; + } else if ($updateResponsiveness->given_to_correct_unit == 'Days') { + $updateResponsivenessTime = (float) $updateResponsiveness->given_to_correct_value * 24; + } else { + $updateResponsivenessTime = (float) $updateResponsiveness->given_to_correct_value; + } + + $now = Carbon::now('UTC'); + $users = User::with(['addresses', 'metric', 'nodeInfo', 'profile']) + ->where('role', 'member') + ->where('banned', 0) + ->get(); + + foreach ($users as $user) { + $user->node_status = 'Online'; + $user->save(); + + $addresses = $user->addresses ?? []; + $nodeInfo = $user->nodeInfo ? $user->nodeInfo : $user->metric; + + if (!$nodeInfo || !$addresses || count($addresses) == 0 || !$user->node_verified_at || !$user->letter_verified_at || !$user->signature_request_id) { + $user->node_status = null; + $user->save(); + } else { + $hasNotFailNode = false; + foreach ($addresses as $address) { + $public_address_node = strtolower($address->public_address_node); + $nodeInfoAddress = NodeInfo::where('node_address', $public_address_node)->first(); + if (!$nodeInfoAddress) { + $address->node_status = null; + $address->save(); + } + if ($address->is_fail_node != 1) { + $hasNotFailNode = true; + } + } + + if (!$hasNotFailNode) { + $user->node_status = 'Offline'; + $user->save(); + } else { + // Begin For Each + foreach ($addresses as $userAddress) { + $public_address_node = strtolower($userAddress->public_address_node); + $nodeInfoAddress = NodeInfo::where('node_address', $public_address_node)->first(); + if ($nodeInfoAddress) { + $nodeInfoAddress->uptime = $nodeInfoAddress->uptime ? $nodeInfoAddress->uptime : 0; + $nodeInfoAddress->block_height_average = $nodeInfoAddress->block_height_average ? $nodeInfoAddress->block_height_average : 0; + $nodeInfoAddress->update_responsiveness = $nodeInfoAddress->update_responsiveness ? $nodeInfoAddress->update_responsiveness : 100; + if ( + $nodeInfoAddress->uptime >= $uptimeProbationStart && + $nodeInfoAddress->block_height_average >= $blockHeightProbationStart && + $nodeInfoAddress->update_responsiveness >= $updateResponsivenessProbationStart + ) { + $userAddress->node_status = 'Online'; + $userAddress->save(); + + $nodeInfoAddress->uptime_time_start = null; + $nodeInfoAddress->uptime_time_end = null; + + $nodeInfoAddress->block_height_average_time_start = null; + $nodeInfoAddress->block_height_average_time_end = null; + + $nodeInfoAddress->update_responsiveness_time_start = null; + $nodeInfoAddress->update_responsiveness_time_end = null; + + $nodeInfoAddress->save(); + } + } + + if (isset($user->profile) && $user->profile && isset($user->profile->status) && $user->profile->status == 'approved' && $nodeInfoAddress) { + $userAddress->extra_status = null; + $userAddress->save(); + + if ($nodeInfoAddress->uptime < $uptimeProbationStart) { + $userAddress->extra_status = 'On Probation'; + $nodeInfoAddress->uptime_time_start = now(); + $nodeInfoAddress->uptime_time_end = Carbon::now('UTC')->addHours($uptimeTime); + } + + if ($nodeInfoAddress->block_height_average < $blockHeightProbationStart) { + $userAddress->extra_status = 'On Probation'; + $nodeInfoAddress->block_height_average_time_start = now(); + $nodeInfoAddress->block_height_average_time_end = Carbon::now('UTC')->addHours($blockHeightTime); + } + + if ($nodeInfoAddress->update_responsiveness < $updateResponsivenessProbationStart) { + $userAddress->extra_status = 'On Probation'; + $nodeInfoAddress->update_responsiveness_time_start = now(); + $nodeInfoAddress->update_responsiveness_time_end = Carbon::now('UTC')->addHours($updateResponsivenessTime); + } + + $userAddress->save(); + $nodeInfoAddress->save(); + + if ($userAddress->extra_status == 'On Probation') { + if ($nodeInfoAddress->uptime_time_end <= $now && $nodeInfoAddress->uptime < $uptimeProbationStart) { + $userAddress->extra_status = 'Suspended'; + } + if ($nodeInfoAddress->block_height_average_time_end <= $now && $nodeInfoAddress->block_height_average < $blockHeightProbationStart) { + $userAddress->extra_status = 'Suspended'; + } + if ($nodeInfoAddress->update_responsiveness_time_end <= $now && $nodeInfoAddress->update_responsiveness < $updateResponsivenessProbationStart) { + $userAddress->extra_status = 'Suspended'; + } + $userAddress->save(); + } + } + } + // End For Each + + // Begin For Each + $hasNotOfflineStatus = $hasNotSuspendedStatus = false; + foreach ($addresses as $userAddress) { + if ($userAddress->node_status != 'Offline') { + $hasNotOfflineStatus = true; + break; + } + } + foreach ($addresses as $userAddress) { + if ($userAddress->extra_status != 'Suspended') { + $hasNotSuspendedStatus = true; + break; + } + } + + if (!$hasNotOfflineStatus) { + $user->node_status = 'Offline'; + $user->save(); + } else { + foreach ($addresses as $userAddress) { + if ($userAddress->node_status == 'Online') { + $user->node_status = 'Online'; + $user->save(); + break; + } + } + if ($user->node_status != 'Online') { + $user->node_status = null; + $user->save(); + } + } + + if (!$hasNotSuspendedStatus && isset($user->profile) && $user->profile) { + $user->profile->extra_status = 'Suspended'; + $user->profile->save(); + } else if (isset($user->profile) && $user->profile) { + foreach ($addresses as $userAddress) { + if ($userAddress->extra_status == 'On Probation') { + $user->profile->extra_status = 'On Probation'; + $user->save(); + break; + } + } + if ($user->profile->extra_status != 'On Probation') { + $user->profile->extra_status = null; + $user->profile->save(); + } + } + // End For Each + } + } + } + } + + /** + * Execute the console command. + * + * @return int + */ + public function handleOld() + { + $uptime = MonitoringCriteria::where('type', 'uptime')->first(); + $uptimeProbationStart = $uptime->probation_start; + if ($uptime->given_to_correct_unit == 'Weeks') { + $uptimeTime = (float) $uptime->given_to_correct_value * 7 * 24; + } else if ($uptime->given_to_correct_unit == 'Days') { + $uptimeTime = (float) $uptime->given_to_correct_value * 24; + } else { + $uptimeTime = (float) $uptime->given_to_correct_value; + } + + $blockHeight = MonitoringCriteria::where('type', 'block-height')->first(); + $blockHeightProbationStart = (float) $blockHeight->probation_start; + if ($blockHeight->given_to_correct_unit == 'Weeks') { + $blockHeightTime = (float) $blockHeight->given_to_correct_value * 7 * 24; + } else if ($blockHeight->given_to_correct_unit == 'Days') { + $blockHeightTime = (float) $blockHeight->given_to_correct_value * 24; + } else { + $blockHeightTime = (float) $blockHeight->given_to_correct_value; + } + + $updateResponsiveness = MonitoringCriteria::where('type', 'update-responsiveness')->first(); + $updateResponsivenessProbationStart = (float) $updateResponsiveness->probation_start; + if ($updateResponsiveness->given_to_correct_unit == 'Weeks') { + $updateResponsivenessTime = (float) $updateResponsiveness->given_to_correct_value * 7 * 24; } else if ($updateResponsiveness->given_to_correct_unit == 'Days') { $updateResponsivenessTime = (float) $updateResponsiveness->given_to_correct_value * 24; } else { @@ -154,45 +350,6 @@ public function handle() $user->profile->save(); } } - - /* - if ($user->node_status != 'Probation' && $user->node_status != 'Pulled') { - if ($nodeInfo->uptime < $uptimeProbationStart) { - $user->node_status = 'Probation'; - $nodeInfo->uptime_time_start = now(); - $nodeInfo->uptime_time_end = Carbon::now('UTC')->addHours($uptimeTime); - } - - if ($nodeInfo->block_height_average < $blockHeightProbationStart) { - $user->node_status = 'Probation'; - $nodeInfo->block_height_average_time_start = now(); - $nodeInfo->block_height_average_time_end = Carbon::now('UTC')->addHours($blockHeightTime); - } - - if ($nodeInfo->update_responsiveness < $updateResponsivenessProbationStart) { - $user->node_status = 'Probation'; - $nodeInfo->update_responsiveness_time_start = now(); - $nodeInfo->update_responsiveness_time_end = Carbon::now('UTC')->addHours($updateResponsivenessTime); - } - - $user->save(); - $nodeInfo->save(); - continue; - } - - if ($user->node_status == 'Probation') { - if ($nodeInfo->uptime_time_end <= $now && $nodeInfo->uptime < $uptimeProbationStart) { - $user->node_status = 'Pulled'; - } - if ($nodeInfo->block_height_average_time_end <= $now && $nodeInfo->block_height_average < $blockHeightProbationStart) { - $user->node_status = 'Pulled'; - } - if ($nodeInfo->update_responsiveness_time_end <= $now && $nodeInfo->update_responsiveness < $updateResponsivenessProbationStart) { - $user->node_status = 'Pulled'; - } - $user->save(); - } - */ } } -} +} \ No newline at end of file diff --git a/app/Console/Commands/MoveAddresses.php b/app/Console/Commands/MoveAddresses.php new file mode 100644 index 00000000..934cf0d4 --- /dev/null +++ b/app/Console/Commands/MoveAddresses.php @@ -0,0 +1,73 @@ +whereNotNull('public_address_node')->get(); + if ($users && count($users) > 0) { + foreach ($users as $user) { + $address = $user->public_address_node; + $userAddress = UserAddress::where('public_address_node', $address)->first(); + if (!$userAddress) { + $userAddress = new UserAddress; + $userAddress->user_id = $user->id; + $userAddress->public_address_node = $address; + $userAddress->node_verified_at = $user->node_verified_at; + $userAddress->signed_file = $user->signed_file; + $userAddress->is_fail_node = $user->is_fail_node; + $userAddress->rank = $user->rank; + $userAddress->pending_node = $user->pending_node; + $userAddress->validator_fee = $user->validator_fee; + $userAddress->node_status = $user->node_status; + if ($user->profile && $user->profile->extra_status) { + $userAddress->extra_status = $user->profile->extra_status; + } + $userAddress->save(); + } + $user->has_address = 1; + if ($user->node_verified_at) { + $user->has_verified_address = 1; + } + $user->save(); + } + } + return 0; + } +} diff --git a/app/Console/Commands/NodeInfo.php b/app/Console/Commands/NodeInfo.php index 7f416aea..1801a076 100644 --- a/app/Console/Commands/NodeInfo.php +++ b/app/Console/Commands/NodeInfo.php @@ -6,7 +6,7 @@ use App\Models\Node; use App\Models\NodeInfo as ModelsNodeInfo; use App\Models\User; - +use App\Models\UserAddress; use App\Services\NodeHelper; use Illuminate\Console\Command; @@ -30,21 +30,11 @@ class NodeInfo extends Command */ protected $description = 'get node info'; - /** - * Create a new command instance. - * - * @return void - */ public function __construct() { parent::__construct(); } - - /** - * Execute the console command. - * - * @return int - */ + public function handle() { $nodeHelper = new NodeHelper(); @@ -58,7 +48,6 @@ public function updateNode() { $nodes = Node::whereNotNull('protocol_version')->get(); $max_hight_block = $nodes->max('block_height'); - $base_block = 10; $versions = $nodes->pluck('protocol_version'); $versions = $versions->toArray(); @@ -75,16 +64,15 @@ public function updateNode() $highestVersionNode = (end($versionsNodes)); if (version_compare($highestVersion, $highestVersionNode, '<')) { - $user = User::where('public_address_node', $key)->first(); - if ($user) { - $user->is_fail_node = 1; - $user->node_status = 'Offline'; - $user->save(); + $userAddress = UserAddress::where('public_address_node', $key)->first(); + if ($userAddress) { + $userAddress->is_fail_node = 1; + $userAddress->node_status = 'Offline'; + $userAddress->save(); } } - $totalResponsiveness = 0; - $totalBlockHeight = 0; + $totalResponsiveness = $totalBlockHeight = 0; $nodeInfo = ModelsNodeInfo::where('node_address', $key)->first(); if ($nodeInfo) { @@ -123,6 +111,39 @@ public function updateNode() $nodeInfo->save(); } } + + $users = User::with(['addresses']) + ->where('role', 'member') + ->where('banned', 0) + ->get(); + if ($users && count($users) > 0) { + foreach ($users as $user) { + $addresses = $user->addresses ?? null; + if (!$addresses) { + $user->is_fail_node = 1; + $user->node_status = 'Offline'; + $user->save(); + } else if (count($addresses) > 0) { + $hasNotFailNode = $hasNotOfflineStatus = false; + foreach ($addresses as $address) { + if ($address->is_fail_node != 1) { + $hasNotFailNode = true; + } + if ($address->node_status != 'Offline') { + $hasNotOfflineStatus = true; + } + } + if (!$hasNotFailNode) { + $user->is_fail_node = 1; + $user->node_status = 'Offline'; + $user->save(); + } else if (!$hasNotOfflineStatus) { + $user->node_status = 'Offline'; + $user->save(); + } + } + } + } } public function updateUptime() @@ -142,69 +163,64 @@ public function updateUptime() public function updateRank() { - $slide_value_uptime = 20; - $slide_value_update_responsiveness = 20; - $slide_value_delegotors = 20; - $slide_value_stake_amount = 20; - $slide_delegation_rate = 20; + $slide_value_uptime = $slide_value_update_responsiveness = $slide_value_delegotors = $slide_value_stake_amount = $slide_delegation_rate = 20; $max_uptime = Node::max('uptime'); $max_uptime = $max_uptime * 100; $max_delegators = ModelsNodeInfo::max('delegators_count'); $max_stake_amount = ModelsNodeInfo::max('total_staked_amount'); - DB::table('users')->update(['rank' => null]); - - $users = User::with(['metric'])->where('role', 'member') - ->leftJoin('node_info', 'users.public_address_node', '=', 'node_info.node_address') - ->where('banned', 0) - ->whereNotNull('users.public_address_node') - ->select([ - 'users.*', - 'node_info.delegation_rate', - 'node_info.delegators_count', - 'node_info.total_staked_amount', - ]) - ->get(); - - foreach ($users as $user) { - $latest = Node::where('node_address', strtolower($user->public_address_node))->whereNotnull('protocol_version')->orderBy('created_at', 'desc')->first(); - if (!$latest) { - $latest = new Node(); - } - $delegation_rate = $user->delegation_rate ? $user->delegation_rate / 100 : 1; - if (!$user->metric && !$user->nodeInfo) { - $user->totalScore = null; + DB::table('user_addresses')->update(['rank' => null]); + $userAddresses = UserAddress::with(['user', 'user.metric', 'user.nodeInfo']) + ->leftJoin('node_info', 'user_addresses.public_address_node', '=', 'node_info.node_address') + ->select([ + 'user_addresses.*', + 'node_info.delegation_rate', + 'node_info.delegators_count', + 'node_info.total_staked_amount', + ]) + ->whereHas('user') + ->get(); + + foreach ($userAddresses as $userAddress) { + $latest = Node::where('node_address', strtolower($userAddress->public_address_node))->whereNotnull('protocol_version')->orderBy('created_at', 'desc')->first(); + if (!$latest) $latest = new Node(); + $delegation_rate = $userAddress->delegation_rate ? $userAddress->delegation_rate / 100 : 1; + if (!$userAddress->user->metric && !$userAddress->user->nodeInfo) { + $userAddress->totalScore = null; continue; } $latest_uptime_node = isset($latest->uptime) ? $latest->uptime * 100 : null; $latest_update_responsiveness_node = $latest->update_responsiveness ?? null; - $metric = $user->metric; - if (!$metric) { - $metric = new Metric(); - } + $metric = $userAddress->user->metric; + if (!$metric) $metric = new Metric(); + $latest_uptime_metric = $metric->uptime ? $metric->uptime : null; $latest_update_responsiveness_metric = $metric->update_responsiveness ? $metric->update_responsiveness : null; $latest_uptime = $latest_uptime_node ?? $latest_uptime_metric ?? 1; $latest_update_responsiveness = $latest_update_responsiveness_node ?? $latest_update_responsiveness_metric ?? 1; - $delegators_count = $user->delegators_count ? $user->nodeInfo->delegators_count : 0; - $total_staked_amount = $user->total_staked_amount ? $user->nodeInfo->total_staked_amount : 0; + $delegators_count = $userAddress->delegators_count ? $userAddress->user->nodeInfo->delegators_count : 0; + $total_staked_amount = $userAddress->total_staked_amount ? $userAddress->user->nodeInfo->total_staked_amount : 0; $uptime_score = ($slide_value_uptime * $latest_uptime) / 100; $update_responsiveness_score = ($slide_value_update_responsiveness * $latest_update_responsiveness) / 100; $dellegator_score = ($delegators_count / $max_delegators) * $slide_value_delegotors; - $satke_amount_score = ($total_staked_amount / $max_stake_amount) * $slide_value_stake_amount; + $stake_amount_score = ($total_staked_amount / $max_stake_amount) * $slide_value_stake_amount; $delegation_rate_score = ($slide_delegation_rate * (1 - $delegation_rate)) / 100; - $totalScore = $uptime_score + $update_responsiveness_score + $dellegator_score + $satke_amount_score + $delegation_rate_score; + $totalScore = $uptime_score + $update_responsiveness_score + $dellegator_score + $stake_amount_score + $delegation_rate_score; - $user->totalScore = $totalScore; + $userAddress->totalScore = $totalScore; } - $users = $users->sortByDesc('totalScore')->values(); - foreach ($users as $key => $user) { - User::where('id', $user->id)->update(['rank' => $key + 1]); + $userAddresses = $userAddresses->sortByDesc('totalScore')->values(); + foreach ($userAddresses as $key => $userAddress) { + UserAddress::where('id', $userAddress->id)->update(['rank' => $key + 1]); + $user = User::where('public_address_node', $userAddress->public_address_node)->first(); + if ($user) { + $user->rank = $key + 1; + $user->save(); + } } } - -} +} \ No newline at end of file diff --git a/app/Console/Helper.php b/app/Console/Helper.php index 11f414c5..ac3e1250 100644 --- a/app/Console/Helper.php +++ b/app/Console/Helper.php @@ -17,12 +17,6 @@ class Helper { - /** - * Acquire casper account info standard on a single valdator view basis - * - * @param string $vid valid validator ID - * @return void automatically places retrieved account info standard data in DB by user's validator ID - */ public static function getAccountInfoStandard($user) { $vid = $user->public_address_node ?? ''; @@ -30,7 +24,7 @@ public static function getAccountInfoStandard($user) $pseudonym = $user->pseudonym ?? null; $THIS_SEENA_API_KEY = getenv('SEENA_API_KEY'); - + $response = Http::withHeaders([ 'Authorization' => "token $THIS_SEENA_API_KEY", ])->withOptions([ @@ -48,35 +42,22 @@ public static function getAccountInfoStandard($user) $blockchain_logo = $json->message->owner->branding->logo->png_256 ?? null; $profile = Profile::where('user_id', $uid)->first(); - - if($profile && $json) { - if($blockchain_name) { - $profile->blockchain_name = $blockchain_name; - } - - if($blockchain_desc) { - $profile->blockchain_desc = $blockchain_desc; - } - - if( - $blockchain_logo && - $user->avatar == null - ) { + + if ($profile && $json) { + if ($blockchain_name) $profile->blockchain_name = $blockchain_name; + if ($blockchain_desc) $profile->blockchain_desc = $blockchain_desc; + if ($blockchain_logo && $user->avatar == null) { $user->avatar = $blockchain_logo; $user->save(); } - + $profile->save(); $shufti_profile = Shuftipro::where('user_id', $uid)->first(); - if( - $shufti_profile && - $shufti_profile->status == 'approved' && - $pseudonym - ) { + if ($shufti_profile && $shufti_profile->status == 'approved' && $pseudonym) { $shuft_status = $shufti_profile->status; $reference_id = $shufti_profile->reference_id; - $hash = md5($pseudonym.$reference_id.$shuft_status); + $hash = md5($pseudonym . $reference_id . $shuft_status); $profile->casper_association_kyc_hash = $hash; $profile->save(); } @@ -127,32 +108,29 @@ public static function getNodeInfo($user) SELECT MAX(uptime) as uptime FROM node_info ) AS results ;"); - $max_uptime = $max_uptime[0]->max_uptime ?? 0; + $max_uptime = $max_uptime[0]->max_uptime ?? 0; $latest = Node::where('node_address', strtolower($user->public_address_node)) ->whereNotnull('protocol_version') ->orderBy('created_at', 'desc') ->first(); - if (!$latest) { - $latest = new Node(); - } + if (!$latest) $latest = new Node(); + $latest_block_height = $latest->block_height ?? null; $latest_update_responsiveness = $latest->update_responsiveness ?? null; $latest_peers = $latest->peers ?? null; $metric = Metric::where('user_id', $user->id)->first(); - if (!$metric) { - $metric = new Metric(); - } + if (!$metric) $metric = new Metric(); + $metric_uptime = $metric->uptime ?? null; $metric_block_height = $metric->block_height_average ? ($max_block_height - $metric->block_height_average) : null; $metric_update_responsiveness = $metric->update_responsiveness ?? null; $metric_peers = $metric->peers ?? null; $nodeInfo = NodeInfo::where('node_address', strtolower($user->public_address_node))->first(); - if (!$nodeInfo) { - $nodeInfo = new NodeInfo(); - } + if (!$nodeInfo) $nodeInfo = new NodeInfo(); + $latest_uptime = $nodeInfo->uptime ?? null; $nodeInfo_uptime = $nodeInfo->uptime ?? null; $nodeInfo_block_height = $nodeInfo->block_height ?? null; @@ -199,15 +177,10 @@ public static function getNodeInfo($user) return $metric; } - /** - * The attributes that are mass assignable. - * - * @var array - */ public static function paginate($items, $perPage = 5, $page = null, $options = []) { $page = $page ?: (Paginator::resolveCurrentPage() ?: 1); $items = $items instanceof Collection ? $items : Collection::make($items); return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options); } -} +} \ No newline at end of file diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index d476379e..c6c45b75 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -47,7 +47,7 @@ protected function schedule(Schedule $schedule) ->everyThirtyMinutes() ->runInBackground(); $schedule->command('node-info') - ->everyThirtyMinutes() + ->everyFifteenMinutes() ->runInBackground(); $schedule->command('refresh:address') ->everyFiveMinutes() @@ -69,7 +69,6 @@ protected function schedule(Schedule $schedule) protected function commands() { $this->load(__DIR__ . '/Commands'); - require base_path('routes/console.php'); } } diff --git a/app/Http/Controllers/Api/V1/AdminController.php b/app/Http/Controllers/Api/V1/AdminController.php index 6e688fed..c13b06cd 100644 --- a/app/Http/Controllers/Api/V1/AdminController.php +++ b/app/Http/Controllers/Api/V1/AdminController.php @@ -37,6 +37,7 @@ use App\Models\ShuftiproTemp; use App\Models\TokenPrice; use App\Models\User; +use App\Models\UserAddress; use App\Models\VerifyUser; use App\Models\Vote; use App\Models\VoteResult; @@ -80,17 +81,13 @@ public function getUsers(Request $request) $status = 'Not Verified'; if ($user->profile && $user->profile->status == 'approved') { $status = 'Verified'; - if ($user->profile->extra_status) { + if ($user->profile->extra_status) $status = $user->profile->extra_status; - } } $user->membership_status = $status; } - if ($sort_direction == 'desc') { - $users = $users->sortByDesc($sort_key)->values(); - } else { - $users = $users->sortBy($sort_key)->values(); - } + if ($sort_direction == 'desc') $users = $users->sortByDesc($sort_key)->values(); + else $users = $users->sortBy($sort_key)->values(); $users = Helper::paginate($users, $limit, $request->page); $users = $users->toArray(); $users['data'] = (collect($users['data'])->values()); @@ -100,17 +97,15 @@ public function getUsers(Request $request) public function getUserDetail($id) { $user = User::where('id', $id)->first(); - if (!$user || $user->role == 'admin') { + if (!$user || $user->role == 'admin') return $this->errorResponse(__('api.error.not_found'), Response::HTTP_NOT_FOUND); - } $user = $user->load(['profile', 'shuftipro', 'shuftiproTemp']); - + $status = 'Not Verified'; if ($user->profile && $user->profile->status == 'approved') { $status = 'Verified'; - if ($user->profile->extra_status) { + if ($user->profile->extra_status) $status = $user->profile->extra_status; - } } $user->membership_status = $status; $user->metric = Helper::getNodeInfo($user); @@ -123,19 +118,18 @@ public function infoDashboard(Request $request) $timeframe_comments = $request->timeframe_comments ?? 'last_7days'; $timeframe_discussions = $request->timeframe_discussions ?? 'last_7days'; // last_24hs, last_7days, last_30days, last_year - if ($timeframe_perk == 'last_24hs') { + if ($timeframe_perk == 'last_24hs') $timeframe_perk = Carbon::now('UTC')->subHours(24); - } else if ($timeframe_perk == 'last_30days') { + else if ($timeframe_perk == 'last_30days') $timeframe_perk = Carbon::now('UTC')->subDays(30); - } else if ($timeframe_perk == 'last_year') { + else if ($timeframe_perk == 'last_year') $timeframe_perk = Carbon::now('UTC')->subYear(); - } else { + else $timeframe_perk = Carbon::now('UTC')->subDays(7); - } - if ($timeframe_comments == 'last_24hs') { + if ($timeframe_comments == 'last_24hs') $timeframe_comments = Carbon::now('UTC')->subHours(24); - } else if ($timeframe_comments == 'last_30days') { + else if ($timeframe_comments == 'last_30days') { $timeframe_comments = Carbon::now('UTC')->subDays(30); } else if ($timeframe_comments == 'last_year') { $timeframe_comments = Carbon::now('UTC')->subYear(); @@ -289,7 +283,7 @@ public function submitBallot(Request $request) $start = Carbon::createFromFormat("Y-m-d H:i:s", Carbon::now('UTC'), "UTC"); $now = Carbon::now('UTC'); $timeEnd = $start->addMinutes($mins); - + $endTime = $request->end_date . ' ' . $request->end_time; $endTimeCarbon = Carbon::createFromFormat('Y-m-d H:i:s', $endTime, 'EST'); $endTimeCarbon->setTimezone('UTC'); @@ -1178,9 +1172,8 @@ public function updateMonitoringCriteria($type, Request $request) // 'system_check_value' => 'required|integer', ]); - if ($validator->fails()) { + if ($validator->fails()) return $this->validateResponse($validator->errors()); - } $record->warning_level = $request->warning_level; $record->probation_start = $request->probation_start; @@ -1204,9 +1197,7 @@ public function updateLockRules(Request $request, $id) 'is_lock' => 'required|boolean' ]); - if ($validator->fails()) { - return $this->validateResponse($validator->errors()); - } + if ($validator->fails()) return $this->validateResponse($validator->errors()); $rule = LockRules::where('id', $id)->first(); @@ -1222,7 +1213,6 @@ public function getLockRules() ->orderBy('id', 'ASC')->select(['id', 'screen', 'is_lock'])->get(); $ruleStatusIsPoor = LockRules::where('type', 'status_is_poor') ->orderBy('id', 'ASC')->select(['id', 'screen', 'is_lock'])->get(); - $data = [ 'kyc_not_verify' => $ruleKycNotVerify, 'status_is_poor' => $ruleStatusIsPoor, @@ -1234,20 +1224,20 @@ public function getListNodes(Request $request) { $limit = $request->limit ?? 50; $node_failing = $request->node_failing ?? ''; - $nodes = User::select([ - 'id as user_id', - 'public_address_node', - 'is_fail_node', - 'rank', + + $nodes = UserAddress::select([ + 'user_addresses.user_id as user_id', + 'user_addresses.public_address_node as public_address_node', + 'user_addresses.is_fail_node as is_fail_node', + 'user_addresses.rank as rank', ]) - ->where('banned', 0) - ->whereNotNull('public_address_node') + ->join('users', 'users.id', '=', 'user_addresses.user_id') + ->where('users.banned', 0) + ->whereNotNull('user_addresses.public_address_node') ->where(function ($query) use ($node_failing) { - if ($node_failing == 1) { - $query->where('is_fail_node', 1); - } + if ($node_failing == 1) $query->where('user_addresses.is_fail_node', 1); }) - ->orderBy('rank', 'asc') + ->orderBy('user_addresses.rank', 'asc') ->paginate($limit); return $this->successResponse($nodes); @@ -1259,17 +1249,6 @@ public function getGraphInfo(Request $request) $user = Auth::user(); $graphDataDay = $graphDataWeek = $graphDataMonth = $graphDataYear = []; - /* - $graphData = []; - $items = TokenPrice::orderBy('created_at', 'desc')->limit(100)->get(); - if ($items && count($items)) { - foreach ($items as $item) { - $name = strtotime($item->created_at); - $graphData[$name] = number_format($item->price, 4); - } - } - */ - $timeDay = Carbon::now('UTC')->subHours(24); $timeWeek = Carbon::now('UTC')->subDays(7); $timeMonth = Carbon::now('UTC')->subDays(30); @@ -1315,9 +1294,6 @@ public function getGraphInfo(Request $request) ]); } - /** - * verify file casper singer - */ public function uploadMembershipFile(Request $request) { try { @@ -1326,9 +1302,8 @@ public function uploadMembershipFile(Request $request) 'file' => 'required|mimes:pdf,docx,doc,txt,rtf|max:100000', ]); - if ($validator->fails()) { + if ($validator->fails()) return $this->validateResponse($validator->errors()); - } $filenameWithExt = $request->file('file')->getClientOriginalName(); //Get just filename @@ -1356,7 +1331,6 @@ public function uploadMembershipFile(Request $request) 'SourceFile' => $request->file('file') ]); - // $ObjectURL = 'https://'.getenv('AWS_BUCKET').'.s3.amazonaws.com/'.$fileNameToStore; $ObjectURL = $s3result['ObjectURL'] ?? getenv('SITE_URL') . '/not-found'; MembershipAgreementFile::where('id', '>', 0)->delete(); $membershipAgreementFile = new MembershipAgreementFile(); @@ -1376,4 +1350,4 @@ public function getMembershipFile() $membershipAgreementFile = MembershipAgreementFile::first(); return $this->successResponse($membershipAgreementFile); } -} +} \ No newline at end of file diff --git a/app/Http/Controllers/Api/V1/MetricController.php b/app/Http/Controllers/Api/V1/MetricController.php index f4a7bb09..770172fb 100644 --- a/app/Http/Controllers/Api/V1/MetricController.php +++ b/app/Http/Controllers/Api/V1/MetricController.php @@ -9,6 +9,7 @@ use App\Models\Node; use App\Models\NodeInfo; use App\Models\User; +use App\Models\UserAddress; use App\Models\Setting; use Illuminate\Http\Request; @@ -20,9 +21,12 @@ class MetricController extends Controller { - public function getMetric() + public function getMetric(Request $request) { $user = auth()->user(); + $public_address_node = $request->get('public_address_node'); + if (!$public_address_node) $public_address_node = $user->public_address_node; + $max_update_responsiveness = DB::select("SELECT max(update_responsiveness) as max_update_responsiveness FROM ( SELECT MAX(update_responsiveness) as update_responsiveness FROM metric @@ -48,28 +52,22 @@ public function getMetric() SELECT MAX(uptime) as uptime FROM node_info ) AS results ;"); - $max_uptime = $max_uptime[0]->max_uptime ?? 0; - $latest = Node::where('node_address', strtolower($user->public_address_node))->whereNotnull('protocol_version')->orderBy('created_at', 'desc')->first(); - if (!$latest) { - $latest = new Node(); - } + $max_uptime = $max_uptime[0]->max_uptime ?? 0; + $latest = Node::where('node_address', strtolower($public_address_node))->whereNotnull('protocol_version')->orderBy('created_at', 'desc')->first(); + if (!$latest) $latest = new Node(); $latest_block_height = $latest->block_height ?? null; $latest_update_responsiveness = $latest->update_responsiveness ?? null; $latest_peers = $latest->peers ?? null; $metric = Metric::where('user_id', $user->id)->first(); - if (!$metric) { - $metric = new Metric(); - } + if (!$metric) $metric = new Metric(); $metric_uptime = $metric->uptime ?? null; $metric_block_height = $metric->block_height_average ? ($max_block_height - $metric->block_height_average) : null; $metric_update_responsiveness = $metric->update_responsiveness ?? null; $metric_peers = $metric->peers ?? null; - $nodeInfo = NodeInfo::where('node_address', strtolower($user->public_address_node))->first(); - if (!$nodeInfo) { - $nodeInfo = new NodeInfo(); - } + $nodeInfo = NodeInfo::where('node_address', strtolower($public_address_node))->first(); + if (!$nodeInfo) $nodeInfo = new NodeInfo(); $latest_uptime = $nodeInfo->uptime ?? null; $nodeInfo_uptime = $nodeInfo->uptime ?? null; $nodeInfo_block_height = $nodeInfo->block_height ?? null; @@ -80,7 +78,7 @@ public function getMetric() $metric->avg_block_height_average = $nodeInfo_block_height ?? $metric_block_height; $metric->avg_update_responsiveness = $nodeInfo_update_responsiveness ?? $metric_update_responsiveness; $metric->avg_peers = $nodeInfo_peers ?? $metric_peers; - + $metric->max_peers = $max_peers; $metric->max_update_responsiveness = $max_update_responsiveness; $metric->max_block_height_average = $max_block_height; @@ -89,26 +87,30 @@ public function getMetric() $metric->peers = $latest_peers ?? $metric_peers; $metric->update_responsiveness = $latest_update_responsiveness ?? $metric_update_responsiveness; $metric->block_height_average = $latest_block_height ?? $metric_block_height; - $metric->uptime = $latest_uptime ?? $metric_uptime; + $metric->uptime = $latest_uptime ?? $metric_uptime; $monitoringCriteria = MonitoringCriteria::get(); - $nodeInfo = NodeInfo::where('node_address', strtolower($user->public_address_node))->first(); + $nodeInfo = NodeInfo::where('node_address', strtolower($public_address_node))->first(); + $userAddress = UserAddress::where('public_address_node', strtolower($public_address_node)) + ->where('user_id', $user->id) + ->first(); $rank = $user->rank; - $totalCount = User::select([ - 'id as user_id', - 'public_address_node', - 'is_fail_node', - 'rank', + if ($userAddress) $rank = $userAddress->rank; + + $totalCount = UserAddress::select([ + 'users.id as user_id', + 'user_addresses.public_address_node', + 'user_addresses.is_fail_node', + 'user_addresses.rank' ]) - ->where('banned', 0) - ->whereNotNull('public_address_node') - ->get() - ->count(); - - $delegators = 0; - $stake_amount = 0; - $self_stake_amount = 0; + ->join('users', 'users.id', '=', 'user_addresses.user_id') + ->where('users.banned', 0) + ->whereNotNull('user_addresses.public_address_node') + ->get() + ->count(); + + $delegators = $stake_amount = $self_stake_amount = 0; if ($nodeInfo) { $delegators = $nodeInfo->delegators_count; $stake_amount = $nodeInfo->total_staked_amount; @@ -125,12 +127,9 @@ public function getMetric() $metric['monitoring_criteria'] = $monitoringCriteria; $setting = Setting::where('name', 'peers')->first(); - if ($setting) { - $metric['peers_setting'] = (int) $setting->value; - } else { - $metric['peers_setting'] = 0; - } - + if ($setting) $metric['peers_setting'] = (int) $setting->value; + else $metric['peers_setting'] = 0; + return $this->successResponse($metric); } @@ -139,30 +138,21 @@ public function updateMetric(Request $request, $id) $validator = Validator::make($request->all(), [ 'uptime' => 'nullable|numeric|between:0,100', ]); - if ($validator->fails()) { - return $this->validateResponse($validator->errors()); - } + if ($validator->fails()) return $this->validateResponse($validator->errors()); $user = User::where('id', $id)->where('role', 'member')->first(); - if (!$user) { - return $this->errorResponse('User not found', Response::HTTP_BAD_REQUEST); - } + if (!$user) return $this->errorResponse('User not found', Response::HTTP_BAD_REQUEST); + $metric = Metric::where('user_id', $id)->first(); - if (!$metric) { - $metric = new Metric(); - } - if (isset($request->uptime) && $request->uptime != null) { + if (!$metric) $metric = new Metric(); + if (isset($request->uptime) && $request->uptime != null) $metric->uptime = $request->uptime; - } - if (isset($request->block_height_average) && $request->block_height_average != null) { + if (isset($request->block_height_average) && $request->block_height_average != null) $metric->block_height_average = $request->block_height_average; - } - if (isset($request->update_responsiveness) && $request->update_responsiveness != null) { + if (isset($request->update_responsiveness) && $request->update_responsiveness != null) $metric->update_responsiveness = $request->update_responsiveness; - } - if (isset($request->peers) && $request->peers != null) { + if (isset($request->peers) && $request->peers != null) $metric->peers = $request->peers; - } $metric->user_id = $id; $metric->save(); return $this->successResponse($metric); @@ -171,9 +161,7 @@ public function updateMetric(Request $request, $id) public function getMetricUser($id) { $user = User::find($id); - if (!$user) { - return $this->successResponse([]); - } + if (!$user) return $this->successResponse([]); $max_update_responsiveness = DB::select("SELECT max(update_responsiveness) as max_update_responsiveness FROM ( @@ -200,31 +188,27 @@ public function getMetricUser($id) SELECT MAX(uptime) as uptime FROM node_info ) AS results ;"); - $max_uptime = $max_uptime[0]->max_uptime ?? 0; + $max_uptime = $max_uptime[0]->max_uptime ?? 0; $latest = Node::where('node_address', strtolower($user->public_address_node)) ->whereNotnull('protocol_version') ->orderBy('created_at', 'desc') ->first(); - if (!$latest) { - $latest = new Node(); - } + if (!$latest) $latest = new Node(); $latest_block_height = $latest->block_height ?? null; $latest_update_responsiveness = $latest->update_responsiveness ?? null; $latest_peers = $latest->peers ?? null; $metric = Metric::where('user_id', $user->id)->first(); - if (!$metric) { - $metric = new Metric(); - } + if (!$metric) $metric = new Metric(); + $metric_uptime = $metric->uptime ?? null; $metric_block_height = $metric->block_height_average ? ($max_block_height - $metric->block_height_average) : null; $metric_update_responsiveness = $metric->update_responsiveness ?? null; $metric_peers = $metric->peers ?? null; $nodeInfo = NodeInfo::where('node_address', strtolower($user->public_address_node))->first(); - if (!$nodeInfo) { - $nodeInfo = new NodeInfo(); - } + if (!$nodeInfo) $nodeInfo = new NodeInfo(); + $latest_uptime = $nodeInfo->uptime ?? null; $nodeInfo_uptime = $nodeInfo->uptime ?? null; $nodeInfo_block_height = $nodeInfo->block_height ?? null; @@ -250,7 +234,8 @@ public function getMetricUser($id) $nodeInfo = NodeInfo::where('node_address', strtolower($user->public_address_node))->first(); $rank = $user->rank; - $totalCount = User::select([ + + $totalCount = User::select([ 'id as user_id', 'public_address_node', 'is_fail_node', @@ -261,9 +246,7 @@ public function getMetricUser($id) ->get() ->count(); - $delegators = 0; - $stake_amount = 0; - $self_stake_amount = 0; + $delegators = $stake_amount = $self_stake_amount = 0; if ($nodeInfo) { $delegators = $nodeInfo->delegators_count; $stake_amount = $nodeInfo->total_staked_amount; @@ -282,20 +265,18 @@ public function getMetricUser($id) return $this->successResponse($metric); } - public function getMetricUserOld($id) - { - $metric = Metric::where('user_id', $id)->first(); - if (!$metric) { - return $this->successResponse([]); - } - return $this->successResponse($metric); - } - public function getMetricUserByNodeName($node) { $node = strtolower($node); - $user = User::where('public_address_node', $node)->first(); - if ($user) { + $userAddress = UserAddress::with('user') + ->has('user') + ->where('public_address_node', $node) + ->first(); + + if ($userAddress && isset($userAddress->user) && $userAddress->user) { + $user = $userAddress->user; + $public_address_node = strtolower($userAddress->public_address_node); + $max_update_responsiveness = DB::select("SELECT max(update_responsiveness) as max_update_responsiveness FROM ( SELECT MAX(update_responsiveness) as update_responsiveness FROM metric @@ -323,27 +304,23 @@ public function getMetricUserByNodeName($node) ;"); $max_uptime = $max_uptime[0]->max_uptime ?? 0; - $latest = Node::where('node_address', strtolower($user->public_address_node))->whereNotnull('protocol_version')->orderBy('created_at', 'desc')->first(); - if (!$latest) { - $latest = new Node(); - } + $latest = Node::where('node_address', strtolower($public_address_node))->whereNotnull('protocol_version')->orderBy('created_at', 'desc')->first(); + if (!$latest) $latest = new Node(); + $latest_block_height = $latest->block_height ?? null; $latest_update_responsiveness = $latest->update_responsiveness ?? null; $latest_peers = $latest->peers ?? null; - + $metric = Metric::where('user_id', $user->id)->first(); - if (!$metric) { - $metric = new Metric(); - } + if (!$metric) $metric = new Metric(); $metric_uptime = $metric->uptime ?? null; $metric_block_height = $metric->block_height_average ? ($max_block_height - $metric->block_height_average) : null; $metric_update_responsiveness = $metric->update_responsiveness ?? null; $metric_peers = $metric->peers ?? null; - $nodeInfo = NodeInfo::where('node_address', strtolower($user->public_address_node))->first(); - if (!$nodeInfo) { - $nodeInfo = new NodeInfo(); - } + $nodeInfo = NodeInfo::where('node_address', strtolower($public_address_node))->first(); + if (!$nodeInfo) $nodeInfo = new NodeInfo(); + $latest_uptime = $nodeInfo->uptime ?? null; $nodeInfo_uptime = $nodeInfo->uptime ?? null; $nodeInfo_block_height = $nodeInfo->block_height ?? null; @@ -362,12 +339,12 @@ public function getMetricUserByNodeName($node) $metric->peers = $latest_peers ?? $metric_peers; $metric->update_responsiveness = $latest_update_responsiveness ?? $metric_update_responsiveness; - $metric->block_height_average = $latest_block_height ?? $metric_block_height; + $metric->block_height_average = $latest_block_height ?? $metric_block_height; $metric->uptime = $latest_uptime ?? $metric_uptime; $monitoringCriteria = MonitoringCriteria::get(); - $nodeInfo = NodeInfo::where('node_address', strtolower($user->public_address_node))->first(); - $rank = $user->rank; + $nodeInfo = NodeInfo::where('node_address', strtolower($public_address_node))->first(); + $rank = $userAddress->rank; $delegators = 0; $stake_amount = 0; $self_stake_amount = 0; diff --git a/app/Http/Controllers/Api/V1/UserController.php b/app/Http/Controllers/Api/V1/UserController.php index e78acfc9..45d0685f 100644 --- a/app/Http/Controllers/Api/V1/UserController.php +++ b/app/Http/Controllers/Api/V1/UserController.php @@ -36,6 +36,7 @@ use App\Models\Shuftipro; use App\Models\ShuftiproTemp; use App\Models\User; +use App\Models\UserAddress; use App\Models\VerifyUser; use App\Models\Vote; use App\Models\VoteResult; @@ -76,18 +77,7 @@ class UserController extends Controller private $profileRepo; private $ownerNodeRepo; - /* Create a new controller instance. - * - * @param UserRepository $userRepo userRepo - * - * @return void - */ - public function __construct( - UserRepository $userRepo, - VerifyUserRepository $verifyUserRepo, - ProfileRepository $profileRepo, - OwnerNodeRepository $ownerNodeRepo - ) { + public function __construct(UserRepository $userRepo, VerifyUserRepository $verifyUserRepo, ProfileRepository $profileRepo, OwnerNodeRepository $ownerNodeRepo) { $this->userRepo = $userRepo; $this->verifyUserRepo = $verifyUserRepo; $this->profileRepo = $profileRepo; @@ -102,11 +92,10 @@ public function getMemberCountInfo() { $data['total'] = User::count(); $data['verified'] = User::join('profile', 'profile.user_id', '=', 'users.id') - ->where('profile.status', 'approved') - ->whereNotNull('users.public_address_node') - ->get() - ->count(); - + ->where('profile.status', 'approved') + ->whereNotNull('users.public_address_node') + ->get() + ->count(); return $this->successResponse($data); } @@ -127,7 +116,6 @@ public function getVerifiedMembers() { ->where('profile.status', 'approved') ->whereNotNull('users.public_address_node') ->paginate($limit); - return $this->successResponse($data); } @@ -146,9 +134,7 @@ public function updateShuftiproStatus() { $record = Shuftipro::where('reference_id', $reference_id)->first(); $recordTemp = ShuftiproTemp::where('reference_id', $reference_id)->first(); - if (!$recordTemp) { - return; - } + if (!$recordTemp) return; if ($record) { if (isset($data['event']) && $data['event'] == 'request.deleted') { @@ -198,9 +184,6 @@ public function updateShuftiproStatus() { } } - /** - * change email - */ public function changeEmail(ChangeEmailRequest $request) { try { @@ -218,32 +201,24 @@ public function changeEmail(ChangeEmailRequest $request) 'created_at' => now() ] ); - if ($userVerify) { - Mail::to($request->email)->send(new UserVerifyMail($code)); - } + if ($userVerify) Mail::to($request->email)->send(new UserVerifyMail($code)); DB::commit(); return $this->metaSuccess(); } catch (\Exception $ex) { return $this->errorResponse(__('api.error.internal_error'), Response::HTTP_INTERNAL_SERVER_ERROR); } } - /** - * Change password - */ + public function changePassword(ChangePasswordRequest $request) { $user = auth()->user(); - if (Hash::check($request->new_password, $user->password)) { + if (Hash::check($request->new_password, $user->password)) return $this->errorResponse(__('api.error.not_same_current_password'), Response::HTTP_BAD_REQUEST); - } $newPassword = bcrypt($request->new_password); $user->update(['password' => $newPassword]); return $this->metaSuccess(); } - /** - * Get user profile - */ public function getProfile() { $user = auth()->user()->load(['profile', 'permissions', 'shuftipro', 'shuftiproTemp']); @@ -252,18 +227,12 @@ public function getProfile() return $this->successResponse($user); } - /** - * loggout user - */ public function logout() { auth()->user()->token()->revoke(); return $this->metaSuccess(); } - /** - * verify file casper singer - */ public function uploadLetter(Request $request) { try { @@ -272,13 +241,11 @@ public function uploadLetter(Request $request) 'file' => 'required|mimes:pdf,docx,doc,txt,rtf|max:20000', ]); - if ($validator->fails()) { - return $this->validateResponse($validator->errors()); - } + if ($validator->fails()) return $this->validateResponse($validator->errors()); $user = auth()->user(); $filenameWithExt = $request->file('file')->getClientOriginalName(); - //Get just filename + // Get just filename $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); // Get just ext $extension = $request->file('file')->getClientOriginalExtension(); @@ -316,9 +283,6 @@ public function uploadLetter(Request $request) } } - /** - * Send Hellosign Request - */ public function sendHellosignRequest() { $user = auth()->user(); @@ -338,9 +302,7 @@ public function sendHellosignRequest() 'https://stage.membersbackend.casper.network/', ]; - if (in_array(env('APP_URL'), $whitelist)) { - $request->enableTestMode(); - } + if (in_array(env('APP_URL'), $whitelist)) $request->enableTestMode(); $request->setTemplateId($template_id); $request->setSubject('Member Agreement'); @@ -365,9 +327,8 @@ public function sendHellosignRequest() $user->update(['signature_request_id' => $signature_request_id]); $emailerData = EmailerHelper::getEmailerData(); - if ($user->letter_verified_at && $user->signature_request_id && $user->node_verified_at) { + if ($user->letter_verified_at && $user->signature_request_id && $user->node_verified_at) EmailerHelper::triggerUserEmail($user->email, 'Congratulations', $emailerData, $user); - } return $this->successResponse([ 'signature_request_id' => $signature_request_id, 'url' => $sign_url, @@ -376,36 +337,98 @@ public function sendHellosignRequest() return $this->errorResponse(__('Hellosign request fail'), Response::HTTP_BAD_REQUEST); } - /** - * submit node address - */ public function submitPublicAddress(SubmitPublicAddressRequest $request) { $user = auth()->user(); - $address = strtolower($request->public_address); $public_address_temp = (new ChecksumValidator())->do($address); $public_address = strtolower($address); $correct_checksum = (int) (new ChecksumValidator($public_address_temp))->do(); - if (!$correct_checksum) { + if (!$correct_checksum) return $this->errorResponse(__('Please provide valid address'), Response::HTTP_BAD_REQUEST); + + // User Check + $tempUser = User::where('public_address_node', $public_address)->first(); + if ($tempUser && $tempUser->id != $user->id) + return $this->errorResponse(__('The address is already used by other user'), Response::HTTP_BAD_REQUEST); + + // User Address Check + $tempUserAddress = UserAddress::where('public_address_node', $public_address)->first(); + if ($tempUserAddress && $tempUserAddress->user_id != $user->id) + return $this->errorResponse(__('The address is already used by other user'), Response::HTTP_BAD_REQUEST); + + if (!$tempUserAddress) { + $userAddress = new UserAddress; + $userAddress->user_id = $user->id; + $userAddress->public_address_node = $public_address; + $userAddress->save(); } + $user->update([ + 'has_address' => 1, + 'public_address_node' => $public_address, + ]); + + return $this->metaSuccess(); + } + + public function checkPublicAddress(SubmitPublicAddressRequest $request) + { + $user = auth()->user(); + $address = strtolower($request->public_address); + + $public_address_temp = (new ChecksumValidator())->do($address); + $public_address = strtolower($address); + + $correct_checksum = (int) (new ChecksumValidator($public_address_temp))->do(); + if (!$correct_checksum) + return $this->errorResponse(__('Please provide valid address'), Response::HTTP_BAD_REQUEST); + + // User Check $tempUser = User::where('public_address_node', $public_address)->first(); - if ($tempUser) { + if ($tempUser) return $this->errorResponse(__('The address is already used by other user'), Response::HTTP_BAD_REQUEST); - } - $user->update(['public_address_node' => $public_address]); + // User Address Check + $tempUserAddress = UserAddress::where('public_address_node', $public_address)->first(); + if ($tempUserAddress) + return $this->errorResponse(__('The address is already used by other user'), Response::HTTP_BAD_REQUEST); return $this->metaSuccess(); } - /** - * submit node address - */ + public function submitPublicAddress2(SubmitPublicAddressRequest $request) + { + $user = auth()->user(); + $address = strtolower($request->public_address); + + $public_address_temp = (new ChecksumValidator())->do($address); + $public_address = strtolower($address); + + $correct_checksum = (int) (new ChecksumValidator($public_address_temp))->do(); + if (!$correct_checksum) + return $this->errorResponse(__('Please provide valid address'), Response::HTTP_BAD_REQUEST); + + // User Check + $tempUser = User::where('public_address_node', $public_address)->first(); + if ($tempUser) + return $this->errorResponse(__('The address is already used by other user'), Response::HTTP_BAD_REQUEST); + + // User Address Check + $tempUserAddress = UserAddress::where('public_address_node', $public_address)->first(); + if ($tempUserAddress) + return $this->errorResponse(__('The address is already used by other user'), Response::HTTP_BAD_REQUEST); + + $userAddress = new UserAddress; + $userAddress->user_id = $user->id; + $userAddress->public_address_node = $public_address; + $userAddress->save(); + + return $this->metaSuccess(); + } + public function getMessageContent() { $user = auth()->user(); @@ -418,16 +441,92 @@ public function getMessageContent() }, $filename); } - /** - * verify file casper singer - */ + public function verifyFileCasperSigner2(VerifyFileCasperSignerRequest $request) + { + try { + $casperSigVerify = new CasperSigVerify(); + $user = auth()->user(); + $message = $user->message_content; + $public_validator_key = strtolower($request->address); + + $userRecord = User::where('public_address_node', $public_validator_key)->first(); + $userAddress = UserAddress::where('public_address_node', $public_validator_key)->first(); + + if ($userRecord || $userAddress) + return $this->errorResponse(__('Failed verification'), Response::HTTP_BAD_REQUEST); + + $file = $request->file; + + $name = $file->getClientOriginalName(); + $hexstring = $file->get(); + + if ($hexstring && $name == 'signature') { + $verified = $casperSigVerify->verify( + trim($hexstring), + $public_validator_key, + $message + ); + if ($verified) { + $filenamehash = md5(Str::random(10) . '_' . (string)time()); + + // S3 file upload + $S3 = new S3Client([ + 'version' => 'latest', + 'region' => getenv('AWS_DEFAULT_REGION'), + 'credentials' => [ + 'key' => getenv('AWS_ACCESS_KEY_ID'), + 'secret' => getenv('AWS_SECRET_ACCESS_KEY'), + ], + ]); + + $s3result = $S3->putObject([ + 'Bucket' => getenv('AWS_BUCKET'), + 'Key' => 'signatures/' . $filenamehash, + 'SourceFile' => $request->file('file') + ]); + + $ObjectURL = $s3result['ObjectURL'] ?? getenv('SITE_URL').'/not-found'; + + $userAddress = new UserAddress; + $userAddress->user_id = $user->id; + $userAddress->public_address_node = $public_validator_key; + $userAddress->signed_file = $ObjectURL; + $userAddress->node_verified_at = now(); + $userAddress->save(); + + $emailerData = EmailerHelper::getEmailerData(); + + EmailerHelper::triggerUserEmail($user->email, 'Your Node is Verified', $emailerData, $user); + if ($user->letter_verified_at && $user->signature_request_id && $userAddress->node_verified_at) + EmailerHelper::triggerUserEmail($user->email, 'Congratulations', $emailerData, $user); + return $this->metaSuccess(); + } else { + return $this->errorResponse(__('Failed verification'), Response::HTTP_BAD_REQUEST); + } + } + return $this->errorResponse(__('Failed verification'), Response::HTTP_BAD_REQUEST); + } catch (\Exception $ex) { + return $this->errorResponse(__('Failed verification'), Response::HTTP_BAD_REQUEST, $ex->getMessage()); + } + } + public function verifyFileCasperSigner(VerifyFileCasperSignerRequest $request) { try { $casperSigVerify = new CasperSigVerify(); $user = auth()->user(); $message = $user->message_content; - $public_validator_key = strtolower($user->public_address_node); + $public_validator_key = strtolower($request->address); + + $userRecord = User::where('id', $user->id) + ->where('public_address_node', $public_validator_key) + ->first(); + $userAddress = UserAddress::where('user_id', $user->id) + ->where('public_address_node', $public_validator_key) + ->first(); + if (!$userRecord || !$userAddress) + return $this->errorResponse(__('Failed verification'), Response::HTTP_BAD_REQUEST); + $file = $request->file; $name = $file->getClientOriginalName(); @@ -439,7 +538,6 @@ public function verifyFileCasperSigner(VerifyFileCasperSignerRequest $request) $public_validator_key, $message ); - // $verified = true; if ($verified) { $filenamehash = md5(Str::random(10) . '_' . (string)time()); @@ -455,22 +553,26 @@ public function verifyFileCasperSigner(VerifyFileCasperSignerRequest $request) $s3result = $S3->putObject([ 'Bucket' => getenv('AWS_BUCKET'), - 'Key' => 'signatures/'.$filenamehash, + 'Key' => 'signatures/' . $filenamehash, 'SourceFile' => $request->file('file') ]); - // $ObjectURL = 'https://'.getenv('AWS_BUCKET').'.s3.amazonaws.com/signatures/'.$filenamehash; $ObjectURL = $s3result['ObjectURL'] ?? getenv('SITE_URL').'/not-found'; + $user->signed_file = $ObjectURL; + $user->has_verified_address = 1; $user->node_verified_at = now(); $user->save(); + + $userAddress->signed_file = $ObjectURL; + $userAddress->node_verified_at = now(); + $userAddress->save(); + $emailerData = EmailerHelper::getEmailerData(); EmailerHelper::triggerUserEmail($user->email, 'Your Node is Verified', $emailerData, $user); - - if ($user->letter_verified_at && $user->signature_request_id && $user->node_verified_at) { + if ($user->letter_verified_at && $user->signature_request_id && $user->node_verified_at) EmailerHelper::triggerUserEmail($user->email, 'Congratulations', $emailerData, $user); - } return $this->metaSuccess(); } else { return $this->errorResponse(__('Failed verification'), Response::HTTP_BAD_REQUEST); @@ -482,9 +584,6 @@ public function verifyFileCasperSigner(VerifyFileCasperSignerRequest $request) } } - /** - * submit KYC - */ public function functionSubmitKYC(SubmitKYCRequest $request) { $user = auth()->user(); @@ -502,9 +601,6 @@ public function functionSubmitKYC(SubmitKYCRequest $request) return $this->metaSuccess(); } - /** - * verify owner node - */ public function verifyOwnerNode(Request $request) { $user = auth()->user(); @@ -515,9 +611,6 @@ public function verifyOwnerNode(Request $request) return $this->metaSuccess(); } - /** - * get Owner nodes - */ public function getOwnerNodes() { $user = auth()->user(); @@ -525,11 +618,8 @@ public function getOwnerNodes() foreach ($owners as $owner) { $email = $owner->email; $userOwner = User::where('email', $email)->first(); - if ($userOwner) { - $owner->kyc_verified_at = $userOwner->kyc_verified_at; - } else { - $owner->kyc_verified_at = null; - } + if ($userOwner) $owner->kyc_verified_at = $userOwner->kyc_verified_at; + else $owner->kyc_verified_at = null; } $data = []; $data['kyc_verified_at'] = $user->kyc_verified_at; @@ -550,9 +640,8 @@ public function resendEmailOwnerNodes(ResendEmailRequest $request) $resetUrl = $url . '/register-type'; Mail::to($email)->send(new AddNodeMail($resetUrl)); } - } else { + } else return $this->errorResponse('Email does not exist', Response::HTTP_BAD_REQUEST); - } return $this->successResponse(null); } @@ -564,9 +653,7 @@ public function saveShuftiproTemp(Request $request) $validator = Validator::make($request->all(), [ 'reference_id' => 'required' ]); - if ($validator->fails()) { - return $this->validateResponse($validator->errors()); - } + if ($validator->fails()) return $this->validateResponse($validator->errors()); $user_id = $user->id; $reference_id = $request->reference_id; @@ -589,9 +676,7 @@ public function deleteShuftiproTemp(Request $request) $validator = Validator::make($request->all(), [ 'reference_id' => 'required' ]); - if ($validator->fails()) { - return $this->validateResponse($validator->errors()); - } + if ($validator->fails()) return $this->validateResponse($validator->errors()); $user_id = $user->id; $reference_id = $request->reference_id; @@ -615,9 +700,7 @@ public function updateShuftiProTemp(Request $request) $validator = Validator::make($request->all(), [ 'reference_id' => 'required' ]); - if ($validator->fails()) { - return $this->validateResponse($validator->errors()); - } + if ($validator->fails()) return $this->validateResponse($validator->errors()); $user_id = $user->id; $reference_id = $request->reference_id; @@ -627,8 +710,8 @@ public function updateShuftiProTemp(Request $request) $profile->save(); } $record = ShuftiproTemp::where('user_id', $user_id) - ->where('reference_id', $reference_id) - ->first(); + ->where('reference_id', $reference_id) + ->first(); if ($record) { $record->status = 'booked'; $record->save(); @@ -649,15 +732,11 @@ public function getVotes(Request $request) if (!$sort_key) $sort_key = 'ballot.id'; if (!$sort_direction) $sort_direction = 'desc'; - if ($status != 'active' && $status != 'finish') { + if ($status != 'active' && $status != 'finish') return $this->errorResponse('Paramater invalid (status is active or finish)', Response::HTTP_BAD_REQUEST); - } - if ($status == 'active') { - $query = Ballot::where('status', 'active'); - } else { - $query = Ballot::where('status', '<>', 'active'); - } + if ($status == 'active') $query = Ballot::where('status', 'active'); + else $query = Ballot::where('status', '<>', 'active'); $data = $query->with('vote')->orderBy($sort_key, $sort_direction)->paginate($limit); return $this->successResponse($data); @@ -668,9 +747,8 @@ public function getVoteDetail($id) { $user = auth()->user(); $ballot = Ballot::with(['vote', 'voteResults.user', 'files'])->where('id', $id)->first(); - if (!$ballot) { + if (!$ballot) return $this->errorResponse('Not found ballot', Response::HTTP_BAD_REQUEST); - } foreach ($ballot->files as $file) { $ballotFileView = BallotFileView::where('ballot_file_id', $file->id)->where('user_id', $user->id)->first(); $file->is_viewed = $ballotFileView ? 1 : 0; @@ -684,18 +762,14 @@ public function vote($id, Request $request) { $user = auth()->user(); $vote = $request->vote; - if (!$vote || ($vote != 'for' && $vote != 'against')) { + if (!$vote || ($vote != 'for' && $vote != 'against')) return $this->errorResponse('Paramater invalid (vote is for or against)', Response::HTTP_BAD_REQUEST); - } $ballot = Ballot::where('id', $id)->first(); - if (!$ballot) { - return $this->errorResponse('Not found ballot', Response::HTTP_BAD_REQUEST); - } + if (!$ballot) return $this->errorResponse('Not found ballot', Response::HTTP_BAD_REQUEST); $voteResult = VoteResult::where('user_id', $user->id)->where('ballot_id', $ballot->id)->first(); if ($voteResult) { - if ($vote == $voteResult->type) { - return $this->metaSuccess(); - } else { + if ($vote == $voteResult->type) return $this->metaSuccess(); + else { $voteResult->type = $vote; $voteResult->updated_at = now(); if ($vote == 'for') { @@ -716,11 +790,10 @@ public function vote($id, Request $request) $voteResult->vote_id = $ballot->vote->id; $voteResult->type = $vote; $voteResult->save(); - if ($vote == 'for') { + if ($vote == 'for') $ballot->vote->for_value = $ballot->vote->for_value + 1; - } else { + else $ballot->vote->against_value = $ballot->vote->against_value + 1; - } $ballot->vote->result_count = $ballot->vote->result_count + 1; $ballot->vote->updated_at = now(); $ballot->vote->save(); @@ -732,13 +805,10 @@ public function submitViewFileBallot(Request $request, $fileId) { $user = auth()->user(); $ballotFile = BallotFile::where('id', $fileId)->first(); - if (!$ballotFile) { + if (!$ballotFile) return $this->errorResponse('Not found ballot file', Response::HTTP_BAD_REQUEST); - } $ballotFileView = BallotFileView::where('ballot_file_id', $ballotFile->id)->where('user_id', $user->id)->first(); - if ($ballotFileView) { - return $this->metaSuccess(); - } + if ($ballotFileView) return $this->metaSuccess(); $ballotFileView = new BallotFileView(); $ballotFileView->ballot_file_id = $ballotFile->id; $ballotFileView->ballot_id = $ballotFile->ballot_id; @@ -757,9 +827,8 @@ public function uploadAvatar(Request $request) 'avatar' => 'sometimes|mimes:jpeg,jpg,png,gif,webp|max:100000', ]); - if ($validator->fails()) { + if ($validator->fails()) return $this->validateResponse($validator->errors()); - } $user = auth()->user(); $filenameWithExt = $request->file('avatar')->getClientOriginalName(); @@ -792,21 +861,6 @@ public function uploadAvatar(Request $request) $user->avatar = $s3result['ObjectURL'] ?? getenv('SITE_URL') . '/not-found'; $user->save(); return $this->metaSuccess(); - - /* old - $filenameWithExt = $request->file('avatar')->getClientOriginalName(); - //Get just filename - $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); - // Get just ext - $extension = $request->file('avatar')->getClientOriginalExtension(); - // Filename to store - $fileNameToStore = $filename . '_' . time() . '.' . $extension; - // Upload Image - $path = $request->file('avatar')->storeAs('users/avatar', $fileNameToStore); - $user->avatar = $path; - $user->save(); - return $this->metaSuccess(); - */ } catch (\Exception $ex) { return $this->errorResponse(__('Failed upload avatar'), Response::HTTP_BAD_REQUEST, $ex->getMessage()); } @@ -816,7 +870,7 @@ public function getMembers(Request $request) { $search = $request->search; $limit = $request->limit ?? 50; - + $slide_value_uptime = $request->uptime ?? 0; $slide_value_update_responsiveness = $request->update_responsiveness ?? 0; $slide_value_delegotors = $request->delegators ?? 0; @@ -850,9 +904,7 @@ public function getMembers(Request $request) ->whereNotnull('protocol_version') ->orderBy('created_at', 'desc') ->first(); - if (!$latest) { - $latest = new Node(); - } + if (!$latest) $latest = new Node(); $user->status = isset($user->profile) && isset($user->profile->status) ? $user->profile->status : ''; @@ -868,9 +920,7 @@ public function getMembers(Request $request) $res = $res_nodeInfo ? $res_nodeInfo : ($res_node ? $res_node : ($res_metric ? $res_metric : 0)); $delegation_rate = isset($user->nodeInfo->delegation_rate) && $user->nodeInfo->delegation_rate ? $user->nodeInfo->delegation_rate / 100 : 1; - if ($delegation_rate > 1) { - $delegation_rate = 1; - } + if ($delegation_rate > 1) $delegation_rate = 1; $delegators_count = isset($user->nodeInfo->delegators_count) && $user->nodeInfo->delegators_count ? $user->nodeInfo->delegators_count : 0; $total_staked_amount = isset($user->nodeInfo->total_staked_amount) && $user->nodeInfo->total_staked_amount ? $user->nodeInfo->total_staked_amount : 0; @@ -879,7 +929,7 @@ public function getMembers(Request $request) $delegators_count_score = (float) ($delegators_count / $max_delegators) * $slide_value_delegotors; $total_staked_amount_score = (float) ($total_staked_amount / $max_stake_amount) * $slide_value_stake_amount; $res_score = (float) (($slide_value_update_responsiveness * $res) / 100); - + $user->uptime = $uptime; $user->delegation_rate = $delegation_rate; $user->delegators_count = $delegators_count; @@ -892,120 +942,20 @@ public function getMembers(Request $request) return $this->successResponse($users); } - public function getMembersOld(Request $request) - { - $search = $request->search; - $limit = $request->limit ?? 50; - $slide_value_uptime = $request->uptime ?? 0; - $slide_value_update_responsiveness = $request->update_responsiveness ?? 0; - $slide_value_delegotors = $request->delegators ?? 0; - $slide_value_stake_amount = $request->stake_amount ?? 0; - $slide_delegation_rate = $request->delegation_rate ?? 0; - - $max_uptime = Node::max('uptime'); - $max_uptime = $max_uptime * 100; - $max_delegators = NodeInfo::max('delegators_count'); - if($max_delegators < 1) $max_delegators = 1; - $max_stake_amount = NodeInfo::max('total_staked_amount'); - if($max_stake_amount < 1) $max_stake_amount = 1; - - $sort_key = $request->sort_key ?? ''; - $sort_direction = $request->sort_direction ?? ''; - if (!$sort_key) $sort_key = 'created_at'; - if (!$sort_direction) $sort_direction = 'desc'; - - $users = User::with(['metric']) - ->where('role', 'member') - ->leftJoin('node_info', 'users.public_address_node', '=', 'node_info.node_address') - ->leftJoin('profile', 'users.id', '=', 'profile.user_id') - ->where(function ($query) use ($search) { - if ($search) { - $query->where('users.first_name', 'like', '%' . $search . '%') - ->orWhere('users.last_name', 'like', '%' . $search . '%'); - } - }) - ->select([ - 'users.id', - 'users.created_at', - 'users.first_name', - 'users.last_name', - 'users.kyc_verified_at', - 'users.pseudonym', - 'profile.status', - 'node_info.uptime', - 'node_info.delegation_rate', - 'node_info.delegators_count', - 'node_info.total_staked_amount', - ]) - ->get(); - - foreach ($users as $user) { - if (!$user->metric && !$user->nodeInfo) { - $user->totalScore = 0; - continue; - } - - $latest = Node::where('node_address', strtolower($user->public_address_node)) - ->whereNotnull('protocol_version') - ->orderBy('created_at', 'desc') - ->first(); - if (!$latest) { - $latest = new Node(); - } - - $delegation_rate = $user->delegation_rate ? $user->delegation_rate / 100 : 1; - - $latest_uptime_node = isset($latest->uptime) ? $latest->uptime * 100 : null; - $latest_update_responsiveness_node = $latest->update_responsiveness ?? null; - $metric = $user->metric; - if (!$metric) { - $metric = new Metric(); - } - $latest_uptime_metric = $metric->uptime ? $metric->uptime : null; - $latest_update_responsiveness_metric = $metric->update_responsiveness ? $metric->update_responsiveness : null; - - $latest_uptime = $latest_uptime_node ?? $latest_uptime_metric ?? 1; - $latest_update_responsiveness = $latest_update_responsiveness_node ?? $latest_update_responsiveness_metric ?? 1; - - // $delegators_count = $user->delegators_count ? $user->nodeInfo->delegators_count : 0; - $delegators_count = $user->delegators_count ? $user->delegators_count : 0; - // $total_staked_amount = $user->total_staked_amount ? $user->nodeInfo->total_staked_amount : 0; - $total_staked_amount = $user->total_staked_amount ? $user->total_staked_amount : 0; - - $uptime_score = ($slide_value_uptime * $latest_uptime) / 100; - $update_responsiveness_score = ($slide_value_update_responsiveness * $latest_update_responsiveness) / 100; - $dellegator_score = ($delegators_count / $max_delegators) * $slide_value_delegotors; - $satke_amount_score = ($total_staked_amount / $max_stake_amount) * $slide_value_stake_amount; - $delegation_rate_score = ($slide_delegation_rate * (1 - $delegation_rate)) / 100; - $totalScore = $uptime_score + $update_responsiveness_score + $dellegator_score + $satke_amount_score + $delegation_rate_score; - - $user->totalScore = $totalScore; - $user->uptime = $user->uptime ? $user->uptime : $metric->uptime; - } - if ($sort_key == 'totalScore') { - $users = $users->sortByDesc('totalScore')->values(); - } else { - $users = $users->sortByDesc('created_at')->values(); - } - $users = Helper::paginate($users, $limit, $request->page); - return $this->successResponse($users); - } - public function getMemberDetail($id) { $user = User::where('id', $id)->first(); Helper::getAccountInfoStandard($user); - if (!$user || $user->role == 'admin') { + if (!$user || $user->role == 'admin') return $this->errorResponse(__('api.error.not_found'), Response::HTTP_NOT_FOUND); - } $user->metric = Helper::getNodeInfo($user); $response = $user->load(['profile']); unset($response->last_login_at); unset($response->last_login_ip_address); - if(isset($response->profile)) { + if (isset($response->profile)) { unset($response->profile->dob); unset($response->profile->address); unset($response->profile->city); @@ -1017,9 +967,8 @@ public function getMemberDetail($id) public function getCaKycHash($hash) { - if(!ctype_xdigit($hash)) { + if (!ctype_xdigit($hash)) return $this->errorResponse(__('api.error.not_found'), Response::HTTP_NOT_FOUND); - } $selection = DB::select(" SELECT a.casper_association_kyc_hash as proof_hash, b.reference_id, b.status, c.pseudonym @@ -1058,33 +1007,27 @@ public function getMyVotes(Request $request) public function checkCurrentPassword(Request $request) { $user = auth()->user(); - if (Hash::check($request->current_password, $user->password)) { + if (Hash::check($request->current_password, $user->password)) return $this->metaSuccess(); - } else { + else return $this->errorResponse(__('Invalid password'), Response::HTTP_BAD_REQUEST); - } } public function settingUser(Request $request) { $user = auth()->user(); - if ($request->new_password) { - $user->password = bcrypt($request->new_password); - } + if ($request->new_password) $user->password = bcrypt($request->new_password); if ($request->username) { $checkUsername = User::where('username', $request->username) ->where('username', '!=', $user->username) ->first(); - if ($checkUsername) { + if ($checkUsername) return $this->errorResponse(__('this username has already been taken'), Response::HTTP_BAD_REQUEST); - } $user->username = $request->username; } - if (isset($request->twoFA_login)) { - $user->twoFA_login = $request->twoFA_login; - } + if (isset($request->twoFA_login)) $user->twoFA_login = $request->twoFA_login; if ($request->email && $request->email != $user->email) { $emailParam = $request->email; @@ -1098,9 +1041,8 @@ public function settingUser(Request $request) $currentEmail = $user->email; $newEmail = $request->email; - if ($checkEmail) { + if ($checkEmail) return $this->errorResponse(__('this email has already been taken'), Response::HTTP_BAD_REQUEST); - } $user->new_email = $newEmail; // Current Email @@ -1241,19 +1183,30 @@ public function getLockRules() return $this->successResponse($data); } + public function getListNodesBy(Request $request) + { + $user = Auth::user(); + $addresses = UserAddress::where('user_id', $user->id)->orderBy('id', 'asc')->get(); + return $this->successResponse([ + 'addresses' => $addresses, + ]); + } + public function getListNodes(Request $request) { $limit = $request->limit ?? 50; - $nodes = User::select([ + + $nodes = UserAddress::select([ 'users.id as user_id', - 'users.public_address_node', - 'users.is_fail_node', 'users.pseudonym', - 'users.rank', + 'user_addresses.public_address_node', + 'user_addresses.is_fail_node', + 'user_addresses.rank', 'profile.blockchain_name', 'profile.blockchain_desc', ]) - ->leftjoin('profile', 'profile.user_id', '=', 'users.id') + ->leftJoin('users', 'users.id', '=', 'user_addresses.user_id') + ->leftJoin('profile', 'profile.user_id', '=', 'users.id') ->where('users.banned', 0) ->whereNotNull('users.public_address_node') ->orderBy('users.rank', 'asc') @@ -1316,9 +1269,7 @@ public function getChartEarningByNode($node) 'month' => $result_month, 'year' => $result_year, ]); - } else { - return $this->successResponse(null); - } + } else return $this->successResponse(null); } public function getMembershipFile() @@ -1377,9 +1328,7 @@ public function submitDonation(Request $request) 'message' => 'nullable|max:5000', ]); - if ($validator->fails()) { - return $this->validateResponse($validator->errors()); - } + if ($validator->fails()) return $this->validateResponse($validator->errors()); \Stripe\Stripe::setApiKey(env('STRIPE_SEC_KEY')); @@ -1446,4 +1395,4 @@ public function submitDonation(Request $request) return $this->errorResponse(__('Invalid payment request'), Response::HTTP_BAD_REQUEST); } } -} +} \ No newline at end of file diff --git a/app/Http/Requests/Api/VerifyFileCasperSignerRequest.php b/app/Http/Requests/Api/VerifyFileCasperSignerRequest.php index b310f414..f84e55cb 100644 --- a/app/Http/Requests/Api/VerifyFileCasperSignerRequest.php +++ b/app/Http/Requests/Api/VerifyFileCasperSignerRequest.php @@ -24,7 +24,8 @@ public function authorize() public function rules() { return [ - 'file' => 'required|file' + 'file' => 'required|file', + 'address' => 'required', ]; } } diff --git a/app/Models/Metric.php b/app/Models/Metric.php index 8c2f0ebb..dbbe72f7 100644 --- a/app/Models/Metric.php +++ b/app/Models/Metric.php @@ -11,7 +11,6 @@ class Metric extends Model protected $table = 'metric'; protected $guarded = []; - public function user() { return $this->belongsTo('App\Models\User', 'user_id', 'id'); } diff --git a/app/Models/User.php b/app/Models/User.php index a312f445..0b4370f4 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -67,6 +67,8 @@ class User extends Authenticatable 'validator_fee', 'cspr_delegated', 'cspr_self_staked', + 'has_address', + 'has_verified_address', ]; /** @@ -124,9 +126,7 @@ public function getFullNameAttribute() */ public function getLetterFileUrlAttribute() { - if(!$this->letter_file) { - return null; - } + if (!$this->letter_file) return null; // $url = Storage::disk('local')->url($this->letter_file); // return asset($url); return $this->letter_file; @@ -134,22 +134,16 @@ public function getLetterFileUrlAttribute() public function getAvatarUrlAttribute() { - if(!$this->avatar) { - return null; - } + if (!$this->avatar) return null; $url = ''; - if (strpos($this->avatar, 'http') !== false) { - $url = $this->avatar; - } else { - $url = Storage::disk('local')->url($this->avatar); - } + if (strpos($this->avatar, 'http') !== false) $url = $this->avatar; + else $url = Storage::disk('local')->url($this->avatar); return $url; } - public function getSignedFileUrlAttribute() { - return url('/') . $this->signed_file; + return url('/') . $this->signed_file; } public function profile() @@ -160,11 +154,15 @@ public function profile() public function shuftipro() { return $this->hasOne('App\Models\Shuftipro', 'user_id'); } - + public function shuftiproTemp() { return $this->hasOne('App\Models\ShuftiproTemp', 'user_id'); } + public function addresses() { + return $this->hasMany('App\Models\UserAddress', 'user_id'); + } + public function ownerNodes() { return $this->hasMany('App\Models\OwnerNode', 'user_id'); } @@ -202,12 +200,10 @@ public function getNewThreadsAttribute() { $count = Discussion::whereNotIn('id', $removedNews) ->whereDate('created_at', '>', Carbon::now()->subDays(3)) ->count(); - return $count; } public function documentFiles() { return $this->hasMany('App\Models\DocumentFile'); } - -} +} \ No newline at end of file diff --git a/app/Models/UserAddress.php b/app/Models/UserAddress.php new file mode 100644 index 00000000..b3cea9f9 --- /dev/null +++ b/app/Models/UserAddress.php @@ -0,0 +1,16 @@ +belongsTo('App\Models\User', 'user_id', 'id'); + } +} diff --git a/app/Services/NodeHelper.php b/app/Services/NodeHelper.php index 201ae556..c0cff86f 100644 --- a/app/Services/NodeHelper.php +++ b/app/Services/NodeHelper.php @@ -71,69 +71,80 @@ public function updateStats() $setting->value = $peers; $setting->save(); - $users = User::whereNotNull('public_address_node')->get(); + $users = User::with('addresses')->whereNotNull('public_address_node')->get(); + if ($validator_standing) { // Refresh Validator Standing foreach ($validator_standing as $key => $value) { - // $newKey = (new ChecksumValidator())->do($key); $validator_standing[strtolower($key)] = $value; } foreach ($users as $user) { - $validatorid = strtolower($user->public_address_node); - // $validatorid = (new ChecksumValidator())->do($validatorid); - - if (isset($validator_standing[$validatorid])) { - $info = $validator_standing[$validatorid]; - $fee = (float) $info['delegation_rate']; - - $user->pending_node = 0; - $user->validator_fee = round($fee, 2); - $user->save(); - - $totalRewards = $this->getTotalRewards($validatorid); - - $build_version = $info['build_version'] ?? null; - if ($build_version) { - $build_version = explode('-', $build_version); - $build_version = $build_version[0]; + if (isset($user->addresses) && count($user->addresses) > 0) { + $addresses = $user->addresses; + $userAddress = strtolower($user->public_address_node); + foreach ($addresses as $address) { + $validatorid = strtolower($address->public_address_node); + + if (isset($validator_standing[$validatorid])) { + $info = $validator_standing[$validatorid]; + $fee = (float) $info['delegation_rate']; + + if ($userAddress == $validatorid) { + $user->pending_node = 0; + $user->validator_fee = round($fee, 2); + $user->save(); + } + + $address->pending_node = 0; + $address->validator_fee = round($fee, 2); + $address->save(); + + $totalRewards = $this->getTotalRewards($validatorid); + + $build_version = $info['build_version'] ?? null; + if ($build_version) { + $build_version = explode('-', $build_version); + $build_version = $build_version[0]; + } + + $is_open_port = isset($info['uptime']) && isset($info['update_responsiveness']) ? 1 : 0; + + NodeInfo::updateOrCreate( + [ + 'node_address' => $validatorid + ], + [ + 'delegators_count' => $info['delegator_count'] ?? 0, + 'total_staked_amount' => $info['total_stake'], + 'delegation_rate' => $info['delegation_rate'], + 'daily_earning' => $info['daily_earnings'] ?? 0, + 'self_staked_amount' => $info['self_stake'] ?? 0, + 'total_earning' => isset($totalRewards['data']) && $totalRewards['data'] > 0 ? $totalRewards['data'] / 1000000000 : 0, + 'is_open_port' => $is_open_port, + 'mbs' => $mbs, + 'update_responsiveness' => isset($info['update_responsiveness']) ? $info['update_responsiveness'] * 100 : 0, + 'uptime' => isset($info['uptime']) ? $info['uptime'] * 100 : 0, + 'block_height' => $info['block_height'] ?? 0, + 'peers' => $info['peer_count'] ?? 0, + ] + ); + + Node::updateOrCreate( + [ + 'node_address' => $validatorid + ], + [ + 'block_height' => $info['block_height'] ?? null, + 'protocol_version' => $build_version, + 'update_responsiveness' => isset($info['update_responsiveness']) ? $info['update_responsiveness'] * 100 : null, + 'uptime' => isset($info['uptime']) ? $info['uptime'] : null, + 'weight' => $info['daily_earnings'] ?? 0, + 'peers' => $info['peer_count'] ?? 0, + ] + ); + } } - - $is_open_port = isset($info['uptime']) && isset($info['update_responsiveness']) ? 1 : 0; - - NodeInfo::updateOrCreate( - [ - 'node_address' => $validatorid - ], - [ - 'delegators_count' => $info['delegator_count'] ?? 0, - 'total_staked_amount' => $info['total_stake'], - 'delegation_rate' => $info['delegation_rate'], - 'daily_earning' => $info['daily_earnings'] ?? 0, - 'self_staked_amount' => $info['self_stake'] ?? 0, - 'total_earning' => isset($totalRewards['data']) && $totalRewards['data'] > 0 ? $totalRewards['data'] / 1000000000 : 0, - 'is_open_port' => $is_open_port, - 'mbs' => $mbs, - 'update_responsiveness' => isset($info['update_responsiveness']) ? $info['update_responsiveness'] * 100 : 0, - 'uptime' => isset($info['uptime']) ? $info['uptime'] * 100 : 0, - 'block_height' => $info['block_height'] ?? 0, - 'peers' => $info['peer_count'] ?? 0, - ] - ); - - Node::updateOrCreate( - [ - 'node_address' => $validatorid - ], - [ - 'block_height' => $info['block_height'] ?? null, - 'protocol_version' => $build_version, - 'update_responsiveness' => isset($info['update_responsiveness']) ? $info['update_responsiveness'] * 100 : null, - 'uptime' => isset($info['uptime']) ? $info['uptime'] : null, - 'weight' => $info['daily_earnings'] ?? 0, - 'peers' => $info['peer_count'] ?? 0, - ] - ); } } } diff --git a/database/migrations/2022_05_03_150005_user_addresses_table.php b/database/migrations/2022_05_03_150005_user_addresses_table.php new file mode 100644 index 00000000..f7025242 --- /dev/null +++ b/database/migrations/2022_05_03_150005_user_addresses_table.php @@ -0,0 +1,34 @@ +id(); + $table->integer('user_id'); + $table->string('public_address_node'); + $table->timestamp('node_verified_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2022_05_03_153706_update_users_table.php b/database/migrations/2022_05_03_153706_update_users_table.php new file mode 100644 index 00000000..f596e552 --- /dev/null +++ b/database/migrations/2022_05_03_153706_update_users_table.php @@ -0,0 +1,31 @@ +boolean('has_address')->default(0); + $table->boolean('has_verified_address')->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2022_05_11_082526_update_user_addresses_table.php b/database/migrations/2022_05_11_082526_update_user_addresses_table.php new file mode 100644 index 00000000..bf33152c --- /dev/null +++ b/database/migrations/2022_05_11_082526_update_user_addresses_table.php @@ -0,0 +1,30 @@ +text('signed_file')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2022_05_11_161022_update_user_addresses_2_table.php b/database/migrations/2022_05_11_161022_update_user_addresses_2_table.php new file mode 100644 index 00000000..4d2f3244 --- /dev/null +++ b/database/migrations/2022_05_11_161022_update_user_addresses_2_table.php @@ -0,0 +1,31 @@ +tinyInteger('is_fail_node')->nullable()->default(0); + $table->integer('rank')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2022_05_12_141958_update_user_addresses_3_table.php b/database/migrations/2022_05_12_141958_update_user_addresses_3_table.php new file mode 100644 index 00000000..f0ae16ff --- /dev/null +++ b/database/migrations/2022_05_12_141958_update_user_addresses_3_table.php @@ -0,0 +1,31 @@ +tinyInteger('pending_node')->nullable()->default(0); + $table->float('validator_fee')->nullable()->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2022_05_12_211044_update_user_addresses_4_table.php b/database/migrations/2022_05_12_211044_update_user_addresses_4_table.php new file mode 100644 index 00000000..8434fa24 --- /dev/null +++ b/database/migrations/2022_05_12_211044_update_user_addresses_4_table.php @@ -0,0 +1,30 @@ +string('node_status')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2022_05_16_020320_update_user_addresses_5_table.php b/database/migrations/2022_05_16_020320_update_user_addresses_5_table.php new file mode 100644 index 00000000..9201eba6 --- /dev/null +++ b/database/migrations/2022_05_16_020320_update_user_addresses_5_table.php @@ -0,0 +1,30 @@ +string('extra_status')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/routes/api.php b/routes/api.php index 9a78584b..a773a17d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -59,7 +59,10 @@ Route::post('/users/logout', [UserController::class, 'logout']); Route::post('users/hellosign-request', [UserController::class, 'sendHellosignRequest']); Route::post('users/submit-public-address', [UserController::class, 'submitPublicAddress']); + Route::post('users/check-public-address', [UserController::class, 'checkPublicAddress']); + Route::post('users/submit-public-address-2', [UserController::class, 'submitPublicAddress2']); Route::post('users/verify-file-casper-signer', [UserController::class, 'verifyFileCasperSigner']); + Route::post('users/verify-file-casper-signer-2', [UserController::class, 'verifyFileCasperSigner2']); Route::post('users/submit-kyc', [UserController::class, 'functionSubmitKYC']); Route::post('users/verify-owner-node', [UserController::class, 'verifyOwnerNode']); Route::get('users/owner-node', [UserController::class, 'getOwnerNodes']); @@ -77,7 +80,7 @@ Route::post('/users/upload-avatar', [UserController::class, 'uploadAvatar']); Route::post('/users/check-password', [UserController::class, 'checkCurrentPassword']); Route::post('/users/settings', [UserController::class, 'settingUser']); - + Route::get('/users/metrics', [MetricController::class, 'getMetric']); Route::post('/users/check-login-2fa', [UserController::class, 'checkLogin2FA']); Route::post('/users/resend-2fa', [UserController::class, 'resend2FA']); @@ -89,10 +92,11 @@ // rules lock Route::get('/users/lock-rules', [UserController::class, 'getLockRules']); Route::get('users/list-node', [UserController::class, 'getListNodes']); + Route::get('users/list-node-by', [UserController::class, 'getListNodesBy']); Route::get('users/dashboard', [UserController::class, 'infoDashboard']); Route::get('/nodes/{node}/earning', [UserController::class, 'getEarningByNode']); Route::get('/nodes/{node}/chart', [UserController::class, 'getChartEarningByNode']); - + Route::post('/users/contact-us', [ContactController::class, 'submitContact']); Route::get('/users/membership-file', [UserController::class, 'getMembershipFile']); @@ -173,7 +177,7 @@ Route::get('/metrics/{id}', [MetricController::class, 'getMetricUser']); Route::put('/metrics/{id}', [MetricController::class, 'updateMetric']); Route::get('/node/{node}', [MetricController::class, 'getMetricUserByNodeName']); - + Route::get('/monitoring-criteria', [AdminController::class, 'getMonitoringCriteria']); Route::put('/monitoring-criteria/{type}', [AdminController::class, 'updateMonitoringCriteria']); From 0705b782313d9861498d614ecfd9839be824ced3 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 16 May 2022 15:09:15 -0400 Subject: [PATCH 07/30] readme git version --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ff459eac..57dab767 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ This is the backend repo of the portal. To see the frontend repo, visit https:// - PHP 7.4+ - MySql Ver 14.14 Distrib 5.7.37 - Laravel Framework 8.47.0 + - Git Version 2+ ## Setup From 37f19d39413511d4bac8e3bb09ede0dacd00ed9a Mon Sep 17 00:00:00 2001 From: Ledgerleap Date: Tue, 17 May 2022 11:38:13 -0400 Subject: [PATCH 08/30] # Updates --- app/Http/Controllers/Api/V1/UserController.php | 4 +--- app/Http/EmailerHelper.php | 12 ++++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/Api/V1/UserController.php b/app/Http/Controllers/Api/V1/UserController.php index 45d0685f..a3c5b0ae 100644 --- a/app/Http/Controllers/Api/V1/UserController.php +++ b/app/Http/Controllers/Api/V1/UserController.php @@ -496,9 +496,7 @@ public function verifyFileCasperSigner2(VerifyFileCasperSignerRequest $request) $emailerData = EmailerHelper::getEmailerData(); - EmailerHelper::triggerUserEmail($user->email, 'Your Node is Verified', $emailerData, $user); - if ($user->letter_verified_at && $user->signature_request_id && $userAddress->node_verified_at) - EmailerHelper::triggerUserEmail($user->email, 'Congratulations', $emailerData, $user); + EmailerHelper::triggerUserEmail($user->email, 'Your Node is Verified', $emailerData, $user, $userAddress); return $this->metaSuccess(); } else { return $this->errorResponse(__('Failed verification'), Response::HTTP_BAD_REQUEST); diff --git a/app/Http/EmailerHelper.php b/app/Http/EmailerHelper.php index 17c6e4e6..69205eba 100644 --- a/app/Http/EmailerHelper.php +++ b/app/Http/EmailerHelper.php @@ -69,18 +69,18 @@ public static function triggerAdminEmail($title, $emailerData, $user = null) { } // Send User Email - public static function triggerUserEmail($to, $title, $emailerData, $user = null) { + public static function triggerUserEmail($to, $title, $emailerData, $user = null, $userAddress = null) { $item = $emailerData['triggerUser'][$title] ?? null; if ($item) { - $content = $item['content']; - $subject =$item['subject']; - + $content = $item['content']; + $subject = $item['subject']; if ($user) { - $name = $user->first_name . ' ' . $user->last_name; + $name = $user->first_name . ' ' . $user->last_name; $content = str_replace('[name]', $name, $content); $subject = str_replace('[name]', $name, $subject); $content = str_replace('[email]', $user->email, $content); - $content = str_replace('[node address]', $user->public_address_node, $content); + if ($userAddress) $content = str_replace('[node address]', $userAddress->public_address_node, $content); + else $content = str_replace('[node address]', $user->public_address_node, $content); $subject = str_replace('[email]', $user->email, $subject); } Mail::to($to)->send(new UserAlert($subject, $content)); From afffa76a3d3e4706faf175835684da5fd151265b Mon Sep 17 00:00:00 2001 From: Ledger Leap LLC <69469839+ledgerleapllc@users.noreply.github.com> Date: Tue, 17 May 2022 12:17:28 -0400 Subject: [PATCH 09/30] Update laravel.yml --- .github/workflows/laravel.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index f5fdf629..b356ef56 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -2,9 +2,9 @@ name: Laravel on: push: - branches: [ master ] + branches: [ development, staging, master ] pull_request: - branches: [ master ] + branches: [ development, staging, master ] jobs: laravel-tests: From af68d82bf046d9c557b869114cfc54d9e54edb47 Mon Sep 17 00:00:00 2001 From: Ledgerleap Date: Thu, 19 May 2022 10:02:53 -0400 Subject: [PATCH 10/30] # Updates --- app/Console/Helper.php | 10 +++--- .../Controllers/Api/V1/MetricController.php | 33 ++++++++++++++++++- .../Controllers/Api/V1/UserController.php | 8 +++-- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/app/Console/Helper.php b/app/Console/Helper.php index ac3e1250..2f635ab8 100644 --- a/app/Console/Helper.php +++ b/app/Console/Helper.php @@ -81,8 +81,10 @@ public static function getTokenPrice() return $response->json(); } - public static function getNodeInfo($user) + public static function getNodeInfo($user, $public_address_node = null) { + if (!$public_address_node) $public_address_node = $user->public_address_node; + $max_update_responsiveness = DB::select("SELECT max(update_responsiveness) as max_update_responsiveness FROM ( SELECT MAX(update_responsiveness) as update_responsiveness FROM metric @@ -110,7 +112,7 @@ public static function getNodeInfo($user) ;"); $max_uptime = $max_uptime[0]->max_uptime ?? 0; - $latest = Node::where('node_address', strtolower($user->public_address_node)) + $latest = Node::where('node_address', strtolower($public_address_node)) ->whereNotnull('protocol_version') ->orderBy('created_at', 'desc') ->first(); @@ -128,7 +130,7 @@ public static function getNodeInfo($user) $metric_update_responsiveness = $metric->update_responsiveness ?? null; $metric_peers = $metric->peers ?? null; - $nodeInfo = NodeInfo::where('node_address', strtolower($user->public_address_node))->first(); + $nodeInfo = NodeInfo::where('node_address', strtolower($public_address_node))->first(); if (!$nodeInfo) $nodeInfo = new NodeInfo(); $latest_uptime = $nodeInfo->uptime ?? null; @@ -153,7 +155,7 @@ public static function getNodeInfo($user) $metric->uptime = $latest_uptime ? $latest_uptime : $metric_uptime; $monitoringCriteria = MonitoringCriteria::get(); - $nodeInfo = NodeInfo::where('node_address', strtolower($user->public_address_node))->first(); + $nodeInfo = NodeInfo::where('node_address', strtolower($public_address_node))->first(); $rank = $user->rank; $delegators = 0; $stake_amount = 0; diff --git a/app/Http/Controllers/Api/V1/MetricController.php b/app/Http/Controllers/Api/V1/MetricController.php index 770172fb..95712ba0 100644 --- a/app/Http/Controllers/Api/V1/MetricController.php +++ b/app/Http/Controllers/Api/V1/MetricController.php @@ -26,6 +26,7 @@ public function getMetric(Request $request) $user = auth()->user(); $public_address_node = $request->get('public_address_node'); if (!$public_address_node) $public_address_node = $user->public_address_node; + $isTotal = (int) $request->get('isTotal'); $max_update_responsiveness = DB::select("SELECT max(update_responsiveness) as max_update_responsiveness FROM ( @@ -130,6 +131,36 @@ public function getMetric(Request $request) if ($setting) $metric['peers_setting'] = (int) $setting->value; else $metric['peers_setting'] = 0; + $addresses = UserAddress::where('user_id', $user->id)->get(); + $metric['addresses'] = $addresses; + + if ($isTotal) { + $tempRank = $stake_amount = $self_stake_amount = $delegators = 0; + if ($addresses && count($addresses) > 0) { + $tempRank = UserAddress::get()->count(); + foreach ($addresses as $address) { + if ($tempRank > (int) $address->rank) { + $tempRank = (int) $address->rank; + } + } + } + if ($tempRank > 0) $metric->rank = $tempRank; + + if ($addresses && count($addresses) > 0) { + foreach ($addresses as $address) { + $nodeInfo = NodeInfo::where('node_address', strtolower($address->public_address_node))->first(); + if ($nodeInfo) { + $stake_amount += $nodeInfo->total_staked_amount; + $delegators += $nodeInfo->delegators_count; + $self_stake_amount += $nodeInfo->self_staked_amount; + } + } + } + $metric->delegators = $delegators; + $metric->stake_amount = $stake_amount; + $metric->self_stake_amount = $self_stake_amount; + } + return $this->successResponse($metric); } @@ -179,7 +210,7 @@ public function getMetricUser($id) SELECT MAX(peers) as peers FROM node_info ) AS results ;"); - $max_peers = $max_peers[0]->max_peers ?? 0; + $max_peers = $max_peers[0]->max_peers ?? 0; $max_block_height = Node::max('block_height'); $max_uptime = DB::select("SELECT max(uptime) as max_uptime FROM ( diff --git a/app/Http/Controllers/Api/V1/UserController.php b/app/Http/Controllers/Api/V1/UserController.php index a3c5b0ae..421f7603 100644 --- a/app/Http/Controllers/Api/V1/UserController.php +++ b/app/Http/Controllers/Api/V1/UserController.php @@ -940,15 +940,17 @@ public function getMembers(Request $request) return $this->successResponse($users); } - public function getMemberDetail($id) + public function getMemberDetail($id, Request $request) { + $public_address_node = $request->get('public_address_node') ?? null; $user = User::where('id', $id)->first(); + Helper::getAccountInfoStandard($user); if (!$user || $user->role == 'admin') return $this->errorResponse(__('api.error.not_found'), Response::HTTP_NOT_FOUND); - $user->metric = Helper::getNodeInfo($user); - $response = $user->load(['profile']); + $user->metric = Helper::getNodeInfo($user, $public_address_node); + $response = $user->load(['profile', 'addresses']); unset($response->last_login_at); unset($response->last_login_ip_address); From 848e9732b9fc8a3b7a17a157a0ac02c3877abc19 Mon Sep 17 00:00:00 2001 From: bradjohnl Date: Thu, 19 May 2022 17:25:39 +0200 Subject: [PATCH 11/30] CODEOWNERS update --- .github/workflows/CODEOWNERS | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CODEOWNERS b/.github/workflows/CODEOWNERS index 1be482f9..01a9909b 100644 --- a/.github/workflows/CODEOWNERS +++ b/.github/workflows/CODEOWNERS @@ -1,4 +1,8 @@ # Default reviewers -* @ledgerleapllc +* @ledgerleapllc @jinli111 @ledgerleap1 + +# Reviewer for CICD related changes +.github @bradjohnl +ansible @bradjohnl From 3875bda9e0551b8756b13ccb1d5172db58010743 Mon Sep 17 00:00:00 2001 From: bradjohnl Date: Thu, 19 May 2022 17:37:06 +0200 Subject: [PATCH 12/30] Fixing typo on branch name --- .github/workflows/dev_staging_sync.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/dev_staging_sync.yml b/.github/workflows/dev_staging_sync.yml index 6e104907..2a08cf6e 100644 --- a/.github/workflows/dev_staging_sync.yml +++ b/.github/workflows/dev_staging_sync.yml @@ -1,11 +1,11 @@ -name: dev to staging sync +name: development to staging sync -#Run workflow on successful merge to dev +#Run workflow on successful merge to development on: push: branches: - - dev + - development jobs: @@ -21,7 +21,7 @@ jobs: app_id: ${{ secrets.PRBOT_APP_ID }} private_key: ${{ secrets.PRBOT_APP_PRIVATE_KEY }} - #Sync dev branch to the staging branch to keep it updated + #Sync development branch to the staging branch to keep it updated - name: Set up Node uses: actions/setup-node@v1 with: @@ -32,12 +32,12 @@ jobs: uses: tretuna/sync-branches@ea58ab6e406fd3ad016a064b31270bbb41127f41 with: GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} - FROM_BRANCH: "dev" + FROM_BRANCH: "development" TO_BRANCH: "staging" REVIEWERS: '["ledgerleapllc"]' CONTENT_COMPARISON: true - PULL_REQUEST_BODY: "This PR is created by the PR Bot to sync the dev branch to the staging branch. Please check the content changes also on the dev site if you want. You can feel free to ignore this or approve + merge it. If you merge, the prod deployment will start automatically. If you ignore it, it will get renewed the next time a new feature gets merged to the dev branch." - PULL_REQUEST_TITLE: "Sync dev to staging" + PULL_REQUEST_BODY: "This PR is created by the PR Bot to sync the development branch to the staging branch. Please check the content changes also on the development site if you want. You can feel free to ignore this or approve + merge it. If you merge, the prod deployment will start automatically. If you ignore it, it will get renewed the next time a new feature gets merged to the development branch." + PULL_REQUEST_TITLE: "Sync development to staging" #Display the pull request URL: - name: Display the pull request URL From 188ee7805b0afa951836ea258a027e54a8909655 Mon Sep 17 00:00:00 2001 From: Ledgerleap Date: Wed, 25 May 2022 13:09:54 -0400 Subject: [PATCH 13/30] # 28 --- app/Http/Controllers/Api/V1/AuthController.php | 5 +++++ .../Controllers/Api/V1/DiscussionController.php | 17 ++++++++++++----- .../Controllers/Api/V1/HellosignController.php | 2 ++ .../Controllers/Api/V1/InstallController.php | 2 ++ .../Controllers/Api/V1/MetricController.php | 1 - .../Api/V1/NotificationController.php | 3 +++ routes/api.php | 2 +- 7 files changed, 25 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/Api/V1/AuthController.php b/app/Http/Controllers/Api/V1/AuthController.php index e13a9d31..cde88f49 100644 --- a/app/Http/Controllers/Api/V1/AuthController.php +++ b/app/Http/Controllers/Api/V1/AuthController.php @@ -11,14 +11,18 @@ use App\Http\Requests\Api\RegisterIndividualRequest; use App\Http\Requests\Api\ResetPasswordRequest; use App\Http\Requests\Api\SendResetPasswordMailRequeslRequest; + use App\Mail\LoginTwoFA; use App\Mail\ResetPasswordMail; use App\Mail\UserVerifyMail; + use App\Models\IpHistory; use App\Models\User; use App\Models\VerifyUser; + use App\Repositories\UserRepository; use App\Repositories\VerifyUserRepository; + use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\DB; @@ -26,6 +30,7 @@ use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Str; + use Laravel\Passport\Token; class AuthController extends Controller diff --git a/app/Http/Controllers/Api/V1/DiscussionController.php b/app/Http/Controllers/Api/V1/DiscussionController.php index 91e8c286..af1c344a 100644 --- a/app/Http/Controllers/Api/V1/DiscussionController.php +++ b/app/Http/Controllers/Api/V1/DiscussionController.php @@ -3,20 +3,25 @@ namespace App\Http\Controllers\Api\V1; use App\Http\Controllers\Controller; + use Illuminate\Http\Request; +use Illuminate\Support\Facades\Validator; +use Illuminate\Http\Response; + use App\Repositories\UserRepository; use App\Repositories\DiscussionRepository; use App\Repositories\DiscussionCommentRepository; use App\Repositories\DiscussionPinRepository; use App\Repositories\DiscussionVoteRepository; use App\Repositories\DiscussionRemoveNewRepository; -use Illuminate\Support\Facades\Validator; + use App\Models\Discussion; use App\Models\DiscussionComment; use App\Models\DiscussionPin; use App\Models\DiscussionRemoveNew; + use Carbon\Carbon; -use Illuminate\Http\Response; + use App\Facades\Paginator; class DiscussionController extends Controller @@ -157,9 +162,11 @@ public function getDiscussion(Request $request, $id) 'discussion_votes.id as is_vote', 'discussion_votes.is_like as is_like', ])->first(); - $discussion->read = $discussion->read + 1; - $discussion->save(); - $discussion->total_pinned = DiscussionPin::where('discussion_id', $id)->count(); + if ($discussion) { + $discussion->read = $discussion->read + 1; + $discussion->save(); + $discussion->total_pinned = DiscussionPin::where('discussion_id', $id)->count(); + } return $this->successResponse($discussion); } diff --git a/app/Http/Controllers/Api/V1/HellosignController.php b/app/Http/Controllers/Api/V1/HellosignController.php index 38a14ff4..22dc9376 100644 --- a/app/Http/Controllers/Api/V1/HellosignController.php +++ b/app/Http/Controllers/Api/V1/HellosignController.php @@ -3,7 +3,9 @@ namespace App\Http\Controllers\Api\V1; use App\Http\Controllers\Controller; + use App\Models\User; + use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; diff --git a/app/Http/Controllers/Api/V1/InstallController.php b/app/Http/Controllers/Api/V1/InstallController.php index 6639faa6..85214727 100644 --- a/app/Http/Controllers/Api/V1/InstallController.php +++ b/app/Http/Controllers/Api/V1/InstallController.php @@ -4,7 +4,9 @@ use App\Http\Controllers\Controller; use App\Http\EmailerHelper; + use App\Mail\AdminAlert; + use App\Models\EmailerTriggerAdmin; use App\Models\EmailerTriggerUser; use App\Models\Setting; diff --git a/app/Http/Controllers/Api/V1/MetricController.php b/app/Http/Controllers/Api/V1/MetricController.php index 95712ba0..7f6e9314 100644 --- a/app/Http/Controllers/Api/V1/MetricController.php +++ b/app/Http/Controllers/Api/V1/MetricController.php @@ -14,7 +14,6 @@ use Illuminate\Http\Request; use Illuminate\Http\Response; - use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Validator; diff --git a/app/Http/Controllers/Api/V1/NotificationController.php b/app/Http/Controllers/Api/V1/NotificationController.php index d1f5358b..fd270335 100644 --- a/app/Http/Controllers/Api/V1/NotificationController.php +++ b/app/Http/Controllers/Api/V1/NotificationController.php @@ -3,10 +3,13 @@ namespace App\Http\Controllers\Api\V1; use App\Http\Controllers\Controller; + use App\Models\Notification; use App\Models\NotificationView; use App\Models\User; + use Carbon\Carbon; + use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Validator; diff --git a/routes/api.php b/routes/api.php index a773a17d..be3cfb43 100644 --- a/routes/api.php +++ b/routes/api.php @@ -234,4 +234,4 @@ Route::get('/{id}', [PerkController::class, 'getPerkDetailUser']); }); }); -}); +}); \ No newline at end of file From e23e2948533b11ae147f0a70161903b53feff89f Mon Sep 17 00:00:00 2001 From: Ledgerleap Date: Mon, 30 May 2022 09:28:39 -0400 Subject: [PATCH 14/30] # Updates --- app/Http/Controllers/Api/V1/MetricController.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/Api/V1/MetricController.php b/app/Http/Controllers/Api/V1/MetricController.php index 7f6e9314..69219fc2 100644 --- a/app/Http/Controllers/Api/V1/MetricController.php +++ b/app/Http/Controllers/Api/V1/MetricController.php @@ -14,6 +14,7 @@ use Illuminate\Http\Request; use Illuminate\Http\Response; + use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Validator; @@ -375,10 +376,7 @@ public function getMetricUserByNodeName($node) $monitoringCriteria = MonitoringCriteria::get(); $nodeInfo = NodeInfo::where('node_address', strtolower($public_address_node))->first(); $rank = $userAddress->rank; - $delegators = 0; - $stake_amount = 0; - $self_stake_amount = 0; - $is_open_port = 0; + $delegators = $stake_amount = $self_stake_amount = $is_open_port = 0; if ($nodeInfo) { $delegators = $nodeInfo->delegators_count; $stake_amount = $nodeInfo->total_staked_amount; @@ -397,4 +395,4 @@ public function getMetricUserByNodeName($node) } return $this->successResponse([]); } -} +} \ No newline at end of file From fb1333140e0e340498de69b971ece953807f2983 Mon Sep 17 00:00:00 2001 From: Ledgerleap Date: Mon, 30 May 2022 11:16:33 -0400 Subject: [PATCH 15/30] # Camp 272{ --- app/Console/Helper.php | 7 +++--- .../Controllers/Api/V1/UserController.php | 24 +++++++++++++++++++ routes/api.php | 2 ++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/Console/Helper.php b/app/Console/Helper.php index 2f635ab8..943bb6c8 100644 --- a/app/Console/Helper.php +++ b/app/Console/Helper.php @@ -11,7 +11,8 @@ use App\Models\User; use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Http;use Illuminate\Pagination\Paginator; +use Illuminate\Support\Facades\Http; +use Illuminate\Pagination\Paginator; use Illuminate\Support\Collection; use Illuminate\Pagination\LengthAwarePaginator; @@ -25,11 +26,11 @@ public static function getAccountInfoStandard($user) $THIS_SEENA_API_KEY = getenv('SEENA_API_KEY'); - $response = Http::withHeaders([ + $response = Http::timeout(5)->withHeaders([ 'Authorization' => "token $THIS_SEENA_API_KEY", ])->withOptions([ 'verify' => false, - ])->get('https://seena.ledgerleap.com/account-info-standard?validator_id='.$vid); + ])->get('https://seena.ledgerleap.com/account-info-standard?validator_id=' . $vid); try { $json = json_decode($response); diff --git a/app/Http/Controllers/Api/V1/UserController.php b/app/Http/Controllers/Api/V1/UserController.php index 421f7603..3d432965 100644 --- a/app/Http/Controllers/Api/V1/UserController.php +++ b/app/Http/Controllers/Api/V1/UserController.php @@ -55,6 +55,7 @@ use Carbon\Carbon; +use Illuminate\Support\Facades\Http; use Illuminate\Validation\Rule; use Illuminate\Http\Request; use Illuminate\Http\Response; @@ -219,6 +220,29 @@ public function changePassword(ChangePasswordRequest $request) return $this->metaSuccess(); } + public function runTest() + { + $vid = '01ffbcb533e9dfb2fb3dd02312ea00ce8b2adc9fd2ae9770936b77acbb86a35369'; + // $vid = '01ebaebffebe63ee6e35b88697dd9d5bfab23dac47cbd61a45efc8ea8d80ec9c38'; + + $THIS_SEENA_API_KEY = getenv('SEENA_API_KEY'); + + $response = Http::timeout(5)->withHeaders([ + 'Authorization' => "token $THIS_SEENA_API_KEY", + ])->withOptions([ + 'verify' => false, + ])->get('https://seena.ledgerleap.com/account-info-standard?validator_id=' . $vid); + + try { + $json = json_decode($response); + } catch (Exception $e) { + $json = array(); + } + + var_dump($json); + exit(); + } + public function getProfile() { $user = auth()->user()->load(['profile', 'permissions', 'shuftipro', 'shuftiproTemp']); diff --git a/routes/api.php b/routes/api.php index be3cfb43..59e6c06e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -29,6 +29,8 @@ Route::post('hellosign', [HelloSignController::class, 'hellosignHook']); }); +// Route::get('test', [UserController::class, 'runTest']); + Route::post('shuftipro-status', [UserController::class, 'updateShuftiproStatus']); Route::get('shuftipro-status', [UserController::class, 'updateShuftiproStatus']); Route::put('shuftipro-status', [UserController::class, 'updateShuftiproStatus']); From 4f8b30e6c8b2fe0c8f3f97b2e1d0ae2b24ad22f0 Mon Sep 17 00:00:00 2001 From: Ledgerleap Date: Mon, 30 May 2022 13:09:14 -0400 Subject: [PATCH 16/30] # Unit Tests --- .github/workflows/laravel.yml | 10 +-- .../Controllers/Api/V1/AuthController.php | 3 +- .../2014_10_12_000000_create_users_table.php | 3 + ...021_06_12_071427_add_column_user_table.php | 1 - ...2021_06_12_090258_create_profile_table.php | 14 ++-- .../2021_06_18_135938_update_user1_table.php | 32 -------- ...19_024422_update_column_profile1_table.php | 2 +- ...021_07_09_151020_update_profile1_table.php | 9 -- ...021_07_10_151020_update_profile2_table.php | 29 ------- phpunit.xml | 4 +- ...ExampleTest.php => AdminFunctionsTest.php} | 5 +- tests/Feature/AuthFunctionsTest.php | 82 +++++++++++++++++++ tests/Feature/UserFunctionsTest.php | 38 +++++++++ tests/TestCase.php | 37 ++++++++- 14 files changed, 178 insertions(+), 91 deletions(-) delete mode 100644 database/migrations/2021_06_18_135938_update_user1_table.php delete mode 100644 database/migrations/2021_07_10_151020_update_profile2_table.php rename tests/Feature/{ExampleTest.php => AdminFunctionsTest.php} (68%) create mode 100644 tests/Feature/AuthFunctionsTest.php create mode 100644 tests/Feature/UserFunctionsTest.php diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index 936e712a..43727d33 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -4,18 +4,18 @@ on: push: branches: "*" pull_request: - types: [ opened, reopened, synchronize ] + branches: "*" jobs: laravel-tests: runs-on: ubuntu-latest + container: + image: kirschbaumdevelopment/laravel-test-runner:7.4 steps: - - uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e - with: - php-version: '8.0' - - uses: actions/checkout@v3 + - name: Checkout + uses: actions/checkout@v3 - name: Copy .env run: php -r "file_exists('.env') || copy('.env.example', '.env');" - name: Install Dependencies diff --git a/app/Http/Controllers/Api/V1/AuthController.php b/app/Http/Controllers/Api/V1/AuthController.php index cde88f49..78a9079f 100644 --- a/app/Http/Controllers/Api/V1/AuthController.php +++ b/app/Http/Controllers/Api/V1/AuthController.php @@ -319,7 +319,6 @@ public function resendVerifyEmail(Request $request) public function registerSubAdmin(Request $request) { - $validator = Validator::make($request->all(), [ 'first_name' => 'required|regex:/^[A-Za-z. ]{1,255}$/', 'last_name' => 'required|regex:/^[A-Za-z. ]{1,255}$/', @@ -335,7 +334,7 @@ public function registerSubAdmin(Request $request) if (!$user) { return $this->errorResponse('There is no admin user with this email', Response::HTTP_BAD_REQUEST); } - $verify = VerifyUser::where('email', $request->email)->where('type', VerifyUser::TYPE_INVITE_ADMIN)->where('code', $request->code)->first(); + $verify = VerifyUser::where('email', $request->email)->where('type', VerifyUser::TYPE_INVITE_ADMIN)->where('code', $request->code)->first(); if (!$verify) { return $this->errorResponse('Fail register sub-amdin', Response::HTTP_BAD_REQUEST); } diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index f1c0d1db..ece16c7c 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -29,6 +29,9 @@ public function up() $table->string('entity_register_country')->nullable(); $table->string('entity_tax')->nullable(); $table->timestamp('last_login_at')->nullable(); + $table->string('role')->default('member'); + $table->string('signed_file')->nullable(); + $table->string('member_status')->nullable(); $table->rememberToken(); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2021_06_12_071427_add_column_user_table.php b/database/migrations/2021_06_12_071427_add_column_user_table.php index 4e67fc0a..4d66e054 100644 --- a/database/migrations/2021_06_12_071427_add_column_user_table.php +++ b/database/migrations/2021_06_12_071427_add_column_user_table.php @@ -17,7 +17,6 @@ public function up() $table->string('signature_request_id')->nullable(); $table->string('public_address_node')->nullable(); $table->timestamp('node_verified_at')->nullable(); - $table->string('status')->nullable(); $table->string('message_content')->nullable(); $table->timestamp('kyc_verified_at')->nullable(); $table->string('hellosign_form')->nullable(); diff --git a/database/migrations/2021_06_12_090258_create_profile_table.php b/database/migrations/2021_06_12_090258_create_profile_table.php index 71bd06db..fdc18e97 100644 --- a/database/migrations/2021_06_12_090258_create_profile_table.php +++ b/database/migrations/2021_06_12_090258_create_profile_table.php @@ -16,15 +16,15 @@ public function up() Schema::create('profile', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained('users'); - $table->string('first_name'); - $table->string('last_name'); + $table->string('first_name', 255)->nullable(); + $table->string('last_name', 255)->nullable(); $table->string('company')->nullable(); $table->date('dob')->nullable(); - $table->string('country_citizenship'); - $table->string('country_residence'); - $table->string('address'); - $table->string('city'); - $table->string('zip'); + $table->string('country_citizenship', 255)->nullable(); + $table->string('country_residence', 255)->nullable(); + $table->string('address', 255)->nullable(); + $table->string('city', 255)->nullable(); + $table->string('zip', 255)->nullable(); $table->tinyInteger('type_owner_node')->nullable(); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2021_06_18_135938_update_user1_table.php b/database/migrations/2021_06_18_135938_update_user1_table.php deleted file mode 100644 index 56a4c553..00000000 --- a/database/migrations/2021_06_18_135938_update_user1_table.php +++ /dev/null @@ -1,32 +0,0 @@ -renameColumn('status', 'member_status'); - $table->string('role')->default('member'); - $table->string('signed_file')->nullable(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - // - } -} diff --git a/database/migrations/2021_06_19_024422_update_column_profile1_table.php b/database/migrations/2021_06_19_024422_update_column_profile1_table.php index 3ece427a..6c25565e 100644 --- a/database/migrations/2021_06_19_024422_update_column_profile1_table.php +++ b/database/migrations/2021_06_19_024422_update_column_profile1_table.php @@ -14,7 +14,7 @@ class UpdateColumnProfile1Table extends Migration public function up() { Schema::table('profile', function (Blueprint $table) { - $table->string('status')->default('pending'); + $table->string('status', 255)->nullable(); }); } diff --git a/database/migrations/2021_07_09_151020_update_profile1_table.php b/database/migrations/2021_07_09_151020_update_profile1_table.php index 98ada2e2..cf831d9d 100644 --- a/database/migrations/2021_07_09_151020_update_profile1_table.php +++ b/database/migrations/2021_07_09_151020_update_profile1_table.php @@ -22,15 +22,6 @@ public function up() $table->string('vat_number')->nullable(); $table->string('page_is_representative')->nullable(); }); - - DB::statement("ALTER TABLE profile modify first_name varchar(255) NULL"); - DB::statement("ALTER TABLE profile modify last_name varchar(255) NULL"); - DB::statement("ALTER TABLE profile modify country_citizenship varchar(255) NULL"); - DB::statement("ALTER TABLE profile modify country_residence varchar(255) NULL"); - DB::statement("ALTER TABLE profile modify address varchar(255) NULL"); - DB::statement("ALTER TABLE profile modify city varchar(255) NULL"); - DB::statement("ALTER TABLE profile modify zip varchar(255) NULL"); - } /** diff --git a/database/migrations/2021_07_10_151020_update_profile2_table.php b/database/migrations/2021_07_10_151020_update_profile2_table.php deleted file mode 100644 index 67e66e61..00000000 --- a/database/migrations/2021_07_10_151020_update_profile2_table.php +++ /dev/null @@ -1,29 +0,0 @@ - - - + + diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/AdminFunctionsTest.php similarity index 68% rename from tests/Feature/ExampleTest.php rename to tests/Feature/AdminFunctionsTest.php index 4ae02bc5..1dd15438 100644 --- a/tests/Feature/ExampleTest.php +++ b/tests/Feature/AdminFunctionsTest.php @@ -3,12 +3,13 @@ namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase; +use Illuminate\Foundation\Testing\WithFaker; use Tests\TestCase; -class ExampleTest extends TestCase +class AdminFunctionsTest extends TestCase { /** - * A basic test example. + * A basic feature test example. * * @return void */ diff --git a/tests/Feature/AuthFunctionsTest.php b/tests/Feature/AuthFunctionsTest.php new file mode 100644 index 00000000..ac46a5b2 --- /dev/null +++ b/tests/Feature/AuthFunctionsTest.php @@ -0,0 +1,82 @@ +addAdmin(); + + $params = [ + 'email' => 'ledgerleapllcadmin@gmail.com', + 'password' => 'Ledgerleapllcadmin111@', + ]; + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + ])->json('post', '/api/v1/auth/login', $params); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testRegisterEntity() { + $params = [ + 'entity_name' => 'Test Entity', + 'entity_type' => 'Test Entity Type', + 'entity_register_number' => 'Test Number', + 'entity_register_country' => 'United States', + 'entity_tax' => 'Entity Tax', + 'first_name' => 'Test', + 'last_name' => 'Entity', + 'email' => 'testentity@gmail.com', + 'password' => 'TestEntity111@', + 'pseudonym' => 'testentity', + 'telegram' => '@testentity', + ]; + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + ])->json('post', '/api/v1/auth/register-entity', $params); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testRegisterIndividual() { + $params = [ + 'first_name' => 'Test', + 'last_name' => 'Individual', + 'email' => 'testindividual@gmail.com', + 'password' => 'TestIndividual111@', + 'pseudonym' => 'testindividual', + 'telegram' => '@testindividual', + ]; + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + ])->json('post', '/api/v1/auth/register-individual', $params); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } +} \ No newline at end of file diff --git a/tests/Feature/UserFunctionsTest.php b/tests/Feature/UserFunctionsTest.php new file mode 100644 index 00000000..981a3fa7 --- /dev/null +++ b/tests/Feature/UserFunctionsTest.php @@ -0,0 +1,38 @@ +withHeaders([ + 'Accept' => 'application/json', + ])->json('get', '/api/v1/members'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testGetMemberDetail() { + $response = $this->withHeaders([ + 'Accept' => 'application/json', + ])->json('get', '/api/v1/members/1'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(404) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php index 2932d4a6..863f7ab8 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -3,8 +3,43 @@ namespace Tests; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; +use Illuminate\Foundation\Testing\DatabaseMigrations; + +use Illuminate\Support\Facades\Artisan; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Date; + +use App\Models\User; abstract class TestCase extends BaseTestCase { - use CreatesApplication; + use CreatesApplication, DatabaseMigrations; + + public function setUp(): void + { + parent::setUp(); + + Artisan::call('config:clear'); + Artisan::call('cache:clear'); + Artisan::call('passport:install'); + } + + public function addAdmin() { + $user = User::where(['email' => 'ledgerleapllcadmin@gmail.com'])->first(); + if (!$user) { + $user = new User; + $user->first_name = 'Ledger'; + $user->last_name = 'Leap'; + $user->email = 'ledgerleapllcadmin@gmail.com'; + $user->password = Hash::make('Ledgerleapllcadmin111@'); + $user->email_verified_at = now(); + $user->type = 'active'; + $user->role = 'admin'; + $user->save(); + } + } + + public function addMember() { + + } } From 633ecfc86ef145d51eb8217c35d33db3f64c1b11 Mon Sep 17 00:00:00 2001 From: Ledgerleap Date: Mon, 30 May 2022 13:11:44 -0400 Subject: [PATCH 17/30] # Updates --- .../2021_06_23_024422_update_column_profile2_table.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2021_06_23_024422_update_column_profile2_table.php b/database/migrations/2021_06_23_024422_update_column_profile2_table.php index 0d0e4071..1c40d120 100644 --- a/database/migrations/2021_06_23_024422_update_column_profile2_table.php +++ b/database/migrations/2021_06_23_024422_update_column_profile2_table.php @@ -14,7 +14,7 @@ class UpdateColumnProfile2Table extends Migration public function up() { Schema::table('profile', function (Blueprint $table) { - $table->string('type'); + $table->string('type')->nullable(); }); } From 2e0ac868390ba3baea284e30888403acff2ea12f Mon Sep 17 00:00:00 2001 From: Ledgerleap Date: Wed, 1 Jun 2022 10:57:29 -0400 Subject: [PATCH 18/30] # Unit Tests --- .../Controllers/Api/V1/AdminController.php | 4 +- routes/api.php | 2 +- routes/web.php | 2 +- tests/Feature/AdminFunctionsTest.php | 167 ++++++++++++++++-- tests/Feature/UserFunctionsTest.php | 53 +++++- tests/TestCase.php | 68 ++++++- 6 files changed, 275 insertions(+), 21 deletions(-) diff --git a/app/Http/Controllers/Api/V1/AdminController.php b/app/Http/Controllers/Api/V1/AdminController.php index c13b06cd..b64c2e38 100644 --- a/app/Http/Controllers/Api/V1/AdminController.php +++ b/app/Http/Controllers/Api/V1/AdminController.php @@ -238,9 +238,7 @@ public function getIntakes(Request $request) ->orWhere('users.signature_request_id', null); }) ->where(function ($query) use ($search) { - if ($search) { - $query->where('users.email', 'like', '%' . $search . '%'); - } + if ($search) $query->where('users.email', 'like', '%' . $search . '%'); }) ->orderBy('users.id', 'desc') ->paginate($limit); diff --git a/routes/api.php b/routes/api.php index be3cfb43..4b46e50b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -103,7 +103,7 @@ Route::post('/users/membership-agreement', [UserController::class, 'membershipAgreement']); Route::post('/users/check-reset-kyc', [UserController::class, 'checkResetKyc']); }); - + Route::prefix('admin')->middleware(['role_admin'])->group(function () { Route::get('/users', [AdminController::class, 'getUsers']); Route::get('/users/{id}', [AdminController::class, 'getUserDetail'])->where('id', '[0-9]+'); diff --git a/routes/web.php b/routes/web.php index 86f7b2c3..5898eee8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,4 +21,4 @@ Route::get('install', [InstallController::class, 'install']); Route::get('/install-emailer', [InstallController::class, 'installEmailer']); -Route::get('test-hash', [AuthController::class, 'testHash']); +Route::get('test-hash', [AuthController::class, 'testHash']); \ No newline at end of file diff --git a/tests/Feature/AdminFunctionsTest.php b/tests/Feature/AdminFunctionsTest.php index 1dd15438..b3898769 100644 --- a/tests/Feature/AdminFunctionsTest.php +++ b/tests/Feature/AdminFunctionsTest.php @@ -8,15 +8,158 @@ class AdminFunctionsTest extends TestCase { - /** - * A basic feature test example. - * - * @return void - */ - public function test_example() - { - $response = $this->get('/'); - - $response->assertStatus(200); - } -} + public function testGetGraphInfo() { + $response = $this->withHeaders([ + 'Accept' => 'application/json', + ])->json('get', '/api/v1/graph-info'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testGetUsers() { + $token = $this->getAdminToken(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('get', '/api/v1/admin/users'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testListNode() { + $token = $this->getAdminToken(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('get', '/api/v1/admin/list-node'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testGetIntakes() { + $token = $this->getAdminToken(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('get', '/api/v1/admin/users/intakes'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testApproveIntakes() { + $token = $this->getAdminToken(); + $user = $this->addUser(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('post', '/api/v1/admin/users/intakes/' . $user->id . '/approve'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testResetIntakes() { + $token = $this->getAdminToken(); + $user = $this->addUser(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('post', '/api/v1/admin/users/intakes/' . $user->id . '/reset', [ + 'message' => 'Reset Message' + ]); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testBanUser() { + $token = $this->getAdminToken(); + $user = $this->addUser(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('post', '/api/v1/admin/users/' . $user->id . '/ban'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testGetBallots() { + $token = $this->getAdminToken(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('get', '/api/v1/admin/ballots'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testGetPerks() { + $token = $this->getAdminToken(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('get', '/api/v1/admin/perks'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } +} \ No newline at end of file diff --git a/tests/Feature/UserFunctionsTest.php b/tests/Feature/UserFunctionsTest.php index 981a3fa7..2509d545 100644 --- a/tests/Feature/UserFunctionsTest.php +++ b/tests/Feature/UserFunctionsTest.php @@ -35,4 +35,55 @@ public function testGetMemberDetail() { 'data', ]); } -} + + public function testGetProfile() { + $token = $this->getUserToken(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('get', '/api/v1/users/profile'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testListNodes() { + $token = $this->getUserToken(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('get', '/api/v1/users/list-node'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } + + public function testInfoDashboard() { + $token = $this->getUserToken(); + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer ' . $token, + ])->json('get', '/api/v1/users/dashboard'); + + // $apiResponse = $response->baseResponse->getData(); + + $response->assertStatus(200) + ->assertJsonStructure([ + 'message', + 'data', + ]); + } +} \ No newline at end of file diff --git a/tests/TestCase.php b/tests/TestCase.php index 863f7ab8..d0ece4d9 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -10,6 +10,8 @@ use Illuminate\Support\Facades\Date; use App\Models\User; +use App\Models\Profile; +use App\Models\VerifyUser; abstract class TestCase extends BaseTestCase { @@ -18,7 +20,6 @@ abstract class TestCase extends BaseTestCase public function setUp(): void { parent::setUp(); - Artisan::call('config:clear'); Artisan::call('cache:clear'); Artisan::call('passport:install'); @@ -39,7 +40,68 @@ public function addAdmin() { } } - public function addMember() { + public function getAdminToken() { + $this->addAdmin(); + + $params = [ + 'email' => 'ledgerleapllcadmin@gmail.com', + 'password' => 'Ledgerleapllcadmin111@', + ]; + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + ])->json('post', '/api/v1/auth/login', $params); + + $apiResponse = $response->baseResponse->getData(); + + if ($apiResponse && isset($apiResponse->data) && isset($apiResponse->data->access_token)) + return $apiResponse->data->access_token; + return null; + } + + public function addUser() { + $first_name = 'Test'; + $last_name = 'Individual'; + $email = 'testindividual@gmail.com'; + $password = 'TestIndividual111@'; + $pseudonym = 'testindividual'; + $telegram = '@testindividual'; + + $user = User::where('email', $email)->first(); + if (!$user) { + $user = new User; + $user->first_name = $first_name; + $user->last_name = $last_name; + $user->email = $email; + $user->password = bcrypt($password); + $user->pseudonym = $pseudonym; + $user->telegram = $telegram; + $user->type = User::TYPE_INDIVIDUAL; + $user->email_verified_at = now(); + $user->signature_request_id = 'TestSignatureRequestId'; + $user->role = 'member'; + $user->letter_file = 'LetterFileLink'; + $user->save(); + } + return $user; + } + + public function getUserToken() { + $this->addUser(); + + $params = [ + 'email' => 'testindividual@gmail.com', + 'password' => 'TestIndividual111@', + ]; + + $response = $this->withHeaders([ + 'Accept' => 'application/json', + ])->json('post', '/api/v1/auth/login', $params); + + $apiResponse = $response->baseResponse->getData(); + if ($apiResponse && isset($apiResponse->data) && isset($apiResponse->data->access_token)) + return $apiResponse->data->access_token; + return null; } -} +} \ No newline at end of file From 65cb638f52aa13fa18963c0c397fdec2201cf696 Mon Sep 17 00:00:00 2001 From: = <=> Date: Thu, 2 Jun 2022 10:43:27 -0400 Subject: [PATCH 19/30] "guzzlehttp/guzzle": "7.4.3" --- composer.json | 2 +- composer.lock | 1136 +++++++++++++++++++++++++++++-------------------- 2 files changed, 676 insertions(+), 462 deletions(-) diff --git a/composer.json b/composer.json index 68831e6b..f82ff75a 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ "doctrine/dbal": "^3.1", "fideloper/proxy": "^4.4", "fruitcake/laravel-cors": "^2.0", - "guzzlehttp/guzzle": "^7.0.1", + "guzzlehttp/guzzle": "^7.4.3", "hellosign/hellosign-php-sdk": "^3.7", "laravel/framework": "^8.40", "laravel/passport": "^10.1", diff --git a/composer.lock b/composer.lock index d3846e4e..8b12678c 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": "16acde0192038c2d0d58b08808d29dfc", + "content-hash": "40b37b5cdafdf3aa242e63c923f12f5b", "packages": [ { "name": "asm89/stack-cors", @@ -114,16 +114,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.212.3", + "version": "3.224.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "1d3db6d276299136bcaa7896653be0dcd2aaa92a" + "reference": "a2e6461261a92570128e6c2b6fb1896f3d16b424" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/1d3db6d276299136bcaa7896653be0dcd2aaa92a", - "reference": "1d3db6d276299136bcaa7896653be0dcd2aaa92a", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/a2e6461261a92570128e6c2b6fb1896f3d16b424", + "reference": "a2e6461261a92570128e6c2b6fb1896f3d16b424", "shasum": "" }, "require": { @@ -131,9 +131,9 @@ "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0", + "guzzlehttp/guzzle": "^5.3.3 || ^6.2.1 || ^7.0", "guzzlehttp/promises": "^1.4.0", - "guzzlehttp/psr7": "^1.7.0|^2.0", + "guzzlehttp/psr7": "^1.7.0 || ^2.1.1", "mtdowling/jmespath.php": "^2.6", "php": ">=5.5" }, @@ -148,7 +148,7 @@ "ext-sockets": "*", "nette/neon": "^2.3", "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^4.8.35|^5.4.3", + "phpunit/phpunit": "^4.8.35 || ^5.6.3", "psr/cache": "^1.0", "psr/simple-cache": "^1.0", "sebastian/comparator": "^1.2.3" @@ -199,9 +199,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.212.3" + "source": "https://github.com/aws/aws-sdk-php/tree/3.224.2" }, - "time": "2022-03-07T19:48:01+00:00" + "time": "2022-06-01T18:17:06+00:00" }, { "name": "brick/math", @@ -406,16 +406,16 @@ }, { "name": "doctrine/cache", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", "shasum": "" }, "require": { @@ -425,18 +425,12 @@ "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^8.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "predis/predis": "~1.0", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", - "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" }, "type": "library", "autoload": { @@ -485,7 +479,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.1.1" + "source": "https://github.com/doctrine/cache/tree/2.2.0" }, "funding": [ { @@ -501,26 +495,26 @@ "type": "tidelift" } ], - "time": "2021-07-17T14:49:29+00:00" + "time": "2022-05-20T20:07:39+00:00" }, { "name": "doctrine/dbal", - "version": "3.3.2", + "version": "3.3.6", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "35eae239ef515d55ebb24e9d4715cad09a4f58ed" + "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/35eae239ef515d55ebb24e9d4715cad09a4f58ed", - "reference": "35eae239ef515d55ebb24e9d4715cad09a4f58ed", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/9e7f76dd1cde81c62574fdffa5a9c655c847ad21", + "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3", + "doctrine/deprecations": "^0.5.3|^1", "doctrine/event-manager": "^1.0", "php": "^7.3 || ^8.0", "psr/cache": "^1|^2|^3", @@ -528,15 +522,15 @@ }, "require-dev": { "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.4.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "9.5.11", + "jetbrains/phpstorm-stubs": "2022.1", + "phpstan/phpstan": "1.6.3", + "phpstan/phpstan-strict-rules": "^1.2", + "phpunit/phpunit": "9.5.20", "psalm/plugin-phpunit": "0.16.1", "squizlabs/php_codesniffer": "3.6.2", "symfony/cache": "^5.2|^6.0", "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.16.1" + "vimeo/psalm": "4.23.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -596,7 +590,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.2" + "source": "https://github.com/doctrine/dbal/tree/3.3.6" }, "funding": [ { @@ -612,29 +606,29 @@ "type": "tidelift" } ], - "time": "2022-02-05T16:33:45+00:00" + "time": "2022-05-02T17:21:01+00:00" }, { "name": "doctrine/deprecations", - "version": "v0.5.3", + "version": "v1.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", "shasum": "" }, "require": { "php": "^7.1|^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0|^7.0|^8.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "psr/log": "^1.0" + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -653,9 +647,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" }, - "time": "2021-03-21T12:59:47+00:00" + "time": "2022-05-02T15:47:09+00:00" }, { "name": "doctrine/event-manager", @@ -1107,23 +1101,28 @@ }, { "name": "firebase/php-jwt", - "version": "v5.5.1", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "83b609028194aa042ea33b5af2d41a7427de80e6" + "reference": "d28e6df83830252650da4623c78aaaf98fb385f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/83b609028194aa042ea33b5af2d41a7427de80e6", - "reference": "83b609028194aa042ea33b5af2d41a7427de80e6", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/d28e6df83830252650da4623c78aaaf98fb385f3", + "reference": "d28e6df83830252650da4623c78aaaf98fb385f3", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.1||^8.0" }, "require-dev": { - "phpunit/phpunit": ">=4.8 <=9" + "guzzlehttp/guzzle": "^6.5||^7.4", + "phpspec/prophecy-phpunit": "^1.1", + "phpunit/phpunit": "^7.5||^9.5", + "psr/cache": "^1.0||^2.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" }, "suggest": { "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" @@ -1158,9 +1157,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v5.5.1" + "source": "https://github.com/firebase/php-jwt/tree/v6.2.0" }, - "time": "2021-11-08T20:18:51+00:00" + "time": "2022-05-13T20:54:50+00:00" }, { "name": "fruitcake/laravel-cors", @@ -1305,16 +1304,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.4.1", + "version": "7.4.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" + "reference": "74a8602c6faec9ef74b7a9391ac82c5e65b1cdab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", - "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/74a8602c6faec9ef74b7a9391ac82c5e65b1cdab", + "reference": "74a8602c6faec9ef74b7a9391ac82c5e65b1cdab", "shasum": "" }, "require": { @@ -1409,7 +1408,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.1" + "source": "https://github.com/guzzle/guzzle/tree/7.4.3" }, "funding": [ { @@ -1425,7 +1424,7 @@ "type": "tidelift" } ], - "time": "2021-12-06T18:43:05+00:00" + "time": "2022-05-25T13:24:33+00:00" }, { "name": "guzzlehttp/promises", @@ -1513,16 +1512,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.1.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c94a94f120803a18554c1805ef2e539f8285f9a2", + "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2", "shasum": "" }, "require": { @@ -1546,7 +1545,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" } }, "autoload": { @@ -1608,7 +1607,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.1.0" + "source": "https://github.com/guzzle/psr7/tree/2.2.1" }, "funding": [ { @@ -1624,7 +1623,7 @@ "type": "tidelift" } ], - "time": "2021-10-06T17:43:30+00:00" + "time": "2022-03-20T21:55:58+00:00" }, { "name": "hellosign/hellosign-php-sdk", @@ -1671,16 +1670,16 @@ }, { "name": "laravel/framework", - "version": "v8.83.3", + "version": "v8.83.15", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "b4ed222a188cca74ca9062296e525d26ae54a0ce" + "reference": "bf8fbdd9061611b2c05562fa14f6987cc5145d78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/b4ed222a188cca74ca9062296e525d26ae54a0ce", - "reference": "b4ed222a188cca74ca9062296e525d26ae54a0ce", + "url": "https://api.github.com/repos/laravel/framework/zipball/bf8fbdd9061611b2c05562fa14f6987cc5145d78", + "reference": "bf8fbdd9061611b2c05562fa14f6987cc5145d78", "shasum": "" }, "require": { @@ -1840,34 +1839,34 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-03-03T15:14:29+00:00" + "time": "2022-05-31T14:57:02+00:00" }, { "name": "laravel/passport", - "version": "v10.3.2", + "version": "v10.4.1", "source": { "type": "git", "url": "https://github.com/laravel/passport.git", - "reference": "c56207e9a37c849da0164842a609a9f38747e95b" + "reference": "b62b418a6d9e9aca231a587be0fc14dc55cd8d77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/passport/zipball/c56207e9a37c849da0164842a609a9f38747e95b", - "reference": "c56207e9a37c849da0164842a609a9f38747e95b", + "url": "https://api.github.com/repos/laravel/passport/zipball/b62b418a6d9e9aca231a587be0fc14dc55cd8d77", + "reference": "b62b418a6d9e9aca231a587be0fc14dc55cd8d77", "shasum": "" }, "require": { "ext-json": "*", - "firebase/php-jwt": "^5.0", - "illuminate/auth": "^8.2|^9.0", - "illuminate/console": "^8.2|^9.0", - "illuminate/container": "^8.2|^9.0", - "illuminate/contracts": "^8.2|^9.0", - "illuminate/cookie": "^8.2|^9.0", - "illuminate/database": "^8.2|^9.0", - "illuminate/encryption": "^8.2|^9.0", - "illuminate/http": "^8.2|^9.0", - "illuminate/support": "^8.2|^9.0", + "firebase/php-jwt": "^6.0", + "illuminate/auth": "^8.37|^9.0", + "illuminate/console": "^8.37|^9.0", + "illuminate/container": "^8.37|^9.0", + "illuminate/contracts": "^8.37|^9.0", + "illuminate/cookie": "^8.37|^9.0", + "illuminate/database": "^8.37|^9.0", + "illuminate/encryption": "^8.37|^9.0", + "illuminate/http": "^8.37|^9.0", + "illuminate/support": "^8.37|^9.0", "lcobucci/jwt": "^3.4|^4.0", "league/oauth2-server": "^8.2", "nyholm/psr7": "^1.3", @@ -1917,20 +1916,20 @@ "issues": "https://github.com/laravel/passport/issues", "source": "https://github.com/laravel/passport" }, - "time": "2022-02-15T21:44:15+00:00" + "time": "2022-04-16T13:38:08+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.1.1", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e" + "reference": "09f0e9fb61829f628205b7c94906c28740ff9540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/9e4b005daa20b0c161f3845040046dc9ddc1d74e", - "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/09f0e9fb61829f628205b7c94906c28740ff9540", + "reference": "09f0e9fb61829f628205b7c94906c28740ff9540", "shasum": "" }, "require": { @@ -1976,20 +1975,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2022-02-11T19:23:53+00:00" + "time": "2022-05-16T17:09:47+00:00" }, { "name": "laravel/tinker", - "version": "v2.7.0", + "version": "v2.7.2", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073" + "reference": "dff39b661e827dae6e092412f976658df82dbac5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/5f2f9815b7631b9f586a3de7933c25f9327d4073", - "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073", + "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5", + "reference": "dff39b661e827dae6e092412f976658df82dbac5", "shasum": "" }, "require": { @@ -2042,37 +2041,37 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.7.0" + "source": "https://github.com/laravel/tinker/tree/v2.7.2" }, - "time": "2022-01-10T08:52:49+00:00" + "time": "2022-03-23T12:38:24+00:00" }, { "name": "lcobucci/clock", - "version": "2.0.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "353d83fe2e6ae95745b16b3d911813df6a05bfb3" + "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/353d83fe2e6ae95745b16b3d911813df6a05bfb3", - "reference": "353d83fe2e6ae95745b16b3d911813df6a05bfb3", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/fb533e093fd61321bfcbac08b131ce805fe183d3", + "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.0", + "stella-maris/clock": "^0.1.4" }, "require-dev": { - "infection/infection": "^0.17", - "lcobucci/coding-standard": "^6.0", - "phpstan/extension-installer": "^1.0", + "infection/infection": "^0.26", + "lcobucci/coding-standard": "^8.0", + "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^0.12", "phpstan/phpstan-deprecation-rules": "^0.12", "phpstan/phpstan-phpunit": "^0.12", "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/php-code-coverage": "9.1.4", - "phpunit/phpunit": "9.3.7" + "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { @@ -2093,7 +2092,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/2.0.x" + "source": "https://github.com/lcobucci/clock/tree/2.2.0" }, "funding": [ { @@ -2105,7 +2104,7 @@ "type": "patreon" } ], - "time": "2020-08-27T18:56:02+00:00" + "time": "2022-04-19T19:34:17+00:00" }, { "name": "lcobucci/jwt", @@ -2183,16 +2182,16 @@ }, { "name": "league/commonmark", - "version": "2.2.3", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "47b015bc4e50fd4438c1ffef6139a1fb65d2ab71" + "reference": "cb36fee279f7fca01d5d9399ddd1b37e48e2eca1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/47b015bc4e50fd4438c1ffef6139a1fb65d2ab71", - "reference": "47b015bc4e50fd4438c1ffef6139a1fb65d2ab71", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/cb36fee279f7fca01d5d9399ddd1b37e48e2eca1", + "reference": "cb36fee279f7fca01d5d9399ddd1b37e48e2eca1", "shasum": "" }, "require": { @@ -2201,17 +2200,19 @@ "php": "^7.4 || ^8.0", "psr/event-dispatcher": "^1.0", "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "require-dev": { "cebe/markdown": "^1.0", "commonmark/cmark": "0.30.0", "commonmark/commonmark.js": "0.30.0", "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", "michelf/php-markdown": "^1.4", + "nyholm/psr7": "^1.5", "phpstan/phpstan": "^0.12.88 || ^1.0.0", "phpunit/phpunit": "^9.5.5", "scrutinizer/ocular": "^1.8.1", @@ -2226,7 +2227,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.3-dev" + "dev-main": "2.4-dev" } }, "autoload": { @@ -2283,7 +2284,7 @@ "type": "tidelift" } ], - "time": "2022-02-26T21:24:45+00:00" + "time": "2022-05-14T15:37:39+00:00" }, { "name": "league/config", @@ -2517,16 +2518,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.9.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69" + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", "shasum": "" }, "require": { @@ -2557,7 +2558,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.9.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" }, "funding": [ { @@ -2569,20 +2570,20 @@ "type": "tidelift" } ], - "time": "2021-11-21T11:48:40+00:00" + "time": "2022-04-17T13:12:02+00:00" }, { "name": "league/oauth2-server", - "version": "8.3.3", + "version": "8.3.5", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-server.git", - "reference": "f5698a3893eda9a17bcd48636990281e7ca77b2a" + "reference": "7aeb7c42b463b1a6fe4d084d3145e2fa22436876" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/f5698a3893eda9a17bcd48636990281e7ca77b2a", - "reference": "f5698a3893eda9a17bcd48636990281e7ca77b2a", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/7aeb7c42b463b1a6fe4d084d3145e2fa22436876", + "reference": "7aeb7c42b463b1a6fe4d084d3145e2fa22436876", "shasum": "" }, "require": { @@ -2591,6 +2592,7 @@ "ext-openssl": "*", "lcobucci/jwt": "^3.4.6 || ^4.0.4", "league/event": "^2.2", + "league/uri": "^6.4", "php": "^7.2 || ^8.0", "psr/http-message": "^1.0.1" }, @@ -2648,7 +2650,7 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-server/issues", - "source": "https://github.com/thephpleague/oauth2-server/tree/8.3.3" + "source": "https://github.com/thephpleague/oauth2-server/tree/8.3.5" }, "funding": [ { @@ -2656,20 +2658,189 @@ "type": "github" } ], - "time": "2021-10-11T20:41:49+00:00" + "time": "2022-05-03T21:21:28+00:00" + }, + { + "name": "league/uri", + "version": "6.6.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "4147f19b9de3b5af6a258f35d7a0efbbf9963298" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/4147f19b9de3b5af6a258f35d7a0efbbf9963298", + "reference": "4147f19b9de3b5af6a258f35d7a0efbbf9963298", + "shasum": "" + }, + "require": { + "ext-json": "*", + "league/uri-interfaces": "^2.3", + "php": "^7.4 || ^8.0", + "psr/http-message": "^1.0" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v3.3.2", + "php-http/psr7-integration-tests": "^1.1", + "phpstan/phpstan": "^1.2.0", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpstan/phpstan-strict-rules": "^1.1.0", + "phpunit/phpunit": "^9.5.10", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-fileinfo": "Needed to create Data URI from a filepath", + "ext-intl": "Needed to improve host validation", + "league/uri-components": "Needed to easily manipulate URI objects", + "psr/http-factory": "Needed to use the URI factory" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri/issues", + "source": "https://github.com/thephpleague/uri/tree/6.6.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2022-05-28T05:44:35+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", + "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.19", + "phpstan/phpstan": "^0.12.90", + "phpstan/phpstan-phpunit": "^0.12.19", + "phpstan/phpstan-strict-rules": "^0.12.9", + "phpunit/phpunit": "^8.5.15 || ^9.5" + }, + "suggest": { + "ext-intl": "to use the IDNA feature", + "symfony/intl": "to use the IDNA feature via Symfony Polyfill" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interface for URI representation", + "homepage": "http://github.com/thephpleague/uri-interfaces", + "keywords": [ + "rfc3986", + "rfc3987", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/thephpleague/uri-interfaces/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2021-06-28T04:27:21+00:00" }, { "name": "monolog/monolog", - "version": "2.3.5", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + "reference": "247918972acd74356b0a91dfaa5adcaec069b6c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/247918972acd74356b0a91dfaa5adcaec069b6c0", + "reference": "247918972acd74356b0a91dfaa5adcaec069b6c0", "shasum": "" }, "require": { @@ -2682,18 +2853,23 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", + "phpspec/prophecy": "^1.15", "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", + "phpunit/phpunit": "^8.5.14", "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90@dev", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -2743,7 +2919,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + "source": "https://github.com/Seldaek/monolog/tree/2.6.0" }, "funding": [ { @@ -2755,7 +2931,7 @@ "type": "tidelift" } ], - "time": "2021-10-01T21:08:31+00:00" + "time": "2022-05-10T09:36:00+00:00" }, { "name": "mtdowling/jmespath.php", @@ -2820,16 +2996,16 @@ }, { "name": "nesbot/carbon", - "version": "2.57.0", + "version": "2.58.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "4a54375c21eea4811dbd1149fe6b246517554e78" + "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78", - "reference": "4a54375c21eea4811dbd1149fe6b246517554e78", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/97a34af22bde8d0ac20ab34b29d7bfe360902055", + "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055", "shasum": "" }, "require": { @@ -2847,7 +3023,8 @@ "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12.54 || ^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.14", + "phpunit/php-file-iterator": "^2.0.5", + "phpunit/phpunit": "^7.5.20 || ^8.5.23", "squizlabs/php_codesniffer": "^3.4" }, "bin": [ @@ -2912,7 +3089,7 @@ "type": "tidelift" } ], - "time": "2022-02-13T18:13:33+00:00" + "time": "2022-04-25T19:31:17+00:00" }, { "name": "nette/schema", @@ -3063,16 +3240,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", "shasum": "" }, "require": { @@ -3113,9 +3290,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2022-05-31T20:59:12+00:00" }, { "name": "nyholm/psr7", @@ -3503,16 +3680,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.13", + "version": "3.0.14", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "1443ab79364eea48665fa8c09ac67f37d1025f7e" + "reference": "2f0b7af658cbea265cbb4a791d6c29a6613f98ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/1443ab79364eea48665fa8c09ac67f37d1025f7e", - "reference": "1443ab79364eea48665fa8c09ac67f37d1025f7e", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/2f0b7af658cbea265cbb4a791d6c29a6613f98ef", + "reference": "2f0b7af658cbea265cbb4a791d6c29a6613f98ef", "shasum": "" }, "require": { @@ -3521,9 +3698,7 @@ "php": ">=5.6.1" }, "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "^5.7|^6.0|^9.4", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "*" }, "suggest": { "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", @@ -3594,7 +3769,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.13" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.14" }, "funding": [ { @@ -3610,24 +3785,24 @@ "type": "tidelift" } ], - "time": "2022-01-30T08:50:05+00:00" + "time": "2022-04-04T05:15:45+00:00" }, { "name": "psr/cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -3647,7 +3822,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -3657,9 +3832,9 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/container", @@ -3921,30 +4096,30 @@ }, { "name": "psr/log", - "version": "1.1.4", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3965,9 +4140,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/2.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:41:46+00:00" }, { "name": "psr/simple-cache", @@ -4022,16 +4197,16 @@ }, { "name": "psy/psysh", - "version": "v0.11.2", + "version": "v0.11.5", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "7f7da640d68b9c9fec819caae7c744a213df6514" + "reference": "c23686f9c48ca202710dbb967df8385a952a2daf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7f7da640d68b9c9fec819caae7c744a213df6514", - "reference": "7f7da640d68b9c9fec819caae7c744a213df6514", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/c23686f9c48ca202710dbb967df8385a952a2daf", + "reference": "c23686f9c48ca202710dbb967df8385a952a2daf", "shasum": "" }, "require": { @@ -4046,15 +4221,13 @@ "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.05.02" + "bamarni/composer-bin-plugin": "^1.2" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." }, "bin": [ "bin/psysh" @@ -4094,9 +4267,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.2" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.5" }, - "time": "2022-02-28T15:28:54+00:00" + "time": "2022-05-27T18:03:49+00:00" }, { "name": "ralouphie/getallheaders", @@ -4223,25 +4396,24 @@ }, { "name": "ramsey/uuid", - "version": "4.2.3", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", + "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", "shasum": "" }, "require": { "brick/math": "^0.8 || ^0.9", + "ext-ctype": "*", "ext-json": "*", - "php": "^7.2 || ^8.0", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.14" + "php": "^8.0", + "ramsey/collection": "^1.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -4278,9 +4450,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - }, "captainhook": { "force-install": true } @@ -4305,7 +4474,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.3" + "source": "https://github.com/ramsey/uuid/tree/4.3.1" }, "funding": [ { @@ -4317,20 +4486,67 @@ "type": "tidelift" } ], - "time": "2021-09-25T23:10:38+00:00" + "time": "2022-03-27T21:42:02+00:00" + }, + { + "name": "stella-maris/clock", + "version": "0.1.4", + "source": { + "type": "git", + "url": "https://gitlab.com/stella-maris/clock.git", + "reference": "8a0a967896df4c63417385dc69328a0aec84d9cf" + }, + "dist": { + "type": "zip", + "url": "https://gitlab.com/api/v4/projects/stella-maris%2Fclock/repository/archive.zip?sha=8a0a967896df4c63417385dc69328a0aec84d9cf", + "reference": "8a0a967896df4c63417385dc69328a0aec84d9cf", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "StellaMaris\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Heigl", + "role": "Maintainer" + } + ], + "description": "A pre-release of the proposed PSR-20 Clock-Interface", + "homepage": "https://gitlab.com/stella-maris/clock", + "keywords": [ + "clock", + "datetime", + "point in time", + "psr20" + ], + "support": { + "issues": "https://gitlab.com/stella-maris/clock/-/issues", + "source": "https://gitlab.com/stella-maris/clock/-/tree/0.1.4" + }, + "time": "2022-04-17T14:12:26+00:00" }, { "name": "stripe/stripe-php", - "version": "v7.121.0", + "version": "v7.128.0", "source": { "type": "git", "url": "https://github.com/stripe/stripe-php.git", - "reference": "e36e7afb71ae5511aae23b52dca712a0ef06d981" + "reference": "c704949c49b72985c76cc61063aa26fefbd2724e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stripe/stripe-php/zipball/e36e7afb71ae5511aae23b52dca712a0ef06d981", - "reference": "e36e7afb71ae5511aae23b52dca712a0ef06d981", + "url": "https://api.github.com/repos/stripe/stripe-php/zipball/c704949c49b72985c76cc61063aa26fefbd2724e", + "reference": "c704949c49b72985c76cc61063aa26fefbd2724e", "shasum": "" }, "require": { @@ -4375,9 +4591,9 @@ ], "support": { "issues": "https://github.com/stripe/stripe-php/issues", - "source": "https://github.com/stripe/stripe-php/tree/v7.121.0" + "source": "https://github.com/stripe/stripe-php/tree/v7.128.0" }, - "time": "2022-03-30T15:51:23+00:00" + "time": "2022-05-05T17:18:02+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -4457,16 +4673,16 @@ }, { "name": "symfony/console", - "version": "v5.4.5", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad" + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad", - "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad", + "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", "shasum": "" }, "require": { @@ -4536,7 +4752,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.5" + "source": "https://github.com/symfony/console/tree/v5.4.9" }, "funding": [ { @@ -4552,25 +4768,24 @@ "type": "tidelift" } ], - "time": "2022-02-24T12:45:35+00:00" + "time": "2022-05-18T06:17:34+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e" + "reference": "05c40f02f621609404b8820ff8bc39acb46e19cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/05c40f02f621609404b8820ff8bc39acb46e19cf", + "reference": "05c40f02f621609404b8820ff8bc39acb46e19cf", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -4602,7 +4817,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.3" + "source": "https://github.com/symfony/css-selector/tree/v6.1.0" }, "funding": [ { @@ -4618,29 +4833,29 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -4669,7 +4884,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.0" }, "funding": [ { @@ -4685,20 +4900,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.3", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5" + "reference": "c116cda1f51c678782768dce89a45f13c949455d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", - "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c116cda1f51c678782768dce89a45f13c949455d", + "reference": "c116cda1f51c678782768dce89a45f13c949455d", "shasum": "" }, "require": { @@ -4740,7 +4955,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.3" + "source": "https://github.com/symfony/error-handler/tree/v5.4.9" }, "funding": [ { @@ -4756,44 +4971,42 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-21T13:57:48+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", - "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/stopwatch": "^5.4|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -4825,7 +5038,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" }, "funding": [ { @@ -4841,24 +5054,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-05T16:51:07+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.0", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, "suggest": { @@ -4867,7 +5080,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -4904,7 +5117,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.0" }, "funding": [ { @@ -4920,20 +5133,20 @@ "type": "tidelift" } ], - "time": "2021-07-12T14:48:14+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/finder", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", - "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", "shasum": "" }, "require": { @@ -4967,7 +5180,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.3" + "source": "https://github.com/symfony/finder/tree/v5.4.8" }, "funding": [ { @@ -4983,20 +5196,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:34:36+00:00" + "time": "2022-04-15T08:07:45+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.6", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465" + "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/34e89bc147633c0f9dd6caaaf56da3b806a21465", - "reference": "34e89bc147633c0f9dd6caaaf56da3b806a21465", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6b0d0e4aca38d57605dcd11e2416994b38774522", + "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522", "shasum": "" }, "require": { @@ -5040,7 +5253,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.6" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.9" }, "funding": [ { @@ -5056,20 +5269,20 @@ "type": "tidelift" } ], - "time": "2022-03-05T21:03:43+00:00" + "time": "2022-05-17T15:07:29+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.6", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d" + "reference": "34b121ad3dc761f35fe1346d2f15618f8cbf77f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d41f29ae9af1b5f40c7ebcddf09082953229411d", - "reference": "d41f29ae9af1b5f40c7ebcddf09082953229411d", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/34b121ad3dc761f35fe1346d2f15618f8cbf77f8", + "reference": "34b121ad3dc761f35fe1346d2f15618f8cbf77f8", "shasum": "" }, "require": { @@ -5152,7 +5365,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/v5.4.6" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.9" }, "funding": [ { @@ -5168,20 +5381,20 @@ "type": "tidelift" } ], - "time": "2022-03-05T21:14:51+00:00" + "time": "2022-05-27T07:09:08+00:00" }, { "name": "symfony/mime", - "version": "v5.4.3", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f" + "reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f", - "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f", + "url": "https://api.github.com/repos/symfony/mime/zipball/2b3802a24e48d0cfccf885173d2aac91e73df92e", + "reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e", "shasum": "" }, "require": { @@ -5235,7 +5448,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.3" + "source": "https://github.com/symfony/mime/tree/v5.4.9" }, "funding": [ { @@ -5251,20 +5464,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-21T10:24:18+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { @@ -5279,7 +5492,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5317,7 +5530,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -5333,20 +5546,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40" + "reference": "143f1881e655bebca1312722af8068de235ae5dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40", - "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc", + "reference": "143f1881e655bebca1312722af8068de235ae5dc", "shasum": "" }, "require": { @@ -5361,7 +5574,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5400,7 +5613,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0" }, "funding": [ { @@ -5416,20 +5629,20 @@ "type": "tidelift" } ], - "time": "2022-01-04T09:04:05+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "433d05519ce6990bf3530fba6957499d327395c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", "shasum": "" }, "require": { @@ -5441,7 +5654,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5481,7 +5694,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" }, "funding": [ { @@ -5497,20 +5710,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", "shasum": "" }, "require": { @@ -5524,7 +5737,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5568,7 +5781,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" }, "funding": [ { @@ -5584,20 +5797,20 @@ "type": "tidelift" } ], - "time": "2021-09-14T14:02:44+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -5609,7 +5822,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5652,7 +5865,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { @@ -5668,20 +5881,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { @@ -5696,7 +5909,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5735,7 +5948,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -5751,20 +5964,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", "shasum": "" }, "require": { @@ -5773,7 +5986,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5811,7 +6024,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" }, "funding": [ { @@ -5827,20 +6040,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", "shasum": "" }, "require": { @@ -5849,7 +6062,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5890,7 +6103,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" }, "funding": [ { @@ -5906,20 +6119,20 @@ "type": "tidelift" } ], - "time": "2021-06-05T21:20:04+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -5928,7 +6141,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5973,7 +6186,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -5989,20 +6202,20 @@ "type": "tidelift" } ], - "time": "2022-03-04T08:16:47+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.25.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", "shasum": "" }, "require": { @@ -6011,7 +6224,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6052,7 +6265,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { @@ -6068,20 +6281,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:11+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/process", - "version": "v5.4.5", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "95440409896f90a5f85db07a32b517ecec17fa4c" + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/95440409896f90a5f85db07a32b517ecec17fa4c", - "reference": "95440409896f90a5f85db07a32b517ecec17fa4c", + "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", "shasum": "" }, "require": { @@ -6114,7 +6327,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.5" + "source": "https://github.com/symfony/process/tree/v5.4.8" }, "funding": [ { @@ -6130,7 +6343,7 @@ "type": "tidelift" } ], - "time": "2022-01-30T18:16:22+00:00" + "time": "2022-04-08T05:07:18+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -6222,16 +6435,16 @@ }, { "name": "symfony/routing", - "version": "v5.4.3", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "44b29c7a94e867ccde1da604792f11a469958981" + "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981", - "reference": "44b29c7a94e867ccde1da604792f11a469958981", + "url": "https://api.github.com/repos/symfony/routing/zipball/e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", + "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", "shasum": "" }, "require": { @@ -6292,7 +6505,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.3" + "source": "https://github.com/symfony/routing/tree/v5.4.8" }, "funding": [ { @@ -6308,26 +6521,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-04-18T21:45:37+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -6375,7 +6588,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" }, "funding": [ { @@ -6391,38 +6604,37 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:48:04+00:00" + "time": "2022-03-13T20:07:29+00:00" }, { "name": "symfony/string", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10" + "reference": "d3edc75baf9f1d4f94879764dda2e1ac33499529" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10", - "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10", + "url": "https://api.github.com/repos/symfony/string/zipball/d3edc75baf9f1d4f94879764dda2e1ac33499529", + "reference": "d3edc75baf9f1d4f94879764dda2e1ac33499529", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -6461,7 +6673,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.3" + "source": "https://github.com/symfony/string/tree/v6.1.0" }, "funding": [ { @@ -6477,52 +6689,51 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-04-22T08:18:23+00:00" }, { "name": "symfony/translation", - "version": "v5.4.6", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b" + "reference": "b254416631615bc6fe49b0a67f18658827288147" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a7ca9fdfffb0174209440c2ffa1dee228e15d95b", - "reference": "a7ca9fdfffb0174209440c2ffa1dee228e15d95b", + "url": "https://api.github.com/repos/symfony/translation/zipball/b254416631615bc6fe49b0a67f18658827288147", + "reference": "b254416631615bc6fe49b0a67f18658827288147", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.3|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/console": "<5.3", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -6558,7 +6769,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.6" + "source": "https://github.com/symfony/translation/tree/v6.1.0" }, "funding": [ { @@ -6574,24 +6785,24 @@ "type": "tidelift" } ], - "time": "2022-03-02T12:56:28+00:00" + "time": "2022-05-11T12:12:29+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.0", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" + "reference": "bfddd2a1faa271b782b791c361cc16e2dd49dfaa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/bfddd2a1faa271b782b791c361cc16e2dd49dfaa", + "reference": "bfddd2a1faa271b782b791c361cc16e2dd49dfaa", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.1" }, "suggest": { "symfony/translation-implementation": "" @@ -6599,7 +6810,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -6609,7 +6820,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6636,7 +6850,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.1.0" }, "funding": [ { @@ -6652,20 +6866,20 @@ "type": "tidelift" } ], - "time": "2021-08-17T14:20:01+00:00" + "time": "2022-04-22T07:30:54+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.6", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0" + "reference": "af52239a330fafd192c773795520dc2dd62b5657" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/294e9da6e2e0dd404e983daa5aa74253d92c05d0", - "reference": "294e9da6e2e0dd404e983daa5aa74253d92c05d0", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/af52239a330fafd192c773795520dc2dd62b5657", + "reference": "af52239a330fafd192c773795520dc2dd62b5657", "shasum": "" }, "require": { @@ -6725,7 +6939,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.6" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.9" }, "funding": [ { @@ -6741,7 +6955,7 @@ "type": "tidelift" } ], - "time": "2022-03-02T12:42:23+00:00" + "time": "2022-05-21T10:24:18+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -7467,16 +7681,16 @@ }, { "name": "laravel/sail", - "version": "v1.13.5", + "version": "v1.14.8", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "aeb6eeb55b22c328d2f301145b97288127691d48" + "reference": "04b425968c6a76940bddd2cfa40bf9e9ce78eee8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/aeb6eeb55b22c328d2f301145b97288127691d48", - "reference": "aeb6eeb55b22c328d2f301145b97288127691d48", + "url": "https://api.github.com/repos/laravel/sail/zipball/04b425968c6a76940bddd2cfa40bf9e9ce78eee8", + "reference": "04b425968c6a76940bddd2cfa40bf9e9ce78eee8", "shasum": "" }, "require": { @@ -7523,7 +7737,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2022-02-17T19:59:03+00:00" + "time": "2022-05-31T14:48:21+00:00" }, { "name": "mockery/mockery", @@ -7966,16 +8180,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" + "reference": "77a32518733312af16a44300404e945338981de3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", "shasum": "" }, "require": { @@ -8010,9 +8224,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.6.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" }, - "time": "2022-01-04T19:58:01+00:00" + "time": "2022-03-15T21:29:03+00:00" }, { "name": "phpspec/prophecy", @@ -8401,16 +8615,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.17", + "version": "9.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "5c5abcfaa2cbd44b2203995d7a339ef910fe0c8f" + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5c5abcfaa2cbd44b2203995d7a339ef910fe0c8f", - "reference": "5c5abcfaa2cbd44b2203995d7a339ef910fe0c8f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", "shasum": "" }, "require": { @@ -8440,7 +8654,7 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", + "sebastian/type": "^3.0", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -8488,7 +8702,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.17" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" }, "funding": [ { @@ -8500,7 +8714,7 @@ "type": "github" } ], - "time": "2022-03-05T16:54:31+00:00" + "time": "2022-04-01T12:37:26+00:00" }, { "name": "sebastian/cli-parser", @@ -8868,16 +9082,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { @@ -8919,7 +9133,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { @@ -8927,7 +9141,7 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { "name": "sebastian/exporter", @@ -9359,28 +9573,28 @@ }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -9403,7 +9617,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" }, "funding": [ { @@ -9411,7 +9625,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2022-03-15T09:54:48+00:00" }, { "name": "sebastian/version", @@ -9526,5 +9740,5 @@ "php": "^7.3|^8.0" }, "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.3.0" } From aa698ba182f4e9a79e15ca835867320e0df61fc1 Mon Sep 17 00:00:00 2001 From: = <=> Date: Thu, 2 Jun 2022 10:48:03 -0400 Subject: [PATCH 20/30] rm composer.lock --- composer.lock | 9744 ------------------------------------------------- 1 file changed, 9744 deletions(-) delete mode 100644 composer.lock diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 8b12678c..00000000 --- a/composer.lock +++ /dev/null @@ -1,9744 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "40b37b5cdafdf3aa242e63c923f12f5b", - "packages": [ - { - "name": "asm89/stack-cors", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/asm89/stack-cors.git", - "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", - "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "symfony/http-foundation": "^4|^5|^6", - "symfony/http-kernel": "^4|^5|^6" - }, - "require-dev": { - "phpunit/phpunit": "^7|^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "psr-4": { - "Asm89\\Stack\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander", - "email": "iam.asm89@gmail.com" - } - ], - "description": "Cross-origin resource sharing library and stack middleware", - "homepage": "https://github.com/asm89/stack-cors", - "keywords": [ - "cors", - "stack" - ], - "support": { - "issues": "https://github.com/asm89/stack-cors/issues", - "source": "https://github.com/asm89/stack-cors/tree/v2.1.1" - }, - "time": "2022-01-18T09:12:03+00:00" - }, - { - "name": "aws/aws-crt-php", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "3942776a8c99209908ee0b287746263725685732" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/3942776a8c99209908ee0b287746263725685732", - "reference": "3942776a8c99209908ee0b287746263725685732", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35|^5.4.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "AWS SDK Common Runtime Team", - "email": "aws-sdk-common-runtime@amazon.com" - } - ], - "description": "AWS Common Runtime for PHP", - "homepage": "http://aws.amazon.com/sdkforphp", - "keywords": [ - "amazon", - "aws", - "crt", - "sdk" - ], - "support": { - "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.0.2" - }, - "time": "2021-09-03T22:57:30+00:00" - }, - { - "name": "aws/aws-sdk-php", - "version": "3.224.2", - "source": { - "type": "git", - "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "a2e6461261a92570128e6c2b6fb1896f3d16b424" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/a2e6461261a92570128e6c2b6fb1896f3d16b424", - "reference": "a2e6461261a92570128e6c2b6fb1896f3d16b424", - "shasum": "" - }, - "require": { - "aws/aws-crt-php": "^1.0.2", - "ext-json": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "guzzlehttp/guzzle": "^5.3.3 || ^6.2.1 || ^7.0", - "guzzlehttp/promises": "^1.4.0", - "guzzlehttp/psr7": "^1.7.0 || ^2.1.1", - "mtdowling/jmespath.php": "^2.6", - "php": ">=5.5" - }, - "require-dev": { - "andrewsville/php-token-reflection": "^1.4", - "aws/aws-php-sns-message-validator": "~1.0", - "behat/behat": "~3.0", - "doctrine/cache": "~1.4", - "ext-dom": "*", - "ext-openssl": "*", - "ext-pcntl": "*", - "ext-sockets": "*", - "nette/neon": "^2.3", - "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^4.8.35 || ^5.6.3", - "psr/cache": "^1.0", - "psr/simple-cache": "^1.0", - "sebastian/comparator": "^1.2.3" - }, - "suggest": { - "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", - "doctrine/cache": "To use the DoctrineCacheAdapter", - "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", - "ext-sockets": "To use client-side monitoring" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Aws\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Amazon Web Services", - "homepage": "http://aws.amazon.com" - } - ], - "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", - "homepage": "http://aws.amazon.com/sdkforphp", - "keywords": [ - "amazon", - "aws", - "cloud", - "dynamodb", - "ec2", - "glacier", - "s3", - "sdk" - ], - "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", - "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.224.2" - }, - "time": "2022-06-01T18:17:06+00:00" - }, - { - "name": "brick/math", - "version": "0.9.3", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.9.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "brick", - "math" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.3" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" - } - ], - "time": "2021-08-15T20:50:18+00:00" - }, - { - "name": "defuse/php-encryption", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/defuse/php-encryption.git", - "reference": "77880488b9954b7884c25555c2a0ea9e7053f9d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/defuse/php-encryption/zipball/77880488b9954b7884c25555c2a0ea9e7053f9d2", - "reference": "77880488b9954b7884c25555c2a0ea9e7053f9d2", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "paragonie/random_compat": ">= 2", - "php": ">=5.6.0" - }, - "require-dev": { - "phpunit/phpunit": "^4|^5|^6|^7|^8|^9" - }, - "bin": [ - "bin/generate-defuse-key" - ], - "type": "library", - "autoload": { - "psr-4": { - "Defuse\\Crypto\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Hornby", - "email": "taylor@defuse.ca", - "homepage": "https://defuse.ca/" - }, - { - "name": "Scott Arciszewski", - "email": "info@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "Secure PHP Encryption Library", - "keywords": [ - "aes", - "authenticated encryption", - "cipher", - "crypto", - "cryptography", - "encrypt", - "encryption", - "openssl", - "security", - "symmetric key cryptography" - ], - "support": { - "issues": "https://github.com/defuse/php-encryption/issues", - "source": "https://github.com/defuse/php-encryption/tree/v2.3.1" - }, - "time": "2021-04-09T23:57:26+00:00" - }, - { - "name": "dflydev/dot-access-data", - "version": "v3.0.1", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "0992cc19268b259a39e86f296da5f0677841f42c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", - "reference": "0992cc19268b259a39e86f296da5f0677841f42c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", - "scrutinizer/ocular": "1.6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^3.14" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Dflydev\\DotAccessData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" - }, - "time": "2021-08-13T13:06:58+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, - { - "name": "doctrine/dbal", - "version": "3.3.6", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/9e7f76dd1cde81c62574fdffa5a9c655c847ad21", - "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", - "php": "^7.3 || ^8.0", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2022.1", - "phpstan/phpstan": "1.6.3", - "phpstan/phpstan-strict-rules": "^1.2", - "phpunit/phpunit": "9.5.20", - "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.2", - "symfony/cache": "^5.2|^6.0", - "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.23.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.6" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2022-05-02T17:21:01+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" - }, - "time": "2022-05-02T15:47:09+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": "<2.9@dev" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.x" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2020-05-29T18:28:51+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^4.10" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2021-10-22T20:16:43+00:00" - }, - { - "name": "doctrine/lexer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-02-28T11:07:21+00:00" - }, - { - "name": "dragonmantank/cron-expression", - "version": "v3.3.1", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa", - "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" - }, - "replace": { - "mtdowling/cron-expression": "^1.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-webmozart-assert": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "support": { - "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1" - }, - "funding": [ - { - "url": "https://github.com/dragonmantank", - "type": "github" - } - ], - "time": "2022-01-18T15:43:28+00:00" - }, - { - "name": "egulias/email-validator", - "version": "2.1.25", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" - }, - "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "support": { - "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2020-12-29T14:50:06+00:00" - }, - { - "name": "fideloper/proxy", - "version": "4.4.1", - "source": { - "type": "git", - "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0", - "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0", - "php": ">=5.4.0" - }, - "require-dev": { - "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Fideloper\\Proxy\\TrustedProxyServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Fideloper\\Proxy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Fidao", - "email": "fideloper@gmail.com" - } - ], - "description": "Set trusted proxies for Laravel", - "keywords": [ - "load balancing", - "proxy", - "trusted proxy" - ], - "support": { - "issues": "https://github.com/fideloper/TrustedProxy/issues", - "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1" - }, - "time": "2020-10-22T13:48:01+00:00" - }, - { - "name": "firebase/php-jwt", - "version": "v6.2.0", - "source": { - "type": "git", - "url": "https://github.com/firebase/php-jwt.git", - "reference": "d28e6df83830252650da4623c78aaaf98fb385f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/d28e6df83830252650da4623c78aaaf98fb385f3", - "reference": "d28e6df83830252650da4623c78aaaf98fb385f3", - "shasum": "" - }, - "require": { - "php": "^7.1||^8.0" - }, - "require-dev": { - "guzzlehttp/guzzle": "^6.5||^7.4", - "phpspec/prophecy-phpunit": "^1.1", - "phpunit/phpunit": "^7.5||^9.5", - "psr/cache": "^1.0||^2.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0" - }, - "suggest": { - "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" - }, - "type": "library", - "autoload": { - "psr-4": { - "Firebase\\JWT\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Neuman Vong", - "email": "neuman+pear@twilio.com", - "role": "Developer" - }, - { - "name": "Anant Narayanan", - "email": "anant@php.net", - "role": "Developer" - } - ], - "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", - "homepage": "https://github.com/firebase/php-jwt", - "keywords": [ - "jwt", - "php" - ], - "support": { - "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.2.0" - }, - "time": "2022-05-13T20:54:50+00:00" - }, - { - "name": "fruitcake/laravel-cors", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/laravel-cors.git", - "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534", - "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534", - "shasum": "" - }, - "require": { - "asm89/stack-cors": "^2.0.1", - "illuminate/contracts": "^6|^7|^8|^9", - "illuminate/support": "^6|^7|^8|^9", - "php": ">=7.2" - }, - "require-dev": { - "laravel/framework": "^6|^7.24|^8", - "orchestra/testbench-dusk": "^4|^5|^6|^7", - "phpunit/phpunit": "^6|^7|^8|^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - }, - "laravel": { - "providers": [ - "Fruitcake\\Cors\\CorsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" - } - ], - "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", - "keywords": [ - "api", - "cors", - "crossdomain", - "laravel" - ], - "support": { - "issues": "https://github.com/fruitcake/laravel-cors/issues", - "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2022-02-23T14:25:13+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "v1.0.4", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "0690bde05318336c7221785f2a932467f98b64ca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca", - "reference": "0690bde05318336c7221785f2a932467f98b64ca", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "phpoption/phpoption": "^1.8" - }, - "require-dev": { - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2021-11-21T21:41:47+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.4.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "74a8602c6faec9ef74b7a9391ac82c5e65b1cdab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/74a8602c6faec9ef74b7a9391ac82c5e65b1cdab", - "reference": "74a8602c6faec9ef74b7a9391ac82c5e65b1cdab", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.8.3 || ^2.1", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.4-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2022-05-25T13:24:33+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2021-10-22T20:56:57+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "2.2.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/c94a94f120803a18554c1805ef2e539f8285f9a2", - "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.2.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2022-03-20T21:55:58+00:00" - }, - { - "name": "hellosign/hellosign-php-sdk", - "version": "v3.7.0", - "source": { - "type": "git", - "url": "https://github.com/hellosign/hellosign-php-sdk.git", - "reference": "8935f1183073e2ecb4c91da8d6003d2cf0212bff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hellosign/hellosign-php-sdk/zipball/8935f1183073e2ecb4c91da8d6003d2cf0212bff", - "reference": "8935f1183073e2ecb4c91da8d6003d2cf0212bff", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.3|^7.0" - }, - "require-dev": { - "phpunit/phpunit": "7.3.*" - }, - "type": "library", - "autoload": { - "psr-0": { - "HelloSign\\": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "HelloSign", - "email": "apisupport@hellosign.com" - } - ], - "description": "This is the official PHP wrapper for HelloSign's API", - "support": { - "issues": "https://github.com/hellosign/hellosign-php-sdk/issues", - "source": "https://github.com/hellosign/hellosign-php-sdk/tree/v3.7.0" - }, - "time": "2021-06-01T20:36:24+00:00" - }, - { - "name": "laravel/framework", - "version": "v8.83.15", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "bf8fbdd9061611b2c05562fa14f6987cc5145d78" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/bf8fbdd9061611b2c05562fa14f6987cc5145d78", - "reference": "bf8fbdd9061611b2c05562fa14f6987cc5145d78", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^1.4|^2.0", - "dragonmantank/cron-expression": "^3.0.2", - "egulias/email-validator": "^2.1.10", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "laravel/serializable-closure": "^1.0", - "league/commonmark": "^1.3|^2.0.2", - "league/flysystem": "^1.1", - "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.53.1", - "opis/closure": "^3.6", - "php": "^7.3|^8.0", - "psr/container": "^1.0", - "psr/log": "^1.0|^2.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^4.2.2", - "swiftmailer/swiftmailer": "^6.3", - "symfony/console": "^5.4", - "symfony/error-handler": "^5.4", - "symfony/finder": "^5.4", - "symfony/http-foundation": "^5.4", - "symfony/http-kernel": "^5.4", - "symfony/mime": "^5.4", - "symfony/process": "^5.4", - "symfony/routing": "^5.4", - "symfony/var-dumper": "^5.4", - "tijsverkoyen/css-to-inline-styles": "^2.2.2", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^1.6.1" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "provide": { - "psr/container-implementation": "1.0", - "psr/simple-cache-implementation": "1.0" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/collections": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/macroable": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/testing": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.198.1", - "doctrine/dbal": "^2.13.3|^3.1.4", - "filp/whoops": "^2.14.3", - "guzzlehttp/guzzle": "^6.5.5|^7.0.1", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.4.4", - "orchestra/testbench-core": "^6.27", - "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.5.19|^9.5.8", - "predis/predis": "^1.1.9", - "symfony/cache": "^5.4" - }, - "suggest": { - "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", - "ext-bcmath": "Required to use the multiple_of validation rule.", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker.", - "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", - "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", - "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "mockery/mockery": "Required to use mocking (^1.4.4).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^5.4).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", - "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "files": [ - "src/Illuminate/Collections/helpers.php", - "src/Illuminate/Events/functions.php", - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/", - "Illuminate\\Support\\": [ - "src/Illuminate/Macroable/", - "src/Illuminate/Collections/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2022-05-31T14:57:02+00:00" - }, - { - "name": "laravel/passport", - "version": "v10.4.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/passport.git", - "reference": "b62b418a6d9e9aca231a587be0fc14dc55cd8d77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/passport/zipball/b62b418a6d9e9aca231a587be0fc14dc55cd8d77", - "reference": "b62b418a6d9e9aca231a587be0fc14dc55cd8d77", - "shasum": "" - }, - "require": { - "ext-json": "*", - "firebase/php-jwt": "^6.0", - "illuminate/auth": "^8.37|^9.0", - "illuminate/console": "^8.37|^9.0", - "illuminate/container": "^8.37|^9.0", - "illuminate/contracts": "^8.37|^9.0", - "illuminate/cookie": "^8.37|^9.0", - "illuminate/database": "^8.37|^9.0", - "illuminate/encryption": "^8.37|^9.0", - "illuminate/http": "^8.37|^9.0", - "illuminate/support": "^8.37|^9.0", - "lcobucci/jwt": "^3.4|^4.0", - "league/oauth2-server": "^8.2", - "nyholm/psr7": "^1.3", - "php": "^7.3|^8.0", - "phpseclib/phpseclib": "^2.0|^3.0", - "symfony/psr-http-message-bridge": "^2.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "orchestra/testbench": "^6.0|^7.0", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Passport\\PassportServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Passport\\": "src/", - "Laravel\\Passport\\Database\\Factories\\": "database/factories/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Laravel Passport provides OAuth2 server support to Laravel.", - "keywords": [ - "laravel", - "oauth", - "passport" - ], - "support": { - "issues": "https://github.com/laravel/passport/issues", - "source": "https://github.com/laravel/passport" - }, - "time": "2022-04-16T13:38:08+00:00" - }, - { - "name": "laravel/serializable-closure", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "09f0e9fb61829f628205b7c94906c28740ff9540" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/09f0e9fb61829f628205b7c94906c28740ff9540", - "reference": "09f0e9fb61829f628205b7c94906c28740ff9540", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "pestphp/pest": "^1.18", - "phpstan/phpstan": "^0.12.98", - "symfony/var-dumper": "^5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\SerializableClosure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "nuno@laravel.com" - } - ], - "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": [ - "closure", - "laravel", - "serializable" - ], - "support": { - "issues": "https://github.com/laravel/serializable-closure/issues", - "source": "https://github.com/laravel/serializable-closure" - }, - "time": "2022-05-16T17:09:47+00:00" - }, - { - "name": "laravel/tinker", - "version": "v2.7.2", - "source": { - "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "dff39b661e827dae6e092412f976658df82dbac5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5", - "reference": "dff39b661e827dae6e092412f976658df82dbac5", - "shasum": "" - }, - "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0", - "php": "^7.2.5|^8.0", - "psy/psysh": "^0.10.4|^0.11.1", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0" - }, - "require-dev": { - "mockery/mockery": "~1.3.3|^1.4.2", - "phpunit/phpunit": "^8.5.8|^9.3.3" - }, - "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Tinker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Powerful REPL for the Laravel framework.", - "keywords": [ - "REPL", - "Tinker", - "laravel", - "psysh" - ], - "support": { - "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.7.2" - }, - "time": "2022-03-23T12:38:24+00:00" - }, - { - "name": "lcobucci/clock", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/lcobucci/clock.git", - "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/fb533e093fd61321bfcbac08b131ce805fe183d3", - "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3", - "shasum": "" - }, - "require": { - "php": "^8.0", - "stella-maris/clock": "^0.1.4" - }, - "require-dev": { - "infection/infection": "^0.26", - "lcobucci/coding-standard": "^8.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Lcobucci\\Clock\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Luís Cobucci", - "email": "lcobucci@gmail.com" - } - ], - "description": "Yet another clock abstraction", - "support": { - "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/2.2.0" - }, - "funding": [ - { - "url": "https://github.com/lcobucci", - "type": "github" - }, - { - "url": "https://www.patreon.com/lcobucci", - "type": "patreon" - } - ], - "time": "2022-04-19T19:34:17+00:00" - }, - { - "name": "lcobucci/jwt", - "version": "4.1.5", - "source": { - "type": "git", - "url": "https://github.com/lcobucci/jwt.git", - "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/fe2d89f2eaa7087af4aa166c6f480ef04e000582", - "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582", - "shasum": "" - }, - "require": { - "ext-hash": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-sodium": "*", - "lcobucci/clock": "^2.0", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "infection/infection": "^0.21", - "lcobucci/coding-standard": "^6.0", - "mikey179/vfsstream": "^1.6.7", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/php-invoker": "^3.1", - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Lcobucci\\JWT\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Luís Cobucci", - "email": "lcobucci@gmail.com", - "role": "Developer" - } - ], - "description": "A simple library to work with JSON Web Token and JSON Web Signature", - "keywords": [ - "JWS", - "jwt" - ], - "support": { - "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/4.1.5" - }, - "funding": [ - { - "url": "https://github.com/lcobucci", - "type": "github" - }, - { - "url": "https://www.patreon.com/lcobucci", - "type": "patreon" - } - ], - "time": "2021-09-28T19:34:56+00:00" - }, - { - "name": "league/commonmark", - "version": "2.3.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "cb36fee279f7fca01d5d9399ddd1b37e48e2eca1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/cb36fee279f7fca01d5d9399ddd1b37e48e2eca1", - "reference": "cb36fee279f7fca01d5d9399ddd1b37e48e2eca1", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "league/config": "^1.1.1", - "php": "^7.4 || ^8.0", - "psr/event-dispatcher": "^1.0", - "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", - "commonmark/commonmark.js": "0.30.0", - "composer/package-versions-deprecated": "^1.8", - "embed/embed": "^4.4", - "erusev/parsedown": "^1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4", - "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^0.12.88 || ^1.0.0", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "suggest": { - "symfony/yaml": "v2.3+ required if using the Front Matter extension" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - } - }, - "autoload": { - "psr-4": { - "League\\CommonMark\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", - "homepage": "https://commonmark.thephpleague.com", - "keywords": [ - "commonmark", - "flavored", - "gfm", - "github", - "github-flavored", - "markdown", - "md", - "parser" - ], - "support": { - "docs": "https://commonmark.thephpleague.com/", - "forum": "https://github.com/thephpleague/commonmark/discussions", - "issues": "https://github.com/thephpleague/commonmark/issues", - "rss": "https://github.com/thephpleague/commonmark/releases.atom", - "source": "https://github.com/thephpleague/commonmark" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], - "time": "2022-05-14T15:37:39+00:00" - }, - { - "name": "league/config", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/config.git", - "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", - "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^3.0.1", - "nette/schema": "^1.2", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.90", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Config\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Define configuration arrays with strict schemas and access values with dot notation", - "homepage": "https://config.thephpleague.com", - "keywords": [ - "array", - "config", - "configuration", - "dot", - "dot-access", - "nested", - "schema" - ], - "support": { - "docs": "https://config.thephpleague.com/", - "issues": "https://github.com/thephpleague/config/issues", - "rss": "https://github.com/thephpleague/config/releases.atom", - "source": "https://github.com/thephpleague/config" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - } - ], - "time": "2021-08-14T12:15:32+00:00" - }, - { - "name": "league/event", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/event.git", - "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/event/zipball/d2cc124cf9a3fab2bb4ff963307f60361ce4d119", - "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "henrikbjorn/phpspec-code-coverage": "~1.0.1", - "phpspec/phpspec": "^2.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Event\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Event package", - "keywords": [ - "emitter", - "event", - "listener" - ], - "support": { - "issues": "https://github.com/thephpleague/event/issues", - "source": "https://github.com/thephpleague/event/tree/master" - }, - "time": "2018-11-26T11:52:41+00:00" - }, - { - "name": "league/flysystem", - "version": "1.1.9", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" - }, - "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Filesystem abstraction: Many filesystems, one API.", - "keywords": [ - "Cloud Files", - "WebDAV", - "abstraction", - "aws", - "cloud", - "copy.com", - "dropbox", - "file systems", - "files", - "filesystem", - "filesystems", - "ftp", - "rackspace", - "remote", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.9" - }, - "funding": [ - { - "url": "https://offset.earth/frankdejonge", - "type": "other" - } - ], - "time": "2021-12-09T09:40:50+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Mime-type detection for Flysystem", - "support": { - "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" - }, - "funding": [ - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2022-04-17T13:12:02+00:00" - }, - { - "name": "league/oauth2-server", - "version": "8.3.5", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/oauth2-server.git", - "reference": "7aeb7c42b463b1a6fe4d084d3145e2fa22436876" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/7aeb7c42b463b1a6fe4d084d3145e2fa22436876", - "reference": "7aeb7c42b463b1a6fe4d084d3145e2fa22436876", - "shasum": "" - }, - "require": { - "defuse/php-encryption": "^2.2.1", - "ext-json": "*", - "ext-openssl": "*", - "lcobucci/jwt": "^3.4.6 || ^4.0.4", - "league/event": "^2.2", - "league/uri": "^6.4", - "php": "^7.2 || ^8.0", - "psr/http-message": "^1.0.1" - }, - "replace": { - "league/oauth2server": "*", - "lncd/oauth2": "*" - }, - "require-dev": { - "laminas/laminas-diactoros": "^2.4.1", - "phpstan/phpstan": "^0.12.57", - "phpstan/phpstan-phpunit": "^0.12.16", - "phpunit/phpunit": "^8.5.13", - "roave/security-advisories": "dev-master" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\OAuth2\\Server\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alex Bilbie", - "email": "hello@alexbilbie.com", - "homepage": "http://www.alexbilbie.com", - "role": "Developer" - }, - { - "name": "Andy Millington", - "email": "andrew@noexceptions.io", - "homepage": "https://www.noexceptions.io", - "role": "Developer" - } - ], - "description": "A lightweight and powerful OAuth 2.0 authorization and resource server library with support for all the core specification grants. This library will allow you to secure your API with OAuth and allow your applications users to approve apps that want to access their data from your API.", - "homepage": "https://oauth2.thephpleague.com/", - "keywords": [ - "Authentication", - "api", - "auth", - "authorisation", - "authorization", - "oauth", - "oauth 2", - "oauth 2.0", - "oauth2", - "protect", - "resource", - "secure", - "server" - ], - "support": { - "issues": "https://github.com/thephpleague/oauth2-server/issues", - "source": "https://github.com/thephpleague/oauth2-server/tree/8.3.5" - }, - "funding": [ - { - "url": "https://github.com/sephster", - "type": "github" - } - ], - "time": "2022-05-03T21:21:28+00:00" - }, - { - "name": "league/uri", - "version": "6.6.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "4147f19b9de3b5af6a258f35d7a0efbbf9963298" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/4147f19b9de3b5af6a258f35d7a0efbbf9963298", - "reference": "4147f19b9de3b5af6a258f35d7a0efbbf9963298", - "shasum": "" - }, - "require": { - "ext-json": "*", - "league/uri-interfaces": "^2.3", - "php": "^7.4 || ^8.0", - "psr/http-message": "^1.0" - }, - "conflict": { - "league/uri-schemes": "^1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^v3.3.2", - "php-http/psr7-integration-tests": "^1.1", - "phpstan/phpstan": "^1.2.0", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0.0", - "phpstan/phpstan-strict-rules": "^1.1.0", - "phpunit/phpunit": "^9.5.10", - "psr/http-factory": "^1.0" - }, - "suggest": { - "ext-fileinfo": "Needed to create Data URI from a filepath", - "ext-intl": "Needed to improve host validation", - "league/uri-components": "Needed to easily manipulate URI objects", - "psr/http-factory": "Needed to use the URI factory" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "uri-template", - "url", - "ws" - ], - "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri/issues", - "source": "https://github.com/thephpleague/uri/tree/6.6.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2022-05-28T05:44:35+00:00" - }, - { - "name": "league/uri-interfaces", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", - "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19", - "phpstan/phpstan": "^0.12.90", - "phpstan/phpstan-phpunit": "^0.12.19", - "phpstan/phpstan-strict-rules": "^0.12.9", - "phpunit/phpunit": "^8.5.15 || ^9.5" - }, - "suggest": { - "ext-intl": "to use the IDNA feature", - "symfony/intl": "to use the IDNA feature via Symfony Polyfill" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "Common interface for URI representation", - "homepage": "http://github.com/thephpleague/uri-interfaces", - "keywords": [ - "rfc3986", - "rfc3987", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/thephpleague/uri-interfaces/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/2.3.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2021-06-28T04:27:21+00:00" - }, - { - "name": "monolog/monolog", - "version": "2.6.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "247918972acd74356b0a91dfaa5adcaec069b6c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/247918972acd74356b0a91dfaa5adcaec069b6c0", - "reference": "247918972acd74356b0a91dfaa5adcaec069b6c0", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2", - "guzzlehttp/guzzle": "^7.4", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", - "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3 || ^2 || ^3", - "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.6.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2022-05-10T09:36:00+00:00" - }, - { - "name": "mtdowling/jmespath.php", - "version": "2.6.1", - "source": { - "type": "git", - "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0", - "symfony/polyfill-mbstring": "^1.17" - }, - "require-dev": { - "composer/xdebug-handler": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^7.5.15" - }, - "bin": [ - "bin/jp.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "files": [ - "src/JmesPath.php" - ], - "psr-4": { - "JmesPath\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Declaratively specify how to extract elements from a JSON document", - "keywords": [ - "json", - "jsonpath" - ], - "support": { - "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1" - }, - "time": "2021-06-14T00:11:39+00:00" - }, - { - "name": "nesbot/carbon", - "version": "2.58.0", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/97a34af22bde8d0ac20ab34b29d7bfe360902055", - "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" - }, - "require-dev": { - "doctrine/dbal": "^2.0 || ^3.0", - "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^3.0", - "kylekatarnls/multi-tester": "^2.0", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54 || ^1.0", - "phpunit/php-file-iterator": "^2.0.5", - "phpunit/phpunit": "^7.5.20 || ^8.5.23", - "squizlabs/php_codesniffer": "^3.4" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "https://markido.com" - }, - { - "name": "kylekatarnls", - "homepage": "https://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, - "funding": [ - { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" - }, - { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", - "type": "tidelift" - } - ], - "time": "2022-04-25T19:31:17+00:00" - }, - { - "name": "nette/schema", - "version": "v1.2.2", - "source": { - "type": "git", - "url": "https://github.com/nette/schema.git", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", - "shasum": "" - }, - "require": { - "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": ">=7.1 <8.2" - }, - "require-dev": { - "nette/tester": "^2.3 || ^2.4", - "phpstan/phpstan-nette": "^0.12", - "tracy/tracy": "^2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", - "keywords": [ - "config", - "nette" - ], - "support": { - "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.2" - }, - "time": "2021-10-15T11:40:02+00:00" - }, - { - "name": "nette/utils", - "version": "v3.2.7", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99", - "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99", - "shasum": "" - }, - "require": { - "php": ">=7.2 <8.2" - }, - "conflict": { - "nette/di": "<3.0.6" - }, - "require-dev": { - "nette/tester": "~2.0", - "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.3" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.7" - }, - "time": "2022-01-24T11:29:14+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.14.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" - }, - "time": "2022-05-31T20:59:12+00:00" - }, - { - "name": "nyholm/psr7", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/Nyholm/psr7.git", - "reference": "1461e07a0f2a975a52082ca3b769ca912b816226" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/1461e07a0f2a975a52082ca3b769ca912b816226", - "reference": "1461e07a0f2a975a52082ca3b769ca912b816226", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "php-http/message-factory": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "http-interop/http-factory-tests": "^0.9", - "php-http/psr7-integration-tests": "^1.0", - "phpunit/phpunit": "^7.5 || 8.5 || 9.4", - "symfony/error-handler": "^4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "Nyholm\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com" - }, - { - "name": "Martijn van der Ven", - "email": "martijn@vanderven.se" - } - ], - "description": "A fast PHP7 implementation of PSR-7", - "homepage": "https://tnyholm.se", - "keywords": [ - "psr-17", - "psr-7" - ], - "support": { - "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.5.0" - }, - "funding": [ - { - "url": "https://github.com/Zegnat", - "type": "github" - }, - { - "url": "https://github.com/nyholm", - "type": "github" - } - ], - "time": "2022-02-02T18:37:57+00:00" - }, - { - "name": "opis/closure", - "version": "3.6.3", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", - "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "autoload": { - "files": [ - "functions.php" - ], - "psr-4": { - "Opis\\Closure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.3" - }, - "time": "2022-01-27T09:35:39+00:00" - }, - { - "name": "paragonie/constant_time_encoding", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "9229e15f2e6ba772f0c55dd6986c563b937170a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/9229e15f2e6ba772f0c55dd6986c563b937170a8", - "reference": "9229e15f2e6ba772f0c55dd6986c563b937170a8", - "shasum": "" - }, - "require": { - "php": "^7|^8" - }, - "require-dev": { - "phpunit/phpunit": "^6|^7|^8|^9", - "vimeo/psalm": "^1|^2|^3|^4" - }, - "type": "library", - "autoload": { - "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Maintainer" - }, - { - "name": "Steve 'Sc00bz' Thomas", - "email": "steve@tobtu.com", - "homepage": "https://www.tobtu.com", - "role": "Original Developer" - } - ], - "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", - "keywords": [ - "base16", - "base32", - "base32_decode", - "base32_encode", - "base64", - "base64_decode", - "base64_encode", - "bin2hex", - "encoding", - "hex", - "hex2bin", - "rfc4648" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/constant_time_encoding/issues", - "source": "https://github.com/paragonie/constant_time_encoding" - }, - "time": "2022-01-17T05:32:27+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.100", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", - "shasum": "" - }, - "require": { - "php": ">= 7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2020-10-15T08:29:30+00:00" - }, - { - "name": "php-http/message-factory", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "stream", - "uri" - ], - "support": { - "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/master" - }, - "time": "2015-12-19T14:08:53+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.8.1", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", - "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2021-12-04T23:24:31+00:00" - }, - { - "name": "phpseclib/phpseclib", - "version": "3.0.14", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "2f0b7af658cbea265cbb4a791d6c29a6613f98ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/2f0b7af658cbea265cbb4a791d6c29a6613f98ef", - "reference": "2f0b7af658cbea265cbb4a791d6c29a6613f98ef", - "shasum": "" - }, - "require": { - "paragonie/constant_time_encoding": "^1|^2", - "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": ">=5.6.1" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." - }, - "type": "library", - "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], - "psr-4": { - "phpseclib3\\": "phpseclib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" - } - ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ], - "support": { - "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.14" - }, - "funding": [ - { - "url": "https://github.com/terrafrost", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpseclib", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", - "type": "tidelift" - } - ], - "time": "2022-04-04T05:15:45+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/container", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" - }, - "time": "2021-11-05T16:50:12+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client/tree/master" - }, - "time": "2020-06-29T06:28:15+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" - }, - "time": "2019-04-30T12:38:16+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/log", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/2.0.0" - }, - "time": "2021-07-14T16:41:46+00:00" - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" - }, - "time": "2017-10-23T01:57:42+00:00" - }, - { - "name": "psy/psysh", - "version": "v0.11.5", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "c23686f9c48ca202710dbb967df8385a952a2daf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/c23686f9c48ca202710dbb967df8385a952a2daf", - "reference": "c23686f9c48ca202710dbb967df8385a952a2daf", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "^4.0 || ^3.1", - "php": "^8.0 || ^7.0.8", - "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" - }, - "conflict": { - "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.11.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.5" - }, - "time": "2022-05-27T18:03:49+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "ramsey/collection", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8", - "symfony/polyfill-php81": "^1.23" - }, - "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.2.2" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2021-10-10T03:01:02+00:00" - }, - { - "name": "ramsey/uuid", - "version": "4.3.1", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", - "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", - "shasum": "" - }, - "require": { - "brick/math": "^0.8 || ^0.9", - "ext-ctype": "*", - "ext-json": "*", - "php": "^8.0", - "ramsey/collection": "^1.0" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Ramsey\\Uuid\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.3.1" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2022-03-27T21:42:02+00:00" - }, - { - "name": "stella-maris/clock", - "version": "0.1.4", - "source": { - "type": "git", - "url": "https://gitlab.com/stella-maris/clock.git", - "reference": "8a0a967896df4c63417385dc69328a0aec84d9cf" - }, - "dist": { - "type": "zip", - "url": "https://gitlab.com/api/v4/projects/stella-maris%2Fclock/repository/archive.zip?sha=8a0a967896df4c63417385dc69328a0aec84d9cf", - "reference": "8a0a967896df4c63417385dc69328a0aec84d9cf", - "shasum": "" - }, - "require": { - "php": "^7.0|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "StellaMaris\\Clock\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andreas Heigl", - "role": "Maintainer" - } - ], - "description": "A pre-release of the proposed PSR-20 Clock-Interface", - "homepage": "https://gitlab.com/stella-maris/clock", - "keywords": [ - "clock", - "datetime", - "point in time", - "psr20" - ], - "support": { - "issues": "https://gitlab.com/stella-maris/clock/-/issues", - "source": "https://gitlab.com/stella-maris/clock/-/tree/0.1.4" - }, - "time": "2022-04-17T14:12:26+00:00" - }, - { - "name": "stripe/stripe-php", - "version": "v7.128.0", - "source": { - "type": "git", - "url": "https://github.com/stripe/stripe-php.git", - "reference": "c704949c49b72985c76cc61063aa26fefbd2724e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/stripe/stripe-php/zipball/c704949c49b72985c76cc61063aa26fefbd2724e", - "reference": "c704949c49b72985c76cc61063aa26fefbd2724e", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "php": ">=5.6.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "3.5.0", - "phpstan/phpstan": "^1.2", - "phpunit/phpunit": "^5.7 || ^9.0", - "squizlabs/php_codesniffer": "^3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Stripe\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Stripe and contributors", - "homepage": "https://github.com/stripe/stripe-php/contributors" - } - ], - "description": "Stripe PHP Library", - "homepage": "https://stripe.com/", - "keywords": [ - "api", - "payment processing", - "stripe" - ], - "support": { - "issues": "https://github.com/stripe/stripe-php/issues", - "source": "https://github.com/stripe/stripe-php/tree/v7.128.0" - }, - "time": "2022-05-05T17:18:02+00:00" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.4" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], - "support": { - "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", - "type": "tidelift" - } - ], - "abandoned": "symfony/mailer", - "time": "2021-10-18T15:26:12+00:00" - }, - { - "name": "symfony/console", - "version": "v5.4.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", - "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" - }, - "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v5.4.9" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-18T06:17:34+00:00" - }, - { - "name": "symfony/css-selector", - "version": "v6.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "05c40f02f621609404b8820ff8bc39acb46e19cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/05c40f02f621609404b8820ff8bc39acb46e19cf", - "reference": "05c40f02f621609404b8820ff8bc39acb46e19cf", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-02-25T11:15:52+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.1-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-02-25T11:15:52+00:00" - }, - { - "name": "symfony/error-handler", - "version": "v5.4.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "c116cda1f51c678782768dce89a45f13c949455d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c116cda1f51c678782768dce89a45f13c949455d", - "reference": "c116cda1f51c678782768dce89a45f13c949455d", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" - }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.9" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-21T13:57:48+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v6.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" - }, - "conflict": { - "symfony/dependency-injection": "<5.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-05T16:51:07+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.1-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-02-25T11:15:52+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.4.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", - "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.8" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-04-15T08:07:45+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v5.4.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6b0d0e4aca38d57605dcd11e2416994b38774522", - "reference": "6b0d0e4aca38d57605dcd11e2416994b38774522", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/mime": "To use the file extension guesser" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.9" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-17T15:07:29+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v5.4.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "34b121ad3dc761f35fe1346d2f15618f8cbf77f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/34b121ad3dc761f35fe1346d2f15618f8cbf77f8", - "reference": "34b121ad3dc761f35fe1346d2f15618f8cbf77f8", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-foundation": "^5.3.7|^6.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", - "twig/twig": "<2.13" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.9" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-27T07:09:08+00:00" - }, - { - "name": "symfony/mime", - "version": "v5.4.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/2b3802a24e48d0cfccf885173d2aac91e73df92e", - "reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.1|^6.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.2|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], - "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.9" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-21T10:24:18+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "143f1881e655bebca1312722af8068de235ae5dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc", - "reference": "143f1881e655bebca1312722af8068de235ae5dc", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-iconv": "*" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-10T07:21:04+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/process", - "version": "v5.4.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", - "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v5.4.8" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-04-08T05:07:18+00:00" - }, - { - "name": "symfony/psr-http-message-bridge", - "version": "v2.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34", - "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0", - "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0" - }, - "require-dev": { - "nyholm/psr7": "^1.1", - "psr/log": "^1.1 || ^2 || ^3", - "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0", - "symfony/config": "^4.4 || ^5.0 || ^6.0", - "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", - "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", - "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", - "symfony/phpunit-bridge": "^5.4@dev || ^6.0" - }, - "suggest": { - "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" - }, - "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-main": "2.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Bridge\\PsrHttpMessage\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "PSR HTTP message bridge", - "homepage": "http://symfony.com", - "keywords": [ - "http", - "http-message", - "psr-17", - "psr-7" - ], - "support": { - "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-11-05T13:13:39+00:00" - }, - { - "name": "symfony/routing", - "version": "v5.4.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", - "reference": "e07817bb6244ea33ef5ad31abc4a9288bef3f2f7", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.4" - }, - "require-dev": { - "doctrine/annotations": "^1.12", - "psr/log": "^1|^2|^3", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.8" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-04-18T21:45:37+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.5.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-03-13T20:07:29+00:00" - }, - { - "name": "symfony/string", - "version": "v6.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "d3edc75baf9f1d4f94879764dda2e1ac33499529" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d3edc75baf9f1d4f94879764dda2e1ac33499529", - "reference": "d3edc75baf9f1d4f94879764dda2e1ac33499529", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.0" - }, - "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/translation-contracts": "^2.0|^3.0", - "symfony/var-exporter": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v6.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-04-22T08:18:23+00:00" - }, - { - "name": "symfony/translation", - "version": "v6.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "b254416631615bc6fe49b0a67f18658827288147" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b254416631615bc6fe49b0a67f18658827288147", - "reference": "b254416631615bc6fe49b0a67f18658827288147", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.0" - }, - "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/v6.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-11T12:12:29+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "bfddd2a1faa271b782b791c361cc16e2dd49dfaa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/bfddd2a1faa271b782b791c361cc16e2dd49dfaa", - "reference": "bfddd2a1faa271b782b791c361cc16e2dd49dfaa", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.1-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.1.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-04-22T07:30:54+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v5.4.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "af52239a330fafd192c773795520dc2dd62b5657" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/af52239a330fafd192c773795520dc2dd62b5657", - "reference": "af52239a330fafd192c773795520dc2dd62b5657", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.9" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-21T10:24:18+00:00" - }, - { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.4", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" - } - ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "support": { - "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" - }, - "time": "2021-12-08T09:12:39+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.4.1", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.4-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://github.com/vlucas" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2021-12-12T23:22:04+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", - "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.6.1" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2022-01-24T18:55:24+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-03-03T08:28:38+00:00" - }, - { - "name": "facade/flare-client-php", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/facade/flare-client-php.git", - "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed", - "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed", - "shasum": "" - }, - "require": { - "facade/ignition-contracts": "~1.0", - "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", - "php": "^7.1|^8.0", - "symfony/http-foundation": "^3.3|^4.1|^5.0", - "symfony/mime": "^3.4|^4.0|^5.1", - "symfony/var-dumper": "^3.4|^4.0|^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "phpunit/phpunit": "^7.5.16", - "spatie/phpunit-snapshot-assertions": "^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Facade\\FlareClient\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Send PHP errors to Flare", - "homepage": "https://github.com/facade/flare-client-php", - "keywords": [ - "exception", - "facade", - "flare", - "reporting" - ], - "support": { - "issues": "https://github.com/facade/flare-client-php/issues", - "source": "https://github.com/facade/flare-client-php/tree/1.9.1" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2021-09-13T12:16:46+00:00" - }, - { - "name": "facade/ignition", - "version": "2.17.5", - "source": { - "type": "git", - "url": "https://github.com/facade/ignition.git", - "reference": "1d71996f83c9a5a7807331b8986ac890352b7a0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/1d71996f83c9a5a7807331b8986ac890352b7a0c", - "reference": "1d71996f83c9a5a7807331b8986ac890352b7a0c", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "facade/flare-client-php": "^1.9.1", - "facade/ignition-contracts": "^1.0.2", - "illuminate/support": "^7.0|^8.0", - "monolog/monolog": "^2.0", - "php": "^7.2.5|^8.0", - "symfony/console": "^5.0", - "symfony/var-dumper": "^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "livewire/livewire": "^2.4", - "mockery/mockery": "^1.3", - "orchestra/testbench": "^5.0|^6.0", - "psalm/plugin-laravel": "^1.2" - }, - "suggest": { - "laravel/telescope": "^3.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Facade\\Ignition\\IgnitionServiceProvider" - ], - "aliases": { - "Flare": "Facade\\Ignition\\Facades\\Flare" - } - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Facade\\Ignition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A beautiful error page for Laravel applications.", - "homepage": "https://github.com/facade/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/facade/ignition/issues", - "source": "https://github.com/facade/ignition" - }, - "time": "2022-02-23T18:31:24+00:00" - }, - { - "name": "facade/ignition-contracts", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/facade/ignition-contracts.git", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^v2.15.8", - "phpunit/phpunit": "^9.3.11", - "vimeo/psalm": "^3.17.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Facade\\IgnitionContracts\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://flareapp.io", - "role": "Developer" - } - ], - "description": "Solution contracts for Ignition", - "homepage": "https://github.com/facade/ignition-contracts", - "keywords": [ - "contracts", - "flare", - "ignition" - ], - "support": { - "issues": "https://github.com/facade/ignition-contracts/issues", - "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" - }, - "time": "2020-10-16T08:27:54+00:00" - }, - { - "name": "fakerphp/faker", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75", - "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "psr/container": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "conflict": { - "fzaninotto/faker": "*" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "doctrine/persistence": "^1.3 || ^2.0", - "ext-intl": "*", - "symfony/phpunit-bridge": "^4.4 || ^5.2" - }, - "suggest": { - "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", - "ext-curl": "Required by Faker\\Provider\\Image to download images.", - "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", - "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", - "ext-mbstring": "Required for multibyte Unicode string functionality." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.19-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "support": { - "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0" - }, - "time": "2022-02-02T17:38:57+00:00" - }, - { - "name": "filp/whoops", - "version": "2.14.5", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", - "shasum": "" - }, - "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" - } - ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ], - "support": { - "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.14.5" - }, - "funding": [ - { - "url": "https://github.com/denis-sokolov", - "type": "github" - } - ], - "time": "2022-01-07T12:00:00+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" - }, - "time": "2020-07-09T08:09:16+00:00" - }, - { - "name": "laravel/sail", - "version": "v1.14.8", - "source": { - "type": "git", - "url": "https://github.com/laravel/sail.git", - "reference": "04b425968c6a76940bddd2cfa40bf9e9ce78eee8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/04b425968c6a76940bddd2cfa40bf9e9ce78eee8", - "reference": "04b425968c6a76940bddd2cfa40bf9e9ce78eee8", - "shasum": "" - }, - "require": { - "illuminate/console": "^8.0|^9.0", - "illuminate/contracts": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "php": "^7.3|^8.0" - }, - "bin": [ - "bin/sail" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Sail\\SailServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Sail\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Docker files for running a basic Laravel application.", - "keywords": [ - "docker", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/sail/issues", - "source": "https://github.com/laravel/sail" - }, - "time": "2022-05-31T14:48:21+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", - "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Mockery": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.5.0" - }, - "time": "2022-01-20T13:18:17+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2022-03-03T13:19:32+00:00" - }, - { - "name": "nunomaduro/collision", - "version": "v5.11.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461", - "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461", - "shasum": "" - }, - "require": { - "facade/ignition-contracts": "^1.0", - "filp/whoops": "^2.14.3", - "php": "^7.3 || ^8.0", - "symfony/console": "^5.0" - }, - "require-dev": { - "brianium/paratest": "^6.1", - "fideloper/proxy": "^4.4.1", - "fruitcake/laravel-cors": "^2.0.3", - "laravel/framework": "8.x-dev", - "nunomaduro/larastan": "^0.6.2", - "nunomaduro/mock-final-classes": "^1.0", - "orchestra/testbench": "^6.0", - "phpstan/phpstan": "^0.12.64", - "phpunit/phpunit": "^9.5.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" - ], - "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2022-01-10T16:22:52+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "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.6.1" - }, - "time": "2022-03-15T21:29:03+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.15", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-03-07T09:28:20+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.20", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-04-01T12:37:26+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-04-03T09:37:03+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-11-11T14:18:36+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-02-14T08:28:10+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-03-15T09:54:48+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": [], - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": "^7.3|^8.0" - }, - "platform-dev": [], - "plugin-api-version": "2.3.0" -} From a0675f5ab6685f98bc0f7576ac79945a7e9ff1b5 Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 8 Jun 2022 15:22:47 -0400 Subject: [PATCH 21/30] inactive field from casper auction --- app/Console/Commands/CheckNodeStatus.php | 38 ++++++++++++++++--- app/Console/Helper.php | 2 +- .../Controllers/Api/V1/UserController.php | 4 +- app/Services/NodeHelper.php | 17 +++++---- ...184839_add_inactive_to_node_info_table.php | 30 +++++++++++++++ 5 files changed, 75 insertions(+), 16 deletions(-) create mode 100644 database/migrations/2022_06_08_184839_add_inactive_to_node_info_table.php diff --git a/app/Console/Commands/CheckNodeStatus.php b/app/Console/Commands/CheckNodeStatus.php index f09854a6..850552ba 100644 --- a/app/Console/Commands/CheckNodeStatus.php +++ b/app/Console/Commands/CheckNodeStatus.php @@ -87,7 +87,14 @@ public function handle() $addresses = $user->addresses ?? []; $nodeInfo = $user->nodeInfo ? $user->nodeInfo : $user->metric; - if (!$nodeInfo || !$addresses || count($addresses) == 0 || !$user->node_verified_at || !$user->letter_verified_at || !$user->signature_request_id) { + if ( + !$nodeInfo || + !$addresses || + count($addresses) == 0 || + !$user->node_verified_at || + !$user->letter_verified_at || + !$user->signature_request_id + ) { $user->node_status = null; $user->save(); } else { @@ -112,6 +119,7 @@ public function handle() foreach ($addresses as $userAddress) { $public_address_node = strtolower($userAddress->public_address_node); $nodeInfoAddress = NodeInfo::where('node_address', $public_address_node)->first(); + if ($nodeInfoAddress) { $nodeInfoAddress->uptime = $nodeInfoAddress->uptime ? $nodeInfoAddress->uptime : 0; $nodeInfoAddress->block_height_average = $nodeInfoAddress->block_height_average ? $nodeInfoAddress->block_height_average : 0; @@ -126,18 +134,24 @@ public function handle() $nodeInfoAddress->uptime_time_start = null; $nodeInfoAddress->uptime_time_end = null; - + $nodeInfoAddress->block_height_average_time_start = null; $nodeInfoAddress->block_height_average_time_end = null; - + $nodeInfoAddress->update_responsiveness_time_start = null; $nodeInfoAddress->update_responsiveness_time_end = null; - + $nodeInfoAddress->save(); } } - if (isset($user->profile) && $user->profile && isset($user->profile->status) && $user->profile->status == 'approved' && $nodeInfoAddress) { + if ( + isset($user->profile) && + $user->profile && + isset($user->profile->status) && + $user->profile->status == 'approved' && + $nodeInfoAddress + ) { $userAddress->extra_status = null; $userAddress->save(); @@ -175,6 +189,14 @@ public function handle() $userAddress->save(); } } + + $inactive = (bool)($nodeInfoAddress->inactive ?? false); + + if($inactive) { + $userAddress->node_status = 'Offline'; + $userAddress->extra_status = 'Suspended'; + $userAddress->save(); + } } // End For Each @@ -210,7 +232,11 @@ public function handle() } } - if (!$hasNotSuspendedStatus && isset($user->profile) && $user->profile) { + if ( + !$hasNotSuspendedStatus && + isset($user->profile) && + $user->profile + ) { $user->profile->extra_status = 'Suspended'; $user->profile->save(); } else if (isset($user->profile) && $user->profile) { diff --git a/app/Console/Helper.php b/app/Console/Helper.php index 943bb6c8..616505a8 100644 --- a/app/Console/Helper.php +++ b/app/Console/Helper.php @@ -34,7 +34,7 @@ public static function getAccountInfoStandard($user) try { $json = json_decode($response); - } catch (Exception $e) { + } catch (\Exception $e) { $json = array(); } diff --git a/app/Http/Controllers/Api/V1/UserController.php b/app/Http/Controllers/Api/V1/UserController.php index 3d432965..1f7025a8 100644 --- a/app/Http/Controllers/Api/V1/UserController.php +++ b/app/Http/Controllers/Api/V1/UserController.php @@ -101,7 +101,7 @@ public function getMemberCountInfo() { } // Get Verified Members - public function getVerifiedMembers() { + public function getVerifiedMembers(Request $request) { $data = []; $limit = $request->limit ?? 50; $user = auth()->user(); @@ -936,7 +936,7 @@ public function getMembers(Request $request) $res_nodeInfo = $user->nodeInfo->update_responsiveness ?? null; $res_node = $latest->update_responsiveness ?? null; - $res_metric = $metric->update_responsiveness ?? null; + $res_metric = $user->metric->update_responsiveness ?? null; $uptime = $uptime_nodeInfo ? $uptime_nodeInfo : ($uptime_node ? $uptime_node : ($uptime_metric ? $uptime_metric : 1)); $res = $res_nodeInfo ? $res_nodeInfo : ($res_node ? $res_node : ($res_metric ? $res_metric : 0)); diff --git a/app/Services/NodeHelper.php b/app/Services/NodeHelper.php index c0cff86f..d367796c 100644 --- a/app/Services/NodeHelper.php +++ b/app/Services/NodeHelper.php @@ -55,12 +55,12 @@ public function getTotalRewards($validatorId) public function updateStats() { $data = $this->getValidatorStanding(); - + $validator_standing = isset($data['validator_standing']) ? $data['validator_standing'] : null; - + $mbs = isset($data['MBS']) ? $data['MBS'] : 0; $peers = isset($data['peers']) ? $data['peers'] : 0; - + $setting = Setting::where('name', 'peers')->first(); if (!$setting) { $setting = new Setting; @@ -85,7 +85,7 @@ public function updateStats() $userAddress = strtolower($user->public_address_node); foreach ($addresses as $address) { $validatorid = strtolower($address->public_address_node); - + if (isset($validator_standing[$validatorid])) { $info = $validator_standing[$validatorid]; $fee = (float) $info['delegation_rate']; @@ -95,13 +95,13 @@ public function updateStats() $user->validator_fee = round($fee, 2); $user->save(); } - + $address->pending_node = 0; $address->validator_fee = round($fee, 2); $address->save(); $totalRewards = $this->getTotalRewards($validatorid); - + $build_version = $info['build_version'] ?? null; if ($build_version) { $build_version = explode('-', $build_version); @@ -109,7 +109,9 @@ public function updateStats() } $is_open_port = isset($info['uptime']) && isset($info['update_responsiveness']) ? 1 : 0; - + + $inactive = (bool)($info['inactive'] ?? false); + NodeInfo::updateOrCreate( [ 'node_address' => $validatorid @@ -127,6 +129,7 @@ public function updateStats() 'uptime' => isset($info['uptime']) ? $info['uptime'] * 100 : 0, 'block_height' => $info['block_height'] ?? 0, 'peers' => $info['peer_count'] ?? 0, + 'inactive' => $inactive ] ); diff --git a/database/migrations/2022_06_08_184839_add_inactive_to_node_info_table.php b/database/migrations/2022_06_08_184839_add_inactive_to_node_info_table.php new file mode 100644 index 00000000..ce05f7a0 --- /dev/null +++ b/database/migrations/2022_06_08_184839_add_inactive_to_node_info_table.php @@ -0,0 +1,30 @@ +tinyInteger('inactive')->nullable()->default(0); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} From 961516994fb120079d7755a501c54d5b8886dcec Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 8 Jun 2022 15:49:27 -0400 Subject: [PATCH 22/30] cast bool to int --- app/Services/NodeHelper.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Services/NodeHelper.php b/app/Services/NodeHelper.php index d367796c..c217783a 100644 --- a/app/Services/NodeHelper.php +++ b/app/Services/NodeHelper.php @@ -111,6 +111,7 @@ public function updateStats() $is_open_port = isset($info['uptime']) && isset($info['update_responsiveness']) ? 1 : 0; $inactive = (bool)($info['inactive'] ?? false); + $inactive = $inactive ? 1 : 0; NodeInfo::updateOrCreate( [ From 98cf042804bbeeddf523b16026a349f9323a1687 Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 8 Jun 2022 16:03:03 -0400 Subject: [PATCH 23/30] random string helper rewrite. email template tags --- app/Helpers/helper.php | 19 ++++++++++++------- .../views/emails/add_node_email.blade.php | 2 +- .../views/emails/admin_alert_email.blade.php | 4 +++- .../views/emails/confirm_email.blade.php | 4 +++- resources/views/emails/contact_us.blade.php | 4 +++- resources/views/emails/invitation.blade.php | 4 +++- resources/views/emails/kyc_approved.blade.php | 4 +++- resources/views/emails/kyc_denied.blade.php | 4 +++- resources/views/emails/reset_kyc.blade.php | 2 +- .../views/emails/reset_password.blade.php | 4 +++- resources/views/emails/two_fa.blade.php | 4 +++- .../views/emails/user_alert_email.blade.php | 4 +++- resources/views/emails/verify_email.blade.php | 4 +++- 13 files changed, 44 insertions(+), 19 deletions(-) diff --git a/app/Helpers/helper.php b/app/Helpers/helper.php index 6929b212..62044e23 100644 --- a/app/Helpers/helper.php +++ b/app/Helpers/helper.php @@ -6,14 +6,19 @@ function generateString($strength = 16) { - $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; - $input_length = strlen($permitted_chars); - $random_string = ''; - for ($i = 0; $i < $strength; $i++) { - $random_character = $permitted_chars[mt_rand(0, $input_length - 1)]; - $random_string .= $random_character; + $seed = str_split( + 'ABCDEFGHJKLMNPQRSTUVWXYZ'. + '2345678923456789' + ); + // dont use 0, 1, o, O, l, I + shuffle($seed); + $hash = ''; + + foreach(array_rand($seed, $strength) as $k) { + $hash .= $seed[$k]; } - return $random_string; + + return $hash; } } diff --git a/resources/views/emails/add_node_email.blade.php b/resources/views/emails/add_node_email.blade.php index 2774204b..f427128e 100644 --- a/resources/views/emails/add_node_email.blade.php +++ b/resources/views/emails/add_node_email.blade.php @@ -1,5 +1,5 @@ - + diff --git a/resources/views/emails/admin_alert_email.blade.php b/resources/views/emails/admin_alert_email.blade.php index 3d9fa5ae..514df1e8 100644 --- a/resources/views/emails/admin_alert_email.blade.php +++ b/resources/views/emails/admin_alert_email.blade.php @@ -1,6 +1,8 @@ - + + +