UNPKG

@bitloops/bl-boilerplate-core

Version:

TypeScript boilerplate code for Bitloops Language generated projects

51 lines (50 loc) 2.17 kB
import { UUIDv4 } from '../domain/UUIDv4.js'; import { asyncLocalStorage } from '../helpers/asyncLocalStorage.js'; const CONTEXT = 'context'; export class OrchestratorHandler { get orchestratorNameId() { return this.constructor.name; } isTriggerMessage(message) { return message.metadata.name === this.triggerMessage.name; } async trigger(message) { const orchestratorName = this.constructor.name; const orchestratorInstanceId = new UUIDv4().toString() + '-' + orchestratorName; const store = asyncLocalStorage.getStore(); if (!store) { throw new Error('No store found, did you forget to attach correlation middleware?'); } const ctx = store.get(CONTEXT); const alreadyCreatedOrchestratorInstanceIds = ctx.orchestratorInstanceIds ? JSON.parse(ctx.orchestratorInstanceIds) : {}; const ctxWithOrchestratorInstanceId = { ...ctx, orchestratorInstanceIds: JSON.stringify({ ...alreadyCreatedOrchestratorInstanceIds, [orchestratorName]: orchestratorInstanceId, }), }; store.set(CONTEXT, ctxWithOrchestratorInstanceId); if (!message.metadata.context.orchestratorInstanceIds) { message.metadata.context.orchestratorInstanceIds = JSON.stringify({}); } const orchestratorInstanceIds = JSON.parse(message.metadata.context.orchestratorInstanceIds); orchestratorInstanceIds[orchestratorName] = orchestratorInstanceId; message.metadata.context.orchestratorInstanceIds = JSON.stringify(orchestratorInstanceIds); } getOrchestratorNameId() { return { orchestratorNameId: this.orchestratorNameId, }; } isGeneratedByOrchestrator(message) { const orchestratorInstanceIdStr = message.metadata.context.orchestratorInstanceIds; if (!orchestratorInstanceIdStr) { return true; } const orchestratorInstanceIds = JSON.parse(orchestratorInstanceIdStr); return orchestratorInstanceIds?.[this.constructor.name] !== undefined; } }