Source path: app/Http/Controllers/MetaConnectController.php
Extracted from supplied specification. Review before copying into application.

<?php
namespace App\Http\Controllers;

use App\Models\SocialAccount;
use Illuminate\Support\Facades\Http;
use Laravel\Socialite\Facades\Socialite;

class MetaConnectController extends Controller
{
    public function redirect()
    {
        return Socialite::driver('facebook')->scopes([
            'pages_show_list', 'pages_manage_posts', 'pages_read_engagement',
            'instagram_basic', 'instagram_content_publish',
        ])->redirect();
    }

    public function callback()
    {
        $v = config('services.meta.version');
        $userToken = Socialite::driver('facebook')->user()->token;

        $pages = Http::get("https://graph.facebook.com/{$v}/me/accounts", [
            'access_token' => $userToken,
            'fields' => 'id,name,access_token,instagram_business_account{id,username}',
        ])->throw()->json('data', []);

        foreach ($pages as $p) {
            SocialAccount::updateOrCreate(
                ['user_id' => auth()->id(), 'platform' => 'facebook', 'external_id' => $p['id']],
                ['name' => $p['name'], 'access_token' => $p['access_token']]
            );

            if (!empty($p['instagram_business_account'])) {
                $ig = $p['instagram_business_account'];
                SocialAccount::updateOrCreate(
                    ['user_id' => auth()->id(), 'platform' => 'instagram', 'external_id' => $ig['id']],
                    ['name' => '@' . ($ig['username'] ?? $ig['id']), 'access_token' => $p['access_token']]
                );
            }
        }

        return redirect('/posts')->with('status', 'Accounts connected.');
    }
}
