@natlibfi/melinda-rest-api-commons 4.2.5 → 5.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/melinda-node-tests.yml +9 -6
- package/dist/conversion.js +70 -0
- package/dist/conversion.js.map +7 -0
- package/dist/fix-constants.js +63 -0
- package/dist/fix-constants.js.map +7 -0
- package/dist/fix-handle-tempurns.js +83 -0
- package/dist/fix-handle-tempurns.js.map +7 -0
- package/dist/fix-strip-f884s.js +160 -0
- package/dist/fix-strip-f884s.js.map +7 -0
- package/dist/fix-utils.js +39 -0
- package/dist/fix-utils.js.map +7 -0
- package/dist/fix.js +142 -0
- package/dist/fix.js.map +7 -0
- package/dist/validation.js +19 -0
- package/dist/validation.js.map +7 -0
- 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/amqp.js +0 -326
- package/dist/amqp.js.map +0 -1
- package/dist/constants.js +0 -60
- package/dist/constants.js.map +0 -1
- package/dist/helpers/conversion.js +0 -88
- package/dist/helpers/conversion.js.map +0 -1
- package/dist/helpers/fix-constants.js +0 -70
- package/dist/helpers/fix-constants.js.map +0 -1
- package/dist/helpers/fix-handle-tempurns.js +0 -133
- package/dist/helpers/fix-handle-tempurns.js.map +0 -1
- package/dist/helpers/fix-strip-f884s.js +0 -210
- package/dist/helpers/fix-strip-f884s.js.map +0 -1
- package/dist/helpers/fix-utils.js +0 -54
- package/dist/helpers/fix-utils.js.map +0 -1
- package/dist/helpers/fix.js +0 -202
- package/dist/helpers/fix.js.map +0 -1
- package/dist/helpers/validation.js +0 -37
- package/dist/helpers/validation.js.map +0 -1
- package/dist/index.js +0 -109
- package/dist/index.js.map +0 -1
- package/dist/mongo.js +0 -822
- package/dist/mongo.js.map +0 -1
- package/dist/mongoLog.js +0 -409
- package/dist/mongoLog.js.map +0 -1
- package/dist/utils.js +0 -211
- package/dist/utils.js.map +0 -1
package/dist/utils.js
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.addRecordResponseItem = addRecordResponseItem;
|
|
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) {
|
|
19
|
-
logger.error(JSON.stringify(err));
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
if (err === 'SIGINT') {
|
|
23
|
-
logger.error(err);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
logger.error(err.stack === undefined ? err : err.stack);
|
|
27
|
-
}
|
|
28
|
-
function createImportJobState(operation, state, queryImportJobState = false) {
|
|
29
|
-
if (!(state in _constants.IMPORT_JOB_STATE)) {
|
|
30
|
-
throw new Error('Invalid IMPORT_JOB_STATE');
|
|
31
|
-
}
|
|
32
|
-
if (!(operation in _constants.OPERATIONS)) {
|
|
33
|
-
throw new Error('Invalid operation');
|
|
34
|
-
}
|
|
35
|
-
if (queryImportJobState) {
|
|
36
|
-
const importJobStateWithOperation = `importJobState.${operation}`;
|
|
37
|
-
const importJobStateForQuery = {
|
|
38
|
-
[importJobStateWithOperation]: state
|
|
39
|
-
};
|
|
40
|
-
return importJobStateForQuery;
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
[operation]: state
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
function createRecordResponseItem({
|
|
47
|
-
responsePayload,
|
|
48
|
-
responseStatus,
|
|
49
|
-
recordMetadata,
|
|
50
|
-
id
|
|
51
|
-
}) {
|
|
52
|
-
const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);
|
|
53
|
-
const recordResponseItem = {
|
|
54
|
-
databaseId: id || '000000000',
|
|
55
|
-
recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,
|
|
56
|
-
...recordResponseStatusAndMessage
|
|
57
|
-
};
|
|
58
|
-
return recordResponseItem;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// eslint-disable-next-line max-statements
|
|
62
|
-
function getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {
|
|
63
|
-
logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);
|
|
64
|
-
//const responseStatusName = httpStatus[`${responseStatus}_NAME`];
|
|
65
|
-
//logger.debug(`Response status name: ${responseStatusName}`);
|
|
66
|
-
|
|
67
|
-
const message = getMessageFromResponsePayload(responsePayload);
|
|
68
|
-
const ids = responsePayload.ids || [];
|
|
69
|
-
logger.debug(`Response message: ${message}`);
|
|
70
|
-
|
|
71
|
-
// We map responseStatus here for a wider recordStatus and more detailed detailedRecordStatus
|
|
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
|
-
};
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// More detailed SKIPPED statuses
|
|
84
|
-
if (['SKIPPED_CHANGE', 'SKIPPED_UPDATE'].includes(responseStatus)) {
|
|
85
|
-
return {
|
|
86
|
-
recordStatus: 'SKIPPED',
|
|
87
|
-
detailedRecordStatus: responseStatus,
|
|
88
|
-
message
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
if (['UNKNOWN'].includes(responseStatus)) {
|
|
92
|
-
return {
|
|
93
|
-
recordStatus: 'ERROR',
|
|
94
|
-
detailedRecordStatus: responseStatus,
|
|
95
|
-
message,
|
|
96
|
-
ids
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Duplicates and other CONFLICT statuses
|
|
101
|
-
if ([_httpStatus.default.CONFLICT, 'CONFLICT'].includes(responseStatus)) {
|
|
102
|
-
if (/^Duplicates in database/u.test(message)) {
|
|
103
|
-
return {
|
|
104
|
-
recordStatus: 'DUPLICATE',
|
|
105
|
-
detailedRecordStatus: 'DUPLICATE',
|
|
106
|
-
message,
|
|
107
|
-
ids
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
if (/^MatchValidation for all/u.test(message)) {
|
|
111
|
-
return {
|
|
112
|
-
recordStatus: 'ERROR',
|
|
113
|
-
detailedRecordStatus: 'CONFLICT',
|
|
114
|
-
message,
|
|
115
|
-
ids
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Use ids only if there are more than one id or the id in payload does not match databaseId
|
|
120
|
-
if (ids.length > 1 || ids[0] !== id) {
|
|
121
|
-
return {
|
|
122
|
-
recordStatus: 'ERROR',
|
|
123
|
-
detailedRecordStatus: 'CONFLICT',
|
|
124
|
-
message,
|
|
125
|
-
ids
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
return {
|
|
129
|
-
recordStatus: 'ERROR',
|
|
130
|
-
detailedRecordStatus: 'CONFLICT',
|
|
131
|
-
message
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
if ([_httpStatus.default.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {
|
|
135
|
-
if (ids.length > 1 || ids[0] !== id) {
|
|
136
|
-
return {
|
|
137
|
-
recordStatus: 'INVALID',
|
|
138
|
-
detailedRecordStatus: 'UNPROCESSABLE_ENTITY',
|
|
139
|
-
message,
|
|
140
|
-
ids
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
return {
|
|
144
|
-
recordStatus: 'INVALID',
|
|
145
|
-
detailedRecordStatus: 'UNPROCESSABLE_ENTITY',
|
|
146
|
-
message
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
if ([_httpStatus.default.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {
|
|
150
|
-
return {
|
|
151
|
-
recordStatus: 'ERROR',
|
|
152
|
-
detailedRecordStatus: 'NOT_FOUND',
|
|
153
|
-
message
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
if ([_httpStatus.default.FORBIDDEN, 'FORBIDDEN'].includes(responseStatus)) {
|
|
157
|
-
return {
|
|
158
|
-
recordStatus: 'ERROR',
|
|
159
|
-
detailedRecordStatus: 'FORBIDDEN',
|
|
160
|
-
message
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// Otherwise
|
|
165
|
-
logger.debug(`Unknown responseStatus: ${responseStatus}`);
|
|
166
|
-
const newMessage = `${message} - Unknown recordStatus: ${responseStatus}`;
|
|
167
|
-
return {
|
|
168
|
-
recordStatus: 'ERROR',
|
|
169
|
-
detailedRecordStatus: responseStatus,
|
|
170
|
-
message: newMessage
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
function getMessageFromResponsePayload(responsePayload) {
|
|
174
|
-
if (responsePayload.message) {
|
|
175
|
-
return responsePayload.message;
|
|
176
|
-
}
|
|
177
|
-
if (typeof responsePayload === 'string' || responsePayload instanceof String) {
|
|
178
|
-
return responsePayload;
|
|
179
|
-
}
|
|
180
|
-
return '';
|
|
181
|
-
}
|
|
182
|
-
async function addRecordResponseItem({
|
|
183
|
-
recordResponseItem,
|
|
184
|
-
correlationId,
|
|
185
|
-
mongoOperator
|
|
186
|
-
}) {
|
|
187
|
-
await mongoOperator.pushMessages({
|
|
188
|
-
correlationId,
|
|
189
|
-
messages: [recordResponseItem],
|
|
190
|
-
messageField: 'records'
|
|
191
|
-
});
|
|
192
|
-
return true;
|
|
193
|
-
}
|
|
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
|
-
}) {
|
|
201
|
-
if (!Array.isArray(recordResponseItems)) {
|
|
202
|
-
throw new Error('RecordResponseItems is not an array!');
|
|
203
|
-
}
|
|
204
|
-
await mongoOperator.pushMessages({
|
|
205
|
-
correlationId,
|
|
206
|
-
messages: recordResponseItems,
|
|
207
|
-
messageField: 'records'
|
|
208
|
-
});
|
|
209
|
-
return true;
|
|
210
|
-
}
|
|
211
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|