@checkfirst/nestjs-outlook 8.0.2 → 9.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/dist/constants.d.ts +2 -0
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/controllers/calendar.controller.js +3 -0
- package/dist/controllers/calendar.controller.js.map +1 -1
- package/dist/controllers/email.controller.js +2 -0
- package/dist/controllers/email.controller.js.map +1 -1
- package/dist/guards/webhook-client-state.guard.d.ts +8 -0
- package/dist/guards/webhook-client-state.guard.js +75 -0
- package/dist/guards/webhook-client-state.guard.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/config/outlook-config.interface.d.ts +10 -0
- package/dist/interfaces/state/redis-like.interface.d.ts +13 -0
- package/dist/interfaces/state/redis-like.interface.js +3 -0
- package/dist/interfaces/state/redis-like.interface.js.map +1 -0
- package/dist/microsoft-outlook.module.js +66 -0
- package/dist/microsoft-outlook.module.js.map +1 -1
- package/dist/repositories/outlook-webhook-subscription.repository.d.ts +1 -0
- package/dist/repositories/outlook-webhook-subscription.repository.js +5 -0
- package/dist/repositories/outlook-webhook-subscription.repository.js.map +1 -1
- package/dist/services/auth/microsoft-auth.service.d.ts +5 -1
- package/dist/services/auth/microsoft-auth.service.js +13 -4
- package/dist/services/auth/microsoft-auth.service.js.map +1 -1
- package/dist/services/calendar/calendar.service.d.ts +1 -1
- package/dist/services/calendar/calendar.service.js +4 -4
- package/dist/services/calendar/calendar.service.js.map +1 -1
- package/dist/services/email/email.service.js +2 -1
- package/dist/services/email/email.service.js.map +1 -1
- package/dist/services/shared/delta-sync.service.d.ts +6 -1
- package/dist/services/shared/delta-sync.service.js +121 -110
- package/dist/services/shared/delta-sync.service.js.map +1 -1
- package/dist/services/shared/graph-rate-limiter.service.d.ts +15 -17
- package/dist/services/shared/graph-rate-limiter.service.js +104 -148
- package/dist/services/shared/graph-rate-limiter.service.js.map +1 -1
- package/dist/services/shared/outlook-lock.store.d.ts +37 -0
- package/dist/services/shared/outlook-lock.store.js +134 -0
- package/dist/services/shared/outlook-lock.store.js.map +1 -0
- package/dist/services/shared/outlook-rate-limit.store.d.ts +59 -0
- package/dist/services/shared/outlook-rate-limit.store.js +235 -0
- package/dist/services/shared/outlook-rate-limit.store.js.map +1 -0
- package/dist/services/subscription/microsoft-subscription.service.d.ts +12 -0
- package/dist/services/subscription/microsoft-subscription.service.js +85 -0
- package/dist/services/subscription/microsoft-subscription.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/outlook-api-executor.util.js +3 -3
- package/dist/utils/outlook-api-executor.util.js.map +1 -1
- package/package.json +3 -1
package/dist/constants.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export declare const MICROSOFT_CONFIG = "MICROSOFT_CONFIG";
|
|
2
|
+
export declare const OUTLOOK_LOCK_STORE = "OUTLOOK_LOCK_STORE";
|
|
3
|
+
export declare const OUTLOOK_RATE_LIMIT_STORE = "OUTLOOK_RATE_LIMIT_STORE";
|
|
2
4
|
export declare const GRAPH_ERROR_CODES: {
|
|
3
5
|
readonly MAILBOX_NOT_ENABLED: "MailboxNotEnabledForRESTAPI";
|
|
4
6
|
};
|
package/dist/constants.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GRAPH_ERROR_CODES = exports.MICROSOFT_CONFIG = void 0;
|
|
3
|
+
exports.GRAPH_ERROR_CODES = exports.OUTLOOK_RATE_LIMIT_STORE = exports.OUTLOOK_LOCK_STORE = exports.MICROSOFT_CONFIG = void 0;
|
|
4
4
|
exports.MICROSOFT_CONFIG = 'MICROSOFT_CONFIG';
|
|
5
|
+
exports.OUTLOOK_LOCK_STORE = 'OUTLOOK_LOCK_STORE';
|
|
6
|
+
exports.OUTLOOK_RATE_LIMIT_STORE = 'OUTLOOK_RATE_LIMIT_STORE';
|
|
5
7
|
exports.GRAPH_ERROR_CODES = {
|
|
6
8
|
MAILBOX_NOT_ENABLED: 'MailboxNotEnabledForRESTAPI',
|
|
7
9
|
};
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AACa,QAAA,gBAAgB,GAAG,kBAAkB,CAAC;AAGtC,QAAA,iBAAiB,GAAG;IAE/B,mBAAmB,EAAE,6BAA6B;CAC1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AACa,QAAA,gBAAgB,GAAG,kBAAkB,CAAC;AAGtC,QAAA,kBAAkB,GAAG,oBAAoB,CAAC;AAC1C,QAAA,wBAAwB,GAAG,0BAA0B,CAAC;AAGtD,QAAA,iBAAiB,GAAG;IAE/B,mBAAmB,EAAE,6BAA6B;CAC1C,CAAC"}
|
|
@@ -21,6 +21,7 @@ const calendar_service_1 = require("../services/calendar/calendar.service");
|
|
|
21
21
|
const outlook_webhook_notification_dto_1 = require("../dto/outlook-webhook-notification.dto");
|
|
22
22
|
const webhook_notification_validator_1 = require("../utils/webhook-notification.validator");
|
|
23
23
|
const lifecycle_event_handler_service_1 = require("../services/calendar/lifecycle-event-handler.service");
|
|
24
|
+
const webhook_client_state_guard_1 = require("../guards/webhook-client-state.guard");
|
|
24
25
|
let CalendarController = CalendarController_1 = class CalendarController {
|
|
25
26
|
constructor(calendarService, lifecycleEventHandler) {
|
|
26
27
|
this.calendarService = calendarService;
|
|
@@ -220,6 +221,7 @@ let CalendarController = CalendarController_1 = class CalendarController {
|
|
|
220
221
|
exports.CalendarController = CalendarController;
|
|
221
222
|
__decorate([
|
|
222
223
|
(0, common_1.Post)('webhook/notification'),
|
|
224
|
+
(0, common_1.UseGuards)(webhook_client_state_guard_1.WebhookClientStateGuard),
|
|
223
225
|
(0, common_1.HttpCode)(200),
|
|
224
226
|
(0, swagger_1.ApiResponse)({
|
|
225
227
|
status: 200,
|
|
@@ -253,6 +255,7 @@ __decorate([
|
|
|
253
255
|
], CalendarController.prototype, "handleCalendarWebhookNotification", null);
|
|
254
256
|
__decorate([
|
|
255
257
|
(0, common_1.Post)('webhook'),
|
|
258
|
+
(0, common_1.UseGuards)(webhook_client_state_guard_1.WebhookClientStateGuard),
|
|
256
259
|
(0, common_1.HttpCode)(200),
|
|
257
260
|
(0, swagger_1.ApiResponse)({
|
|
258
261
|
status: 200,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.controller.js","sourceRoot":"","sources":["../../src/controllers/calendar.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"calendar.controller.js","sourceRoot":"","sources":["../../src/controllers/calendar.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ const swagger_1 = require("@nestjs/swagger");
|
|
|
19
19
|
const email_service_1 = require("../services/email/email.service");
|
|
20
20
|
const outlook_webhook_notification_dto_1 = require("../dto/outlook-webhook-notification.dto");
|
|
21
21
|
const webhook_notification_validator_1 = require("../utils/webhook-notification.validator");
|
|
22
|
+
const webhook_client_state_guard_1 = require("../guards/webhook-client-state.guard");
|
|
22
23
|
let EmailController = EmailController_1 = class EmailController {
|
|
23
24
|
constructor(emailService) {
|
|
24
25
|
this.emailService = emailService;
|
|
@@ -125,6 +126,7 @@ let EmailController = EmailController_1 = class EmailController {
|
|
|
125
126
|
exports.EmailController = EmailController;
|
|
126
127
|
__decorate([
|
|
127
128
|
(0, common_1.Post)('webhook'),
|
|
129
|
+
(0, common_1.UseGuards)(webhook_client_state_guard_1.WebhookClientStateGuard),
|
|
128
130
|
(0, common_1.HttpCode)(200),
|
|
129
131
|
(0, swagger_1.ApiResponse)({
|
|
130
132
|
status: 200,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.controller.js","sourceRoot":"","sources":["../../src/controllers/email.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"email.controller.js","sourceRoot":"","sources":["../../src/controllers/email.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import { OutlookWebhookSubscriptionRepository } from '../repositories/outlook-webhook-subscription.repository';
|
|
3
|
+
export declare class WebhookClientStateGuard implements CanActivate {
|
|
4
|
+
private readonly webhookSubscriptionRepository;
|
|
5
|
+
private readonly logger;
|
|
6
|
+
constructor(webhookSubscriptionRepository: OutlookWebhookSubscriptionRepository);
|
|
7
|
+
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var WebhookClientStateGuard_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.WebhookClientStateGuard = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const outlook_webhook_subscription_repository_1 = require("../repositories/outlook-webhook-subscription.repository");
|
|
16
|
+
let WebhookClientStateGuard = WebhookClientStateGuard_1 = class WebhookClientStateGuard {
|
|
17
|
+
constructor(webhookSubscriptionRepository) {
|
|
18
|
+
this.webhookSubscriptionRepository = webhookSubscriptionRepository;
|
|
19
|
+
this.logger = new common_1.Logger(WebhookClientStateGuard_1.name);
|
|
20
|
+
}
|
|
21
|
+
async canActivate(context) {
|
|
22
|
+
const request = context.switchToHttp().getRequest();
|
|
23
|
+
const validationToken = request.query.validationToken;
|
|
24
|
+
if (validationToken) {
|
|
25
|
+
this.logger.debug('Allowing validation request through');
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
const body = request.body;
|
|
29
|
+
if (!(body === null || body === void 0 ? void 0 : body.value) || !Array.isArray(body.value) || body.value.length === 0) {
|
|
30
|
+
this.logger.debug('No notification items to validate');
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
const validationResults = await Promise.all(body.value.map(async (item, index) => {
|
|
34
|
+
var _a;
|
|
35
|
+
const { subscriptionId, clientState } = item;
|
|
36
|
+
if (!subscriptionId) {
|
|
37
|
+
this.logger.warn(`[SECURITY] Notification item ${index} missing subscriptionId`);
|
|
38
|
+
return { index, valid: false, reason: 'missing_subscription_id' };
|
|
39
|
+
}
|
|
40
|
+
const subscription = await this.webhookSubscriptionRepository.findBySubscriptionId(subscriptionId);
|
|
41
|
+
if (!subscription) {
|
|
42
|
+
this.logger.warn(`[SECURITY] Unknown subscription ID: ${subscriptionId}. ` +
|
|
43
|
+
`Possible replay attack or stale subscription.`);
|
|
44
|
+
return { index, valid: false, reason: 'unknown_subscription' };
|
|
45
|
+
}
|
|
46
|
+
if (subscription.clientState && clientState !== subscription.clientState) {
|
|
47
|
+
this.logger.warn(`[SECURITY] ClientState mismatch for subscription ${subscriptionId}. ` +
|
|
48
|
+
`Expected prefix: user_${subscription.userId}_*, received: ${(_a = clientState === null || clientState === void 0 ? void 0 : clientState.substring(0, 20)) !== null && _a !== void 0 ? _a : 'null'}...`);
|
|
49
|
+
return { index, valid: false, reason: 'client_state_mismatch' };
|
|
50
|
+
}
|
|
51
|
+
return { index, valid: true };
|
|
52
|
+
}));
|
|
53
|
+
const invalidItems = validationResults.filter((r) => !r.valid);
|
|
54
|
+
if (invalidItems.length > 0) {
|
|
55
|
+
this.logger.warn(`[SECURITY] Rejecting webhook: ${invalidItems.length}/${body.value.length} items failed validation. ` +
|
|
56
|
+
`Reasons: ${invalidItems.map((i) => `item[${i.index}]:${i.reason}`).join(', ')}`);
|
|
57
|
+
request.webhookValidation = {
|
|
58
|
+
valid: false,
|
|
59
|
+
invalidItems,
|
|
60
|
+
};
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
request.webhookValidation = {
|
|
64
|
+
valid: true,
|
|
65
|
+
};
|
|
66
|
+
this.logger.debug(`ClientState validated for ${body.value.length} notification item(s)`);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
exports.WebhookClientStateGuard = WebhookClientStateGuard;
|
|
71
|
+
exports.WebhookClientStateGuard = WebhookClientStateGuard = WebhookClientStateGuard_1 = __decorate([
|
|
72
|
+
(0, common_1.Injectable)(),
|
|
73
|
+
__metadata("design:paramtypes", [outlook_webhook_subscription_repository_1.OutlookWebhookSubscriptionRepository])
|
|
74
|
+
], WebhookClientStateGuard);
|
|
75
|
+
//# sourceMappingURL=webhook-client-state.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-client-state.guard.js","sourceRoot":"","sources":["../../src/guards/webhook-client-state.guard.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,10 +5,13 @@ export * from './services/email/email.service';
|
|
|
5
5
|
export * from './services/shared/user-id-converter.service';
|
|
6
6
|
export * from './services/subscription/microsoft-subscription.service';
|
|
7
7
|
export * from './services/shared/graph-rate-limiter.service';
|
|
8
|
+
export * from './services/shared/outlook-lock.store';
|
|
9
|
+
export * from './services/shared/outlook-rate-limit.store';
|
|
8
10
|
export * from './microsoft-outlook.module';
|
|
9
11
|
export * from './interfaces/outlook/token-response.interface';
|
|
10
12
|
export * from './interfaces/config/outlook-config.interface';
|
|
11
13
|
export * from './interfaces/recurrence.interfaces';
|
|
14
|
+
export * from './interfaces/state/redis-like.interface';
|
|
12
15
|
export * from './enums/permission-scope.enum';
|
|
13
16
|
export * from './enums/event-types.enum';
|
|
14
17
|
export * from './enums/show-as-type.enum';
|
package/dist/index.js
CHANGED
|
@@ -21,10 +21,13 @@ __exportStar(require("./services/email/email.service"), exports);
|
|
|
21
21
|
__exportStar(require("./services/shared/user-id-converter.service"), exports);
|
|
22
22
|
__exportStar(require("./services/subscription/microsoft-subscription.service"), exports);
|
|
23
23
|
__exportStar(require("./services/shared/graph-rate-limiter.service"), exports);
|
|
24
|
+
__exportStar(require("./services/shared/outlook-lock.store"), exports);
|
|
25
|
+
__exportStar(require("./services/shared/outlook-rate-limit.store"), exports);
|
|
24
26
|
__exportStar(require("./microsoft-outlook.module"), exports);
|
|
25
27
|
__exportStar(require("./interfaces/outlook/token-response.interface"), exports);
|
|
26
28
|
__exportStar(require("./interfaces/config/outlook-config.interface"), exports);
|
|
27
29
|
__exportStar(require("./interfaces/recurrence.interfaces"), exports);
|
|
30
|
+
__exportStar(require("./interfaces/state/redis-like.interface"), exports);
|
|
28
31
|
__exportStar(require("./enums/permission-scope.enum"), exports);
|
|
29
32
|
__exportStar(require("./enums/event-types.enum"), exports);
|
|
30
33
|
__exportStar(require("./enums/show-as-type.enum"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,yEAAuD;AACvD,uEAAqD;AACrD,yEAAuD;AACvD,iEAA+C;AAC/C,8EAA4D;AAC5D,yFAAuE;AACvE,+EAA6D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,yEAAuD;AACvD,uEAAqD;AACrD,yEAAuD;AACvD,iEAA+C;AAC/C,8EAA4D;AAC5D,yFAAuE;AACvE,+EAA6D;AAC7D,uEAAqD;AACrD,6EAA2D;AAG3D,6DAA2C;AAG3C,gFAA8D;AAC9D,+EAA6D;AAC7D,qEAAmD;AACnD,0EAAwD;AAGxD,gEAA8C;AAC9C,2DAAyC;AACzC,4DAA0C;AAC1C,qEAAmD;AAGnD,8CAA4B;AAG5B,kEAAgD;AAChD,iEAA+C;AAC/C,oEAAkD;AAGlD,oEAAkD;AAClD,0EAAwD;AACxD,iEAA+C;AAG/C,yEAAuD;AAGvD,iFAA+D;AAC/D,mEAAiD;AAGjD,yFAAuE;AAGvE,0CAAwB"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
import { RedisLike } from "../state/redis-like.interface";
|
|
2
|
+
export interface MicrosoftOutlookStateConfig {
|
|
3
|
+
redis?: {
|
|
4
|
+
client: RedisLike;
|
|
5
|
+
keyPrefix?: string;
|
|
6
|
+
required?: boolean;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
1
9
|
export interface MicrosoftOutlookConfig {
|
|
2
10
|
clientId: string;
|
|
3
11
|
clientSecret: string;
|
|
@@ -5,4 +13,6 @@ export interface MicrosoftOutlookConfig {
|
|
|
5
13
|
backendBaseUrl: string;
|
|
6
14
|
basePath?: string;
|
|
7
15
|
calendarWebhookPath?: string;
|
|
16
|
+
state?: MicrosoftOutlookStateConfig;
|
|
17
|
+
revocationEmitFlagTtlMs?: number;
|
|
8
18
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface RedisLike {
|
|
2
|
+
ping(...args: any[]): Promise<any>;
|
|
3
|
+
set(...args: any[]): Promise<any>;
|
|
4
|
+
get(...args: any[]): Promise<any>;
|
|
5
|
+
del(...args: any[]): Promise<any>;
|
|
6
|
+
pexpire(...args: any[]): Promise<any>;
|
|
7
|
+
eval(...args: any[]): Promise<any>;
|
|
8
|
+
zadd(...args: any[]): Promise<any>;
|
|
9
|
+
zremrangebyscore(...args: any[]): Promise<any>;
|
|
10
|
+
zcard(...args: any[]): Promise<any>;
|
|
11
|
+
hset(...args: any[]): Promise<any>;
|
|
12
|
+
hgetall(...args: any[]): Promise<any>;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-like.interface.js","sourceRoot":"","sources":["../../../src/interfaces/state/redis-like.interface.ts"],"names":[],"mappings":""}
|
|
@@ -32,9 +32,61 @@ const lifecycle_event_handler_service_1 = require("./services/calendar/lifecycle
|
|
|
32
32
|
const recurrence_service_1 = require("./services/calendar/recurrence.service");
|
|
33
33
|
const microsoft_subscription_service_1 = require("./services/subscription/microsoft-subscription.service");
|
|
34
34
|
const graph_rate_limiter_service_1 = require("./services/shared/graph-rate-limiter.service");
|
|
35
|
+
const outlook_lock_store_1 = require("./services/shared/outlook-lock.store");
|
|
36
|
+
const outlook_rate_limit_store_1 = require("./services/shared/outlook-rate-limit.store");
|
|
37
|
+
const webhook_client_state_guard_1 = require("./guards/webhook-client-state.guard");
|
|
35
38
|
_a = new common_1.ConfigurableModuleBuilder()
|
|
36
39
|
.setClassMethodName("forRoot")
|
|
37
40
|
.build(), exports.ConfigurableModuleClass = _a.ConfigurableModuleClass, exports.MODULE_OPTIONS_TOKEN = _a.MODULE_OPTIONS_TOKEN;
|
|
41
|
+
const stateLogger = new common_1.Logger("MicrosoftOutlookStateBackend");
|
|
42
|
+
async function buildLockStore(options) {
|
|
43
|
+
var _a, _b;
|
|
44
|
+
const redisCfg = (_a = options.state) === null || _a === void 0 ? void 0 : _a.redis;
|
|
45
|
+
if (!(redisCfg === null || redisCfg === void 0 ? void 0 : redisCfg.client)) {
|
|
46
|
+
stateLogger.log("OutlookLockStore backend: in-memory");
|
|
47
|
+
return new outlook_lock_store_1.InMemoryOutlookLockStore();
|
|
48
|
+
}
|
|
49
|
+
const prefix = (_b = redisCfg.keyPrefix) !== null && _b !== void 0 ? _b : "outlook:";
|
|
50
|
+
try {
|
|
51
|
+
await redisCfg.client.ping();
|
|
52
|
+
stateLogger.log(`OutlookLockStore backend: redis (keyPrefix="${prefix}")`);
|
|
53
|
+
return new outlook_lock_store_1.RedisOutlookLockStore(redisCfg.client, prefix);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
57
|
+
if (redisCfg.required) {
|
|
58
|
+
stateLogger.error(`Redis PING failed and state.redis.required=true. Crashing module init: ${msg}`);
|
|
59
|
+
throw new Error(`MicrosoftOutlookModule: Redis state backend unreachable (required=true): ${msg}`);
|
|
60
|
+
}
|
|
61
|
+
stateLogger.error(`Redis PING failed (required=false), falling back to in-memory OutlookLockStore: ${msg}. ` +
|
|
62
|
+
`metric=outlook.state.backend.inmemory_fallback`);
|
|
63
|
+
return new outlook_lock_store_1.InMemoryOutlookLockStore();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async function buildRateLimitStore(options) {
|
|
67
|
+
var _a, _b;
|
|
68
|
+
const redisCfg = (_a = options.state) === null || _a === void 0 ? void 0 : _a.redis;
|
|
69
|
+
if (!(redisCfg === null || redisCfg === void 0 ? void 0 : redisCfg.client)) {
|
|
70
|
+
stateLogger.log("OutlookRateLimitStore backend: in-memory");
|
|
71
|
+
return new outlook_rate_limit_store_1.InMemoryOutlookRateLimitStore();
|
|
72
|
+
}
|
|
73
|
+
const prefix = (_b = redisCfg.keyPrefix) !== null && _b !== void 0 ? _b : "outlook:";
|
|
74
|
+
try {
|
|
75
|
+
await redisCfg.client.ping();
|
|
76
|
+
stateLogger.log(`OutlookRateLimitStore backend: redis (keyPrefix="${prefix}")`);
|
|
77
|
+
return new outlook_rate_limit_store_1.RedisOutlookRateLimitStore(redisCfg.client, prefix);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
81
|
+
if (redisCfg.required) {
|
|
82
|
+
stateLogger.error(`Redis PING failed and state.redis.required=true. Crashing module init: ${msg}`);
|
|
83
|
+
throw new Error(`MicrosoftOutlookModule: Redis state backend unreachable (required=true): ${msg}`);
|
|
84
|
+
}
|
|
85
|
+
stateLogger.error(`Redis PING failed (required=false), falling back to in-memory OutlookRateLimitStore: ${msg}. ` +
|
|
86
|
+
`metric=outlook.state.backend.inmemory_fallback`);
|
|
87
|
+
return new outlook_rate_limit_store_1.InMemoryOutlookRateLimitStore();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
38
90
|
let MicrosoftOutlookModule = class MicrosoftOutlookModule extends exports.ConfigurableModuleClass {
|
|
39
91
|
};
|
|
40
92
|
exports.MicrosoftOutlookModule = MicrosoftOutlookModule;
|
|
@@ -57,6 +109,16 @@ exports.MicrosoftOutlookModule = MicrosoftOutlookModule = __decorate([
|
|
|
57
109
|
useFactory: (options) => options,
|
|
58
110
|
inject: [exports.MODULE_OPTIONS_TOKEN],
|
|
59
111
|
},
|
|
112
|
+
{
|
|
113
|
+
provide: constants_1.OUTLOOK_LOCK_STORE,
|
|
114
|
+
useFactory: (options) => buildLockStore(options),
|
|
115
|
+
inject: [exports.MODULE_OPTIONS_TOKEN],
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
provide: constants_1.OUTLOOK_RATE_LIMIT_STORE,
|
|
119
|
+
useFactory: (options) => buildRateLimitStore(options),
|
|
120
|
+
inject: [exports.MODULE_OPTIONS_TOKEN],
|
|
121
|
+
},
|
|
60
122
|
outlook_webhook_subscription_repository_1.OutlookWebhookSubscriptionRepository,
|
|
61
123
|
microsoft_csrf_token_repository_1.MicrosoftCsrfTokenRepository,
|
|
62
124
|
calendar_service_1.CalendarService,
|
|
@@ -69,6 +131,7 @@ exports.MicrosoftOutlookModule = MicrosoftOutlookModule = __decorate([
|
|
|
69
131
|
recurrence_service_1.RecurrenceService,
|
|
70
132
|
microsoft_subscription_service_1.MicrosoftSubscriptionService,
|
|
71
133
|
graph_rate_limiter_service_1.GraphRateLimiterService,
|
|
134
|
+
webhook_client_state_guard_1.WebhookClientStateGuard,
|
|
72
135
|
],
|
|
73
136
|
exports: [
|
|
74
137
|
calendar_service_1.CalendarService,
|
|
@@ -80,6 +143,9 @@ exports.MicrosoftOutlookModule = MicrosoftOutlookModule = __decorate([
|
|
|
80
143
|
user_id_converter_service_1.UserIdConverterService,
|
|
81
144
|
microsoft_subscription_service_1.MicrosoftSubscriptionService,
|
|
82
145
|
graph_rate_limiter_service_1.GraphRateLimiterService,
|
|
146
|
+
constants_1.OUTLOOK_LOCK_STORE,
|
|
147
|
+
constants_1.OUTLOOK_RATE_LIMIT_STORE,
|
|
148
|
+
webhook_client_state_guard_1.WebhookClientStateGuard,
|
|
83
149
|
],
|
|
84
150
|
})
|
|
85
151
|
], MicrosoftOutlookModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"microsoft-outlook.module.js","sourceRoot":"","sources":["../src/microsoft-outlook.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"microsoft-outlook.module.js","sourceRoot":"","sources":["../src/microsoft-outlook.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export declare class OutlookWebhookSubscriptionRepository {
|
|
|
13
13
|
findActiveSubscriptions(excludeUserIds?: number[]): Promise<OutlookWebhookSubscription[]>;
|
|
14
14
|
findActiveByUserIds(userIds: number[]): Promise<OutlookWebhookSubscription[]>;
|
|
15
15
|
findActiveByUserId(userId: number): Promise<OutlookWebhookSubscription | null>;
|
|
16
|
+
findAllActiveByUserId(userId: number): Promise<OutlookWebhookSubscription[]>;
|
|
16
17
|
findAllActiveByUserIdAndResource(userId: number, resource: string): Promise<OutlookWebhookSubscription[]>;
|
|
17
18
|
updateLastNotificationAt(subscriptionId: string): Promise<void>;
|
|
18
19
|
findStaleSubscriptions(staleThresholdHours: number): Promise<OutlookWebhookSubscription[]>;
|
|
@@ -115,6 +115,11 @@ let OutlookWebhookSubscriptionRepository = class OutlookWebhookSubscriptionRepos
|
|
|
115
115
|
this.byUserId.set(userId, result);
|
|
116
116
|
return result;
|
|
117
117
|
}
|
|
118
|
+
async findAllActiveByUserId(userId) {
|
|
119
|
+
return this.repository.find({
|
|
120
|
+
where: { userId, isActive: true },
|
|
121
|
+
});
|
|
122
|
+
}
|
|
118
123
|
async findAllActiveByUserIdAndResource(userId, resource) {
|
|
119
124
|
return this.repository.find({
|
|
120
125
|
where: { userId, resource, isActive: true },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outlook-webhook-subscription.repository.js","sourceRoot":"","sources":["../../src/repositories/outlook-webhook-subscription.repository.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"outlook-webhook-subscription.repository.js","sourceRoot":"","sources":["../../src/repositories/outlook-webhook-subscription.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
|
2
2
|
import { TokenResponse } from '../../interfaces/outlook/token-response.interface';
|
|
3
3
|
import { EmailService } from '../email/email.service';
|
|
4
4
|
import { MicrosoftSubscriptionService } from '../subscription/microsoft-subscription.service';
|
|
5
|
+
import { OutlookLockStore } from '../shared/outlook-lock.store';
|
|
5
6
|
import { MicrosoftOutlookConfig } from '../../interfaces/config/outlook-config.interface';
|
|
6
7
|
import { MicrosoftCsrfTokenRepository } from '../../repositories/microsoft-csrf-token.repository';
|
|
7
8
|
import { StateObject } from '../../interfaces/microsoft-auth/state-object.interface';
|
|
@@ -15,6 +16,7 @@ export declare class MicrosoftAuthService {
|
|
|
15
16
|
private readonly microsoftConfig;
|
|
16
17
|
private readonly csrfTokenRepository;
|
|
17
18
|
private readonly microsoftUserRepository;
|
|
19
|
+
private readonly lockStore;
|
|
18
20
|
private readonly logger;
|
|
19
21
|
private readonly clientId;
|
|
20
22
|
private readonly clientSecret;
|
|
@@ -24,9 +26,10 @@ export declare class MicrosoftAuthService {
|
|
|
24
26
|
private readonly requiredScopes;
|
|
25
27
|
private readonly defaultScopes;
|
|
26
28
|
private readonly CSRF_TOKEN_EXPIRY;
|
|
29
|
+
private readonly DEFAULT_REVOCATION_EMIT_FLAG_TTL_MS;
|
|
27
30
|
private subscriptionInProgress;
|
|
28
31
|
private readonly microsoftUserCache;
|
|
29
|
-
constructor(eventEmitter: EventEmitter2, emailService: EmailService, subscriptionService: MicrosoftSubscriptionService, microsoftConfig: MicrosoftOutlookConfig, csrfTokenRepository: MicrosoftCsrfTokenRepository, microsoftUserRepository: Repository<MicrosoftUser
|
|
32
|
+
constructor(eventEmitter: EventEmitter2, emailService: EmailService, subscriptionService: MicrosoftSubscriptionService, microsoftConfig: MicrosoftOutlookConfig, csrfTokenRepository: MicrosoftCsrfTokenRepository, microsoftUserRepository: Repository<MicrosoftUser>, lockStore: OutlookLockStore);
|
|
30
33
|
private mapToMicrosoftScopes;
|
|
31
34
|
private buildRedirectUri;
|
|
32
35
|
cleanupExpiredTokens(): Promise<void>;
|
|
@@ -50,6 +53,7 @@ export declare class MicrosoftAuthService {
|
|
|
50
53
|
private markSubscriptionFailed;
|
|
51
54
|
private setupSubscriptions;
|
|
52
55
|
refreshAccessToken(refreshToken: string, internalUserId: number): Promise<string>;
|
|
56
|
+
private revocationEmitFlagKey;
|
|
53
57
|
private markUserAsCorrupted;
|
|
54
58
|
revokeRefreshToken(refreshToken: string): Promise<void>;
|
|
55
59
|
private hasCalendarSubscriptionPermission;
|
|
@@ -42,13 +42,14 @@ const CORRUPTED_TRIGGER_ERROR_CODES = new Set([
|
|
|
42
42
|
'login_required',
|
|
43
43
|
]);
|
|
44
44
|
let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
45
|
-
constructor(eventEmitter, emailService, subscriptionService, microsoftConfig, csrfTokenRepository, microsoftUserRepository) {
|
|
45
|
+
constructor(eventEmitter, emailService, subscriptionService, microsoftConfig, csrfTokenRepository, microsoftUserRepository, lockStore) {
|
|
46
46
|
this.eventEmitter = eventEmitter;
|
|
47
47
|
this.emailService = emailService;
|
|
48
48
|
this.subscriptionService = subscriptionService;
|
|
49
49
|
this.microsoftConfig = microsoftConfig;
|
|
50
50
|
this.csrfTokenRepository = csrfTokenRepository;
|
|
51
51
|
this.microsoftUserRepository = microsoftUserRepository;
|
|
52
|
+
this.lockStore = lockStore;
|
|
52
53
|
this.logger = new common_1.Logger(MicrosoftAuthService_1.name);
|
|
53
54
|
this.tenantId = 'common';
|
|
54
55
|
this.requiredScopes = ['offline_access', 'User.Read'];
|
|
@@ -60,6 +61,7 @@ let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
|
60
61
|
permission_scope_enum_1.PermissionScope.EMAIL_WRITE,
|
|
61
62
|
];
|
|
62
63
|
this.CSRF_TOKEN_EXPIRY = 30 * 60 * 1000;
|
|
64
|
+
this.DEFAULT_REVOCATION_EMIT_FLAG_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
63
65
|
this.subscriptionInProgress = new Map();
|
|
64
66
|
this.microsoftUserCache = new ttl_cache_util_1.TtlCache(30000);
|
|
65
67
|
console.log('MicrosoftAuthService constructor - microsoftConfig:', {
|
|
@@ -199,6 +201,7 @@ let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
|
199
201
|
user.status = microsoft_user_status_enum_1.MicrosoftUserStatus.ACTIVE;
|
|
200
202
|
await this.microsoftUserRepository.save(user);
|
|
201
203
|
this.invalidateUserCache(user);
|
|
204
|
+
await this.lockStore.clearLock(this.revocationEmitFlagKey(externalUserId));
|
|
202
205
|
}
|
|
203
206
|
async getMicrosoftUser(params) {
|
|
204
207
|
const { internalUserId, externalUserId, includeInactive = false, cache = true } = params;
|
|
@@ -551,8 +554,11 @@ let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
|
551
554
|
throw new Error('Failed to refresh access token from Microsoft');
|
|
552
555
|
}
|
|
553
556
|
}
|
|
557
|
+
revocationEmitFlagKey(externalUserId) {
|
|
558
|
+
return `revocation-emit:${externalUserId}`;
|
|
559
|
+
}
|
|
554
560
|
async markUserAsCorrupted(user, reason) {
|
|
555
|
-
|
|
561
|
+
var _a;
|
|
556
562
|
try {
|
|
557
563
|
user.status = microsoft_user_status_enum_1.MicrosoftUserStatus.CORRUPTED;
|
|
558
564
|
await this.microsoftUserRepository.save(user);
|
|
@@ -563,8 +569,10 @@ let MicrosoftAuthService = MicrosoftAuthService_1 = class MicrosoftAuthService {
|
|
|
563
569
|
this.logger.error(`Failed to mark user ${String(user.id)} as CORRUPTED: ${dbErr instanceof Error ? dbErr.message : 'unknown'}`);
|
|
564
570
|
return;
|
|
565
571
|
}
|
|
566
|
-
|
|
572
|
+
const emitToken = await this.lockStore.acquireLock(this.revocationEmitFlagKey(user.externalUserId), (_a = this.microsoftConfig.revocationEmitFlagTtlMs) !== null && _a !== void 0 ? _a : this.DEFAULT_REVOCATION_EMIT_FLAG_TTL_MS);
|
|
573
|
+
if (!emitToken) {
|
|
567
574
|
return;
|
|
575
|
+
}
|
|
568
576
|
this.eventEmitter.emit(event_types_enum_1.OutlookEventTypes.USER_REFRESH_TOKEN_INVALID, user.externalUserId, {
|
|
569
577
|
internalUserId: user.id,
|
|
570
578
|
externalUserId: user.externalUserId,
|
|
@@ -613,9 +621,10 @@ exports.MicrosoftAuthService = MicrosoftAuthService = MicrosoftAuthService_1 = _
|
|
|
613
621
|
__param(2, (0, common_1.Inject)((0, common_1.forwardRef)(() => microsoft_subscription_service_1.MicrosoftSubscriptionService))),
|
|
614
622
|
__param(3, (0, common_1.Inject)(constants_1.MICROSOFT_CONFIG)),
|
|
615
623
|
__param(5, (0, typeorm_1.InjectRepository)(microsoft_user_entity_1.MicrosoftUser)),
|
|
624
|
+
__param(6, (0, common_1.Inject)(constants_1.OUTLOOK_LOCK_STORE)),
|
|
616
625
|
__metadata("design:paramtypes", [event_emitter_1.EventEmitter2,
|
|
617
626
|
email_service_1.EmailService,
|
|
618
627
|
microsoft_subscription_service_1.MicrosoftSubscriptionService, Object, microsoft_csrf_token_repository_1.MicrosoftCsrfTokenRepository,
|
|
619
|
-
typeorm_2.Repository])
|
|
628
|
+
typeorm_2.Repository, Object])
|
|
620
629
|
], MicrosoftAuthService);
|
|
621
630
|
//# sourceMappingURL=microsoft-auth.service.js.map
|