@twilio/ беседы Необработанный отказ клиента JS SDK с истекшим токеном
Может кто-нибудь указать, как правильно обрабатывать @twilio / разговоры
Client.create
ошибки без использования обработки
unhandledrejection
событие:
import { Client as ConversationsClient } from "@twilio/conversations";
// ...
try {
this.conversationsClient = await ConversationsClient.create('expired token');
} catch (err) {
// err: Unable to connect: Access Token expired or expiration date invalid
console.error(err);
return;
}
// but later results in an unhandled rejection
Я отследил код:
// simplified stack trace (reversed):
ConversationsClient.create()
// browser/client.js:
new Client()
_this.sessionPromise = _this.services.session.initialize();
this.services.syncClient.list()
twilio-sync/lib/client.js:
this._createList()
this.services.network.post(this.services.config.listsUri, requestBody).then(response => response.body);
// POST to https://cds.us1.twilio.com/v3/Lists
// which is implemented as:
return this.executeWithRetry(() => this.transport.post(uri, headers, body), retryWhenThrottled);
executeWithRetry(request, retryWhenThrottled = true) {
return new Promise((resolve, reject) => {
let codesToRetryOn = [502, 503, 504];
if (retryWhenThrottled) {
codesToRetryOn.push(429);
}
let retrier = new operation_retrier_1.Retrier(this.backoffConfig());
retrier.on('attempt', () => {
request()
.then(result => retrier.succeeded(result))
.catch(err => {
if (codesToRetryOn.includes(err.status)) {
let delayOverride = parseInt(err.headers ? err.headers['Retry-After'] : null);
retrier.failed(mapTransportError(err), isNaN(delayOverride) ? null : delayOverride * 1000);
}
else if (err.message === 'Twilsock disconnected') {
// Ugly hack. We must make a proper exceptions for twilsock
retrier.failed(mapTransportError(err));
}
else {
// Fatal error
retrier.removeAllListeners();
retrier.cancel();
reject(mapTransportError(err)); // THIS IS UNHANDLED
}
});
});
Конечно, я бы не стал делать это намеренно, но, испытав это, как я могу быть уверен, что библиотека не отвергнет обещания в других местах?
Действия по воспроизведению:
- получить демонстрацию разговора
git clone git@github.com:TwilioDevEd/conversations-demo.git
- установите myToken на просроченный
- откройте localhost:3000 и войдите
Затронутая версия: 1.1.0.