Scattered scripts, forged into one engine.
A modular API-testing framework for Postman & Newman. One engine lives inside Postman; a CLI of CI gates lives outside. You declare what a response should be — it handles the rest.
// Declare what you expect const override = { expectedStatus: 200, maxResponseTime: 1500, assertShape: { "data.id": "number", "data.email": "string", "error": "absent", }, assertions: { "data.status": { eq: "active" }, "data.score": { gte: 0 }, }, snapshot: { mode: "structural" }, }; eval(cv.get("hephaestus.v3.post"));
The engine ships as collection data and runs where your requests run. The CLI never touches it — it reads what Newman wrote and turns each metric into a gate.
ES modules bundled into two files, embedded in the collection and eval'd in the sandbox — engine-as-data, no plugin install.
overrideru / en outputZero-dependency Node tooling that reads the run report and exits non-zero on the exact thing that regressed — so the build fails for a reason.
summary · compare · coverage · flakyEach capability is opt-in and off by default — existing collections upgrade untouched.
Value checks that combine per field — eq, gt, gte, matches, type, includes, absent, with soft and when.
Baselines keyed by request. strict, non-strict or structural — the last compares shape only, so volatile ids and timestamps never register as drift.
Full JSON Schema via a bundled tv4, plus one-line assertShape path→type checks and per-element assertEach rules.
Passive response checks: cookie flags, alg:none / expired JWTs, missing no-store, insecure CORS. Each emits its own failing test.
GraphQL answers 200 even with errors[] — graphql checks the real contract. retryOnStatus honours the server's Retry-After, capped.
Every test name, log line and error routes through a locale catalog. ru and en ship; both are byte-locked by a golden harness.
Every response runs the same chain through a shared ctx. This is the real order taken from the engine source.
retryOnStatus is the one that branches: when it decides to retry it calls setNextRequest and everything after it is skipped for that pass — so a retry never runs half a set of assertions.
One binary, no dependencies, exit codes that fail the build on the specific thing that regressed.
Import the collection to run inside Postman, or install the CLI for Newman and CI. Use one or both.
The shipped collection embeds the engine at build time. A fresh import runs offline — no fetch step, no plugin.
Quickstart guideOne binary, zero dependencies, provenance-signed on npm. Every command is a CI gate.
Every feature is opt-in, the ru output is byte-stable, and the package ships with a signed provenance attestation.