fix: prioritize exact outcome matches over any in block matching

This commit is contained in:
hexastack 2025-04-24 08:32:39 +01:00
parent 5b2bfd0f46
commit 0034b8e5bd

View File

@ -357,15 +357,27 @@ export class BlockService extends BaseService<
this.filterBlocksByChannel(blocks, event.getHandler().getName()), this.filterBlocksByChannel(blocks, event.getHandler().getName()),
event.getSender(), event.getSender(),
); );
return filteredBlocks.find((b) => {
return b.patterns return (
.filter( filteredBlocks.find((b) =>
(p) => typeof p === 'object' && 'type' in p && p.type === 'outcome', b.patterns.some(
) (p) =>
.some((p: PayloadPattern) => typeof p === 'object' &&
['any', envelope.message.outcome].includes(p.value), 'type' in p &&
); p.type === 'outcome' &&
}); p.value === envelope.message.outcome,
),
) ||
filteredBlocks.find((b) =>
b.patterns.some(
(p) =>
typeof p === 'object' &&
'type' in p &&
p.type === 'outcome' &&
p.value === 'any',
),
)
);
} }
/** /**