TypeScript SDK

The SDK wraps the Rust/WASM core with TypeScript types and ergonomic APIs.

Installation

terminal
npm install atrion

The package includes pre-built WASM binaries. No Rust toolchain required.

Basic Usage

server.ts
import { Atrion } from 'atrion'
// Initialize the engine
const 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

middleware.ts
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

plugin.ts
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 })
}
})
})