-
Notifications
You must be signed in to change notification settings - Fork 128
Open
Labels
bugIndicates an unexpected problem or an unintended behavior.Indicates an unexpected problem or an unintended behavior.
Description
If tokens/refresh returns an error, the application crashes, and there is no way to catch and handle it properly.
Reproduced by:
import { DirectLine, ConnectionStatus } from 'botframework-directlinejs';
import WebSocket, { WebSocketServer } from 'ws';
import nock from 'nock';
import xhr2 from 'xhr2';
global.XMLHttpRequest = xhr2;
global.WebSocket = WebSocket;
const wss = new WebSocketServer({ port: 2222 });
wss.on('connection', function connection(ws) {
ws.on('error', console.error);
ws.send('{"activities": []}');
});
nock('https://directline.botframework.com')
.persist()
.post(uri => uri.startsWith('/v3/directline/conversations'))
.reply(
200,
JSON.stringify({
conversationId: '123',
token: '456',
streamUrl: 'ws://localhost:2222'
})
)
.post(uri => uri.includes('/refresh'))
.reply(403);
const directLine = new DirectLine({ token: '456' });
directLine.activity$
.subscribe(
(activity) => console.log('Activity received: ', activity),
(err) => console.error('**1 Error: ', err)
);
directLine.connectionStatus$
.subscribe(
(connectionStatus) => console.log('DirectLine status: ' + ConnectionStatus[connectionStatus]),
(err) => console.error('**2 Error: ', err)
);
process.on('uncaughtException', (err) => {
console.error('**3 Error: ', err);
process.exit(1);
});If you don't want to wait 15 minutes, reduce the hardcoded value of lifetimeRefreshToken :)
Output:
DirectLine status: Connecting
DirectLine status: Online
DirectLine status: ExpiredToken
DirectLine status: ExpiredToken
**3 Error: [AjaxError: ajax error 403] {
xhr: <ref *1> XMLHttpRequest {
onloadstart: null,
onprogress: null,
onabort: null,
onerror: null,
onload: null,
ontimeout: [Function: xhrTimeout] {
request: [Object],
subscriber: [AjaxSubscriber],
progressSubscriber: undefined
},
onloadend: null,
_listeners: {},
onreadystatechange: [Function: xhrReadyStateChange] {
subscriber: [AjaxSubscriber],
progressSubscriber: undefined,
request: [Object]
},
_anonymous: undefined,
readyState: 4,
response: null,
responseText: null,
responseType: 'json',
responseURL: 'https://directline.botframework.com/v3/directline/tokens/refresh',
status: 403,
statusText: 'Forbidden',
...
Metadata
Metadata
Assignees
Labels
bugIndicates an unexpected problem or an unintended behavior.Indicates an unexpected problem or an unintended behavior.