/** * 派发器的消费者表 —— 三级消费的两个下游(ADR-008 #2;语义出处 OS 6.3)。 * * 「任务监听(推进旧单)与触发器(起单规则,开新单)**相互独立判定** * —— 同一事件可既推进旧单又起新单。」 */ import type { Delivery } from '@modules/event'; import type { TaskId } from '@contracts'; import type { Consumer } from './dispatcher.ts'; /** ① 任务监听:投递到任务,环续跑 */ const taskConsumer: Consumer = async (delivery, container) => { const envelope = await container.event.getEvent(delivery.eventId); if (envelope === undefined) return; const taskId = delivery.target.id as TaskId; const kind = envelope.type === 'control' ? 'control' : envelope.type === 'time' ? 'time' : envelope.type === 'human' ? 'human' : 'data'; await container.task.deliver(taskId, { kind, ref: envelope.correlation.cause.ref, payload: envelope.payload.data, }); }; /** ② 触发器:开新单;同一事件对同一触发器至多起一单 */ const triggerConsumer: Consumer = async (delivery, container) => { const envelope = await container.event.getEvent(delivery.eventId); if (envelope === undefined) return; await container.trigger.fireByEvent(String(delivery.target.id), envelope.id, { type: envelope.type, keys: envelope.correlation.keys, payload: envelope.payload.data, source: envelope.source.kind, occurredAt: envelope.occurredAt, }); }; export function createConsumers(): ReadonlyMap { return new Map([ ['task', taskConsumer], ['trigger', triggerConsumer], ]); }