Source path: app/Events/PostPublished.php
Extracted from supplied specification. Review before copying into application.

<?php
namespace App\Events;

use App\Models\PostTarget;
use Illuminate\Foundation\Events\Dispatchable;

class PostPublished
{
    use Dispatchable;
    public function __construct(public PostTarget $target) {}
}
php
// PostFailed: same as above.
// TokenExpiring: public SocialAccount $account
// VideoReady:    public Media $media

app/Providers/AppServiceProvider.php → in boot():

php
use Illuminate\Support\Facades\Event;

Event::listen(\App\Events\PostPublished::class, [\App\Listeners\NotifyUser::class, 'published']);
Event::listen(\App\Events\PostFailed::class,    [\App\Listeners\NotifyUser::class, 'failed']);
Event::listen(\App\Events\TokenExpiring::class, [\App\Listeners\NotifyUser::class, 'tokenExpiring']);
Event::listen(\App\Events\VideoReady::class,    [\App\Listeners\NotifyUser::class, 'videoReady']);
