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

invoice-collector-plugin-sdk

v0.2.0

Published

Plugin interface/contract package for Invoice Collector — types, session contracts, declarative UI descriptor types, the microsoft-entra-delegated-device-code built-in session implementation, and the generate-sbom build helper

Readme

invoice-collector-plugin-sdk

The plugin interface for Invoice Collector — build a source (a cloud service, a mailbox) or destination (a shared drive, a storage backend) plugin against this package, and it runs identically to any built-in or commercial one. The core app has no integrations of its own; every source and destination is a plugin.

npm install --save-dev invoice-collector-plugin-sdk

What's in this package

  • SourcePlugin / DestinationPlugin — the contract every integration implements: a manifest, declared sessionRequirements, a declarative wizard (config UI, described via WizardStepDescriptor — there's no UI component kit to build against), and discover()/fetchContent() (source) or upload() (destination).
  • Session / SessionPlugin / SessionsApi — the shared "established connection" concept. Use one of the SDK's own built-ins (currently microsoft-entra-delegated-device-code) via confirmsBuiltIn: true, or bring your own custom session type via sessionPlugin.
  • PluginContext — what a plugin actually gets at runtime: sessions, per-plugin storage, an install-scoped appStorage, a redaction-aware http client (HttpApi), log, progress, and pdf (PdfApi.extractText() — PDF-to-text extraction, backed by core's own real implementation, never something your own plugin needs to bundle: see below).
  • PdfApi — ctx.pdf.extractText(bytes) for PDF text extraction. Deliberately provided by core, not left for a plugin to bundle itself — a real PDF parser ships a native, platform-specific binding, and core is already built once per real target platform; a plugin's own standalone downloadable artifact is built once, not per platform, and would break on any other platform if it bundled that binding directly (confirmed live — this is exactly why the capability lives here now).
  • Declarative UI descriptors (FieldDescriptor, ListDescriptor, TextSelectDescriptor, ...) — a plugin's config wizard and settings panel are described as data, rendered by core's own React components. No custom rendering code, ever.
  • validateManifest / validateSessionRequirements / validateWizardDataSources — the same validation core's own install pipeline runs; use these in your own tests before shipping.
  • generateSbom (and the bundled generate-sbom CLI) — produces your plugin's own CycloneDX SBOM and checks every dependency against an MIT-compatible license allowlist. Core requires a plugin to declare one, and this is the tool that builds it.
  • microsoftEntraDelegatedDeviceCodeSessionPlugin — the one built-in SessionPlugin this SDK ships a real implementation for, importable directly if your plugin uses it.

Compatibility

Each package declares a pluginApiVersion semver range in its manifest — core supports the current major and the one before it. See PluginManifest and the main repo's docs/architecture-design.md §5 for the full contract.

Trust tiers

A plugin whose manifest declares a public repository installs as open source (verified via a required GitHub Artifact Attestation on the release artifact); anything else installs as unverified, with an explicit user confirmation. See docs/architecture-design.md §9 in the main repo for the full model.

Building a plugin

The reference implementation — ic-email-to-downloads in the main repo — is a complete, real example: a Graph Mail source plus a local-folder destination, built against this exact SDK.

License

MIT