apiLogger->send('eia', 'GET', self::URL, fn () => Http::timeout(30) ->retry(3, 200, fn (Throwable $e) => $this->shouldRetry($e)) ->throw() ->get(self::URL, [ 'api_key' => config('services.eia.api_key'), 'frequency' => 'daily', 'data[0]' => 'value', 'facets[series][]' => 'RBRTE', 'sort[0][column]' => 'period', 'sort[0][direction]' => 'desc', 'length' => 30, ])); } catch (ConnectionException $e) { throw new BrentPriceFetchException("EIA connection failed: {$e->getMessage()}", previous: $e); } catch (RequestException $e) { throw new BrentPriceFetchException("EIA returned HTTP {$e->response->status()}", previous: $e); } $rows = collect($response->json('response.data') ?? []) ->filter(fn (array $row) => ($row['value'] ?? '.') !== '.') ->map(fn (array $row) => [ 'date' => $row['period'], 'price_usd' => (float) $row['value'], ]) ->all(); return $rows === [] ? null : $rows; } private function shouldRetry(Throwable $e): bool { return $e instanceof ConnectionException || ($e instanceof RequestException && $e->response->serverError()); } }