Skip to content

Commit da3d959

Browse files
fix: API error not passing message (#380)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 2c414d1 commit da3d959

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

src/demo/preview.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,9 @@
4444
try {
4545
renderOutput($demoStats);
4646
} catch (InvalidArgumentException | AssertionError $error) {
47+
error_log("Error {$error->getCode()}: {$error->getMessage()}");
48+
if ($error->getCode() >= 500) {
49+
error_log($error->getTraceAsString());
50+
}
4751
renderOutput($error->getMessage(), $error->getCode());
4852
}

src/index.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,9 @@
4242
}
4343
renderOutput($stats);
4444
} catch (InvalidArgumentException | AssertionError $error) {
45+
error_log("Error {$error->getCode()}: {$error->getMessage()}");
46+
if ($error->getCode() >= 500) {
47+
error_log($error->getTraceAsString());
48+
}
4549
renderOutput($error->getMessage(), $error->getCode());
4650
}

src/stats.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,19 @@ function getContributionGraphs(string $user): array
6464
$response = [];
6565
foreach ($requests as $year => $request) {
6666
$contents = curl_multi_getcontent($request);
67-
$decoded = json_decode($contents);
67+
$decoded = is_string($contents) ? json_decode($contents) : null;
6868
// if response is empty or invalid, retry request one time
69-
if (empty($decoded)) {
69+
if (empty($decoded) || empty($decoded->data)) {
7070
$query = buildContributionGraphQuery($user, $year);
7171
$request = getGraphQLCurlHandle($query);
7272
$contents = curl_exec($request);
73-
if ($contents === false) {
74-
error_log("Failed to decode response for $user's $year contributions after 2 attempts.");
73+
$decoded = is_string($contents) ? json_decode($contents) : null;
74+
// if the response is still empty or invalid, log an error and skip the year
75+
if (empty($decoded) || empty($decoded->data)) {
76+
$message = $decoded->errors[0]->message ?? ($decoded->message ?? "An API error occurred.");
77+
error_log("Failed to decode response for $user's $year contributions after 2 attempts. $message");
7578
continue;
7679
}
77-
$decoded = json_decode($contents);
7880
}
7981
array_unshift($response, $decoded);
8082
}
@@ -198,7 +200,7 @@ function getContributionYears(string $user): array
198200
}
199201
$message = $response->errors[0]->message ?? "An API error occurred.";
200202
// Other errors that contain a message field
201-
throw new InvalidArgumentException($message, 500);
203+
throw new InvalidArgumentException($message, 502);
202204
}
203205
// API did not return data
204206
if (!isset($response->data) && isset($response->message)) {
@@ -223,9 +225,6 @@ function getContributionDates(array $contributionGraphs): array
223225
// sort contribution calendars by year key
224226
ksort($contributionGraphs);
225227
foreach ($contributionGraphs as $graph) {
226-
if (!empty($graph->errors)) {
227-
throw new AssertionError($graph->data->errors[0]->message, 502);
228-
}
229228
$weeks = $graph->data->user->contributionsCollection->contributionCalendar->weeks;
230229
foreach ($weeks as $week) {
231230
foreach ($week->contributionDays as $day) {

0 commit comments

Comments
 (0)