npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@stubrix/api

v2.6.2

Published

Stubrix Control Plane — NestJS backend

Downloads

224

Readme

@stubrix/api

NestJS 11 control plane for the Stubrix mock server platform.

Overview

Provides the REST API and WebSocket server that powers the Stubrix dashboard. Manages projects, mock mappings, traffic recording, real-time logs, engine control, and database snapshot operations.

Tech Stack

| Layer | Technology | | -------------- | -------------------------------------------------------- | | Framework | NestJS 11 + Express | | WebSockets | Socket.IO (/ws/logs) | | Validation | class-validator + class-transformer | | Persistence | JSON files (mocks/projects), filesystem (snapshots) | | Database ops | pg_dump/psql (PostgreSQL), driver pattern (MySQL/SQLite) | | Service config | SQLite (data/stubrix-config.db) via better-sqlite3 |

Module Structure

src/
├── projects/         Project CRUD
├── mocks/            Mock CRUD — WireMock mappings/*.json
├── recording/        Start/stop/snapshot (4 modes) + pattern filters
├── logs/             REST + WebSocket — Socket.IO namespace /ws/logs
├── status/           Engine health + mock counts
├── engine/           WireMock reset + engine info
├── databases/        Engines, databases, snapshots, project DB configs
├── import/           HAR, Postman, OpenAPI universal importer
├── governance/       Spectral OpenAPI linting
├── coverage/         Mock hit/miss analysis
├── intelligence/     AI/RAG (ChromaDB + OpenAI/Ollama)
├── stateful-mocks/   Stateful scenario machine (Handlebars)
├── scenarios/        Time machine: capture & restore state
├── contracts/        Pact Broker contract testing
├── chaos/            Fault injection (latency, errors, corruption)
├── chaos-network/    Toxiproxy network-level chaos
├── webhooks/         Webhook receiver, replay, simulator
├── events/           Kafka (Redpanda) + RabbitMQ publishing
├── protocols/        GraphQL SDL parse + gRPC via GripMock
├── auth/             API keys, RBAC, multi-tenancy, audit
├── templates/        Environment templates + variable substitution
├── metrics/          Prometheus exposition endpoint
├── performance/      k6 scripts + baseline regression gate
├── tracing/          Jaeger/OpenTelemetry distributed tracing
├── cloud/            LocalStack AWS mocking (S3, SQS, SNS, DynamoDB, Lambda)
├── storage/          MinIO object storage
├── iam/              Keycloak + Zitadel IAM integration
└── settings/
    ├── database/     SQLite config DB (better-sqlite3)
    ├── registry/     24-service registry + category definitions
    ├── lifecycle/    Enable/disable via Docker Compose + health monitoring
    ├── config/       Per-service CRUD config + AES-256-GCM encryption
    ├── backup/       Config backup + restore
    └── import-export/ JSON/YAML selective import/export

API Reference

Projects

| Method | Endpoint | Description | | ------ | ------------------- | ----------------- | | GET | /api/projects | List all projects | | GET | /api/projects/:id | Get project by ID | | POST | /api/projects | Create project | | PUT | /api/projects/:id | Update project | | DELETE | /api/projects/:id | Delete project |

Mocks

| Method | Endpoint | Description | | ------ | --------------------------------- | ---------------------- | | GET | /api/projects/:id/mocks | List mocks for project | | GET | /api/projects/:id/mocks/:mockId | Get mock detail | | POST | /api/projects/:id/mocks | Create mock mapping | | PUT | /api/projects/:id/mocks/:mockId | Update mock mapping | | DELETE | /api/projects/:id/mocks/:mockId | Delete mock mapping |

Recording

| Method | Endpoint | Description | | ------ | -------------------------------------- | ------------------- | | GET | /api/projects/:id/recording/status | Recording status | | POST | /api/projects/:id/recording/start | Start recording | | POST | /api/projects/:id/recording/stop | Stop and save mocks | | POST | /api/projects/:id/recording/snapshot | Take snapshot |

Settings & Services

| Method | Endpoint | Description | | ------ | ------------------------------------ | --------------------------------------- | | GET | /api/settings/services | List all services with status + health | | GET | /api/settings/services/:id | Get service details | | POST | /api/settings/services/:id/enable | Enable service (starts container) | | POST | /api/settings/services/:id/disable | Disable service (stops container) | | PATCH | /api/settings/services/:id | Update service config (autoStart, etc.) | | GET | /api/settings/services/:id/config | Get service configuration | | PUT | /api/settings/services/:id/config | Save service configuration | | GET | /api/settings/backups | List config backups | | POST | /api/settings/backups | Create config backup | | POST | /api/settings/backups/:id/restore | Restore config backup | | DELETE | /api/settings/backups/:id | Delete backup | | GET | /api/settings/export | Export all config (JSON/YAML) | | POST | /api/settings/import | Import config from file |

Status & Engine

| Method | Endpoint | Description | | ------ | ------------------- | -------------------------------------- | | GET | /api/status | Engine status + mock counts by project | | GET | /api/engine | Engine name, port, health | | POST | /api/engine/reset | Reset WireMock state |

Logs

| Method | Endpoint | Description | | ------ | ----------- | -------------------------------- | | GET | /api/logs | Recent request logs | | WS | /ws/logs | Real-time log stream (Socket.IO) |

Databases

| Method | Endpoint | Description | | ------ | ----------------------------------------------- | ------------------------- | | GET | /api/db/engines | List available DB engines | | GET | /api/db/databases | List databases for engine | | GET | /api/db/databases/:name | Database info | | GET | /api/db/snapshots | List snapshots | | POST | /api/db/snapshots | Create snapshot | | POST | /api/db/snapshots/:name/restore | Restore snapshot | | DELETE | /api/db/snapshots/:name | Delete snapshot | | GET | /api/projects/:id/databases/configs | Project DB configs | | PUT | /api/projects/:id/databases/configs | Upsert project DB config | | DELETE | /api/projects/:id/databases/configs/:configId | Delete DB config |

Environment Variables

CONTROL_PORT=9090          # API + UI port (env var read by main.ts)
MOCK_ENGINE=wiremock       # wiremock | mockoon
MOCK_PORT=8081
WIREMOCK_URL=http://localhost:8081
CORS_ORIGIN=*

# PostgreSQL
PG_HOST=localhost
PG_PORT=5442
PG_USER=postgres
PG_PASSWORD=postgres
PG_DATABASE=postgres

# MySQL
MYSQL_HOST=localhost
MYSQL_PORT=3307
MYSQL_USER=stubrix
MYSQL_PASSWORD=stubrix
MYSQL_DATABASE=stubrix

# SQLite
SQLITE_DB_PATH=

# Snapshots
DUMPS_DIR=./dumps

See root .env.example for the full reference (LocalStack, MinIO, Kafka, Keycloak, etc.).

Development

# From monorepo root
npm run dev:api        # Watch mode on :9090
npm run build:api      # Production build (nest build)

# Docker (production)
make stubrix-build     # Build Dockerfile.api image
make stubrix-up        # Run containerized API + UI
make stubrix-logs      # Tail logs
make stack-up          # Full stack: API + WireMock + PostgreSQL

# From packages/api
npm run start:dev      # Watch mode
npm run test           # Unit tests
npm run test:cov       # Coverage report

Build Output

Production build goes to dist/. The UI build (npm run build:ui) copies the Vite output to packages/api/public/ for single-container serving.

Interactive Docs

Swagger UI available at http://localhost:9090/api/docs when running in development mode.