@checkfirst/nestjs-outlook 3.1.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -103
- package/dist/entities/microsoft-user.entity.d.ts +11 -0
- package/dist/entities/microsoft-user.entity.js +67 -0
- package/dist/entities/microsoft-user.entity.js.map +1 -0
- package/dist/entities/outlook-webhook-subscription.entity.d.ts +0 -2
- package/dist/entities/outlook-webhook-subscription.entity.js +0 -10
- package/dist/entities/outlook-webhook-subscription.entity.js.map +1 -1
- package/dist/enums/event-types.enum.d.ts +1 -2
- package/dist/enums/event-types.enum.js +1 -2
- package/dist/enums/event-types.enum.js.map +1 -1
- package/dist/microsoft-outlook.module.js +6 -1
- package/dist/microsoft-outlook.module.js.map +1 -1
- package/dist/migrations/1699000000000-AddMicrosoftUserTable.d.ts +5 -0
- package/dist/migrations/1699000000000-AddMicrosoftUserTable.js +104 -0
- package/dist/migrations/1699000000000-AddMicrosoftUserTable.js.map +1 -0
- package/dist/repositories/outlook-webhook-subscription.repository.d.ts +1 -1
- package/dist/repositories/outlook-webhook-subscription.repository.js +1 -4
- package/dist/repositories/outlook-webhook-subscription.repository.js.map +1 -1
- package/dist/services/auth/microsoft-auth.service.d.ts +10 -4
- package/dist/services/auth/microsoft-auth.service.js +137 -53
- package/dist/services/auth/microsoft-auth.service.js.map +1 -1
- package/dist/services/calendar/calendar.service.d.ts +6 -8
- package/dist/services/calendar/calendar.service.js +48 -57
- package/dist/services/calendar/calendar.service.js.map +1 -1
- package/dist/services/email/email.service.d.ts +2 -5
- package/dist/services/email/email.service.js +16 -36
- package/dist/services/email/email.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -2,17 +2,19 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
|
2
2
|
import { TokenResponse } from '../../interfaces/outlook/token-response.interface';
|
|
3
3
|
import { CalendarService } from '../calendar/calendar.service';
|
|
4
4
|
import { EmailService } from '../email/email.service';
|
|
5
|
-
import { Subscription } from '@microsoft/microsoft-graph-types';
|
|
6
5
|
import { MicrosoftOutlookConfig } from '../../interfaces/config/outlook-config.interface';
|
|
7
6
|
import { MicrosoftCsrfTokenRepository } from '../../repositories/microsoft-csrf-token.repository';
|
|
8
7
|
import { StateObject } from '../../interfaces/microsoft-auth/state-object.interface';
|
|
9
8
|
import { PermissionScope } from '../../enums/permission-scope.enum';
|
|
9
|
+
import { Repository } from 'typeorm';
|
|
10
|
+
import { MicrosoftUser } from '../../entities/microsoft-user.entity';
|
|
10
11
|
export declare class MicrosoftAuthService {
|
|
11
12
|
private readonly eventEmitter;
|
|
12
13
|
private readonly calendarService;
|
|
13
14
|
private readonly emailService;
|
|
14
15
|
private readonly microsoftConfig;
|
|
15
16
|
private readonly csrfTokenRepository;
|
|
17
|
+
private readonly microsoftUserRepository;
|
|
16
18
|
private readonly logger;
|
|
17
19
|
private readonly clientId;
|
|
18
20
|
private readonly clientSecret;
|
|
@@ -23,7 +25,7 @@ export declare class MicrosoftAuthService {
|
|
|
23
25
|
private readonly defaultScopes;
|
|
24
26
|
private readonly CSRF_TOKEN_EXPIRY;
|
|
25
27
|
private subscriptionInProgress;
|
|
26
|
-
constructor(eventEmitter: EventEmitter2, calendarService: CalendarService, emailService: EmailService, microsoftConfig: MicrosoftOutlookConfig, csrfTokenRepository: MicrosoftCsrfTokenRepository);
|
|
28
|
+
constructor(eventEmitter: EventEmitter2, calendarService: CalendarService, emailService: EmailService, microsoftConfig: MicrosoftOutlookConfig, csrfTokenRepository: MicrosoftCsrfTokenRepository, microsoftUserRepository: Repository<MicrosoftUser>);
|
|
27
29
|
private mapToMicrosoftScopes;
|
|
28
30
|
private buildRedirectUri;
|
|
29
31
|
cleanupExpiredTokens(): Promise<void>;
|
|
@@ -31,10 +33,14 @@ export declare class MicrosoftAuthService {
|
|
|
31
33
|
parseState(state: string): StateObject | null;
|
|
32
34
|
validateCsrfToken(token: string, timestamp?: number): Promise<string | null>;
|
|
33
35
|
getLoginUrl(userId: string, scopes?: PermissionScope[]): Promise<string>;
|
|
36
|
+
private saveMicrosoftUser;
|
|
37
|
+
private getMicrosoftUserTokenInfo;
|
|
38
|
+
getUserAccessTokenByExternalUserId(externalUserId: string): Promise<string>;
|
|
39
|
+
getUserAccessTokenByUserId(internalUserId: number | string): Promise<string>;
|
|
40
|
+
private processTokenInfo;
|
|
34
41
|
exchangeCodeForToken(code: string, state: string): Promise<TokenResponse>;
|
|
35
42
|
private setupSubscriptions;
|
|
36
|
-
refreshAccessToken(refreshToken: string, userId
|
|
37
|
-
renewWebhookSubscription(subscriptionId: string, accessToken: string, refreshToken: string, scopes?: PermissionScope[]): Promise<Subscription>;
|
|
43
|
+
refreshAccessToken(refreshToken: string, userId: number): Promise<string>;
|
|
38
44
|
private hasCalendarPermission;
|
|
39
45
|
private hasEmailPermission;
|
|
40
46
|
isTokenExpired(tokenExpiry: Date, bufferMinutes?: number): boolean;
|
|
@@ -17,7 +17,6 @@ exports.MicrosoftAuthService = void 0;
|
|
|
17
17
|
const common_1 = require("@nestjs/common");
|
|
18
18
|
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
19
19
|
const axios_1 = require("axios");
|
|
20
|
-
const qs = require("querystring");
|
|
21
20
|
const calendar_service_1 = require("../calendar/calendar.service");
|
|
22
21
|
const email_service_1 = require("../email/email.service");
|
|
23
22
|
const constants_1 = require("../../constants");
|
|
@@ -26,13 +25,17 @@ const crypto = require("crypto");
|
|
|
26
25
|
const schedule_1 = require("@nestjs/schedule");
|
|
27
26
|
const microsoft_csrf_token_repository_1 = require("../../repositories/microsoft-csrf-token.repository");
|
|
28
27
|
const permission_scope_enum_1 = require("../../enums/permission-scope.enum");
|
|
28
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
29
|
+
const typeorm_2 = require("typeorm");
|
|
30
|
+
const microsoft_user_entity_1 = require("../../entities/microsoft-user.entity");
|
|
29
31
|
let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
30
|
-
constructor(eventEmitter, calendarService, emailService, microsoftConfig, csrfTokenRepository) {
|
|
32
|
+
constructor(eventEmitter, calendarService, emailService, microsoftConfig, csrfTokenRepository, microsoftUserRepository) {
|
|
31
33
|
this.eventEmitter = eventEmitter;
|
|
32
34
|
this.calendarService = calendarService;
|
|
33
35
|
this.emailService = emailService;
|
|
34
36
|
this.microsoftConfig = microsoftConfig;
|
|
35
37
|
this.csrfTokenRepository = csrfTokenRepository;
|
|
38
|
+
this.microsoftUserRepository = microsoftUserRepository;
|
|
36
39
|
this.logger = new common_1.Logger(MicrosoftAuthService_1.name);
|
|
37
40
|
this.tenantId = 'common';
|
|
38
41
|
this.requiredScopes = ['offline_access', 'User.Read'];
|
|
@@ -165,6 +168,82 @@ let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
|
165
168
|
this.logger.log(`FINAL MICROSOFT LOGIN URL: ${authorizeUrl}`);
|
|
166
169
|
return authorizeUrl;
|
|
167
170
|
}
|
|
171
|
+
async saveMicrosoftUser(externalUserId, accessToken, refreshToken, expiresIn, scopes) {
|
|
172
|
+
let user = await this.microsoftUserRepository.findOne({
|
|
173
|
+
where: { externalUserId: externalUserId, isActive: true }
|
|
174
|
+
});
|
|
175
|
+
if (!user) {
|
|
176
|
+
user = new microsoft_user_entity_1.MicrosoftUser();
|
|
177
|
+
user.externalUserId = externalUserId;
|
|
178
|
+
}
|
|
179
|
+
user.accessToken = accessToken;
|
|
180
|
+
user.refreshToken = refreshToken;
|
|
181
|
+
user.tokenExpiry = new Date(Date.now() + expiresIn * 1000);
|
|
182
|
+
user.scopes = scopes;
|
|
183
|
+
user.isActive = true;
|
|
184
|
+
await this.microsoftUserRepository.save(user);
|
|
185
|
+
}
|
|
186
|
+
async getMicrosoftUserTokenInfo(externalUserId) {
|
|
187
|
+
const user = await this.microsoftUserRepository.findOne({
|
|
188
|
+
where: { externalUserId: externalUserId, isActive: true }
|
|
189
|
+
});
|
|
190
|
+
if (!user) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
accessToken: user.accessToken,
|
|
195
|
+
refreshToken: user.refreshToken,
|
|
196
|
+
tokenExpiry: user.tokenExpiry,
|
|
197
|
+
scopes: user.scopes,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
async getUserAccessTokenByExternalUserId(externalUserId) {
|
|
201
|
+
try {
|
|
202
|
+
const userInfo = await this.getMicrosoftUserTokenInfo(externalUserId);
|
|
203
|
+
if (!userInfo) {
|
|
204
|
+
throw new Error(`No token information found for user ${externalUserId}`);
|
|
205
|
+
}
|
|
206
|
+
const user = await this.microsoftUserRepository.findOne({
|
|
207
|
+
where: { externalUserId: externalUserId, isActive: true }
|
|
208
|
+
});
|
|
209
|
+
if (!user) {
|
|
210
|
+
throw new Error(`Could not find user record for ${externalUserId}`);
|
|
211
|
+
}
|
|
212
|
+
return await this.processTokenInfo(userInfo, user.id);
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
this.logger.error(`Error getting access token for user ${externalUserId}:`, error);
|
|
216
|
+
throw new Error(`Failed to get valid access token: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async getUserAccessTokenByUserId(internalUserId) {
|
|
220
|
+
try {
|
|
221
|
+
const user = await this.microsoftUserRepository.findOne({
|
|
222
|
+
where: { id: typeof internalUserId === 'string' ? parseInt(internalUserId, 10) : internalUserId }
|
|
223
|
+
});
|
|
224
|
+
if (!user) {
|
|
225
|
+
throw new Error(`No Microsoft user found with internal ID ${String(internalUserId)}`);
|
|
226
|
+
}
|
|
227
|
+
return await this.processTokenInfo({
|
|
228
|
+
accessToken: user.accessToken,
|
|
229
|
+
refreshToken: user.refreshToken,
|
|
230
|
+
tokenExpiry: user.tokenExpiry,
|
|
231
|
+
scopes: user.scopes
|
|
232
|
+
}, user.id);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
this.logger.error(`Error getting access token for internal user ID ${String(internalUserId)}:`, error);
|
|
236
|
+
throw new Error(`Failed to get valid access token: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
async processTokenInfo(tokenInfo, userId) {
|
|
240
|
+
if (!this.isTokenExpired(tokenInfo.tokenExpiry)) {
|
|
241
|
+
return tokenInfo.accessToken;
|
|
242
|
+
}
|
|
243
|
+
this.logger.log(`Access token for user ID ${String(userId)} is expired, refreshing...`);
|
|
244
|
+
const accessToken = await this.refreshAccessToken(tokenInfo.refreshToken, userId);
|
|
245
|
+
return accessToken;
|
|
246
|
+
}
|
|
168
247
|
async exchangeCodeForToken(code, state) {
|
|
169
248
|
const stateData = this.parseState(state);
|
|
170
249
|
if (!(stateData === null || stateData === void 0 ? void 0 : stateData.userId)) {
|
|
@@ -199,11 +278,12 @@ let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
|
199
278
|
refresh_token: tokenResponse.data.refresh_token || '',
|
|
200
279
|
expires_in: tokenResponse.data.expires_in,
|
|
201
280
|
};
|
|
202
|
-
await
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
281
|
+
await this.saveMicrosoftUser(stateData.userId, tokenData.access_token, tokenData.refresh_token, tokenData.expires_in, scopeString);
|
|
282
|
+
await Promise.resolve(this.eventEmitter.emit(event_types_enum_1.OutlookEventTypes.USER_AUTHENTICATED, stateData.userId, {
|
|
283
|
+
externalUserId: stateData.userId,
|
|
284
|
+
scopes: scopesToUse
|
|
285
|
+
}));
|
|
286
|
+
await this.setupSubscriptions(stateData.userId, scopesToUse);
|
|
207
287
|
return tokenData;
|
|
208
288
|
}
|
|
209
289
|
catch (error) {
|
|
@@ -211,17 +291,18 @@ let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
|
211
291
|
throw new Error('Failed to exchange code for token');
|
|
212
292
|
}
|
|
213
293
|
}
|
|
214
|
-
async setupSubscriptions(userId,
|
|
215
|
-
|
|
216
|
-
|
|
294
|
+
async setupSubscriptions(userId, scopes = this.defaultScopes) {
|
|
295
|
+
const userIdNum = parseInt(userId, 10);
|
|
296
|
+
if (this.subscriptionInProgress.get(userIdNum)) {
|
|
297
|
+
this.logger.log(`Subscription setup already in progress for user ${userId}`);
|
|
217
298
|
return;
|
|
218
299
|
}
|
|
219
300
|
try {
|
|
220
|
-
this.subscriptionInProgress.set(
|
|
301
|
+
this.subscriptionInProgress.set(userIdNum, true);
|
|
221
302
|
if (this.hasCalendarPermission(scopes)) {
|
|
222
303
|
try {
|
|
223
|
-
await this.calendarService.createWebhookSubscription(userId
|
|
224
|
-
this.logger.log(`Successfully created calendar webhook subscription for user ${
|
|
304
|
+
await this.calendarService.createWebhookSubscription(userId);
|
|
305
|
+
this.logger.log(`Successfully created calendar webhook subscription for user ${userId}`);
|
|
225
306
|
}
|
|
226
307
|
catch (calendarError) {
|
|
227
308
|
this.logger.error(`Failed to create calendar webhook subscription: ${calendarError instanceof Error ? calendarError.message : 'Unknown error'}`);
|
|
@@ -229,8 +310,8 @@ let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
|
229
310
|
}
|
|
230
311
|
if (this.hasEmailPermission(scopes)) {
|
|
231
312
|
try {
|
|
232
|
-
await this.emailService.createWebhookSubscription(userId
|
|
233
|
-
this.logger.log(`Successfully created email webhook subscription for user ${
|
|
313
|
+
await this.emailService.createWebhookSubscription(userId);
|
|
314
|
+
this.logger.log(`Successfully created email webhook subscription for user ${userId}`);
|
|
234
315
|
}
|
|
235
316
|
catch (emailError) {
|
|
236
317
|
this.logger.error(`Failed to create email webhook subscription: ${emailError instanceof Error ? emailError.message : 'Unknown error'}`);
|
|
@@ -241,59 +322,60 @@ let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
|
241
322
|
this.logger.error(`Error setting up subscriptions: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
242
323
|
}
|
|
243
324
|
finally {
|
|
244
|
-
this.subscriptionInProgress.set(
|
|
325
|
+
this.subscriptionInProgress.set(userIdNum, false);
|
|
245
326
|
}
|
|
246
327
|
}
|
|
247
|
-
async refreshAccessToken(refreshToken, userId
|
|
328
|
+
async refreshAccessToken(refreshToken, userId) {
|
|
248
329
|
try {
|
|
249
|
-
const
|
|
250
|
-
|
|
330
|
+
const user = await this.microsoftUserRepository.findOne({
|
|
331
|
+
where: { id: userId }
|
|
332
|
+
});
|
|
333
|
+
if (!user) {
|
|
334
|
+
throw new Error(`No user found with ID ${String(userId)}`);
|
|
335
|
+
}
|
|
336
|
+
const scopeString = user.scopes;
|
|
337
|
+
this.logger.debug(`Using saved scopes from database: ${scopeString}`);
|
|
338
|
+
this.logger.debug(`Refreshing token for user ID ${String(userId)} with scopes: ${scopeString}`);
|
|
339
|
+
const payload = new URLSearchParams({
|
|
251
340
|
client_id: this.clientId,
|
|
252
341
|
client_secret: this.clientSecret,
|
|
253
342
|
refresh_token: refreshToken,
|
|
254
343
|
grant_type: 'refresh_token',
|
|
255
344
|
scope: scopeString,
|
|
256
|
-
};
|
|
257
|
-
const response = await axios_1.default.post(this.tokenEndpoint, qs.stringify(payload), {
|
|
258
|
-
headers: {
|
|
259
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
260
|
-
},
|
|
261
345
|
});
|
|
262
|
-
|
|
263
|
-
|
|
346
|
+
try {
|
|
347
|
+
const response = await axios_1.default.post(this.tokenEndpoint, payload.toString(), {
|
|
348
|
+
headers: {
|
|
349
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
350
|
+
},
|
|
351
|
+
});
|
|
352
|
+
if (!response.data.access_token || !response.data.expires_in) {
|
|
353
|
+
throw new Error('Invalid token refresh response from Microsoft');
|
|
354
|
+
}
|
|
355
|
+
const newRefreshToken = response.data.refresh_token || refreshToken;
|
|
356
|
+
const newAccessToken = response.data.access_token;
|
|
357
|
+
user.accessToken = newAccessToken;
|
|
358
|
+
user.refreshToken = newRefreshToken;
|
|
359
|
+
user.tokenExpiry = new Date(Date.now() + response.data.expires_in * 1000);
|
|
360
|
+
await this.microsoftUserRepository.save(user);
|
|
361
|
+
return newAccessToken;
|
|
264
362
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
await Promise.resolve(this.eventEmitter.emit(event_types_enum_1.OutlookEventTypes.AUTH_TOKENS_UPDATE, userIdStr, calendarIdStr, tokenData));
|
|
363
|
+
catch (error) {
|
|
364
|
+
if (axios_1.default.isAxiosError(error) && error.response) {
|
|
365
|
+
this.logger.error(`Microsoft API error refreshing token for user ID ${String(userId)}: Status: ${String(error.response.status)}, Response: ${JSON.stringify(error.response.data)}`);
|
|
366
|
+
const errorData = error.response.data;
|
|
367
|
+
if (errorData.error === 'invalid_grant') {
|
|
368
|
+
throw new Error('Microsoft refresh token is invalid or expired');
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
throw error;
|
|
275
372
|
}
|
|
276
|
-
return tokenData;
|
|
277
373
|
}
|
|
278
374
|
catch (error) {
|
|
279
|
-
this.logger.error(
|
|
375
|
+
this.logger.error(`Error refreshing access token for user ID ${String(userId)}:`, error);
|
|
280
376
|
throw new Error('Failed to refresh access token from Microsoft');
|
|
281
377
|
}
|
|
282
378
|
}
|
|
283
|
-
async renewWebhookSubscription(subscriptionId, accessToken, refreshToken, scopes = this.defaultScopes) {
|
|
284
|
-
var _a;
|
|
285
|
-
try {
|
|
286
|
-
return await this.calendarService.renewWebhookSubscription(subscriptionId, accessToken);
|
|
287
|
-
}
|
|
288
|
-
catch (error) {
|
|
289
|
-
if (axios_1.default.isAxiosError(error) && ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401) {
|
|
290
|
-
this.logger.log('Access token expired during webhook renewal, refreshing token...');
|
|
291
|
-
const tokenResponse = await this.refreshAccessToken(refreshToken, undefined, undefined, scopes);
|
|
292
|
-
return await this.calendarService.renewWebhookSubscription(subscriptionId, tokenResponse.access_token);
|
|
293
|
-
}
|
|
294
|
-
throw error;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
379
|
hasCalendarPermission(scopes) {
|
|
298
380
|
return scopes.some(scope => scope === permission_scope_enum_1.PermissionScope.CALENDAR_READ ||
|
|
299
381
|
scope === permission_scope_enum_1.PermissionScope.CALENDAR_WRITE);
|
|
@@ -320,8 +402,10 @@ exports.MicrosoftAuthService = MicrosoftAuthService = MicrosoftAuthService_1 = _
|
|
|
320
402
|
__param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => calendar_service_1.CalendarService))),
|
|
321
403
|
__param(2, (0, common_1.Inject)((0, common_1.forwardRef)(() => email_service_1.EmailService))),
|
|
322
404
|
__param(3, (0, common_1.Inject)(constants_1.MICROSOFT_CONFIG)),
|
|
405
|
+
__param(5, (0, typeorm_1.InjectRepository)(microsoft_user_entity_1.MicrosoftUser)),
|
|
323
406
|
__metadata("design:paramtypes", [event_emitter_1.EventEmitter2,
|
|
324
407
|
calendar_service_1.CalendarService,
|
|
325
|
-
email_service_1.EmailService, Object, microsoft_csrf_token_repository_1.MicrosoftCsrfTokenRepository
|
|
408
|
+
email_service_1.EmailService, Object, microsoft_csrf_token_repository_1.MicrosoftCsrfTokenRepository,
|
|
409
|
+
typeorm_2.Repository])
|
|
326
410
|
], MicrosoftAuthService);
|
|
327
411
|
//# sourceMappingURL=microsoft-auth.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"microsoft-auth.service.js","sourceRoot":"","sources":["../../../src/services/auth/microsoft-auth.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"microsoft-auth.service.js","sourceRoot":"","sources":["../../../src/services/auth/microsoft-auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
2
|
import { Event, Subscription, ChangeNotification } from '../../types';
|
|
3
3
|
import { MicrosoftAuthService } from '../auth/microsoft-auth.service';
|
|
4
|
-
import { TokenResponse } from '../../interfaces/outlook/token-response.interface';
|
|
5
4
|
import { OutlookWebhookSubscriptionRepository } from '../../repositories/outlook-webhook-subscription.repository';
|
|
6
5
|
import { MicrosoftOutlookConfig } from '../../interfaces/config/outlook-config.interface';
|
|
7
6
|
export declare class CalendarService {
|
|
@@ -11,15 +10,14 @@ export declare class CalendarService {
|
|
|
11
10
|
private readonly microsoftConfig;
|
|
12
11
|
private readonly logger;
|
|
13
12
|
constructor(microsoftAuthService: MicrosoftAuthService, webhookSubscriptionRepository: OutlookWebhookSubscriptionRepository, eventEmitter: EventEmitter2, microsoftConfig: MicrosoftOutlookConfig);
|
|
14
|
-
getDefaultCalendarId(
|
|
15
|
-
createEvent(event: Partial<Event>,
|
|
13
|
+
getDefaultCalendarId(externalUserId: string): Promise<string>;
|
|
14
|
+
createEvent(event: Partial<Event>, externalUserId: string, calendarId: string): Promise<{
|
|
16
15
|
event: Event;
|
|
17
|
-
tokensRefreshed: boolean;
|
|
18
|
-
refreshedTokens?: TokenResponse;
|
|
19
16
|
}>;
|
|
20
|
-
createWebhookSubscription(
|
|
21
|
-
renewWebhookSubscription(subscriptionId: string,
|
|
22
|
-
|
|
17
|
+
createWebhookSubscription(externalUserId: string): Promise<Subscription>;
|
|
18
|
+
renewWebhookSubscription(subscriptionId: string, externalUserId: string): Promise<Subscription>;
|
|
19
|
+
renewWebhookSubscriptionByUserId(subscriptionId: string, internalUserId: number | string): Promise<Subscription>;
|
|
20
|
+
deleteWebhookSubscription(subscriptionId: string, externalUserId: string): Promise<boolean>;
|
|
23
21
|
renewSubscriptions(): Promise<void>;
|
|
24
22
|
handleOutlookWebhook(notificationItem: ChangeNotification): Promise<{
|
|
25
23
|
success: boolean;
|
|
@@ -31,8 +31,9 @@ let CalendarService = CalendarService_1 = class CalendarService {
|
|
|
31
31
|
this.microsoftConfig = microsoftConfig;
|
|
32
32
|
this.logger = new common_1.Logger(CalendarService_1.name);
|
|
33
33
|
}
|
|
34
|
-
async getDefaultCalendarId(
|
|
34
|
+
async getDefaultCalendarId(externalUserId) {
|
|
35
35
|
try {
|
|
36
|
+
const accessToken = await this.microsoftAuthService.getUserAccessTokenByExternalUserId(externalUserId);
|
|
36
37
|
const response = await axios_1.default.get('https://graph.microsoft.com/v1.0/me/calendar', {
|
|
37
38
|
headers: {
|
|
38
39
|
Authorization: `Bearer ${accessToken}`,
|
|
@@ -49,31 +50,12 @@ let CalendarService = CalendarService_1 = class CalendarService {
|
|
|
49
50
|
throw new Error('Failed to get calendar ID from Microsoft');
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
|
-
async createEvent(event,
|
|
53
|
+
async createEvent(event, externalUserId, calendarId) {
|
|
53
54
|
try {
|
|
54
|
-
|
|
55
|
-
let currentRefreshToken = refreshToken;
|
|
56
|
-
let tokensRefreshed = false;
|
|
57
|
-
let refreshedTokens;
|
|
58
|
-
if (currentRefreshToken && tokenExpiry) {
|
|
59
|
-
if (this.microsoftAuthService.isTokenExpired(new Date(tokenExpiry))) {
|
|
60
|
-
this.logger.log('Access token is expired or will expire soon. Refreshing token...');
|
|
61
|
-
try {
|
|
62
|
-
refreshedTokens = await this.microsoftAuthService.refreshAccessToken(currentRefreshToken, userId, calendarId);
|
|
63
|
-
currentAccessToken = refreshedTokens.access_token || currentAccessToken;
|
|
64
|
-
currentRefreshToken = refreshedTokens.refresh_token || currentRefreshToken;
|
|
65
|
-
tokensRefreshed = true;
|
|
66
|
-
this.logger.log('Token refreshed successfully');
|
|
67
|
-
}
|
|
68
|
-
catch (refreshError) {
|
|
69
|
-
this.logger.error('Failed to refresh token:', refreshError);
|
|
70
|
-
throw new Error('Failed to refresh token');
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
55
|
+
const accessToken = await this.microsoftAuthService.getUserAccessTokenByExternalUserId(externalUserId);
|
|
74
56
|
const client = microsoft_graph_client_1.Client.init({
|
|
75
57
|
authProvider: (done) => {
|
|
76
|
-
done(null,
|
|
58
|
+
done(null, accessToken);
|
|
77
59
|
},
|
|
78
60
|
});
|
|
79
61
|
const createdEvent = await client
|
|
@@ -81,8 +63,6 @@ let CalendarService = CalendarService_1 = class CalendarService {
|
|
|
81
63
|
.post(event);
|
|
82
64
|
return {
|
|
83
65
|
event: createdEvent,
|
|
84
|
-
tokensRefreshed,
|
|
85
|
-
refreshedTokens,
|
|
86
66
|
};
|
|
87
67
|
}
|
|
88
68
|
catch (error) {
|
|
@@ -91,8 +71,9 @@ let CalendarService = CalendarService_1 = class CalendarService {
|
|
|
91
71
|
throw new Error(`Failed to create Outlook calendar event: ${errorMessage}`);
|
|
92
72
|
}
|
|
93
73
|
}
|
|
94
|
-
async createWebhookSubscription(
|
|
74
|
+
async createWebhookSubscription(externalUserId) {
|
|
95
75
|
try {
|
|
76
|
+
const accessToken = await this.microsoftAuthService.getUserAccessTokenByExternalUserId(externalUserId);
|
|
96
77
|
const expirationDateTime = new Date();
|
|
97
78
|
expirationDateTime.setHours(expirationDateTime.getHours() + 72);
|
|
98
79
|
const appUrl = this.microsoftConfig.backendBaseUrl || 'http://localhost:3000';
|
|
@@ -105,7 +86,7 @@ let CalendarService = CalendarService_1 = class CalendarService {
|
|
|
105
86
|
lifecycleNotificationUrl: notificationUrl,
|
|
106
87
|
resource: '/me/events',
|
|
107
88
|
expirationDateTime: expirationDateTime.toISOString(),
|
|
108
|
-
clientState: `user_${
|
|
89
|
+
clientState: `user_${externalUserId}_${Math.random().toString(36).substring(2, 15)}`,
|
|
109
90
|
};
|
|
110
91
|
this.logger.debug(`Creating webhook subscription with notificationUrl: ${notificationUrl}`);
|
|
111
92
|
this.logger.debug(`Subscription data: ${JSON.stringify(subscriptionData)}`);
|
|
@@ -115,29 +96,54 @@ let CalendarService = CalendarService_1 = class CalendarService {
|
|
|
115
96
|
'Content-Type': 'application/json',
|
|
116
97
|
},
|
|
117
98
|
});
|
|
118
|
-
this.logger.log(`Created webhook subscription ${
|
|
99
|
+
this.logger.log(`Created webhook subscription ${response.data.id || 'unknown'} for user ${externalUserId}`);
|
|
100
|
+
const internalUserId = parseInt(externalUserId, 10);
|
|
119
101
|
await this.webhookSubscriptionRepository.saveSubscription({
|
|
120
102
|
subscriptionId: response.data.id,
|
|
121
|
-
userId,
|
|
103
|
+
userId: internalUserId,
|
|
122
104
|
resource: response.data.resource,
|
|
123
105
|
changeType: response.data.changeType,
|
|
124
106
|
clientState: response.data.clientState || '',
|
|
125
107
|
notificationUrl: response.data.notificationUrl,
|
|
126
108
|
expirationDateTime: response.data.expirationDateTime ? new Date(response.data.expirationDateTime) : new Date(),
|
|
127
|
-
accessToken,
|
|
128
|
-
refreshToken,
|
|
129
109
|
});
|
|
130
|
-
this.logger.debug(`Stored subscription
|
|
110
|
+
this.logger.debug(`Stored subscription`);
|
|
111
|
+
return response.data;
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
this.logger.error('Failed to create webhook subscription:', error);
|
|
115
|
+
throw new Error('Failed to create webhook subscription');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async renewWebhookSubscription(subscriptionId, externalUserId) {
|
|
119
|
+
try {
|
|
120
|
+
const accessToken = await this.microsoftAuthService.getUserAccessTokenByExternalUserId(externalUserId);
|
|
121
|
+
const expirationDateTime = new Date();
|
|
122
|
+
expirationDateTime.setHours(expirationDateTime.getHours() + 72);
|
|
123
|
+
const renewalData = {
|
|
124
|
+
expirationDateTime: expirationDateTime.toISOString(),
|
|
125
|
+
};
|
|
126
|
+
const response = await axios_1.default.patch(`https://graph.microsoft.com/v1.0/subscriptions/${subscriptionId}`, renewalData, {
|
|
127
|
+
headers: {
|
|
128
|
+
Authorization: `Bearer ${accessToken}`,
|
|
129
|
+
'Content-Type': 'application/json',
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
if (response.data.expirationDateTime) {
|
|
133
|
+
await this.webhookSubscriptionRepository.updateSubscriptionExpiration(subscriptionId, new Date(response.data.expirationDateTime));
|
|
134
|
+
}
|
|
135
|
+
this.logger.log(`Renewed webhook subscription: ${subscriptionId}`);
|
|
131
136
|
return response.data;
|
|
132
137
|
}
|
|
133
138
|
catch (error) {
|
|
134
139
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
135
|
-
this.logger.error(`Failed to
|
|
136
|
-
throw new Error(`Failed to
|
|
140
|
+
this.logger.error(`Failed to renew webhook subscription: ${errorMessage}`);
|
|
141
|
+
throw new Error(`Failed to renew webhook subscription: ${errorMessage}`);
|
|
137
142
|
}
|
|
138
143
|
}
|
|
139
|
-
async
|
|
144
|
+
async renewWebhookSubscriptionByUserId(subscriptionId, internalUserId) {
|
|
140
145
|
try {
|
|
146
|
+
const accessToken = await this.microsoftAuthService.getUserAccessTokenByUserId(internalUserId);
|
|
141
147
|
const expirationDateTime = new Date();
|
|
142
148
|
expirationDateTime.setHours(expirationDateTime.getHours() + 72);
|
|
143
149
|
const renewalData = {
|
|
@@ -161,9 +167,10 @@ let CalendarService = CalendarService_1 = class CalendarService {
|
|
|
161
167
|
throw new Error(`Failed to renew webhook subscription: ${errorMessage}`);
|
|
162
168
|
}
|
|
163
169
|
}
|
|
164
|
-
async deleteWebhookSubscription(subscriptionId,
|
|
170
|
+
async deleteWebhookSubscription(subscriptionId, externalUserId) {
|
|
165
171
|
var _a;
|
|
166
172
|
try {
|
|
173
|
+
const accessToken = await this.microsoftAuthService.getUserAccessTokenByExternalUserId(externalUserId);
|
|
167
174
|
await axios_1.default.delete(`https://graph.microsoft.com/v1.0/subscriptions/${subscriptionId}`, {
|
|
168
175
|
headers: {
|
|
169
176
|
Authorization: `Bearer ${accessToken}`,
|
|
@@ -187,31 +194,15 @@ let CalendarService = CalendarService_1 = class CalendarService {
|
|
|
187
194
|
}
|
|
188
195
|
async renewSubscriptions() {
|
|
189
196
|
try {
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
const subscriptions = await this.webhookSubscriptionRepository.findSubscriptionsNeedingRenewal(24);
|
|
193
|
-
if (subscriptions.length === 0) {
|
|
197
|
+
const expiringSubscriptions = await this.webhookSubscriptionRepository.findSubscriptionsNeedingRenewal(24);
|
|
198
|
+
if (expiringSubscriptions.length === 0) {
|
|
194
199
|
this.logger.debug('No subscriptions need renewal');
|
|
195
200
|
return;
|
|
196
201
|
}
|
|
197
|
-
this.logger.log(`Found ${String(
|
|
198
|
-
for (const subscription of
|
|
202
|
+
this.logger.log(`Found ${String(expiringSubscriptions.length)} subscriptions that need renewal`);
|
|
203
|
+
for (const subscription of expiringSubscriptions) {
|
|
199
204
|
try {
|
|
200
|
-
|
|
201
|
-
if (subscription.refreshToken) {
|
|
202
|
-
try {
|
|
203
|
-
const tokenResponse = await this.microsoftAuthService.refreshAccessToken(subscription.refreshToken, subscription.userId);
|
|
204
|
-
accessToken = tokenResponse.access_token;
|
|
205
|
-
const newExpirationDate = new Date();
|
|
206
|
-
newExpirationDate.setHours(newExpirationDate.getHours() + 72);
|
|
207
|
-
await this.webhookSubscriptionRepository.updateSubscriptionExpiration(subscription.subscriptionId, newExpirationDate, accessToken);
|
|
208
|
-
}
|
|
209
|
-
catch (refreshError) {
|
|
210
|
-
this.logger.error(`Failed to refresh token for subscription ${subscription.subscriptionId}:`, refreshError);
|
|
211
|
-
continue;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
await this.renewWebhookSubscription(subscription.subscriptionId, accessToken);
|
|
205
|
+
await this.renewWebhookSubscriptionByUserId(subscription.subscriptionId, subscription.userId);
|
|
215
206
|
}
|
|
216
207
|
catch (error) {
|
|
217
208
|
this.logger.error(`Failed to renew subscription ${subscription.subscriptionId}:`, error);
|