[Outlook integration] part 2 : GetMessages (#9612)

### Introducing

- mock files in order to setup unit test on parsing outlook messages
- special spec files for development purposes : dev.spec files. They are
CI skipped with xdescribe but very useful for iterating on new messages
format
- main functionality : getMessages. We use microsoft default client to
do so, using the $batch endpoint to group calls by 20

### documentation
final touch to add troubleshooting tips
This commit is contained in:
Guillim
2025-01-15 09:48:57 +01:00
committed by GitHub
parent eaa68424f5
commit fc484bde2d
15 changed files with 867 additions and 27 deletions

View File

@ -17,6 +17,8 @@ export class EmailAliasManagerService {
let handleAliases: string[];
switch (connectedAccount.provider) {
case 'microsoft':
return;
case 'google':
handleAliases =
await this.googleEmailAliasManagerService.getHandleAliases(

View File

@ -20,6 +20,7 @@ export class RefreshAccessTokenService {
workspaceId: string,
): Promise<string> {
const refreshToken = connectedAccount.refreshToken;
let accessToken: string;
if (!refreshToken) {
throw new RefreshAccessTokenException(
@ -28,33 +29,39 @@ export class RefreshAccessTokenService {
);
}
let accessToken: string;
switch (connectedAccount.provider) {
case 'microsoft':
return '';
case 'google': {
try {
accessToken = await this.refreshAccessToken(
connectedAccount,
refreshToken,
);
} catch (error) {
throw new RefreshAccessTokenException(
`Error refreshing access token for connected account ${connectedAccount.id} in workspace ${workspaceId}: ${error.message}`,
RefreshAccessTokenExceptionCode.REFRESH_ACCESS_TOKEN_FAILED,
);
}
try {
accessToken = await this.refreshAccessToken(
connectedAccount,
refreshToken,
);
} catch (error) {
throw new RefreshAccessTokenException(
`Error refreshing access token for connected account ${connectedAccount.id} in workspace ${workspaceId}: ${error.message}`,
RefreshAccessTokenExceptionCode.REFRESH_ACCESS_TOKEN_FAILED,
);
const connectedAccountRepository =
await this.twentyORMManager.getRepository<ConnectedAccountWorkspaceEntity>(
'connectedAccount',
);
await connectedAccountRepository.update(
{ id: connectedAccount.id },
{
accessToken,
},
);
return accessToken;
}
default:
throw new Error('Provider not supported for access token refresh');
}
const connectedAccountRepository =
await this.twentyORMManager.getRepository<ConnectedAccountWorkspaceEntity>(
'connectedAccount',
);
await connectedAccountRepository.update(
{ id: connectedAccount.id },
{
accessToken,
},
);
return accessToken;
}
async refreshAccessToken(