diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b20d1c68..3c2769c44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,22 @@ ## [Unreleased](https://github.com/pixelfed/pixelfed/compare/v0.11.1...dev) +### Updated +- Updated NotificationService, fix 500 bug. ([4a609dc3](https://github.com/pixelfed/pixelfed/commit/4a609dc3)) +- Updated HttpSignatures, update instance actor headers. Fixes #2935. ([a900de21](https://github.com/pixelfed/pixelfed/commit/a900de21)) +- Updated NoteTransformer, fix tag array. ([7b3e672d](https://github.com/pixelfed/pixelfed/commit/7b3e672d)) +- Updated video presenters, add playsinline attribute to video tags. ([0299aa5b](https://github.com/pixelfed/pixelfed/commit/0299aa5b)) +- Updated RemotePost, RemoteProfile components, add fallback avatars. ([754151dc](https://github.com/pixelfed/pixelfed/commit/754151dc)) +- Updated FederationController, move well-known to api middleware and cache webfinger lookups. ([4505d1f0](https://github.com/pixelfed/pixelfed/commit/4505d1f0)) +- Updated InstanceActorController, improve json seralization by not escaping slashes. ([0a8eb81b](https://github.com/pixelfed/pixelfed/commit/0a8eb81b)) +- Refactor following & relationship logic. Replace FollowerObserver with FollowerService and added RelationshipService to cache results. Removed NotificationTransformer includes and replaced with cached services to improve performance and reduce database queries. ([80d9b939](https://github.com/pixelfed/pixelfed/commit/80d9b939)) +- Updated PublicApiController, use AccountService in accountStatuses method. ([bef959f4](https://github.com/pixelfed/pixelfed/commit/bef959f4)) +- Updated auth config, add throttle limit to password resets. ([2609c86a](https://github.com/pixelfed/pixelfed/commit/2609c86a)) +- Updated StatusCard component, add relationship state button. ([0436b124](https://github.com/pixelfed/pixelfed/commit/0436b124)) +- Updated Timeline component, cascade relationship state change. ([f4bd5672](https://github.com/pixelfed/pixelfed/commit/f4bd5672)) +- Updated Activity component, only show context button for actionable activities. ([7886fd59](https://github.com/pixelfed/pixelfed/commit/7886fd59)) +- ([](https://github.com/pixelfed/pixelfed/commit/)) + ## [v0.11.1 (2021-09-07)](https://github.com/pixelfed/pixelfed/compare/v0.11.0...v0.11.1) ### Added - WebP Support ([069a0e4a](https://github.com/pixelfed/pixelfed/commit/069a0e4a)) @@ -112,7 +128,6 @@ - Updated DirectMessageController, fix autocomplete bug. ([0f00be4d](https://github.com/pixelfed/pixelfed/commit/0f00be4d)) - Updated StoryService, fix division by zero bug. ([6ae1ba0a](https://github.com/pixelfed/pixelfed/commit/6ae1ba0a)) - Updated ApiV1Controller, fix empty public timeline bug. ([0584f9ee](https://github.com/pixelfed/pixelfed/commit/0584f9ee)) -- ([](https://github.com/pixelfed/pixelfed/commit/)) ## [v0.11.0 (2021-06-01)](https://github.com/pixelfed/pixelfed/compare/v0.10.10...v0.11.0) ### Added diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index b6702c696..5e737e9cd 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -55,6 +55,7 @@ use App\Services\{ MediaPathService, PublicTimelineService, ProfileService, + RelationshipService, SearchApiV2Service, StatusService, MediaBlocklistService @@ -551,7 +552,7 @@ class ApiV1Controller extends Controller * * @param array|integer $id * - * @return \App\Transformer\Api\RelationshipTransformer + * @return \App\Services\RelationshipService */ public function accountRelationshipsById(Request $request) { @@ -563,12 +564,9 @@ class ApiV1Controller extends Controller ]); $pid = $request->user()->profile_id ?? $request->user()->profile->id; $ids = collect($request->input('id')); - $filtered = $ids->filter(function($v) use($pid) { - return $v != $pid; + $res = $ids->map(function($id) use($pid) { + return RelationshipService::get($pid, $id); }); - $relations = Profile::whereNull('status')->findOrFail($filtered->values()); - $fractal = new Fractal\Resource\Collection($relations, new RelationshipTransformer()); - $res = $this->fractal->createData($fractal)->toArray(); return response()->json($res); } diff --git a/app/Http/Controllers/FederationController.php b/app/Http/Controllers/FederationController.php index 8c121a898..bc90737d8 100644 --- a/app/Http/Controllers/FederationController.php +++ b/app/Http/Controllers/FederationController.php @@ -35,14 +35,14 @@ class FederationController extends Controller public function nodeinfoWellKnown() { abort_if(!config('federation.nodeinfo.enabled'), 404); - return response()->json(Nodeinfo::wellKnown()) + return response()->json(Nodeinfo::wellKnown(), 200, [], JSON_UNESCAPED_SLASHES) ->header('Access-Control-Allow-Origin','*'); } public function nodeinfo() { abort_if(!config('federation.nodeinfo.enabled'), 404); - return response()->json(Nodeinfo::get()) + return response()->json(Nodeinfo::get(), 200, [], JSON_UNESCAPED_SLASHES) ->header('Access-Control-Allow-Origin','*'); } @@ -53,6 +53,11 @@ class FederationController extends Controller abort_if(!$request->filled('resource'), 400); $resource = $request->input('resource'); + $hash = hash('sha256', $resource); + $key = 'federation:webfinger:sha256:' . $hash; + if($cached = Cache::get($key)) { + return response()->json($cached, 200, [], JSON_UNESCAPED_SLASHES); + } $parsed = Nickname::normalizeProfileUrl($resource); if(empty($parsed) || $parsed['domain'] !== config('pixelfed.domain.app')) { abort(404); @@ -63,8 +68,9 @@ class FederationController extends Controller return ProfileController::accountCheck($profile); } $webfinger = (new Webfinger($profile))->generate(); + Cache::put($key, $webfinger, 43200); - return response()->json($webfinger, 200, [], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES) + return response()->json($webfinger, 200, [], JSON_UNESCAPED_SLASHES) ->header('Access-Control-Allow-Origin','*'); } diff --git a/app/Http/Controllers/FollowerController.php b/app/Http/Controllers/FollowerController.php index abc729197..97b96af75 100644 --- a/app/Http/Controllers/FollowerController.php +++ b/app/Http/Controllers/FollowerController.php @@ -12,6 +12,7 @@ use Auth, Cache; use Illuminate\Http\Request; use App\Jobs\FollowPipeline\FollowPipeline; use App\Util\ActivityPub\Helpers; +use App\Services\FollowerService; class FollowerController extends Controller { @@ -70,7 +71,9 @@ class FollowerController extends Controller ]); if($remote == true && config('federation.activitypub.remoteFollow') == true) { $this->sendFollow($user, $target); - } + } + + FollowerService::add($user->id, $target->id); } elseif ($private == false && $isFollowing == 0) { if($user->following()->count() >= Follower::MAX_FOLLOWING) { abort(400, 'You cannot follow more than ' . Follower::MAX_FOLLOWING . ' accounts'); @@ -87,6 +90,7 @@ class FollowerController extends Controller if($remote == true && config('federation.activitypub.remoteFollow') == true) { $this->sendFollow($user, $target); } + FollowerService::add($user->id, $target->id); FollowPipeline::dispatch($follower); } else { if($force == true) { @@ -101,6 +105,7 @@ class FollowerController extends Controller Follower::whereProfileId($user->id) ->whereFollowingId($target->id) ->delete(); + FollowerService::remove($user->id, $target->id); } } diff --git a/app/Http/Controllers/Import/Instagram.php b/app/Http/Controllers/Import/Instagram.php index bde316e13..39d1d4d2e 100644 --- a/app/Http/Controllers/Import/Instagram.php +++ b/app/Http/Controllers/Import/Instagram.php @@ -15,10 +15,13 @@ use App\Jobs\ImportPipeline\ImportInstagram; trait Instagram { - public function instagram() - { - return view('settings.import.instagram.home'); - } + public function instagram() + { + if(config_cache('pixelfed.import.instagram.enabled') != true) { + abort(404, 'Feature not enabled'); + } + return view('settings.import.instagram.home'); + } public function instagramStart(Request $request) { diff --git a/app/Http/Controllers/Import/Mastodon.php b/app/Http/Controllers/Import/Mastodon.php index 14aa48f77..243cefc37 100644 --- a/app/Http/Controllers/Import/Mastodon.php +++ b/app/Http/Controllers/Import/Mastodon.php @@ -6,8 +6,11 @@ use Illuminate\Http\Request; trait Mastodon { - public function mastodon() - { - return view('settings.import.mastodon.home'); - } + public function mastodon() + { + if(config_cache('pixelfed.import.instagram.enabled') != true) { + abort(404, 'Feature not enabled'); + } + return view('settings.import.mastodon.home'); + } } diff --git a/app/Http/Controllers/ImportController.php b/app/Http/Controllers/ImportController.php index 9885455e9..4a7a27e74 100644 --- a/app/Http/Controllers/ImportController.php +++ b/app/Http/Controllers/ImportController.php @@ -11,10 +11,6 @@ class ImportController extends Controller public function __construct() { $this->middleware('auth'); - - if(config_cache('pixelfed.import.instagram.enabled') != true) { - abort(404, 'Feature not enabled'); - } } } diff --git a/app/Http/Controllers/InstanceActorController.php b/app/Http/Controllers/InstanceActorController.php index 136a2ede5..52d8a5cc6 100644 --- a/app/Http/Controllers/InstanceActorController.php +++ b/app/Http/Controllers/InstanceActorController.php @@ -12,7 +12,7 @@ class InstanceActorController extends Controller { $res = Cache::rememberForever(InstanceActor::PROFILE_KEY, function() { $res = (new InstanceActor())->first()->getActor(); - return json_encode($res); + return json_encode($res, JSON_UNESCAPED_SLASHES); }); return response($res)->header('Content-Type', 'application/json'); } diff --git a/app/Http/Controllers/PollController.php b/app/Http/Controllers/PollController.php index 13d1f4518..b176e03d3 100644 --- a/app/Http/Controllers/PollController.php +++ b/app/Http/Controllers/PollController.php @@ -11,14 +11,10 @@ use App\Services\FollowerService; class PollController extends Controller { - - public function __construct() - { - abort_if(!config_cache('instance.polls.enabled'), 404); - } - public function getPoll(Request $request, $id) { + abort_if(!config_cache('instance.polls.enabled'), 404); + $poll = Poll::findOrFail($id); $status = Status::findOrFail($poll->status_id); if($status->scope != 'public') { @@ -34,6 +30,8 @@ class PollController extends Controller public function vote(Request $request, $id) { + abort_if(!config_cache('instance.polls.enabled'), 404); + abort_unless($request->user(), 403); $this->validate($request, [ diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index bd96e774e..6a814388a 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -51,11 +51,11 @@ class PublicApiController extends Controller protected function getUserData($user) { - if(!$user) { - return []; - } else { + if(!$user) { + return []; + } else { return AccountService::get($user->profile_id); - } + } } protected function getLikes($status) @@ -94,12 +94,12 @@ class PublicApiController extends Controller $status = Status::whereProfileId($profile->id)->findOrFail($postid); $this->scopeCheck($profile, $status); if(!$request->user()) { - $res = ['status' => StatusService::get($status->id)]; + $res = ['status' => StatusService::get($status->id)]; } else { - $item = new Fractal\Resource\Item($status, new StatusStatelessTransformer()); - $res = [ - 'status' => $this->fractal->createData($item)->toArray(), - ]; + $item = new Fractal\Resource\Item($status, new StatusStatelessTransformer()); + $res = [ + 'status' => $this->fractal->createData($item)->toArray(), + ]; } return response()->json($res); @@ -200,14 +200,14 @@ class PublicApiController extends Controller public function statusLikes(Request $request, $username, $id) { - abort_if(!$request->user(), 404); + abort_if(!$request->user(), 404); $status = Status::findOrFail($id); $this->scopeCheck($status->profile, $status); $page = $request->input('page'); if($page && $page >= 3 && $request->user()->profile_id != $status->profile_id) { - return response()->json([ - 'data' => [] - ]); + return response()->json([ + 'data' => [] + ]); } $likes = $this->getLikes($status); return response()->json([ @@ -217,15 +217,15 @@ class PublicApiController extends Controller public function statusShares(Request $request, $username, $id) { - abort_if(!$request->user(), 404); + abort_if(!$request->user(), 404); $profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail(); $status = Status::whereProfileId($profile->id)->findOrFail($id); $this->scopeCheck($profile, $status); $page = $request->input('page'); if($page && $page >= 3 && $request->user()->profile_id != $status->profile_id) { - return response()->json([ - 'data' => [] - ]); + return response()->json([ + 'data' => [] + ]); } $shares = $this->getShares($status); return response()->json([ @@ -300,7 +300,7 @@ class PublicApiController extends Controller 'scope', 'local' ) - ->where('id', $dir, $id) + ->where('id', $dir, $id) ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) ->whereNotIn('profile_id', $filtered) ->whereLocal(true) @@ -309,7 +309,7 @@ class PublicApiController extends Controller ->limit($limit) ->get() ->map(function($s) use ($user) { - $status = StatusService::get($s->id); + $status = StatusService::getFull($s->id, $user->profile_id); $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); return $status; }); @@ -335,16 +335,21 @@ class PublicApiController extends Controller 'reblogs_count', 'updated_at' ) - ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) + ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) ->whereNotIn('profile_id', $filtered) ->with('profile', 'hashtags', 'mentions') ->whereLocal(true) ->whereScope('public') ->orderBy('id', 'desc') - ->simplePaginate($limit); + ->limit($limit) + ->get() + ->map(function($s) use ($user) { + $status = StatusService::getFull($s->id, $user->profile_id); + $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); + return $status; + }); - $fractal = new Fractal\Resource\Collection($timeline, new StatusTransformer()); - $res = $this->fractal->createData($fractal)->toArray(); + $res = $timeline->toArray(); } return response()->json($res); @@ -389,12 +394,12 @@ class PublicApiController extends Controller }); if($recentFeed == true) { - $key = 'profile:home-timeline-cursor:'.$user->id; - $ttl = now()->addMinutes(30); - $min = Cache::remember($key, $ttl, function() use($pid) { - $res = StatusView::whereProfileId($pid)->orderByDesc('status_id')->first(); - return $res ? $res->status_id : null; - }); + $key = 'profile:home-timeline-cursor:'.$user->id; + $ttl = now()->addMinutes(30); + $min = Cache::remember($key, $ttl, function() use($pid) { + $res = StatusView::whereProfileId($pid)->orderByDesc('status_id')->first(); + return $res ? $res->status_id : null; + }); } $filtered = $user ? UserFilterService::filters($user->profile_id) : []; @@ -403,16 +408,16 @@ class PublicApiController extends Controller $textOnlyReplies = false; if(config('exp.top')) { - $textOnlyPosts = (bool) Redis::zscore('pf:tl:top', $pid); - $textOnlyReplies = (bool) Redis::zscore('pf:tl:replies', $pid); + $textOnlyPosts = (bool) Redis::zscore('pf:tl:top', $pid); + $textOnlyReplies = (bool) Redis::zscore('pf:tl:replies', $pid); - if($textOnlyPosts) { - array_push($types, 'text'); - } + if($textOnlyPosts) { + array_push($types, 'text'); + } } if(config('exp.polls') == true) { - array_push($types, 'poll'); + array_push($types, 'poll'); } if($min || $max) { @@ -438,10 +443,10 @@ class PublicApiController extends Controller 'created_at', 'updated_at' ) - ->whereIn('type', $types) + ->whereIn('type', $types) ->when($textOnlyReplies != true, function($q, $textOnlyReplies) { - return $q->whereNull('in_reply_to_id'); - }) + return $q->whereNull('in_reply_to_id'); + }) ->with('profile', 'hashtags', 'mentions') ->where('id', $dir, $id) ->whereIn('profile_id', $following) @@ -471,10 +476,10 @@ class PublicApiController extends Controller 'created_at', 'updated_at' ) - ->whereIn('type', $types) - ->when(!$textOnlyReplies, function($q, $textOnlyReplies) { - return $q->whereNull('in_reply_to_id'); - }) + ->whereIn('type', $types) + ->when(!$textOnlyReplies, function($q, $textOnlyReplies) { + return $q->whereNull('in_reply_to_id'); + }) ->with('profile', 'hashtags', 'mentions') ->whereIn('profile_id', $following) ->whereNotIn('profile_id', $filtered) @@ -527,7 +532,7 @@ class PublicApiController extends Controller 'scope', 'created_at', ) - ->where('id', $dir, $id) + ->where('id', $dir, $id) ->whereNotIn('profile_id', $filtered) ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) ->whereNotNull('uri') @@ -543,19 +548,19 @@ class PublicApiController extends Controller }); $res = $timeline->toArray(); } else { - $timeline = Status::select( - 'id', - 'uri', - 'type', - 'scope', - 'created_at', - ) - ->whereNotIn('profile_id', $filtered) - ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) - ->whereNotNull('uri') - ->whereScope('public') - ->where('id', '>', $amin) - ->orderBy('created_at', 'desc') + $timeline = Status::select( + 'id', + 'uri', + 'type', + 'scope', + 'created_at', + ) + ->whereNotIn('profile_id', $filtered) + ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) + ->whereNotNull('uri') + ->whereScope('public') + ->where('id', '>', $amin) + ->orderBy('created_at', 'desc') ->limit($limit) ->get() ->map(function($s) use ($user) { @@ -563,7 +568,7 @@ class PublicApiController extends Controller $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); return $status; }); - $res = $timeline->toArray(); + $res = $timeline->toArray(); } return response()->json($res); @@ -605,10 +610,10 @@ class PublicApiController extends Controller return response()->json([]); } if(!$profile->domain && !$profile->user->settings->show_profile_followers) { - return response()->json([]); + return response()->json([]); } if(!$owner && $request->page > 5) { - return []; + return []; } $res = Follower::select('id', 'profile_id', 'following_id') @@ -639,11 +644,11 @@ class PublicApiController extends Controller abort_if($owner == false && $profile->is_private == true && !$profile->followedBy(Auth::user()->profile), 404); if(!$profile->domain) { - abort_if($profile->user->settings->show_profile_following == false && $owner == false, 404); + abort_if($profile->user->settings->show_profile_following == false && $owner == false, 404); } if(!$owner && $request->page > 5) { - return []; + return []; } if($search) { @@ -676,14 +681,15 @@ class PublicApiController extends Controller ]); $user = $request->user(); - $profile = Profile::whereNull('status')->findOrFail($id); + $profile = AccountService::get($id); + abort_if(!$profile, 404); $limit = $request->limit ?? 9; $max_id = $request->max_id; $min_id = $request->min_id; $scope = ['photo', 'photo:album', 'video', 'video:album']; - if($profile->is_private) { + if($profile['locked']) { if(!$user) { return response()->json([]); } @@ -700,7 +706,7 @@ class PublicApiController extends Controller $following = Follower::whereProfileId($pid)->pluck('following_id'); return $following->push($pid)->toArray(); }); - $visibility = true == in_array($profile->id, $following) ? ['public', 'unlisted', 'private'] : ['public', 'unlisted']; + $visibility = true == in_array($profile['id'], $following) ? ['public', 'unlisted', 'private'] : ['public', 'unlisted']; } else { $visibility = ['public', 'unlisted']; } @@ -708,15 +714,7 @@ class PublicApiController extends Controller $dir = $min_id ? '>' : '<'; $id = $min_id ?? $max_id; - $res = Status::select( - 'id', - 'profile_id', - 'type', - 'scope', - 'local', - 'created_at' - ) - ->whereProfileId($profile->id) + $res = Status::whereProfileId($profile['id']) ->whereNull('in_reply_to_id') ->whereNull('reblog_of_id') ->whereIn('type', $scope) @@ -726,18 +724,18 @@ class PublicApiController extends Controller ->orderByDesc('id') ->get() ->map(function($s) use($user) { - try { - $status = StatusService::get($s->id, false); - } catch (\Exception $e) { - $status = false; - } + try { + $status = StatusService::get($s->id, false); + } catch (\Exception $e) { + $status = false; + } if($user && $status) { - $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); + $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); } return $status; }) ->filter(function($s) { - return $s; + return $s; }) ->values(); diff --git a/app/Models/InstanceActor.php b/app/Models/InstanceActor.php index 00eacfe61..4636b10e9 100644 --- a/app/Models/InstanceActor.php +++ b/app/Models/InstanceActor.php @@ -11,7 +11,7 @@ class InstanceActor extends Model const PROFILE_BASE = '/i/actor'; const KEY_ID = '/i/actor#main-key'; - const PROFILE_KEY = 'federation:_v2:instance:actor:profile'; + const PROFILE_KEY = 'federation:_v3:instance:actor:profile'; const PKI_PUBLIC = 'federation:_v1:instance:actor:profile:pki_public'; const PKI_PRIVATE = 'federation:_v1:instance:actor:profile:pki_private'; diff --git a/app/Observers/FollowerObserver.php b/app/Observers/FollowerObserver.php deleted file mode 100644 index afc476eeb..000000000 --- a/app/Observers/FollowerObserver.php +++ /dev/null @@ -1,64 +0,0 @@ -profile_id, $follower->following_id); - } - - /** - * Handle the Follower "updated" event. - * - * @param \App\Models\Follower $follower - * @return void - */ - public function updated(Follower $follower) - { - FollowerService::add($follower->profile_id, $follower->following_id); - } - - /** - * Handle the Follower "deleted" event. - * - * @param \App\Models\Follower $follower - * @return void - */ - public function deleted(Follower $follower) - { - FollowerService::remove($follower->profile_id, $follower->following_id); - } - - /** - * Handle the Follower "restored" event. - * - * @param \App\Models\Follower $follower - * @return void - */ - public function restored(Follower $follower) - { - FollowerService::add($follower->profile_id, $follower->following_id); - } - - /** - * Handle the Follower "force deleted" event. - * - * @param \App\Models\Follower $follower - * @return void - */ - public function forceDeleted(Follower $follower) - { - FollowerService::remove($follower->profile_id, $follower->following_id); - } -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f2baf4c88..a4dfbe27b 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -4,7 +4,6 @@ namespace App\Providers; use App\Observers\{ AvatarObserver, - FollowerObserver, LikeObserver, NotificationObserver, ModLogObserver, @@ -15,7 +14,6 @@ use App\Observers\{ }; use App\{ Avatar, - Follower, Like, Notification, ModLog, @@ -50,7 +48,6 @@ class AppServiceProvider extends ServiceProvider StatusHashtag::observe(StatusHashtagObserver::class); User::observe(UserObserver::class); UserFilter::observe(UserFilterObserver::class); - Follower::observe(FollowerObserver::class); Horizon::auth(function ($request) { return Auth::check() && $request->user()->is_admin; }); diff --git a/app/Services/ActivityPubFetchService.php b/app/Services/ActivityPubFetchService.php index 94e9357a3..c73e96139 100644 --- a/app/Services/ActivityPubFetchService.php +++ b/app/Services/ActivityPubFetchService.php @@ -2,7 +2,7 @@ namespace App\Services; -use Zttp\Zttp; +use Illuminate\Support\Facades\Http; use App\Profile; use App\Util\ActivityPub\Helpers; use App\Util\ActivityPub\HttpSignature; @@ -15,14 +15,13 @@ class ActivityPubFetchService return 0; } - $headers = HttpSignature::instanceActorSign($url, false, [ - 'Accept' => 'application/activity+json, application/json', - 'User-Agent' => '(Pixelfed/'.config('pixelfed.version').'; +'.config('app.url').')' - ]); + $headers = HttpSignature::instanceActorSign($url, false); + $headers['Accept'] = 'application/activity+json, application/json'; + $headers['User-Agent'] = '(Pixelfed/'.config('pixelfed.version').'; +'.config('app.url').')'; - return Zttp::withHeaders($headers) + return Http::withHeaders($headers) ->timeout(30) ->get($url) ->body(); } -} \ No newline at end of file +} diff --git a/app/Services/FollowerService.php b/app/Services/FollowerService.php index eeede53ec..a96773cae 100644 --- a/app/Services/FollowerService.php +++ b/app/Services/FollowerService.php @@ -17,12 +17,14 @@ class FollowerService public static function add($actor, $target) { + RelationshipService::refresh($actor, $target); Redis::zadd(self::FOLLOWING_KEY . $actor, $target, $target); Redis::zadd(self::FOLLOWERS_KEY . $target, $actor, $actor); } public static function remove($actor, $target) { + RelationshipService::refresh($actor, $target); Redis::zrem(self::FOLLOWING_KEY . $actor, $target); Redis::zrem(self::FOLLOWERS_KEY . $target, $actor); Cache::forget('pf:services:follow:audience:' . $actor); diff --git a/app/Services/InstanceService.php b/app/Services/InstanceService.php index 48117d159..c95b6ac25 100644 --- a/app/Services/InstanceService.php +++ b/app/Services/InstanceService.php @@ -7,6 +7,13 @@ use App\Instance; class InstanceService { + public static function getByDomain($domain) + { + return Cache::remember('pf:services:instance:by_domain:'.$domain, 3600, function() use($domain) { + return Instance::whereDomain($domain)->first(); + }); + } + public static function getBannedDomains() { return Cache::remember('instances:banned:domains', now()->addHours(12), function() { diff --git a/app/Services/NotificationService.php b/app/Services/NotificationService.php index 6eaca0301..e84ea9903 100644 --- a/app/Services/NotificationService.php +++ b/app/Services/NotificationService.php @@ -27,7 +27,10 @@ class NotificationService { $ids = self::coldGet($id, $start, $stop); } foreach($ids as $id) { - $res->push(self::getNotification($id)); + $n = self::getNotification($id); + if($n != null) { + $res->push($n); + } } return $res; } @@ -56,7 +59,10 @@ class NotificationService { $res = collect([]); foreach($ids as $id) { - $res->push(self::getNotification($id)); + $n = self::getNotification($id); + if($n != null) { + $res->push($n); + } } return $res->toArray(); } @@ -71,7 +77,10 @@ class NotificationService { $res = collect([]); foreach($ids as $id) { - $res->push(self::getNotification($id)); + $n = self::getNotification($id); + if($n != null) { + $res->push($n); + } } return $res->toArray(); } @@ -129,7 +138,12 @@ class NotificationService { public static function getNotification($id) { return Cache::remember('service:notification:'.$id, now()->addDays(3), function() use($id) { - $n = Notification::with('item')->findOrFail($id); + $n = Notification::with('item')->find($id); + + if(!$n) { + return null; + } + $fractal = new Fractal\Manager(); $fractal->setSerializer(new ArraySerializer()); $resource = new Fractal\Resource\Item($n, new NotificationTransformer()); diff --git a/app/Services/RelationshipService.php b/app/Services/RelationshipService.php new file mode 100644 index 000000000..1237c0eb8 --- /dev/null +++ b/app/Services/RelationshipService.php @@ -0,0 +1,86 @@ + (string) $tid, + 'following' => Follower::whereProfileId($aid)->whereFollowingId($tid)->exists(), + 'followed_by' => Follower::whereProfileId($tid)->whereFollowingId($aid)->exists(), + 'blocking' => UserFilter::whereUserId($aid) + ->whereFilterableType('App\Profile') + ->whereFilterableId($tid) + ->whereFilterType('block') + ->exists(), + 'muting' => UserFilter::whereUserId($aid) + ->whereFilterableType('App\Profile') + ->whereFilterableId($tid) + ->whereFilterType('mute') + ->exists(), + 'muting_notifications' => null, + 'requested' => FollowRequest::whereFollowerId($aid) + ->whereFollowingId($tid) + ->exists(), + 'domain_blocking' => null, + 'showing_reblogs' => null, + 'endorsed' => false + ]; + }); + } + + public static function delete($aid, $tid) + { + return Cache::forget(self::key("a_{$aid}:t_{$tid}")); + } + + public static function refresh($aid, $tid) + { + self::delete($tid, $aid); + self::delete($aid, $tid); + self::get($tid, $aid); + return self::get($aid, $tid); + } + + public static function defaultRelation($tid) + { + return [ + 'id' => (string) $tid, + 'following' => false, + 'followed_by' => false, + 'blocking' => false, + 'muting' => false, + 'muting_notifications' => null, + 'requested' => false, + 'domain_blocking' => null, + 'showing_reblogs' => null, + 'endorsed' => false + ]; + } + + protected static function key($suffix) + { + return self::CACHE_KEY . $suffix; + } +} diff --git a/app/Services/StatusService.php b/app/Services/StatusService.php index 01d287e8d..2b550a734 100644 --- a/app/Services/StatusService.php +++ b/app/Services/StatusService.php @@ -40,6 +40,13 @@ class StatusService { }); } + public static function getFull($id, $pid, $publicOnly = true) + { + $res = self::get($id, $publicOnly); + $res['relationship'] = RelationshipService::get($pid, $res['account']['id']); + return $res; + } + public static function del($id) { $status = self::get($id); diff --git a/app/Transformer/ActivityPub/Verb/Note.php b/app/Transformer/ActivityPub/Verb/Note.php index f58ca6f4b..f63c9cc5e 100644 --- a/app/Transformer/ActivityPub/Verb/Note.php +++ b/app/Transformer/ActivityPub/Verb/Note.php @@ -35,7 +35,7 @@ class Note extends Fractal\TransformerAbstract 'href' => $parent->permalink(), 'name' => $name ]; - $mentions = array_merge($reply, $mentions); + array_push($mentions, $reply); } } diff --git a/app/Transformer/Api/NotificationTransformer.php b/app/Transformer/Api/NotificationTransformer.php index 8a7870e7b..e6f0ca6db 100644 --- a/app/Transformer/Api/NotificationTransformer.php +++ b/app/Transformer/Api/NotificationTransformer.php @@ -2,50 +2,51 @@ namespace App\Transformer\Api; -use App\{ - Notification, - Status -}; +use App\Notification; +use App\Services\AccountService; use App\Services\HashidService; +use App\Services\RelationshipService; +use App\Services\StatusService; use League\Fractal; class NotificationTransformer extends Fractal\TransformerAbstract { - protected $defaultIncludes = [ - 'account', - 'status', - 'relationship', - 'modlog', - 'tagged' - ]; - public function transform(Notification $notification) { - return [ + $res = [ 'id' => (string) $notification->id, 'type' => $this->replaceTypeVerb($notification->action), 'created_at' => (string) $notification->created_at->format('c'), ]; - } - public function includeAccount(Notification $notification) - { - return $this->item($notification->actor, new AccountTransformer()); - } + $n = $notification; - public function includeStatus(Notification $notification) - { - $item = $notification; - if($item->item_id && $item->item_type == 'App\Status') { - $status = Status::with('media')->find($item->item_id); - if($status) { - return $this->item($status, new StatusTransformer()); - } else { - return null; - } - } else { - return null; + if($n->actor_id) { + $res['account'] = AccountService::get($n->actor_id); + $res['relationship'] = RelationshipService::get($n->actor_id, $n->profile_id); } + + if($n->item_id && $n->item_type == 'App\Status') { + $res['status'] = StatusService::get($n->item_id, false); + } + + if($n->item_id && $n->item_type == 'App\ModLog') { + $ml = $n->item; + $res['modlog'] = [ + 'id' => $ml->object_uid, + 'url' => url('/i/admin/users/modlogs/' . $ml->object_uid) + ]; + } + + if($n->item_id && $n->item_type == 'App\MediaTag') { + $ml = $n->item; + $res['tagged'] = [ + 'username' => $ml->tagged_username, + 'post_url' => '/p/'.HashidService::encode($ml->status_id) + ]; + } + + return $res; } public function replaceTypeVerb($verb) @@ -57,56 +58,21 @@ class NotificationTransformer extends Fractal\TransformerAbstract 'reblog' => 'share', 'share' => 'share', 'like' => 'favourite', + 'group:like' => 'favourite', 'comment' => 'comment', 'admin.user.modlog.comment' => 'modlog', 'tagged' => 'tagged', 'group:comment' => 'group:comment', 'story:react' => 'story:react', - 'story:comment' => 'story:comment' + 'story:comment' => 'story:comment', + 'group:join:approved' => 'group:join:approved', + 'group:join:rejected' => 'group:join:rejected' ]; + + if(!isset($verbs[$verb])) { + return $verb; + } + return $verbs[$verb]; } - - public function includeRelationship(Notification $notification) - { - return $this->item($notification->actor, new RelationshipTransformer()); - } - - public function includeModlog(Notification $notification) - { - $n = $notification; - if($n->item_id && $n->item_type == 'App\ModLog') { - $ml = $n->item; - if(!empty($ml)) { - $res = $this->item($ml, function($ml) { - return [ - 'id' => $ml->object_uid, - 'url' => url('/i/admin/users/modlogs/' . $ml->object_uid) - ]; - }); - return $res; - } else { - return null; - } - } else { - return null; - } - } - - public function includeTagged(Notification $notification) - { - $n = $notification; - if($n->item_id && $n->item_type == 'App\MediaTag') { - $ml = $n->item; - $res = $this->item($ml, function($ml) { - return [ - 'username' => $ml->tagged_username, - 'post_url' => '/p/'.HashidService::encode($ml->status_id) - ]; - }); - return $res; - } else { - return null; - } - } } diff --git a/app/Util/ActivityPub/HttpSignature.php b/app/Util/ActivityPub/HttpSignature.php index fff531fcf..792762b10 100644 --- a/app/Util/ActivityPub/HttpSignature.php +++ b/app/Util/ActivityPub/HttpSignature.php @@ -43,7 +43,7 @@ class HttpSignature { $digest = self::_digest($body); } $headers = self::_headersToSign($url, $body ? $digest : false); - $headers = array_unique(array_merge($headers, $addlHeaders)); + $headers = array_merge($headers, $addlHeaders); $stringToSign = self::_headersToSigningString($headers); $signedHeaders = implode(' ', array_map('strtolower', array_keys($headers))); $key = openssl_pkey_get_private($privateKey); @@ -133,7 +133,6 @@ class HttpSignature { 'Date' => $date->format('D, d M Y H:i:s \G\M\T'), 'Host' => parse_url($url, PHP_URL_HOST), 'Accept' => 'application/activity+json, application/json', - 'Content-Type' => 'application/activity+json' ]; if($digest) { diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index fda0a78c5..31b6e89f2 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -455,6 +455,7 @@ class Inbox Cache::forget('profile:follower_count:'.$actor->id); Cache::forget('profile:following_count:'.$target->id); Cache::forget('profile:following_count:'.$actor->id); + FollowerService::add($actor->id, $target->id); } else { $follower = new Follower; @@ -464,6 +465,7 @@ class Inbox $follower->save(); FollowPipeline::dispatch($follower); + FollowerService::add($actor->id, $target->id); // send Accept to remote profile $accept = [ @@ -722,6 +724,7 @@ class Inbox ->whereItemId($following->id) ->whereItemType('App\Profile') ->forceDelete(); + FollowerService::remove($profile->id, $following->id); break; case 'Like': diff --git a/app/Util/Site/Nodeinfo.php b/app/Util/Site/Nodeinfo.php index 36ac72729..fbcc2ee8e 100644 --- a/app/Util/Site/Nodeinfo.php +++ b/app/Util/Site/Nodeinfo.php @@ -10,34 +10,29 @@ class Nodeinfo { public static function get() { - $res = Cache::remember('api:nodeinfo', now()->addMinutes(15), function () { - $activeHalfYear = Cache::remember('api:nodeinfo:ahy', now()->addHours(12), function() { - // todo: replace with last_active_at after July 9, 2021 (96afc3e781) - $count = collect([]); - $likes = Like::select('profile_id')->with('actor')->where('created_at', '>', now()->subMonths(6)->toDateTimeString())->groupBy('profile_id')->get()->filter(function($like) {return $like->actor && $like->actor->domain == null;})->pluck('profile_id')->toArray(); - $count = $count->merge($likes); - $statuses = Status::select('profile_id')->whereLocal(true)->where('created_at', '>', now()->subMonths(6)->toDateTimeString())->groupBy('profile_id')->pluck('profile_id')->toArray(); - $count = $count->merge($statuses); - $profiles = User::select('profile_id', 'last_active_at') - ->whereNotNull('last_active_at') + $res = Cache::remember('api:nodeinfo', 300, function () { + $activeHalfYear = Cache::remember('api:nodeinfo:ahy', 172800, function() { + return User::select('last_active_at') ->where('last_active_at', '>', now()->subMonths(6)) - ->pluck('profile_id') - ->toArray(); - $newProfiles = User::select('profile_id', 'last_active_at', 'created_at') - ->whereNull('last_active_at') - ->where('created_at', '>', now()->subMonths(6)) - ->pluck('profile_id') - ->toArray(); - $count = $count->merge($newProfiles); - $count = $count->merge($profiles); - return $count->unique()->count(); + ->orWhere('created_at', '>', now()->subMonths(6)) + ->count(); }); - $activeMonth = Cache::remember('api:nodeinfo:am', now()->addHours(2), function() { + + $activeMonth = Cache::remember('api:nodeinfo:am', 172800, function() { return User::select('last_active_at') ->where('last_active_at', '>', now()->subMonths(1)) ->orWhere('created_at', '>', now()->subMonths(1)) ->count(); }); + + $users = Cache::remember('api:nodeinfo:users', 43200, function() { + return User::count(); + }); + + $statuses = Cache::remember('api:nodeinfo:statuses', 21600, function() { + return Status::whereLocal(true)->count(); + }); + return [ 'metadata' => [ 'nodeName' => config_cache('app.name'), @@ -59,10 +54,10 @@ class Nodeinfo { 'version' => config('pixelfed.version'), ], 'usage' => [ - 'localPosts' => Status::whereLocal(true)->count(), + 'localPosts' => $statuses, 'localComments' => 0, 'users' => [ - 'total' => User::count(), + 'total' => $users, 'activeHalfyear' => (int) $activeHalfYear, 'activeMonth' => (int) $activeMonth, ], diff --git a/composer.lock b/composer.lock index b8f0deb8f..4c6f047ca 100644 --- a/composer.lock +++ b/composer.lock @@ -129,20 +129,71 @@ "time": "2021-03-11T06:42:03+00:00" }, { - "name": "aws/aws-sdk-php", - "version": "3.185.0", + "name": "aws/aws-crt-php", + "version": "v1.0.2", "source": { "type": "git", - "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "6c919bc226f7ff3fbcbce948f31e618066d02ad0" + "url": "https://github.com/awslabs/aws-crt-php.git", + "reference": "3942776a8c99209908ee0b287746263725685732" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/6c919bc226f7ff3fbcbce948f31e618066d02ad0", - "reference": "6c919bc226f7ff3fbcbce948f31e618066d02ad0", + "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.198.8", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "d235e1ed93a34f0e290589c85cf97dd963a721c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d235e1ed93a34f0e290589c85cf97dd963a721c9", + "reference": "d235e1ed93a34f0e290589c85cf97dd963a721c9", + "shasum": "" + }, + "require": { + "aws/aws-crt-php": "^1.0.2", "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", @@ -214,9 +265,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.185.0" + "source": "https://github.com/aws/aws-sdk-php/tree/3.198.8" }, - "time": "2021-06-23T18:21:07+00:00" + "time": "2021-10-19T18:15:41+00:00" }, { "name": "bacon/bacon-qr-code", @@ -656,24 +707,23 @@ }, { "name": "doctrine/cache", - "version": "1.11.3", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "3bb5588cec00a0268829cc4a518490df6741af9d" + "reference": "4cf401d14df219fa6f38b671f5493449151c9ad8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/3bb5588cec00a0268829cc4a518490df6741af9d", - "reference": "3bb5588cec00a0268829cc4a518490df6741af9d", + "url": "https://api.github.com/repos/doctrine/cache/zipball/4cf401d14df219fa6f38b671f5493449151c9ad8", + "reference": "4cf401d14df219fa6f38b671f5493449151c9ad8", "shasum": "" }, "require": { "php": "~7.1 || ^8.0" }, "conflict": { - "doctrine/common": ">2.2,<2.4", - "psr/cache": ">=3" + "doctrine/common": ">2.2,<2.4" }, "require-dev": { "alcaeus/mongo-php-adapter": "^1.1", @@ -682,8 +732,9 @@ "mongodb/mongodb": "^1.1", "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", "predis/predis": "~1.0", - "psr/cache": "^1.0 || ^2.0", - "symfony/cache": "^4.4 || ^5.2" + "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" @@ -735,7 +786,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/1.11.3" + "source": "https://github.com/doctrine/cache/tree/1.12.1" }, "funding": [ { @@ -751,20 +802,20 @@ "type": "tidelift" } ], - "time": "2021-05-25T09:01:55+00:00" + "time": "2021-07-17T14:39:21+00:00" }, { "name": "doctrine/dbal", - "version": "2.13.2", + "version": "2.13.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4" + "reference": "2411a55a2a628e6d8dd598388ab13474802c7b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/8dd39d2ead4409ce652fd4f02621060f009ea5e4", - "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/2411a55a2a628e6d8dd598388ab13474802c7b6e", + "reference": "2411a55a2a628e6d8dd598388ab13474802c7b6e", "shasum": "" }, "require": { @@ -776,13 +827,14 @@ }, "require-dev": { "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2020.2", - "phpstan/phpstan": "0.12.81", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.5", + "jetbrains/phpstorm-stubs": "2021.1", + "phpstan/phpstan": "0.12.99", + "phpunit/phpunit": "^7.5.20|^8.5|9.5.10", + "psalm/plugin-phpunit": "0.16.1", "squizlabs/php_codesniffer": "3.6.0", "symfony/cache": "^4.4", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "4.6.4" + "vimeo/psalm": "4.10.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -843,7 +895,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.2" + "source": "https://github.com/doctrine/dbal/tree/2.13.4" }, "funding": [ { @@ -859,7 +911,7 @@ "type": "tidelift" } ], - "time": "2021-06-18T21:48:39+00:00" + "time": "2021-10-02T15:59:26+00:00" }, { "name": "doctrine/deprecations", @@ -1634,31 +1686,26 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.0.1", + "version": "v1.0.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" + "reference": "296c015dc30ec4322168c5ad3ee5cc11dae827ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", - "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/296c015dc30ec4322168c5ad3ee5cc11dae827ac", + "reference": "296c015dc30ec4322168c5ad3ee5cc11dae827ac", "shasum": "" }, "require": { - "php": "^7.0|^8.0", - "phpoption/phpoption": "^1.7.3" + "php": "^7.0 || ^8.0", + "phpoption/phpoption": "^1.8" }, "require-dev": { - "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { "psr-4": { "GrahamCampbell\\ResultType\\": "src/" @@ -1671,7 +1718,7 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk" } ], "description": "An Implementation Of The Result Type", @@ -1684,7 +1731,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.3" }, "funding": [ { @@ -1696,7 +1743,7 @@ "type": "tidelift" } ], - "time": "2020-04-13T13:17:36+00:00" + "time": "2021-10-17T19:48:54+00:00" }, { "name": "guzzlehttp/guzzle", @@ -1771,16 +1818,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.4.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" + "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", - "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/136a635e2b4a49b9d79e9c8fee267ffb257fdba0", + "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0", "shasum": "" }, "require": { @@ -1792,7 +1839,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -1808,10 +1855,25 @@ "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", @@ -1820,22 +1882,36 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.1" + "source": "https://github.com/guzzle/promises/tree/1.5.0" }, - "time": "2021-03-07T09:25:29+00:00" + "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-07T13:05:22+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.8.2", + "version": "1.8.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91" + "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", + "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", "shasum": "" }, "require": { @@ -1872,13 +1948,34 @@ "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" } ], @@ -1895,32 +1992,46 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.2" + "source": "https://github.com/guzzle/psr7/tree/1.8.3" }, - "time": "2021-04-26T09:17:50+00:00" + "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": "2021-10-05T13:56:00+00:00" }, { "name": "intervention/image", - "version": "2.5.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e" + "reference": "9a8cc99d30415ec0b3f7649e1647d03a55698545" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", - "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", + "url": "https://api.github.com/repos/Intervention/image/zipball/9a8cc99d30415ec0b3f7649e1647d03a55698545", + "reference": "9a8cc99d30415ec0b3f7649e1647d03a55698545", "shasum": "" }, "require": { "ext-fileinfo": "*", - "guzzlehttp/psr7": "~1.1", + "guzzlehttp/psr7": "~1.1 || ^2.0", "php": ">=5.4.0" }, "require-dev": { "mockery/mockery": "~0.9.2", - "phpunit/phpunit": "^4.8 || ^5.7" + "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" }, "suggest": { "ext-gd": "to use GD library based image processing.", @@ -1969,22 +2080,32 @@ ], "support": { "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/master" + "source": "https://github.com/Intervention/image/tree/2.7.0" }, - "time": "2019-11-02T09:15:47+00:00" + "funding": [ + { + "url": "https://www.paypal.me/interventionphp", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + } + ], + "time": "2021-10-03T14:17:12+00:00" }, { "name": "jaybizzle/crawler-detect", - "version": "v1.2.106", + "version": "v1.2.107", "source": { "type": "git", "url": "https://github.com/JayBizzle/Crawler-Detect.git", - "reference": "78bf6792cbf9c569dc0bf2465481978fd2ed0de9" + "reference": "62b9055b555be9e1479d7c37515d7c58975c2aa4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/78bf6792cbf9c569dc0bf2465481978fd2ed0de9", - "reference": "78bf6792cbf9c569dc0bf2465481978fd2ed0de9", + "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/62b9055b555be9e1479d7c37515d7c58975c2aa4", + "reference": "62b9055b555be9e1479d7c37515d7c58975c2aa4", "shasum": "" }, "require": { @@ -2021,9 +2142,9 @@ ], "support": { "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", - "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.106" + "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.107" }, - "time": "2021-05-24T20:30:32+00:00" + "time": "2021-10-12T16:06:07+00:00" }, { "name": "jenssegers/agent", @@ -2110,16 +2231,16 @@ }, { "name": "laravel/framework", - "version": "v8.48.1", + "version": "v8.65.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "edc138060a13c9e5f15c005fad5f6a39b4ccf5fa" + "reference": "6db59afadca28dfdb2f719e7d79f93885ede17e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/edc138060a13c9e5f15c005fad5f6a39b4ccf5fa", - "reference": "edc138060a13c9e5f15c005fad5f6a39b4ccf5fa", + "url": "https://api.github.com/repos/laravel/framework/zipball/6db59afadca28dfdb2f719e7d79f93885ede17e4", + "reference": "6db59afadca28dfdb2f719e7d79f93885ede17e4", "shasum": "" }, "require": { @@ -2129,15 +2250,17 @@ "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "league/commonmark": "^1.3", + "laravel/serializable-closure": "^1.0", + "league/commonmark": "^1.3|^2.0.2", "league/flysystem": "^1.1", "monolog/monolog": "^2.0", "nesbot/carbon": "^2.31", "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.0", + "ramsey/uuid": "^4.2.2", "swiftmailer/swiftmailer": "^6.0", "symfony/console": "^5.1.4", "symfony/error-handler": "^5.1.4", @@ -2156,7 +2279,8 @@ "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" }, "replace": { "illuminate/auth": "self.version", @@ -2192,22 +2316,22 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.155", - "doctrine/dbal": "^2.6|^3.0", + "aws/aws-sdk-php": "^3.189.0", + "doctrine/dbal": "^2.13.3|^3.1.2", "filp/whoops": "^2.8", "guzzlehttp/guzzle": "^6.5.5|^7.0.1", "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.4.2", + "mockery/mockery": "^1.4.4", "orchestra/testbench-core": "^6.23", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.5.8|^9.3.3", + "phpunit/phpunit": "^8.5.19|^9.5.8", "predis/predis": "^1.1.2", "symfony/cache": "^5.1.4" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.189.0).", "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.2).", "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.", @@ -2221,10 +2345,10 @@ "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.2).", + "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.8|^9.3.3).", + "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.2).", "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).", @@ -2274,7 +2398,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-06-23T13:41:59+00:00" + "time": "2021-10-19T13:59:41+00:00" }, { "name": "laravel/helpers", @@ -2334,16 +2458,16 @@ }, { "name": "laravel/horizon", - "version": "v5.7.9", + "version": "v5.7.14", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "50dc53b105ec612cf1a87e89fffd21cc0a43003c" + "reference": "640df7c65c464f83cda66781636d816a0992b0b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/50dc53b105ec612cf1a87e89fffd21cc0a43003c", - "reference": "50dc53b105ec612cf1a87e89fffd21cc0a43003c", + "url": "https://api.github.com/repos/laravel/horizon/zipball/640df7c65c464f83cda66781636d816a0992b0b1", + "reference": "640df7c65c464f83cda66781636d816a0992b0b1", "shasum": "" }, "require": { @@ -2405,22 +2529,22 @@ ], "support": { "issues": "https://github.com/laravel/horizon/issues", - "source": "https://github.com/laravel/horizon/tree/v5.7.9" + "source": "https://github.com/laravel/horizon/tree/v5.7.14" }, - "time": "2021-06-08T14:17:37+00:00" + "time": "2021-10-12T15:20:07+00:00" }, { "name": "laravel/passport", - "version": "v10.1.3", + "version": "v10.1.4", "source": { "type": "git", "url": "https://github.com/laravel/passport.git", - "reference": "a5e4471dd99b7638ab5ca3ecab6cd87cf37eb410" + "reference": "c889d9c464fea409dffe283e9c4e7054ef7aca6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/passport/zipball/a5e4471dd99b7638ab5ca3ecab6cd87cf37eb410", - "reference": "a5e4471dd99b7638ab5ca3ecab6cd87cf37eb410", + "url": "https://api.github.com/repos/laravel/passport/zipball/c889d9c464fea409dffe283e9c4e7054ef7aca6f", + "reference": "c889d9c464fea409dffe283e9c4e7054ef7aca6f", "shasum": "" }, "require": { @@ -2484,20 +2608,79 @@ "issues": "https://github.com/laravel/passport/issues", "source": "https://github.com/laravel/passport" }, - "time": "2021-04-06T14:30:45+00:00" + "time": "2021-10-19T15:25:10+00:00" }, { - "name": "laravel/tinker", - "version": "v2.6.1", + "name": "laravel/serializable-closure", + "version": "v1.0.3", "source": { "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "04ad32c1a3328081097a181875733fa51f402083" + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "6cfc678735f22ccedad761b8cae2bab14c3d8e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/04ad32c1a3328081097a181875733fa51f402083", - "reference": "04ad32c1a3328081097a181875733fa51f402083", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/6cfc678735f22ccedad761b8cae2bab14c3d8e5b", + "reference": "6cfc678735f22ccedad761b8cae2bab14c3d8e5b", + "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": "2021-10-07T14:00:57+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.6.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "c808a7227f97ecfd9219fbf913bad842ea854ddc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/c808a7227f97ecfd9219fbf913bad842ea854ddc", + "reference": "c808a7227f97ecfd9219fbf913bad842ea854ddc", "shasum": "" }, "require": { @@ -2550,9 +2733,9 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.6.1" + "source": "https://github.com/laravel/tinker/tree/v2.6.2" }, - "time": "2021-03-02T16:53:12+00:00" + "time": "2021-09-28T15:47:34+00:00" }, { "name": "laravel/ui", @@ -2615,16 +2798,16 @@ }, { "name": "lcobucci/jwt", - "version": "3.4.5", + "version": "3.4.6", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "511629a54465e89a31d3d7e4cf0935feab8b14c1" + "reference": "3ef8657a78278dfeae7707d51747251db4176240" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/511629a54465e89a31d3d7e4cf0935feab8b14c1", - "reference": "511629a54465e89a31d3d7e4cf0935feab8b14c1", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/3ef8657a78278dfeae7707d51747251db4176240", + "reference": "3ef8657a78278dfeae7707d51747251db4176240", "shasum": "" }, "require": { @@ -2676,7 +2859,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/3.4.5" + "source": "https://github.com/lcobucci/jwt/tree/3.4.6" }, "funding": [ { @@ -2688,20 +2871,20 @@ "type": "patreon" } ], - "time": "2021-02-16T09:40:01+00:00" + "time": "2021-09-28T19:18:28+00:00" }, { "name": "league/commonmark", - "version": "1.6.4", + "version": "1.6.6", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "c3c8b7217c52572fb42aaf84211abccf75a151b2" + "reference": "c4228d11e30d7493c6836d20872f9582d8ba6dcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c3c8b7217c52572fb42aaf84211abccf75a151b2", - "reference": "c3c8b7217c52572fb42aaf84211abccf75a151b2", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c4228d11e30d7493c6836d20872f9582d8ba6dcf", + "reference": "c4228d11e30d7493c6836d20872f9582d8ba6dcf", "shasum": "" }, "require": { @@ -2789,7 +2972,7 @@ "type": "tidelift" } ], - "time": "2021-06-19T20:08:14+00:00" + "time": "2021-07-17T17:13:23+00:00" }, { "name": "league/event", @@ -2847,16 +3030,16 @@ }, { "name": "league/flysystem", - "version": "1.1.4", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32" + "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3ad69181b8afed2c9edf7be5a2918144ff4ea32", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/18634df356bfd4119fe3d6156bdb990c414c14ea", + "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea", "shasum": "" }, "require": { @@ -2929,7 +3112,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.4" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.5" }, "funding": [ { @@ -2937,7 +3120,7 @@ "type": "other" } ], - "time": "2021-06-23T21:56:05+00:00" + "time": "2021-08-17T13:49:42+00:00" }, { "name": "league/flysystem-aws-s3-v3", @@ -3101,16 +3284,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" + "reference": "b38b25d7b372e9fddb00335400467b223349fd7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b38b25d7b372e9fddb00335400467b223349fd7e", + "reference": "b38b25d7b372e9fddb00335400467b223349fd7e", "shasum": "" }, "require": { @@ -3141,7 +3324,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.7.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.8.0" }, "funding": [ { @@ -3153,27 +3336,27 @@ "type": "tidelift" } ], - "time": "2021-01-18T20:58:21+00:00" + "time": "2021-09-25T08:23:19+00:00" }, { "name": "league/oauth2-server", - "version": "8.3.1", + "version": "8.3.3", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-server.git", - "reference": "97dbc97b3b1bc4e613b70cb5e0e07d4b2d9372cc" + "reference": "f5698a3893eda9a17bcd48636990281e7ca77b2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/97dbc97b3b1bc4e613b70cb5e0e07d4b2d9372cc", - "reference": "97dbc97b3b1bc4e613b70cb5e0e07d4b2d9372cc", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/f5698a3893eda9a17bcd48636990281e7ca77b2a", + "reference": "f5698a3893eda9a17bcd48636990281e7ca77b2a", "shasum": "" }, "require": { "defuse/php-encryption": "^2.2.1", "ext-json": "*", "ext-openssl": "*", - "lcobucci/jwt": "^3.4 || ~4.0.0", + "lcobucci/jwt": "^3.4.6 || ^4.0.4", "league/event": "^2.2", "php": "^7.2 || ^8.0", "psr/http-message": "^1.0.1" @@ -3232,7 +3415,7 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-server/issues", - "source": "https://github.com/thephpleague/oauth2-server/tree/8.3.1" + "source": "https://github.com/thephpleague/oauth2-server/tree/8.3.3" }, "funding": [ { @@ -3240,7 +3423,7 @@ "type": "github" } ], - "time": "2021-06-04T08:28:35+00:00" + "time": "2021-10-11T20:41:49+00:00" }, { "name": "mobiledetect/mobiledetectlib", @@ -3306,24 +3489,24 @@ }, { "name": "monolog/monolog", - "version": "2.2.0", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", - "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", "shasum": "" }, "require": { "php": ">=7.2", - "psr/log": "^1.0.1" + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0" + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" }, "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", @@ -3331,14 +3514,14 @@ "elasticsearch/elasticsearch": "^7", "graylog2/gelf-php": "^1.4.2", "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4", + "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.3", "phpspec/prophecy": "^1.6.1", - "phpstan/phpstan": "^0.12.59", + "phpstan/phpstan": "^0.12.91", "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90 <7.0.1", + "ruflin/elastica": ">=0.90@dev", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { @@ -3346,8 +3529,11 @@ "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", @@ -3386,7 +3572,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.2.0" + "source": "https://github.com/Seldaek/monolog/tree/2.3.5" }, "funding": [ { @@ -3398,7 +3584,7 @@ "type": "tidelift" } ], - "time": "2020-12-14T13:15:25+00:00" + "time": "2021-10-01T21:08:31+00:00" }, { "name": "mtdowling/jmespath.php", @@ -3463,27 +3649,28 @@ }, { "name": "nesbot/carbon", - "version": "2.49.0", + "version": "2.53.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "93d9db91c0235c486875d22f1e08b50bdf3e6eee" + "reference": "f4655858a784988f880c1b8c7feabbf02dfdf045" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/93d9db91c0235c486875d22f1e08b50bdf3e6eee", - "reference": "93d9db91c0235c486875d22f1e08b50bdf3e6eee", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f4655858a784988f880c1b8c7feabbf02dfdf045", + "reference": "f4655858a784988f880c1b8c7feabbf02dfdf045", "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" }, "require-dev": { "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", @@ -3497,8 +3684,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", - "dev-3.x": "3.x-dev" + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" }, "laravel": { "providers": [ @@ -3524,15 +3711,15 @@ { "name": "Brian Nesbitt", "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "homepage": "https://markido.com" }, { "name": "kylekatarnls", - "homepage": "http://github.com/kylekatarnls" + "homepage": "https://github.com/kylekatarnls" } ], "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "http://carbon.nesbot.com", + "homepage": "https://carbon.nesbot.com", "keywords": [ "date", "datetime", @@ -3552,7 +3739,7 @@ "type": "tidelift" } ], - "time": "2021-06-02T07:31:40+00:00" + "time": "2021-09-06T09:29:23+00:00" }, { "name": "neutron/temporary-filesystem", @@ -3600,16 +3787,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.10.5", + "version": "v4.13.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" + "reference": "50953a2691a922aa1769461637869a0a2faa3f53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50953a2691a922aa1769461637869a0a2faa3f53", + "reference": "50953a2691a922aa1769461637869a0a2faa3f53", "shasum": "" }, "require": { @@ -3650,22 +3837,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.0" }, - "time": "2021-05-03T19:11:20+00:00" + "time": "2021-09-20T12:20:58+00:00" }, { "name": "nyholm/psr7", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/Nyholm/psr7.git", - "reference": "23ae1f00fbc6a886cbe3062ca682391b9cc7c37b" + "reference": "2212385b47153ea71b1c1b1374f8cb5e4f7892ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/23ae1f00fbc6a886cbe3062ca682391b9cc7c37b", - "reference": "23ae1f00fbc6a886cbe3062ca682391b9cc7c37b", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/2212385b47153ea71b1c1b1374f8cb5e4f7892ec", + "reference": "2212385b47153ea71b1c1b1374f8cb5e4f7892ec", "shasum": "" }, "require": { @@ -3679,7 +3866,7 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "http-interop/http-factory-tests": "^0.8", + "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" @@ -3717,7 +3904,7 @@ ], "support": { "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.4.0" + "source": "https://github.com/Nyholm/psr7/tree/1.4.1" }, "funding": [ { @@ -3729,7 +3916,7 @@ "type": "github" } ], - "time": "2021-02-18T15:41:32+00:00" + "time": "2021-07-02T08:32:20+00:00" }, { "name": "opis/closure", @@ -3915,16 +4102,16 @@ }, { "name": "pbmedia/laravel-ffmpeg", - "version": "7.5.11", + "version": "7.5.12", "source": { "type": "git", "url": "https://github.com/protonemedia/laravel-ffmpeg.git", - "reference": "95b75f41edce12f513df12928b10b8f6949ffe56" + "reference": "c3c0e4297277adda9bc2fa00aa6c39489d7d45e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/protonemedia/laravel-ffmpeg/zipball/95b75f41edce12f513df12928b10b8f6949ffe56", - "reference": "95b75f41edce12f513df12928b10b8f6949ffe56", + "url": "https://api.github.com/repos/protonemedia/laravel-ffmpeg/zipball/c3c0e4297277adda9bc2fa00aa6c39489d7d45e8", + "reference": "c3c0e4297277adda9bc2fa00aa6c39489d7d45e8", "shasum": "" }, "require": { @@ -3988,7 +4175,7 @@ ], "support": { "issues": "https://github.com/protonemedia/laravel-ffmpeg/issues", - "source": "https://github.com/protonemedia/laravel-ffmpeg/tree/7.5.11" + "source": "https://github.com/protonemedia/laravel-ffmpeg/tree/7.5.12" }, "funding": [ { @@ -3996,7 +4183,7 @@ "type": "github" } ], - "time": "2021-04-25T20:47:01+00:00" + "time": "2021-07-05T20:42:13+00:00" }, { "name": "php-ffmpeg/php-ffmpeg", @@ -4142,29 +4329,29 @@ }, { "name": "phpoption/phpoption", - "version": "1.7.5", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" + "reference": "5455cb38aed4523f99977c4a12ef19da4bfe2a28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/5455cb38aed4523f99977c4a12ef19da4bfe2a28", + "reference": "5455cb38aed4523f99977c4a12ef19da4bfe2a28", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0" + "php": "^7.0 || ^8.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^6.5.14 || ^7.0.20 || ^8.5.19 || ^9.5.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7-dev" + "dev-master": "1.8-dev" } }, "autoload": { @@ -4183,7 +4370,7 @@ }, { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk" } ], "description": "Option Type for PHP", @@ -4195,7 +4382,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" + "source": "https://github.com/schmittjoh/php-option/tree/1.8.0" }, "funding": [ { @@ -4207,20 +4394,20 @@ "type": "tidelift" } ], - "time": "2020-07-20T17:29:33+00:00" + "time": "2021-08-28T21:27:29+00:00" }, { "name": "phpseclib/phpseclib", - "version": "2.0.32", + "version": "2.0.33", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "f5c4c19880d45d0be3e7d24ae8ac434844a898cd" + "reference": "fb53b7889497ec7c1362c94e61d8127ac67ea094" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/f5c4c19880d45d0be3e7d24ae8ac434844a898cd", - "reference": "f5c4c19880d45d0be3e7d24ae8ac434844a898cd", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/fb53b7889497ec7c1362c94e61d8127ac67ea094", + "reference": "fb53b7889497ec7c1362c94e61d8127ac67ea094", "shasum": "" }, "require": { @@ -4300,7 +4487,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.32" + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.33" }, "funding": [ { @@ -4316,7 +4503,7 @@ "type": "tidelift" } ], - "time": "2021-06-12T12:12:59+00:00" + "time": "2021-08-16T04:20:12+00:00" }, { "name": "pixelfed/fractal", @@ -4547,16 +4734,16 @@ }, { "name": "predis/predis", - "version": "v1.1.7", + "version": "v1.1.9", "source": { "type": "git", "url": "https://github.com/predis/predis.git", - "reference": "b240daa106d4e02f0c5b7079b41e31ddf66fddf8" + "reference": "c50c3393bb9f47fa012d0cdfb727a266b0818259" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/b240daa106d4e02f0c5b7079b41e31ddf66fddf8", - "reference": "b240daa106d4e02f0c5b7079b41e31ddf66fddf8", + "url": "https://api.github.com/repos/predis/predis/zipball/c50c3393bb9f47fa012d0cdfb727a266b0818259", + "reference": "c50c3393bb9f47fa012d0cdfb727a266b0818259", "shasum": "" }, "require": { @@ -4601,7 +4788,7 @@ ], "support": { "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v1.1.7" + "source": "https://github.com/predis/predis/tree/v1.1.9" }, "funding": [ { @@ -4609,7 +4796,7 @@ "type": "github" } ], - "time": "2021-04-04T19:34:46+00:00" + "time": "2021-10-05T19:02:38+00:00" }, { "name": "psr/cache", @@ -4969,16 +5156,16 @@ }, { "name": "psy/psysh", - "version": "v0.10.8", + "version": "v0.10.9", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "e4573f47750dd6c92dca5aee543fa77513cbd8d3" + "reference": "01281336c4ae557fe4a994544f30d3a1bc204375" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e4573f47750dd6c92dca5aee543fa77513cbd8d3", - "reference": "e4573f47750dd6c92dca5aee543fa77513cbd8d3", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/01281336c4ae557fe4a994544f30d3a1bc204375", + "reference": "01281336c4ae557fe4a994544f30d3a1bc204375", "shasum": "" }, "require": { @@ -5038,9 +5225,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.10.8" + "source": "https://github.com/bobthecow/psysh/tree/v0.10.9" }, - "time": "2021-04-10T16:23:39+00:00" + "time": "2021-10-10T13:37:39+00:00" }, { "name": "ralouphie/getallheaders", @@ -5088,20 +5275,21 @@ }, { "name": "ramsey/collection", - "version": "1.1.3", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", "shasum": "" }, "require": { - "php": "^7.2 || ^8" + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" }, "require-dev": { "captainhook/captainhook": "^5.3", @@ -5111,6 +5299,7 @@ "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", @@ -5138,7 +5327,7 @@ "homepage": "https://benramsey.com" } ], - "description": "A PHP 7.2+ library for representing and manipulating collections.", + "description": "A PHP library for representing and manipulating collections.", "keywords": [ "array", "collection", @@ -5149,7 +5338,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.1.3" + "source": "https://github.com/ramsey/collection/tree/1.2.2" }, "funding": [ { @@ -5161,53 +5350,54 @@ "type": "tidelift" } ], - "time": "2021-01-21T17:40:04+00:00" + "time": "2021-10-10T03:01:02+00:00" }, { "name": "ramsey/uuid", - "version": "4.1.1", + "version": "4.2.3", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "cd4032040a750077205918c86049aa0f43d22947" + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", - "reference": "cd4032040a750077205918c86049aa0f43d22947", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", "shasum": "" }, "require": { "brick/math": "^0.8 || ^0.9", "ext-json": "*", - "php": "^7.2 || ^8", + "php": "^7.2 || ^8.0", "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8" + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php80": "^1.14" }, "replace": { "rhumsaa/uuid": "self.version" }, "require-dev": { - "codeception/aspect-mock": "^3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "doctrine/annotations": "^1.8", - "goaop/framework": "^2", + "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-mock/php-mock-phpunit": "^2.5", "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^0.17.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", - "psy/psysh": "^0.10.0", - "slevomat/coding-standard": "^6.0", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "3.9.4" + "vimeo/psalm": "^4.9" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", @@ -5220,7 +5410,10 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-main": "4.x-dev" + }, + "captainhook": { + "force-install": true } }, "autoload": { @@ -5236,7 +5429,6 @@ "MIT" ], "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "homepage": "https://github.com/ramsey/uuid", "keywords": [ "guid", "identifier", @@ -5244,16 +5436,19 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "rss": "https://github.com/ramsey/uuid/releases.atom", - "source": "https://github.com/ramsey/uuid" + "source": "https://github.com/ramsey/uuid/tree/4.2.3" }, "funding": [ { "url": "https://github.com/ramsey", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" } ], - "time": "2020-08-18T17:17:46+00:00" + "time": "2021-09-25T23:10:38+00:00" }, { "name": "spatie/db-dumper", @@ -5317,22 +5512,22 @@ }, { "name": "spatie/image-optimizer", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/spatie/image-optimizer.git", - "reference": "c22202fdd57856ed18a79cfab522653291a6e96a" + "reference": "1b3585c3da2cc8872141fce40fbd17e07e6655d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/c22202fdd57856ed18a79cfab522653291a6e96a", - "reference": "c22202fdd57856ed18a79cfab522653291a6e96a", + "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/1b3585c3da2cc8872141fce40fbd17e07e6655d1", + "reference": "1b3585c3da2cc8872141fce40fbd17e07e6655d1", "shasum": "" }, "require": { "ext-fileinfo": "*", "php": "^7.2|^8.0", - "psr/log": "^1.0", + "psr/log": "^1.0 | ^2.0 | ^3.0", "symfony/process": "^4.2|^5.0" }, "require-dev": { @@ -5365,22 +5560,22 @@ ], "support": { "issues": "https://github.com/spatie/image-optimizer/issues", - "source": "https://github.com/spatie/image-optimizer/tree/1.4.0" + "source": "https://github.com/spatie/image-optimizer/tree/1.5.0" }, - "time": "2021-04-22T06:17:27+00:00" + "time": "2021-10-11T15:44:16+00:00" }, { "name": "spatie/laravel-backup", - "version": "6.16.0", + "version": "6.16.5", "source": { "type": "git", "url": "https://github.com/spatie/laravel-backup.git", - "reference": "6b2229a07d92c2bb146ad9c5223fc32e9d74830c" + "reference": "332fae80b12cacb9e4161824ba195d984b28c8fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/6b2229a07d92c2bb146ad9c5223fc32e9d74830c", - "reference": "6b2229a07d92c2bb146ad9c5223fc32e9d74830c", + "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/332fae80b12cacb9e4161824ba195d984b28c8fb", + "reference": "332fae80b12cacb9e4161824ba195d984b28c8fb", "shasum": "" }, "require": { @@ -5445,7 +5640,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-backup/issues", - "source": "https://github.com/spatie/laravel-backup/tree/6.16.0" + "source": "https://github.com/spatie/laravel-backup/tree/6.16.5" }, "funding": [ { @@ -5457,7 +5652,7 @@ "type": "other" } ], - "time": "2021-04-15T09:31:32+00:00" + "time": "2021-09-12T10:04:18+00:00" }, { "name": "spatie/laravel-image-optimizer", @@ -5646,16 +5841,16 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v6.2.7", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933" + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/15f7faf8508e04471f666633addacf54c0ab5933", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", "shasum": "" }, "require": { @@ -5667,7 +5862,7 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/phpunit-bridge": "^4.4|^5.4" }, "suggest": { "ext-intl": "Needed to support internationalized email addresses" @@ -5705,7 +5900,7 @@ ], "support": { "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.7" + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" }, "funding": [ { @@ -5717,20 +5912,20 @@ "type": "tidelift" } ], - "time": "2021-03-09T12:30:35+00:00" + "time": "2021-10-18T15:26:12+00:00" }, { "name": "symfony/console", - "version": "v5.3.2", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1" + "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/649730483885ff2ca99ca0560ef0e5f6b03f2ac1", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1", + "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a", + "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a", "shasum": "" }, "require": { @@ -5738,11 +5933,12 @@ "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2", "symfony/string": "^5.1" }, "conflict": { + "psr/log": ">=3", "symfony/dependency-injection": "<4.4", "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", @@ -5750,10 +5946,10 @@ "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/event-dispatcher": "^4.4|^5.0", @@ -5799,7 +5995,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.2" + "source": "https://github.com/symfony/console/tree/v5.3.7" }, "funding": [ { @@ -5815,24 +6011,25 @@ "type": "tidelift" } ], - "time": "2021-06-12T09:42:48+00:00" + "time": "2021-08-25T20:02:16+00:00" }, { "name": "symfony/css-selector", - "version": "v5.3.0", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814" + "reference": "7fb120adc7f600a59027775b224c13a33530dd90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", + "reference": "7fb120adc7f600a59027775b224c13a33530dd90", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -5864,7 +6061,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.3.0" + "source": "https://github.com/symfony/css-selector/tree/v5.3.4" }, "funding": [ { @@ -5880,7 +6077,7 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:40:38+00:00" + "time": "2021-07-21T12:38:00+00:00" }, { "name": "symfony/deprecation-contracts", @@ -5951,22 +6148,21 @@ }, { "name": "symfony/error-handler", - "version": "v5.3.0", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2" + "reference": "3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0e6768b8c0dcef26df087df2bbbaa143867a59b2", - "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321", + "reference": "3bc60d0fba00ae8d1eaa9eb5ab11a2bbdd1fc321", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/log": "^1.0", - "symfony/polyfill-php80": "^1.15", + "psr/log": "^1|^2|^3", "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { @@ -6000,7 +6196,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.3.0" + "source": "https://github.com/symfony/error-handler/tree/v5.3.7" }, "funding": [ { @@ -6016,27 +6212,27 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-08-28T15:07:08+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.3.0", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce" + "reference": "ce7b20d69c66a20939d8952b617506a44d102130" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67a5f354afa8e2f231081b3fa11a5912f933c3ce", - "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ce7b20d69c66a20939d8952b617506a44d102130", + "reference": "ce7b20d69c66a20939d8952b617506a44d102130", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "symfony/dependency-injection": "<4.4" @@ -6046,7 +6242,7 @@ "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2|^3", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/error-handler": "^4.4|^5.0", @@ -6085,7 +6281,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.3.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.7" }, "funding": [ { @@ -6101,7 +6297,7 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -6184,21 +6380,22 @@ }, { "name": "symfony/filesystem", - "version": "v5.3.0", + "version": "v5.3.4", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "348116319d7fb7d1faa781d26a48922428013eb2" + "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/348116319d7fb7d1faa781d26a48922428013eb2", - "reference": "348116319d7fb7d1faa781d26a48922428013eb2", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/343f4fe324383ca46792cae728a3b6e2f708fb32", + "reference": "343f4fe324383ca46792cae728a3b6e2f708fb32", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -6226,7 +6423,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.3.0" + "source": "https://github.com/symfony/filesystem/tree/v5.3.4" }, "funding": [ { @@ -6242,24 +6439,25 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-07-21T12:40:44+00:00" }, { "name": "symfony/finder", - "version": "v5.3.0", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6" + "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", + "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93", + "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -6287,7 +6485,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.3.0" + "source": "https://github.com/symfony/finder/tree/v5.3.7" }, "funding": [ { @@ -6303,27 +6501,27 @@ "type": "tidelift" } ], - "time": "2021-05-26T12:52:38+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.3.2", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "7b6dd714d95106b831aaa7f3c9c612ab886516bd" + "reference": "e36c8e5502b4f3f0190c675f1c1f1248a64f04e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7b6dd714d95106b831aaa7f3c9c612ab886516bd", - "reference": "7b6dd714d95106b831aaa7f3c9c612ab886516bd", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e36c8e5502b4f3f0190c675f1c1f1248a64f04e5", + "reference": "e36c8e5502b4f3f0190c675f1c1f1248a64f04e5", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "require-dev": { "predis/predis": "~1.0", @@ -6360,7 +6558,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.3.2" + "source": "https://github.com/symfony/http-foundation/tree/v5.3.7" }, "funding": [ { @@ -6376,7 +6574,7 @@ "type": "tidelift" } ], - "time": "2021-06-12T10:15:17+00:00" + "time": "2021-08-27T11:20:35+00:00" }, { "name": "symfony/http-kernel", @@ -6496,16 +6694,16 @@ }, { "name": "symfony/mime", - "version": "v5.3.2", + "version": "v5.3.8", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "47dd7912152b82d0d4c8d9040dbc93d6232d472a" + "reference": "a756033d0a7e53db389618653ae991eba5a19a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/47dd7912152b82d0d4c8d9040dbc93d6232d472a", - "reference": "47dd7912152b82d0d4c8d9040dbc93d6232d472a", + "url": "https://api.github.com/repos/symfony/mime/zipball/a756033d0a7e53db389618653ae991eba5a19a11", + "reference": "a756033d0a7e53db389618653ae991eba5a19a11", "shasum": "" }, "require": { @@ -6513,7 +6711,7 @@ "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "egulias/email-validator": "~3.0.0", @@ -6559,7 +6757,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.3.2" + "source": "https://github.com/symfony/mime/tree/v5.3.8" }, "funding": [ { @@ -6575,7 +6773,7 @@ "type": "tidelift" } ], - "time": "2021-06-09T10:58:01+00:00" + "time": "2021-09-10T12:30:38+00:00" }, { "name": "symfony/polyfill-ctype", @@ -6738,16 +6936,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab" + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", "shasum": "" }, "require": { @@ -6799,7 +6997,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" }, "funding": [ { @@ -6815,7 +7013,7 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-intl-idn", @@ -6990,16 +7188,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", "shasum": "" }, "require": { @@ -7050,7 +7248,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" }, "funding": [ { @@ -7066,7 +7264,7 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { "name": "symfony/polyfill-php72", @@ -7225,16 +7423,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", "shasum": "" }, "require": { @@ -7288,7 +7486,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" }, "funding": [ { @@ -7304,25 +7502,104 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-07-28T13:41:28+00:00" }, { - "name": "symfony/process", - "version": "v5.3.2", + "name": "symfony/polyfill-php81", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "714b47f9196de61a196d86c4bad5f09201b307df" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "e66119f3de95efc359483f810c4c3e6436279436" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/714b47f9196de61a196d86c4bad5f09201b307df", - "reference": "714b47f9196de61a196d86c4bad5f09201b307df", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", + "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "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 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.23.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": "2021-05-21T13:25:03+00:00" + }, + { + "name": "symfony/process", + "version": "v5.3.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/38f26c7d6ed535217ea393e05634cb0b244a1967", + "reference": "38f26c7d6ed535217ea393e05634cb0b244a1967", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -7350,7 +7627,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.3.2" + "source": "https://github.com/symfony/process/tree/v5.3.7" }, "funding": [ { @@ -7366,20 +7643,20 @@ "type": "tidelift" } ], - "time": "2021-06-12T10:15:01+00:00" + "time": "2021-08-04T21:20:46+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v2.1.0", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "81db2d4ae86e9f0049828d9343a72b9523884e5d" + "reference": "c9012994c4b4fb23e7c57dd86b763a417a04feba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/81db2d4ae86e9f0049828d9343a72b9523884e5d", - "reference": "81db2d4ae86e9f0049828d9343a72b9523884e5d", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c9012994c4b4fb23e7c57dd86b763a417a04feba", + "reference": "c9012994c4b4fb23e7c57dd86b763a417a04feba", "shasum": "" }, "require": { @@ -7389,7 +7666,7 @@ }, "require-dev": { "nyholm/psr7": "^1.1", - "psr/log": "^1.1", + "psr/log": "^1.1 || ^2 || ^3", "symfony/browser-kit": "^4.4 || ^5.0", "symfony/config": "^4.4 || ^5.0", "symfony/event-dispatcher": "^4.4 || ^5.0", @@ -7438,7 +7715,7 @@ ], "support": { "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.0" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.1" }, "funding": [ { @@ -7454,26 +7731,26 @@ "type": "tidelift" } ], - "time": "2021-02-17T10:35:25+00:00" + "time": "2021-07-27T17:25:39+00:00" }, { "name": "symfony/routing", - "version": "v5.3.0", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "368e81376a8e049c37cb80ae87dbfbf411279199" + "reference": "be865017746fe869007d94220ad3f5297951811b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/368e81376a8e049c37cb80ae87dbfbf411279199", - "reference": "368e81376a8e049c37cb80ae87dbfbf411279199", + "url": "https://api.github.com/repos/symfony/routing/zipball/be865017746fe869007d94220ad3f5297951811b", + "reference": "be865017746fe869007d94220ad3f5297951811b", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "doctrine/annotations": "<1.12", @@ -7483,7 +7760,7 @@ }, "require-dev": { "doctrine/annotations": "^1.12", - "psr/log": "~1.0", + "psr/log": "^1|^2|^3", "symfony/config": "^5.3", "symfony/dependency-injection": "^4.4|^5.0", "symfony/expression-language": "^4.4|^5.0", @@ -7528,7 +7805,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.3.0" + "source": "https://github.com/symfony/routing/tree/v5.3.7" }, "funding": [ { @@ -7544,7 +7821,7 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2021-08-04T21:42:42+00:00" }, { "name": "symfony/service-contracts", @@ -7627,16 +7904,16 @@ }, { "name": "symfony/string", - "version": "v5.3.2", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "0732e97e41c0a590f77e231afc16a327375d50b0" + "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/0732e97e41c0a590f77e231afc16a327375d50b0", - "reference": "0732e97e41c0a590f77e231afc16a327375d50b0", + "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5", + "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5", "shasum": "" }, "require": { @@ -7690,7 +7967,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.2" + "source": "https://github.com/symfony/string/tree/v5.3.7" }, "funding": [ { @@ -7706,27 +7983,27 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2021-08-26T08:00:08+00:00" }, { "name": "symfony/translation", - "version": "v5.3.2", + "version": "v5.3.9", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b" + "reference": "6e69f3551c1a3356cf6ea8d019bf039a0f8b6886" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/7e2603bcc598e14804c4d2359d8dc4ee3c40391b", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b", + "url": "https://api.github.com/repos/symfony/translation/zipball/6e69f3551c1a3356cf6ea8d019bf039a0f8b6886", + "reference": "6e69f3551c1a3356cf6ea8d019bf039a0f8b6886", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/translation-contracts": "^2.3" }, "conflict": { @@ -7740,7 +8017,7 @@ "symfony/translation-implementation": "2.3" }, "require-dev": { - "psr/log": "~1.0", + "psr/log": "^1|^2|^3", "symfony/config": "^4.4|^5.0", "symfony/console": "^4.4|^5.0", "symfony/dependency-injection": "^5.0", @@ -7785,7 +8062,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.2" + "source": "https://github.com/symfony/translation/tree/v5.3.9" }, "funding": [ { @@ -7801,7 +8078,7 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2021-08-26T08:22:53+00:00" }, { "name": "symfony/translation-contracts", @@ -7883,22 +8160,22 @@ }, { "name": "symfony/var-dumper", - "version": "v5.3.2", + "version": "v5.3.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae" + "reference": "eaaea4098be1c90c8285543e1356a09c8aa5c8da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/905a22c68b292ffb6f20d7636c36b220d1fba5ae", - "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eaaea4098be1c90c8285543e1356a09c8aa5c8da", + "reference": "eaaea4098be1c90c8285543e1356a09c8aa5c8da", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "phpunit/phpunit": "<5.4.3", @@ -7951,7 +8228,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.3.2" + "source": "https://github.com/symfony/var-dumper/tree/v5.3.8" }, "funding": [ { @@ -7967,7 +8244,7 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2021-09-24T15:59:58+00:00" }, { "name": "tightenco/collect", @@ -8078,31 +8355,31 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.3.0", + "version": "v5.3.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56" + "reference": "accaddf133651d4b5cf81a119f25296736ffc850" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", - "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/accaddf133651d4b5cf81a119f25296736ffc850", + "reference": "accaddf133651d4b5cf81a119f25296736ffc850", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.1", + "graham-campbell/result-type": "^1.0.2", "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.7.4", - "symfony/polyfill-ctype": "^1.17", - "symfony/polyfill-mbstring": "^1.17", - "symfony/polyfill-php80": "^1.17" + "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.14 || ^9.5.1" + "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -8125,13 +8402,11 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com", - "homepage": "https://gjcampbell.co.uk/" + "email": "hello@gjcampbell.co.uk" }, { "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://vancelucas.com/" + "email": "vance@vancelucas.com" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -8142,7 +8417,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.1" }, "funding": [ { @@ -8154,7 +8429,7 @@ "type": "tidelift" } ], - "time": "2021-01-20T15:23:13+00:00" + "time": "2021-10-02T19:24:42+00:00" }, { "name": "voku/portable-ascii", @@ -8292,16 +8567,16 @@ "packages-dev": [ { "name": "brianium/paratest", - "version": "v6.3.0", + "version": "v6.3.1", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "268d5b2b4237c0abf76c4aa9633ad8580be01e1e" + "reference": "3d81e35876f6497467310b123583cca6bd4c38f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/268d5b2b4237c0abf76c4aa9633ad8580be01e1e", - "reference": "268d5b2b4237c0abf76c4aa9633ad8580be01e1e", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/3d81e35876f6497467310b123583cca6bd4c38f2", + "reference": "3d81e35876f6497467310b123583cca6bd4c38f2", "shasum": "" }, "require": { @@ -8313,25 +8588,25 @@ "phpunit/php-code-coverage": "^9.2.6", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-timer": "^5.0.3", - "phpunit/phpunit": "^9.5.4", + "phpunit/phpunit": "^9.5.8", "sebastian/environment": "^5.1.3", - "symfony/console": "^4.4.21 || ^5.2.6", - "symfony/process": "^4.4.21 || ^5.2.4" + "symfony/console": "^4.4.23 || ^5.3.6", + "symfony/process": "^4.4.22 || ^5.3.4" }, "require-dev": { "doctrine/coding-standard": "^9.0.0", "ekino/phpstan-banned-code": "^0.4.0", "ergebnis/phpstan-rules": "^0.15.3", "ext-posix": "*", - "infection/infection": "^0.21.5", - "phpstan/phpstan": "^0.12.84", + "infection/infection": "^0.24", + "phpstan/phpstan": "^0.12.94", "phpstan/phpstan-deprecation-rules": "^0.12.6", - "phpstan/phpstan-phpunit": "^0.12.18", - "phpstan/phpstan-strict-rules": "^0.12.9", + "phpstan/phpstan-phpunit": "^0.12.21", + "phpstan/phpstan-strict-rules": "^0.12.10", "squizlabs/php_codesniffer": "^3.6.0", - "symfony/filesystem": "^5.2.6", + "symfony/filesystem": "^5.3.4", "thecodingmachine/phpstan-strict-rules": "^0.12.1", - "vimeo/psalm": "^4.7.1" + "vimeo/psalm": "^4.9.2" }, "bin": [ "bin/paratest" @@ -8370,7 +8645,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.3.0" + "source": "https://github.com/paratestphp/paratest/tree/v6.3.1" }, "funding": [ { @@ -8382,7 +8657,7 @@ "type": "paypal" } ], - "time": "2021-04-27T09:24:27+00:00" + "time": "2021-08-10T07:38:58+00:00" }, { "name": "doctrine/instantiator", @@ -8455,16 +8730,16 @@ }, { "name": "facade/flare-client-php", - "version": "1.8.1", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/facade/flare-client-php.git", - "reference": "47b639dc02bcfdfc4ebb83de703856fa01e35f5f" + "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/47b639dc02bcfdfc4ebb83de703856fa01e35f5f", - "reference": "47b639dc02bcfdfc4ebb83de703856fa01e35f5f", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed", + "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed", "shasum": "" }, "require": { @@ -8508,7 +8783,7 @@ ], "support": { "issues": "https://github.com/facade/flare-client-php/issues", - "source": "https://github.com/facade/flare-client-php/tree/1.8.1" + "source": "https://github.com/facade/flare-client-php/tree/1.9.1" }, "funding": [ { @@ -8516,28 +8791,28 @@ "type": "github" } ], - "time": "2021-05-31T19:23:29+00:00" + "time": "2021-09-13T12:16:46+00:00" }, { "name": "facade/ignition", - "version": "2.10.2", + "version": "2.15.0", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "43688227bbf27c43bc1ad83af224f135b6ef0ff4" + "reference": "3ee6e94815462bcf09bca0efc1c9069685df8da3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/43688227bbf27c43bc1ad83af224f135b6ef0ff4", - "reference": "43688227bbf27c43bc1ad83af224f135b6ef0ff4", + "url": "https://api.github.com/repos/facade/ignition/zipball/3ee6e94815462bcf09bca0efc1c9069685df8da3", + "reference": "3ee6e94815462bcf09bca0efc1c9069685df8da3", "shasum": "" }, "require": { + "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "facade/flare-client-php": "^1.6", + "facade/flare-client-php": "^1.9.1", "facade/ignition-contracts": "^1.0.2", - "filp/whoops": "^2.4", "illuminate/support": "^7.0|^8.0", "monolog/monolog": "^2.0", "php": "^7.2.5|^8.0", @@ -8593,7 +8868,7 @@ "issues": "https://github.com/facade/ignition/issues", "source": "https://github.com/facade/ignition" }, - "time": "2021-06-11T06:57:25+00:00" + "time": "2021-10-11T15:24:06+00:00" }, { "name": "facade/ignition-contracts", @@ -8650,21 +8925,21 @@ }, { "name": "filp/whoops", - "version": "2.13.0", + "version": "2.14.4", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "2edbc73a4687d9085c8f20f398eebade844e8424" + "reference": "f056f1fe935d9ed86e698905a957334029899895" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/2edbc73a4687d9085c8f20f398eebade844e8424", - "reference": "2edbc73a4687d9085c8f20f398eebade844e8424", + "url": "https://api.github.com/repos/filp/whoops/zipball/f056f1fe935d9ed86e698905a957334029899895", + "reference": "f056f1fe935d9ed86e698905a957334029899895", "shasum": "" }, "require": { "php": "^5.5.9 || ^7.0 || ^8.0", - "psr/log": "^1.0.1" + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "require-dev": { "mockery/mockery": "^0.9 || ^1.0", @@ -8709,7 +8984,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.13.0" + "source": "https://github.com/filp/whoops/tree/2.14.4" }, "funding": [ { @@ -8717,7 +8992,7 @@ "type": "github" } ], - "time": "2021-06-04T12:00:00+00:00" + "time": "2021-10-03T12:00:00+00:00" }, { "name": "fzaninotto/faker", @@ -8827,16 +9102,16 @@ }, { "name": "mockery/mockery", - "version": "1.4.3", + "version": "1.4.4", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea" + "reference": "e01123a0e847d52d186c5eb4b9bf58b0c6d00346" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/d1339f64479af1bee0e82a0413813fe5345a54ea", - "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e01123a0e847d52d186c5eb4b9bf58b0c6d00346", + "reference": "e01123a0e847d52d186c5eb4b9bf58b0c6d00346", "shasum": "" }, "require": { @@ -8893,9 +9168,9 @@ ], "support": { "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.4.3" + "source": "https://github.com/mockery/mockery/tree/1.4.4" }, - "time": "2021-02-24T09:51:49+00:00" + "time": "2021-09-13T15:28:59+00:00" }, { "name": "myclabs/deep-copy", @@ -8957,33 +9232,32 @@ }, { "name": "nunomaduro/collision", - "version": "v5.5.0", + "version": "v5.10.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "b5cb36122f1c142c3c3ee20a0ae778439ef0244b" + "reference": "3004cfa49c022183395eabc6d0e5207dfe498d00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/b5cb36122f1c142c3c3ee20a0ae778439ef0244b", - "reference": "b5cb36122f1c142c3c3ee20a0ae778439ef0244b", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/3004cfa49c022183395eabc6d0e5207dfe498d00", + "reference": "3004cfa49c022183395eabc6d0e5207dfe498d00", "shasum": "" }, "require": { "facade/ignition-contracts": "^1.0", - "filp/whoops": "^2.7.2", + "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", - "friendsofphp/php-cs-fixer": "^2.17.3", "fruitcake/laravel-cors": "^2.0.3", - "laravel/framework": "^9.0", + "laravel/framework": "8.x-dev", "nunomaduro/larastan": "^0.6.2", "nunomaduro/mock-final-classes": "^1.0", - "orchestra/testbench": "^7.0", + "orchestra/testbench": "^6.0", "phpstan/phpstan": "^0.12.64", "phpunit/phpunit": "^9.5.0" }, @@ -9041,20 +9315,20 @@ "type": "patreon" } ], - "time": "2021-06-22T20:47:22+00:00" + "time": "2021-09-20T15:06:32+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { @@ -9099,9 +9373,9 @@ "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/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", @@ -9209,16 +9483,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { @@ -9229,7 +9503,8 @@ "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -9259,22 +9534,22 @@ "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/master" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" }, - "time": "2020-09-03T19:13:55+00:00" + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.4.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", "shasum": "" }, "require": { @@ -9282,7 +9557,8 @@ "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "*" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -9308,39 +9584,39 @@ "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.4.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" }, - "time": "2020-09-17T18:55:26+00:00" + "time": "2021-10-02T14:08:47+00:00" }, { "name": "phpspec/prophecy", - "version": "1.13.0", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", + "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", + "phpspec/phpspec": "^6.0 || ^7.0", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -9375,29 +9651,29 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + "source": "https://github.com/phpspec/prophecy/tree/1.14.0" }, - "time": "2021-03-17T13:42:18+00:00" + "time": "2021-09-10T09:02:12+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.6", + "version": "9.2.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" + "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", - "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d4c798ed8d51506800b441f7a13ecb0f76f12218", + "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", + "nikic/php-parser": "^4.12.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -9446,7 +9722,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.7" }, "funding": [ { @@ -9454,7 +9730,7 @@ "type": "github" } ], - "time": "2021-03-28T07:26:59+00:00" + "time": "2021-09-17T05:39:03+00:00" }, { "name": "phpunit/php-file-iterator", @@ -9699,16 +9975,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.6", + "version": "9.5.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb" + "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb", - "reference": "fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", "shasum": "" }, "require": { @@ -9720,11 +9996,11 @@ "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.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.3", + "phpunit/php-code-coverage": "^9.2.7", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -9786,7 +10062,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.6" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" }, "funding": [ { @@ -9798,7 +10074,7 @@ "type": "github" } ], - "time": "2021-06-23T05:14:38+00:00" + "time": "2021-09-25T07:38:51+00:00" }, { "name": "sebastian/cli-parser", @@ -10653,6 +10929,7 @@ "type": "github" } ], + "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { @@ -10766,16 +11043,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { @@ -10804,7 +11081,7 @@ "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/master" + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { @@ -10812,7 +11089,7 @@ "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-28T10:34:58+00:00" } ], "aliases": [], @@ -10831,5 +11108,5 @@ "ext-openssl": "*" }, "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.1.0" } diff --git a/config/auth.php b/config/auth.php index 3b50d4c1a..e0c437b27 100644 --- a/config/auth.php +++ b/config/auth.php @@ -96,6 +96,7 @@ return [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, + 'throttle' => 60, ], ], diff --git a/public/js/activity.js b/public/js/activity.js index d2e23c0c8..db7485659 100644 Binary files a/public/js/activity.js and b/public/js/activity.js differ diff --git a/public/js/admin.js b/public/js/admin.js index ef7f02cc0..d0f0cb20d 100644 Binary files a/public/js/admin.js and b/public/js/admin.js differ diff --git a/public/js/app.js b/public/js/app.js index 0a48581c4..29fa03d50 100644 Binary files a/public/js/app.js and b/public/js/app.js differ diff --git a/public/js/components.js b/public/js/components.js index 578e82beb..22c0ae59b 100644 Binary files a/public/js/components.js and b/public/js/components.js differ diff --git a/public/js/direct.js b/public/js/direct.js index 24472f367..82b0ddfe0 100644 Binary files a/public/js/direct.js and b/public/js/direct.js differ diff --git a/public/js/memoryprofile.js b/public/js/memoryprofile.js index ccd4f67f7..0cf797160 100644 Binary files a/public/js/memoryprofile.js and b/public/js/memoryprofile.js differ diff --git a/public/js/profile.js b/public/js/profile.js index 1f6a0d993..4316ba78d 100644 Binary files a/public/js/profile.js and b/public/js/profile.js differ diff --git a/public/js/rempos.js b/public/js/rempos.js index 955ba7707..06a8289b0 100644 Binary files a/public/js/rempos.js and b/public/js/rempos.js differ diff --git a/public/js/rempro.js b/public/js/rempro.js index 9a9615761..78566b777 100644 Binary files a/public/js/rempro.js and b/public/js/rempro.js differ diff --git a/public/js/status.js b/public/js/status.js index deb717729..c6554efbd 100644 Binary files a/public/js/status.js and b/public/js/status.js differ diff --git a/public/js/theme-monokai.js b/public/js/theme-monokai.js index 767581ba5..88f12f95b 100644 Binary files a/public/js/theme-monokai.js and b/public/js/theme-monokai.js differ diff --git a/public/js/timeline.js b/public/js/timeline.js index 687411b0e..56339f682 100644 Binary files a/public/js/timeline.js and b/public/js/timeline.js differ diff --git a/public/js/vendor.js b/public/js/vendor.js index 4dbac61c1..f43c3454e 100644 Binary files a/public/js/vendor.js and b/public/js/vendor.js differ diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 62d3c6d29..09847af90 100644 Binary files a/public/mix-manifest.json and b/public/mix-manifest.json differ diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index 07c7fe8e6..13f514ac0 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -103,31 +103,31 @@ window.App.util = { } return Math.floor(seconds) + "s"; }), - timeAhead: (function(ts) { + timeAhead: (function(ts, short = true) { let date = Date.parse(ts); let diff = date - Date.parse(new Date()); let seconds = Math.floor((diff) / 1000); let interval = Math.floor(seconds / 63072000); if (interval >= 1) { - return interval + "y"; + return interval + (short ? "y" : " years"); } interval = Math.floor(seconds / 604800); if (interval >= 1) { - return interval + "w"; + return interval + (short ? "w" : " weeks"); } interval = Math.floor(seconds / 86400); if (interval >= 1) { - return interval + "d"; + return interval + (short ? "d" : " days"); } interval = Math.floor(seconds / 3600); if (interval >= 1) { - return interval + "h"; + return interval + (short ? "h" : " hours"); } interval = Math.floor(seconds / 60); if (interval >= 1) { - return interval + "m"; + return interval + (short ? "m" : " minutes"); } - return Math.floor(seconds) + "s"; + return Math.floor(seconds) + (short ? "s" : " seconds"); }), rewriteLinks: (function(i) { @@ -234,7 +234,8 @@ window.App.util = { 'filter-willow': 'brightness(1.2) contrast(.85) saturate(.05) sepia(.2)', 'filter-xpro-ii': 'sepia(.45) contrast(1.25) brightness(1.75) saturate(1.3) hue-rotate(-5deg)' }, - emoji: ['๐','๐ฏ','โค๏ธ','๐','๐','๐','๐','๐ฏ','๐ข','๐ ','๐','๐','๐','๐','๐คฃ','๐','๐','๐','๐','๐','๐','๐','๐','๐','๐','๐ค','๐คฉ','๐ค','๐คจ','๐','๐','๐ถ','๐','๐','๐ฃ','๐ฅ','๐ฎ','๐ค','๐ช','๐ซ','๐ด','๐','๐','๐','๐','๐คค','๐','๐','๐','๐','๐','๐ค','๐ฒ','๐','๐','๐','๐','๐ค','๐ญ','๐ฆ','๐ง','๐จ','๐ฉ','๐คฏ','๐ฌ','๐ฐ','๐ฑ','๐ณ','๐คช','๐ต','๐ก','๐ ','๐คฌ','๐ท','๐ค','๐ค','๐คข','๐คฎ','๐คง','๐','๐ค ','๐คก','๐คฅ','๐คซ','๐คญ','๐ง','๐ค','๐','๐ฟ','๐น','๐บ','๐','๐ป','๐ฝ','๐ค','๐ฉ','๐บ','๐ธ','๐น','๐ป','๐ผ','๐ฝ','๐','๐ฟ','๐พ','๐คฒ','๐','๐ค','๐','๐','๐','โ','๐ค','๐ค','๐ค','โ๏ธ','๐ค','๐ค','๐','๐','๐','๐','โ๏ธ','โ','๐ค','๐','๐','๐','๐ค','๐ช','๐','โ๏ธ','๐','๐','๐','๐','๐','๐ ','๐','๐','๐ฃ','๐','๐','๐ง ','๐ฃ','๐ค','๐ฅ' + emoji: [ + '๐','๐ฏ','โค๏ธ','๐','๐','๐','๐','๐ฏ','๐ข','๐ ','๐','๐','๐','๐','๐คฃ','๐','๐','๐','๐','๐','๐','๐','๐','๐','๐','๐ค','๐คฉ','๐ค','๐คจ','๐','๐','๐ถ','๐','๐','๐ฃ','๐ฅ','๐ฎ','๐ค','๐ช','๐ซ','๐ด','๐','๐','๐','๐','๐คค','๐','๐','๐','๐','๐','๐ค','๐ฒ','๐','๐','๐','๐','๐ค','๐ญ','๐ฆ','๐ง','๐จ','๐ฉ','๐คฏ','๐ฌ','๐ฐ','๐ฑ','๐ณ','๐คช','๐ต','๐ก','๐ ','๐คฌ','๐ท','๐ค','๐ค','๐คข','๐คฎ','๐คง','๐','๐ค ','๐คก','๐คฅ','๐คซ','๐คญ','๐ง','๐ค','๐','๐ฟ','๐น','๐บ','๐','๐ป','๐ฝ','๐ค','๐ฉ','๐บ','๐ธ','๐น','๐ป','๐ผ','๐ฝ','๐','๐ฟ','๐พ','๐คฒ','๐','๐ค','๐','๐','๐','โ','๐ค','๐ค','๐ค','โ๏ธ','๐ค','๐ค','๐','๐','๐','๐','โ๏ธ','โ','๐ค','๐','๐','๐','๐ค','๐ช','๐','โ๏ธ','๐','๐','๐','๐','๐','๐ ','๐','๐','๐ฃ','๐','๐','๐ง ','๐ฃ','๐ค','๐ฅ' ], embed: { post: (function(url, caption = true, likes = false, layout = 'full') { diff --git a/resources/assets/js/components/Activity.vue b/resources/assets/js/components/Activity.vue index 2b3e68686..ca775b4f3 100644 --- a/resources/assets/js/components/Activity.vue +++ b/resources/assets/js/components/Activity.vue @@ -22,56 +22,60 @@ {{n.account.local == false ? '@':''}}{{truncate(n.account.username)}} liked your post.
+{{n.account.local == false ? '@':''}}{{truncate(n.account.username)}} commented on your post.
{{n.account.local == false ? '@':''}}{{truncate(n.account.username)}} commented on your group post.
{{n.account.local == false ? '@':''}}{{truncate(n.account.username)}} commented on your story.
{{truncate(n.account.username)}} updated a modlog.
@@ -315,7 +315,7 @@
-
+
-
+
@@ -382,7 +382,7 @@
-
+
-
+
diff --git a/resources/assets/js/components/Timeline.vue b/resources/assets/js/components/Timeline.vue
index cfd59ac62..20002a035 100644
--- a/resources/assets/js/components/Timeline.vue
+++ b/resources/assets/js/components/Timeline.vue
@@ -12,7 +12,7 @@
-
+
Loading...
@@ -106,6 +106,8 @@
size="small"
v-on:status-delete="deleteStatus"
v-on:comment-focus="commentFocus"
+ v-on:followed="followedAccount"
+ v-on:unfollowed="unfollowedAccount"
/>
@@ -1067,7 +1069,29 @@
this.feed = this.feed.filter(s => {
return s.id != status;
});
- }
+ },
+
+ followedAccount(id) {
+ this.feed = this.feed.map(s => {
+ if(s.account.id == id) {
+ if(s.hasOwnProperty('relationship') && s.relationship.following == false) {
+ s.relationship.following = true;
+ }
+ }
+ return s;
+ });
+ },
+
+ unfollowedAccount(id) {
+ this.feed = this.feed.map(s => {
+ if(s.account.id == id) {
+ if(s.hasOwnProperty('relationship') && s.relationship.following == true) {
+ s.relationship.following = false;
+ }
+ }
+ return s;
+ });
+ },
},
beforeDestroy () {
diff --git a/resources/assets/js/components/partials/StatusCard.vue b/resources/assets/js/components/partials/StatusCard.vue
index d7e04144e..d00d03dbe 100644
--- a/resources/assets/js/components/partials/StatusCard.vue
+++ b/resources/assets/js/components/partials/StatusCard.vue
@@ -71,6 +71,14 @@
{{status.place.name}}, {{status.place.country}}
+
+
+
+
+
+
+
+
-
+
diff --git a/resources/lang/cs/site.php b/resources/lang/cs/site.php
index ae97e8a61..838418daf 100644
--- a/resources/lang/cs/site.php
+++ b/resources/lang/cs/site.php
@@ -1,7 +1,6 @@
'O nรกs',
'help' => 'Nรกpovฤda',
'language' => 'Jazyk',
@@ -16,5 +15,4 @@ return [
'contact-us' => 'Kontaktujte nรกs',
'places' => 'Mรญsta',
'profiles' => 'Profily',
-
];
diff --git a/resources/lang/de/exception.php b/resources/lang/de/exception.php
new file mode 100644
index 000000000..53e92f36f
--- /dev/null
+++ b/resources/lang/de/exception.php
@@ -0,0 +1,11 @@
+ [
+ 'invalid' => [
+ 'album' => 'Mindestens 1 Foto oder Video muss enthalten sein.',
+ ],
+ ],
+
+];
diff --git a/resources/lang/de/navmenu.php b/resources/lang/de/navmenu.php
index 7408e455d..f75ca7a00 100644
--- a/resources/lang/de/navmenu.php
+++ b/resources/lang/de/navmenu.php
@@ -1,7 +1,6 @@
'Suche',
'home' => 'Heim',
'local' => 'Lokal',
@@ -16,5 +15,5 @@ return [
'admin' => 'Administration',
'logout' => 'Abmelden',
'directMessages' => 'Privatnachrichten',
-
+ 'composePost' => 'Neu',
];
diff --git a/resources/lang/de/site.php b/resources/lang/de/site.php
index 1197b5e51..92f81e03b 100644
--- a/resources/lang/de/site.php
+++ b/resources/lang/de/site.php
@@ -15,5 +15,5 @@ return [
'contact' => 'Kontakt',
'contact-us' => 'Kontaktiere uns',
'places' => 'Orte',
-
+ 'profiles' => 'Profile',
];
diff --git a/routes/api.php b/routes/api.php
index 7c3d5f3b7..56c733709 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -11,6 +11,12 @@ Route::post('i/actor/inbox', 'InstanceActorController@inbox');
Route::get('i/actor/outbox', 'InstanceActorController@outbox');
Route::get('/stories/{username}/{id}', 'StoryController@getActivityObject');
+Route::get('.well-known/webfinger', 'FederationController@webfinger')->name('well-known.webfinger');
+Route::get('.well-known/nodeinfo', 'FederationController@nodeinfoWellKnown')->name('well-known.nodeinfo');
+Route::get('.well-known/host-meta', 'FederationController@hostMeta')->name('well-known.hostMeta');
+Route::redirect('.well-known/change-password', '/settings/password');
+Route::get('api/nodeinfo/2.0.json', 'FederationController@nodeinfo');
+
Route::group(['prefix' => 'api'], function() use($middleware) {
Route::group(['prefix' => 'v1'], function() use($middleware) {
diff --git a/routes/web.php b/routes/web.php
index 4086f28dc..23a0080b2 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -90,11 +90,6 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
Auth::routes();
- Route::get('.well-known/webfinger', 'FederationController@webfinger')->name('well-known.webfinger');
- Route::get('.well-known/nodeinfo', 'FederationController@nodeinfoWellKnown')->name('well-known.nodeinfo');
- Route::get('.well-known/host-meta', 'FederationController@hostMeta')->name('well-known.hostMeta');
- Route::redirect('.well-known/change-password', '/settings/password');
-
Route::get('/home', 'HomeController@index')->name('home');
Route::get('discover/c/{slug}', 'DiscoverController@showCategory');
@@ -105,7 +100,6 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
Route::group(['prefix' => 'api'], function () {
Route::get('search', 'SearchController@searchAPI');
- Route::get('nodeinfo/2.0.json', 'FederationController@nodeinfo');
Route::post('status/view', 'StatusController@storeView');
Route::get('v1/polls/{id}', 'PollController@getPoll');
Route::post('v1/polls/{id}/votes', 'PollController@vote');
@@ -251,7 +245,6 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
Route::post('v1/publish', 'StoryController@publishStory');
Route::delete('v1/delete/{id}', 'StoryController@apiV1Delete');
});
-
});
Route::get('discover/tags/{hashtag}', 'DiscoverController@showTags');
@@ -348,7 +348,7 @@
diff --git a/resources/assets/js/components/RemoteProfile.vue b/resources/assets/js/components/RemoteProfile.vue index 28791c5a2..5f56370b6 100644 --- a/resources/assets/js/components/RemoteProfile.vue +++ b/resources/assets/js/components/RemoteProfile.vue @@ -19,7 +19,7 @@