@imaginamossas/farmabien-common 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.
Files changed (177) hide show
  1. package/dist/decorators/current-user.decorator.d.ts +9 -0
  2. package/dist/decorators/current-user.decorator.js +34 -0
  3. package/dist/decorators/current-user.decorator.js.map +1 -0
  4. package/dist/decorators/index.d.ts +4 -0
  5. package/dist/decorators/index.js +21 -0
  6. package/dist/decorators/index.js.map +1 -0
  7. package/dist/decorators/public.decorator.d.ts +2 -0
  8. package/dist/decorators/public.decorator.js +8 -0
  9. package/dist/decorators/public.decorator.js.map +1 -0
  10. package/dist/decorators/query-runner.decorator.d.ts +1 -0
  11. package/dist/decorators/query-runner.decorator.js +13 -0
  12. package/dist/decorators/query-runner.decorator.js.map +1 -0
  13. package/dist/decorators/request-id.decorator.d.ts +8 -0
  14. package/dist/decorators/request-id.decorator.js +15 -0
  15. package/dist/decorators/request-id.decorator.js.map +1 -0
  16. package/dist/dto/commons.dto.d.ts +5 -0
  17. package/dist/dto/commons.dto.js +10 -0
  18. package/dist/dto/commons.dto.js.map +1 -0
  19. package/dist/dto/index.d.ts +3 -0
  20. package/dist/dto/index.js +20 -0
  21. package/dist/dto/index.js.map +1 -0
  22. package/dist/dto/profile.dto.d.ts +28 -0
  23. package/dist/dto/profile.dto.js +171 -0
  24. package/dist/dto/profile.dto.js.map +1 -0
  25. package/dist/dto/response-data.dto.d.ts +5 -0
  26. package/dist/dto/response-data.dto.js +37 -0
  27. package/dist/dto/response-data.dto.js.map +1 -0
  28. package/dist/entities/base.entity.d.ts +5 -0
  29. package/dist/entities/base.entity.js +43 -0
  30. package/dist/entities/base.entity.js.map +1 -0
  31. package/dist/entities/customer.entity.d.ts +21 -0
  32. package/dist/entities/customer.entity.js +111 -0
  33. package/dist/entities/customer.entity.js.map +1 -0
  34. package/dist/entities/customers.providers.entity.d.ts +11 -0
  35. package/dist/entities/customers.providers.entity.js +61 -0
  36. package/dist/entities/customers.providers.entity.js.map +1 -0
  37. package/dist/entities/email-verification-token.entity.d.ts +14 -0
  38. package/dist/entities/email-verification-token.entity.js +69 -0
  39. package/dist/entities/email-verification-token.entity.js.map +1 -0
  40. package/dist/entities/index.d.ts +4 -0
  41. package/dist/entities/index.js +21 -0
  42. package/dist/entities/index.js.map +1 -0
  43. package/dist/entities/providers.code.entity.d.ts +5 -0
  44. package/dist/entities/providers.code.entity.js +31 -0
  45. package/dist/entities/providers.code.entity.js.map +1 -0
  46. package/dist/enums/gender.enum.d.ts +5 -0
  47. package/dist/enums/gender.enum.js +10 -0
  48. package/dist/enums/gender.enum.js.map +1 -0
  49. package/dist/enums/id-type.enum.d.ts +6 -0
  50. package/dist/enums/id-type.enum.js +11 -0
  51. package/dist/enums/id-type.enum.js.map +1 -0
  52. package/dist/enums/index.d.ts +2 -0
  53. package/dist/enums/index.js +19 -0
  54. package/dist/enums/index.js.map +1 -0
  55. package/dist/filters/app.exception.d.ts +7 -0
  56. package/dist/filters/app.exception.js +35 -0
  57. package/dist/filters/app.exception.js.map +1 -0
  58. package/dist/filters/custom.exception.filter.d.ts +8 -0
  59. package/dist/filters/custom.exception.filter.js +95 -0
  60. package/dist/filters/custom.exception.filter.js.map +1 -0
  61. package/dist/filters/index.d.ts +2 -0
  62. package/dist/filters/index.js +19 -0
  63. package/dist/filters/index.js.map +1 -0
  64. package/dist/guards/api-key.guard.d.ts +8 -0
  65. package/dist/guards/api-key.guard.js +58 -0
  66. package/dist/guards/api-key.guard.js.map +1 -0
  67. package/dist/guards/index.d.ts +2 -0
  68. package/dist/guards/index.js +19 -0
  69. package/dist/guards/index.js.map +1 -0
  70. package/dist/guards/jwt-auth.guard.d.ts +17 -0
  71. package/dist/guards/jwt-auth.guard.js +97 -0
  72. package/dist/guards/jwt-auth.guard.js.map +1 -0
  73. package/dist/index.d.ts +11 -0
  74. package/dist/index.js +28 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/interceptors/index.d.ts +1 -0
  77. package/dist/interceptors/index.js +18 -0
  78. package/dist/interceptors/index.js.map +1 -0
  79. package/dist/interceptors/logging.interceptor.d.ts +13 -0
  80. package/dist/interceptors/logging.interceptor.js +91 -0
  81. package/dist/interceptors/logging.interceptor.js.map +1 -0
  82. package/dist/middlewares/index.d.ts +1 -0
  83. package/dist/middlewares/index.js +18 -0
  84. package/dist/middlewares/index.js.map +1 -0
  85. package/dist/middlewares/request-id.middleware.d.ts +9 -0
  86. package/dist/middlewares/request-id.middleware.js +37 -0
  87. package/dist/middlewares/request-id.middleware.js.map +1 -0
  88. package/dist/queues/commons/src/commons.module.d.ts +2 -0
  89. package/dist/queues/commons/src/commons.module.js +26 -0
  90. package/dist/queues/commons/src/commons.module.js.map +1 -0
  91. package/dist/queues/commons/src/commons.service.d.ts +2 -0
  92. package/dist/queues/commons/src/commons.service.js +17 -0
  93. package/dist/queues/commons/src/commons.service.js.map +1 -0
  94. package/dist/queues/commons/src/index.d.ts +2 -0
  95. package/dist/queues/commons/src/index.js +19 -0
  96. package/dist/queues/commons/src/index.js.map +1 -0
  97. package/dist/queues/index.d.ts +4 -0
  98. package/dist/queues/index.js +21 -0
  99. package/dist/queues/index.js.map +1 -0
  100. package/dist/queues/outbox/src/index.d.ts +5 -0
  101. package/dist/queues/outbox/src/index.js +22 -0
  102. package/dist/queues/outbox/src/index.js.map +1 -0
  103. package/dist/queues/outbox/src/outbox-event.entity.d.ts +17 -0
  104. package/dist/queues/outbox/src/outbox-event.entity.js +76 -0
  105. package/dist/queues/outbox/src/outbox-event.entity.js.map +1 -0
  106. package/dist/queues/outbox/src/outbox.dispatcher.d.ts +10 -0
  107. package/dist/queues/outbox/src/outbox.dispatcher.js +52 -0
  108. package/dist/queues/outbox/src/outbox.dispatcher.js.map +1 -0
  109. package/dist/queues/outbox/src/outbox.interfaces.d.ts +8 -0
  110. package/dist/queues/outbox/src/outbox.interfaces.js +3 -0
  111. package/dist/queues/outbox/src/outbox.interfaces.js.map +1 -0
  112. package/dist/queues/outbox/src/outbox.module.d.ts +2 -0
  113. package/dist/queues/outbox/src/outbox.module.js +24 -0
  114. package/dist/queues/outbox/src/outbox.module.js.map +1 -0
  115. package/dist/queues/outbox/src/outbox.service.d.ts +12 -0
  116. package/dist/queues/outbox/src/outbox.service.js +73 -0
  117. package/dist/queues/outbox/src/outbox.service.js.map +1 -0
  118. package/dist/queues/sns-publisher/src/index.d.ts +3 -0
  119. package/dist/queues/sns-publisher/src/index.js +20 -0
  120. package/dist/queues/sns-publisher/src/index.js.map +1 -0
  121. package/dist/queues/sns-publisher/src/sns-publisher.module.d.ts +5 -0
  122. package/dist/queues/sns-publisher/src/sns-publisher.module.js +43 -0
  123. package/dist/queues/sns-publisher/src/sns-publisher.module.js.map +1 -0
  124. package/dist/queues/sns-publisher/src/sns-publisher.service.d.ts +10 -0
  125. package/dist/queues/sns-publisher/src/sns-publisher.service.js +88 -0
  126. package/dist/queues/sns-publisher/src/sns-publisher.service.js.map +1 -0
  127. package/dist/queues/sns-publisher/src/sns.catalog.d.ts +22 -0
  128. package/dist/queues/sns-publisher/src/sns.catalog.js +28 -0
  129. package/dist/queues/sns-publisher/src/sns.catalog.js.map +1 -0
  130. package/dist/queues/sns-publisher/src/sns.constants.d.ts +2 -0
  131. package/dist/queues/sns-publisher/src/sns.constants.js +6 -0
  132. package/dist/queues/sns-publisher/src/sns.constants.js.map +1 -0
  133. package/dist/queues/sns-publisher/src/sns.interfaces.d.ts +28 -0
  134. package/dist/queues/sns-publisher/src/sns.interfaces.js +3 -0
  135. package/dist/queues/sns-publisher/src/sns.interfaces.js.map +1 -0
  136. package/dist/queues/sqs-consumer/src/index.d.ts +6 -0
  137. package/dist/queues/sqs-consumer/src/index.js +19 -0
  138. package/dist/queues/sqs-consumer/src/index.js.map +1 -0
  139. package/dist/queues/sqs-consumer/src/interfaces/message-handler.interface.d.ts +10 -0
  140. package/dist/queues/sqs-consumer/src/interfaces/message-handler.interface.js +5 -0
  141. package/dist/queues/sqs-consumer/src/interfaces/message-handler.interface.js.map +1 -0
  142. package/dist/queues/sqs-consumer/src/interfaces/sqs-consumer.interfaces.d.ts +48 -0
  143. package/dist/queues/sqs-consumer/src/interfaces/sqs-consumer.interfaces.js +11 -0
  144. package/dist/queues/sqs-consumer/src/interfaces/sqs-consumer.interfaces.js.map +1 -0
  145. package/dist/queues/sqs-consumer/src/services/sqs-message-validator.service.d.ts +16 -0
  146. package/dist/queues/sqs-consumer/src/services/sqs-message-validator.service.js +123 -0
  147. package/dist/queues/sqs-consumer/src/services/sqs-message-validator.service.js.map +1 -0
  148. package/dist/queues/sqs-consumer/src/services/sqs-polling.service.d.ts +37 -0
  149. package/dist/queues/sqs-consumer/src/services/sqs-polling.service.js +259 -0
  150. package/dist/queues/sqs-consumer/src/services/sqs-polling.service.js.map +1 -0
  151. package/dist/queues/sqs-consumer/src/sqs-consumer.constants.d.ts +5 -0
  152. package/dist/queues/sqs-consumer/src/sqs-consumer.constants.js +9 -0
  153. package/dist/queues/sqs-consumer/src/sqs-consumer.constants.js.map +1 -0
  154. package/dist/queues/sqs-consumer/src/sqs-consumer.module.d.ts +11 -0
  155. package/dist/queues/sqs-consumer/src/sqs-consumer.module.js +126 -0
  156. package/dist/queues/sqs-consumer/src/sqs-consumer.module.js.map +1 -0
  157. package/dist/services/contextual-logger.service.d.ts +15 -0
  158. package/dist/services/contextual-logger.service.js +69 -0
  159. package/dist/services/contextual-logger.service.js.map +1 -0
  160. package/dist/services/index.d.ts +3 -0
  161. package/dist/services/index.js +20 -0
  162. package/dist/services/index.js.map +1 -0
  163. package/dist/services/password.service.d.ts +10 -0
  164. package/dist/services/password.service.js +54 -0
  165. package/dist/services/password.service.js.map +1 -0
  166. package/dist/services/uuid.service.d.ts +6 -0
  167. package/dist/services/uuid.service.js +47 -0
  168. package/dist/services/uuid.service.js.map +1 -0
  169. package/dist/tsconfig.tsbuildinfo +1 -0
  170. package/dist/utils/index.d.ts +1 -0
  171. package/dist/utils/index.js +18 -0
  172. package/dist/utils/index.js.map +1 -0
  173. package/dist/utils/safe-date.transformer.d.ts +1 -0
  174. package/dist/utils/safe-date.transformer.js +59 -0
  175. package/dist/utils/safe-date.transformer.js.map +1 -0
  176. package/package.json +51 -12
  177. package/src/index.js +0 -3
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SqsValidationError = exports.SqsMessageValidatorService = exports.SqsPollingService = exports.DEFAULT_SQS_OPTIONS = exports.SQS_FEATURE_OPTIONS = exports.SQS_QUEUE_URL = exports.SQS_MESSAGE_HANDLERS = exports.SQS_MODULE_OPTIONS = exports.SQS_CLIENT = exports.SqsConsumerModule = void 0;
4
+ var sqs_consumer_module_1 = require("./sqs-consumer.module");
5
+ Object.defineProperty(exports, "SqsConsumerModule", { enumerable: true, get: function () { return sqs_consumer_module_1.SqsConsumerModule; } });
6
+ var sqs_consumer_constants_1 = require("./sqs-consumer.constants");
7
+ Object.defineProperty(exports, "SQS_CLIENT", { enumerable: true, get: function () { return sqs_consumer_constants_1.SQS_CLIENT; } });
8
+ Object.defineProperty(exports, "SQS_MODULE_OPTIONS", { enumerable: true, get: function () { return sqs_consumer_constants_1.SQS_MODULE_OPTIONS; } });
9
+ Object.defineProperty(exports, "SQS_MESSAGE_HANDLERS", { enumerable: true, get: function () { return sqs_consumer_constants_1.SQS_MESSAGE_HANDLERS; } });
10
+ Object.defineProperty(exports, "SQS_QUEUE_URL", { enumerable: true, get: function () { return sqs_consumer_constants_1.SQS_QUEUE_URL; } });
11
+ Object.defineProperty(exports, "SQS_FEATURE_OPTIONS", { enumerable: true, get: function () { return sqs_consumer_constants_1.SQS_FEATURE_OPTIONS; } });
12
+ var sqs_consumer_interfaces_1 = require("./interfaces/sqs-consumer.interfaces");
13
+ Object.defineProperty(exports, "DEFAULT_SQS_OPTIONS", { enumerable: true, get: function () { return sqs_consumer_interfaces_1.DEFAULT_SQS_OPTIONS; } });
14
+ var sqs_polling_service_1 = require("./services/sqs-polling.service");
15
+ Object.defineProperty(exports, "SqsPollingService", { enumerable: true, get: function () { return sqs_polling_service_1.SqsPollingService; } });
16
+ var sqs_message_validator_service_1 = require("./services/sqs-message-validator.service");
17
+ Object.defineProperty(exports, "SqsMessageValidatorService", { enumerable: true, get: function () { return sqs_message_validator_service_1.SqsMessageValidatorService; } });
18
+ Object.defineProperty(exports, "SqsValidationError", { enumerable: true, get: function () { return sqs_message_validator_service_1.SqsValidationError; } });
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/queues/sqs-consumer/src/index.ts"],"names":[],"mappings":";;;AA+BA,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAG1B,mEAMkC;AALhC,oHAAA,UAAU,OAAA;AACV,4HAAA,kBAAkB,OAAA;AAClB,8HAAA,oBAAoB,OAAA;AACpB,uHAAA,aAAa,OAAA;AACb,6HAAA,mBAAmB,OAAA;AAIrB,gFAQ8C;AAD5C,8HAAA,mBAAmB,OAAA;AASrB,sEAAmE;AAA1D,wHAAA,iBAAiB,OAAA;AAC1B,0FAGkD;AAFhD,2IAAA,0BAA0B,OAAA;AAC1B,mIAAA,kBAAkB,OAAA"}
@@ -0,0 +1,10 @@
1
+ export interface HandlerResult<T = unknown> {
2
+ success: boolean;
3
+ data?: T;
4
+ error?: string;
5
+ }
6
+ export interface SqsMessageHandler<TInput = unknown, TOutput = unknown> {
7
+ getSupportedEvents(): string[];
8
+ handle(message: TInput, correlationId: string): Promise<HandlerResult<TOutput>>;
9
+ }
10
+ export declare const SQS_MESSAGE_HANDLER: unique symbol;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SQS_MESSAGE_HANDLER = void 0;
4
+ exports.SQS_MESSAGE_HANDLER = Symbol('SQS_MESSAGE_HANDLER');
5
+ //# sourceMappingURL=message-handler.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-handler.interface.js","sourceRoot":"","sources":["../../../../../src/queues/sqs-consumer/src/interfaces/message-handler.interface.ts"],"names":[],"mappings":";;;AAoEa,QAAA,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { Type, DynamicModule, ForwardReference, InjectionToken } from '@nestjs/common';
2
+ import { AwsCredentialIdentity } from '@aws-sdk/types';
3
+ import { SqsMessageHandler } from './message-handler.interface';
4
+ type FactoryArgs = any[];
5
+ export interface SqsModuleOptions {
6
+ region: string;
7
+ credentials?: AwsCredentialIdentity;
8
+ endpoint?: string;
9
+ }
10
+ export interface SqsFeatureOptions {
11
+ queueUrl: string;
12
+ handlers: Type<SqsMessageHandler>[];
13
+ waitTimeSeconds?: number;
14
+ visibilityTimeout?: number;
15
+ maxNumberOfMessages?: number;
16
+ pollingDelayMs?: number;
17
+ autoStart?: boolean;
18
+ name?: string;
19
+ imports?: Array<Type<unknown> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
20
+ }
21
+ export interface SqsResolvedOptions extends Required<Omit<SqsFeatureOptions, 'name' | 'imports'>> {
22
+ name?: string;
23
+ imports?: Array<Type<unknown> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
24
+ }
25
+ export declare const DEFAULT_SQS_OPTIONS: Omit<SqsResolvedOptions, 'queueUrl' | 'handlers'>;
26
+ export interface SqsFeatureAsyncOptions {
27
+ handlers: Type<SqsMessageHandler>[];
28
+ imports?: Array<Type<unknown> | DynamicModule | Promise<DynamicModule> | ForwardReference>;
29
+ useFactory: (...args: FactoryArgs) => Promise<Omit<SqsFeatureOptions, 'handlers' | 'imports'>> | Omit<SqsFeatureOptions, 'handlers' | 'imports'>;
30
+ inject?: InjectionToken[];
31
+ }
32
+ export interface ValidatedSqsMessage {
33
+ eventType: string;
34
+ correlationId?: string;
35
+ email?: string;
36
+ data: Record<string, unknown>;
37
+ timestamp?: string;
38
+ [key: string]: unknown;
39
+ }
40
+ export interface ConsumerStats {
41
+ messagesReceived: number;
42
+ messagesProcessed: number;
43
+ messagesFailed: number;
44
+ messagesSkipped: number;
45
+ lastPollTime?: Date;
46
+ isActive: boolean;
47
+ }
48
+ export {};
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_SQS_OPTIONS = void 0;
4
+ exports.DEFAULT_SQS_OPTIONS = {
5
+ waitTimeSeconds: 20,
6
+ visibilityTimeout: 30,
7
+ maxNumberOfMessages: 10,
8
+ pollingDelayMs: 1000,
9
+ autoStart: true,
10
+ };
11
+ //# sourceMappingURL=sqs-consumer.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqs-consumer.interfaces.js","sourceRoot":"","sources":["../../../../../src/queues/sqs-consumer/src/interfaces/sqs-consumer.interfaces.ts"],"names":[],"mappings":";;;AA4Ga,QAAA,mBAAmB,GAG5B;IACF,eAAe,EAAE,EAAE;IACnB,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,EAAE;IACvB,cAAc,EAAE,IAAI;IACpB,SAAS,EAAE,IAAI;CAChB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { ValidatedSqsMessage } from '../interfaces/sqs-consumer.interfaces';
2
+ export declare class SqsValidationError extends Error {
3
+ readonly validationErrors: string[];
4
+ readonly rawMessage?: string | undefined;
5
+ constructor(message: string, validationErrors: string[], rawMessage?: string | undefined);
6
+ }
7
+ export declare class SqsMessageValidatorService {
8
+ private readonly logger;
9
+ parseAndValidate(messageBody: string, correlationId?: string): Promise<ValidatedSqsMessage>;
10
+ private parseJson;
11
+ private unwrapSnsMessage;
12
+ private unwrapMatrioskaData;
13
+ private normalizeFields;
14
+ private validateBasicStructure;
15
+ private isSnsWrapper;
16
+ }
@@ -0,0 +1,123 @@
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 SqsMessageValidatorService_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SqsMessageValidatorService = exports.SqsValidationError = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ class SqsValidationError extends Error {
13
+ validationErrors;
14
+ rawMessage;
15
+ constructor(message, validationErrors, rawMessage) {
16
+ super(message);
17
+ this.validationErrors = validationErrors;
18
+ this.rawMessage = rawMessage;
19
+ this.name = 'SqsValidationError';
20
+ }
21
+ }
22
+ exports.SqsValidationError = SqsValidationError;
23
+ let SqsMessageValidatorService = SqsMessageValidatorService_1 = class SqsMessageValidatorService {
24
+ logger = new common_1.Logger(SqsMessageValidatorService_1.name);
25
+ async parseAndValidate(messageBody, correlationId) {
26
+ const logPrefix = correlationId ? `[${correlationId}] ` : '';
27
+ try {
28
+ let parsedBody = this.parseJson(messageBody);
29
+ parsedBody = this.unwrapSnsMessage(parsedBody, logPrefix);
30
+ parsedBody = this.unwrapMatrioskaData(parsedBody);
31
+ parsedBody = this.normalizeFields(parsedBody);
32
+ this.validateBasicStructure(parsedBody, messageBody);
33
+ if (!parsedBody.correlationId && correlationId) {
34
+ parsedBody.correlationId = correlationId;
35
+ }
36
+ this.logger.debug(`${logPrefix}Message parsed successfully for event: ${parsedBody.eventType}`);
37
+ return parsedBody;
38
+ }
39
+ catch (error) {
40
+ if (error instanceof SqsValidationError) {
41
+ throw error;
42
+ }
43
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
44
+ throw new SqsValidationError(`Failed to parse message: ${errorMessage}`, [errorMessage], messageBody);
45
+ }
46
+ }
47
+ parseJson(jsonString) {
48
+ try {
49
+ return JSON.parse(jsonString);
50
+ }
51
+ catch {
52
+ throw new SqsValidationError('Invalid JSON format', ['Message body is not valid JSON'], jsonString);
53
+ }
54
+ }
55
+ unwrapSnsMessage(body, logPrefix) {
56
+ if (!this.isSnsWrapper(body)) {
57
+ return body;
58
+ }
59
+ this.logger.debug(`${logPrefix}Unwrapping SNS notification wrapper`);
60
+ const messageContent = String(body.Message);
61
+ const innerMessage = this.parseJson(messageContent);
62
+ return innerMessage.data || innerMessage;
63
+ }
64
+ unwrapMatrioskaData(body) {
65
+ const data = body.data;
66
+ if (!data || typeof data !== 'object') {
67
+ return body;
68
+ }
69
+ if (data.email || data.orderId || data.customerId) {
70
+ const outerEvent = (body.event || body.eventType);
71
+ const unwrapped = { ...data };
72
+ if (!unwrapped.eventType && !unwrapped.event && outerEvent) {
73
+ unwrapped.eventType = outerEvent;
74
+ }
75
+ return unwrapped;
76
+ }
77
+ return body;
78
+ }
79
+ normalizeFields(body) {
80
+ const normalized = { ...body };
81
+ if (!normalized.eventType && normalized.event) {
82
+ normalized.eventType = normalized.event;
83
+ delete normalized.event;
84
+ }
85
+ const legacyMapping = new Map([
86
+ ['CustomerCreated', 'CUSTOMER_REGISTERED'],
87
+ ['customer_created', 'CUSTOMER_REGISTERED'],
88
+ ['CUSTOMER_CREATED', 'CUSTOMER_REGISTERED'],
89
+ ['OrderCreated', 'ORDER_CREATED'],
90
+ ['order_created', 'ORDER_CREATED'],
91
+ ]);
92
+ const eventType = normalized.eventType;
93
+ if (eventType && legacyMapping.has(eventType)) {
94
+ normalized.eventType = legacyMapping.get(eventType);
95
+ }
96
+ if (!normalized.data) {
97
+ normalized.data = {};
98
+ }
99
+ return normalized;
100
+ }
101
+ validateBasicStructure(body, rawMessage) {
102
+ if (!body.eventType) {
103
+ throw new SqsValidationError('Missing required field: eventType', ['eventType is required'], rawMessage);
104
+ }
105
+ if (typeof body.eventType !== 'string') {
106
+ throw new SqsValidationError('Invalid eventType: must be a string', ['eventType must be a string'], rawMessage);
107
+ }
108
+ }
109
+ isSnsWrapper(body) {
110
+ if (!body || typeof body !== 'object')
111
+ return false;
112
+ const obj = body;
113
+ return (obj.Type === 'Notification' &&
114
+ typeof obj.Message === 'string' &&
115
+ typeof obj.TopicArn === 'string' &&
116
+ typeof obj.MessageId === 'string');
117
+ }
118
+ };
119
+ exports.SqsMessageValidatorService = SqsMessageValidatorService;
120
+ exports.SqsMessageValidatorService = SqsMessageValidatorService = SqsMessageValidatorService_1 = __decorate([
121
+ (0, common_1.Injectable)()
122
+ ], SqsMessageValidatorService);
123
+ //# sourceMappingURL=sqs-message-validator.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqs-message-validator.service.js","sourceRoot":"","sources":["../../../../../src/queues/sqs-consumer/src/services/sqs-message-validator.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { SQSClient } from '@aws-sdk/client-sqs';
3
+ import { SqsResolvedOptions, ConsumerStats } from '../interfaces/sqs-consumer.interfaces';
4
+ import { SqsMessageHandler } from '../interfaces/message-handler.interface';
5
+ import { SqsMessageValidatorService } from './sqs-message-validator.service';
6
+ export declare class SqsPollingService implements OnModuleInit, OnModuleDestroy {
7
+ private readonly sqsClient;
8
+ private readonly options;
9
+ private readonly handlers;
10
+ private readonly validator;
11
+ private readonly logger;
12
+ private isPolling;
13
+ private shouldStop;
14
+ private currentBackoffMs;
15
+ private pollPromise;
16
+ private stats;
17
+ private readonly dlqCandidates;
18
+ private handlerMap;
19
+ constructor(sqsClient: SQSClient, options: SqsResolvedOptions, handlers: SqsMessageHandler[], validator: SqsMessageValidatorService);
20
+ private buildHandlerMap;
21
+ onModuleInit(): Promise<void>;
22
+ onModuleDestroy(): Promise<void>;
23
+ start(): Promise<void>;
24
+ stop(): Promise<void>;
25
+ getStats(): ConsumerStats;
26
+ private pollingLoop;
27
+ private poll;
28
+ private processBatch;
29
+ private processMessage;
30
+ private handleProcessingError;
31
+ private deleteMessage;
32
+ private extractCorrelationId;
33
+ private calculateBackoff;
34
+ private trackDlqCandidate;
35
+ private clearDlqCandidate;
36
+ private sleep;
37
+ }
@@ -0,0 +1,259 @@
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 SqsPollingService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.SqsPollingService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const client_sqs_1 = require("@aws-sdk/client-sqs");
19
+ const uuid_1 = require("uuid");
20
+ const sqs_consumer_constants_1 = require("../sqs-consumer.constants");
21
+ const sqs_message_validator_service_1 = require("./sqs-message-validator.service");
22
+ let SqsPollingService = SqsPollingService_1 = class SqsPollingService {
23
+ sqsClient;
24
+ options;
25
+ handlers;
26
+ validator;
27
+ logger = new common_1.Logger(SqsPollingService_1.name);
28
+ isPolling = false;
29
+ shouldStop = false;
30
+ currentBackoffMs = 0;
31
+ pollPromise = null;
32
+ stats = {
33
+ messagesReceived: 0,
34
+ messagesProcessed: 0,
35
+ messagesFailed: 0,
36
+ messagesSkipped: 0,
37
+ lastPollTime: undefined,
38
+ isActive: false,
39
+ };
40
+ dlqCandidates = new Map();
41
+ handlerMap = new Map();
42
+ constructor(sqsClient, options, handlers, validator) {
43
+ this.sqsClient = sqsClient;
44
+ this.options = options;
45
+ this.handlers = handlers;
46
+ this.validator = validator;
47
+ this.buildHandlerMap();
48
+ }
49
+ buildHandlerMap() {
50
+ for (const handler of this.handlers) {
51
+ const events = handler.getSupportedEvents();
52
+ for (const eventType of events) {
53
+ if (this.handlerMap.has(eventType)) {
54
+ this.logger.warn(`Multiple handlers registered for eventType: ${eventType}. Using last registered.`);
55
+ }
56
+ this.handlerMap.set(eventType, handler);
57
+ }
58
+ }
59
+ this.logger.log(`Registered ${this.handlers.length} handler(s) for ${this.handlerMap.size} event type(s)`);
60
+ }
61
+ async onModuleInit() {
62
+ if (this.options.autoStart) {
63
+ await this.start();
64
+ }
65
+ }
66
+ async onModuleDestroy() {
67
+ await this.stop();
68
+ }
69
+ async start() {
70
+ if (this.isPolling) {
71
+ this.logger.warn('Polling already active');
72
+ return;
73
+ }
74
+ this.logger.log(`Starting SQS consumer for queue: ${this.options.queueUrl}`);
75
+ this.shouldStop = false;
76
+ this.isPolling = true;
77
+ this.stats.isActive = true;
78
+ this.pollPromise = this.pollingLoop();
79
+ }
80
+ async stop() {
81
+ if (!this.isPolling) {
82
+ return;
83
+ }
84
+ this.logger.log('Stopping SQS consumer...');
85
+ this.shouldStop = true;
86
+ if (this.pollPromise) {
87
+ await this.pollPromise;
88
+ }
89
+ this.isPolling = false;
90
+ this.stats.isActive = false;
91
+ this.logger.log('SQS consumer stopped');
92
+ }
93
+ getStats() {
94
+ return { ...this.stats };
95
+ }
96
+ async pollingLoop() {
97
+ while (!this.shouldStop) {
98
+ try {
99
+ await this.poll();
100
+ if (this.currentBackoffMs > 0) {
101
+ await this.sleep(this.currentBackoffMs);
102
+ }
103
+ else {
104
+ await this.sleep(this.options.pollingDelayMs);
105
+ }
106
+ }
107
+ catch (error) {
108
+ this.logger.error('Error in polling loop', error);
109
+ this.currentBackoffMs = this.calculateBackoff(this.currentBackoffMs);
110
+ await this.sleep(this.currentBackoffMs);
111
+ }
112
+ }
113
+ }
114
+ async poll() {
115
+ this.stats.lastPollTime = new Date();
116
+ const params = {
117
+ QueueUrl: this.options.queueUrl,
118
+ MaxNumberOfMessages: this.options.maxNumberOfMessages,
119
+ WaitTimeSeconds: this.options.waitTimeSeconds,
120
+ VisibilityTimeout: this.options.visibilityTimeout,
121
+ MessageAttributeNames: ['All'],
122
+ AttributeNames: ['All'],
123
+ };
124
+ const command = new client_sqs_1.ReceiveMessageCommand(params);
125
+ const response = await this.sqsClient.send(command);
126
+ const messages = response.Messages || [];
127
+ if (messages.length === 0) {
128
+ return;
129
+ }
130
+ this.stats.messagesReceived += messages.length;
131
+ this.logger.debug(`Received ${messages.length} message(s)`);
132
+ this.currentBackoffMs = 0;
133
+ await this.processBatch(messages);
134
+ }
135
+ async processBatch(messages) {
136
+ const results = await Promise.allSettled(messages.map((msg) => this.processMessage(msg)));
137
+ for (const result of results) {
138
+ if (result.status === 'fulfilled' && result.value) {
139
+ this.stats.messagesProcessed++;
140
+ }
141
+ else if (result.status === 'rejected') {
142
+ this.stats.messagesFailed++;
143
+ }
144
+ }
145
+ }
146
+ async processMessage(message) {
147
+ const correlationId = this.extractCorrelationId(message);
148
+ const logPrefix = `[${correlationId}] `;
149
+ if (!message.Body) {
150
+ this.logger.warn(`${logPrefix}Empty message body, skipping`);
151
+ this.stats.messagesSkipped++;
152
+ await this.deleteMessage(message);
153
+ return false;
154
+ }
155
+ try {
156
+ const validated = await this.validator.parseAndValidate(message.Body, correlationId);
157
+ const handler = this.handlerMap.get(validated.eventType);
158
+ if (!handler) {
159
+ this.logger.warn(`${logPrefix}No handler registered for eventType: ${validated.eventType}`);
160
+ this.stats.messagesSkipped++;
161
+ await this.deleteMessage(message);
162
+ return false;
163
+ }
164
+ this.logger.debug(`${logPrefix}Processing ${validated.eventType} with handler`);
165
+ const result = await handler.handle(validated, correlationId);
166
+ if (result.success) {
167
+ this.logger.log(`${logPrefix}Successfully processed ${validated.eventType}`);
168
+ await this.deleteMessage(message);
169
+ this.clearDlqCandidate(message.MessageId);
170
+ return true;
171
+ }
172
+ else {
173
+ throw new Error(result.error || 'Handler returned failure');
174
+ }
175
+ }
176
+ catch (error) {
177
+ await this.handleProcessingError(error, message, correlationId, logPrefix);
178
+ return false;
179
+ }
180
+ }
181
+ async handleProcessingError(error, message, correlationId, logPrefix) {
182
+ const errorMessage = error instanceof Error ? error.message : String(error);
183
+ this.trackDlqCandidate(message.MessageId || correlationId, errorMessage);
184
+ if (error instanceof sqs_message_validator_service_1.SqsValidationError) {
185
+ this.logger.error(`${logPrefix}Validation error: ${errorMessage}`, error.validationErrors);
186
+ await this.deleteMessage(message);
187
+ }
188
+ else {
189
+ this.logger.error(`${logPrefix}Processing error: ${errorMessage}`);
190
+ }
191
+ }
192
+ async deleteMessage(message) {
193
+ if (!message.ReceiptHandle) {
194
+ return;
195
+ }
196
+ try {
197
+ await this.sqsClient.send(new client_sqs_1.DeleteMessageCommand({
198
+ QueueUrl: this.options.queueUrl,
199
+ ReceiptHandle: message.ReceiptHandle,
200
+ }));
201
+ }
202
+ catch (error) {
203
+ this.logger.error('Failed to delete message', error);
204
+ }
205
+ }
206
+ extractCorrelationId(message) {
207
+ const attrs = message.MessageAttributes;
208
+ if (attrs?.correlationId?.StringValue) {
209
+ return attrs.correlationId.StringValue;
210
+ }
211
+ try {
212
+ const body = JSON.parse(message.Body || '{}');
213
+ if (body.correlationId) {
214
+ return body.correlationId;
215
+ }
216
+ }
217
+ catch {
218
+ }
219
+ return (0, uuid_1.v4)();
220
+ }
221
+ calculateBackoff(currentBackoffMs) {
222
+ const minBackoff = 1000;
223
+ const maxBackoff = 60000;
224
+ const multiplier = 2;
225
+ if (currentBackoffMs === 0) {
226
+ return minBackoff;
227
+ }
228
+ return Math.min(currentBackoffMs * multiplier, maxBackoff);
229
+ }
230
+ trackDlqCandidate(messageId, error) {
231
+ if (!messageId)
232
+ return;
233
+ const existing = this.dlqCandidates.get(messageId);
234
+ if (existing) {
235
+ existing.count++;
236
+ existing.lastError = error;
237
+ }
238
+ else {
239
+ this.dlqCandidates.set(messageId, { count: 1, lastError: error });
240
+ }
241
+ }
242
+ clearDlqCandidate(messageId) {
243
+ if (messageId) {
244
+ this.dlqCandidates.delete(messageId);
245
+ }
246
+ }
247
+ sleep(ms) {
248
+ return new Promise((resolve) => setTimeout(resolve, ms));
249
+ }
250
+ };
251
+ exports.SqsPollingService = SqsPollingService;
252
+ exports.SqsPollingService = SqsPollingService = SqsPollingService_1 = __decorate([
253
+ (0, common_1.Injectable)(),
254
+ __param(0, (0, common_1.Inject)(sqs_consumer_constants_1.SQS_CLIENT)),
255
+ __param(1, (0, common_1.Inject)(sqs_consumer_constants_1.SQS_FEATURE_OPTIONS)),
256
+ __param(2, (0, common_1.Inject)(sqs_consumer_constants_1.SQS_MESSAGE_HANDLERS)),
257
+ __metadata("design:paramtypes", [client_sqs_1.SQSClient, Object, Array, sqs_message_validator_service_1.SqsMessageValidatorService])
258
+ ], SqsPollingService);
259
+ //# sourceMappingURL=sqs-polling.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqs-polling.service.js","sourceRoot":"","sources":["../../../../../src/queues/sqs-consumer/src/services/sqs-polling.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const SQS_CLIENT: unique symbol;
2
+ export declare const SQS_MODULE_OPTIONS: unique symbol;
3
+ export declare const SQS_MESSAGE_HANDLERS: unique symbol;
4
+ export declare const SQS_QUEUE_URL: unique symbol;
5
+ export declare const SQS_FEATURE_OPTIONS: unique symbol;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SQS_FEATURE_OPTIONS = exports.SQS_QUEUE_URL = exports.SQS_MESSAGE_HANDLERS = exports.SQS_MODULE_OPTIONS = exports.SQS_CLIENT = void 0;
4
+ exports.SQS_CLIENT = Symbol('SQS_CLIENT');
5
+ exports.SQS_MODULE_OPTIONS = Symbol('SQS_MODULE_OPTIONS');
6
+ exports.SQS_MESSAGE_HANDLERS = Symbol('SQS_MESSAGE_HANDLERS');
7
+ exports.SQS_QUEUE_URL = Symbol('SQS_QUEUE_URL');
8
+ exports.SQS_FEATURE_OPTIONS = Symbol('SQS_FEATURE_OPTIONS');
9
+ //# sourceMappingURL=sqs-consumer.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqs-consumer.constants.js","sourceRoot":"","sources":["../../../../src/queues/sqs-consumer/src/sqs-consumer.constants.ts"],"names":[],"mappings":";;;AAOa,QAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAGlC,QAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAGlD,QAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAGtD,QAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAGxC,QAAA,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { DynamicModule, InjectionToken } from '@nestjs/common';
2
+ import { SqsModuleOptions, SqsFeatureOptions, SqsFeatureAsyncOptions } from './interfaces/sqs-consumer.interfaces';
3
+ export declare class SqsConsumerModule {
4
+ static forRoot(options: SqsModuleOptions): DynamicModule;
5
+ static forFeature(options: SqsFeatureOptions): DynamicModule;
6
+ static forRootAsync<T extends unknown[]>(options: {
7
+ useFactory: (...args: T) => Promise<SqsModuleOptions> | SqsModuleOptions;
8
+ inject?: InjectionToken[];
9
+ }): DynamicModule;
10
+ static forFeatureAsync(options: SqsFeatureAsyncOptions): DynamicModule;
11
+ }