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

@contractsentry/core

v0.6.0

Published

Core library for ContractSentry analyzers, validator, reporters, and orchestrator.

Readme

@contractsentry/core

Core library for ContractSentry analyzers, validator, reporters, and orchestrator.

This package is consumed by @contractsentry/cli. Use it directly only if you are building a custom integration or extending ContractSentry's behaviour.

Installation

npm install @contractsentry/core

Programmatic usage

import { ScanOrchestrator, ConsoleReporter } from "@contractsentry/core";

const orchestrator = new ScanOrchestrator();
const reporter = new ConsoleReporter();

const violations = await orchestrator.scan({
  specPath: "openapi.yaml",
  filePaths: ["src/routes/users.ts"],
  useAi: false,
});

reporter.report(violations);

if (violations.some((v) => !v.suppressed && v.severity === "error")) {
  process.exit(1);
}

With AI-powered drift detection:

const violations = await orchestrator.scan({
  specPath: "openapi.yaml",
  filePaths: ["src/routes/users.ts"],
  useAi: true, // requires ANTHROPIC_API_KEY and contractsentry-ai installed
});

Exports

Classes

| Class | Description | |-------|-------------| | ScanOrchestrator | Loads the spec, analyses files, validates shapes and request params, and returns violations | | ConsoleReporter | Prints violations to stdout; shows explanation on a second line for AI-sourced violations | | JsonReporter | Writes { violations: [...] } JSON to stdout use with --format json or piping | | FileCodeAnalyzer | Analyses a TypeScript or Python source file and extracts function shapes | | ContractValidator | Validates a function's return shape or request params against an OpenAPI schema object | | OpenApiSpecLoader | Loads and dereferences an OpenAPI 3.x spec (YAML or JSON) | | SchemaExtractor | Extracts per-endpoint 2xx response schemas and request body schemas from a parsed spec | | CsentryConfigLoader | Loads and evaluates csentry.config.ts from a directory |

Error classes

| Class | Thrown when | |-------|-------------| | SpecLoadError | The spec file cannot be loaded or is not a valid OpenAPI 3.x document | | AnalysisError | A source file cannot be read | | SubprocessError | The Python AI subprocess exits with a non-zero code or returns invalid JSON |

Types

| Type | Description | |------|-------------| | Violation | A single contract violation -> file, line, endpoint, field, expected, found, severity ("error" or "warn"), suppressed, and optional explanation (set by AI violations) | | FunctionShape | The extracted return shape, parameter shape, dynamic flag, endpoint guess, status hint, and suppression state for a function | | CsentryConfig | Shape of csentry.config.ts -> spec, files, ignore, strict, audit | | ScanInput | Input to ScanOrchestrator.scan() -> specPath, filePaths, useAi |

Interfaces

| Interface | Description | |-----------|-------------| | IReporter | report(violations: Violation[]): void -> implement to build a custom reporter | | IConfigLoader | load(dir: string): Promise<CsentryConfig \| null> -> implement to load config from a custom source |

More

Full documentation and source at github.com/imjayanti/contractsentry.

License

MIT