microsoft / microsoft/BotFramework-DirectLineJS
Application crashes when refresh token returns an error
未关闭
@compulim 已经在做这个了。
开始于 2024年7月24日。
bug
- 主要语言
- TypeScript
- 星标
- 199
- 派生
- 133
- PR 合并指标
- 30 天内没有已合并 PR
描述
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',
...
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
评估
这个 Issue 还没有评估数据。