@natlibfi/melinda-rest-api-commons 4.2.5 → 5.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/melinda-node-tests.yml +9 -6
- package/dist/amqp.js +60 -151
- package/dist/amqp.js.map +7 -1
- package/dist/constants.js +40 -51
- package/dist/constants.js.map +7 -1
- package/dist/helpers/conversion.js +39 -57
- package/dist/helpers/conversion.js.map +7 -1
- package/dist/helpers/fix-constants.js +40 -47
- package/dist/helpers/fix-constants.js.map +7 -1
- package/dist/helpers/fix-handle-tempurns.js +23 -73
- package/dist/helpers/fix-handle-tempurns.js.map +7 -1
- package/dist/helpers/fix-strip-f884s.js +44 -94
- package/dist/helpers/fix-strip-f884s.js.map +7 -1
- package/dist/helpers/fix-utils.js +7 -22
- package/dist/helpers/fix-utils.js.map +7 -1
- package/dist/helpers/fix.js +62 -122
- package/dist/helpers/fix.js.map +7 -1
- package/dist/helpers/validation.js +12 -30
- package/dist/helpers/validation.js.map +7 -1
- package/dist/index.js +10 -109
- package/dist/index.js.map +7 -1
- package/dist/mongo.js +173 -509
- package/dist/mongo.js.map +7 -1
- package/dist/mongoLog.js +92 -317
- package/dist/mongoLog.js.map +7 -1
- package/dist/utils.js +46 -155
- package/dist/utils.js.map +7 -1
- package/eslint.config.js +53 -0
- package/package.json +23 -96
- package/tests/{amqp.health.spec.js → amqp.healthtest.js} +2 -2
- package/tests/{amqp.tests.spec.js → amqp.tests.localtest.js} +46 -46
- package/tests/helpers/{conversion.spec.js → conversion.test.js} +38 -25
- package/tests/helpers/{fix.spec.js → fix.test.js} +6 -6
- package/tests/helpers/{validation.spec.js → validation.test.js} +12 -9
- package/tests/{mongo-add-blob-size.spec.js → mongo-add-blob-size.test.js} +6 -6
- package/tests/{mongo-check-and-check-state.spec.js → mongo-check-and-check-state.test.js} +7 -7
- package/tests/{mongo-check-and-set-import-job-state.spec.js → mongo-check-and-set-import-job-state.test.js} +7 -7
- package/tests/{mongo-check-timeout.spec.js → mongo-check-timeout.test.js} +7 -7
- package/tests/{mongo-create-bulk.spec.js → mongo-create-bulk.test.js} +5 -5
- package/tests/{mongo-create-prio.spec.js → mongo-create-prio.test.js} +6 -6
- package/tests/{mongo-get-one.spec.js → mongo-get-one.test.js} +7 -7
- package/tests/{mongo-get-stream.spec.js → mongo-get-stream.test.js} +7 -7
- package/tests/{mongo-push-ids.spec.js → mongo-push-ids.test.js} +5 -5
- package/tests/{mongo-push-messages.spec.js → mongo-push-messages.test.js} +6 -6
- package/tests/{mongo-query-by-id.spec.js → mongo-query-by-id.test.js} +7 -7
- package/tests/{mongo-query.spec.js → mongo-query.test.js} +7 -7
- package/tests/{mongo-read-content.spec.js → mongo-read-content.test.js} +8 -8
- package/tests/{mongo-remove.spec.js → mongo-remove.test.js} +6 -6
- package/tests/{mongo-set-blob-size.spec.js → mongo-set-blob-size.test.js} +6 -6
- package/tests/{mongo-set-import-job-state.spec.js → mongo-set-import-job-state.test.js} +6 -6
- package/tests/{mongo-set-operation.spec.js → mongo-set-operation.test.js} +6 -6
- package/tests/{mongo-set-operations.spec.js → mongo-set-operations.test.js} +6 -6
- package/tests/{mongo-set-state.spec.js → mongo-set-state.test.js} +7 -7
- package/tests/{mongoLog.spec.js → mongoLog.test.js} +10 -11
- package/tests/testUtils.js +9 -8
package/dist/utils.js
CHANGED
|
@@ -1,211 +1,102 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
exports.addRecordResponseItems = addRecordResponseItems;
|
|
9
|
-
exports.createImportJobState = createImportJobState;
|
|
10
|
-
exports.createRecordResponseItem = createRecordResponseItem;
|
|
11
|
-
exports.logError = logError;
|
|
12
|
-
var _melindaBackendCommons = require("@natlibfi/melinda-backend-commons");
|
|
13
|
-
var _melindaCommons = require("@natlibfi/melinda-commons");
|
|
14
|
-
var _constants = require("./constants");
|
|
15
|
-
var _httpStatus = _interopRequireDefault(require("http-status"));
|
|
16
|
-
const logger = (0, _melindaBackendCommons.createLogger)();
|
|
17
|
-
function logError(err) {
|
|
18
|
-
if (err instanceof _melindaCommons.Error) {
|
|
1
|
+
import httpStatus from "http-status";
|
|
2
|
+
import { createLogger } from "@natlibfi/melinda-backend-commons";
|
|
3
|
+
import { Error as ApiError } from "@natlibfi/melinda-commons";
|
|
4
|
+
import { IMPORT_JOB_STATE, OPERATIONS } from "./constants.js";
|
|
5
|
+
const logger = createLogger();
|
|
6
|
+
export function logError(err) {
|
|
7
|
+
if (err instanceof ApiError) {
|
|
19
8
|
logger.error(JSON.stringify(err));
|
|
20
9
|
return;
|
|
21
10
|
}
|
|
22
|
-
if (err ===
|
|
11
|
+
if (err === "SIGINT") {
|
|
23
12
|
logger.error(err);
|
|
24
13
|
return;
|
|
25
14
|
}
|
|
26
|
-
logger.error(err.stack ===
|
|
15
|
+
logger.error(err.stack === void 0 ? err : err.stack);
|
|
27
16
|
}
|
|
28
|
-
function createImportJobState(operation, state, queryImportJobState = false) {
|
|
29
|
-
if (!(state in
|
|
30
|
-
throw new Error(
|
|
17
|
+
export function createImportJobState(operation, state, queryImportJobState = false) {
|
|
18
|
+
if (!(state in IMPORT_JOB_STATE)) {
|
|
19
|
+
throw new Error("Invalid IMPORT_JOB_STATE");
|
|
31
20
|
}
|
|
32
|
-
if (!(operation in
|
|
33
|
-
throw new Error(
|
|
21
|
+
if (!(operation in OPERATIONS)) {
|
|
22
|
+
throw new Error("Invalid operation");
|
|
34
23
|
}
|
|
35
24
|
if (queryImportJobState) {
|
|
36
25
|
const importJobStateWithOperation = `importJobState.${operation}`;
|
|
37
|
-
const importJobStateForQuery = {
|
|
38
|
-
[importJobStateWithOperation]: state
|
|
39
|
-
};
|
|
26
|
+
const importJobStateForQuery = { [importJobStateWithOperation]: state };
|
|
40
27
|
return importJobStateForQuery;
|
|
41
28
|
}
|
|
42
|
-
return {
|
|
43
|
-
[operation]: state
|
|
44
|
-
};
|
|
29
|
+
return { [operation]: state };
|
|
45
30
|
}
|
|
46
|
-
function createRecordResponseItem({
|
|
47
|
-
responsePayload,
|
|
48
|
-
responseStatus,
|
|
49
|
-
recordMetadata,
|
|
50
|
-
id
|
|
51
|
-
}) {
|
|
31
|
+
export function createRecordResponseItem({ responsePayload, responseStatus, recordMetadata, id }) {
|
|
52
32
|
const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);
|
|
53
33
|
const recordResponseItem = {
|
|
54
|
-
databaseId: id ||
|
|
55
|
-
recordMetadata: responsePayload.recordMetadata || recordMetadata ||
|
|
34
|
+
databaseId: id || "000000000",
|
|
35
|
+
recordMetadata: responsePayload.recordMetadata || recordMetadata || void 0,
|
|
56
36
|
...recordResponseStatusAndMessage
|
|
57
37
|
};
|
|
58
38
|
return recordResponseItem;
|
|
59
39
|
}
|
|
60
|
-
|
|
61
|
-
// eslint-disable-next-line max-statements
|
|
62
40
|
function getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {
|
|
63
41
|
logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);
|
|
64
|
-
//const responseStatusName = httpStatus[`${responseStatus}_NAME`];
|
|
65
|
-
//logger.debug(`Response status name: ${responseStatusName}`);
|
|
66
|
-
|
|
67
42
|
const message = getMessageFromResponsePayload(responsePayload);
|
|
68
43
|
const ids = responsePayload.ids || [];
|
|
69
44
|
logger.debug(`Response message: ${message}`);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// recordStatus corresponds to RECORD_IMPORT_STATEs used in https://github.com/NatLibFi/melinda-record-import-commons-js
|
|
73
|
-
|
|
74
|
-
// Non-http statuses
|
|
75
|
-
if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED', 'FIXED'].includes(responseStatus)) {
|
|
76
|
-
return {
|
|
77
|
-
recordStatus: responseStatus,
|
|
78
|
-
detailedRecordStatus: responseStatus,
|
|
79
|
-
message
|
|
80
|
-
};
|
|
45
|
+
if (["UPDATED", "CREATED", "INVALID", "ERROR", "SKIPPED", "FIXED"].includes(responseStatus)) {
|
|
46
|
+
return { recordStatus: responseStatus, detailedRecordStatus: responseStatus, message };
|
|
81
47
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (['SKIPPED_CHANGE', 'SKIPPED_UPDATE'].includes(responseStatus)) {
|
|
85
|
-
return {
|
|
86
|
-
recordStatus: 'SKIPPED',
|
|
87
|
-
detailedRecordStatus: responseStatus,
|
|
88
|
-
message
|
|
89
|
-
};
|
|
48
|
+
if (["SKIPPED_CHANGE", "SKIPPED_UPDATE"].includes(responseStatus)) {
|
|
49
|
+
return { recordStatus: "SKIPPED", detailedRecordStatus: responseStatus, message };
|
|
90
50
|
}
|
|
91
|
-
if ([
|
|
92
|
-
return {
|
|
93
|
-
recordStatus: 'ERROR',
|
|
94
|
-
detailedRecordStatus: responseStatus,
|
|
95
|
-
message,
|
|
96
|
-
ids
|
|
97
|
-
};
|
|
51
|
+
if (["UNKNOWN"].includes(responseStatus)) {
|
|
52
|
+
return { recordStatus: "ERROR", detailedRecordStatus: responseStatus, message, ids };
|
|
98
53
|
}
|
|
99
|
-
|
|
100
|
-
// Duplicates and other CONFLICT statuses
|
|
101
|
-
if ([_httpStatus.default.CONFLICT, 'CONFLICT'].includes(responseStatus)) {
|
|
54
|
+
if ([httpStatus.CONFLICT, "CONFLICT"].includes(responseStatus)) {
|
|
102
55
|
if (/^Duplicates in database/u.test(message)) {
|
|
103
|
-
return {
|
|
104
|
-
recordStatus: 'DUPLICATE',
|
|
105
|
-
detailedRecordStatus: 'DUPLICATE',
|
|
106
|
-
message,
|
|
107
|
-
ids
|
|
108
|
-
};
|
|
56
|
+
return { recordStatus: "DUPLICATE", detailedRecordStatus: "DUPLICATE", message, ids };
|
|
109
57
|
}
|
|
110
58
|
if (/^MatchValidation for all/u.test(message)) {
|
|
111
|
-
return {
|
|
112
|
-
recordStatus: 'ERROR',
|
|
113
|
-
detailedRecordStatus: 'CONFLICT',
|
|
114
|
-
message,
|
|
115
|
-
ids
|
|
116
|
-
};
|
|
59
|
+
return { recordStatus: "ERROR", detailedRecordStatus: "CONFLICT", message, ids };
|
|
117
60
|
}
|
|
118
|
-
|
|
119
|
-
// Use ids only if there are more than one id or the id in payload does not match databaseId
|
|
120
61
|
if (ids.length > 1 || ids[0] !== id) {
|
|
121
|
-
return {
|
|
122
|
-
recordStatus: 'ERROR',
|
|
123
|
-
detailedRecordStatus: 'CONFLICT',
|
|
124
|
-
message,
|
|
125
|
-
ids
|
|
126
|
-
};
|
|
62
|
+
return { recordStatus: "ERROR", detailedRecordStatus: "CONFLICT", message, ids };
|
|
127
63
|
}
|
|
128
|
-
return {
|
|
129
|
-
recordStatus: 'ERROR',
|
|
130
|
-
detailedRecordStatus: 'CONFLICT',
|
|
131
|
-
message
|
|
132
|
-
};
|
|
64
|
+
return { recordStatus: "ERROR", detailedRecordStatus: "CONFLICT", message };
|
|
133
65
|
}
|
|
134
|
-
if ([
|
|
66
|
+
if ([httpStatus.UNPROCESSABLE_ENTITY, "UNPROCESSABLE_ENTITY"].includes(responseStatus)) {
|
|
135
67
|
if (ids.length > 1 || ids[0] !== id) {
|
|
136
|
-
return {
|
|
137
|
-
recordStatus: 'INVALID',
|
|
138
|
-
detailedRecordStatus: 'UNPROCESSABLE_ENTITY',
|
|
139
|
-
message,
|
|
140
|
-
ids
|
|
141
|
-
};
|
|
68
|
+
return { recordStatus: "INVALID", detailedRecordStatus: "UNPROCESSABLE_ENTITY", message, ids };
|
|
142
69
|
}
|
|
143
|
-
return {
|
|
144
|
-
recordStatus: 'INVALID',
|
|
145
|
-
detailedRecordStatus: 'UNPROCESSABLE_ENTITY',
|
|
146
|
-
message
|
|
147
|
-
};
|
|
70
|
+
return { recordStatus: "INVALID", detailedRecordStatus: "UNPROCESSABLE_ENTITY", message };
|
|
148
71
|
}
|
|
149
|
-
if ([
|
|
150
|
-
return {
|
|
151
|
-
recordStatus: 'ERROR',
|
|
152
|
-
detailedRecordStatus: 'NOT_FOUND',
|
|
153
|
-
message
|
|
154
|
-
};
|
|
72
|
+
if ([httpStatus.NOT_FOUND, "NOT_FOUND"].includes(responseStatus)) {
|
|
73
|
+
return { recordStatus: "ERROR", detailedRecordStatus: "NOT_FOUND", message };
|
|
155
74
|
}
|
|
156
|
-
if ([
|
|
157
|
-
return {
|
|
158
|
-
recordStatus: 'ERROR',
|
|
159
|
-
detailedRecordStatus: 'FORBIDDEN',
|
|
160
|
-
message
|
|
161
|
-
};
|
|
75
|
+
if ([httpStatus.FORBIDDEN, "FORBIDDEN"].includes(responseStatus)) {
|
|
76
|
+
return { recordStatus: "ERROR", detailedRecordStatus: "FORBIDDEN", message };
|
|
162
77
|
}
|
|
163
|
-
|
|
164
|
-
// Otherwise
|
|
165
78
|
logger.debug(`Unknown responseStatus: ${responseStatus}`);
|
|
166
79
|
const newMessage = `${message} - Unknown recordStatus: ${responseStatus}`;
|
|
167
|
-
return {
|
|
168
|
-
recordStatus: 'ERROR',
|
|
169
|
-
detailedRecordStatus: responseStatus,
|
|
170
|
-
message: newMessage
|
|
171
|
-
};
|
|
80
|
+
return { recordStatus: "ERROR", detailedRecordStatus: responseStatus, message: newMessage };
|
|
172
81
|
}
|
|
173
82
|
function getMessageFromResponsePayload(responsePayload) {
|
|
174
83
|
if (responsePayload.message) {
|
|
175
84
|
return responsePayload.message;
|
|
176
85
|
}
|
|
177
|
-
if (typeof responsePayload ===
|
|
86
|
+
if (typeof responsePayload === "string" || responsePayload instanceof String) {
|
|
178
87
|
return responsePayload;
|
|
179
88
|
}
|
|
180
|
-
return
|
|
89
|
+
return "";
|
|
181
90
|
}
|
|
182
|
-
async function addRecordResponseItem({
|
|
183
|
-
recordResponseItem,
|
|
184
|
-
correlationId,
|
|
185
|
-
mongoOperator
|
|
186
|
-
}) {
|
|
187
|
-
await mongoOperator.pushMessages({
|
|
188
|
-
correlationId,
|
|
189
|
-
messages: [recordResponseItem],
|
|
190
|
-
messageField: 'records'
|
|
191
|
-
});
|
|
91
|
+
export async function addRecordResponseItem({ recordResponseItem, correlationId, mongoOperator }) {
|
|
92
|
+
await mongoOperator.pushMessages({ correlationId, messages: [recordResponseItem], messageField: "records" });
|
|
192
93
|
return true;
|
|
193
94
|
}
|
|
194
|
-
|
|
195
|
-
// Use addRecordResponseItems to add several recordResponseItems in one mongo operation to avoid writeconflicts
|
|
196
|
-
async function addRecordResponseItems({
|
|
197
|
-
recordResponseItems,
|
|
198
|
-
correlationId,
|
|
199
|
-
mongoOperator
|
|
200
|
-
}) {
|
|
95
|
+
export async function addRecordResponseItems({ recordResponseItems, correlationId, mongoOperator }) {
|
|
201
96
|
if (!Array.isArray(recordResponseItems)) {
|
|
202
|
-
throw new Error(
|
|
97
|
+
throw new Error("RecordResponseItems is not an array!");
|
|
203
98
|
}
|
|
204
|
-
await mongoOperator.pushMessages({
|
|
205
|
-
correlationId,
|
|
206
|
-
messages: recordResponseItems,
|
|
207
|
-
messageField: 'records'
|
|
208
|
-
});
|
|
99
|
+
await mongoOperator.pushMessages({ correlationId, messages: recordResponseItems, messageField: "records" });
|
|
209
100
|
return true;
|
|
210
101
|
}
|
|
211
|
-
//# sourceMappingURL=utils.js.map
|
|
102
|
+
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["_melindaBackendCommons","require","_melindaCommons","_constants","_httpStatus","_interopRequireDefault","logger","createLogger","logError","err","ApiError","error","JSON","stringify","stack","undefined","createImportJobState","operation","state","queryImportJobState","IMPORT_JOB_STATE","Error","OPERATIONS","importJobStateWithOperation","importJobStateForQuery","createRecordResponseItem","responsePayload","responseStatus","recordMetadata","id","recordResponseStatusAndMessage","getRecordResponseStatusAndMessage","recordResponseItem","databaseId","debug","message","getMessageFromResponsePayload","ids","includes","recordStatus","detailedRecordStatus","httpStatus","CONFLICT","test","length","UNPROCESSABLE_ENTITY","NOT_FOUND","FORBIDDEN","newMessage","String","addRecordResponseItem","correlationId","mongoOperator","pushMessages","messages","messageField","addRecordResponseItems","recordResponseItems","Array","isArray"],"sources":["../src/utils.js"],"sourcesContent":["import {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {IMPORT_JOB_STATE, OPERATIONS} from './constants';\nimport httpStatus from 'http-status';\n\nconst logger = createLogger();\n\nexport function logError(err) {\n if (err instanceof ApiError) {\n logger.error(JSON.stringify(err));\n return;\n }\n\n if (err === 'SIGINT') {\n logger.error(err);\n return;\n }\n\n logger.error(err.stack === undefined ? err : err.stack);\n}\n\nexport function createImportJobState(operation, state, queryImportJobState = false) {\n if (!(state in IMPORT_JOB_STATE)) {\n throw new Error('Invalid IMPORT_JOB_STATE');\n }\n\n if (!(operation in OPERATIONS)) {\n throw new Error('Invalid operation');\n }\n\n if (queryImportJobState) {\n const importJobStateWithOperation = `importJobState.${operation}`;\n const importJobStateForQuery = {[importJobStateWithOperation]: state};\n\n return importJobStateForQuery;\n }\n\n return {[operation]: state};\n}\n\nexport function createRecordResponseItem({responsePayload, responseStatus, recordMetadata, id}) {\n const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);\n const recordResponseItem = {\n databaseId: id || '000000000',\n recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,\n ...recordResponseStatusAndMessage\n };\n return recordResponseItem;\n}\n\n// eslint-disable-next-line max-statements\nfunction getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {\n\n logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);\n //const responseStatusName = httpStatus[`${responseStatus}_NAME`];\n //logger.debug(`Response status name: ${responseStatusName}`);\n\n const message = getMessageFromResponsePayload(responsePayload);\n const ids = responsePayload.ids || [];\n\n logger.debug(`Response message: ${message}`);\n\n // We map responseStatus here for a wider recordStatus and more detailed detailedRecordStatus\n // recordStatus corresponds to RECORD_IMPORT_STATEs used in https://github.com/NatLibFi/melinda-record-import-commons-js\n\n // Non-http statuses\n if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED', 'FIXED'].includes(responseStatus)) {\n return {recordStatus: responseStatus, detailedRecordStatus: responseStatus, message};\n }\n\n // More detailed SKIPPED statuses\n if (['SKIPPED_CHANGE', 'SKIPPED_UPDATE'].includes(responseStatus)) {\n return {recordStatus: 'SKIPPED', detailedRecordStatus: responseStatus, message};\n }\n\n if (['UNKNOWN'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message, ids};\n }\n\n // Duplicates and other CONFLICT statuses\n if ([httpStatus.CONFLICT, 'CONFLICT'].includes(responseStatus)) {\n if ((/^Duplicates in database/u).test(message)) {\n return {recordStatus: 'DUPLICATE', detailedRecordStatus: 'DUPLICATE', message, ids};\n }\n if ((/^MatchValidation for all/u).test(message)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids};\n }\n\n // Use ids only if there are more than one id or the id in payload does not match databaseId\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids};\n }\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message};\n }\n\n if ([httpStatus.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message, ids};\n }\n return {recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message};\n }\n\n if ([httpStatus.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'NOT_FOUND', message};\n }\n\n if ([httpStatus.FORBIDDEN, 'FORBIDDEN'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'FORBIDDEN', message};\n }\n\n // Otherwise\n logger.debug(`Unknown responseStatus: ${responseStatus}`);\n const newMessage = `${message} - Unknown recordStatus: ${responseStatus}`;\n return {recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message: newMessage};\n}\n\nfunction getMessageFromResponsePayload(responsePayload) {\n if (responsePayload.message) {\n return responsePayload.message;\n }\n if (typeof responsePayload === 'string' || responsePayload instanceof String) {\n return responsePayload;\n }\n return '';\n}\n\nexport async function addRecordResponseItem({recordResponseItem, correlationId, mongoOperator}) {\n await mongoOperator.pushMessages({correlationId, messages: [recordResponseItem], messageField: 'records'});\n return true;\n}\n\n// Use addRecordResponseItems to add several recordResponseItems in one mongo operation to avoid writeconflicts\nexport async function addRecordResponseItems({recordResponseItems, correlationId, mongoOperator}) {\n if (!Array.isArray(recordResponseItems)) {\n throw new Error('RecordResponseItems is not an array!');\n }\n await mongoOperator.pushMessages({correlationId, messages: recordResponseItems, messageField: 'records'});\n return true;\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/utils.js"],
|
|
4
|
+
"sourcesContent": ["import httpStatus from 'http-status';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {IMPORT_JOB_STATE, OPERATIONS} from './constants.js';\n\nconst logger = createLogger();\n\nexport function logError(err) {\n if (err instanceof ApiError) {\n logger.error(JSON.stringify(err));\n return;\n }\n\n if (err === 'SIGINT') {\n logger.error(err);\n return;\n }\n\n logger.error(err.stack === undefined ? err : err.stack);\n}\n\nexport function createImportJobState(operation, state, queryImportJobState = false) {\n if (!(state in IMPORT_JOB_STATE)) {\n throw new Error('Invalid IMPORT_JOB_STATE');\n }\n\n if (!(operation in OPERATIONS)) {\n throw new Error('Invalid operation');\n }\n\n if (queryImportJobState) {\n const importJobStateWithOperation = `importJobState.${operation}`;\n const importJobStateForQuery = {[importJobStateWithOperation]: state};\n\n return importJobStateForQuery;\n }\n\n return {[operation]: state};\n}\n\nexport function createRecordResponseItem({responsePayload, responseStatus, recordMetadata, id}) {\n const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);\n const recordResponseItem = {\n databaseId: id || '000000000',\n recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,\n ...recordResponseStatusAndMessage\n };\n return recordResponseItem;\n}\n\n// eslint-disable-next-line max-statements\nfunction getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {\n\n logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);\n //const responseStatusName = httpStatus[`${responseStatus}_NAME`];\n //logger.debug(`Response status name: ${responseStatusName}`);\n\n const message = getMessageFromResponsePayload(responsePayload);\n const ids = responsePayload.ids || [];\n\n logger.debug(`Response message: ${message}`);\n\n // We map responseStatus here for a wider recordStatus and more detailed detailedRecordStatus\n // recordStatus corresponds to RECORD_IMPORT_STATEs used in https://github.com/NatLibFi/melinda-record-import-commons-js\n\n // Non-http statuses\n if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED', 'FIXED'].includes(responseStatus)) {\n return {recordStatus: responseStatus, detailedRecordStatus: responseStatus, message};\n }\n\n // More detailed SKIPPED statuses\n if (['SKIPPED_CHANGE', 'SKIPPED_UPDATE'].includes(responseStatus)) {\n return {recordStatus: 'SKIPPED', detailedRecordStatus: responseStatus, message};\n }\n\n if (['UNKNOWN'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message, ids};\n }\n\n // Duplicates and other CONFLICT statuses\n if ([httpStatus.CONFLICT, 'CONFLICT'].includes(responseStatus)) {\n if ((/^Duplicates in database/u).test(message)) {\n return {recordStatus: 'DUPLICATE', detailedRecordStatus: 'DUPLICATE', message, ids};\n }\n if ((/^MatchValidation for all/u).test(message)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids};\n }\n\n // Use ids only if there are more than one id or the id in payload does not match databaseId\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids};\n }\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message};\n }\n\n if ([httpStatus.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message, ids};\n }\n return {recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message};\n }\n\n if ([httpStatus.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'NOT_FOUND', message};\n }\n\n if ([httpStatus.FORBIDDEN, 'FORBIDDEN'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'FORBIDDEN', message};\n }\n\n // Otherwise\n logger.debug(`Unknown responseStatus: ${responseStatus}`);\n const newMessage = `${message} - Unknown recordStatus: ${responseStatus}`;\n return {recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message: newMessage};\n}\n\nfunction getMessageFromResponsePayload(responsePayload) {\n if (responsePayload.message) {\n return responsePayload.message;\n }\n if (typeof responsePayload === 'string' || responsePayload instanceof String) {\n return responsePayload;\n }\n return '';\n}\n\nexport async function addRecordResponseItem({recordResponseItem, correlationId, mongoOperator}) {\n await mongoOperator.pushMessages({correlationId, messages: [recordResponseItem], messageField: 'records'});\n return true;\n}\n\n// Use addRecordResponseItems to add several recordResponseItems in one mongo operation to avoid writeconflicts\nexport async function addRecordResponseItems({recordResponseItems, correlationId, mongoOperator}) {\n if (!Array.isArray(recordResponseItems)) {\n throw new Error('RecordResponseItems is not an array!');\n }\n await mongoOperator.pushMessages({correlationId, messages: recordResponseItems, messageField: 'records'});\n return true;\n}\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Eslint configuration object for src
|
|
2
|
+
const configSrc = {
|
|
3
|
+
files: [
|
|
4
|
+
"src/*",
|
|
5
|
+
"tests/*"
|
|
6
|
+
],
|
|
7
|
+
linterOptions: {
|
|
8
|
+
reportUnusedDisableDirectives: true,
|
|
9
|
+
},
|
|
10
|
+
rules: {
|
|
11
|
+
"no-console": "warn",
|
|
12
|
+
"eqeqeq": ["error", "always"],
|
|
13
|
+
"no-const-assign": "error",
|
|
14
|
+
"max-depth": ["warn", 4],
|
|
15
|
+
"max-lines": ["warn", 500],
|
|
16
|
+
"max-lines-per-function": ["warn", {"max": 100}],
|
|
17
|
+
"no-else-return": ["error", {allowElseIf: false}],
|
|
18
|
+
"no-plusplus": [
|
|
19
|
+
"error",
|
|
20
|
+
{
|
|
21
|
+
"allowForLoopAfterthoughts": true
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"array-callback-return": [
|
|
25
|
+
"error",
|
|
26
|
+
{
|
|
27
|
+
"checkForEach": false
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"no-unused-vars": [
|
|
31
|
+
"error",
|
|
32
|
+
{
|
|
33
|
+
"argsIgnorePattern": "next"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"no-warning-comments": "off"
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// Eslint configuration object for globally ignoring .js files
|
|
41
|
+
// - ignore all files that start with a dot
|
|
42
|
+
// - ignore all files inside directories named 'dist'
|
|
43
|
+
const configIgnores = {
|
|
44
|
+
ignores: [
|
|
45
|
+
"**/.*",
|
|
46
|
+
"**/dist/"
|
|
47
|
+
]
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export default [
|
|
51
|
+
configSrc,
|
|
52
|
+
configIgnores
|
|
53
|
+
];
|
package/package.json
CHANGED
|
@@ -14,124 +14,51 @@
|
|
|
14
14
|
"url": "git@github.com:natlibfi/melinda-rest-api-commons.git"
|
|
15
15
|
},
|
|
16
16
|
"license": "MIT",
|
|
17
|
-
"version": "
|
|
17
|
+
"version": "5.0.0-alpha.2",
|
|
18
18
|
"main": "./dist/index.js",
|
|
19
|
+
"type": "module",
|
|
19
20
|
"engines": {
|
|
20
|
-
"node": ">=
|
|
21
|
+
"node": ">=22"
|
|
21
22
|
},
|
|
22
23
|
"publishConfig": {
|
|
23
24
|
"access": "public"
|
|
24
25
|
},
|
|
25
26
|
"scripts": {
|
|
26
27
|
"prepare": "npm run build",
|
|
27
|
-
"build": "
|
|
28
|
+
"build": "esbuild ./src/*.js ./src/**/*.js --sourcemap --platform=node --main-fields=main --outdir=dist --allow-overwrite --analyze",
|
|
28
29
|
"lint": "eslint ./src",
|
|
29
|
-
"lint:dev": "eslint ./src
|
|
30
|
+
"lint:dev": "eslint --fix ./src",
|
|
30
31
|
"test": "npm run lint && npm run test:base",
|
|
31
|
-
"test:base": "
|
|
32
|
-
"test:
|
|
33
|
-
"test:
|
|
34
|
-
"test
|
|
35
|
-
"dev": "
|
|
36
|
-
"dev:debug": "cross-env LOG_LEVEL=debug DEBUG=@natlibfi/* NODE_ENV=test
|
|
32
|
+
"test:base": "node --test --test-force-exit --experimental-test-coverage --test-reporter=spec './tests/**/*.test.js'",
|
|
33
|
+
"test:local": "cross-env NODE_ENV=test node --test --test-force-exit --experimental-test-coverage --test-reporter=spec './tests/amqp.*.localtest.js'",
|
|
34
|
+
"test:healthcheck": "cross-env NODE_ENV=test node --test --test-force-exit --experimental-test-coverage --test-reporter=spec './tests/amqp.healthtest.js'",
|
|
35
|
+
"watch:test": "cross-env DEBUG=@natlibfi/* NODE_ENV=test node --watch --test --experimental-test-coverage --test-reporter=spec './src/*.test.js' './src/**/*.test.js'",
|
|
36
|
+
"dev": "npm run watch:test",
|
|
37
|
+
"dev:debug": "cross-env LOG_LEVEL=debug DEBUG=@natlibfi/* NODE_ENV=test npm run watch:test"
|
|
37
38
|
},
|
|
38
39
|
"dependencies": {
|
|
39
|
-
"@natlibfi/marc-record": "^
|
|
40
|
-
"@natlibfi/marc-record-serializers": "^
|
|
41
|
-
"@natlibfi/marc-record-validate": "^
|
|
40
|
+
"@natlibfi/marc-record": "^10.0.0-alpha.1",
|
|
41
|
+
"@natlibfi/marc-record-serializers": "^11.0.0-alpha.2",
|
|
42
|
+
"@natlibfi/marc-record-validate": "^9.0.0-alpha.1",
|
|
42
43
|
"@natlibfi/marc-record-validators-melinda": "^11.6.2",
|
|
43
|
-
"@natlibfi/melinda-backend-commons": "^
|
|
44
|
-
"@natlibfi/melinda-commons": "^
|
|
44
|
+
"@natlibfi/melinda-backend-commons": "^3.0.0-alpha.3",
|
|
45
|
+
"@natlibfi/melinda-commons": "^14.0.0-alpha.3",
|
|
45
46
|
"amqplib": "^0.10.8",
|
|
46
47
|
"debug": "^4.4.0",
|
|
47
48
|
"http-status": "^2.1.0",
|
|
48
49
|
"moment": "^2.30.1",
|
|
49
50
|
"mongo-sanitize": "^1.1.0",
|
|
50
|
-
"mongodb": "^6.
|
|
51
|
+
"mongodb": "^6.18.0"
|
|
51
52
|
},
|
|
52
53
|
"devDependencies": {
|
|
53
|
-
"@
|
|
54
|
-
"@
|
|
55
|
-
"@
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"@natlibfi/fixugen": "^2.0.14",
|
|
60
|
-
"@natlibfi/fixura": "^3.0.13",
|
|
61
|
-
"@natlibfi/fixura-mongo": "^2.0.24",
|
|
62
|
-
"babel-plugin-istanbul": "^7.0.0",
|
|
63
|
-
"babel-plugin-rewire": "^1.2.0",
|
|
64
|
-
"chai": "^4.5.0",
|
|
65
|
-
"cross-env": "^7.0.3",
|
|
66
|
-
"eslint": "^8.57.1",
|
|
67
|
-
"mocha": "^11.2.2",
|
|
68
|
-
"nodemon": "^3.1.10",
|
|
69
|
-
"nyc": "^17.1.0"
|
|
54
|
+
"@natlibfi/fixugen": "^3.0.0-alpha.5",
|
|
55
|
+
"@natlibfi/fixura": "^4.0.0-alpha.12",
|
|
56
|
+
"@natlibfi/fixura-mongo": "^3.0.0-alpha.5",
|
|
57
|
+
"cross-env": "^10.0.0",
|
|
58
|
+
"esbuild": "^0.25.9",
|
|
59
|
+
"eslint": "^9.33.0"
|
|
70
60
|
},
|
|
71
61
|
"overrides": {
|
|
72
62
|
"nanoid": "^3.3.8"
|
|
73
|
-
},
|
|
74
|
-
"eslintConfig": {
|
|
75
|
-
"extends": "@natlibfi/melinda-backend"
|
|
76
|
-
},
|
|
77
|
-
"babel": {
|
|
78
|
-
"presets": [
|
|
79
|
-
[
|
|
80
|
-
"@babel/preset-env",
|
|
81
|
-
{
|
|
82
|
-
"targets": "maintained node versions"
|
|
83
|
-
}
|
|
84
|
-
]
|
|
85
|
-
],
|
|
86
|
-
"plugins": [
|
|
87
|
-
[
|
|
88
|
-
"@babel/transform-runtime"
|
|
89
|
-
]
|
|
90
|
-
],
|
|
91
|
-
"env": {
|
|
92
|
-
"test": {
|
|
93
|
-
"plugins": [
|
|
94
|
-
"istanbul",
|
|
95
|
-
"rewire"
|
|
96
|
-
]
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
"mocha": {
|
|
101
|
-
"spec": [
|
|
102
|
-
"tests/*.spec.js",
|
|
103
|
-
"tests/**/*.spec.js"
|
|
104
|
-
],
|
|
105
|
-
"require": [
|
|
106
|
-
"@babel/register"
|
|
107
|
-
],
|
|
108
|
-
"inline-diffs": true,
|
|
109
|
-
"maxDiffSize": 25000,
|
|
110
|
-
"bail": true,
|
|
111
|
-
"exit": true,
|
|
112
|
-
"timeout": 10000
|
|
113
|
-
},
|
|
114
|
-
"nodemonConfig": {
|
|
115
|
-
"exec": "npm run test:dev",
|
|
116
|
-
"watch": [
|
|
117
|
-
"tests/*",
|
|
118
|
-
"src/*",
|
|
119
|
-
"test-fixtures/*"
|
|
120
|
-
]
|
|
121
|
-
},
|
|
122
|
-
"nyc": {
|
|
123
|
-
"exclude": [
|
|
124
|
-
"tests/*.spec.js",
|
|
125
|
-
"tests/**/*.spec.js"
|
|
126
|
-
],
|
|
127
|
-
"reporter": [
|
|
128
|
-
"text"
|
|
129
|
-
],
|
|
130
|
-
"sourceMap": false,
|
|
131
|
-
"instrument": false,
|
|
132
|
-
"lines": 80,
|
|
133
|
-
"statements": 80,
|
|
134
|
-
"functions": 80,
|
|
135
|
-
"branches": 80
|
|
136
63
|
}
|
|
137
64
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
//import
|
|
1
|
+
//import assert from 'node:assert';
|
|
2
2
|
import createDebugLogger from 'debug';
|
|
3
|
-
import {amqpFactory} from '../src/index';
|
|
3
|
+
import {amqpFactory} from '../src/index.js';
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:amqp:test');
|