$extraContext */ public function providerConnectionCheck( Tenant $tenant, ProviderConnection $connection, User $initiator, array $extraContext = [], ): ProviderOperationStartResult { return $this->providerConnectionCheckUsingConnection( tenant: $tenant, connection: $connection, initiator: $initiator, extraContext: $extraContext, ); } /** * Start (or dedupe) a provider-connection verification run for the tenant default connection. * * @param array $extraContext */ public function providerConnectionCheckForTenant( Tenant $tenant, User $initiator, array $extraContext = [], ): ProviderOperationStartResult { if (! $initiator->canAccessTenant($tenant)) { throw new NotFoundHttpException; } Gate::forUser($initiator)->authorize(Capabilities::PROVIDER_RUN, $tenant); return $this->providers->start( tenant: $tenant, connection: null, operationType: 'provider.connection.check', dispatcher: fn (OperationRun $run): mixed => $this->dispatchConnectionHealthCheck($run, $tenant, $initiator), initiator: $initiator, extraContext: $extraContext, ); } /** * Start (or dedupe) a provider-connection verification run for an explicit connection. * * @param array $extraContext */ public function providerConnectionCheckUsingConnection( Tenant $tenant, ProviderConnection $connection, User $initiator, array $extraContext = [], ): ProviderOperationStartResult { if (! $initiator->canAccessTenant($tenant)) { throw new NotFoundHttpException; } Gate::forUser($initiator)->authorize(Capabilities::PROVIDER_RUN, $tenant); return $this->providers->start( tenant: $tenant, connection: $connection, operationType: 'provider.connection.check', dispatcher: fn (OperationRun $run): mixed => $this->dispatchConnectionHealthCheck($run, $tenant, $initiator), initiator: $initiator, extraContext: $extraContext, ); } private function dispatchConnectionHealthCheck(OperationRun $run, Tenant $tenant, User $initiator): mixed { $context = is_array($run->context ?? null) ? $run->context : []; $providerConnectionId = $context['provider_connection_id'] ?? null; if (! is_numeric($providerConnectionId)) { throw new InvalidArgumentException('Provider connection id is missing from run context.'); } return ProviderConnectionHealthCheckJob::dispatch( tenantId: (int) $tenant->getKey(), userId: (int) $initiator->getKey(), providerConnectionId: (int) $providerConnectionId, operationRun: $run, ); } }