Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
HandlesApiResponse
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
1 / 1
10
100.00% covered (success)
100.00%
1 / 1
 handleResponse
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
1 / 1
10
1<?php
2
3declare(strict_types=1);
4
5namespace Mbvb1223\Pinecone\Utils;
6
7use Mbvb1223\Pinecone\Errors\PineconeApiException;
8use Mbvb1223\Pinecone\Errors\PineconeAuthException;
9use Mbvb1223\Pinecone\Errors\PineconeException;
10use Mbvb1223\Pinecone\Errors\PineconeRateLimitException;
11use Mbvb1223\Pinecone\Errors\PineconeTimeoutException;
12use Psr\Http\Message\ResponseInterface;
13
14trait HandlesApiResponse
15{
16    /** @return array<string, mixed> */
17    private function handleResponse(ResponseInterface $response): array
18    {
19        $statusCode = $response->getStatusCode();
20        $body = $response->getBody()->getContents();
21
22        if ($statusCode >= 400) {
23            $data = json_decode($body, true) ?? [];
24            $message = $data['message'] ?? $data['error']['message'] ?? $data['error'] ?? 'API request failed';
25            if (is_array($message)) {
26                $message = json_encode($message);
27            }
28
29            if ($statusCode === 401 || $statusCode === 403) {
30                throw new PineconeAuthException($message, $statusCode);
31            }
32
33            if ($statusCode === 408 || $statusCode === 504) {
34                throw new PineconeTimeoutException($message, $statusCode);
35            }
36
37            if ($statusCode === 429) {
38                throw new PineconeRateLimitException($message, $statusCode);
39            }
40
41            throw new PineconeApiException($message, $statusCode, $data);
42        }
43
44        if (empty($body)) {
45            return [];
46        }
47
48        $decoded = json_decode($body, true);
49        if (json_last_error() !== JSON_ERROR_NONE) {
50            throw new PineconeException('Failed to decode JSON response: ' . json_last_error_msg());
51        }
52
53        return $decoded ?? [];
54    }
55}