@x12i/api-live-view
v1.0.2
Published
Embeddable in-memory status + live inbound/outbound request view for HTTP services (no DB).
Maintainers
Readme
@x12i/api-live-view
Embeddable status + live request view for any HTTP service.
- In-memory traffic rings only (no database)
- Tabs: Status · API docs · Incoming · Worker (outbound)
- Adapters: Fastify and Node
http
Install
npm install @x12i/api-live-viewPeer (Fastify adapter only): fastify@^5.
Fastify
import Fastify from "fastify";
import { attachFastifyLiveView } from "@x12i/api-live-view/fastify";
const app = Fastify();
const live = await attachFastifyLiveView(app, {
service: {
id: "my-api",
title: "My API",
port: 8080,
env: "PORT",
origin: "http://127.0.0.1:8080/",
docsUrl: "http://127.0.0.1:8080/openapi.json",
description: "Example service",
},
});
// Outbound / worker calls
const fetchLive = live.createInstrumentedFetch({ caller: "worker" });
await fetchLive("https://example.test/x");
await app.listen({ port: 8080, host: "127.0.0.1" });
// Open http://127.0.0.1:8080/_livePrefer zone defaults from @x12i/ports-manager when binding in an x12i/exellix repo.
Node http
import http from "node:http";
import { createNodeHttpLiveView } from "@x12i/api-live-view/node-http";
const port = 8080;
const live = createNodeHttpLiveView({
service: { id: "fixture", title: "Fixture", port },
});
http
.createServer(async (req, res) => {
if (await live.tryHandle(req, res)) return;
const url = new URL(req.url ?? "/", `http://127.0.0.1:${port}`);
live.withInboundTiming(req, res, url.pathname, req.method ?? "GET", () => {
res.writeHead(200, { "content-type": "application/json" });
res.end(JSON.stringify({ ok: true }));
});
})
.listen(port);Endpoints (default basePath: /_live)
| Path | Purpose |
|------|---------|
| GET /_live | HTML live view |
| GET /_live/api/info | Service metadata |
| GET /_live/api/status | Liveness snapshot + ring sizes |
| GET /_live/api/traffic?lane=inbound\|worker | Recent entries |
| GET /_status/traffic | Legacy alias (optional) |
Health probes and /_live/* are excluded from the inbound ring.
Memorix wiring
memorix-service→http://127.0.0.1:5100/_liveops-source→http://127.0.0.1:5102/_live- Stack hub aggregates peers on 5103
License
exellix-license
