Hatalar
Her başarısızlık hata fırlatır. İki sınıf ve her API hatasında bir istek id'si.
Hata yakalama
import { OpenEmailApiError, OpenEmailNetworkError, openemail } from '@openemail/sdk' try { await openemail.emails.send(message)} catch (error) { if (error instanceof OpenEmailApiError) { if (error.isValidation) console.error(error.code, error.param, error.message) if (error.isPermission) console.error(await openemail.addresses.list()) if (error.isRateLimited) console.error('try again in', error.retryAfterSeconds, 'seconds') console.error(error.status, error.requestId) } if (error instanceof OpenEmailNetworkError && error.isTimeout) console.error('no answer in time') throw error}Bir gönderimdeki permission_error genellikle çalışma alanından değil ANAHTARIN gönderim kapsamından, yani kendisine verilmemiş bir alan adından veya adresten kaynaklanır; örneğin, addresses.list() çağrısının bu anahtarın hangi adreslerden gönderebileceğini söylediği çıktıyı bu yüzden yazdırır.
Sınıflar
| Sınıf | Ne zaman |
|---|---|
| `OpenEmailApiError` | API yanıt verdi, ama başarıyla değil. status, type, code, param, docUrl, requestId ve retryAfterSeconds taşır. |
| `OpenEmailNetworkError` | Hiç yanıt gelmedi: DNS, TLS, kopan bir bağlantı, zaman aşımı veya kendi AbortSignal'ınız. cause taşır ve neden zaman aşımıysa isTimeout true olur. |
| `Error` | Hiçbir şey gönderilmeden önce fırlatılır: eksik veya bozuk bir anahtar, kullanılamaz bir baseUrl, bir tarayıcı, boş bir id. |
| Getter | Şu durumda true |
|---|---|
| `isAuth` | type değeri authentication_error, yani 401: anahtar yok, yanlış türde bir kimlik bilgisi veya bizim vermediğimiz bir anahtar. |
| `isPermission` | permission_error, 403: ihtiyaç duyduğu kapsama veya From adresine sahip olmayan gerçek bir anahtar. |
| `isScopeMissing` | code değeri insufficient_scope, yani eksik kapsamı adıyla belirten 403. |
| `isInvalidRequest` | invalid_request_error, 400: anlaşılamayan bir istek. Boyut tavanını aşan bir mesaj 422 message_too_large olarak döner; dolayısıyla onu yakalayan getter isValidation'dır. |
| `isValidation` | validation_error, 422: şema isteği reddetti ve param hangi alanın sorunlu olduğunu belirtir. |
| `isNotFound` | not_found_error, 404: böyle bir kaynak yok. |
| `isConflict` | conflict_error, 409: kaynak, bu işlemin kendisine yapılabileceği noktayı geçmiş. |
| `isRateLimited` | rate_limit_error, 429. Sunucu bir süre belirttiğinde bekleme süresi retryAfterSeconds içindedir. |
| `isServerError` | status 500 veya üzeri. Destekle iletişime geçerseniz requestId değerini belirtin. |
| `isRetryable` | status 408, 429, 500, 502, 503 veya 504. |
Getter'lar, zarfın donmuş yarısı olan type alanını okur. code bir dizge olarak kalır, çünkü API onun açık ve eklemeli olduğunu garanti eder; bu yüzden tanımadığınız bir kodu type değeri gibi ele alın. Kapalı bir birleşim tipi, yeni bir hata türünü okumanın bedelini bir SDK yükseltmesi yapardı.
API'nin hata zarfı olmayan bir gövde de bir OpenEmailApiError'a dönüşür; type durum kodundan çıkarılır ve code değeri unrecognised_response olur. Gövdesi JSON olmayan bir başarı yanıtı da aynı hatayı fırlatır.
Bir iptal de OpenEmailNetworkError'dur; ister istek sırasında ister bir yeniden denemeden önceki bekleme sırasında gerçekleşsin, ve iptal cause üzerinde saklanır. Kendi iptalinizi bir ağ hatasından ayırmanız gerektiğinde signal.aborted değerine bakın.
requestId
Her OpenEmailApiError, sunucunun gönderdiği istek id'sini hata gövdesinden veya x-request-id başlığından alarak taşır ve bu, hatanızı sunucu günlüğündeki bir satıra bağlayan tek şeydir. Başarılı bir yanıt yalnızca ayrıştırılmış gövdeye çözümlenir, dolayısıyla orada okunacak bir istek id'si yoktur.