From 3c06087ea3afc28e927a296a577d80ec49e68460 Mon Sep 17 00:00:00 2001 From: Peter Lasne Date: Thu, 7 Mar 2024 13:01:09 -0500 Subject: [PATCH 1/5] getting presence on login no longer causes sign-out --- .../src/statefulClient/StatefulGraphChatClient.ts | 4 +++- .../providers/mgt-msal2-provider/src/Msal2Provider.ts | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/mgt-chat/src/statefulClient/StatefulGraphChatClient.ts b/packages/mgt-chat/src/statefulClient/StatefulGraphChatClient.ts index ebaa316deb..e2edb4845e 100644 --- a/packages/mgt-chat/src/statefulClient/StatefulGraphChatClient.ts +++ b/packages/mgt-chat/src/statefulClient/StatefulGraphChatClient.ts @@ -267,7 +267,9 @@ class StatefulGraphChatClient extends BaseStatefulClient { /** * Attempts to create the graph and client objects. This can succeed during construction if the - * Provider has already logged in. If not, it will be tried again when the Provider logs in. + * Provider has already logged in. If not, it will be tried again when the Provider logs in. Only + * calling tryCreateGraphNotificationClient() from onLoginStateChanged() only works if the Chat + * component is on the page at the time there is a sign-in - not always a guarantee. */ private tryCreateGraphNotificationClient() { try { diff --git a/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts b/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts index ea3aa54791..99dc150da0 100644 --- a/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts +++ b/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts @@ -25,7 +25,8 @@ import { InteractionRequiredAuthError, SsoSilentRequest, EventMessage, - AuthenticationResult + BrowserAuthError, + EventType } from '@azure/msal-browser'; import { AuthenticationProviderOptions } from '@microsoft/microsoft-graph-client'; @@ -424,7 +425,7 @@ export class Msal2Provider extends IProvider { } private readonly handleMsalEvent = (message: EventMessage): void => { - if (message.eventType === 'msal:acquireTokenSuccess' && 'scopes' in message.payload) { + if (message.eventType === EventType.ACQUIRE_TOKEN_SUCCESS && 'scopes' in message.payload) { this.approvedScopes = message.payload.scopes; } }; @@ -761,6 +762,9 @@ export class Msal2Provider extends IProvider { throw popUpErr; } } + } else if (e instanceof BrowserAuthError && e.message.indexOf('no_network_connectivity') > -1) { + // don't force a signout; this can maybe be recovered from + throw e; } else { // if we don't know what the error is, just ask the user to sign in again this.setState(ProviderState.SignedOut); From 9e435bb77c4172dd8286a2f648c6108a391977ba Mon Sep 17 00:00:00 2001 From: Peter Lasne Date: Thu, 7 Mar 2024 13:50:29 -0500 Subject: [PATCH 2/5] added post_request_failed --- packages/providers/mgt-msal2-provider/src/Msal2Provider.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts b/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts index 99dc150da0..b66aba5b3e 100644 --- a/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts +++ b/packages/providers/mgt-msal2-provider/src/Msal2Provider.ts @@ -765,6 +765,9 @@ export class Msal2Provider extends IProvider { } else if (e instanceof BrowserAuthError && e.message.indexOf('no_network_connectivity') > -1) { // don't force a signout; this can maybe be recovered from throw e; + } else if (e instanceof BrowserAuthError && e.message.indexOf('post_request_failed') > -1) { + // don't force a signout; this can happen if there is a break in network during a call + throw e; } else { // if we don't know what the error is, just ask the user to sign in again this.setState(ProviderState.SignedOut); From dc6b06ffcef5cf72209c80c674de98144adc99d0 Mon Sep 17 00:00:00 2001 From: Peter Lasne Date: Thu, 7 Mar 2024 15:40:08 -0500 Subject: [PATCH 3/5] added more logs --- packages/mgt-chat/src/components/Chat/Chat.tsx | 2 +- .../src/components/ChatList/ChatList.tsx | 3 +++ .../StatefulGraphChatListClient.ts | 18 ++++++++++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/mgt-chat/src/components/Chat/Chat.tsx b/packages/mgt-chat/src/components/Chat/Chat.tsx index 86a96f8d9a..257a7eebc1 100644 --- a/packages/mgt-chat/src/components/Chat/Chat.tsx +++ b/packages/mgt-chat/src/components/Chat/Chat.tsx @@ -214,7 +214,7 @@ export const Chat = ({ chatId }: IMgtChatProps) => { )} {chatState.status === 'error' && ( - + )}
diff --git a/packages/mgt-chat/src/components/ChatList/ChatList.tsx b/packages/mgt-chat/src/components/ChatList/ChatList.tsx index da188bb3d9..026bf2375f 100644 --- a/packages/mgt-chat/src/components/ChatList/ChatList.tsx +++ b/packages/mgt-chat/src/components/ChatList/ChatList.tsx @@ -329,6 +329,9 @@ export const ChatList = ({ {chatListState?.status === 'server connection lost' && ( )} + {chatListState?.status === 'fatal error' && ( + + )}
)} diff --git a/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts b/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts index aa756b64d2..50fe774679 100644 --- a/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts +++ b/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts @@ -246,8 +246,16 @@ class StatefulGraphChatListClient implements StatefulClient } // set promise; load and append - this._loadMorePromise = this.loadAndAppendChatThreads('', [], state.chatThreads.length + this.chatThreadsPerPage); - await this._loadMorePromise; + try { + this._loadMorePromise = this.loadAndAppendChatThreads( + '', + [], + state.chatThreads.length + this.chatThreadsPerPage + ); + await this._loadMorePromise; + } catch (e) { + error('Failed to load more chat threads; aborting...', e); + } } finally { this._loadMorePromise = undefined; } @@ -275,6 +283,9 @@ class StatefulGraphChatListClient implements StatefulClient draft.chatThreads = []; }); + // log + log('loading chat threads...'); + // try several times to load more chats try { let loaded = false; @@ -297,6 +308,9 @@ class StatefulGraphChatListClient implements StatefulClient } finally { this._loadPromise = undefined; } + + // log + log('successfully loaded chat threads.'); } private async handleChatThreadsResponse( From 2c691ce166eed43ee8da2df844de9e9aebab600e Mon Sep 17 00:00:00 2001 From: Peter Lasne Date: Thu, 7 Mar 2024 15:42:45 -0500 Subject: [PATCH 4/5] added 2 more logs --- .../src/statefulClient/StatefulGraphChatListClient.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts b/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts index 50fe774679..8b468b02d4 100644 --- a/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts +++ b/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts @@ -245,6 +245,9 @@ class StatefulGraphChatListClient implements StatefulClient return; } + // log + log('loading more chat threads...'); + // set promise; load and append try { this._loadMorePromise = this.loadAndAppendChatThreads( @@ -259,6 +262,9 @@ class StatefulGraphChatListClient implements StatefulClient } finally { this._loadMorePromise = undefined; } + + // log + log('successfully loaded more chat threads.'); } /** From 8d410a035a9f5afc5aa2bfacbd81983ec78ac494 Mon Sep 17 00:00:00 2001 From: Peter Lasne Date: Thu, 7 Mar 2024 15:56:04 -0500 Subject: [PATCH 5/5] removed try...catch in loadAndAppendChatThreads --- .../statefulClient/StatefulGraphChatListClient.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts b/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts index 8b468b02d4..27cee7f1dd 100644 --- a/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts +++ b/packages/mgt-chat/src/statefulClient/StatefulGraphChatListClient.ts @@ -354,14 +354,10 @@ class StatefulGraphChatListClient implements StatefulClient return; } - try { - const response = !nextLink - ? await loadChatThreads(this._graph, maxItems > 50 ? 50 : maxItems) // max page count cannot exceed 50 per documentation - : await loadChatThreadsByPage(this._graph, nextLink.split('?')[1]); - await this.handleChatThreadsResponse(response, items, maxItems); - } catch (err) { - error(err); - } + const response = !nextLink + ? await loadChatThreads(this._graph, maxItems > 50 ? 50 : maxItems) // max page count cannot exceed 50 per documentation + : await loadChatThreadsByPage(this._graph, nextLink.split('?')[1]); + await this.handleChatThreadsResponse(response, items, maxItems); } public clearSelectedChat = () => {