@quanticjs/core 1.1.1

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.
Files changed (181) hide show
  1. package/dist/bootstrap/bootstrapService.d.ts +8 -0
  2. package/dist/bootstrap/bootstrapService.js +58 -0
  3. package/dist/cqrs/PipelineExecutor.d.ts +31 -0
  4. package/dist/cqrs/PipelineExecutor.js +81 -0
  5. package/dist/cqrs/behaviors/CacheBehavior.d.ts +9 -0
  6. package/dist/cqrs/behaviors/CacheBehavior.js +68 -0
  7. package/dist/cqrs/behaviors/DistributedLockBehavior.d.ts +12 -0
  8. package/dist/cqrs/behaviors/DistributedLockBehavior.js +90 -0
  9. package/dist/cqrs/behaviors/FeatureFlagBehavior.d.ts +8 -0
  10. package/dist/cqrs/behaviors/FeatureFlagBehavior.js +58 -0
  11. package/dist/cqrs/behaviors/InvalidateCacheBehavior.d.ts +9 -0
  12. package/dist/cqrs/behaviors/InvalidateCacheBehavior.js +61 -0
  13. package/dist/cqrs/behaviors/LogBehavior.d.ts +9 -0
  14. package/dist/cqrs/behaviors/LogBehavior.js +125 -0
  15. package/dist/cqrs/behaviors/PerformanceBehavior.d.ts +12 -0
  16. package/dist/cqrs/behaviors/PerformanceBehavior.js +56 -0
  17. package/dist/cqrs/behaviors/TransactionalBehavior.d.ts +18 -0
  18. package/dist/cqrs/behaviors/TransactionalBehavior.js +77 -0
  19. package/dist/cqrs/behaviors/ValidationBehavior.d.ts +4 -0
  20. package/dist/cqrs/behaviors/ValidationBehavior.js +33 -0
  21. package/dist/cqrs/behaviors/WorkflowBehavior.d.ts +8 -0
  22. package/dist/cqrs/behaviors/WorkflowBehavior.js +61 -0
  23. package/dist/cqrs/constants.d.ts +2 -0
  24. package/dist/cqrs/constants.js +5 -0
  25. package/dist/cqrs/decorators/Cache.decorator.d.ts +13 -0
  26. package/dist/cqrs/decorators/Cache.decorator.js +18 -0
  27. package/dist/cqrs/decorators/DistributedLock.decorator.d.ts +15 -0
  28. package/dist/cqrs/decorators/DistributedLock.decorator.js +23 -0
  29. package/dist/cqrs/decorators/FeatureFlag.decorator.d.ts +9 -0
  30. package/dist/cqrs/decorators/FeatureFlag.decorator.js +14 -0
  31. package/dist/cqrs/decorators/InvalidateCache.decorator.d.ts +6 -0
  32. package/dist/cqrs/decorators/InvalidateCache.decorator.js +14 -0
  33. package/dist/cqrs/decorators/IsolatedTransaction.decorator.d.ts +14 -0
  34. package/dist/cqrs/decorators/IsolatedTransaction.decorator.js +25 -0
  35. package/dist/cqrs/decorators/Log.decorator.d.ts +11 -0
  36. package/dist/cqrs/decorators/Log.decorator.js +18 -0
  37. package/dist/cqrs/decorators/Validate.decorator.d.ts +24 -0
  38. package/dist/cqrs/decorators/Validate.decorator.js +37 -0
  39. package/dist/cqrs/decorators/Workflow.decorator.d.ts +8 -0
  40. package/dist/cqrs/decorators/Workflow.decorator.js +14 -0
  41. package/dist/cqrs/interfaces/WorkflowEngine.d.ts +14 -0
  42. package/dist/cqrs/interfaces/WorkflowEngine.js +4 -0
  43. package/dist/cqrs/pipeline/QuanticCommandBus.d.ts +37 -0
  44. package/dist/cqrs/pipeline/QuanticCommandBus.js +99 -0
  45. package/dist/cqrs/pipeline/QuanticQueryBus.d.ts +28 -0
  46. package/dist/cqrs/pipeline/QuanticQueryBus.js +78 -0
  47. package/dist/cqrs/pipeline/runPipeline.d.ts +3 -0
  48. package/dist/cqrs/pipeline/runPipeline.js +12 -0
  49. package/dist/cqrs/transaction/TransactionContext.d.ts +18 -0
  50. package/dist/cqrs/transaction/TransactionContext.js +26 -0
  51. package/dist/cqrs/transaction/getTransactionalRepo.d.ts +16 -0
  52. package/dist/cqrs/transaction/getTransactionalRepo.js +22 -0
  53. package/dist/cqrs/validation/ICommandValidator.d.ts +48 -0
  54. package/dist/cqrs/validation/ICommandValidator.js +21 -0
  55. package/dist/entities/BaseEntity.d.ts +5 -0
  56. package/dist/entities/BaseEntity.js +31 -0
  57. package/dist/entities/TenantBaseEntity.d.ts +4 -0
  58. package/dist/entities/TenantBaseEntity.js +22 -0
  59. package/dist/events/DomainEvent.d.ts +14 -0
  60. package/dist/events/DomainEvent.js +27 -0
  61. package/dist/events/OutboxEvent.entity.d.ts +18 -0
  62. package/dist/events/OutboxEvent.entity.js +87 -0
  63. package/dist/events/OutboxPublisherService.d.ts +14 -0
  64. package/dist/events/OutboxPublisherService.js +104 -0
  65. package/dist/events/RedisStreamConsumer.d.ts +43 -0
  66. package/dist/events/RedisStreamConsumer.js +158 -0
  67. package/dist/events/RedisStreamPublisher.d.ts +9 -0
  68. package/dist/events/RedisStreamPublisher.js +60 -0
  69. package/dist/filters/GlobalExceptionFilter.d.ts +11 -0
  70. package/dist/filters/GlobalExceptionFilter.js +102 -0
  71. package/dist/guards/JwtAuthGuard.d.ts +10 -0
  72. package/dist/guards/JwtAuthGuard.js +46 -0
  73. package/dist/guards/JwtStrategy.d.ts +22 -0
  74. package/dist/guards/JwtStrategy.js +47 -0
  75. package/dist/guards/RolesGuard.d.ts +8 -0
  76. package/dist/guards/RolesGuard.js +52 -0
  77. package/dist/index.d.ts +69 -0
  78. package/dist/index.js +146 -0
  79. package/dist/interceptors/ResultInterceptor.d.ts +7 -0
  80. package/dist/interceptors/ResultInterceptor.js +88 -0
  81. package/dist/lifecycle/GracefulShutdownService.d.ts +24 -0
  82. package/dist/lifecycle/GracefulShutdownService.js +93 -0
  83. package/dist/logging/pino-config.d.ts +35 -0
  84. package/dist/logging/pino-config.js +79 -0
  85. package/dist/metrics/MetricsController.d.ts +7 -0
  86. package/dist/metrics/MetricsController.js +42 -0
  87. package/dist/metrics/MetricsService.d.ts +13 -0
  88. package/dist/metrics/MetricsService.js +58 -0
  89. package/dist/middleware/CorrelationIdMiddleware.d.ts +4 -0
  90. package/dist/middleware/CorrelationIdMiddleware.js +33 -0
  91. package/dist/middleware/CorrelationStore.d.ts +11 -0
  92. package/dist/middleware/CorrelationStore.js +9 -0
  93. package/dist/middleware/TenantContextMiddleware.d.ts +7 -0
  94. package/dist/middleware/TenantContextMiddleware.js +27 -0
  95. package/dist/middleware/TenantStore.d.ts +9 -0
  96. package/dist/middleware/TenantStore.js +9 -0
  97. package/dist/redis/redis.module.d.ts +8 -0
  98. package/dist/redis/redis.module.js +49 -0
  99. package/dist/resilience/CircuitBreakerFactory.d.ts +12 -0
  100. package/dist/resilience/CircuitBreakerFactory.js +22 -0
  101. package/dist/result/Result.d.ts +26 -0
  102. package/dist/result/Result.js +62 -0
  103. package/dist/shared-kernel.module.d.ts +13 -0
  104. package/dist/shared-kernel.module.js +87 -0
  105. package/dist/subscribers/TenantSubscriber.d.ts +20 -0
  106. package/dist/subscribers/TenantSubscriber.js +52 -0
  107. package/dist/testing/TestingModuleFactory.d.ts +23 -0
  108. package/dist/testing/TestingModuleFactory.js +63 -0
  109. package/dist/testing/index.d.ts +2 -0
  110. package/dist/testing/index.js +7 -0
  111. package/dist/testing/mocks.d.ts +34 -0
  112. package/dist/testing/mocks.js +62 -0
  113. package/dist/unleash/initial-flags.d.ts +7 -0
  114. package/dist/unleash/initial-flags.js +9 -0
  115. package/dist/unleash/unleash.module.d.ts +9 -0
  116. package/dist/unleash/unleash.module.js +47 -0
  117. package/package.json +140 -0
  118. package/src/bootstrap/bootstrapService.ts +72 -0
  119. package/src/cqrs/behaviors/CacheBehavior.spec.ts +63 -0
  120. package/src/cqrs/behaviors/CacheBehavior.ts +54 -0
  121. package/src/cqrs/behaviors/DistributedLockBehavior.ts +88 -0
  122. package/src/cqrs/behaviors/FeatureFlagBehavior.ts +46 -0
  123. package/src/cqrs/behaviors/InvalidateCacheBehavior.spec.ts +89 -0
  124. package/src/cqrs/behaviors/InvalidateCacheBehavior.ts +50 -0
  125. package/src/cqrs/behaviors/LogBehavior.spec.ts +55 -0
  126. package/src/cqrs/behaviors/LogBehavior.ts +121 -0
  127. package/src/cqrs/behaviors/PerformanceBehavior.spec.ts +48 -0
  128. package/src/cqrs/behaviors/PerformanceBehavior.ts +43 -0
  129. package/src/cqrs/behaviors/TransactionalBehavior.ts +64 -0
  130. package/src/cqrs/behaviors/ValidationBehavior.spec.ts +114 -0
  131. package/src/cqrs/behaviors/ValidationBehavior.ts +29 -0
  132. package/src/cqrs/behaviors/WorkflowBehavior.spec.ts +97 -0
  133. package/src/cqrs/behaviors/WorkflowBehavior.ts +62 -0
  134. package/src/cqrs/constants.ts +2 -0
  135. package/src/cqrs/decorators/Cache.decorator.ts +24 -0
  136. package/src/cqrs/decorators/DistributedLock.decorator.ts +34 -0
  137. package/src/cqrs/decorators/FeatureFlag.decorator.ts +23 -0
  138. package/src/cqrs/decorators/InvalidateCache.decorator.spec.ts +20 -0
  139. package/src/cqrs/decorators/InvalidateCache.decorator.ts +17 -0
  140. package/src/cqrs/decorators/IsolatedTransaction.decorator.ts +24 -0
  141. package/src/cqrs/decorators/Log.decorator.ts +22 -0
  142. package/src/cqrs/decorators/Validate.decorator.ts +39 -0
  143. package/src/cqrs/decorators/Workflow.decorator.ts +22 -0
  144. package/src/cqrs/interfaces/WorkflowEngine.ts +19 -0
  145. package/src/cqrs/pipeline/QuanticCommandBus.ts +69 -0
  146. package/src/cqrs/pipeline/QuanticQueryBus.ts +56 -0
  147. package/src/cqrs/pipeline/runPipeline.ts +22 -0
  148. package/src/cqrs/transaction/TransactionContext.ts +26 -0
  149. package/src/cqrs/transaction/getTransactionalRepo.ts +23 -0
  150. package/src/cqrs/validation/ICommandValidator.ts +55 -0
  151. package/src/entities/BaseEntity.ts +16 -0
  152. package/src/entities/TenantBaseEntity.ts +7 -0
  153. package/src/events/DomainEvent.ts +27 -0
  154. package/src/events/OutboxEvent.entity.ts +56 -0
  155. package/src/events/OutboxPublisherService.ts +94 -0
  156. package/src/events/RedisStreamConsumer.ts +172 -0
  157. package/src/events/RedisStreamPublisher.ts +54 -0
  158. package/src/filters/GlobalExceptionFilter.ts +125 -0
  159. package/src/guards/JwtAuthGuard.ts +29 -0
  160. package/src/guards/JwtStrategy.ts +41 -0
  161. package/src/guards/RolesGuard.ts +39 -0
  162. package/src/index.ts +118 -0
  163. package/src/interceptors/ResultInterceptor.ts +93 -0
  164. package/src/lifecycle/GracefulShutdownService.ts +77 -0
  165. package/src/logging/pino-config.ts +80 -0
  166. package/src/metrics/MetricsController.ts +17 -0
  167. package/src/metrics/MetricsService.ts +55 -0
  168. package/src/middleware/CorrelationIdMiddleware.ts +27 -0
  169. package/src/middleware/CorrelationStore.ts +13 -0
  170. package/src/middleware/TenantContextMiddleware.ts +21 -0
  171. package/src/middleware/TenantStore.ts +11 -0
  172. package/src/redis/redis.module.ts +41 -0
  173. package/src/resilience/CircuitBreakerFactory.ts +33 -0
  174. package/src/result/Result.ts +66 -0
  175. package/src/shared-kernel.module.ts +87 -0
  176. package/src/subscribers/TenantSubscriber.ts +47 -0
  177. package/src/testing/TestingModuleFactory.ts +78 -0
  178. package/src/testing/index.ts +2 -0
  179. package/src/testing/mocks.ts +59 -0
  180. package/src/unleash/unleash.module.ts +45 -0
  181. package/tsconfig.json +22 -0
@@ -0,0 +1,52 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RolesGuard = exports.Roles = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const ROLES_KEY = 'roles';
16
+ const Roles = (...roles) => (target, _key, descriptor) => {
17
+ if (descriptor) {
18
+ Reflect.defineMetadata(ROLES_KEY, roles, descriptor.value);
19
+ }
20
+ else {
21
+ Reflect.defineMetadata(ROLES_KEY, roles, target);
22
+ }
23
+ };
24
+ exports.Roles = Roles;
25
+ let RolesGuard = class RolesGuard {
26
+ reflector;
27
+ constructor(reflector) {
28
+ this.reflector = reflector;
29
+ }
30
+ canActivate(context) {
31
+ const requiredRoles = this.reflector.getAllAndOverride(ROLES_KEY, [
32
+ context.getHandler(),
33
+ context.getClass(),
34
+ ]);
35
+ if (!requiredRoles || requiredRoles.length === 0)
36
+ return true;
37
+ const request = context.switchToHttp().getRequest();
38
+ const userRoles = request.user?.roles || [];
39
+ const hasRole = requiredRoles.some((role) => userRoles.includes(role));
40
+ if (!hasRole) {
41
+ throw new common_1.ForbiddenException({
42
+ error: { code: 'FORBIDDEN', message: 'Insufficient permissions' },
43
+ });
44
+ }
45
+ return true;
46
+ }
47
+ };
48
+ exports.RolesGuard = RolesGuard;
49
+ exports.RolesGuard = RolesGuard = __decorate([
50
+ (0, common_1.Injectable)(),
51
+ __metadata("design:paramtypes", [core_1.Reflector])
52
+ ], RolesGuard);
@@ -0,0 +1,69 @@
1
+ export { Result, ErrorType } from './result/Result';
2
+ export { BaseEntity } from './entities/BaseEntity';
3
+ export { TenantBaseEntity } from './entities/TenantBaseEntity';
4
+ export { CorrelationIdMiddleware } from './middleware/CorrelationIdMiddleware';
5
+ export { correlationStore } from './middleware/CorrelationStore';
6
+ export type { CorrelationStoreData } from './middleware/CorrelationStore';
7
+ export { TenantContextMiddleware, TenantContext } from './middleware/TenantContextMiddleware';
8
+ export { tenantStore } from './middleware/TenantStore';
9
+ export type { TenantStoreData } from './middleware/TenantStore';
10
+ export { GlobalExceptionFilter } from './filters/GlobalExceptionFilter';
11
+ export { ResultInterceptor } from './interceptors/ResultInterceptor';
12
+ export { JwtAuthGuard, Public } from './guards/JwtAuthGuard';
13
+ export { JwtStrategy, JwtPayload } from './guards/JwtStrategy';
14
+ export { RolesGuard, Roles } from './guards/RolesGuard';
15
+ export { TenantSubscriber } from './subscribers/TenantSubscriber';
16
+ export { createCircuitBreaker } from './resilience/CircuitBreakerFactory';
17
+ export type { CircuitBreakerOptions } from './resilience/CircuitBreakerFactory';
18
+ export { bootstrapService } from './bootstrap/bootstrapService';
19
+ export type { BootstrapOptions } from './bootstrap/bootstrapService';
20
+ export { createPinoConfig } from './logging/pino-config';
21
+ export { REDIS_CLIENT } from './cqrs/constants';
22
+ export { FeatureFlag, getFeatureFlagMetadata } from './cqrs/decorators/FeatureFlag.decorator';
23
+ export type { FeatureFlagOptions } from './cqrs/decorators/FeatureFlag.decorator';
24
+ export { Log, getLogMetadata } from './cqrs/decorators/Log.decorator';
25
+ export type { LogOptions } from './cqrs/decorators/Log.decorator';
26
+ export { Validate, shouldValidate, getValidatorClass } from './cqrs/decorators/Validate.decorator';
27
+ export type { ICommandValidator } from './cqrs/validation/ICommandValidator';
28
+ export { validateCommand } from './cqrs/validation/ICommandValidator';
29
+ export { Cache, getCacheMetadata } from './cqrs/decorators/Cache.decorator';
30
+ export type { CacheOptions } from './cqrs/decorators/Cache.decorator';
31
+ export { InvalidateCache, getInvalidateCacheMetadata } from './cqrs/decorators/InvalidateCache.decorator';
32
+ export type { InvalidateCacheOptions } from './cqrs/decorators/InvalidateCache.decorator';
33
+ export { DistributedLock, getDistributedLockMetadata } from './cqrs/decorators/DistributedLock.decorator';
34
+ export type { DistributedLockOptions } from './cqrs/decorators/DistributedLock.decorator';
35
+ export { IsolatedTransaction, isIsolatedTransaction } from './cqrs/decorators/IsolatedTransaction.decorator';
36
+ export { Workflow, getWorkflowMetadata } from './cqrs/decorators/Workflow.decorator';
37
+ export type { WorkflowOptions } from './cqrs/decorators/Workflow.decorator';
38
+ export { WORKFLOW_ENGINE } from './cqrs/interfaces/WorkflowEngine';
39
+ export type { WorkflowEngine, WorkflowStartResult } from './cqrs/interfaces/WorkflowEngine';
40
+ export { TransactionContext } from './cqrs/transaction/TransactionContext';
41
+ export { getTransactionalRepo } from './cqrs/transaction/getTransactionalRepo';
42
+ export { MetricsService } from './metrics/MetricsService';
43
+ export { MetricsController } from './metrics/MetricsController';
44
+ export { LogBehavior } from './cqrs/behaviors/LogBehavior';
45
+ export { FeatureFlagBehavior } from './cqrs/behaviors/FeatureFlagBehavior';
46
+ export { ValidationBehavior } from './cqrs/behaviors/ValidationBehavior';
47
+ export { CacheBehavior } from './cqrs/behaviors/CacheBehavior';
48
+ export { InvalidateCacheBehavior } from './cqrs/behaviors/InvalidateCacheBehavior';
49
+ export { DistributedLockBehavior } from './cqrs/behaviors/DistributedLockBehavior';
50
+ export { TransactionalBehavior } from './cqrs/behaviors/TransactionalBehavior';
51
+ export { PerformanceBehavior } from './cqrs/behaviors/PerformanceBehavior';
52
+ export { WorkflowBehavior } from './cqrs/behaviors/WorkflowBehavior';
53
+ export { QuanticCommandBus } from './cqrs/pipeline/QuanticCommandBus';
54
+ export { QuanticQueryBus } from './cqrs/pipeline/QuanticQueryBus';
55
+ export { type BehaviorFn } from './cqrs/pipeline/runPipeline';
56
+ export { RedisModule } from './redis/redis.module';
57
+ export type { RedisModuleOptions } from './redis/redis.module';
58
+ export { DomainEvent } from './events/DomainEvent';
59
+ export type { DomainEventPayload } from './events/DomainEvent';
60
+ export { OutboxEvent, OutboxEventStatus } from './events/OutboxEvent.entity';
61
+ export { RedisStreamPublisher } from './events/RedisStreamPublisher';
62
+ export { RedisStreamConsumer } from './events/RedisStreamConsumer';
63
+ export { OutboxPublisherService } from './events/OutboxPublisherService';
64
+ export { UnleashModule } from './unleash/unleash.module';
65
+ export type { UnleashModuleOptions } from './unleash/unleash.module';
66
+ export { GracefulShutdownService } from './lifecycle/GracefulShutdownService';
67
+ export { QuanticModule, SharedKernelModule } from './shared-kernel.module';
68
+ export type { QuanticModuleOptions, SharedKernelModuleOptions } from './shared-kernel.module';
69
+ export { createMockRepository, createMockRedisClient } from './testing/mocks';
package/dist/index.js ADDED
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionalBehavior = exports.DistributedLockBehavior = exports.InvalidateCacheBehavior = exports.CacheBehavior = exports.ValidationBehavior = exports.FeatureFlagBehavior = exports.LogBehavior = exports.MetricsController = exports.MetricsService = exports.getTransactionalRepo = exports.TransactionContext = exports.WORKFLOW_ENGINE = exports.getWorkflowMetadata = exports.Workflow = exports.isIsolatedTransaction = exports.IsolatedTransaction = exports.getDistributedLockMetadata = exports.DistributedLock = exports.getInvalidateCacheMetadata = exports.InvalidateCache = exports.getCacheMetadata = exports.Cache = exports.validateCommand = exports.getValidatorClass = exports.shouldValidate = exports.Validate = exports.getLogMetadata = exports.Log = exports.getFeatureFlagMetadata = exports.FeatureFlag = exports.REDIS_CLIENT = exports.createPinoConfig = exports.bootstrapService = exports.createCircuitBreaker = exports.TenantSubscriber = exports.Roles = exports.RolesGuard = exports.JwtStrategy = exports.Public = exports.JwtAuthGuard = exports.ResultInterceptor = exports.GlobalExceptionFilter = exports.tenantStore = exports.TenantContextMiddleware = exports.correlationStore = exports.CorrelationIdMiddleware = exports.TenantBaseEntity = exports.BaseEntity = exports.ErrorType = exports.Result = void 0;
4
+ exports.createMockRedisClient = exports.createMockRepository = exports.SharedKernelModule = exports.QuanticModule = exports.GracefulShutdownService = exports.UnleashModule = exports.OutboxPublisherService = exports.RedisStreamConsumer = exports.RedisStreamPublisher = exports.OutboxEventStatus = exports.OutboxEvent = exports.DomainEvent = exports.RedisModule = exports.QuanticQueryBus = exports.QuanticCommandBus = exports.WorkflowBehavior = exports.PerformanceBehavior = void 0;
5
+ // Result
6
+ var Result_1 = require("./result/Result");
7
+ Object.defineProperty(exports, "Result", { enumerable: true, get: function () { return Result_1.Result; } });
8
+ Object.defineProperty(exports, "ErrorType", { enumerable: true, get: function () { return Result_1.ErrorType; } });
9
+ // Entities
10
+ var BaseEntity_1 = require("./entities/BaseEntity");
11
+ Object.defineProperty(exports, "BaseEntity", { enumerable: true, get: function () { return BaseEntity_1.BaseEntity; } });
12
+ var TenantBaseEntity_1 = require("./entities/TenantBaseEntity");
13
+ Object.defineProperty(exports, "TenantBaseEntity", { enumerable: true, get: function () { return TenantBaseEntity_1.TenantBaseEntity; } });
14
+ // Middleware
15
+ var CorrelationIdMiddleware_1 = require("./middleware/CorrelationIdMiddleware");
16
+ Object.defineProperty(exports, "CorrelationIdMiddleware", { enumerable: true, get: function () { return CorrelationIdMiddleware_1.CorrelationIdMiddleware; } });
17
+ var CorrelationStore_1 = require("./middleware/CorrelationStore");
18
+ Object.defineProperty(exports, "correlationStore", { enumerable: true, get: function () { return CorrelationStore_1.correlationStore; } });
19
+ var TenantContextMiddleware_1 = require("./middleware/TenantContextMiddleware");
20
+ Object.defineProperty(exports, "TenantContextMiddleware", { enumerable: true, get: function () { return TenantContextMiddleware_1.TenantContextMiddleware; } });
21
+ var TenantStore_1 = require("./middleware/TenantStore");
22
+ Object.defineProperty(exports, "tenantStore", { enumerable: true, get: function () { return TenantStore_1.tenantStore; } });
23
+ // Filters
24
+ var GlobalExceptionFilter_1 = require("./filters/GlobalExceptionFilter");
25
+ Object.defineProperty(exports, "GlobalExceptionFilter", { enumerable: true, get: function () { return GlobalExceptionFilter_1.GlobalExceptionFilter; } });
26
+ // Interceptors
27
+ var ResultInterceptor_1 = require("./interceptors/ResultInterceptor");
28
+ Object.defineProperty(exports, "ResultInterceptor", { enumerable: true, get: function () { return ResultInterceptor_1.ResultInterceptor; } });
29
+ // Guards
30
+ var JwtAuthGuard_1 = require("./guards/JwtAuthGuard");
31
+ Object.defineProperty(exports, "JwtAuthGuard", { enumerable: true, get: function () { return JwtAuthGuard_1.JwtAuthGuard; } });
32
+ Object.defineProperty(exports, "Public", { enumerable: true, get: function () { return JwtAuthGuard_1.Public; } });
33
+ var JwtStrategy_1 = require("./guards/JwtStrategy");
34
+ Object.defineProperty(exports, "JwtStrategy", { enumerable: true, get: function () { return JwtStrategy_1.JwtStrategy; } });
35
+ var RolesGuard_1 = require("./guards/RolesGuard");
36
+ Object.defineProperty(exports, "RolesGuard", { enumerable: true, get: function () { return RolesGuard_1.RolesGuard; } });
37
+ Object.defineProperty(exports, "Roles", { enumerable: true, get: function () { return RolesGuard_1.Roles; } });
38
+ // Subscribers
39
+ var TenantSubscriber_1 = require("./subscribers/TenantSubscriber");
40
+ Object.defineProperty(exports, "TenantSubscriber", { enumerable: true, get: function () { return TenantSubscriber_1.TenantSubscriber; } });
41
+ // Resilience
42
+ var CircuitBreakerFactory_1 = require("./resilience/CircuitBreakerFactory");
43
+ Object.defineProperty(exports, "createCircuitBreaker", { enumerable: true, get: function () { return CircuitBreakerFactory_1.createCircuitBreaker; } });
44
+ // Bootstrap
45
+ var bootstrapService_1 = require("./bootstrap/bootstrapService");
46
+ Object.defineProperty(exports, "bootstrapService", { enumerable: true, get: function () { return bootstrapService_1.bootstrapService; } });
47
+ // Logging
48
+ var pino_config_1 = require("./logging/pino-config");
49
+ Object.defineProperty(exports, "createPinoConfig", { enumerable: true, get: function () { return pino_config_1.createPinoConfig; } });
50
+ // CQRS Constants
51
+ var constants_1 = require("./cqrs/constants");
52
+ Object.defineProperty(exports, "REDIS_CLIENT", { enumerable: true, get: function () { return constants_1.REDIS_CLIENT; } });
53
+ // CQRS Decorators
54
+ var FeatureFlag_decorator_1 = require("./cqrs/decorators/FeatureFlag.decorator");
55
+ Object.defineProperty(exports, "FeatureFlag", { enumerable: true, get: function () { return FeatureFlag_decorator_1.FeatureFlag; } });
56
+ Object.defineProperty(exports, "getFeatureFlagMetadata", { enumerable: true, get: function () { return FeatureFlag_decorator_1.getFeatureFlagMetadata; } });
57
+ var Log_decorator_1 = require("./cqrs/decorators/Log.decorator");
58
+ Object.defineProperty(exports, "Log", { enumerable: true, get: function () { return Log_decorator_1.Log; } });
59
+ Object.defineProperty(exports, "getLogMetadata", { enumerable: true, get: function () { return Log_decorator_1.getLogMetadata; } });
60
+ var Validate_decorator_1 = require("./cqrs/decorators/Validate.decorator");
61
+ Object.defineProperty(exports, "Validate", { enumerable: true, get: function () { return Validate_decorator_1.Validate; } });
62
+ Object.defineProperty(exports, "shouldValidate", { enumerable: true, get: function () { return Validate_decorator_1.shouldValidate; } });
63
+ Object.defineProperty(exports, "getValidatorClass", { enumerable: true, get: function () { return Validate_decorator_1.getValidatorClass; } });
64
+ var ICommandValidator_1 = require("./cqrs/validation/ICommandValidator");
65
+ Object.defineProperty(exports, "validateCommand", { enumerable: true, get: function () { return ICommandValidator_1.validateCommand; } });
66
+ var Cache_decorator_1 = require("./cqrs/decorators/Cache.decorator");
67
+ Object.defineProperty(exports, "Cache", { enumerable: true, get: function () { return Cache_decorator_1.Cache; } });
68
+ Object.defineProperty(exports, "getCacheMetadata", { enumerable: true, get: function () { return Cache_decorator_1.getCacheMetadata; } });
69
+ var InvalidateCache_decorator_1 = require("./cqrs/decorators/InvalidateCache.decorator");
70
+ Object.defineProperty(exports, "InvalidateCache", { enumerable: true, get: function () { return InvalidateCache_decorator_1.InvalidateCache; } });
71
+ Object.defineProperty(exports, "getInvalidateCacheMetadata", { enumerable: true, get: function () { return InvalidateCache_decorator_1.getInvalidateCacheMetadata; } });
72
+ var DistributedLock_decorator_1 = require("./cqrs/decorators/DistributedLock.decorator");
73
+ Object.defineProperty(exports, "DistributedLock", { enumerable: true, get: function () { return DistributedLock_decorator_1.DistributedLock; } });
74
+ Object.defineProperty(exports, "getDistributedLockMetadata", { enumerable: true, get: function () { return DistributedLock_decorator_1.getDistributedLockMetadata; } });
75
+ var IsolatedTransaction_decorator_1 = require("./cqrs/decorators/IsolatedTransaction.decorator");
76
+ Object.defineProperty(exports, "IsolatedTransaction", { enumerable: true, get: function () { return IsolatedTransaction_decorator_1.IsolatedTransaction; } });
77
+ Object.defineProperty(exports, "isIsolatedTransaction", { enumerable: true, get: function () { return IsolatedTransaction_decorator_1.isIsolatedTransaction; } });
78
+ var Workflow_decorator_1 = require("./cqrs/decorators/Workflow.decorator");
79
+ Object.defineProperty(exports, "Workflow", { enumerable: true, get: function () { return Workflow_decorator_1.Workflow; } });
80
+ Object.defineProperty(exports, "getWorkflowMetadata", { enumerable: true, get: function () { return Workflow_decorator_1.getWorkflowMetadata; } });
81
+ // Workflow Engine Interface
82
+ var WorkflowEngine_1 = require("./cqrs/interfaces/WorkflowEngine");
83
+ Object.defineProperty(exports, "WORKFLOW_ENGINE", { enumerable: true, get: function () { return WorkflowEngine_1.WORKFLOW_ENGINE; } });
84
+ // Transaction (UnitOfWork)
85
+ var TransactionContext_1 = require("./cqrs/transaction/TransactionContext");
86
+ Object.defineProperty(exports, "TransactionContext", { enumerable: true, get: function () { return TransactionContext_1.TransactionContext; } });
87
+ var getTransactionalRepo_1 = require("./cqrs/transaction/getTransactionalRepo");
88
+ Object.defineProperty(exports, "getTransactionalRepo", { enumerable: true, get: function () { return getTransactionalRepo_1.getTransactionalRepo; } });
89
+ // Metrics
90
+ var MetricsService_1 = require("./metrics/MetricsService");
91
+ Object.defineProperty(exports, "MetricsService", { enumerable: true, get: function () { return MetricsService_1.MetricsService; } });
92
+ var MetricsController_1 = require("./metrics/MetricsController");
93
+ Object.defineProperty(exports, "MetricsController", { enumerable: true, get: function () { return MetricsController_1.MetricsController; } });
94
+ // CQRS Behaviors
95
+ var LogBehavior_1 = require("./cqrs/behaviors/LogBehavior");
96
+ Object.defineProperty(exports, "LogBehavior", { enumerable: true, get: function () { return LogBehavior_1.LogBehavior; } });
97
+ var FeatureFlagBehavior_1 = require("./cqrs/behaviors/FeatureFlagBehavior");
98
+ Object.defineProperty(exports, "FeatureFlagBehavior", { enumerable: true, get: function () { return FeatureFlagBehavior_1.FeatureFlagBehavior; } });
99
+ var ValidationBehavior_1 = require("./cqrs/behaviors/ValidationBehavior");
100
+ Object.defineProperty(exports, "ValidationBehavior", { enumerable: true, get: function () { return ValidationBehavior_1.ValidationBehavior; } });
101
+ var CacheBehavior_1 = require("./cqrs/behaviors/CacheBehavior");
102
+ Object.defineProperty(exports, "CacheBehavior", { enumerable: true, get: function () { return CacheBehavior_1.CacheBehavior; } });
103
+ var InvalidateCacheBehavior_1 = require("./cqrs/behaviors/InvalidateCacheBehavior");
104
+ Object.defineProperty(exports, "InvalidateCacheBehavior", { enumerable: true, get: function () { return InvalidateCacheBehavior_1.InvalidateCacheBehavior; } });
105
+ var DistributedLockBehavior_1 = require("./cqrs/behaviors/DistributedLockBehavior");
106
+ Object.defineProperty(exports, "DistributedLockBehavior", { enumerable: true, get: function () { return DistributedLockBehavior_1.DistributedLockBehavior; } });
107
+ var TransactionalBehavior_1 = require("./cqrs/behaviors/TransactionalBehavior");
108
+ Object.defineProperty(exports, "TransactionalBehavior", { enumerable: true, get: function () { return TransactionalBehavior_1.TransactionalBehavior; } });
109
+ var PerformanceBehavior_1 = require("./cqrs/behaviors/PerformanceBehavior");
110
+ Object.defineProperty(exports, "PerformanceBehavior", { enumerable: true, get: function () { return PerformanceBehavior_1.PerformanceBehavior; } });
111
+ var WorkflowBehavior_1 = require("./cqrs/behaviors/WorkflowBehavior");
112
+ Object.defineProperty(exports, "WorkflowBehavior", { enumerable: true, get: function () { return WorkflowBehavior_1.WorkflowBehavior; } });
113
+ // CQRS Pipeline
114
+ var QuanticCommandBus_1 = require("./cqrs/pipeline/QuanticCommandBus");
115
+ Object.defineProperty(exports, "QuanticCommandBus", { enumerable: true, get: function () { return QuanticCommandBus_1.QuanticCommandBus; } });
116
+ var QuanticQueryBus_1 = require("./cqrs/pipeline/QuanticQueryBus");
117
+ Object.defineProperty(exports, "QuanticQueryBus", { enumerable: true, get: function () { return QuanticQueryBus_1.QuanticQueryBus; } });
118
+ // Redis
119
+ var redis_module_1 = require("./redis/redis.module");
120
+ Object.defineProperty(exports, "RedisModule", { enumerable: true, get: function () { return redis_module_1.RedisModule; } });
121
+ // Events
122
+ var DomainEvent_1 = require("./events/DomainEvent");
123
+ Object.defineProperty(exports, "DomainEvent", { enumerable: true, get: function () { return DomainEvent_1.DomainEvent; } });
124
+ var OutboxEvent_entity_1 = require("./events/OutboxEvent.entity");
125
+ Object.defineProperty(exports, "OutboxEvent", { enumerable: true, get: function () { return OutboxEvent_entity_1.OutboxEvent; } });
126
+ Object.defineProperty(exports, "OutboxEventStatus", { enumerable: true, get: function () { return OutboxEvent_entity_1.OutboxEventStatus; } });
127
+ var RedisStreamPublisher_1 = require("./events/RedisStreamPublisher");
128
+ Object.defineProperty(exports, "RedisStreamPublisher", { enumerable: true, get: function () { return RedisStreamPublisher_1.RedisStreamPublisher; } });
129
+ var RedisStreamConsumer_1 = require("./events/RedisStreamConsumer");
130
+ Object.defineProperty(exports, "RedisStreamConsumer", { enumerable: true, get: function () { return RedisStreamConsumer_1.RedisStreamConsumer; } });
131
+ var OutboxPublisherService_1 = require("./events/OutboxPublisherService");
132
+ Object.defineProperty(exports, "OutboxPublisherService", { enumerable: true, get: function () { return OutboxPublisherService_1.OutboxPublisherService; } });
133
+ // Unleash
134
+ var unleash_module_1 = require("./unleash/unleash.module");
135
+ Object.defineProperty(exports, "UnleashModule", { enumerable: true, get: function () { return unleash_module_1.UnleashModule; } });
136
+ // Lifecycle
137
+ var GracefulShutdownService_1 = require("./lifecycle/GracefulShutdownService");
138
+ Object.defineProperty(exports, "GracefulShutdownService", { enumerable: true, get: function () { return GracefulShutdownService_1.GracefulShutdownService; } });
139
+ // QuanticModule
140
+ var shared_kernel_module_1 = require("./shared-kernel.module");
141
+ Object.defineProperty(exports, "QuanticModule", { enumerable: true, get: function () { return shared_kernel_module_1.QuanticModule; } });
142
+ Object.defineProperty(exports, "SharedKernelModule", { enumerable: true, get: function () { return shared_kernel_module_1.SharedKernelModule; } });
143
+ // Testing mock helpers (safe for prod — no @nestjs/testing dependency)
144
+ var mocks_1 = require("./testing/mocks");
145
+ Object.defineProperty(exports, "createMockRepository", { enumerable: true, get: function () { return mocks_1.createMockRepository; } });
146
+ Object.defineProperty(exports, "createMockRedisClient", { enumerable: true, get: function () { return mocks_1.createMockRedisClient; } });
@@ -0,0 +1,7 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ export declare class ResultInterceptor implements NestInterceptor {
4
+ private readonly logger;
5
+ intercept(context: ExecutionContext, next: CallHandler): Observable<unknown>;
6
+ private sendResultError;
7
+ }
@@ -0,0 +1,88 @@
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 ResultInterceptor_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ResultInterceptor = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const rxjs_1 = require("rxjs");
13
+ const Result_1 = require("../result/Result");
14
+ const CorrelationStore_1 = require("../middleware/CorrelationStore");
15
+ const ERROR_TYPE_TO_STATUS = {
16
+ [Result_1.ErrorType.NotFound]: 404,
17
+ [Result_1.ErrorType.Forbidden]: 403,
18
+ [Result_1.ErrorType.Unauthorized]: 401,
19
+ [Result_1.ErrorType.Conflict]: 409,
20
+ [Result_1.ErrorType.ValidationError]: 400,
21
+ [Result_1.ErrorType.UnprocessableEntity]: 422,
22
+ [Result_1.ErrorType.InternalError]: 500,
23
+ };
24
+ const ERROR_TYPE_TO_TITLE = {
25
+ [Result_1.ErrorType.NotFound]: 'Not Found',
26
+ [Result_1.ErrorType.Forbidden]: 'Forbidden',
27
+ [Result_1.ErrorType.Unauthorized]: 'Unauthorized',
28
+ [Result_1.ErrorType.Conflict]: 'Conflict',
29
+ [Result_1.ErrorType.ValidationError]: 'Validation Error',
30
+ [Result_1.ErrorType.UnprocessableEntity]: 'Unprocessable Entity',
31
+ [Result_1.ErrorType.InternalError]: 'Internal Server Error',
32
+ };
33
+ let ResultInterceptor = ResultInterceptor_1 = class ResultInterceptor {
34
+ logger = new common_1.Logger(ResultInterceptor_1.name);
35
+ intercept(context, next) {
36
+ return next.handle().pipe((0, rxjs_1.switchMap)((data) => {
37
+ if (data instanceof Result_1.Result && !data.isSuccess) {
38
+ this.sendResultError(context, data);
39
+ return rxjs_1.EMPTY;
40
+ }
41
+ return (0, rxjs_1.of)(data);
42
+ }), (0, rxjs_1.catchError)((error) => {
43
+ if (error instanceof Result_1.Result) {
44
+ this.sendResultError(context, error);
45
+ return rxjs_1.EMPTY;
46
+ }
47
+ const err = error instanceof Error ? error : new Error(String(error));
48
+ this.logger.error({
49
+ msg: 'Unhandled exception before CQRS pipeline',
50
+ error: err.message,
51
+ stack: err.stack,
52
+ });
53
+ this.sendResultError(context, Result_1.Result.failure(Result_1.ErrorType.InternalError, err.message));
54
+ return rxjs_1.EMPTY;
55
+ }));
56
+ }
57
+ sendResultError(context, result) {
58
+ const request = context.switchToHttp().getRequest();
59
+ const response = context.switchToHttp().getResponse();
60
+ const correlationId = CorrelationStore_1.correlationStore.getStore()?.correlationId;
61
+ const status = ERROR_TYPE_TO_STATUS[result.errorType] ?? 500;
62
+ const title = ERROR_TYPE_TO_TITLE[result.errorType] ?? 'Unknown Error';
63
+ if (correlationId) {
64
+ response.setHeader('X-Correlation-ID', correlationId);
65
+ }
66
+ this.logger.warn({
67
+ msg: `${status} ${result.errorType}`,
68
+ correlationId,
69
+ status,
70
+ detail: result.errorMessage,
71
+ });
72
+ response
73
+ .status(status)
74
+ .setHeader('Content-Type', 'application/problem+json')
75
+ .json({
76
+ type: `https://arex.dev/errors/${result.errorType}`,
77
+ title,
78
+ status,
79
+ detail: result.errorMessage,
80
+ instance: request.originalUrl,
81
+ correlationId,
82
+ });
83
+ }
84
+ };
85
+ exports.ResultInterceptor = ResultInterceptor;
86
+ exports.ResultInterceptor = ResultInterceptor = ResultInterceptor_1 = __decorate([
87
+ (0, common_1.Injectable)()
88
+ ], ResultInterceptor);
@@ -0,0 +1,24 @@
1
+ import { OnModuleDestroy } from '@nestjs/common';
2
+ import { DataSource } from 'typeorm';
3
+ import type { Redis } from 'ioredis';
4
+ /**
5
+ * GracefulShutdownService ensures clean resource teardown on SIGTERM/SIGINT.
6
+ *
7
+ * Shutdown order:
8
+ * 1. Wait for in-flight work (subclasses can override `drainWork`)
9
+ * 2. Close database connections
10
+ * 3. Quit Redis
11
+ */
12
+ export declare class GracefulShutdownService implements OnModuleDestroy {
13
+ private readonly dataSource?;
14
+ private readonly redis?;
15
+ private readonly logger;
16
+ constructor(dataSource?: DataSource | undefined, redis?: Redis | undefined);
17
+ onModuleDestroy(): Promise<void>;
18
+ /**
19
+ * Override in service-specific subclasses to drain Bull queues,
20
+ * close Socket.IO servers, etc.
21
+ */
22
+ protected drainWork(): Promise<void>;
23
+ private withTimeout;
24
+ }
@@ -0,0 +1,93 @@
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 __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var GracefulShutdownService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.GracefulShutdownService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const typeorm_1 = require("typeorm");
19
+ const constants_1 = require("../cqrs/constants");
20
+ const SHUTDOWN_TIMEOUT_MS = 30_000;
21
+ /**
22
+ * GracefulShutdownService ensures clean resource teardown on SIGTERM/SIGINT.
23
+ *
24
+ * Shutdown order:
25
+ * 1. Wait for in-flight work (subclasses can override `drainWork`)
26
+ * 2. Close database connections
27
+ * 3. Quit Redis
28
+ */
29
+ let GracefulShutdownService = GracefulShutdownService_1 = class GracefulShutdownService {
30
+ dataSource;
31
+ redis;
32
+ logger = new common_1.Logger(GracefulShutdownService_1.name);
33
+ constructor(dataSource, redis) {
34
+ this.dataSource = dataSource;
35
+ this.redis = redis;
36
+ }
37
+ async onModuleDestroy() {
38
+ this.logger.log('Graceful shutdown initiated...');
39
+ // 1. Drain in-flight work with timeout
40
+ try {
41
+ await this.withTimeout(this.drainWork(), SHUTDOWN_TIMEOUT_MS, 'Work drain');
42
+ }
43
+ catch (err) {
44
+ this.logger.warn(`Work drain timeout or error: ${err.message}`);
45
+ }
46
+ // 2. Close database connections
47
+ if (this.dataSource?.isInitialized) {
48
+ try {
49
+ await this.dataSource.destroy();
50
+ this.logger.log('Database connections closed');
51
+ }
52
+ catch (err) {
53
+ this.logger.warn(`Database close error: ${err.message}`);
54
+ }
55
+ }
56
+ // 3. Quit Redis
57
+ if (this.redis) {
58
+ try {
59
+ await this.redis.quit();
60
+ this.logger.log('Redis connection closed');
61
+ }
62
+ catch (err) {
63
+ this.logger.warn(`Redis quit error: ${err.message}`);
64
+ }
65
+ }
66
+ this.logger.log('Graceful shutdown complete');
67
+ }
68
+ /**
69
+ * Override in service-specific subclasses to drain Bull queues,
70
+ * close Socket.IO servers, etc.
71
+ */
72
+ async drainWork() {
73
+ // Base implementation — no-op
74
+ }
75
+ withTimeout(promise, ms, label) {
76
+ return new Promise((resolve, reject) => {
77
+ const timer = setTimeout(() => {
78
+ reject(new Error(`${label} timed out after ${ms}ms`));
79
+ }, ms);
80
+ promise
81
+ .then(() => { clearTimeout(timer); resolve(); })
82
+ .catch((err) => { clearTimeout(timer); reject(err); });
83
+ });
84
+ }
85
+ };
86
+ exports.GracefulShutdownService = GracefulShutdownService;
87
+ exports.GracefulShutdownService = GracefulShutdownService = GracefulShutdownService_1 = __decorate([
88
+ (0, common_1.Injectable)(),
89
+ __param(0, (0, common_1.Optional)()),
90
+ __param(1, (0, common_1.Optional)()),
91
+ __param(1, (0, common_1.Inject)(constants_1.REDIS_CLIENT)),
92
+ __metadata("design:paramtypes", [typeorm_1.DataSource, Function])
93
+ ], GracefulShutdownService);
@@ -0,0 +1,35 @@
1
+ export declare function createPinoConfig(serviceName: string): {
2
+ pinoHttp: {
3
+ level: string;
4
+ transport: {
5
+ target: string;
6
+ options: {
7
+ serverUrl: string;
8
+ logOtherAs: string;
9
+ };
10
+ targets?: undefined;
11
+ } | {
12
+ targets: any[];
13
+ target?: undefined;
14
+ options?: undefined;
15
+ };
16
+ serializers: {
17
+ req(req: any): {
18
+ id: any;
19
+ method: any;
20
+ url: any;
21
+ correlationId: any;
22
+ };
23
+ res(res: any): {
24
+ statusCode: any;
25
+ };
26
+ email(value: string): string;
27
+ token(_value: string): string;
28
+ brd(value: string): string;
29
+ };
30
+ customProps(req: any): {
31
+ correlationId: any;
32
+ service: string;
33
+ };
34
+ };
35
+ };
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPinoConfig = createPinoConfig;
4
+ function canResolvePinoSeq() {
5
+ try {
6
+ require.resolve('pino-seq');
7
+ return true;
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ }
13
+ function buildTransport(logLevel) {
14
+ const seqUrl = process.env['SEQ_URL'];
15
+ const useSeq = seqUrl && canResolvePinoSeq();
16
+ if (process.env['NODE_ENV'] === 'production' && useSeq) {
17
+ return {
18
+ target: 'pino-seq',
19
+ options: { serverUrl: seqUrl, logOtherAs: 'Verbose' },
20
+ };
21
+ }
22
+ const targets = [
23
+ { target: 'pino/file', options: { destination: 1 }, level: logLevel },
24
+ ];
25
+ if (useSeq) {
26
+ targets.push({
27
+ target: 'pino-seq',
28
+ options: { serverUrl: seqUrl, logOtherAs: 'Verbose' },
29
+ level: logLevel,
30
+ });
31
+ }
32
+ return { targets };
33
+ }
34
+ function createPinoConfig(serviceName) {
35
+ const logLevel = process.env['LOG_LEVEL'] || 'info';
36
+ return {
37
+ pinoHttp: {
38
+ level: logLevel,
39
+ transport: buildTransport(logLevel),
40
+ serializers: {
41
+ req(req) {
42
+ return {
43
+ id: req.id,
44
+ method: req.method,
45
+ url: req.url,
46
+ correlationId: req.raw?.correlationId || req.headers?.['x-correlation-id'],
47
+ };
48
+ },
49
+ res(res) {
50
+ return {
51
+ statusCode: res.statusCode,
52
+ };
53
+ },
54
+ email(value) {
55
+ if (!value || typeof value !== 'string')
56
+ return value;
57
+ const [local, domain] = value.split('@');
58
+ if (!domain)
59
+ return value;
60
+ return `${local[0]}***@${domain}`;
61
+ },
62
+ token(_value) {
63
+ return '[REDACTED]';
64
+ },
65
+ brd(value) {
66
+ if (!value || typeof value !== 'string')
67
+ return value;
68
+ return value.length > 50 ? `${value.substring(0, 50)}...` : value;
69
+ },
70
+ },
71
+ customProps(req) {
72
+ return {
73
+ correlationId: req.correlationId || req.headers?.['x-correlation-id'],
74
+ service: serviceName,
75
+ };
76
+ },
77
+ },
78
+ };
79
+ }
@@ -0,0 +1,7 @@
1
+ import { Response } from 'express';
2
+ import { MetricsService } from './MetricsService';
3
+ export declare class MetricsController {
4
+ private readonly metrics;
5
+ constructor(metrics: MetricsService);
6
+ getMetrics(res: Response): Promise<void>;
7
+ }