voxsheild
v1.0.0
Published
Client for the VoxVerify voice-authenticity API: batch analysis, the risk gate, and live calls.
Readme
voxsheild
Client for the VoxVerify voice-authenticity API — batch file analysis, the pre-action risk gate, and live-call scoring over a WebSocket.
The classes keep the service's name, because that is what they are a client of: the API
paths, the environment variables and the OpenAPI document all say VoxVerify. voxsheild
is what you install and import.
npm install voxsheildNode 22.6 or newer. No build step — the package ships as the TypeScript it was generated as, and the modules import each other with .ts on the specifier so Node's type-stripping runs them directly.
Analyse a recording
import { VoxVerify } from "voxsheild";
const vx = new VoxVerify({ baseUrl: "", apiKey: KEY }); // "" = same origin
const verdict = await vx.analyze(file);Three verdicts, never two: LIKELY_HUMAN, LIKELY_AI, INCONCLUSIVE. The service
abstains rather than guessing when the fused score does not clear a validation-selected
threshold, or when the fusion weight behind it is split. Treat the estimate as evidence,
not proof — the absence of a synthesis cue is not evidence of human origin.
Score a live call
import { LiveCall } from "voxsheild/stream";
const call = new LiveCall({ apiKey: KEY, sampleRate: 16000, codec: "opus" });
call.onRisk = (e) => console.warn(e.state, e.confidence, e.reason);
await call.open();
call.send(pcmFrame); // Int16Array, LE
const summary = await call.stop();call.droppedFrames counts what the client refused to queue when the socket's send buffer was already backed up. A tab that buffers thirty seconds of audio is not monitoring a call, it is recording one late.
Frames are capped at 1,048,576 bytes, and both clients split at the cap rather than let an oversized frame close the socket and cost the call every window it had accumulated. The caps are generated from the document, so a deployment that tunes them does not need this package patched.
Auth
Keys are per-tenant and scoped, and the tenant comes off the key — no request body may
name one. 10 of the 18 documented operations require a scope; the batch
forensic routes are open by design. A 403 carrying scope means the key is real but
provisioned for a different surface, which is a different fix from a bad key.
Version
1.0.0, which is the API document's version rather than a number this package
maintains separately. The request methods are generated from that document; the
live-call client is hand-written, because OpenAPI 3.1 has no vocabulary for a socket.
Prototype for research and evaluation. Do not present any output of the service as proof of origin, and do not use it as the sole basis for an accusation.
