@campxdev/server-shared 1.6.49 → 1.6.51
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/data-imports-manager/constants/data-import.constants.d.ts +6 -0
- package/dist/data-imports-manager/constants/data-import.constants.d.ts.map +1 -0
- package/dist/data-imports-manager/constants/data-import.constants.js +9 -0
- package/dist/data-imports-manager/constants/data-import.constants.js.map +1 -0
- package/dist/data-imports-manager/data-import-manager.module.js +7 -7
- package/dist/data-imports-manager/data-import-manager.module.js.map +1 -1
- package/dist/data-imports-manager/index.d.ts +4 -1
- package/dist/data-imports-manager/index.d.ts.map +1 -1
- package/dist/data-imports-manager/index.js +4 -1
- package/dist/data-imports-manager/index.js.map +1 -1
- package/dist/data-imports-manager/services/data-import-manager.service.d.ts +37 -0
- package/dist/data-imports-manager/services/data-import-manager.service.d.ts.map +1 -0
- package/dist/data-imports-manager/services/data-import-manager.service.js +168 -0
- package/dist/data-imports-manager/services/data-import-manager.service.js.map +1 -0
- package/dist/data-imports-manager/{data-import.resource.d.ts → services/data-import.resource.d.ts} +4 -4
- package/dist/data-imports-manager/services/data-import.resource.d.ts.map +1 -0
- package/dist/data-imports-manager/{data-import.resource.js → services/data-import.resource.js} +3 -3
- package/dist/data-imports-manager/services/data-import.resource.js.map +1 -0
- package/dist/data-imports-manager/types/data-import.types.d.ts +87 -0
- package/dist/data-imports-manager/types/data-import.types.d.ts.map +1 -0
- package/dist/{task-queue/task-queue.types.js → data-imports-manager/types/data-import.types.js} +1 -1
- package/dist/data-imports-manager/types/data-import.types.js.map +1 -0
- package/dist/data-imports-manager/utils/data-import.utils.d.ts +27 -0
- package/dist/data-imports-manager/utils/data-import.utils.d.ts.map +1 -0
- package/dist/data-imports-manager/utils/data-import.utils.js +205 -0
- package/dist/data-imports-manager/utils/data-import.utils.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/sqs-queues/constants/message-queue.constants.d.ts +3 -0
- package/dist/sqs-queues/constants/message-queue.constants.d.ts.map +1 -0
- package/dist/sqs-queues/constants/message-queue.constants.js +6 -0
- package/dist/sqs-queues/constants/message-queue.constants.js.map +1 -0
- package/dist/sqs-queues/decorators/message-queue.decorator.d.ts +4 -0
- package/dist/sqs-queues/decorators/message-queue.decorator.d.ts.map +1 -0
- package/dist/sqs-queues/decorators/message-queue.decorator.js +10 -0
- package/dist/sqs-queues/decorators/message-queue.decorator.js.map +1 -0
- package/dist/sqs-queues/index.d.ts +6 -0
- package/dist/sqs-queues/index.d.ts.map +1 -0
- package/dist/{task-queue → sqs-queues}/index.js +5 -5
- package/dist/sqs-queues/index.js.map +1 -0
- package/dist/sqs-queues/message-queue.module.d.ts +7 -0
- package/dist/sqs-queues/message-queue.module.d.ts.map +1 -0
- package/dist/sqs-queues/message-queue.module.js +60 -0
- package/dist/sqs-queues/message-queue.module.js.map +1 -0
- package/dist/sqs-queues/services/message-queue.handler.d.ts +17 -0
- package/dist/sqs-queues/services/message-queue.handler.d.ts.map +1 -0
- package/dist/sqs-queues/services/message-queue.handler.js +194 -0
- package/dist/sqs-queues/services/message-queue.handler.js.map +1 -0
- package/dist/sqs-queues/services/message-queue.service.d.ts +8 -0
- package/dist/sqs-queues/services/message-queue.service.d.ts.map +1 -0
- package/dist/{task-queue/task-queue.service.js → sqs-queues/services/message-queue.service.js} +12 -15
- package/dist/sqs-queues/services/message-queue.service.js.map +1 -0
- package/dist/sqs-queues/types/message-queue.types.d.ts +57 -0
- package/dist/sqs-queues/types/message-queue.types.d.ts.map +1 -0
- package/dist/sqs-queues/types/message-queue.types.js +9 -0
- package/dist/sqs-queues/types/message-queue.types.js.map +1 -0
- package/dist/sqs-queues/utils/message-queue.utils.d.ts +16 -0
- package/dist/sqs-queues/utils/message-queue.utils.d.ts.map +1 -0
- package/dist/sqs-queues/utils/message-queue.utils.js +68 -0
- package/dist/sqs-queues/utils/message-queue.utils.js.map +1 -0
- package/package.json +5 -3
- package/dist/data-imports-manager/data-import-manager.service.d.ts +0 -129
- package/dist/data-imports-manager/data-import-manager.service.d.ts.map +0 -1
- package/dist/data-imports-manager/data-import-manager.service.js +0 -336
- package/dist/data-imports-manager/data-import-manager.service.js.map +0 -1
- package/dist/data-imports-manager/data-import.resource.d.ts.map +0 -1
- package/dist/data-imports-manager/data-import.resource.js.map +0 -1
- package/dist/task-queue/index.d.ts +0 -6
- package/dist/task-queue/index.d.ts.map +0 -1
- package/dist/task-queue/index.js.map +0 -1
- package/dist/task-queue/task-queue-manager.service.d.ts +0 -24
- package/dist/task-queue/task-queue-manager.service.d.ts.map +0 -1
- package/dist/task-queue/task-queue-manager.service.js +0 -322
- package/dist/task-queue/task-queue-manager.service.js.map +0 -1
- package/dist/task-queue/task-queue.constants.d.ts +0 -3
- package/dist/task-queue/task-queue.constants.d.ts.map +0 -1
- package/dist/task-queue/task-queue.constants.js +0 -6
- package/dist/task-queue/task-queue.constants.js.map +0 -1
- package/dist/task-queue/task-queue.decorator.d.ts +0 -3
- package/dist/task-queue/task-queue.decorator.d.ts.map +0 -1
- package/dist/task-queue/task-queue.decorator.js +0 -11
- package/dist/task-queue/task-queue.decorator.js.map +0 -1
- package/dist/task-queue/task-queue.module.d.ts +0 -7
- package/dist/task-queue/task-queue.module.d.ts.map +0 -1
- package/dist/task-queue/task-queue.module.js +0 -60
- package/dist/task-queue/task-queue.module.js.map +0 -1
- package/dist/task-queue/task-queue.service.d.ts +0 -12
- package/dist/task-queue/task-queue.service.d.ts.map +0 -1
- package/dist/task-queue/task-queue.service.js.map +0 -1
- package/dist/task-queue/task-queue.types.d.ts +0 -42
- package/dist/task-queue/task-queue.types.d.ts.map +0 -1
- package/dist/task-queue/task-queue.types.js.map +0 -1
- package/dist/task-queue/task-queue.values.d.ts +0 -9
- package/dist/task-queue/task-queue.values.d.ts.map +0 -1
- package/dist/task-queue/task-queue.values.js +0 -59
- package/dist/task-queue/task-queue.values.js.map +0 -1
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getDataFields = exports.assignFieldGroups = exports.validateFieldParser = exports.validateDataImportFileFn = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const domain_1 = require("../../domain");
|
|
10
|
+
const utils_1 = require("../../utils");
|
|
11
|
+
const data_import_constants_1 = require("../constants/data-import.constants");
|
|
12
|
+
async function validateDataImportFileFn(props) {
|
|
13
|
+
const { doc, validationService, afterSheetValidation, fields } = props;
|
|
14
|
+
/**
|
|
15
|
+
* Doing initial field validation, which includes
|
|
16
|
+
* 1. Document records extraction
|
|
17
|
+
* 2. Field type checks
|
|
18
|
+
* 3. Required field checks
|
|
19
|
+
*/
|
|
20
|
+
const fileValidationRes = await validateFileData({
|
|
21
|
+
doc: doc,
|
|
22
|
+
fields: fields,
|
|
23
|
+
keepUnknownFields: props.keepUnknownFields,
|
|
24
|
+
});
|
|
25
|
+
/* If there are any errors then return the errors */
|
|
26
|
+
if (fileValidationRes.errors.length) {
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
validationResult: fileValidationRes,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/* If there are no records found in the file then return error */
|
|
33
|
+
if (!fileValidationRes.data.length) {
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
error: 'No records found to import',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/* If afterSheetValidation is present then run the custom sheet validation */
|
|
40
|
+
let data = fileValidationRes.data;
|
|
41
|
+
if (afterSheetValidation) {
|
|
42
|
+
const customValidationRes = await afterSheetValidation(data);
|
|
43
|
+
data = customValidationRes.data;
|
|
44
|
+
const errors = customValidationRes.errors ?? [];
|
|
45
|
+
const error = customValidationRes.error;
|
|
46
|
+
if (errors.length || error) {
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
validationResult: {
|
|
50
|
+
fields: fileValidationRes.fields,
|
|
51
|
+
data: data,
|
|
52
|
+
errors: errors,
|
|
53
|
+
},
|
|
54
|
+
error: error,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const validationRes = doc.importType === domain_1.DataImportImportTypes.INSERT
|
|
59
|
+
? await validationService.validateInsertRecords(data)
|
|
60
|
+
: await validationService.validateUpdateRecords(data);
|
|
61
|
+
return {
|
|
62
|
+
success: !validationRes.errors.length,
|
|
63
|
+
validationResult: {
|
|
64
|
+
fields: fileValidationRes.fields,
|
|
65
|
+
data: data,
|
|
66
|
+
errors: uniqDataImportFieldErrors(validationRes.errors),
|
|
67
|
+
},
|
|
68
|
+
otherData: validationRes.otherData,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
exports.validateDataImportFileFn = validateDataImportFileFn;
|
|
72
|
+
async function validateFileData(props) {
|
|
73
|
+
const { doc, fields } = props;
|
|
74
|
+
/* If the file is not uploaded then return empty data */
|
|
75
|
+
if (!doc.uploadedFile) {
|
|
76
|
+
return validateData({
|
|
77
|
+
fields: fields,
|
|
78
|
+
importType: doc.importType,
|
|
79
|
+
keepUnknownFields: props.keepUnknownFields,
|
|
80
|
+
docData: [],
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/* Getting the file and converting it to buffer and then to doc records */
|
|
84
|
+
const fileBuffer = await getFile(doc.uploadedFile.url);
|
|
85
|
+
const docData = await (0, utils_1.xlsxBufferToJson)(fileBuffer);
|
|
86
|
+
return validateData({
|
|
87
|
+
fields: fields,
|
|
88
|
+
importType: doc.importType,
|
|
89
|
+
keepUnknownFields: props.keepUnknownFields,
|
|
90
|
+
docData: docData,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
async function getFile(url) {
|
|
94
|
+
const file = await axios_1.default.get(url, { responseType: 'arraybuffer' });
|
|
95
|
+
return file.data;
|
|
96
|
+
}
|
|
97
|
+
function validateData(props) {
|
|
98
|
+
const { fields, docData, importType } = props;
|
|
99
|
+
/* Field Error List */
|
|
100
|
+
const errors = [];
|
|
101
|
+
/* Data List After Validation and Preprocessing */
|
|
102
|
+
const data = [];
|
|
103
|
+
/* Headers List, For the fields which are present in the import sheet */
|
|
104
|
+
const headers = {};
|
|
105
|
+
const fieldsMap = (0, lodash_1.keyBy)(fields, (v) => v.name);
|
|
106
|
+
/* Loop through each row of the sheet */
|
|
107
|
+
docData.forEach((item, index) => {
|
|
108
|
+
const fieldErrors = [];
|
|
109
|
+
const validatedDataItem = {};
|
|
110
|
+
/* Looping all the fields present in the import type feilds */
|
|
111
|
+
fields.forEach((field) => {
|
|
112
|
+
/* Get the original value of the field */
|
|
113
|
+
const value = item[field.name];
|
|
114
|
+
/* Get the field type based on the import type */
|
|
115
|
+
const fieldType = importType === domain_1.DataImportImportTypes.INSERT ? field.createFieldType : field.updateFieldType;
|
|
116
|
+
/* Validating the field only if it is needed */
|
|
117
|
+
if (fieldType !== data_import_constants_1.SheetValidationType.NOT_NEEDED) {
|
|
118
|
+
const { value: validatedValue, errors: validatedErrors } = field.validation(value, fieldType, validatedDataItem, importType);
|
|
119
|
+
validatedDataItem[field.name] = validatedValue;
|
|
120
|
+
if (validatedErrors.length) {
|
|
121
|
+
fieldErrors.push({
|
|
122
|
+
index: index,
|
|
123
|
+
field: field.name,
|
|
124
|
+
messages: validatedErrors,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/* If the field has value or it is required or it has errors then add it to the headers */
|
|
128
|
+
if (validatedValue ||
|
|
129
|
+
fieldType === data_import_constants_1.SheetValidationType.REQUIRED ||
|
|
130
|
+
validatedErrors.length) {
|
|
131
|
+
headers[field.name] = field;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
/* If keepUnknownFields is true then keep the fields which are not present in the import type fields */
|
|
136
|
+
if (props.keepUnknownFields) {
|
|
137
|
+
const validatedDataKeys = Object.keys(validatedDataItem);
|
|
138
|
+
const itemKeys = Object.keys(item);
|
|
139
|
+
const unknownKeys = itemKeys.filter((key) => !validatedDataKeys.includes(key));
|
|
140
|
+
unknownKeys.forEach((key) => {
|
|
141
|
+
validatedDataItem[key] = item[key];
|
|
142
|
+
if (!fieldsMap[key] && !headers[key]) {
|
|
143
|
+
headers[key] = {
|
|
144
|
+
name: key,
|
|
145
|
+
createFieldType: data_import_constants_1.SheetValidationType.NOT_NEEDED,
|
|
146
|
+
updateFieldType: data_import_constants_1.SheetValidationType.NOT_NEEDED,
|
|
147
|
+
validation: (value) => {
|
|
148
|
+
return { value: value, errors: [] };
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/* If there are any errors then add them to the errors list and add the current row to data list */
|
|
155
|
+
errors.push(...fieldErrors);
|
|
156
|
+
data.push(validatedDataItem);
|
|
157
|
+
});
|
|
158
|
+
return { data: data, errors: errors, fields: Object.values(headers) };
|
|
159
|
+
}
|
|
160
|
+
function uniqDataImportFieldErrors(errors) {
|
|
161
|
+
const values = (0, lodash_1.groupBy)(errors, (error) => `${error.index}-${error.field}`);
|
|
162
|
+
return Object.values(values).map((value) => {
|
|
163
|
+
return {
|
|
164
|
+
index: value[0].index,
|
|
165
|
+
field: value[0].field,
|
|
166
|
+
messages: (0, lodash_1.uniq)(value.flatMap((error) => error.messages)),
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function validateFieldParser(props) {
|
|
171
|
+
const { value, validationType } = props;
|
|
172
|
+
let schema = props.schema;
|
|
173
|
+
if (validationType) {
|
|
174
|
+
if (validationType === data_import_constants_1.SheetValidationType.REQUIRED) {
|
|
175
|
+
schema = schema.required();
|
|
176
|
+
}
|
|
177
|
+
if (validationType === data_import_constants_1.SheetValidationType.OPTIONAL) {
|
|
178
|
+
schema = schema.empty('').optional();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const result = schema.validate(value);
|
|
182
|
+
const errors = result.error?.details?.map((v) => v.message) || [];
|
|
183
|
+
return {
|
|
184
|
+
value: result.value,
|
|
185
|
+
errors: errors,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
exports.validateFieldParser = validateFieldParser;
|
|
189
|
+
function assignFieldGroups(value, group) {
|
|
190
|
+
for (const [_, field] of Object.entries(value)) {
|
|
191
|
+
field['group'] = group;
|
|
192
|
+
}
|
|
193
|
+
return value;
|
|
194
|
+
}
|
|
195
|
+
exports.assignFieldGroups = assignFieldGroups;
|
|
196
|
+
function getDataFields(validations) {
|
|
197
|
+
return Object.entries(validations).map(([name, value]) => {
|
|
198
|
+
return {
|
|
199
|
+
name: name,
|
|
200
|
+
...value,
|
|
201
|
+
};
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
exports.getDataFields = getDataFields;
|
|
205
|
+
//# sourceMappingURL=data-import.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-import.utils.js","sourceRoot":"","sources":["../../../src/data-imports-manager/utils/data-import.utils.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,11 +7,11 @@ export * from './frappe';
|
|
|
7
7
|
export * from './media';
|
|
8
8
|
export * from './metrics';
|
|
9
9
|
export * from './modules-handler';
|
|
10
|
+
export * from './oauth-clients';
|
|
10
11
|
export * from './permissions';
|
|
11
12
|
export * from './request-store';
|
|
12
13
|
export * from './shared-module';
|
|
13
|
-
export * from './
|
|
14
|
+
export * from './sqs-queues';
|
|
14
15
|
export * from './util-module';
|
|
15
16
|
export * from './utils';
|
|
16
|
-
export * from './oauth-clients';
|
|
17
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23,11 +23,11 @@ __exportStar(require("./frappe"), exports);
|
|
|
23
23
|
__exportStar(require("./media"), exports);
|
|
24
24
|
__exportStar(require("./metrics"), exports);
|
|
25
25
|
__exportStar(require("./modules-handler"), exports);
|
|
26
|
+
__exportStar(require("./oauth-clients"), exports);
|
|
26
27
|
__exportStar(require("./permissions"), exports);
|
|
27
28
|
__exportStar(require("./request-store"), exports);
|
|
28
29
|
__exportStar(require("./shared-module"), exports);
|
|
29
|
-
__exportStar(require("./
|
|
30
|
+
__exportStar(require("./sqs-queues"), exports);
|
|
30
31
|
__exportStar(require("./util-module"), exports);
|
|
31
32
|
__exportStar(require("./utils"), exports);
|
|
32
|
-
__exportStar(require("./oauth-clients"), exports);
|
|
33
33
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,2CAAyB;AACzB,+DAA6C;AAC7C,yDAAuC;AACvC,2CAAyB;AACzB,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,oDAAkC;AAClC,gDAA8B;AAC9B,kDAAgC;AAChC,kDAAgC;AAChC,+CAA6B;AAC7B,gDAA8B;AAC9B,0CAAwB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,2CAAyB;AACzB,+DAA6C;AAC7C,yDAAuC;AACvC,2CAAyB;AACzB,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,oDAAkC;AAClC,kDAAgC;AAChC,gDAA8B;AAC9B,kDAAgC;AAChC,kDAAgC;AAChC,+CAA6B;AAC7B,gDAA8B;AAC9B,0CAAwB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-queue.constants.d.ts","sourceRoot":"","sources":["../../../src/sqs-queues/constants/message-queue.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,eAAuC,CAAC;AAC3E,eAAO,MAAM,oBAAoB,eAAqC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QUEUE_MODULE_OPTIONS = exports.QUEUE_EXECUTION_METHOD = void 0;
|
|
4
|
+
exports.QUEUE_EXECUTION_METHOD = Symbol.for('QUEUE_EXECUTION_METHOD');
|
|
5
|
+
exports.QUEUE_MODULE_OPTIONS = Symbol.for('QUEUE_MODULE_OPTIONS');
|
|
6
|
+
//# sourceMappingURL=message-queue.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-queue.constants.js","sourceRoot":"","sources":["../../../src/sqs-queues/constants/message-queue.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AAC9D,QAAA,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { QUEUE_EXECUTION_METHOD } from '../constants/message-queue.constants';
|
|
2
|
+
import { MessageQueueExecutionMethodProps } from '../types/message-queue.types';
|
|
3
|
+
export declare const OnQueueMessage: (props: MessageQueueExecutionMethodProps) => import("@nestjs/common").CustomDecorator<typeof QUEUE_EXECUTION_METHOD>;
|
|
4
|
+
//# sourceMappingURL=message-queue.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-queue.decorator.d.ts","sourceRoot":"","sources":["../../../src/sqs-queues/decorators/message-queue.decorator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAEhF,eAAO,MAAM,cAAc,UAAW,gCAAgC,4EAErE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OnQueueMessage = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const message_queue_constants_1 = require("../constants/message-queue.constants");
|
|
6
|
+
const OnQueueMessage = (props) => {
|
|
7
|
+
return (0, common_1.SetMetadata)(message_queue_constants_1.QUEUE_EXECUTION_METHOD, props);
|
|
8
|
+
};
|
|
9
|
+
exports.OnQueueMessage = OnQueueMessage;
|
|
10
|
+
//# sourceMappingURL=message-queue.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-queue.decorator.js","sourceRoot":"","sources":["../../../src/sqs-queues/decorators/message-queue.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAC7C,kFAA8E;AAGvE,MAAM,cAAc,GAAG,CAAC,KAAuC,EAAE,EAAE;IACxE,OAAO,IAAA,oBAAW,EAAC,gDAAsB,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './decorators/message-queue.decorator';
|
|
2
|
+
export * from './message-queue.module';
|
|
3
|
+
export * from './services/message-queue.service';
|
|
4
|
+
export * from './types/message-queue.types';
|
|
5
|
+
export * from './utils/message-queue.utils';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sqs-queues/index.ts"],"names":[],"mappings":"AAAA,cAAc,sCAAsC,CAAC;AACrD,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC"}
|
|
@@ -14,9 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./
|
|
20
|
-
__exportStar(require("./
|
|
21
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./decorators/message-queue.decorator"), exports);
|
|
18
|
+
__exportStar(require("./message-queue.module"), exports);
|
|
19
|
+
__exportStar(require("./services/message-queue.service"), exports);
|
|
20
|
+
__exportStar(require("./types/message-queue.types"), exports);
|
|
21
|
+
__exportStar(require("./utils/message-queue.utils"), exports);
|
|
22
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqs-queues/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uEAAqD;AACrD,yDAAuC;AACvC,mEAAiD;AACjD,8DAA4C;AAC5C,8DAA4C"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { SQSModuleAsyncOptions, SQSModuleOptions } from './types/message-queue.types';
|
|
3
|
+
export declare class SQSQueueModule {
|
|
4
|
+
static forRoot(options: SQSModuleOptions): DynamicModule;
|
|
5
|
+
static forRootAsync(options: SQSModuleAsyncOptions): DynamicModule;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=message-queue.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-queue.module.d.ts","sourceRoot":"","sources":["../../src/sqs-queues/message-queue.module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAI/D,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEtF,qBAMa,cAAc;IACzB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa;IAiBxD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa;CAiBnE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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 SQSQueueModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SQSQueueModule = void 0;
|
|
11
|
+
const nestjs_discovery_1 = require("@golevelup/nestjs-discovery");
|
|
12
|
+
const common_1 = require("@nestjs/common");
|
|
13
|
+
const message_queue_constants_1 = require("./constants/message-queue.constants");
|
|
14
|
+
const message_queue_handler_1 = require("./services/message-queue.handler");
|
|
15
|
+
const message_queue_service_1 = require("./services/message-queue.service");
|
|
16
|
+
let SQSQueueModule = SQSQueueModule_1 = class SQSQueueModule {
|
|
17
|
+
static forRoot(options) {
|
|
18
|
+
return {
|
|
19
|
+
module: SQSQueueModule_1,
|
|
20
|
+
imports: [nestjs_discovery_1.DiscoveryModule],
|
|
21
|
+
providers: [
|
|
22
|
+
{
|
|
23
|
+
provide: message_queue_constants_1.QUEUE_MODULE_OPTIONS,
|
|
24
|
+
useValue: options,
|
|
25
|
+
},
|
|
26
|
+
message_queue_handler_1.SQSQueueHandler,
|
|
27
|
+
message_queue_service_1.SQSQueueService,
|
|
28
|
+
],
|
|
29
|
+
exports: [message_queue_service_1.SQSQueueService],
|
|
30
|
+
global: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
static forRootAsync(options) {
|
|
34
|
+
return {
|
|
35
|
+
module: SQSQueueModule_1,
|
|
36
|
+
imports: [nestjs_discovery_1.DiscoveryModule, ...(options.imports || [])],
|
|
37
|
+
providers: [
|
|
38
|
+
{
|
|
39
|
+
provide: message_queue_constants_1.QUEUE_MODULE_OPTIONS,
|
|
40
|
+
useFactory: options.useFactory,
|
|
41
|
+
inject: options.inject,
|
|
42
|
+
},
|
|
43
|
+
message_queue_handler_1.SQSQueueHandler,
|
|
44
|
+
message_queue_service_1.SQSQueueService,
|
|
45
|
+
],
|
|
46
|
+
exports: [message_queue_service_1.SQSQueueService],
|
|
47
|
+
global: true,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
exports.SQSQueueModule = SQSQueueModule;
|
|
52
|
+
exports.SQSQueueModule = SQSQueueModule = SQSQueueModule_1 = __decorate([
|
|
53
|
+
(0, common_1.Global)(),
|
|
54
|
+
(0, common_1.Module)({
|
|
55
|
+
imports: [nestjs_discovery_1.DiscoveryModule],
|
|
56
|
+
providers: [message_queue_handler_1.SQSQueueHandler, message_queue_service_1.SQSQueueService],
|
|
57
|
+
exports: [message_queue_service_1.SQSQueueService],
|
|
58
|
+
})
|
|
59
|
+
], SQSQueueModule);
|
|
60
|
+
//# sourceMappingURL=message-queue.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-queue.module.js","sourceRoot":"","sources":["../../src/sqs-queues/message-queue.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,kEAA8D;AAC9D,2CAA+D;AAC/D,iFAA2E;AAC3E,4EAAmE;AACnE,4EAAmE;AAS5D,IAAM,cAAc,sBAApB,MAAM,cAAc;IACzB,MAAM,CAAC,OAAO,CAAC,OAAyB;QACtC,OAAO;YACL,MAAM,EAAE,gBAAc;YACtB,OAAO,EAAE,CAAC,kCAAe,CAAC;YAC1B,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,8CAAoB;oBAC7B,QAAQ,EAAE,OAAO;iBAClB;gBACD,uCAAe;gBACf,uCAAe;aAChB;YACD,OAAO,EAAE,CAAC,uCAAe,CAAC;YAC1B,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAA8B;QAChD,OAAO;YACL,MAAM,EAAE,gBAAc;YACtB,OAAO,EAAE,CAAC,kCAAe,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACtD,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,8CAAoB;oBAC7B,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB;gBACD,uCAAe;gBACf,uCAAe;aAChB;YACD,OAAO,EAAE,CAAC,uCAAe,CAAC;YAC1B,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;CACF,CAAA;AAnCY,wCAAc;yBAAd,cAAc;IAN1B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,kCAAe,CAAC;QAC1B,SAAS,EAAE,CAAC,uCAAe,EAAE,uCAAe,CAAC;QAC7C,OAAO,EAAE,CAAC,uCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAmC1B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DiscoveryService } from '@golevelup/nestjs-discovery';
|
|
2
|
+
import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
|
|
3
|
+
import { SharedService } from '../../shared-module';
|
|
4
|
+
import { PMessageOptions, SQSModuleOptions } from '../types/message-queue.types';
|
|
5
|
+
export declare class SQSQueueHandler implements OnModuleInit, OnModuleDestroy {
|
|
6
|
+
private readonly options;
|
|
7
|
+
private readonly discoveryService;
|
|
8
|
+
private readonly sharedService;
|
|
9
|
+
private readonly queueMap;
|
|
10
|
+
constructor(options: SQSModuleOptions, discoveryService: DiscoveryService, sharedService: SharedService);
|
|
11
|
+
onModuleInit(): Promise<void>;
|
|
12
|
+
onModuleDestroy(): Promise<void>;
|
|
13
|
+
private init;
|
|
14
|
+
send(body: object, key: string, options?: PMessageOptions): Promise<import("@aws-sdk/client-sqs").SendMessageBatchResultEntry[]>;
|
|
15
|
+
private formatMessage;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=message-queue.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-queue.handler.d.ts","sourceRoot":"","sources":["../../../src/sqs-queues/services/message-queue.handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAsB,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAIL,eAAe,EAGf,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAetC,qBACa,eAAgB,YAAW,YAAY,EAAE,eAAe;IAInC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa;IALhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;gBAGF,OAAO,EAAE,gBAAgB,EACvD,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa;IAKzC,YAAY;IAIZ,eAAe;YAQP,IAAI;IAiJZ,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe;IAkB/D,OAAO,CAAC,aAAa;CAiBtB"}
|
|
@@ -0,0 +1,194 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.SQSQueueHandler = void 0;
|
|
19
|
+
const client_sqs_1 = require("@aws-sdk/client-sqs");
|
|
20
|
+
const nestjs_discovery_1 = require("@golevelup/nestjs-discovery");
|
|
21
|
+
const common_1 = require("@nestjs/common");
|
|
22
|
+
const deepmerge_1 = __importDefault(require("deepmerge"));
|
|
23
|
+
const sqs_consumer_1 = require("sqs-consumer");
|
|
24
|
+
const sqs_producer_1 = require("sqs-producer");
|
|
25
|
+
const request_store_1 = require("../../request-store");
|
|
26
|
+
const shared_module_1 = require("../../shared-module");
|
|
27
|
+
const utils_1 = require("../../utils");
|
|
28
|
+
const message_queue_constants_1 = require("../constants/message-queue.constants");
|
|
29
|
+
const message_queue_types_1 = require("../types/message-queue.types");
|
|
30
|
+
const message_queue_utils_1 = require("../utils/message-queue.utils");
|
|
31
|
+
let SQSQueueHandler = class SQSQueueHandler {
|
|
32
|
+
constructor(options, discoveryService, sharedService) {
|
|
33
|
+
this.options = options;
|
|
34
|
+
this.discoveryService = discoveryService;
|
|
35
|
+
this.sharedService = sharedService;
|
|
36
|
+
this.queueMap = new Map();
|
|
37
|
+
}
|
|
38
|
+
async onModuleInit() {
|
|
39
|
+
await this.init();
|
|
40
|
+
}
|
|
41
|
+
async onModuleDestroy() {
|
|
42
|
+
for (const queue of this.queueMap.values()) {
|
|
43
|
+
if (queue.consumer) {
|
|
44
|
+
queue.consumer.stop({ abort: this.options.abortPollingWhenStopping });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async init() {
|
|
49
|
+
/**
|
|
50
|
+
* Check for duplicate queue keys
|
|
51
|
+
*/
|
|
52
|
+
const keys = this.options.queues.map((queue) => queue.key);
|
|
53
|
+
const duplicateKeys = keys.filter((v, i, list) => list.indexOf(v) !== i);
|
|
54
|
+
if (duplicateKeys.length) {
|
|
55
|
+
throw new Error(`Duplicate queue keys found: ${duplicateKeys.join(', ')}`);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Checking for duplicate message handlers
|
|
59
|
+
*/
|
|
60
|
+
const messageHandlers = await this.discoveryService.providerMethodsWithMetaAtKey(message_queue_constants_1.QUEUE_EXECUTION_METHOD);
|
|
61
|
+
const handlers = messageHandlers.map((handler) => ({
|
|
62
|
+
key: handler.meta.key,
|
|
63
|
+
fn: handler.discoveredMethod.handler.bind(handler.discoveredMethod.parentClass.instance),
|
|
64
|
+
props: handler.meta,
|
|
65
|
+
}));
|
|
66
|
+
const duplicateHandlers = handlers.filter((v, i, list) => list.findIndex((h) => h.key === v.key) !== i);
|
|
67
|
+
if (duplicateHandlers.length) {
|
|
68
|
+
throw new Error(`Duplicate message handlers found: ${duplicateHandlers.map((h) => h.key).join(', ')}`);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check if all consumer queues have message handlers
|
|
72
|
+
*/
|
|
73
|
+
const consumerQueues = this.options.queues.filter((queue) => {
|
|
74
|
+
if (!queue.executionTypes)
|
|
75
|
+
return true;
|
|
76
|
+
return queue.executionTypes.includes(message_queue_types_1.QueueExecutionType.RECEIVE);
|
|
77
|
+
});
|
|
78
|
+
const missing = consumerQueues.filter((queue) => !handlers.find((handler) => handler.key === queue.key));
|
|
79
|
+
if (missing.length) {
|
|
80
|
+
throw new Error(`Missing message handlers for queue keys: ${missing.map((h) => h.key).join(', ')}`);
|
|
81
|
+
}
|
|
82
|
+
for (const queueOptions of this.options.queues) {
|
|
83
|
+
const { queue } = queueOptions;
|
|
84
|
+
const queueUrl = `https://sqs.${queue.region}.amazonaws.com/${queue.accountId}/${queue.queueName}`;
|
|
85
|
+
const clientConfig = queueOptions.sqsConfig ?? this.options.sqsConfig;
|
|
86
|
+
const client = clientConfig
|
|
87
|
+
? new client_sqs_1.SQSClient(clientConfig)
|
|
88
|
+
: new client_sqs_1.SQSClient({
|
|
89
|
+
region: queue.region,
|
|
90
|
+
useQueueUrlAsEndpoint: queue.useQueueUrlAsEndpoint ?? true,
|
|
91
|
+
});
|
|
92
|
+
const queueProps = {
|
|
93
|
+
options: queueOptions,
|
|
94
|
+
client: client,
|
|
95
|
+
queueUrl: queueUrl,
|
|
96
|
+
isFifo: queue.queueName.endsWith('.fifo'),
|
|
97
|
+
};
|
|
98
|
+
const autoCreateQueue = queueOptions.autoCreateQueue ?? this.options.autoCreateQueue ?? true;
|
|
99
|
+
if (autoCreateQueue) {
|
|
100
|
+
const createCommand = new client_sqs_1.CreateQueueCommand({
|
|
101
|
+
QueueName: queue.queueName,
|
|
102
|
+
Attributes: {
|
|
103
|
+
...(queue.queueName.endsWith('.fifo') && {
|
|
104
|
+
FifoQueue: 'true',
|
|
105
|
+
}),
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
await client.send(createCommand);
|
|
109
|
+
}
|
|
110
|
+
if (!queueOptions.executionTypes ||
|
|
111
|
+
queueOptions.executionTypes.includes(message_queue_types_1.QueueExecutionType.SEND)) {
|
|
112
|
+
const producer = sqs_producer_1.Producer.create({
|
|
113
|
+
...queueOptions.producerOptions,
|
|
114
|
+
queueUrl: queueUrl,
|
|
115
|
+
region: queue.region,
|
|
116
|
+
sqs: client,
|
|
117
|
+
});
|
|
118
|
+
queueProps.producer = producer;
|
|
119
|
+
}
|
|
120
|
+
if (!queueOptions.executionTypes ||
|
|
121
|
+
queueOptions.executionTypes.includes(message_queue_types_1.QueueExecutionType.RECEIVE)) {
|
|
122
|
+
const defaultConsumerOptions = {
|
|
123
|
+
visibilityTimeout: 90,
|
|
124
|
+
heartbeatInterval: 60,
|
|
125
|
+
terminateVisibilityTimeout: true,
|
|
126
|
+
batchSize: 10,
|
|
127
|
+
};
|
|
128
|
+
const consumerOptions = (0, deepmerge_1.default)(defaultConsumerOptions, queueOptions.consumerOptions ?? {});
|
|
129
|
+
const handler = handlers.find((h) => h.key === queueOptions.key);
|
|
130
|
+
if (!handler) {
|
|
131
|
+
throw new Error(`Missing message handler for queue key: ${queueOptions.key}`);
|
|
132
|
+
}
|
|
133
|
+
const handlerFn = async (message) => {
|
|
134
|
+
await (0, request_store_1.storeSession)({
|
|
135
|
+
session: async () => {
|
|
136
|
+
const formattedMessage = consumerOptions?.messageFormatter
|
|
137
|
+
? await consumerOptions.messageFormatter(message)
|
|
138
|
+
: await (0, message_queue_utils_1.defaultConsumerMessageFormatter)(message, this.sharedService);
|
|
139
|
+
await handler.fn(formattedMessage);
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
const consumer = sqs_consumer_1.Consumer.create({
|
|
144
|
+
...consumerOptions,
|
|
145
|
+
queueUrl: queueUrl,
|
|
146
|
+
region: queue.region,
|
|
147
|
+
sqs: client,
|
|
148
|
+
handleMessage: (message) => handlerFn(message),
|
|
149
|
+
});
|
|
150
|
+
queueProps.consumer = consumer;
|
|
151
|
+
}
|
|
152
|
+
this.queueMap.set(queueOptions.key, queueProps);
|
|
153
|
+
}
|
|
154
|
+
for (const queue of this.queueMap.values()) {
|
|
155
|
+
if (queue.consumer) {
|
|
156
|
+
queue.consumer.start();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async send(body, key, options) {
|
|
161
|
+
const queue = this.queueMap.get(key);
|
|
162
|
+
if (!queue) {
|
|
163
|
+
throw new Error(`Queue with key ${key} not found`);
|
|
164
|
+
}
|
|
165
|
+
if (!queue.producer) {
|
|
166
|
+
throw new Error(`Queue "${key}" is not configured to send messages`);
|
|
167
|
+
}
|
|
168
|
+
const producerOptions = queue.options.producerOptions;
|
|
169
|
+
const formattedMessage = producerOptions?.messageFormatter
|
|
170
|
+
? await producerOptions.messageFormatter(body)
|
|
171
|
+
: (0, message_queue_utils_1.defaultProducerMessageFormatter)(body);
|
|
172
|
+
return queue.producer.send(this.formatMessage({ body: formattedMessage, options, queue }));
|
|
173
|
+
}
|
|
174
|
+
formatMessage(props) {
|
|
175
|
+
const { body, options, queue } = props;
|
|
176
|
+
return {
|
|
177
|
+
id: options?.id ?? (0, utils_1.generateId)(),
|
|
178
|
+
body: JSON.stringify(body),
|
|
179
|
+
delaySeconds: options?.delaySeconds,
|
|
180
|
+
...(queue.isFifo && {
|
|
181
|
+
groupId: options?.groupId ?? 'default',
|
|
182
|
+
deduplicationId: options?.deduplicationId ?? (0, utils_1.generateId)(),
|
|
183
|
+
}),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
exports.SQSQueueHandler = SQSQueueHandler;
|
|
188
|
+
exports.SQSQueueHandler = SQSQueueHandler = __decorate([
|
|
189
|
+
(0, common_1.Injectable)(),
|
|
190
|
+
__param(0, (0, common_1.Inject)(message_queue_constants_1.QUEUE_MODULE_OPTIONS)),
|
|
191
|
+
__metadata("design:paramtypes", [Object, nestjs_discovery_1.DiscoveryService,
|
|
192
|
+
shared_module_1.SharedService])
|
|
193
|
+
], SQSQueueHandler);
|
|
194
|
+
//# sourceMappingURL=message-queue.handler.js.map
|