integreat
Version:
Node.js integration layer
59 lines • 2.57 kB
JavaScript
import { createErrorResponse } from '../utils/response.js';
import { isTypedData } from '../utils/is.js';
const isTypedDataArray = (value) => Array.isArray(value) && isTypedData(value[0]);
const createDeleteAction = (type, data, params, { ident, cid, gid }, targetService) => ({
type: 'DELETE',
payload: {
...params,
type,
data,
...(targetService && { targetService }),
},
meta: { ident, queue: true, cid, ...(gid && { gid }) },
});
const getOrDeleteExpired = async (deleteWithParams, dispatch, type, msFromNow, params, { ident, cid, gid }, targetService, endpointId) => {
const timestamp = Date.now() + msFromNow;
const isodate = new Date(timestamp).toISOString();
return dispatch({
type: deleteWithParams ? 'DELETE' : 'GET',
payload: {
...params,
type,
timestamp,
isodate,
...(targetService && { targetService }),
...(endpointId && { endpoint: endpointId }),
},
meta: {
ident,
cid,
...(gid && { gid }),
...(deleteWithParams ? { queue: true } : {}),
},
});
};
async function deleteItems(dispatch, response, type, params, meta, serviceId) {
if (response.status !== 'ok') {
return createErrorResponse(`Could not get items from service '${serviceId}'. Reason: ${response.status} ${response.error}`, 'handler:EXPIRE');
}
const data = response.data;
if (!isTypedDataArray(data)) {
return createErrorResponse(`No items to expire from service '${serviceId}'`, 'handler:EXPIRE', 'noaction');
}
const deleteData = data.map((item) => ({ id: item.id, $type: item.$type }));
return await dispatch(createDeleteAction(type, deleteData, params, meta, serviceId));
}
export default async function expire(action, { dispatch }) {
const { payload: { type, endpoint: endpointId, targetService: serviceId, deleteWithParams = false, msFromNow, ...params }, meta = {}, } = action;
if (!type) {
return createErrorResponse(`Can't delete expired from service '${serviceId}' without one or more specified types`, 'handler:EXPIRE', 'badrequest');
}
const response = await getOrDeleteExpired(!!deleteWithParams, dispatch, type, typeof msFromNow === 'number' ? msFromNow : 0, params, meta, serviceId, endpointId);
if (deleteWithParams) {
return response;
}
else {
return await deleteItems(dispatch, response, type, params, meta, serviceId);
}
}
//# sourceMappingURL=expire.js.map