*/ private array $policyTypes = [ 'deviceConfiguration', 'settingsCatalogPolicy', 'groupPolicyConfiguration', ]; public function __construct(private readonly ProviderGateway $gateway) {} public function collect(ProviderConnection $connection): array { $total = 0; foreach ($this->policyTypes as $policyType) { $response = $this->gateway->listPolicies($connection, $policyType); if ($response->failed()) { $message = $this->messageForResponse($response); $status = (int) ($response->status ?? 0); throw new RuntimeException("Graph request failed for {$policyType} (status {$status}): {$message}"); } $items = is_array($response->data) ? $response->data : []; $total += count($items); } return [ 'total' => $total, 'items' => $total, ]; } private function messageForResponse(GraphResponse $response): string { $error = $response->errors[0] ?? null; if (is_string($error)) { return $error; } if (is_array($error)) { $message = $error['message'] ?? null; if (is_string($message) && $message !== '') { return $message; } return json_encode($error, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) ?: 'Request failed.'; } return 'Request failed.'; } }