UNPKG

@eang/core

Version:

eang - model driven enterprise event processing

89 lines 3.14 kB
import { Cnx, EangEventType } from './entity.js'; import { createObj } from './objects.js'; export function parseMsg(msg) { // const headers = msg.headers const subject = msg.subject; // TODO: handle content-type... default is JSON and does not require header // const hdrs = headers() // hdrs.append('Content-Type', opts.contentType || 'application/json') const { obj, cnx, context } = JSON.parse(Buffer.from(msg.data).toString()); if (!obj && !cnx) { throw new Error('Invalid message format: missing obj or cnx'); } if (obj && cnx) { throw new Error('Invalid message format: both obj and cnx are present'); } const subjectData = parseSubjectData(subject); // Validate eventType const validEventTypes = Object.values(EangEventType); if (!validEventTypes.includes(subjectData.eventType)) { throw new Error(`Invalid eventType: ${subjectData.eventType}`); } const entity = obj ? createObj(obj) : new Cnx(cnx); const eventType = subjectData.eventType; const { tenant, organizationalUnit, user } = subjectData; return { msg, subjectData, entity, eventType, context, tenant, organizationalUnit, user }; } export function parseSubjectData(subject) { const parts = subject.split('.'); if (parts[1] === 'obj') { // Validate minimum parts for obj type (need at least 9 parts: eang.obj.tenant.ou.user.type.instance.key.event) if (parts.length < 9) { throw new Error(`Invalid obj subject format: ${subject}. Expected at least 9 parts, got ${parts.length}`); } return { entityType: parts[1], // obj tenant: parts[2], organizationalUnit: parts[3], user: parts[4], typeOf: parts[5], instanceOf: parts[6], key: parts[7], eventType: parts[8] }; } //if (parts[1] === 'cnx') { else { // Validate minimum parts for cnx type (need at least 15 parts) if (parts.length < 15) { throw new Error(`Invalid cnx subject format: ${subject}. Expected at least 15 parts, got ${parts.length}`); } return { entityType: 'cnx', tenant: parts[2], organizationalUnit: parts[3], user: parts[4], typeOf: parts[5], instanceOf: parts[6], key: parts[7], eventType: parts[8], fromObjTypeOf: parts[9], fromObjInstanceOf: parts[10], fromObjKey: parts[11], toObjTypeOf: parts[12], toObjInstanceOf: parts[13], toObjKey: parts[14] }; } } // export function getEangMsgFromEvents( // events: EntityEvent[], // tenant: string, // organizationalUnit: string, // user: string, // options?: Partial<JetStreamPublishOptions> // ) { // const messages = events.map((event) => { // return getEangMsgFromEvent(event, tenant, organizationalUnit, user, options) // }) // return messages // } //# sourceMappingURL=functions.js.map