UNPKG

integreat

Version:
59 lines 2.57 kB
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