Forward Chaining Engine
Prioritní vyhodnocování pravidel s automatickým přepočtem při změnách faktů, událostí a vypršení timerů. Selhání jednotlivého pravidla neovlivní zbytek systému.
Rule Engine s Complex Event Processing
Forward chaining engine s detekcí temporálních vzorů, třemi DSL flavory, integrovaným fact storem a produkčním REST/GraphQL API. Postavený na noex GenServer aktorech pro odolné zpracování pravidel.
Vše potřebné pro produkční zpracování pravidel a korelaci událostí
Prioritní vyhodnocování pravidel s automatickým přepočtem při změnách faktů, událostí a vypršení timerů. Selhání jednotlivého pravidla neovlivní zbytek systému.
Vestavěné temporální vzory: detekce sekvencí, monitorování absencí, prahové hodnoty počtu a numerické agregace — vše s konfigurovatelnými časovými okny a seskupováním.
Pište pravidla po svém: fluent builder API s plným TypeScript autocomplete, tagged template literals pro kompaktní zápis, nebo YAML soubory pro konfigurační workflow.
In-memory key-value úložiště se segmentovaným wildcard pattern matchingem. Verzování a notifikace o změnách pohání automatické přehodnocování pravidel.
Deklarativní timery s čitelným formátem doby trvání. Jednorázové i opakované plány, volitelná perzistence a automatická emise událostí při vypršení.
Produkčně připravený Fastify server se Swagger dokumentací, SSE streamováním, webhooky a React administračním rozhraním. Spravujte pravidla, fakta a události přes HTTP.
Tři DSL flavory pro stejné pravidlo — vyberte si ten, který vyhovuje vašemu workflow
import { Rule, onEvent, event, emit, setFact, ref }
from '@hamicek/noex-rules/dsl';
const rule = Rule.create('order-notification')
.description('Notify on high-value orders')
.priority(10)
.when(onEvent('order.created'))
.if(event('amount').gte(100))
.then(
emit('notification.send', {
orderId: ref('event.orderId'),
message: 'High-value order received',
})
)
.also(
setFact('order:${event.orderId}:notified', true)
)
.build();Detekujte vzory v proudech událostí s časovými okny a seskupováním
Detekce uspořádaných událostí v časovém okně s volitelným striktním módem a groupBy.
sequence()
.event('order.created')
.event('payment.received')
.within('15m')
.groupBy('orderId')Spuštění, když očekávaná událost nenastane v rámci časového okna.
absence()
.after('order.created')
.expected('payment.received')
.within('15m')
.groupBy('orderId')Detekce překročení frekvenčního prahu v posuvném nebo překlápějícím se okně.
count()
.event('auth.login_failed')
.threshold(5)
.window('5m')
.groupBy('userId')Sledování numerických agregací (sum, avg, min, max) nad poli událostí v časových oknech.
aggregate()
.event('order.paid')
.field('amount')
.function('sum')
.threshold(10000)
.window('1h')Od detekce podvodů po IoT — noex-rules pohání event-driven byznys logiku
Detekujte podezřelé přihlašovací vzory, neobvyklé částky transakcí a geografické anomálie v reálném čase.
Rule.create('brute-force-detection')
.when(count()
.event('auth.login_failed')
.threshold(5)
.window('5m')
.groupBy('userId'))
.then(emit('security.alert', {
type: 'brute-force',
userId: ref('trigger.groupKey'),
}))
.build();Spravujte platební toky s timeouty, logikou opakování a automatickou eskalací při selhání.
Rule.create('payment-timeout')
.when(absence()
.after('order.created')
.expected('payment.received')
.within('15m')
.groupBy('orderId'))
.then(emit('order.cancel', {
orderId: ref('trigger.groupKey'),
reason: 'Payment timeout',
}))
.build();Počítejte body, sledujte upgrady úrovní a spouštějte odměny na základě vzorů zákaznické aktivity.
Rule.create('gold-tier-upgrade')
.when(aggregate()
.event('order.paid')
.field('amount')
.function('sum')
.threshold(10000)
.window('30d')
.groupBy('customerId'))
.then(setFact(
'customer:${trigger.groupKey}:tier', 'gold'
))
.build();Monitorujte proudy dat ze senzorů, detekujte překročení prahových hodnot a korelujte události napříč zařízeními.
Rule.create('device-overheat')
.when(sequence()
.event('sensor.temp_high')
.event('sensor.temp_critical')
.within('10m')
.groupBy('deviceId'))
.then(emit('alert.overheat', {
deviceId: ref('trigger.groupKey'),
severity: 'critical',
}))
.build();noex-rules vs populární JavaScriptové rule enginy
| Feature | noex-rules | json-rules-engine | nools | node-rules | rools | zen-engine |
|---|---|---|---|---|---|---|
| Forward chaining | Ano | Ano | Ano (Rete) | Ano | Ano | Decision tables |
| CEP / Temporální vzory | Sekvence, absence, počet, agregace | — | — | — | — | — |
| DSL | Fluent + templates | Pouze JSON | Vlastní DSL | Pouze JSON | Plain objects | DMN / FEEL |
| YAML definice pravidel | ✓ | — | — | — | — | — |
| Fact Store s pattern matchingem | Vestavěné wildcards | Almanac | Working memory | — | — | — |
| Správa timerů | Vestavěné DSL | — | — | — | — | — |
| Korelace událostí | Korelační + kauzační ID | — | — | — | — | — |
| Wildcard subskripce událostí | Topic patterny | — | — | — | — | — |
| REST API | Vestavěné (Fastify) | — | — | — | — | — |
| SSE + Webhooky | ✓ | — | — | — | — | — |
| String interpolace | ${expression} | — | JS v DSL | — | — | FEEL výrazy |
| Volání externích služeb | call_service akce | Custom operators | Custom functions | Custom handlers | — | Custom nodes |
| OTP supervision | noex GenServer | — | — | — | — | — |
| Prioritní vyhodnocování | Ano | Ano | Salience | Ano | Ano | Row order |
| OpenAPI / Swagger | ✓ | — | — | — | — | — |
| Stav | Aktivní | Aktivní | Archivovaný | Nízká aktivita | Aktivní | Aktivní |
Jediný JS rule engine s vestavěným CEP: detekce sekvencí, monitorování absencí, počítání frekvencí a agregační prahy s časovými okny.
Fluent builder s TypeScript autocomplete, tagged template literals pro rychlé prototypování a YAML pro konfigurační workflow.
Wildcard pattern dotazy s automatickým přehodnocováním pravidel při změnách faktů. Žádná separátní správa stavu.
Deklarativní timery s čitelným formátem doby trvání, intervaly opakování a automatickou emisí událostí při vypršení.
Fastify HTTP vrstva s SSE streamováním, HMAC-podepsanými webhooky a Swagger dokumentací přímo z balíčku.
Postavený na noex GenServer aktorech. Pokud engine spadne, supervisor ho restartuje, zatímco zbytek aplikace pokračuje.
Přidejte noex-rules do svého projektu během vteřin
$ npm install @hamicek/noex-rules Líbí se vám noex? Pomozte nám pokračovat ve vývoji