From ff52e8047e296eae74faae98b4bd7adbd3e91ea7 Mon Sep 17 00:00:00 2001 From: smarcet Date: Tue, 29 Sep 2020 17:05:34 -0300 Subject: [PATCH] File Upload - Chunk Support new endpoints for uploads POST api/public/v1/files/upload Change-Id: If35c616eb243bf5ec66205fb630fe30ce4dad647 Signed-off-by: smarcet --- .../Main/OAuth2ChunkedFilesApiController.php | 57 + .../Apis/Protected/Main/UploadController.php | 115 ++ ...uth2SummitMediaUploadTypeApiController.php | 1 + ...ltipartFormDataInputForNonPostRequests.php | 2 +- app/Http/Routes/public.php | 5 + app/Http/Utils/FileUploadInfo.php | 152 +++ .../SummitMediaUploadTypeFactory.php | 2 +- .../MediaUploads/SummitMediaUploadType.php | 13 + .../Model/Imp/PresentationService.php | 110 +- composer.json | 1 + composer.lock | 1034 +++++++++++------ config/chunk-upload.php | 43 + tests/PresentationMediaUploadsTests.php | 7 +- 13 files changed, 1119 insertions(+), 423 deletions(-) create mode 100644 app/Http/Controllers/Apis/Protected/Main/OAuth2ChunkedFilesApiController.php create mode 100644 app/Http/Controllers/Apis/Protected/Main/UploadController.php create mode 100644 app/Http/Utils/FileUploadInfo.php create mode 100644 config/chunk-upload.php diff --git a/app/Http/Controllers/Apis/Protected/Main/OAuth2ChunkedFilesApiController.php b/app/Http/Controllers/Apis/Protected/Main/OAuth2ChunkedFilesApiController.php new file mode 100644 index 00000000..2bb2772c --- /dev/null +++ b/app/Http/Controllers/Apis/Protected/Main/OAuth2ChunkedFilesApiController.php @@ -0,0 +1,57 @@ +isUploaded() === false) { + throw new UploadMissingFileException(); + } + // receive the file + $save = $receiver->receive(); + + // check if the upload has finished (in chunk mode it will send smaller files) + if ($save->isFinished()) { + // save the file and return any response you need + return $this->saveFile($save->getFile()); + } + + // we are in chunk mode, lets send the current progress + /** @var AbstractHandler $handler */ + $handler = $save->handler(); + $done = $handler->getPercentageDone(); + return response()->json([ + "done" => $done + ]); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Apis/Protected/Main/UploadController.php b/app/Http/Controllers/Apis/Protected/Main/UploadController.php new file mode 100644 index 00000000..aa512952 --- /dev/null +++ b/app/Http/Controllers/Apis/Protected/Main/UploadController.php @@ -0,0 +1,115 @@ +isUploaded() === false) { + throw new UploadMissingFileException(); + } + + // receive the file + $save = $receiver->receive(); + + // check if the upload has finished (in chunk mode it will send smaller files) + if ($save->isFinished()) { + // save the file and return any response you need, current example uses `move` function. If you are + // not using move, you need to manually delete the file by unlink($save->getFile()->getPathname()) + return $this->saveFile($save->getFile()); + } + + // we are in chunk mode, lets send the current progress + /** @var AbstractHandler $handler */ + $handler = $save->handler(); + + return response()->json([ + "done" => $handler->getPercentageDone(), + 'status' => true + ]); + } + + /** + * Saves the file + * + * @param UploadedFile $file + * + * @return JsonResponse + */ + protected function saveFile(UploadedFile $file) + { + $fileName = $this->createFilename($file); + // Group files by mime type + $mime = str_replace('/', '-', $file->getMimeType()); + // Group files by the date (week + $dateFolder = date("Y-m-W"); + + // Build the file path + $filePath = "upload/{$mime}/{$dateFolder}/"; + + $disk = Storage::disk('local'); + + $disk->putFileAs($filePath, $file, $fileName); + + unlink($file->getPathname()); + + return response()->json([ + 'path' => $filePath, + 'name' => $fileName, + 'mime_type' => $mime + ]); + } + + /** + * Create unique filename for uploaded file + * @param UploadedFile $file + * @return string + */ + protected function createFilename(UploadedFile $file) + { + $extension = $file->getClientOriginalExtension(); + $filename = str_replace(".".$extension, "", $file->getClientOriginalName()); // Filename without extension + + // Add timestamp hash to name of the file + $filename .= "_" . md5(time()) . "." . $extension; + + return $filename; + } +} diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitMediaUploadTypeApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitMediaUploadTypeApiController.php index 8c522bf1..77cc2dca 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitMediaUploadTypeApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitMediaUploadTypeApiController.php @@ -110,6 +110,7 @@ final class OAuth2SummitMediaUploadTypeApiController extends OAuth2ProtectedCont 'name' => 'required|string|max:255', 'description' => 'sometimes|string|max:255', 'is_mandatory' => 'required|boolean', + // in KB 'max_size' => 'required|int|megabyte_aligned', 'private_storage_type' => 'required|string|in:'.implode(",", IStorageTypesConstants::ValidTypes), 'public_storage_type' => 'required|string|in:'.implode(",", IStorageTypesConstants::ValidTypes), diff --git a/app/Http/Middleware/ParseMultipartFormDataInputForNonPostRequests.php b/app/Http/Middleware/ParseMultipartFormDataInputForNonPostRequests.php index b22ea005..2c81ede5 100644 --- a/app/Http/Middleware/ParseMultipartFormDataInputForNonPostRequests.php +++ b/app/Http/Middleware/ParseMultipartFormDataInputForNonPostRequests.php @@ -30,7 +30,7 @@ final class ParseMultipartFormDataInputForNonPostRequests */ public function handle($request, Closure $next) { - if ($request->method() == 'POST' OR $request->method() == 'GET') { + if ($request->method() == 'POST' || $request->method() == 'GET') { return $next($request); } diff --git a/app/Http/Routes/public.php b/app/Http/Routes/public.php index 60a5ebce..df51f345 100644 --- a/app/Http/Routes/public.php +++ b/app/Http/Routes/public.php @@ -28,6 +28,11 @@ Route::group([ ] ], function () { + // files + Route::group(['prefix' => 'files'], function () { + Route::post('upload','OAuth2ChunkedFilesApiController@uploadFile' ); + }); + // members Route::group(['prefix' => 'members'], function () { Route::get('', 'OAuth2MembersApiController@getAll'); diff --git a/app/Http/Utils/FileUploadInfo.php b/app/Http/Utils/FileUploadInfo.php new file mode 100644 index 00000000..2aae39f3 --- /dev/null +++ b/app/Http/Utils/FileUploadInfo.php @@ -0,0 +1,152 @@ +file = $file; + $this->fileName = $fileName; + $this->fileExt = $fileExt; + $this->size = $size; + } + + /** + * @param LaravelRequest $request + * @param array $payload + * @return FileUploadInfo|null + * @throws ValidationException + */ + public static function build(LaravelRequest $request, array $payload):?FileUploadInfo { + + $file = null; + $fileName = null; + $fileExt = null; + $size = 0; + + if($request->hasFile('file')) { + Log::debug(sprintf("FileUploadInfo::build build file is present on request ( MULTIFORM )")); + $file = $request->file('file'); + // get in bytes should be converted to KB + $size = $file->getSize(); + if($size == 0) + throw new ValidationException("File size is zero."); + $size = $size/1024; // convert bytes to KB + $fileName = $file->getClientOriginalName(); + $fileExt = pathinfo($fileName, PATHINFO_EXTENSION); + } + + if(is_null($file) && isset($payload['filepath'])){ + Log::debug(sprintf("FileUploadInfo::build build file is present on as local storage (%s)", $payload['filepath'])); + $disk = Storage::disk('local'); + + if(!$disk->exists($payload['filepath'])) + throw new ValidationException(sprintf("file provide on filepath %s does not exists on local storage.", $payload['filepath'])); + + // get in bytes should be converted to KB + $size = $disk->size($payload['filepath']); + if($size == 0) + throw new ValidationException("File size is zero."); + + $size = $size/1024; // convert bytes to KB + $fileName = pathinfo($payload['filepath'],PATHINFO_BASENAME); + $fileExt = pathinfo($fileName, PATHINFO_EXTENSION); + $file = new UploadedFile($disk->path($payload['filepath']), $fileName); + } + + if(is_null($file)) return null; + + $fileName = FileNameSanitizer::sanitize($fileName); + + return new self($file, $fileName, $fileExt, $size); + } + + /** + * @return int + */ + public function getSize(): ?int + { + return $this->size; + } + + /** + * @return UploadedFile + */ + public function getFile(): ?UploadedFile + { + return $this->file; + } + + /** + * @return string + */ + public function getFileName(): ?string + { + return $this->fileName; + } + + /** + * @return string + */ + public function getFileExt(): ?string + { + return $this->fileExt; + } + + public function delete(){ + if(is_null($this->file)) return; + $realPath = $this->file->getRealPath(); + Log::debug(sprintf("FileUploadInfo::delete deleting file %s", $realPath)); + unlink($realPath); + } + +} \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Factories/SummitMediaUploadTypeFactory.php b/app/Models/Foundation/Summit/Factories/SummitMediaUploadTypeFactory.php index 1ba68d77..10478a36 100644 --- a/app/Models/Foundation/Summit/Factories/SummitMediaUploadTypeFactory.php +++ b/app/Models/Foundation/Summit/Factories/SummitMediaUploadTypeFactory.php @@ -39,7 +39,7 @@ final class SummitMediaUploadTypeFactory if(isset($data['description'])) $type->setDescription(trim($data['description'])); - if(isset($data['max_size'])) + if(isset($data['max_size'])) // in KB $type->setMaxSize(intval($data['max_size'])); if(isset($data['private_storage_type'])) diff --git a/app/Models/Foundation/Summit/MediaUploads/SummitMediaUploadType.php b/app/Models/Foundation/Summit/MediaUploads/SummitMediaUploadType.php index 2d651dc0..ba22eda2 100644 --- a/app/Models/Foundation/Summit/MediaUploads/SummitMediaUploadType.php +++ b/app/Models/Foundation/Summit/MediaUploads/SummitMediaUploadType.php @@ -55,6 +55,7 @@ class SummitMediaUploadType extends SilverstripeBaseModel /** * @ORM\Column(name="MaxSize", type="integer") * @var int + * in KB */ private $max_size; @@ -173,6 +174,14 @@ class SummitMediaUploadType extends SilverstripeBaseModel return $this->max_size; } + /** + * @return int + */ + public function getMaxSizeMB(): int + { + return $this->max_size/1024; + } + /** * @param int $max_size */ @@ -268,6 +277,10 @@ class SummitMediaUploadType extends SilverstripeBaseModel return in_array(strtoupper($ext), explode('|', $this->type->getAllowedExtensions())); } + public function getValidExtensions(){ + return $this->type->getAllowedExtensions(); + } + public function hasStorageSet():bool { return ($this->private_storage_type != IStorageTypesConstants::None || $this->public_storage_type != IStorageTypesConstants::None); } diff --git a/app/Services/Model/Imp/PresentationService.php b/app/Services/Model/Imp/PresentationService.php index 4a49c9d0..5817f4c6 100644 --- a/app/Services/Model/Imp/PresentationService.php +++ b/app/Services/Model/Imp/PresentationService.php @@ -13,6 +13,7 @@ **/ use App\Events\PresentationMaterialDeleted; use App\Events\PresentationMaterialUpdated; +use App\Http\Utils\FileUploadInfo; use App\Http\Utils\IFileUploader; use App\Jobs\Emails\PresentationSubmissions\PresentationCreatorNotificationEmail; use App\Jobs\Emails\PresentationSubmissions\PresentationSpeakerNotificationEmail; @@ -29,6 +30,7 @@ use App\Models\Foundation\Summit\Events\Presentations\TrackQuestions\TrackAnswer use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Storage; use models\exceptions\EntityNotFoundException; use models\exceptions\ValidationException; use models\main\IFolderRepository; @@ -47,6 +49,8 @@ use libs\utils\ITransactionService; use models\summit\Summit; use Illuminate\Http\Request as LaravelRequest; use App\Services\Model\IFolderService; +use Symfony\Component\HttpFoundation\File\UploadedFile; + /** * Class PresentationService * @package services\model @@ -997,78 +1001,67 @@ final class PresentationService ) { Log::debug(sprintf("PresentationService::addMediaUploadTo summit %s presentation %s", $summit->getId(), $presentation_id)); + $presentation = $this->presentation_repository->getById($presentation_id); if (is_null($presentation) || !$presentation instanceof Presentation) throw new EntityNotFoundException('Presentation not found.'); - $hasFile = $request->hasFile('file'); - - if(!$hasFile){ - throw new ValidationException("You must provide a file."); - } - $media_upload_type_id = intval($payload['media_upload_type_id']); - $media_upload_type = $summit->getMediaUploadTypeById($media_upload_type_id); + $mediaUploadType = $summit->getMediaUploadTypeById($media_upload_type_id); - if(is_null($media_upload_type)) + if(is_null($mediaUploadType)) throw new EntityNotFoundException(sprintf("Media Upload Type %s not found.", $media_upload_type_id)); - if(!$media_upload_type->isPresentationTypeAllowed($presentation->getType())){ + if(!$mediaUploadType->isPresentationTypeAllowed($presentation->getType())){ throw new ValidationException(sprintf("Presentation Type %s is not allowed on Media Upload %s", $presentation->getTypeId(), $media_upload_type_id)); } - $file = $request->file('file'); - // get in bytes should be converted to KB - $size = $file->getSize(); - if($size == 0) - throw new ValidationException("File size is zero."); - $size = $size/1024; - $fileName = $file->getClientOriginalName(); - $fileExt = pathinfo($fileName, PATHINFO_EXTENSION); - - // normalize fileName - $fileName = FileNameSanitizer::sanitize($fileName); - - if($media_upload_type->getMaxSize() < $size){ - throw new ValidationException(sprintf("Max Size is %s KB.", $media_upload_type->getMaxSize())); - } - - if(!$media_upload_type->isValidExtension($fileExt)){ - throw new ValidationException(sprintf("File Extension %s is not valid", $fileExt)); - } - - if($presentation->hasMediaUploadByType($media_upload_type)){ + if($presentation->hasMediaUploadByType($mediaUploadType)){ throw new ValidationException ( sprintf ( "Presentation %s already has a media upload for that type %s.", - $presentation_id, $media_upload_type->getName() + $presentation_id, $mediaUploadType->getName() ) ); } + $fileInfo = FileUploadInfo::build($request, $payload); + + if(is_null($fileInfo)){ + throw new ValidationException("You must provide a file."); + } + + if($mediaUploadType->getMaxSize() < $fileInfo->getSize()){ + throw new ValidationException(sprintf("Max Size is %s MB (%s).", $mediaUploadType->getMaxSizeMB(), $fileInfo->getSize()/1024)); + } + + if(!$mediaUploadType->isValidExtension($fileInfo->getFileExt())){ + throw new ValidationException(sprintf("File Extension %s is not valid (%s).", $fileInfo->getFileExt(), $mediaUploadType->getValidExtensions())); + } + $mediaUpload = PresentationMediaUploadFactory::build(array_merge( $payload, [ - 'media_upload_type' => $media_upload_type, + 'media_upload_type' => $mediaUploadType, 'presentation' => $presentation ] )); - $strategy = FileUploadStrategyFactory::build($media_upload_type->getPrivateStorageType()); + $strategy = FileUploadStrategyFactory::build($mediaUploadType->getPrivateStorageType()); if(!is_null($strategy)){ - $strategy->save($file, $mediaUpload->getPath(IStorageTypesConstants::PrivateType), $fileName); + $strategy->save($fileInfo->getFile(), $mediaUpload->getPath(IStorageTypesConstants::PrivateType), $fileInfo->getFileName()); } - $strategy = FileUploadStrategyFactory::build($media_upload_type->getPublicStorageType()); + $strategy = FileUploadStrategyFactory::build($mediaUploadType->getPublicStorageType()); if(!is_null($strategy)){ - $strategy->save($file, $mediaUpload->getPath(IStorageTypesConstants::PublicType), $fileName); + $strategy->save($fileInfo->getFile(), $mediaUpload->getPath(IStorageTypesConstants::PublicType), $fileInfo->getFileName()); } - $mediaUpload->setFilename($fileName); + $mediaUpload->setFilename($fileInfo->getFileName()); $presentation->addMediaUpload($mediaUpload); if(!$presentation->isCompleted()){ @@ -1085,6 +1078,8 @@ final class PresentationService $presentation->setProgress(Presentation::PHASE_UPLOADS); } } + Log::debug(sprintf("PresentationService::addMediaUploadTo presentation %s deleting original file %s", $presentation_id, $fileInfo->getFileName())); + $fileInfo->delete(); return $mediaUpload; }); @@ -1116,6 +1111,8 @@ final class PresentationService $payload ) { + Log::debug(sprintf("PresentationService::updateMediaUploadFrom summit %s presentation %s", $summit->getId(), $presentation_id)); + $presentation = $this->presentation_repository->getById($presentation_id); if (is_null($presentation) || !$presentation instanceof Presentation) @@ -1126,42 +1123,41 @@ final class PresentationService if (is_null($mediaUpload)) throw new EntityNotFoundException('Presentation Media Upload not found.'); - $hasFile = $request->hasFile('file'); - if($hasFile) { - $file = $request->file('file'); - // get in bytes should be converted to KB - $size = $file->getSize(); - if ($size == 0) - throw new ValidationException("File size is zero."); - $size = $size / 1024; - $fileName = $file->getClientOriginalName(); - $fileExt = pathinfo($fileName, PATHINFO_EXTENSION); - // normalize fileName - $fileName = FileNameSanitizer::sanitize($fileName); + $fileInfo = FileUploadInfo::build($request, $payload); + if(!is_null($fileInfo)) { + // process file $mediaUploadType = $mediaUpload->getMediaUploadType(); if (is_null($mediaUploadType)) throw new ValidationException("Media Upload Type is not set."); - if ($mediaUploadType->getMaxSize() < $size) { - throw new ValidationException(sprintf("Max Size is %s KB.", $mediaUploadType->getMaxSize())); + $fileInfo = FileUploadInfo::build($request, $payload); + if(is_null($fileInfo)){ + throw new ValidationException("You must provide a file."); } - if (!$mediaUploadType->isValidExtension($fileExt)) { - throw new ValidationException(sprintf("File Extension %s is not valid", $fileExt)); + if($mediaUploadType->getMaxSize() < $fileInfo->getSize()){ + throw new ValidationException(sprintf("Max Size is %s MB (%s).", $mediaUploadType->getMaxSizeMB(), $fileInfo->getSize()/1024)); + } + + if(!$mediaUploadType->isValidExtension($fileInfo->getFileExt())){ + throw new ValidationException(sprintf("File Extension %s is not valid (%s).", $fileInfo->getFileExt(), $mediaUploadType->getValidExtensions())); } $strategy = FileUploadStrategyFactory::build($mediaUploadType->getPrivateStorageType()); if (!is_null($strategy)) { - $strategy->save($file, $mediaUpload->getPath(IStorageTypesConstants::PrivateType), $fileName); + $strategy->save($fileInfo->getFile(), $mediaUpload->getPath(IStorageTypesConstants::PrivateType), $fileInfo->getFileName()); } $strategy = FileUploadStrategyFactory::build($mediaUploadType->getPublicStorageType()); if (!is_null($strategy)) { - $strategy->save($file, $mediaUpload->getPath(IStorageTypesConstants::PublicType), $fileName); + $strategy->save($fileInfo->getFile(), $mediaUpload->getPath(IStorageTypesConstants::PublicType), $fileInfo->getFileName()); } - $payload['file_name'] = $fileName; + + $payload['file_name'] = $fileInfo->getFileName(); + + $fileInfo->delete(); } return PresentationMediaUploadFactory::populate($mediaUpload, $payload); @@ -1179,6 +1175,8 @@ final class PresentationService $presentation_id, $media_upload_id ) { + Log::debug(sprintf("PresentationService::deleteMediaUpload summit %s presentation %s", $summit->getId(), $presentation_id)); + $presentation = $this->presentation_repository->getById($presentation_id); if (is_null($presentation) || !$presentation instanceof Presentation) diff --git a/composer.json b/composer.json index d5a42dba..1c11a931 100644 --- a/composer.json +++ b/composer.json @@ -38,6 +38,7 @@ "muxinc/mux-php": "^0.5.0", "php-amqplib/php-amqplib": "^2.11", "php-opencloud/openstack": "dev-master", + "pion/laravel-chunk-upload": "^1.4", "predis/predis": "1.0.*", "s-ichikawa/laravel-sendgrid-driver": "^2.0", "simplesoftwareio/simple-qrcode": "^2.0", diff --git a/composer.lock b/composer.lock index 82f9c77e..db597479 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "2569063edd25c9e3e29d56309138520c", + "content-hash": "2db17f287f1970fcb401f8e660c3495c", "packages": [ { "name": "bacon/bacon-qr-code", @@ -196,16 +196,16 @@ }, { "name": "doctrine/annotations", - "version": "1.10.3", + "version": "1.10.4", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" + "reference": "bfe91e31984e2ba76df1c1339681770401ec262f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", - "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/bfe91e31984e2ba76df1c1339681770401ec262f", + "reference": "bfe91e31984e2ba76df1c1339681770401ec262f", "shasum": "" }, "require": { @@ -215,7 +215,8 @@ }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^7.5" + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^9.1.5" }, "type": "library", "extra": { @@ -261,20 +262,20 @@ "docblock", "parser" ], - "time": "2020-05-25T17:24:27+00:00" + "time": "2020-08-10T19:35:50+00:00" }, { "name": "doctrine/cache", - "version": "1.10.1", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" + "reference": "13e3381b25847283a91948d04640543941309727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", + "reference": "13e3381b25847283a91948d04640543941309727", "shasum": "" }, "require": { @@ -343,20 +344,20 @@ "redis", "xcache" ], - "time": "2020-05-27T16:24:54+00:00" + "time": "2020-07-07T18:54:01+00:00" }, { "name": "doctrine/collections", - "version": "1.6.5", + "version": "1.6.7", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "fc0206348e17e530d09463fef07ba8968406cd6d" + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/fc0206348e17e530d09463fef07ba8968406cd6d", - "reference": "fc0206348e17e530d09463fef07ba8968406cd6d", + "url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a", + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a", "shasum": "" }, "require": { @@ -408,7 +409,7 @@ "iterators", "php" ], - "time": "2020-05-25T19:24:35+00:00" + "time": "2020-07-27T17:53:49+00:00" }, { "name": "doctrine/common", @@ -495,16 +496,16 @@ }, { "name": "doctrine/dbal", - "version": "2.10.2", + "version": "2.10.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8" + "reference": "47433196b6390d14409a33885ee42b6208160643" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8", - "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/47433196b6390d14409a33885ee42b6208160643", + "reference": "47433196b6390d14409a33885ee42b6208160643", "shasum": "" }, "require": { @@ -514,13 +515,14 @@ "php": "^7.2" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^8.1", "jetbrains/phpstorm-stubs": "^2019.1", "nikic/php-parser": "^4.4", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^8.4.1", + "phpstan/phpstan": "^0.12.40", + "phpunit/phpunit": "^8.5.5", + "psalm/plugin-phpunit": "^0.10.0", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.11" + "vimeo/psalm": "^3.14.2" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -585,24 +587,24 @@ "sqlserver", "sqlsrv" ], - "time": "2020-04-20T17:19:26+00:00" + "time": "2020-09-12T21:20:41+00:00" }, { "name": "doctrine/event-manager", - "version": "1.1.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "629572819973f13486371cb611386eb17851e85c" + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c", - "reference": "629572819973f13486371cb611386eb17851e85c", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/common": "<2.9@dev" @@ -661,7 +663,7 @@ "event system", "events" ], - "time": "2019-11-10T09:48:07+00:00" + "time": "2020-05-29T18:28:51+00:00" }, { "name": "doctrine/inflector", @@ -1176,23 +1178,23 @@ }, { "name": "dragonmantank/cron-expression", - "version": "v2.3.0", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", - "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2", + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.0|^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.4|^7.0" + "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0" }, "type": "library", "extra": { @@ -1226,20 +1228,20 @@ "cron", "schedule" ], - "time": "2019-03-31T00:38:28+00:00" + "time": "2020-10-13T00:52:37+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.18", + "version": "2.1.22", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441" + "reference": "68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/cfa3d44471c7f5bfb684ac2b0da7114283d78441", - "reference": "cfa3d44471c7f5bfb684ac2b0da7114283d78441", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5", + "reference": "68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5", "shasum": "" }, "require": { @@ -1284,7 +1286,7 @@ "validation", "validator" ], - "time": "2020-06-16T20:11:17+00:00" + "time": "2020-09-26T15:48:38+00:00" }, { "name": "eluceo/ical", @@ -1575,23 +1577,23 @@ }, { "name": "google/apiclient", - "version": "v2.5.0", + "version": "v2.7.2", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client.git", - "reference": "9ab9cc07f66e2c7274ea2753f102ae24d1271410" + "reference": "9df720d72c59456b5466e3f66e1e78cfe422a5ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/9ab9cc07f66e2c7274ea2753f102ae24d1271410", - "reference": "9ab9cc07f66e2c7274ea2753f102ae24d1271410", + "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/9df720d72c59456b5466e3f66e1e78cfe422a5ba", + "reference": "9df720d72c59456b5466e3f66e1e78cfe422a5ba", "shasum": "" }, "require": { "firebase/php-jwt": "~2.0||~3.0||~4.0||~5.0", "google/apiclient-services": "~0.13", - "google/auth": "^1.9", - "guzzlehttp/guzzle": "~5.3.1||~6.0", + "google/auth": "^1.10", + "guzzlehttp/guzzle": "~5.3.1||~6.0||~7.0", "guzzlehttp/psr7": "^1.2", "monolog/monolog": "^1.17|^2.0", "php": ">=5.4", @@ -1599,9 +1601,10 @@ }, "require-dev": { "cache/filesystem-adapter": "^0.3.2", + "composer/composer": "^1.10", "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", "phpcompatibility/php-compatibility": "^9.2", - "phpunit/phpunit": "^4.8|^5.0", + "phpunit/phpunit": "^4.8.36|^5.0", "squizlabs/php_codesniffer": "~2.3", "symfony/css-selector": "~2.1", "symfony/dom-crawler": "~2.1" @@ -1632,20 +1635,20 @@ "keywords": [ "google" ], - "time": "2020-05-26T22:29:38+00:00" + "time": "2020-09-18T20:02:04+00:00" }, { "name": "google/apiclient-services", - "version": "v0.139", + "version": "v0.151", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "84e99f792cae7bd92b8b54c75b0ad3502d628db6" + "reference": "784a4fdb110b67a2344cfbdbf927194bd29f9e73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/84e99f792cae7bd92b8b54c75b0ad3502d628db6", - "reference": "84e99f792cae7bd92b8b54c75b0ad3502d628db6", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/784a4fdb110b67a2344cfbdbf927194bd29f9e73", + "reference": "784a4fdb110b67a2344cfbdbf927194bd29f9e73", "shasum": "" }, "require": { @@ -1669,25 +1672,25 @@ "keywords": [ "google" ], - "time": "2020-06-08T00:24:31+00:00" + "time": "2020-10-19T00:26:26+00:00" }, { "name": "google/auth", - "version": "v1.9.0", + "version": "v1.14.3", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "af4abf63988b8c74f589bee1e69ba310d3e43c6c" + "reference": "c1503299c779af0cbc99b43788f75930988852cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/af4abf63988b8c74f589bee1e69ba310d3e43c6c", - "reference": "af4abf63988b8c74f589bee1e69ba310d3e43c6c", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/c1503299c779af0cbc99b43788f75930988852cf", + "reference": "c1503299c779af0cbc99b43788f75930988852cf", "shasum": "" }, "require": { "firebase/php-jwt": "~2.0|~3.0|~4.0|~5.0", - "guzzlehttp/guzzle": "~5.3.1|~6.0", + "guzzlehttp/guzzle": "^5.3.1|^6.2.1|^7.0", "guzzlehttp/psr7": "^1.2", "php": ">=5.4", "psr/cache": "^1.0", @@ -1721,7 +1724,7 @@ "google", "oauth2" ], - "time": "2020-05-18T17:02:59+00:00" + "time": "2020-10-16T21:33:48+00:00" }, { "name": "graham-campbell/guzzle-factory", @@ -1846,23 +1849,23 @@ }, { "name": "guzzlehttp/promises", - "version": "v1.3.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "reference": "60d379c243457e073cff02bc323a2a86cb355631" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", + "reference": "60d379c243457e073cff02bc323a2a86cb355631", "shasum": "" }, "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { @@ -1893,20 +1896,20 @@ "keywords": [ "promise" ], - "time": "2016-12-20T10:07:11+00:00" + "time": "2020-09-30T07:37:28+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.6.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", "shasum": "" }, "require": { @@ -1919,15 +1922,15 @@ }, "require-dev": { "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" }, "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -1964,7 +1967,7 @@ "uri", "url" ], - "time": "2019-07-01T23:21:34+00:00" + "time": "2020-09-30T07:37:11+00:00" }, { "name": "jakub-onderka/php-console-color", @@ -2650,28 +2653,29 @@ }, { "name": "league/flysystem", - "version": "1.0.69", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "7106f78428a344bc4f643c233a94e48795f10967" + "reference": "9be3b16c877d477357c015cec057548cf9b2a14a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7106f78428a344bc4f643c233a94e48795f10967", - "reference": "7106f78428a344bc4f643c233a94e48795f10967", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a", + "reference": "9be3b16c877d477357c015cec057548cf9b2a14a", "shasum": "" }, "require": { "ext-fileinfo": "*", - "php": ">=5.5.9" + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" }, "conflict": { "league/flysystem-sftp": "<1.0.6" }, "require-dev": { - "phpspec/phpspec": "^3.4", - "phpunit/phpunit": "^5.7.26" + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" }, "suggest": { "ext-fileinfo": "Required for MimeType", @@ -2730,24 +2734,65 @@ "sftp", "storage" ], - "time": "2020-05-18T15:13:39+00:00" + "time": "2020-08-23T07:39:11+00:00" }, { - "name": "league/oauth2-client", - "version": "2.4.1", + "name": "league/mime-type-detection", + "version": "1.5.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/oauth2-client.git", - "reference": "cc114abc622a53af969e8664722e84ca36257530" + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/cc114abc622a53af969e8664722e84ca36257530", - "reference": "cc114abc622a53af969e8664722e84ca36257530", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/353f66d7555d8a90781f6f5e7091932f9a4250aa", + "reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^6.0", + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.36", + "phpunit/phpunit": "^8.5.8" + }, + "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", + "time": "2020-10-18T11:50:25+00:00" + }, + { + "name": "league/oauth2-client", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth2-client.git", + "reference": "d9f2a1e000dc14eb3c02e15d15759385ec7ff0fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/d9f2a1e000dc14eb3c02e15d15759385ec7ff0fb", + "reference": "d9f2a1e000dc14eb3c02e15d15759385ec7ff0fb", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0 || ^7.0", "paragonie/random_compat": "^1|^2|^9.99", "php": "^5.6|^7.0" }, @@ -2797,20 +2842,20 @@ "oauth2", "single sign on" ], - "time": "2018-11-22T18:33:57+00:00" + "time": "2020-07-18T17:54:32+00:00" }, { "name": "monolog/monolog", - "version": "1.25.4", + "version": "1.25.5", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "3022efff205e2448b560c833c6fbbf91c3139168" + "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/3022efff205e2448b560c833c6fbbf91c3139168", - "reference": "3022efff205e2448b560c833c6fbbf91c3139168", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0", + "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0", "shasum": "" }, "require": { @@ -2874,7 +2919,7 @@ "logging", "psr-3" ], - "time": "2020-05-22T07:31:27+00:00" + "time": "2020-07-23T08:35:51+00:00" }, { "name": "muxinc/mux-php", @@ -2988,16 +3033,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.6.0", + "version": "v4.10.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c346bbfafe2ff60680258b631afb730d186ed864" + "reference": "658f1be311a230e0907f5dfe0213742aff0596de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c346bbfafe2ff60680258b631afb730d186ed864", - "reference": "c346bbfafe2ff60680258b631afb730d186ed864", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de", + "reference": "658f1be311a230e0907f5dfe0213742aff0596de", "shasum": "" }, "require": { @@ -3005,8 +3050,8 @@ "php": ">=7.0" }, "require-dev": { - "ircmaxell/php-yacc": "0.0.5", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -3014,7 +3059,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.9-dev" } }, "autoload": { @@ -3036,7 +3081,7 @@ "parser", "php" ], - "time": "2020-07-02T17:12:47+00:00" + "time": "2020-09-26T10:30:38+00:00" }, { "name": "ocramius/package-versions", @@ -3205,16 +3250,16 @@ }, { "name": "php-amqplib/php-amqplib", - "version": "v2.11.3", + "version": "v2.12.1", "source": { "type": "git", "url": "https://github.com/php-amqplib/php-amqplib.git", - "reference": "6353c5d2d3021a301914bc6566e695c99cfeb742" + "reference": "0eaaa9d5d45335f4342f69603288883388c2fe21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/6353c5d2d3021a301914bc6566e695c99cfeb742", - "reference": "6353c5d2d3021a301914bc6566e695c99cfeb742", + "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/0eaaa9d5d45335f4342f69603288883388c2fe21", + "reference": "0eaaa9d5d45335f4342f69603288883388c2fe21", "shasum": "" }, "require": { @@ -3238,7 +3283,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.11-dev" + "dev-master": "2.12-dev" } }, "autoload": { @@ -3278,7 +3323,7 @@ "queue", "rabbitmq" ], - "time": "2020-05-13T13:56:11+00:00" + "time": "2020-09-25T18:34:58+00:00" }, { "name": "php-opencloud/openstack", @@ -3353,16 +3398,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.27", + "version": "2.0.29", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc" + "reference": "497856a8d997f640b4a516062f84228a772a48a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc", - "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/497856a8d997f640b4a516062f84228a772a48a8", + "reference": "497856a8d997f640b4a516062f84228a772a48a8", "shasum": "" }, "require": { @@ -3371,7 +3416,6 @@ "require-dev": { "phing/phing": "~2.7", "phpunit/phpunit": "^4.8.35|^5.7|^6.0", - "sami/sami": "~2.0", "squizlabs/php_codesniffer": "~2.0" }, "suggest": { @@ -3441,7 +3485,60 @@ "x.509", "x509" ], - "time": "2020-04-04T23:17:33+00:00" + "time": "2020-09-08T04:24:43+00:00" + }, + { + "name": "pion/laravel-chunk-upload", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/pionl/laravel-chunk-upload.git", + "reference": "a97902906e11da3ff26874c7fd0004625c618d44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pionl/laravel-chunk-upload/zipball/a97902906e11da3ff26874c7fd0004625c618d44", + "reference": "a97902906e11da3ff26874c7fd0004625c618d44", + "shasum": "" + }, + "require": { + "illuminate/console": "5.2 - 5.8 | ^6.0 | ^7.0", + "illuminate/filesystem": "5.2 - 5.8 | ^6.0 | ^7.0", + "illuminate/http": "5.2 - 5.8 | ^6.0 | ^7.0", + "illuminate/support": "5.2 - 5.8 | ^6.0 | ^7.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16.0", + "laravel/laravel": "5.2 - 5.8 | ^6.0 | ^7.0", + "mockery/mockery": "^1.1.0 | ^1.3.0", + "overtrue/phplint": "^1.1", + "phpunit/phpunit": "5.7 | 6.0 | 7.0 | 7.5 | 8.4 | ^8.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Pion\\Laravel\\ChunkUpload\\Providers\\ChunkUploadServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Pion\\Laravel\\ChunkUpload\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Martin Kluska", + "email": "martin@kluska.cz" + } + ], + "description": "Service for chunked upload with several js providers", + "time": "2020-06-21T20:08:02+00:00" }, { "name": "predis/predis", @@ -3936,20 +4033,20 @@ }, { "name": "s-ichikawa/laravel-sendgrid-driver", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/s-ichikawa/laravel-sendgrid-driver.git", - "reference": "116a6e624323883ddcc56bfaf92ef19f9218f6fd" + "reference": "0fdb0afeefaa83eec450964341c12774c646cf15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/s-ichikawa/laravel-sendgrid-driver/zipball/116a6e624323883ddcc56bfaf92ef19f9218f6fd", - "reference": "116a6e624323883ddcc56bfaf92ef19f9218f6fd", + "url": "https://api.github.com/repos/s-ichikawa/laravel-sendgrid-driver/zipball/0fdb0afeefaa83eec450964341c12774c646cf15", + "reference": "0fdb0afeefaa83eec450964341c12774c646cf15", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "~5.3|~6.2", + "guzzlehttp/guzzle": "~5.3|~6.2|~7.0", "illuminate/mail": ">=5.5" }, "require-dev": { @@ -3988,7 +4085,7 @@ "laravel", "sendgrid" ], - "time": "2019-09-04T15:31:39+00:00" + "time": "2020-08-06T04:39:30+00:00" }, { "name": "sabre/uri", @@ -4264,16 +4361,16 @@ }, { "name": "sokil/php-isocodes", - "version": "3.0.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sokil/php-isocodes.git", - "reference": "89b1c153afd1e27c48634a06469a4cab27858833" + "reference": "fefa9055d9552498e644b0d45f48615e5ea1405c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sokil/php-isocodes/zipball/89b1c153afd1e27c48634a06469a4cab27858833", - "reference": "89b1c153afd1e27c48634a06469a4cab27858833", + "url": "https://api.github.com/repos/sokil/php-isocodes/zipball/fefa9055d9552498e644b0d45f48615e5ea1405c", + "reference": "fefa9055d9552498e644b0d45f48615e5ea1405c", "shasum": "" }, "require": { @@ -4309,20 +4406,20 @@ } ], "description": "ISO country, subdivision, language, currency and script definitions and their translations. Based on pythons pycountry and Debian's iso-codes.", - "time": "2020-05-28T22:28:43+00:00" + "time": "2020-09-22T20:35:16+00:00" }, { "name": "spatie/dropbox-api", - "version": "1.15.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://github.com/spatie/dropbox-api.git", - "reference": "0cac9d3b613514cba2fef7b8f00b41a7b9d2b2a3" + "reference": "c294ce5ec69e16fb19879451e3a0944b7291f826" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/dropbox-api/zipball/0cac9d3b613514cba2fef7b8f00b41a7b9d2b2a3", - "reference": "0cac9d3b613514cba2fef7b8f00b41a7b9d2b2a3", + "url": "https://api.github.com/repos/spatie/dropbox-api/zipball/c294ce5ec69e16fb19879451e3a0944b7291f826", + "reference": "c294ce5ec69e16fb19879451e3a0944b7291f826", "shasum": "" }, "require": { @@ -4366,7 +4463,7 @@ "spatie", "v2" ], - "time": "2020-07-10T15:17:57+00:00" + "time": "2020-09-25T08:07:36+00:00" }, { "name": "spatie/flysystem-dropbox", @@ -4600,16 +4697,16 @@ }, { "name": "symfony/console", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "326b064d804043005526f5a0494cfb49edb59bb0" + "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/326b064d804043005526f5a0494cfb49edb59bb0", - "reference": "326b064d804043005526f5a0494cfb49edb59bb0", + "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124", + "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124", "shasum": "" }, "require": { @@ -4673,24 +4770,24 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-05-30T20:06:45+00:00" + "time": "2020-09-15T07:58:55+00:00" }, { "name": "symfony/css-selector", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "afc26133a6fbdd4f8842e38893e0ee4685c7c94b" + "reference": "bf17dc9f6ce144e41f786c32435feea4d8e11dcc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/afc26133a6fbdd4f8842e38893e0ee4685c7c94b", - "reference": "afc26133a6fbdd4f8842e38893e0ee4685c7c94b", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf17dc9f6ce144e41f786c32435feea4d8e11dcc", + "reference": "bf17dc9f6ce144e41f786c32435feea4d8e11dcc", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1.3" }, "type": "library", "extra": { @@ -4726,20 +4823,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:54:36+00:00" + "time": "2020-07-05T09:39:30+00:00" }, { "name": "symfony/debug", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6" + "reference": "726b85e69342e767d60e3853b98559a68ff74183" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/28f92d08bb6d1fddf8158e02c194ad43870007e6", - "reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6", + "url": "https://api.github.com/repos/symfony/debug/zipball/726b85e69342e767d60e3853b98559a68ff74183", + "reference": "726b85e69342e767d60e3853b98559a68ff74183", "shasum": "" }, "require": { @@ -4783,20 +4880,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2020-05-24T08:33:35+00:00" + "time": "2020-09-09T05:20:36+00:00" }, { "name": "symfony/error-handler", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "0df9a23c0f9eddbb6682479fee6fd58b88add75b" + "reference": "c8be4a5c70af70fec82e762dd93e3bbcf95c035f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0df9a23c0f9eddbb6682479fee6fd58b88add75b", - "reference": "0df9a23c0f9eddbb6682479fee6fd58b88add75b", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c8be4a5c70af70fec82e762dd93e3bbcf95c035f", + "reference": "c8be4a5c70af70fec82e762dd93e3bbcf95c035f", "shasum": "" }, "require": { @@ -4840,20 +4937,20 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2020-05-28T10:39:14+00:00" + "time": "2020-10-01T16:21:20+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a5370aaa7807c7a439b21386661ffccf3dff2866" + "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a5370aaa7807c7a439b21386661ffccf3dff2866", - "reference": "a5370aaa7807c7a439b21386661ffccf3dff2866", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd", + "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd", "shasum": "" }, "require": { @@ -4871,6 +4968,7 @@ "psr/log": "~1.0", "symfony/config": "^3.4|^4.0|^5.0", "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", "symfony/expression-language": "^3.4|^4.0|^5.0", "symfony/http-foundation": "^3.4|^4.0|^5.0", "symfony/service-contracts": "^1.1|^2", @@ -4910,24 +5008,24 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-05-20T08:37:50+00:00" + "time": "2020-09-18T14:07:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.7", + "version": "v1.1.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18" + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c43ab685673fb6c8d84220c77897b1d6cdbe1d18", - "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1.3" }, "suggest": { "psr/event-dispatcher": "", @@ -4937,6 +5035,10 @@ "extra": { "branch-alias": { "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4968,24 +5070,24 @@ "interoperability", "standards" ], - "time": "2019-09-17T09:54:03+00:00" + "time": "2020-07-06T13:19:58+00:00" }, { "name": "symfony/finder", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5729f943f9854c5781984ed4907bbb817735776b" + "reference": "60d08560f9aa72997c44077c40d47aa28a963230" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b", - "reference": "5729f943f9854c5781984ed4907bbb817735776b", + "url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230", + "reference": "60d08560f9aa72997c44077c40d47aa28a963230", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1.3" }, "type": "library", "extra": { @@ -5017,20 +5119,82 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:54:36+00:00" + "time": "2020-10-02T07:34:48+00:00" }, { - "name": "symfony/http-foundation", - "version": "v4.4.10", + "name": "symfony/http-client-contracts", + "version": "v2.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "3adfbd7098c850b02d107330b7b9deacf2581578" + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "41db680a15018f9c1d4b23516059633ce280ca33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3adfbd7098c850b02d107330b7b9deacf2581578", - "reference": "3adfbd7098c850b02d107330b7b9deacf2581578", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33", + "reference": "41db680a15018f9c1d4b23516059633ce280ca33", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-version": "2.3", + "branch-alias": { + "dev-main": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "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 HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2020-10-14T17:08:19+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v4.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "10683b407c3b6087c64619ebc97a87e36ea62c92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/10683b407c3b6087c64619ebc97a87e36ea62c92", + "reference": "10683b407c3b6087c64619ebc97a87e36ea62c92", "shasum": "" }, "require": { @@ -5072,20 +5236,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-05-23T09:11:46+00:00" + "time": "2020-09-27T14:14:06+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "81d42148474e1852a333ed7a732f2a014af75430" + "reference": "6544745997b06c7dcecf0d4a70f09e5de1db7ca8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/81d42148474e1852a333ed7a732f2a014af75430", - "reference": "81d42148474e1852a333ed7a732f2a014af75430", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6544745997b06c7dcecf0d4a70f09e5de1db7ca8", + "reference": "6544745997b06c7dcecf0d4a70f09e5de1db7ca8", "shasum": "" }, "require": { @@ -5093,6 +5257,7 @@ "psr/log": "~1.0", "symfony/error-handler": "^4.4", "symfony/event-dispatcher": "^4.4", + "symfony/http-client-contracts": "^1.1|^2", "symfony/http-foundation": "^4.4|^5.0", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9", @@ -5163,20 +5328,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-06-12T11:15:37+00:00" + "time": "2020-10-04T07:48:13+00:00" }, { "name": "symfony/mime", - "version": "v5.1.2", + "version": "v5.1.7", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "c0c418f05e727606e85b482a8591519c4712cf45" + "reference": "4404d6545125863561721514ad9388db2661eec5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/c0c418f05e727606e85b482a8591519c4712cf45", - "reference": "c0c418f05e727606e85b482a8591519c4712cf45", + "url": "https://api.github.com/repos/symfony/mime/zipball/4404d6545125863561721514ad9388db2661eec5", + "reference": "4404d6545125863561721514ad9388db2661eec5", "shasum": "" }, "require": { @@ -5226,20 +5391,20 @@ "mime", "mime-type" ], - "time": "2020-06-09T15:07:35+00:00" + "time": "2020-09-02T16:23:27+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d" + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", - "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", "shasum": "" }, "require": { @@ -5251,7 +5416,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5288,20 +5453,20 @@ "polyfill", "portable" ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "ba6c9c18db36235b859cc29b8372d1c01298c035" + "reference": "6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ba6c9c18db36235b859cc29b8372d1c01298c035", - "reference": "ba6c9c18db36235b859cc29b8372d1c01298c035", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36", + "reference": "6c2f78eb8f5ab8eaea98f6d414a5915f2e0fce36", "shasum": "" }, "require": { @@ -5313,7 +5478,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5351,25 +5516,26 @@ "portable", "shim" ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a57f8161502549a742a63c09f0a604997bf47027" + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a57f8161502549a742a63c09f0a604997bf47027", - "reference": "a57f8161502549a742a63c09f0a604997bf47027", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/5dcab1bc7146cf8c1beaa4502a3d9be344334251", + "reference": "5dcab1bc7146cf8c1beaa4502a3d9be344334251", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php70": "^1.10", "symfony/polyfill-php72": "^1.10" }, "suggest": { @@ -5378,7 +5544,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5402,6 +5568,10 @@ "name": "Laurent Bassin", "email": "laurent@bassin.info" }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" @@ -5417,20 +5587,87 @@ "portable", "shim" ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-08-04T06:02:08+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.17.1", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.18.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7110338d81ce1cbc3e273136e4574663627037a7" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7", - "reference": "7110338d81ce1cbc3e273136e4574663627037a7", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", "shasum": "" }, "require": { @@ -5442,7 +5679,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5480,20 +5717,83 @@ "portable", "shim" ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.17.0", + "name": "symfony/polyfill-php70", + "version": "v1.18.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "f048e612a3905f34931127360bdd2def19a5e582" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", - "reference": "f048e612a3905f34931127360bdd2def19a5e582", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "639447d008615574653fb3bc60d1986d7172eaae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae", + "reference": "639447d008615574653fb3bc60d1986d7172eaae", "shasum": "" }, "require": { @@ -5502,7 +5802,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -5535,20 +5839,20 @@ "portable", "shim" ], - "time": "2020-05-12T16:47:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a" + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fa0837fe02d617d31fbb25f990655861bb27bd1a", - "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", "shasum": "" }, "require": { @@ -5557,7 +5861,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5597,20 +5901,20 @@ "portable", "shim" ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.17.1", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2" + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4a5b6bba3259902e386eb80dd1956181ee90b5b2", - "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", "shasum": "" }, "require": { @@ -5619,7 +5923,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5663,24 +5967,24 @@ "portable", "shim" ], - "time": "2020-06-06T08:46:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/process", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c714958428a85c86ab97e3a0c96db4c4f381b7f5" + "reference": "9b887acc522935f77555ae8813495958c7771ba7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c714958428a85c86ab97e3a0c96db4c4f381b7f5", - "reference": "c714958428a85c86ab97e3a0c96db4c4f381b7f5", + "url": "https://api.github.com/repos/symfony/process/zipball/9b887acc522935f77555ae8813495958c7771ba7", + "reference": "9b887acc522935f77555ae8813495958c7771ba7", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1.3" }, "type": "library", "extra": { @@ -5712,24 +6016,24 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-05-30T20:06:45+00:00" + "time": "2020-09-02T16:08:58+00:00" }, { "name": "symfony/routing", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "0f557911dde75c2a9652b8097bd7c9f54507f646" + "reference": "006b2d06672b8650998f328fc603eb6f3feb979f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/0f557911dde75c2a9652b8097bd7c9f54507f646", - "reference": "0f557911dde75c2a9652b8097bd7c9f54507f646", + "url": "https://api.github.com/repos/symfony/routing/zipball/006b2d06672b8650998f328fc603eb6f3feb979f", + "reference": "006b2d06672b8650998f328fc603eb6f3feb979f", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1.3" }, "conflict": { "symfony/config": "<4.2", @@ -5788,20 +6092,20 @@ "uri", "url" ], - "time": "2020-05-30T20:07:26+00:00" + "time": "2020-10-01T16:25:17+00:00" }, { "name": "symfony/serializer", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "a91ceee34fc690a824770085192ffdeaa4476a8c" + "reference": "8e97a9cfc5a48de83437f286d6d0ab4a2a2c22b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/a91ceee34fc690a824770085192ffdeaa4476a8c", - "reference": "a91ceee34fc690a824770085192ffdeaa4476a8c", + "url": "https://api.github.com/repos/symfony/serializer/zipball/8e97a9cfc5a48de83437f286d6d0ab4a2a2c22b0", + "reference": "8e97a9cfc5a48de83437f286d6d0ab4a2a2c22b0", "shasum": "" }, "require": { @@ -5870,20 +6174,20 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "time": "2020-06-01T17:29:37+00:00" + "time": "2020-10-02T20:12:42+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.1.2", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b" + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b", - "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", "shasum": "" }, "require": { @@ -5896,7 +6200,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5928,20 +6236,20 @@ "interoperability", "standards" ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/translation", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "79d3ef9096a6a6047dbc69218b68c7b7f63193af" + "reference": "8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/79d3ef9096a6a6047dbc69218b68c7b7f63193af", - "reference": "79d3ef9096a6a6047dbc69218b68c7b7f63193af", + "url": "https://api.github.com/repos/symfony/translation/zipball/8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd", + "reference": "8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd", "shasum": "" }, "require": { @@ -6004,20 +6312,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-05-30T20:06:45+00:00" + "time": "2020-10-02T07:34:48+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.1.2", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e" + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e5ca07c8f817f865f618aa072c2fe8e0e637340e", - "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", "shasum": "" }, "require": { @@ -6029,7 +6337,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -6061,20 +6373,20 @@ "interoperability", "standards" ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-09-28T13:05:58+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "56b3aa5eab0ac6720dcd559fd1d590ce301594ac" + "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/56b3aa5eab0ac6720dcd559fd1d590ce301594ac", - "reference": "56b3aa5eab0ac6720dcd559fd1d590ce301594ac", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0dc22bdf9d1197467bb04d505355180b6f20bcca", + "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca", "shasum": "" }, "require": { @@ -6138,7 +6450,7 @@ "debug", "dump" ], - "time": "2020-05-30T20:06:45+00:00" + "time": "2020-09-18T08:35:10+00:00" }, { "name": "symfony/yaml", @@ -6263,26 +6575,26 @@ }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.2", + "version": "2.2.3", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15" + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/dda2ee426acd6d801d5b7fd1001cde9b5f790e15", - "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.5 || ^7.0", + "php": "^5.5 || ^7.0 || ^8.0", "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" }, "type": "library", "extra": { @@ -6308,25 +6620,25 @@ ], "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", - "time": "2019-10-24T08:53:34+00:00" + "time": "2020-07-13T06:12:54+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v2.6.5", + "version": "v2.6.6", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2e977311ffb17b2f82028a9c36824647789c6365" + "reference": "e1d57f62db3db00d9139078cbedf262280701479" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2e977311ffb17b2f82028a9c36824647789c6365", - "reference": "2e977311ffb17b2f82028a9c36824647789c6365", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/e1d57f62db3db00d9139078cbedf262280701479", + "reference": "e1d57f62db3db00d9139078cbedf262280701479", "shasum": "" }, "require": { "php": "^5.3.9 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.16" + "symfony/polyfill-ctype": "^1.17" }, "require-dev": { "ext-filter": "*", @@ -6370,7 +6682,7 @@ "env", "environment" ], - "time": "2020-06-02T14:06:52+00:00" + "time": "2020-07-14T17:54:18+00:00" }, { "name": "zendframework/zend-code", @@ -6489,25 +6801,25 @@ "packages-dev": [ { "name": "filp/whoops", - "version": "2.7.3", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d" + "reference": "2ec31f3adc54c71a59c5e3c2143d7a0e2f8899f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/5d5fe9bb3d656b514d455645b3addc5f7ba7714d", - "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d", + "url": "https://api.github.com/repos/filp/whoops/zipball/2ec31f3adc54c71a59c5e3c2143d7a0e2f8899f8", + "reference": "2ec31f3adc54c71a59c5e3c2143d7a0e2f8899f8", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0", + "php": "^5.5.9 || ^7.0 || ^8.0", "psr/log": "^1.0.1" }, "require-dev": { "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.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": { @@ -6517,7 +6829,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.7-dev" } }, "autoload": { @@ -6546,7 +6858,7 @@ "throwable", "whoops" ], - "time": "2020-06-14T09:00:00+00:00" + "time": "2020-10-20T12:00:00+00:00" }, { "name": "fzaninotto/faker", @@ -6600,20 +6912,20 @@ }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.0", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "php": "^5.3|^7.0" + "php": "^5.3|^7.0|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -6621,14 +6933,13 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "^1.0" + "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.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -6638,13 +6949,13 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ "test" ], - "time": "2016-01-20T08:20:44+00:00" + "time": "2020-07-09T08:09:16+00:00" }, { "name": "laravel/browser-kit-testing", @@ -6697,25 +7008,25 @@ }, { "name": "mockery/mockery", - "version": "1.3.1", + "version": "1.3.3", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be" + "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", - "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", + "url": "https://api.github.com/repos/mockery/mockery/zipball/60fa2f67f6e4d3634bb4a45ff3171fa52215800d", + "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "~2.0", + "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" + "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" }, "type": "library", "extra": { @@ -6758,7 +7069,7 @@ "test double", "testing" ], - "time": "2019-12-26T09:49:15+00:00" + "time": "2020-08-11T18:10:21+00:00" }, { "name": "myclabs/deep-copy", @@ -7025,28 +7336,27 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.1.0", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { - "ext-filter": "^7.1", - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0", - "phpdocumentor/type-resolver": "^1.0", - "webmozart/assert": "^1" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "^1", - "mockery/mockery": "^1" + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { @@ -7074,20 +7384,20 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-02-22T12:28:44+00:00" + "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { @@ -7119,37 +7429,37 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-06-27T10:12:23+00:00" + "time": "2020-09-17T18:55:26+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.10.3", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" + "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", + "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0 <9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10.x-dev" + "dev-master": "1.11.x-dev" } }, "autoload": { @@ -7182,7 +7492,7 @@ "spy", "stub" ], - "time": "2020-03-05T15:02:03+00:00" + "time": "2020-09-29T09:10:42+00:00" }, { "name": "phpunit/php-code-coverage", @@ -8089,16 +8399,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v4.4.10", + "version": "v4.4.15", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "c18354d5a0bb84c945f6257c51b971d52f10c614" + "reference": "bdcb7633a501770a0daefbf81d2e6b28c3864f2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c18354d5a0bb84c945f6257c51b971d52f10c614", - "reference": "c18354d5a0bb84c945f6257c51b971d52f10c614", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bdcb7633a501770a0daefbf81d2e6b28c3864f2b", + "reference": "bdcb7633a501770a0daefbf81d2e6b28c3864f2b", "shasum": "" }, "require": { @@ -8146,27 +8456,27 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2020-05-23T00:03:06+00:00" + "time": "2020-10-02T07:34:48+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.3", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -8186,24 +8496,24 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-06-13T22:48:21+00:00" + "time": "2020-07-12T23:59:07+00:00" }, { "name": "webmozart/assert", - "version": "1.9.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "9dc4f203e36f2b486149058bade43c851dd97451" + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/9dc4f203e36f2b486149058bade43c851dd97451", - "reference": "9dc4f203e36f2b486149058bade43c851dd97451", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^5.3.3 || ^7.0 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -8235,7 +8545,7 @@ "check", "validate" ], - "time": "2020-06-16T10:16:42+00:00" + "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], diff --git a/config/chunk-upload.php b/config/chunk-upload.php new file mode 100644 index 00000000..8c7a241c --- /dev/null +++ b/config/chunk-upload.php @@ -0,0 +1,43 @@ + [ + /* + * Returns the folder name of the chunks. The location is in storage/app/{folder_name} + */ + 'chunks' => 'chunks', + 'disk' => 'local', + ], + 'clear' => [ + /* + * How old chunks we should delete + */ + 'timestamp' => '-3 HOURS', + 'schedule' => [ + 'enabled' => true, + 'cron' => '25 * * * *', // run every hour on the 25th minute + ], + ], + 'chunk' => [ + // setup for the chunk naming setup to ensure same name upload at same time + 'name' => [ + 'use' => [ + 'session' => env('CHUNK_UPLOAD_USE_SESSION_ID', true), // should the chunk name use the session id? The uploader must send cookie!, + 'browser' => env('CHUNK_UPLOAD_USE_BROWSER_ID', false), // instead of session we can use the ip and browser? + ], + ], + ], + 'handlers' => [ + // A list of handlers/providers that will be appended to existing list of handlers + 'custom' => [ + + ], + // Overrides the list of handlers - use only what you really want + 'override' => [ + // \Pion\Laravel\ChunkUpload\Handler\DropZoneUploadHandler::class + ], + ], +]; diff --git a/tests/PresentationMediaUploadsTests.php b/tests/PresentationMediaUploadsTests.php index 417c484a..1442060b 100644 --- a/tests/PresentationMediaUploadsTests.php +++ b/tests/PresentationMediaUploadsTests.php @@ -81,11 +81,12 @@ class PresentationMediaUploadsTests $headers = [ "HTTP_Authorization" => " Bearer " . $this->access_token, - "CONTENT_TYPE" => "multipart/form-data; boundary=----WebKitFormBoundaryBkSYnzBIiFtZu4pb" + // "CONTENT_TYPE" => "multipart/form-data; boundary=----WebKitFormBoundaryBkSYnzBIiFtZu4pb" ]; $payload = [ - 'media_upload_type_id' => self::$media_upload_type->getId() + 'media_upload_type_id' => self::$media_upload_type->getId(), + 'filepath' => 'upload/video-mp4/2020-10-41/OpenDev 2020- Hardware Automation_ab8dbdb02b52fea11b7e3e5e80c63086.mp4' ]; $response = $this->action @@ -96,7 +97,7 @@ class PresentationMediaUploadsTests $payload, [], [ - 'file' => UploadedFile::fake()->image('slide.png') + //'file' => UploadedFile::fake()->image('slide.png') ], $headers, json_encode($payload)