@anatix/runtime 1.0.0 → 1.0.2
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/contracts/index.d.ts +2 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/{configs → contracts}/index.js +1 -2
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/service-options.d.ts +15 -0
- package/dist/contracts/service-options.d.ts.map +1 -0
- package/dist/{configs/service-runtime.js → contracts/service-options.js} +1 -1
- package/dist/contracts/service-options.js.map +1 -0
- package/dist/decorators/filters/exception-filter.config.d.ts +7 -0
- package/dist/decorators/filters/exception-filter.config.d.ts.map +1 -0
- package/dist/decorators/filters/exception-filter.config.js +9 -0
- package/dist/decorators/filters/exception-filter.config.js.map +1 -0
- package/dist/decorators/filters/global-exception.filter.d.ts +3 -2
- package/dist/decorators/filters/global-exception.filter.d.ts.map +1 -1
- package/dist/decorators/filters/global-exception.filter.js +14 -5
- package/dist/decorators/filters/global-exception.filter.js.map +1 -1
- package/dist/decorators/filters/index.d.ts +1 -0
- package/dist/decorators/filters/index.d.ts.map +1 -1
- package/dist/decorators/filters/index.js +1 -0
- package/dist/decorators/filters/index.js.map +1 -1
- package/dist/dtos/error-response.dto.d.ts +20 -0
- package/dist/dtos/error-response.dto.d.ts.map +1 -0
- package/dist/dtos/error-response.dto.js +42 -0
- package/dist/dtos/error-response.dto.js.map +1 -0
- package/dist/dtos/index.d.ts +3 -0
- package/dist/dtos/index.d.ts.map +1 -0
- package/dist/dtos/index.js +13 -0
- package/dist/dtos/index.js.map +1 -0
- package/dist/dtos/paginated-response.dto.d.ts +16 -0
- package/dist/dtos/paginated-response.dto.d.ts.map +1 -0
- package/dist/dtos/paginated-response.dto.js +31 -0
- package/dist/dtos/paginated-response.dto.js.map +1 -0
- package/dist/envelope/envelope.config.d.ts +17 -0
- package/dist/envelope/envelope.config.d.ts.map +1 -0
- package/dist/envelope/envelope.config.js +5 -0
- package/dist/envelope/envelope.config.js.map +1 -0
- package/dist/envelope/index.d.ts +2 -0
- package/dist/envelope/index.d.ts.map +1 -1
- package/dist/envelope/index.js +2 -0
- package/dist/envelope/index.js.map +1 -1
- package/dist/envelope/repositories/outbox.repository.d.ts.map +1 -1
- package/dist/envelope/repositories/outbox.repository.js +1 -1
- package/dist/envelope/repositories/outbox.repository.js.map +1 -1
- package/dist/envelope/services/inbox-retry.service.d.ts +6 -3
- package/dist/envelope/services/inbox-retry.service.d.ts.map +1 -1
- package/dist/envelope/services/inbox-retry.service.js +20 -7
- package/dist/envelope/services/inbox-retry.service.js.map +1 -1
- package/dist/envelope/services/index.d.ts +1 -0
- package/dist/envelope/services/index.d.ts.map +1 -1
- package/dist/envelope/services/index.js +1 -0
- package/dist/envelope/services/index.js.map +1 -1
- package/dist/envelope/services/outbox-dispatcher.service.d.ts +8 -4
- package/dist/envelope/services/outbox-dispatcher.service.d.ts.map +1 -1
- package/dist/envelope/services/outbox-dispatcher.service.js +82 -22
- package/dist/envelope/services/outbox-dispatcher.service.js.map +1 -1
- package/dist/envelope/tx-manager.d.ts +14 -0
- package/dist/envelope/tx-manager.d.ts.map +1 -0
- package/dist/envelope/tx-manager.js +20 -0
- package/dist/envelope/tx-manager.js.map +1 -0
- package/dist/event-bus/adapters/index.d.ts +4 -0
- package/dist/event-bus/adapters/index.d.ts.map +1 -0
- package/dist/event-bus/adapters/index.js +20 -0
- package/dist/event-bus/adapters/index.js.map +1 -0
- package/dist/event-bus/adapters/kafka.adapter.d.ts +28 -0
- package/dist/event-bus/adapters/kafka.adapter.d.ts.map +1 -0
- package/dist/event-bus/adapters/kafka.adapter.js +263 -0
- package/dist/event-bus/adapters/kafka.adapter.js.map +1 -0
- package/dist/event-bus/adapters/message-broker.interface.d.ts +39 -0
- package/dist/event-bus/adapters/message-broker.interface.d.ts.map +1 -0
- package/dist/{configs/service-repo-configs.js → event-bus/adapters/message-broker.interface.js} +1 -1
- package/dist/event-bus/adapters/message-broker.interface.js.map +1 -0
- package/dist/event-bus/adapters/rabbitmq.adapter.d.ts +21 -0
- package/dist/event-bus/adapters/rabbitmq.adapter.d.ts.map +1 -0
- package/dist/event-bus/adapters/rabbitmq.adapter.js +232 -0
- package/dist/event-bus/adapters/rabbitmq.adapter.js.map +1 -0
- package/dist/event-bus/config/adapter.config.d.ts +65 -0
- package/dist/event-bus/config/adapter.config.d.ts.map +1 -0
- package/dist/event-bus/config/adapter.config.js +6 -0
- package/dist/event-bus/config/adapter.config.js.map +1 -0
- package/dist/event-bus/config/index.d.ts +2 -0
- package/dist/event-bus/config/index.d.ts.map +1 -0
- package/dist/event-bus/config/index.js +18 -0
- package/dist/event-bus/config/index.js.map +1 -0
- package/dist/event-bus/event-bus.config.d.ts +36 -0
- package/dist/event-bus/event-bus.config.d.ts.map +1 -0
- package/dist/event-bus/event-bus.config.js +17 -0
- package/dist/event-bus/event-bus.config.js.map +1 -0
- package/dist/event-bus/index.d.ts +1 -0
- package/dist/event-bus/index.d.ts.map +1 -1
- package/dist/event-bus/index.js +1 -0
- package/dist/event-bus/index.js.map +1 -1
- package/dist/event-bus/modules/event-bus.module.d.ts.map +1 -1
- package/dist/event-bus/modules/event-bus.module.js +9 -2
- package/dist/event-bus/modules/event-bus.module.js.map +1 -1
- package/dist/event-bus/services/event-bus.service.d.ts +10 -5
- package/dist/event-bus/services/event-bus.service.d.ts.map +1 -1
- package/dist/event-bus/services/event-bus.service.js +110 -185
- package/dist/event-bus/services/event-bus.service.js.map +1 -1
- package/dist/event-bus/types/event-bus-adapter.interface.d.ts +43 -0
- package/dist/event-bus/types/event-bus-adapter.interface.d.ts.map +1 -0
- package/dist/event-bus/types/event-bus-adapter.interface.js +3 -0
- package/dist/event-bus/types/event-bus-adapter.interface.js.map +1 -0
- package/dist/guards/base/index.d.ts +0 -1
- package/dist/guards/base/index.d.ts.map +1 -1
- package/dist/guards/base/index.js +0 -1
- package/dist/guards/base/index.js.map +1 -1
- package/dist/guards/base/jwt-auth.guard.d.ts +6 -1
- package/dist/guards/base/jwt-auth.guard.d.ts.map +1 -1
- package/dist/guards/base/jwt-auth.guard.js +32 -20
- package/dist/guards/base/jwt-auth.guard.js.map +1 -1
- package/dist/guards/base/permissions.guard.d.ts +1 -0
- package/dist/guards/base/permissions.guard.d.ts.map +1 -1
- package/dist/guards/base/permissions.guard.js +6 -2
- package/dist/guards/base/permissions.guard.js.map +1 -1
- package/dist/guards/types/base-roles.enum.d.ts +6 -0
- package/dist/guards/types/base-roles.enum.d.ts.map +1 -0
- package/dist/guards/types/base-roles.enum.js +10 -0
- package/dist/guards/types/base-roles.enum.js.map +1 -0
- package/dist/guards/types/index.d.ts +2 -0
- package/dist/guards/types/index.d.ts.map +1 -1
- package/dist/guards/types/index.js +2 -0
- package/dist/guards/types/index.js.map +1 -1
- package/dist/guards/types/tokens.constant.d.ts +5 -0
- package/dist/guards/types/tokens.constant.d.ts.map +1 -0
- package/dist/guards/types/tokens.constant.js +7 -0
- package/dist/guards/types/tokens.constant.js.map +1 -0
- package/dist/guards/utils/token.util.d.ts.map +1 -1
- package/dist/guards/utils/token.util.js +14 -9
- package/dist/guards/utils/token.util.js.map +1 -1
- package/dist/health/health.service.d.ts +1 -0
- package/dist/health/health.service.d.ts.map +1 -1
- package/dist/health/health.service.js +12 -3
- package/dist/health/health.service.js.map +1 -1
- package/dist/health/index.d.ts +2 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +18 -0
- package/dist/health/index.js.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -2
- package/dist/index.js.map +1 -1
- package/dist/monitoring/index.d.ts +2 -0
- package/dist/monitoring/index.d.ts.map +1 -0
- package/dist/monitoring/index.js +18 -0
- package/dist/monitoring/index.js.map +1 -0
- package/dist/proxy/config/proxy.config.d.ts +6 -2
- package/dist/proxy/config/proxy.config.d.ts.map +1 -1
- package/dist/proxy/config/proxy.config.js +6 -3
- package/dist/proxy/config/proxy.config.js.map +1 -1
- package/dist/proxy/methods/proxy-delete.d.ts.map +1 -1
- package/dist/proxy/methods/proxy-delete.js +2 -2
- package/dist/proxy/methods/proxy-delete.js.map +1 -1
- package/dist/proxy/methods/proxy-get.d.ts.map +1 -1
- package/dist/proxy/methods/proxy-get.js +2 -2
- package/dist/proxy/methods/proxy-get.js.map +1 -1
- package/dist/proxy/methods/proxy-patch.d.ts.map +1 -1
- package/dist/proxy/methods/proxy-patch.js +2 -2
- package/dist/proxy/methods/proxy-patch.js.map +1 -1
- package/dist/proxy/methods/proxy-post.d.ts.map +1 -1
- package/dist/proxy/methods/proxy-post.js +2 -2
- package/dist/proxy/methods/proxy-post.js.map +1 -1
- package/dist/proxy/methods/proxy-put.d.ts.map +1 -1
- package/dist/proxy/methods/proxy-put.js +2 -2
- package/dist/proxy/methods/proxy-put.js.map +1 -1
- package/dist/repository/bulk.d.ts +12 -0
- package/dist/repository/bulk.d.ts.map +1 -0
- package/dist/repository/bulk.js +107 -0
- package/dist/repository/bulk.js.map +1 -0
- package/dist/repository/cursor.d.ts +13 -0
- package/dist/repository/cursor.d.ts.map +1 -0
- package/dist/repository/cursor.js +73 -0
- package/dist/repository/cursor.js.map +1 -0
- package/dist/repository/index.d.ts +7 -0
- package/dist/repository/index.d.ts.map +1 -0
- package/dist/repository/index.js +25 -0
- package/dist/repository/index.js.map +1 -0
- package/dist/repository/lock.d.ts +8 -0
- package/dist/repository/lock.d.ts.map +1 -0
- package/dist/repository/lock.js +35 -0
- package/dist/repository/lock.js.map +1 -0
- package/dist/repository/retry.d.ts +7 -0
- package/dist/repository/retry.d.ts.map +1 -0
- package/dist/repository/retry.js +43 -0
- package/dist/repository/retry.js.map +1 -0
- package/dist/repository/scope.d.ts +8 -0
- package/dist/repository/scope.d.ts.map +1 -0
- package/dist/repository/scope.js +16 -0
- package/dist/repository/scope.js.map +1 -0
- package/dist/result/index.d.ts +2 -0
- package/dist/result/index.d.ts.map +1 -0
- package/dist/result/index.js +16 -0
- package/dist/result/index.js.map +1 -0
- package/dist/result/result.d.ts +26 -0
- package/dist/result/result.d.ts.map +1 -0
- package/dist/result/result.js +73 -0
- package/dist/result/result.js.map +1 -0
- package/dist/security/bcrypt.adapter.d.ts +9 -0
- package/dist/security/bcrypt.adapter.d.ts.map +1 -0
- package/dist/security/bcrypt.adapter.js +53 -0
- package/dist/security/bcrypt.adapter.js.map +1 -0
- package/dist/security/index.d.ts +2 -0
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +2 -0
- package/dist/security/index.js.map +1 -1
- package/dist/security/security.config.d.ts +6 -0
- package/dist/security/security.config.d.ts.map +1 -0
- package/dist/security/security.config.js +8 -0
- package/dist/security/security.config.js.map +1 -0
- package/dist/service/cache.d.ts +11 -0
- package/dist/service/cache.d.ts.map +1 -0
- package/dist/service/cache.js +45 -0
- package/dist/service/cache.js.map +1 -0
- package/dist/service/circuit-breaker.d.ts +19 -0
- package/dist/service/circuit-breaker.d.ts.map +1 -0
- package/dist/service/circuit-breaker.js +73 -0
- package/dist/service/circuit-breaker.js.map +1 -0
- package/dist/service/enrichment.d.ts +8 -0
- package/dist/service/enrichment.d.ts.map +1 -0
- package/dist/service/enrichment.js +40 -0
- package/dist/service/enrichment.js.map +1 -0
- package/dist/service/idempotency.d.ts +8 -0
- package/dist/service/idempotency.d.ts.map +1 -0
- package/dist/service/idempotency.js +28 -0
- package/dist/service/idempotency.js.map +1 -0
- package/dist/service/index.d.ts +10 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +45 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/projection.d.ts +14 -0
- package/dist/service/projection.d.ts.map +1 -0
- package/dist/service/projection.js +59 -0
- package/dist/service/projection.js.map +1 -0
- package/dist/service/rate-limit.d.ts +10 -0
- package/dist/service/rate-limit.d.ts.map +1 -0
- package/dist/service/rate-limit.js +42 -0
- package/dist/service/rate-limit.js.map +1 -0
- package/dist/service/retry.d.ts +8 -0
- package/dist/service/retry.d.ts.map +1 -0
- package/dist/service/retry.js +62 -0
- package/dist/service/retry.js.map +1 -0
- package/dist/service/timeout.d.ts +7 -0
- package/dist/service/timeout.d.ts.map +1 -0
- package/dist/service/timeout.js +39 -0
- package/dist/service/timeout.js.map +1 -0
- package/dist/service/transaction.d.ts +12 -0
- package/dist/service/transaction.d.ts.map +1 -0
- package/dist/service/transaction.js +17 -0
- package/dist/service/transaction.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/retry.d.ts +7 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +27 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +52 -15
- package/dist/configs/env-validation.d.ts +0 -2
- package/dist/configs/env-validation.d.ts.map +0 -1
- package/dist/configs/env-validation.js +0 -49
- package/dist/configs/env-validation.js.map +0 -1
- package/dist/configs/index.d.ts +0 -3
- package/dist/configs/index.d.ts.map +0 -1
- package/dist/configs/index.js.map +0 -1
- package/dist/configs/service-repo-configs.d.ts +0 -13
- package/dist/configs/service-repo-configs.d.ts.map +0 -1
- package/dist/configs/service-repo-configs.js.map +0 -1
- package/dist/configs/service-runtime.d.ts +0 -19
- package/dist/configs/service-runtime.d.ts.map +0 -1
- package/dist/configs/service-runtime.js.map +0 -1
- package/dist/guards/base/roles.guard.d.ts +0 -10
- package/dist/guards/base/roles.guard.d.ts.map +0 -1
- package/dist/guards/base/roles.guard.js +0 -58
- package/dist/guards/base/roles.guard.js.map +0 -1
|
@@ -1,170 +1,85 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
2
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
3
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
4
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
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;
|
|
22
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
7
|
};
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
};
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
41
14
|
var EventBusService_1;
|
|
42
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
16
|
exports.EventBusService = void 0;
|
|
44
17
|
const common_1 = require("@nestjs/common");
|
|
45
|
-
const amqplib_1 = require("amqplib");
|
|
46
18
|
const envelope_1 = require("../../envelope");
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
const
|
|
19
|
+
const logger_1 = require("../../logger");
|
|
20
|
+
const rabbitmq_adapter_1 = require("../adapters/rabbitmq.adapter");
|
|
21
|
+
const kafka_adapter_1 = require("../adapters/kafka.adapter");
|
|
22
|
+
const event_bus_config_1 = require("../event-bus.config");
|
|
50
23
|
let EventBusService = EventBusService_1 = class EventBusService {
|
|
51
24
|
logger = new common_1.Logger(EventBusService_1.name);
|
|
52
|
-
|
|
53
|
-
channel;
|
|
25
|
+
adapter;
|
|
54
26
|
subscriptions = new Map();
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
state: 'CLOSED'
|
|
60
|
-
};
|
|
27
|
+
cfg;
|
|
28
|
+
constructor(cfg) {
|
|
29
|
+
this.cfg = cfg ?? {};
|
|
30
|
+
}
|
|
61
31
|
async onModuleInit() {
|
|
62
32
|
await this.setup();
|
|
63
33
|
}
|
|
64
34
|
async onModuleDestroy() {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
this.connection = undefined;
|
|
69
|
-
try {
|
|
70
|
-
if (channel)
|
|
71
|
-
await channel.close();
|
|
72
|
-
if (connection)
|
|
73
|
-
await connection.close();
|
|
74
|
-
this.logger.log('EventBus connections closed');
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
this.logger.error('Error while closing EventBus', error);
|
|
35
|
+
if (this.adapter) {
|
|
36
|
+
await this.adapter.disconnect();
|
|
37
|
+
this.adapter = undefined;
|
|
78
38
|
}
|
|
39
|
+
this.logger.log('EventBus connections closed');
|
|
79
40
|
}
|
|
80
41
|
assertReady() {
|
|
81
|
-
if (!this.
|
|
82
|
-
this.logger.error('EventBus
|
|
83
|
-
throw new Error('EventBus
|
|
42
|
+
if (!this.adapter || !this.adapter.isConnected()) {
|
|
43
|
+
this.logger.error('EventBus adapter not ready; ensure setup() succeeded.');
|
|
44
|
+
throw new Error('EventBus adapter not ready');
|
|
45
|
+
}
|
|
46
|
+
return this.adapter;
|
|
47
|
+
}
|
|
48
|
+
isReady() {
|
|
49
|
+
return !!this.adapter && this.adapter.isConnected();
|
|
50
|
+
}
|
|
51
|
+
getCircuitBreakerState() {
|
|
52
|
+
if (!this.isReady()) {
|
|
53
|
+
return 'OPEN';
|
|
84
54
|
}
|
|
85
|
-
return
|
|
55
|
+
return 'CLOSED';
|
|
86
56
|
}
|
|
87
57
|
async publish(topic, data, meta) {
|
|
88
|
-
const
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
meta: (0, envelope_1.ensureMeta)(meta),
|
|
92
|
-
};
|
|
93
|
-
const message = {
|
|
94
|
-
__event: topic,
|
|
95
|
-
data: envelope.data,
|
|
96
|
-
meta: envelope.meta,
|
|
97
|
-
};
|
|
98
|
-
channel.publish(EVENT_BUS_EXCHANGE, topic, Buffer.from(JSON.stringify(message)), {
|
|
99
|
-
contentType: 'application/json',
|
|
100
|
-
persistent: true,
|
|
101
|
-
});
|
|
58
|
+
const adapter = this.assertReady();
|
|
59
|
+
const eventMeta = (0, envelope_1.ensureMeta)(meta);
|
|
60
|
+
await adapter.publish(topic, data, eventMeta, { persistent: true });
|
|
102
61
|
}
|
|
103
62
|
async request(topic, data, meta, timeoutMs = 5000) {
|
|
104
|
-
const
|
|
63
|
+
const adapter = this.assertReady();
|
|
105
64
|
const eventMeta = (0, envelope_1.ensureMeta)(meta);
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
return new Promise((resolve, reject) => {
|
|
112
|
-
let consumerTag = '';
|
|
113
|
-
const onReply = (msg) => {
|
|
114
|
-
if (!msg)
|
|
115
|
-
return;
|
|
116
|
-
try {
|
|
117
|
-
const content = JSON.parse(msg.content.toString());
|
|
118
|
-
if (content.__correlationId === eventMeta.correlationId) {
|
|
119
|
-
clearTimeout(timer);
|
|
120
|
-
channel.cancel(consumerTag).catch(() => { });
|
|
121
|
-
resolve({
|
|
122
|
-
data: content.data,
|
|
123
|
-
meta: (0, envelope_1.ensureMeta)(content.meta),
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
channel.consume(replyQueue, onReply, { noAck: true }).then(({ consumerTag: tag }) => {
|
|
131
|
-
consumerTag = tag;
|
|
132
|
-
const message = {
|
|
133
|
-
__event: topic,
|
|
134
|
-
__replyTo: replyQueue,
|
|
135
|
-
__correlationId: eventMeta.correlationId,
|
|
136
|
-
data,
|
|
137
|
-
meta: eventMeta,
|
|
138
|
-
};
|
|
139
|
-
channel.publish(EVENT_BUS_EXCHANGE, topic, Buffer.from(JSON.stringify(message)), {
|
|
140
|
-
contentType: 'application/json',
|
|
141
|
-
persistent: true,
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
const timer = setTimeout(() => {
|
|
145
|
-
channel.cancel(consumerTag).catch(() => { });
|
|
146
|
-
reject(new Error(`Timeout waiting for response to "${topic}" (corr=${eventMeta.correlationId})`));
|
|
147
|
-
}, timeoutMs);
|
|
148
|
-
});
|
|
65
|
+
const response = await adapter.request(topic, data, eventMeta, timeoutMs);
|
|
66
|
+
return {
|
|
67
|
+
data: response,
|
|
68
|
+
meta: eventMeta,
|
|
69
|
+
};
|
|
149
70
|
}
|
|
150
71
|
async respond(to, correlationId, data, meta) {
|
|
151
|
-
const
|
|
72
|
+
const adapter = this.assertReady();
|
|
152
73
|
const eventMeta = (0, envelope_1.ensureMeta)(meta);
|
|
153
|
-
|
|
154
|
-
__correlationId: correlationId,
|
|
155
|
-
data,
|
|
156
|
-
meta: eventMeta,
|
|
157
|
-
};
|
|
158
|
-
channel.sendToQueue(to, Buffer.from(JSON.stringify(message)), {
|
|
159
|
-
contentType: 'application/json',
|
|
160
|
-
persistent: false,
|
|
161
|
-
});
|
|
74
|
+
await adapter.reply(to, correlationId, data, eventMeta);
|
|
162
75
|
}
|
|
163
76
|
async on(topic, handler) {
|
|
164
|
-
const
|
|
77
|
+
const adapter = this.assertReady();
|
|
165
78
|
if (!this.subscriptions.has(topic)) {
|
|
166
79
|
this.subscriptions.set(topic, []);
|
|
167
|
-
await
|
|
80
|
+
await adapter.subscribe(topic, async (message) => {
|
|
81
|
+
await this.handleBrokerMessage(message);
|
|
82
|
+
});
|
|
168
83
|
}
|
|
169
84
|
this.subscriptions.get(topic).push(handler);
|
|
170
85
|
}
|
|
@@ -195,72 +110,80 @@ let EventBusService = EventBusService_1 = class EventBusService {
|
|
|
195
110
|
await this.publish(`log.${service}`, log);
|
|
196
111
|
}
|
|
197
112
|
async emitLogError(service, message, metadata = {}, userId = 'system', stack) {
|
|
198
|
-
|
|
199
|
-
return this.emitLog(service, message, metadata, LogLevel.ERROR, userId, 'error', stack);
|
|
113
|
+
return this.emitLog(service, message, metadata, logger_1.LogLevel.ERROR, userId, 'error', stack);
|
|
200
114
|
}
|
|
201
115
|
async setup() {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
116
|
+
const brokerType = this.cfg.connection?.type ?? 'rabbitmq';
|
|
117
|
+
this.logger.log(`Initializing EventBus with broker: ${brokerType}`);
|
|
118
|
+
this.adapter = this.createAdapter(brokerType);
|
|
119
|
+
const connectionConfig = this.buildConnectionConfig(brokerType);
|
|
205
120
|
try {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
await channel.assertExchange(EVENT_BUS_EXCHANGE, 'topic', { durable: true });
|
|
209
|
-
await channel.assertQueue(EVENT_BUS_QUEUE, { durable: true });
|
|
210
|
-
await channel.prefetch(1);
|
|
211
|
-
await channel.consume(EVENT_BUS_QUEUE, this.handleDelivery.bind(this), { noAck: false });
|
|
212
|
-
this.connection = connection;
|
|
213
|
-
this.channel = channel;
|
|
214
|
-
this.circuitBreaker.failures = 0;
|
|
215
|
-
this.circuitBreaker.state = 'CLOSED';
|
|
121
|
+
await this.adapter.connect(connectionConfig);
|
|
122
|
+
this.logger.log(`EventBus connected successfully (${brokerType})`);
|
|
216
123
|
}
|
|
217
124
|
catch (error) {
|
|
218
|
-
this.
|
|
219
|
-
if (this.circuitBreaker.failures >= this.circuitBreaker.maxFailures) {
|
|
220
|
-
this.circuitBreaker.state = 'OPEN';
|
|
221
|
-
setTimeout(() => {
|
|
222
|
-
this.circuitBreaker.state = 'HALF_OPEN';
|
|
223
|
-
this.circuitBreaker.failures = 0;
|
|
224
|
-
}, this.circuitBreaker.resetTimeout);
|
|
225
|
-
}
|
|
125
|
+
this.logger.error(`Failed to connect EventBus: ${error?.message || error}`);
|
|
226
126
|
throw error;
|
|
227
127
|
}
|
|
228
128
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
129
|
+
createAdapter(type) {
|
|
130
|
+
switch (type) {
|
|
131
|
+
case 'rabbitmq':
|
|
132
|
+
return new rabbitmq_adapter_1.RabbitMQAdapter();
|
|
133
|
+
case 'kafka':
|
|
134
|
+
return new kafka_adapter_1.KafkaAdapter();
|
|
135
|
+
default:
|
|
136
|
+
throw new Error(`Unsupported broker type: ${type}`);
|
|
236
137
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
138
|
+
}
|
|
139
|
+
buildConnectionConfig(type) {
|
|
140
|
+
const serviceName = this.cfg.connection?.serviceName ?? 'default-service';
|
|
141
|
+
if (type === 'rabbitmq') {
|
|
142
|
+
const rabbitmqCfg = this.cfg.connection?.rabbitmq ?? {};
|
|
143
|
+
return {
|
|
144
|
+
url: rabbitmqCfg.url ?? 'amqp://localhost',
|
|
145
|
+
serviceName,
|
|
146
|
+
prefetch: rabbitmqCfg.prefetch ?? 1,
|
|
147
|
+
options: {
|
|
148
|
+
exchange: rabbitmqCfg.exchange ?? 'anatix-event-bus',
|
|
149
|
+
exchangeType: rabbitmqCfg.exchangeType ?? 'topic',
|
|
150
|
+
},
|
|
151
|
+
};
|
|
241
152
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
153
|
+
if (type === 'kafka') {
|
|
154
|
+
const kafkaCfg = this.cfg.connection?.kafka ?? {};
|
|
155
|
+
return {
|
|
156
|
+
url: kafkaCfg.brokers ?? ['localhost:9092'],
|
|
157
|
+
serviceName,
|
|
158
|
+
options: {
|
|
159
|
+
clientId: kafkaCfg.clientId ?? serviceName,
|
|
160
|
+
groupId: kafkaCfg.groupId ?? serviceName,
|
|
161
|
+
kafkaConfig: kafkaCfg.kafkaConfig,
|
|
162
|
+
producerConfig: kafkaCfg.producerConfig,
|
|
163
|
+
consumerConfig: kafkaCfg.consumerConfig,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
247
166
|
}
|
|
167
|
+
throw new Error(`Unsupported broker type: ${type}`);
|
|
168
|
+
}
|
|
169
|
+
async handleBrokerMessage(message) {
|
|
170
|
+
const { topic, payload, meta } = message;
|
|
248
171
|
const handlers = this.subscriptions.get(topic) ?? [];
|
|
249
172
|
if (handlers.length === 0) {
|
|
250
|
-
|
|
173
|
+
await message.ack();
|
|
251
174
|
return;
|
|
252
175
|
}
|
|
253
|
-
const
|
|
176
|
+
const eventMeta = (0, envelope_1.ensureMeta)(meta);
|
|
254
177
|
const envelope = {
|
|
255
|
-
data:
|
|
256
|
-
meta,
|
|
178
|
+
data: payload,
|
|
179
|
+
meta: eventMeta,
|
|
257
180
|
};
|
|
258
181
|
const ctx = {
|
|
259
|
-
raw:
|
|
260
|
-
reply:
|
|
182
|
+
raw: message,
|
|
183
|
+
reply: message.replyTo
|
|
261
184
|
? {
|
|
262
|
-
to:
|
|
263
|
-
correlationId:
|
|
185
|
+
to: message.replyTo.destination,
|
|
186
|
+
correlationId: message.replyTo.correlationId,
|
|
264
187
|
}
|
|
265
188
|
: undefined,
|
|
266
189
|
};
|
|
@@ -271,21 +194,23 @@ let EventBusService = EventBusService_1 = class EventBusService {
|
|
|
271
194
|
await handler(envelope, ctx);
|
|
272
195
|
}
|
|
273
196
|
catch (error) {
|
|
274
|
-
this.logger.error(`Handler #${i + 1}/${handlers.length} failed for topic="${topic}" (corr=${
|
|
275
|
-
|
|
197
|
+
this.logger.error(`Handler #${i + 1}/${handlers.length} failed for topic="${topic}" (corr=${eventMeta.correlationId}): ${error?.message || error}`);
|
|
198
|
+
await message.nack(false);
|
|
276
199
|
return;
|
|
277
200
|
}
|
|
278
201
|
}
|
|
279
|
-
|
|
202
|
+
await message.ack();
|
|
280
203
|
}
|
|
281
204
|
catch (error) {
|
|
282
|
-
this.logger.error(`Error handling
|
|
283
|
-
|
|
205
|
+
this.logger.error(`Error handling message for topic="${topic}" (corr=${eventMeta.correlationId}): ${error?.message || error}`);
|
|
206
|
+
await message.nack(false);
|
|
284
207
|
}
|
|
285
208
|
}
|
|
286
209
|
};
|
|
287
210
|
exports.EventBusService = EventBusService;
|
|
288
211
|
exports.EventBusService = EventBusService = EventBusService_1 = __decorate([
|
|
289
|
-
(0, common_1.Injectable)()
|
|
212
|
+
(0, common_1.Injectable)(),
|
|
213
|
+
__param(0, (0, common_1.Inject)(event_bus_config_1.EVENT_BUS_CONFIG)),
|
|
214
|
+
__metadata("design:paramtypes", [Object])
|
|
290
215
|
], EventBusService);
|
|
291
216
|
//# sourceMappingURL=event-bus.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.service.js","sourceRoot":"","sources":["../../../src/event-bus/services/event-bus.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-bus.service.js","sourceRoot":"","sources":["../../../src/event-bus/services/event-bus.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Envelope, EventMeta } from '../../envelope';
|
|
2
|
+
export interface DeliveredMessage<T = any> {
|
|
3
|
+
payload: T;
|
|
4
|
+
topic: string;
|
|
5
|
+
metadata?: Record<string, any>;
|
|
6
|
+
ack: () => Promise<void>;
|
|
7
|
+
nack: (requeue?: boolean) => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export type MessageHandler<T = any> = (message: DeliveredMessage<T>) => Promise<void>;
|
|
10
|
+
export interface PublishOptions {
|
|
11
|
+
delay?: number;
|
|
12
|
+
headers?: Record<string, any>;
|
|
13
|
+
expiration?: number;
|
|
14
|
+
persistent?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface SubscribeOptions {
|
|
17
|
+
pattern?: string;
|
|
18
|
+
durable?: boolean;
|
|
19
|
+
exclusive?: boolean;
|
|
20
|
+
prefetch?: number;
|
|
21
|
+
deadLetterTopic?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface RequestOptions {
|
|
24
|
+
timeout?: number;
|
|
25
|
+
headers?: Record<string, any>;
|
|
26
|
+
}
|
|
27
|
+
export interface EventBusAdapter {
|
|
28
|
+
connect(): Promise<void>;
|
|
29
|
+
disconnect(): Promise<void>;
|
|
30
|
+
isReady(): boolean;
|
|
31
|
+
publish<T>(topic: string, payload: T, meta?: Partial<EventMeta>, options?: PublishOptions): Promise<void>;
|
|
32
|
+
subscribe<T>(topic: string, handler: MessageHandler<T>, options?: SubscribeOptions): Promise<void>;
|
|
33
|
+
unsubscribe(topic: string): Promise<void>;
|
|
34
|
+
request<TRequest, TResponse>(topic: string, payload: TRequest, meta?: Partial<EventMeta>, options?: RequestOptions): Promise<Envelope<TResponse>>;
|
|
35
|
+
reply<T>(replyTo: string, correlationId: string, payload: T, meta?: Partial<EventMeta>): Promise<void>;
|
|
36
|
+
getStats?(): Promise<{
|
|
37
|
+
connected: boolean;
|
|
38
|
+
messagesPublished: number;
|
|
39
|
+
messagesReceived: number;
|
|
40
|
+
errors: number;
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=event-bus-adapter.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus-adapter.interface.d.ts","sourceRoot":"","sources":["../../../src/event-bus/types/event-bus-adapter.interface.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAO1D,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,GAAG;IAEvC,OAAO,EAAE,CAAC,CAAC;IAEX,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/B,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAKD,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAKtF,MAAM,WAAW,cAAc;IAE7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE9B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAKD,MAAM,WAAW,gBAAgB;IAE/B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD,MAAM,WAAW,cAAc;IAE7B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AA4BD,MAAM,WAAW,eAAe;IAI9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAKzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAK5B,OAAO,IAAI,OAAO,CAAC;IAUnB,OAAO,CAAC,CAAC,EACP,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,EACV,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACzB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CAAC;IASjB,SAAS,CAAC,CAAC,EACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAC1B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IAOjB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAW1C,OAAO,CAAC,QAAQ,EAAE,SAAS,EACzB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,QAAQ,EACjB,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EACzB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAUhC,KAAK,CAAC,CAAC,EACL,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,CAAC,EACV,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC,CAAC;IAKjB,QAAQ,CAAC,IAAI,OAAO,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;QACnB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus-adapter.interface.js","sourceRoot":"","sources":["../../../src/event-bus/types/event-bus-adapter.interface.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/guards/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/guards/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
|
|
@@ -16,5 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./jwt-auth.guard"), exports);
|
|
18
18
|
__exportStar(require("./permissions.guard"), exports);
|
|
19
|
-
__exportStar(require("./roles.guard"), exports);
|
|
20
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/guards/base/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,sDAAoC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/guards/base/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,sDAAoC"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
2
2
|
import { Reflector } from '@nestjs/core';
|
|
3
|
+
import { type JwtVerifyConfig } from '../utils';
|
|
3
4
|
export declare class JwtAuthGuard implements CanActivate {
|
|
4
5
|
private readonly reflector;
|
|
5
|
-
|
|
6
|
+
private readonly jwtConfig;
|
|
7
|
+
constructor(reflector: Reflector, jwtConfig: JwtVerifyConfig);
|
|
6
8
|
canActivate(context: ExecutionContext): boolean;
|
|
9
|
+
private isPublic;
|
|
10
|
+
private isAuthOptional;
|
|
11
|
+
private extractToken;
|
|
7
12
|
}
|
|
8
13
|
//# sourceMappingURL=jwt-auth.guard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-auth.guard.d.ts","sourceRoot":"","sources":["../../../src/guards/base/jwt-auth.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,
|
|
1
|
+
{"version":3,"file":"jwt-auth.guard.d.ts","sourceRoot":"","sources":["../../../src/guards/base/jwt-auth.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAKjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAoB1E,qBACa,YAAa,YAAW,WAAW;IAE5C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,SAAS,EAAE,SAAS,EAEpB,SAAS,EAAE,eAAe;IAG7C,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAyC/C,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,YAAY;CAIrB"}
|
|
@@ -8,6 +8,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
exports.JwtAuthGuard = void 0;
|
|
13
16
|
const common_1 = require("@nestjs/common");
|
|
@@ -15,26 +18,21 @@ const core_1 = require("@nestjs/core");
|
|
|
15
18
|
const utils_1 = require("../utils");
|
|
16
19
|
const public_decorator_1 = require("../decorators/public.decorator");
|
|
17
20
|
const auth_optional_decorator_1 = require("../decorators/auth-optional.decorator");
|
|
21
|
+
const types_1 = require("../types");
|
|
18
22
|
let JwtAuthGuard = class JwtAuthGuard {
|
|
19
23
|
reflector;
|
|
20
|
-
|
|
24
|
+
jwtConfig;
|
|
25
|
+
constructor(reflector, jwtConfig) {
|
|
21
26
|
this.reflector = reflector;
|
|
27
|
+
this.jwtConfig = jwtConfig;
|
|
22
28
|
}
|
|
23
29
|
canActivate(context) {
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
context.getClass(),
|
|
27
|
-
]);
|
|
28
|
-
if (isPublic) {
|
|
30
|
+
const request = context.switchToHttp().getRequest();
|
|
31
|
+
if (this.isPublic(context)) {
|
|
29
32
|
return true;
|
|
30
33
|
}
|
|
31
|
-
const isAuthOptional = this.
|
|
32
|
-
|
|
33
|
-
context.getClass(),
|
|
34
|
-
]);
|
|
35
|
-
const request = context.switchToHttp().getRequest();
|
|
36
|
-
const authHeader = request.headers.authorization;
|
|
37
|
-
const token = (0, utils_1.extractBearer)(authHeader);
|
|
34
|
+
const isAuthOptional = this.isAuthOptional(context);
|
|
35
|
+
const token = this.extractToken(request);
|
|
38
36
|
if (!token) {
|
|
39
37
|
if (isAuthOptional) {
|
|
40
38
|
return true;
|
|
@@ -42,7 +40,7 @@ let JwtAuthGuard = class JwtAuthGuard {
|
|
|
42
40
|
throw new common_1.UnauthorizedException('Missing or invalid Authorization header');
|
|
43
41
|
}
|
|
44
42
|
try {
|
|
45
|
-
const payload = (0, utils_1.verifyJwt)(token);
|
|
43
|
+
const payload = (0, utils_1.verifyJwt)(token, this.jwtConfig);
|
|
46
44
|
request.user = {
|
|
47
45
|
...payload,
|
|
48
46
|
id: payload.id ?? payload.sub,
|
|
@@ -51,22 +49,36 @@ let JwtAuthGuard = class JwtAuthGuard {
|
|
|
51
49
|
return true;
|
|
52
50
|
}
|
|
53
51
|
catch (error) {
|
|
54
|
-
if (
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
if (error.name === 'TokenExpiredError') {
|
|
52
|
+
if (error?.name === 'TokenExpiredError') {
|
|
58
53
|
throw new common_1.UnauthorizedException('Token expired');
|
|
59
54
|
}
|
|
60
|
-
if (error
|
|
55
|
+
if (error?.name === 'JsonWebTokenError') {
|
|
61
56
|
throw new common_1.UnauthorizedException(error.message || 'Invalid token');
|
|
62
57
|
}
|
|
63
58
|
throw new common_1.ForbiddenException('Token verification failed');
|
|
64
59
|
}
|
|
65
60
|
}
|
|
61
|
+
isPublic(context) {
|
|
62
|
+
return this.reflector.getAllAndOverride(public_decorator_1.IS_PUBLIC_KEY, [
|
|
63
|
+
context.getHandler(),
|
|
64
|
+
context.getClass(),
|
|
65
|
+
]) === true;
|
|
66
|
+
}
|
|
67
|
+
isAuthOptional(context) {
|
|
68
|
+
return this.reflector.getAllAndOverride(auth_optional_decorator_1.IS_AUTH_OPTIONAL_KEY, [
|
|
69
|
+
context.getHandler(),
|
|
70
|
+
context.getClass(),
|
|
71
|
+
]) === true;
|
|
72
|
+
}
|
|
73
|
+
extractToken(request) {
|
|
74
|
+
const authHeader = request.headers.authorization;
|
|
75
|
+
return (0, utils_1.extractBearer)(authHeader);
|
|
76
|
+
}
|
|
66
77
|
};
|
|
67
78
|
exports.JwtAuthGuard = JwtAuthGuard;
|
|
68
79
|
exports.JwtAuthGuard = JwtAuthGuard = __decorate([
|
|
69
80
|
(0, common_1.Injectable)(),
|
|
70
|
-
|
|
81
|
+
__param(1, (0, common_1.Inject)(types_1.JWT_VERIFY_CONFIG_TOKEN)),
|
|
82
|
+
__metadata("design:paramtypes", [core_1.Reflector, Object])
|
|
71
83
|
], JwtAuthGuard);
|
|
72
84
|
//# sourceMappingURL=jwt-auth.guard.js.map
|