Skip to content

Commit dcbb18b

Browse files
authored
Merge pull request #77 from utopia-php/feat-improve-error-handling
Improve error handling
2 parents df54ba5 + a0e4c09 commit dcbb18b

15 files changed

+181
-156
lines changed

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ RUN composer install \
1515
--no-scripts \
1616
--prefer-dist
1717

18-
FROM php:8.0-cli-alpine
18+
FROM php:8.2.14-cli-alpine3.19
1919

2020
WORKDIR /usr/local/src/
2121

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
},
3535
"config": {
3636
"platform": {
37-
"php": "8.0"
37+
"php": "8.2"
3838
}
3939
}
4040
}

composer.lock

+118-116
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Utopia/Messaging/Adapter.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public function send(Message $message): array
6565
* @return array{
6666
* url: string,
6767
* statusCode: int,
68-
* response: array<string, mixed>|null,
68+
* response: array<string, mixed>|string|null,
6969
* error: string|null
7070
* }
7171
*

src/Utopia/Messaging/Adapter/Email/Mailgun.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,13 @@ protected function process(EmailMessage $message): array
9696
}
9797
} elseif ($statusCode >= 400 && $statusCode < 500) {
9898
foreach ($message->getTo() as $to) {
99-
$response->addResultForRecipient($to, $result['response']['message']);
99+
if (\is_string($result['response'])) {
100+
$response->addResultForRecipient($to, $result['response']);
101+
} elseif (isset($result['response']['message'])) {
102+
$response->addResultForRecipient($to, $result['response']['message']);
103+
} else {
104+
$response->addResultForRecipient($to, 'Unknown error');
105+
}
100106
}
101107
}
102108

src/Utopia/Messaging/Adapter/Email/SMTP.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,11 @@ protected function process(EmailMessage $message): array
8383
}
8484

8585
foreach ($message->getTo() as $to) {
86-
$response->addResultForRecipient($to, $sent ? '' : $mail->ErrorInfo);
86+
$error = empty($mail->ErrorInfo)
87+
? 'Unknown error'
88+
: $mail->ErrorInfo;
89+
90+
$response->addResultForRecipient($to, $sent ? '' : $error);
8791
}
8892

8993
return $response->toArray();

src/Utopia/Messaging/Adapter/Email/Sendgrid.php

+10-4
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,18 @@ protected function process(EmailMessage $message): array
110110

111111
if ($statusCode === 202) {
112112
$response->setDeliveredTo(\count($message->getTo()));
113-
foreach ($message->getTo() as $recipient) {
114-
$response->addResultForRecipient($recipient);
113+
foreach ($message->getTo() as $to) {
114+
$response->addResultForRecipient($to);
115115
}
116116
} else {
117-
foreach ($message->getTo() as $recipient) {
118-
$response->addResultForRecipient($recipient, $result['response']['errors'][0]['message']);
117+
foreach ($message->getTo() as $to) {
118+
if (\is_string($result['response'])) {
119+
$response->addResultForRecipient($to, $result['response']);
120+
} elseif (!\is_null($result['response']['errors'][0]['message'] ?? null)) {
121+
$response->addResultForRecipient($to, $result['response']['errors'][0]['message']);
122+
} else {
123+
$response->addResultForRecipient($to, 'Unknown error');
124+
}
119125
}
120126
}
121127

src/Utopia/Messaging/Adapter/Push.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ abstract class Push extends Adapter
99
{
1010
protected const TYPE = 'push';
1111
protected const MESSAGE_TYPE = PushMessage::class;
12-
protected const EXPIRED_MESSAGE = 'Expired device token.';
12+
protected const EXPIRED_MESSAGE = 'Expired device token';
1313

1414
public function getType(): string
1515
{

src/Utopia/Messaging/Adapter/Push/APNS.php

+5-7
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,11 @@ public function process(PushMessage $message): array
103103
$response->addResultForRecipient($device);
104104
break;
105105
default:
106-
$response->addResultForRecipient(
107-
$device,
108-
$result['response']['reason'] === 'ExpiredToken' ||
109-
$result['response']['reason'] === 'BadDeviceToken'
110-
? $this->getExpiredErrorMessage()
111-
: $result['response']['reason'],
112-
);
106+
$error = ($result['response']['reason'] ?? null) === 'ExpiredToken' || ($result['response']['reason'] ?? null) === 'BadDeviceToken'
107+
? $this->getExpiredErrorMessage()
108+
: $result['response']['reason'];
109+
110+
$response->addResultForRecipient($device, $error);
113111
break;
114112
}
115113
}

src/Utopia/Messaging/Adapter/Push/FCM.php

+8-13
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class FCM extends PushAdapter
1515
protected const GOOGLE_TOKEN_URL = 'https://www.googleapis.com/oauth2/v4/token';
1616

1717
/**
18-
* @param string $serviceAccountJSON Service account JSON file contents
18+
* @param string $serviceAccountJSON Service account JSON file contents
1919
*/
2020
public function __construct(
2121
private string $serviceAccountJSON,
@@ -142,21 +142,16 @@ protected function process(PushMessage $message): array
142142
foreach ($results as $index => $result) {
143143
if ($result['statusCode'] === 200) {
144144
$response->incrementDeliveredTo();
145-
}
146-
147-
if (isset($result['response']['error'])) {
148-
$response->addResultForRecipient(
149-
$message->getTo()[$index],
150-
$result['response']['error']['status'] === 'UNREGISTERED' ||
151-
$result['response']['error']['status'] === 'INVALID_ARGUMENT'
145+
$response->addResultForRecipient($message->getTo()[$index]);
146+
} else {
147+
$error =
148+
($result['response']['error']['status'] ?? null) === 'UNREGISTERED'
149+
|| ($result['response']['error']['status'] ?? null) === 'NOT_FOUND'
152150
? $this->getExpiredErrorMessage()
153-
: $result['response']['error']['message'] ?? ''
154-
);
151+
: $result['response']['error']['message'] ?? 'Unknown error';
155152

156-
continue;
153+
$response->addResultForRecipient($message->getTo()[$index], $error);
157154
}
158-
159-
$response->addResultForRecipient($message->getTo()[$index]);
160155
}
161156

162157
return $response->toArray();

src/Utopia/Messaging/Adapter/SMS/Msg91.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ protected function process(SMSMessage $message): array
7272
}
7373
} else {
7474
foreach ($message->getTo() as $to) {
75-
$response->addResultForRecipient($to, 'Unknown Error.');
75+
$response->addResultForRecipient($to, 'Unknown error');
7676
}
7777
}
7878

src/Utopia/Messaging/Adapter/SMS/Telesign.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ protected function process(SMSMessage $message): array
6666
}
6767
} else {
6868
foreach ($message->getTo() as $to) {
69-
$response->addResultForRecipient($to, $result['response']['errors'][0]['description']);
69+
if (!\is_null($result['response']['errors'][0]['description'] ?? null)) {
70+
$response->addResultForRecipient($to, $result['response']['errors'][0]['description']);
71+
} else {
72+
$response->addResultForRecipient($to, 'Unknown error');
73+
}
7074
}
7175
}
7276

src/Utopia/Messaging/Adapter/SMS/TextMagic.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ protected function process(SMSMessage $message): array
6868
}
6969
} else {
7070
foreach ($message->getTo() as $to) {
71-
$response->addResultForRecipient($to, $result['response']['message'] ?? '');
71+
if (!\is_null($result['response']['message'] ?? null)) {
72+
$response->addResultForRecipient($to, $result['response']['message']);
73+
} else {
74+
$response->addResultForRecipient($to, 'Unknown error');
75+
}
7276
}
7377
}
7478

src/Utopia/Messaging/Adapter/SMS/Twilio.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ protected function process(SMSMessage $message): array
5555
$response->setDeliveredTo(1);
5656
$response->addResultForRecipient($message->getTo()[0]);
5757
} else {
58-
$response->addResultForRecipient($message->getTo()[0], $result['response']['message'] ?? '');
58+
if (!\is_null($result['response']['message'] ?? null)) {
59+
$response->addResultForRecipient($message->getTo()[0], $result['response']['message']);
60+
} else {
61+
$response->addResultForRecipient($message->getTo()[0], 'Unknown error');
62+
}
5963
}
6064

6165
return $response->toArray();

src/Utopia/Messaging/Adapter/SMS/Vonage.php

+8-6
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,15 @@ protected function process(SMS $message): array
5757
]),
5858
);
5959

60-
switch ($result['response']['messages'][0]['status']) {
61-
case 0:
62-
$response->setDeliveredTo(1);
63-
$response->addResultForRecipient($result['response']['messages'][0]['to']);
64-
break;
65-
default:
60+
if (($result['response']['messages'][0]['status'] ?? null) === 0) {
61+
$response->setDeliveredTo(1);
62+
$response->addResultForRecipient($result['response']['messages'][0]['to']);
63+
} else {
64+
if (!\is_null($result['response']['messages'][0]['error-text'] ?? null)) {
6665
$response->addResultForRecipient($message->getTo()[0], $result['response']['messages'][0]['error-text']);
66+
} else {
67+
$response->addResultForRecipient($message->getTo()[0], 'Unknown error');
68+
}
6769
}
6870

6971
return $response->toArray();

0 commit comments

Comments
 (0)