There appears to be an issue caused by the new multi-tenant storage feature.
In laravel-xero-oauth2/src/OauthCredentialManager.php the store method requires the tenant to be an array.
public function store(AccessTokenInterface $token, array $tenants = null): void;
But in laravel-xero-oauth2/src/Controllers/AuthorizationCallbackController.php when the store method is called, a string is being passed in.
$tenantId = $identity->getConnections()[0]->getTenantId(); $oauth->store($accessToken, $tenantId);
I've just reverted to version 3 and all is fine.