# @x12i/api-live-view

> Embeddable in-memory status + live inbound/outbound request view for HTTP services (no DB).

Latest version **1.4.0** (published 2026-09-23) · exellix-license license · 0 weekly downloads

## Install

```sh
npm install @x12i/api-live-view
pnpm add @x12i/api-live-view
yarn add @x12i/api-live-view
bun add @x12i/api-live-view
```

## Health

**Score 70/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; recently updated; high maintenance score; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 1.4.0 |
| Published | 2026-09-23 |
| First published | 2026-07-23 |
| Weekly downloads | 0 |
| License | exellix-license |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=18.0.0 |
| Dependencies | 0 |
| Unpacked size | 190.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | x12i |
| Keywords | x12i, api, live-view, status, traffic, observability |

## Links

- npm: https://www.npmjs.com/package/@x12i/api-live-view
- Repository: https://github.com/x12i/memorix-mono-repo
- Homepage: https://github.com/x12i/memorix-mono-repo#readme
- Issues: https://github.com/x12i/memorix-mono-repo/issues
- npm.io page: https://npm.io/package/@x12i/api-live-view

## Recent versions

- 1.4.0 (latest) — 2026-09-23
- 1.1.0 — 2026-09-14
- 1.0.2 — 2026-07-23
- 1.0.1 — 2026-07-23
- 1.0.0 — 2026-07-23

## README

# `@x12i/api-live-view`

Embeddable **status + live request view** for any HTTP service.

- In-memory traffic rings only (no database)
- Tabs: Status (hourly push/pull data volume + process health graphs) · API docs · Counters (who / frequency / APIs) · Incoming · Worker (outbound)
- Adapters: Fastify and Node `http`

## Install

```bash
npm install @x12i/api-live-view
```

Peer (Fastify adapter only): `fastify@^5`.

## Fastify

```ts
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/_live
```

Prefer zone defaults from [`@x12i/ports-manager`](../ports-manager/) when binding in an x12i/exellix repo.

## Node http

```js
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 + current volume + process CPU/memory |
| `GET /_live/api/volume-series` | Hourly pushed/pulled byte totals (UTC, in-memory) |
| `GET /_live/api/health-series` | Process health samples (CPU %, RSS, heap, host RAM, event-loop) |
| `GET /_live/api/traffic?lane=inbound\|worker` | Recent entries |
| `GET /_status/traffic` | Legacy alias (optional) |

**Volume semantics:** *pushed* = request body bytes into the service; *pulled* =
response body bytes out. Prefer `Content-Length` when present, else estimate from
the body. Health probes and `/_live/*` are excluded from the inbound ring and
volume totals.

## Memorix wiring

- `memorix-service` → `http://127.0.0.1:5100/_live`
- `opx-source` → `http://127.0.0.1:5102/_live`
- Stack hub aggregates peers on **5103**

## License

`exellix-license`

---
_Source: https://npm.io/package/@x12i/api-live-view · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
