@checkfirst/nestjs-outlook 7.1.2 → 7.1.5
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/dist/entities/microsoft-user.entity.d.ts +2 -0
- package/dist/entities/microsoft-user.entity.js +11 -0
- package/dist/entities/microsoft-user.entity.js.map +1 -1
- package/dist/entities/outlook-webhook-subscription.entity.d.ts +1 -0
- package/dist/entities/outlook-webhook-subscription.entity.js +5 -0
- package/dist/entities/outlook-webhook-subscription.entity.js.map +1 -1
- package/dist/enums/event-types.enum.d.ts +3 -0
- package/dist/enums/event-types.enum.js +3 -0
- package/dist/enums/event-types.enum.js.map +1 -1
- package/dist/enums/microsoft-user-status.enum.d.ts +4 -0
- package/dist/enums/microsoft-user-status.enum.js +9 -0
- package/dist/enums/microsoft-user-status.enum.js.map +1 -0
- package/dist/errors/microsoft-refresh-token-invalid.error.d.ts +4 -0
- package/dist/errors/microsoft-refresh-token-invalid.error.js +12 -0
- package/dist/errors/microsoft-refresh-token-invalid.error.js.map +1 -0
- package/dist/migrations/1776600000000-AddLastNotificationAtToSubscriptions.d.ts +5 -0
- package/dist/migrations/1776600000000-AddLastNotificationAtToSubscriptions.js +18 -0
- package/dist/migrations/1776600000000-AddLastNotificationAtToSubscriptions.js.map +1 -0
- package/dist/migrations/1776700000000-AddMicrosoftUserStatusColumn.d.ts +5 -0
- package/dist/migrations/1776700000000-AddMicrosoftUserStatusColumn.js +20 -0
- package/dist/migrations/1776700000000-AddMicrosoftUserStatusColumn.js.map +1 -0
- package/dist/repositories/outlook-webhook-subscription.repository.d.ts +3 -1
- package/dist/repositories/outlook-webhook-subscription.repository.js +19 -10
- package/dist/repositories/outlook-webhook-subscription.repository.js.map +1 -1
- package/dist/services/auth/microsoft-auth.service.d.ts +4 -3
- package/dist/services/auth/microsoft-auth.service.js +54 -11
- package/dist/services/auth/microsoft-auth.service.js.map +1 -1
- package/dist/services/calendar/calendar.service.d.ts +3 -11
- package/dist/services/calendar/calendar.service.js +23 -247
- package/dist/services/calendar/calendar.service.js.map +1 -1
- package/dist/services/calendar/lifecycle-event-handler.service.d.ts +3 -1
- package/dist/services/calendar/lifecycle-event-handler.service.js +35 -5
- package/dist/services/calendar/lifecycle-event-handler.service.js.map +1 -1
- package/dist/services/subscription/microsoft-subscription.service.d.ts +35 -0
- package/dist/services/subscription/microsoft-subscription.service.js +504 -2
- package/dist/services/subscription/microsoft-subscription.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -20,10 +20,12 @@ const lifecycle_event_types_enum_1 = require("../../enums/lifecycle-event-types.
|
|
|
20
20
|
const event_types_enum_1 = require("../../enums/event-types.enum");
|
|
21
21
|
const outlook_webhook_subscription_repository_1 = require("../../repositories/outlook-webhook-subscription.repository");
|
|
22
22
|
const calendar_service_1 = require("./calendar.service");
|
|
23
|
+
const microsoft_subscription_service_1 = require("../subscription/microsoft-subscription.service");
|
|
23
24
|
const user_id_converter_service_1 = require("../shared/user-id-converter.service");
|
|
24
25
|
let LifecycleEventHandlerService = LifecycleEventHandlerService_1 = class LifecycleEventHandlerService {
|
|
25
|
-
constructor(calendarService, subscriptionRepository, eventEmitter, userIdConverter) {
|
|
26
|
+
constructor(calendarService, subscriptionService, subscriptionRepository, eventEmitter, userIdConverter) {
|
|
26
27
|
this.calendarService = calendarService;
|
|
28
|
+
this.subscriptionService = subscriptionService;
|
|
27
29
|
this.subscriptionRepository = subscriptionRepository;
|
|
28
30
|
this.eventEmitter = eventEmitter;
|
|
29
31
|
this.userIdConverter = userIdConverter;
|
|
@@ -82,7 +84,7 @@ let LifecycleEventHandlerService = LifecycleEventHandlerService_1 = class Lifecy
|
|
|
82
84
|
};
|
|
83
85
|
}
|
|
84
86
|
this.logger.log(`[REAUTHORIZATION_REQUIRED] Attempting to renew subscription ${subscriptionId}`);
|
|
85
|
-
const renewedSubscription = await this.
|
|
87
|
+
const renewedSubscription = await this.subscriptionService.renewWebhookSubscription(subscriptionId, subscription.userId);
|
|
86
88
|
const expirationDate = renewedSubscription.expirationDateTime
|
|
87
89
|
? new Date(renewedSubscription.expirationDateTime).toISOString()
|
|
88
90
|
: 'unknown';
|
|
@@ -126,15 +128,43 @@ let LifecycleEventHandlerService = LifecycleEventHandlerService_1 = class Lifecy
|
|
|
126
128
|
}
|
|
127
129
|
await this.subscriptionRepository.deactivateSubscription(subscriptionId);
|
|
128
130
|
this.logger.log(`[SUBSCRIPTION_REMOVED] Deactivated subscription ${subscriptionId} in database`);
|
|
131
|
+
const externalUserId = await this.userIdConverter.internalToExternal(subscription.userId);
|
|
132
|
+
let recreated = false;
|
|
133
|
+
try {
|
|
134
|
+
this.logger.log(`[SUBSCRIPTION_REMOVED] Attempting to re-create subscription for user ${subscription.userId}`);
|
|
135
|
+
await this.subscriptionService.createWebhookSubscription(externalUserId);
|
|
136
|
+
recreated = true;
|
|
137
|
+
this.logger.log(`[SUBSCRIPTION_REMOVED] Successfully re-created subscription for user ${subscription.userId}`);
|
|
138
|
+
this.eventEmitter.emit(event_types_enum_1.OutlookEventTypes.SUBSCRIPTION_RECREATED, {
|
|
139
|
+
subscriptionId,
|
|
140
|
+
tenantId,
|
|
141
|
+
userId: subscription.userId,
|
|
142
|
+
reason: 'subscription_removed',
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch (recreateError) {
|
|
146
|
+
const recreateMsg = recreateError instanceof Error ? recreateError.message : 'Unknown error';
|
|
147
|
+
this.logger.error(`[SUBSCRIPTION_REMOVED] Failed to re-create subscription for user ${subscription.userId}: ${recreateMsg}`);
|
|
148
|
+
this.eventEmitter.emit(event_types_enum_1.OutlookEventTypes.SUBSCRIPTION_RECREATION_FAILED, {
|
|
149
|
+
subscriptionId,
|
|
150
|
+
tenantId,
|
|
151
|
+
userId: subscription.userId,
|
|
152
|
+
reason: 'subscription_removed',
|
|
153
|
+
error: recreateMsg,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
129
156
|
this.eventEmitter.emit(event_types_enum_1.OutlookEventTypes.LIFECYCLE_SUBSCRIPTION_REMOVED, {
|
|
130
157
|
subscriptionId,
|
|
131
158
|
tenantId,
|
|
132
159
|
userId: subscription.userId,
|
|
133
160
|
resource: subscription.resource,
|
|
161
|
+
recreated,
|
|
134
162
|
});
|
|
135
163
|
return {
|
|
136
164
|
success: true,
|
|
137
|
-
message:
|
|
165
|
+
message: recreated
|
|
166
|
+
? 'Subscription removed and re-created successfully'
|
|
167
|
+
: 'Subscription marked as inactive (re-creation failed)',
|
|
138
168
|
};
|
|
139
169
|
}
|
|
140
170
|
catch (error) {
|
|
@@ -159,8 +189,7 @@ let LifecycleEventHandlerService = LifecycleEventHandlerService_1 = class Lifecy
|
|
|
159
189
|
}
|
|
160
190
|
this.logger.log(`[MISSED] Starting delta sync for user ${subscription.userId} to recover missed changes`);
|
|
161
191
|
const externalUserId = await this.userIdConverter.internalToExternal(subscription.userId);
|
|
162
|
-
const
|
|
163
|
-
const changesCount = changes.length;
|
|
192
|
+
const changesCount = await this.calendarService.syncDeltaChanges(externalUserId, subscriptionId);
|
|
164
193
|
this.logger.log(`[MISSED] Delta sync completed. Found ${changesCount} changes for subscription ${subscriptionId}`);
|
|
165
194
|
this.eventEmitter.emit(event_types_enum_1.OutlookEventTypes.LIFECYCLE_MISSED, {
|
|
166
195
|
subscriptionId,
|
|
@@ -194,6 +223,7 @@ exports.LifecycleEventHandlerService = LifecycleEventHandlerService = LifecycleE
|
|
|
194
223
|
(0, common_1.Injectable)(),
|
|
195
224
|
__param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => calendar_service_1.CalendarService))),
|
|
196
225
|
__metadata("design:paramtypes", [calendar_service_1.CalendarService,
|
|
226
|
+
microsoft_subscription_service_1.MicrosoftSubscriptionService,
|
|
197
227
|
outlook_webhook_subscription_repository_1.OutlookWebhookSubscriptionRepository,
|
|
198
228
|
event_emitter_1.EventEmitter2,
|
|
199
229
|
user_id_converter_service_1.UserIdConverterService])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-event-handler.service.js","sourceRoot":"","sources":["../../../src/services/calendar/lifecycle-event-handler.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwE;AACxE,yDAAsD;AACtD,uFAA4E;AAC5E,mEAAiE;AACjE,wHAAkH;AAClH,yDAAqD;
|
|
1
|
+
{"version":3,"file":"lifecycle-event-handler.service.js","sourceRoot":"","sources":["../../../src/services/calendar/lifecycle-event-handler.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
|
+
import { Repository } from 'typeorm';
|
|
3
|
+
import { Subscription } from '../../types';
|
|
4
|
+
import { MicrosoftAuthService } from '../auth/microsoft-auth.service';
|
|
5
|
+
import { OutlookWebhookSubscriptionRepository } from '../../repositories/outlook-webhook-subscription.repository';
|
|
6
|
+
import { OutlookWebhookSubscription } from '../../entities/outlook-webhook-subscription.entity';
|
|
7
|
+
import { MicrosoftUser } from '../../entities/microsoft-user.entity';
|
|
8
|
+
import { MicrosoftOutlookConfig } from '../../interfaces/config/outlook-config.interface';
|
|
9
|
+
import { UserIdConverterService } from '../shared/user-id-converter.service';
|
|
10
|
+
import { GraphRateLimiterService } from '../shared/graph-rate-limiter.service';
|
|
1
11
|
export interface MicrosoftSubscription {
|
|
2
12
|
id: string;
|
|
3
13
|
resource: string;
|
|
@@ -23,16 +33,41 @@ export interface SubscriptionCleanupResult {
|
|
|
23
33
|
}>;
|
|
24
34
|
}
|
|
25
35
|
export declare class MicrosoftSubscriptionService {
|
|
36
|
+
private readonly microsoftAuthService;
|
|
37
|
+
private readonly webhookSubscriptionRepository;
|
|
38
|
+
private readonly eventEmitter;
|
|
39
|
+
private readonly microsoftConfig;
|
|
40
|
+
private readonly microsoftUserRepository;
|
|
41
|
+
private readonly userIdConverter;
|
|
42
|
+
private readonly rateLimiter;
|
|
26
43
|
private readonly logger;
|
|
27
44
|
private readonly graphApiBaseUrl;
|
|
28
45
|
private readonly msAuthUrl;
|
|
46
|
+
constructor(microsoftAuthService: MicrosoftAuthService, webhookSubscriptionRepository: OutlookWebhookSubscriptionRepository, eventEmitter: EventEmitter2, microsoftConfig: MicrosoftOutlookConfig, microsoftUserRepository: Repository<MicrosoftUser>, userIdConverter: UserIdConverterService, rateLimiter: GraphRateLimiterService);
|
|
29
47
|
getActiveSubscriptions(accessToken: string): Promise<MicrosoftSubscription[]>;
|
|
30
48
|
getActiveSubscriptionsForClient(clientId: number, accessToken: string): Promise<MicrosoftSubscription[]>;
|
|
31
49
|
getActiveSubscriptionsForUser(userId: number, accessToken: string): Promise<MicrosoftSubscription[]>;
|
|
32
50
|
deleteSubscription(subscriptionId: string, accessToken: string): Promise<void>;
|
|
51
|
+
createWebhookSubscription(externalUserId: string): Promise<Subscription>;
|
|
52
|
+
renewWebhookSubscription(subscriptionId: string, internalUserId: number): Promise<Subscription>;
|
|
53
|
+
deleteWebhookSubscription(subscriptionId: string, userId: string | number): Promise<boolean>;
|
|
54
|
+
getSubscription(subscriptionId: string): Promise<OutlookWebhookSubscription | null>;
|
|
55
|
+
getActiveSubscriptionForUser(externalUserId: string): Promise<string | null>;
|
|
56
|
+
trackNotificationReceived(subscriptionId: string): void;
|
|
33
57
|
cleanupSubscriptions(options: SubscriptionCleanupOptions): Promise<SubscriptionCleanupResult>;
|
|
34
58
|
cleanupSubscriptionsForClient(clientId: number, accessToken: string): Promise<SubscriptionCleanupResult>;
|
|
35
59
|
cleanupSubscriptionsForUser(userId: number, accessToken: string): Promise<SubscriptionCleanupResult>;
|
|
60
|
+
cleanupSubscriptionsForUserAndResource(externalUserId: string, resource: string): Promise<SubscriptionCleanupResult>;
|
|
36
61
|
revokeTokens(refreshToken: string): Promise<void>;
|
|
37
62
|
fullCleanup(refreshToken: string, accessToken: string, filter?: SubscriptionFilter): Promise<SubscriptionCleanupResult>;
|
|
63
|
+
verifySubscriptionHealth(): Promise<void>;
|
|
64
|
+
private findCorruptedUserIds;
|
|
65
|
+
private filterExpiringSoon;
|
|
66
|
+
private groupByUserId;
|
|
67
|
+
private detectStaleSubscriptions;
|
|
68
|
+
private verifySubscriptionsForUser;
|
|
69
|
+
private verifySubscriptionsBatch;
|
|
70
|
+
private handleBatchResponseItem;
|
|
71
|
+
private maybeRenewIfExpiringSoon;
|
|
72
|
+
private handleSubscriptionNotFoundAtMicrosoft;
|
|
38
73
|
}
|