🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@payweave/fastify

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@payweave/fastify

Fastify plugin for PayWeave - accept per-request USD micropayments on any Fastify route.

latest
npmnpm
Version
0.0.17
Version published
Maintainers
1
Created
Source

@payweave/fastify

Fastify plugin for PayWeave - accept per-request USD micropayments on any Fastify route.

Install

npm install @payweave/fastify

Quick Start

import { Payweave } from '@payweave/fastify';
import Fastify from 'fastify';

const app = Fastify();
const payweave = new Payweave(
  process.env.PAYWEAVE_APP_ID!,
  process.env.PAYWEAVE_APP_SECRET!
);

app.get(
  '/api/weather',
  { preHandler: payweave.charge({ price: '0.001', description: 'Weather API' }) },
  (req, reply) => {
    reply.send({ temp: 72, unit: 'F' });
  }
);

app.listen({ port: 3000 });

API

new Payweave(appId, appSecret, baseUrl?)

ParameterTypeDescription
appIdstringYour app key ID
appSecretstringYour app secret
baseUrlstring?API base URL (defaults to https://api.payweave.app)

payweave.charge(options)

Returns a Fastify preHandler hook (req: FastifyRequest, reply: FastifyReply) => Promise<void>.

OptionTypeDescription
pricestring | (req: FastifyRequest) => string | Promise<string>USD price per request
descriptionstring?Human-readable description
metaRecord<string, string>?API metadata for agent discovery

Note: Use payweave.charge() as a preHandler in Fastify's route options.

Examples

Static pricing

app.get(
  '/api/search',
  { preHandler: payweave.charge({ price: '0.01' }) },
  (req, reply) => {
    reply.send({ results: [] });
  }
);

Dynamic pricing

app.post(
  '/api/generate',
  {
    preHandler: payweave.charge({
      price: (req) => {
        const body = req.body as { premium?: boolean };
        return body.premium ? '0.05' : '0.01';
      },
      description: 'Text generation',
    }),
  },
  (req, reply) => {
    reply.send({ text: 'generated content' });
  }
);

Multiple preHandlers

app.post(
  '/api/data',
  {
    preHandler: [
      authenticate,
      payweave.charge({ price: '0.01' }),
    ],
  },
  (req, reply) => {
    reply.send({ data: 'paid content' });
  }
);

With metadata for agent discovery

app.post(
  '/api/sentiment',
  {
    preHandler: payweave.charge({
      price: '0.005',
      description: 'Sentiment analysis',
      meta: {
        'method': 'POST',
        'input.content-type': 'application/json',
        'input.schema': '{"type":"object","properties":{"text":{"type":"string"}}}',
        'output.schema': '{"type":"object","properties":{"score":{"type":"number"}}}',
      },
    }),
  },
  (req, reply) => {
    reply.send({ score: 0.85 });
  }
);

Multiple routes

app.get('/api/weather', { preHandler: payweave.charge({ price: '0.001' }) }, weatherHandler);
app.get('/api/forecast', { preHandler: payweave.charge({ price: '0.005' }) }, forecastHandler);
app.post('/api/analyze', { preHandler: payweave.charge({ price: '0.01' }) }, analyzeHandler);

How It Works

  • A request hits your route without a payment header
  • The preHandler responds with 402 Payment Required and pricing info
  • The agent submits payment on Tempo and retries with Authorization: Payment <credential>
  • PayWeave verifies the payment and sets a Payment-Receipt header
  • Your handler executes normally

License

MIT

FAQs

Package last updated on 03 Jul 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts