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

@maxnate/plugin-payments

v0.4.0

Published

Payments plugin for @system-core — admin UI + backend module wiring an @maxnate/payments-core registry into a host application. Consumed by ecommerce, booking, nonprofit, finance, and any other vertical that needs payment processing.

Readme

@maxnate/plugin-payments

Admin capability + plugin install for @maxnate/payments-core. Owns the paymentModule extension that other plugins (plugin-ecommerce, plugin-booking, plugin-nonprofit, plugin-finance, plugin-travel, …) consume via ctx.get('paymentModule').

npm install @maxnate/plugin-payments @maxnate/payments-core

What it provides

| Surface | Value | |---|---| | Extension key | paymentModule | | Admin pages | /admin/payments, /admin/payments/:provider | | Admin API | Provider catalog, gateway self-test, manual instruction sets, proof upload/review, webhook URL discovery | | Install order | 100 (registers before industry plugins) | | Webhook integration | Use paymentModule.processWebhook(...) from a host route |

Install

import { paymentsPlugin } from '@maxnate/plugin-payments'
import { SnippeProvider, snippeSchema } from '@maxnate/provider-snippe'

system.use(paymentsPlugin({
  providers: [{ id: 'snippe', adapter: new SnippeProvider(), schema: snippeSchema }],
  secretsCodec: mySecretsCodec
}))

Industry plugins do not need any code changes — they continue to call ctx.get('paymentModule') exactly as before.

UI And Admin Boundary

plugin-payments is the admin/backend orchestration layer. It is not the customer-facing checkout UI itself.

Shared Terminology

  • Customer UI: the payment or checkout experience in your own app.
  • Admin UI: the tenant/operator-facing payments configuration and review screens.
  • Provider-hosted checkout: a payment page hosted by the payment provider.
  • Provider dashboard: the provider's own dashboard for account-level setup.

What This Plugin Is For

  • tenant payment-provider configuration
  • admin-side credential management
  • webhook URL discovery
  • gateway self-test
  • manual/offline payment review workflows
  • provider selection and routing helpers
  • exposing a stable paymentModule to other system plugins

What You Can Build With It

  • an admin payments screen for each tenant under /admin/payments
  • provider setup forms driven by provider capabilities/schema
  • a manual-payment review queue for receipts, IDs, screenshots, and approval actions
  • a gateway operations dashboard showing webhook URLs, enabled providers, and routing policy
  • customer-facing checkout flows in your own app by calling ctx.get('paymentModule')

What It Does Not Do For You

  • it does not render your storefront, booking, donation, or invoice checkout pages
  • it does not replace provider-hosted checkout UIs like Snippe Sessions
  • it does not create provider dashboards or bypass provider account setup
  • it does not own payout/disbursement flows; those remain out of scope for this package

Customer UI vs Admin UI

  • Admin UI: use plugin-payments to configure providers, manage credentials, review manual payments, and inspect webhook/setup information.
  • Customer UI: build this in your project or industry plugin (plugin-ecommerce, plugin-booking, plugin-nonprofit, etc.) using the paymentModule methods.
  • Provider-hosted UI: when a provider supports hosted checkout (for example Snippe Sessions), your project can launch that flow, but the actual hosted payment page still belongs to the provider.

Recommended Pattern

  • use plugin-payments for tenant configuration and payment operations
  • use your project UI for business-specific checkout UX
  • use provider-hosted checkout only when you intentionally want the provider to own the payment page

Manual Payments Support

plugin-payments now exposes backend helpers for Phase C manual/offline flows:

  • provider discovery: getAvailableProviders()
  • side-effect-free connection validation: selfTestGateway()
  • tenant instruction set CRUD: listInstructionSets(), upsertInstructionSet(), deleteInstructionSet()
  • proof workflow: uploadPaymentProof(), getPaymentProofUrl(), reviewManualPayment(), listPendingManualReviews()
  • admin setup: listWebhookUrls(), regenerateWebhookSecret()
  • routing helpers: selectProvider(), createManualIntent(), getRoutingPolicy(), setRoutingPolicy()
  • reconciliation/reporting: fetchProviderLedger(), reconcileProviderLedger(), getDashboardMetrics()

Notes

  • Use paymentModule.selfTestGateway(...) for side-effect-free provider validation.

Peer dependencies

| Peer | Required | Notes | |---|---|---| | @maxnate/payments-core | yes (^0.3.0) | Registry, types, webhook orchestration | | @system-core/core | optional (^0.12.0) | Required when used as a system-core plugin |

See also

  • @maxnate/payments-core — registry + provider interface
  • @maxnate/provider-snippe, @maxnate/provider-clickpesa, @maxnate/provider-selcom — built-in providers
  • packages/payments/payments-core/docs/ARCHITECTURE.md — full architecture diagram