JSPM

  • Created
  • Published
  • Downloads 725
  • Score
    100M100P100Q115262F
  • License MIT

Provider-agnostic payment infrastructure for NestJS with support for Stripe, Paddle, LemonSqueezy, and Mollie.

Package Exports

  • @breadstone/archipel-platform-payments
  • @breadstone/archipel-platform-payments/health
  • @breadstone/archipel-platform-payments/health/index
  • @breadstone/archipel-platform-payments/lemonsqueezy
  • @breadstone/archipel-platform-payments/lemonsqueezy/index
  • @breadstone/archipel-platform-payments/mollie
  • @breadstone/archipel-platform-payments/mollie/index
  • @breadstone/archipel-platform-payments/package.json
  • @breadstone/archipel-platform-payments/paddle
  • @breadstone/archipel-platform-payments/paddle/index
  • @breadstone/archipel-platform-payments/stripe
  • @breadstone/archipel-platform-payments/stripe/index

Readme

@breadstone/archipel-platform-payments

Provider-agnostic payment infrastructure for NestJS with support for Stripe, Paddle, LemonSqueezy, and Mollie.

Features

  • Provider-agnostic — Switch between Stripe, Paddle, LemonSqueezy, or Mollie without changing business logic
  • Subpath imports — Each provider lives in its own subpath — install only the SDK you need
  • Normalized types — All providers return the same INormalizedPrice, INormalizedSubscription, etc.
  • Feature gatingFeatureGuard + @RequiresFeature() for quota-based access control
  • Usage trackingFeatureUsageInterceptor records feature consumption automatically
  • Strict error propagation — Methods like fetchPrices propagate errors to the caller instead of silently returning empty results
  • Health checksPaymentHealthIndicator for readiness probes (separate /health subpath)

⚠️ Environment Variables

Choose one provider and configure its required variables.

Stripe

Variable Required Default Description
STRIPE_API_KEY yes - Stripe secret API key
STRIPE_WEBHOOK_SECRET yes - Stripe webhook signing secret

Paddle

Variable Required Default Description
PADDLE_API_KEY yes - Paddle API key
PADDLE_WEBHOOK_SECRET yes - Paddle webhook secret key
PADDLE_ENVIRONMENT no production Paddle environment (production or sandbox)

LemonSqueezy

Variable Required Default Description
LEMONSQUEEZY_API_KEY yes - LemonSqueezy API key
LEMONSQUEEZY_WEBHOOK_SECRET yes - LemonSqueezy webhook signing secret
LEMONSQUEEZY_STORE_ID yes - LemonSqueezy store ID

Mollie

Variable Required Default Description
MOLLIE_API_KEY yes - Mollie API key
MOLLIE_WEBHOOK_SECRET yes - Mollie webhook secret for verification

Quick Start

import { PaymentModule } from '@breadstone/archipel-platform-payments';
import { StripeClient, STRIPE_CONFIG_ENTRIES } from '@breadstone/archipel-platform-payments/stripe';

@Module({
  imports: [
    PaymentModule.register({
      paymentClient: StripeClient,
      configEntries: STRIPE_CONFIG_ENTRIES,
    }),
  ],
})
export class AppModule {}

Supported Providers

Subpath Class SDK
@breadstone/archipel-platform-payments/stripe StripeClient stripe
@breadstone/archipel-platform-payments/paddle PaddleClient @paddle/paddle-node-sdk
@breadstone/archipel-platform-payments/lemonsqueezy LemonSqueezyClient @lemonsqueezy/lemonsqueezy.js
@breadstone/archipel-platform-payments/mollie MollieClient @mollie/api-client

Import Options

// Main import (module, ports, guards, models)
import { PaymentModule, PaymentClientPort, FeatureAccessPort } from '@breadstone/archipel-platform-payments';

// Provider-specific (tree-shakable sub-exports)
import { StripeClient, STRIPE_CONFIG_ENTRIES } from '@breadstone/archipel-platform-payments/stripe';
import { PaddleClient, PADDLE_CONFIG_ENTRIES } from '@breadstone/archipel-platform-payments/paddle';
import { LemonSqueezyClient, LEMONSQUEEZY_CONFIG_ENTRIES } from '@breadstone/archipel-platform-payments/lemonsqueezy';
import { MollieClient, MOLLIE_CONFIG_ENTRIES } from '@breadstone/archipel-platform-payments/mollie';

// Health indicator (optional)
import { PaymentHealthIndicator } from '@breadstone/archipel-platform-payments/health';

Ports

Port Required Description
PaymentClientPort Yes Payment provider client contract
FeatureAccessPort No Feature gating / quota access (app-provided)

Error Handling

Error Class Code When Thrown
PaymentError PAYMENT Provider SDK failure during any payment operation

Peer Dependencies

Package Required Notes
@breadstone/archipel-platform-configuration Yes Typed config key support
@nestjs/common Yes NestJS core
stripe No Required for Stripe provider
@paddle/paddle-node-sdk No Required for Paddle provider
@lemonsqueezy/lemonsqueezy.js No Required for LemonSqueezy
@mollie/api-client No Required for Mollie provider
@breadstone/archipel-platform-health No Required for health indicator
@nestjs/terminus No Required for health indicator

Documentation

📖 Package Docs: .docs/packages/platform-payments/index.md

Development

# Build
yarn nx build platform-payments

# Test
yarn nx test platform-payments

# Lint
yarn nx lint platform-payments