integreat
Version:
Node.js integration layer
42 lines • 1.78 kB
JavaScript
import debugLib from 'debug';
import { createErrorResponse } from '../utils/response.js';
import setHandler from './set.js';
import { generateMetaId } from './getMeta.js';
const debug = debugLib('great');
export default async function setMeta(action, resources) {
const { payload: { type, meta = {}, metaKey, targetService: serviceId, endpoint: endpointId, }, } = action;
const metaId = generateMetaId(serviceId, type, metaKey);
const { getService } = resources;
const service = getService(undefined, serviceId);
if (!service) {
debug(`SET_META: Service '${serviceId}' doesn't exist`);
return createErrorResponse(`Service '${serviceId}' doesn't exist`, 'handler:SET_META');
}
const metaType = service.meta;
const metaService = getService(metaType);
if (!metaService) {
debug(`SET_META: Service '${service.id}' doesn't support metadata (setting was '${service.meta}')`);
return createErrorResponse(`Service '${service.id}' doesn't support metadata (setting was '${service.meta}')`, 'handler:SET_META', 'noaction');
}
const endpointDebug = endpointId
? `endpoint '${endpointId}'`
: `endpoint matching ${metaType} and ${metaId}`;
debug("SET_META: Send metadata %o for service '%s' on service '%s' %s", meta, service.id, metaService.id, endpointDebug);
const setAction = {
...action,
type: 'SET',
payload: {
id: metaId,
type: metaType,
data: {
id: metaId,
$type: metaType,
...meta,
},
keys: Object.keys(meta),
endpoint: endpointId,
},
};
return await setHandler(setAction, resources);
}
//# sourceMappingURL=setMeta.js.map