Installation
npm install atrionThe package includes pre-built WASM binaries. No Rust toolchain required.
Basic Usage
import { Atrion } from 'atrion'
// Initialize the engineconst atrion = new Atrion()await atrion.connect()
// In your request handler:app.post('/api/checkout', async (req, res) => { // Collect telemetry from your monitoring const telemetry = { latencyMs: getP99Latency(), errorRate: getErrorRate(), saturation: getCPUSaturation(), }
// Make routing decision const decision = atrion.route('api/checkout', telemetry)
if (!decision.allow) { return res.status(503).json({ error: decision.reason, retryAfter: decision.retryAfterMs }) }
// Process the request normally await processCheckout(req, res)})Response Object
The route() method
returns a decision object:
| Property | Type | Description |
|---|---|---|
| allow | boolean | Whether the request should proceed |
| resistance | number | Current resistance in Ohms (Ω) |
| mode | string | BOOTSTRAP | OPERATIONAL | CIRCUIT_BREAKER |
| reason | string? | If rejected, explains why |
| retryAfterMs | number? | Suggested retry delay in milliseconds |
Framework Integration
Express.js Middleware
import { Atrion } from 'atrion'
const atrion = new Atrion()
export const atrionMiddleware = async (req, res, next) => { const decision = atrion.route(req.path, { latencyMs: res.locals.latency, errorRate: res.locals.errorRate, saturation: res.locals.saturation, })
if (!decision.allow) { res.set('Retry-After', Math.ceil(decision.retryAfterMs / 1000)) return res.status(503).json({ error: decision.reason }) }
next()}Fastify Plugin
import fp from 'fastify-plugin'import { Atrion } from 'atrion'
export const atrionPlugin = fp(async (fastify) => { const atrion = new Atrion() await atrion.connect()
fastify.decorate('atrion', atrion)
fastify.addHook('preHandler', async (request, reply) => { const decision = atrion.route(request.url, request.telemetry) if (!decision.allow) { reply.code(503).send({ error: decision.reason }) } })})