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

@open-pay/sdk

v0.8.0

Published

billing-saas Gateway 模式接入 SDK — a2a ClientPlugin + ServerPlugin + REST API client

Readme

@open-pay/sdk

billing-saas Gateway 模式 (a2a-only) 接入加速器。提供 @multi-agent/a2aClientPlugin / ServerPlugin + dashboard REST 查询 typed client。

历史: 0.7.0 起重写为 a2a plugin 集合。0.6.0 及之前的 createAgentMeter / createBillingClient (老 events 上报模型) 已废弃, 请直接迁到下面 3 个新 API。

三个 API

| API | 给谁用 | 是 a2a plugin 吗 | |---|---|---| | createBillingClientPlugin | caller (a2a 调用方) | ✓ ClientPlugin | | createBillingServerPlugin | agent 开发者 | ✓ ServerPlugin | | createBillingApiClient | 业务后端 (查 transactions / balance) | ✗ 普通 REST client |

安装

bun add @open-pay/sdk @multi-agent/a2a
# 或: npm i @open-pay/sdk @multi-agent/a2a

@multi-agent/a2a >= 0.3.10peer dep —— 用 client/server plugin 时必装; 只用 createBillingApiClient 时可不装。


Caller 侧 —— 一行接入

每个 agent 在 dashboard 注册后获得一个独立的 Marketplace URL (a2a://gateway.openbilling.dev/agents/<slug>), caller 复制粘贴到 .env 即可调用:

import { createAgentClient } from '@multi-agent/a2a'
import { createBillingClientPlugin } from '@open-pay/sdk'

// 从 dashboard → My Agents → 复制 marketplace URL
const client = createAgentClient({
  agentId: 'image-agent',  // 仅用于 ctx / log, 路由不靠它
  address: 'a2a://gateway.openbilling.dev/agents/haiveo-image-agent',
}).use(createBillingClientPlugin({
  apiKey: process.env.OB_API_KEY!,   // ob_live_xxx, 在 billing-saas dashboard 创建
}))

const stream = await client.call('generate', { prompt: 'a corgi' })
for await (const msg of stream) {
  if (msg.type === 'done') console.log(msg.data)
}

plugin 做的事 (15 行 beforeCall hook):

  • 注入 Authorization: Bearer ob_live_xxx (caller 鉴权)
  • 注入 x-target-agent: <agentId> (老 header 路由 fallback)

Gateway 路由机制 (Marketplace URL 优先):

  • caller address 中的 /agents/<slug> 被 a2a 协议层自动转成 x-agent-namespace metadata
  • Gateway 优先用 namespace 查 marketplace slug 路由到 agent 真实地址
  • agent 真实物理地址对 caller 完全透明 (类似 OpenRouter)

详细使用见 docs/marketplace-url-quickstart.md


Agent 侧 —— 一行 token-gate

import { createAgentServer, createAgentConfig } from '@multi-agent/a2a'
import { createBillingServerPlugin } from '@open-pay/sdk'

const server = createAgentServer(createAgentConfig({
  agentId: 'image-agent',
  name: 'Image Agent',
  version: '1.0.0',
  description: '...',
  address: 'a2a://0.0.0.0:50118',
  skills: [/* ... */],
  defaultSkill: 'generate',
})).use(createBillingServerPlugin({
  accessToken: process.env.IMAGE_AGENT_ACCESS_TOKEN,
}))

await server.start()

plugin 做的事 (beforeMessage hook):

  • 拦 call 消息, 验 Authorization: Bearer <accessToken>
  • 不匹配 → stream.send(error) + return 'exit' 短路
  • accessToken 留空 → 跳过验证 (本地开发方便, 生产必填)

错误码 (0.7.1+):

  • MISSING_AGENT_ACCESS_TOKEN: 请求没带 Authorization header (Gateway 配置问题)
  • AGENT_ACCESS_TOKEN_MISMATCH: 请求带了 Bearer, 但跟本机不一致 (两端 token 没对齐, 最常见)

access token 来源: 在 billing-saas dashboard /agents 注册 agent 时平台自动生成 + 一次性显示明文; 复制到本机 .env 的 IMAGE_AGENT_ACCESS_TOKEN。后续可在 dashboard Eye reveal 或 Rotate 换新。


业务后端侧 —— 查 transactions / balance

import { createBillingApiClient } from '@open-pay/sdk'

const api = createBillingApiClient({
  baseUrl: 'https://billingapi.haivex.ai',
  apiKey: process.env.OB_API_KEY!,
})

// 本月聚合 (caller 视角 + agent 视角)
const summary = await api.transactions.summary()

// 流水分页
const txs = await api.transactions.list({ view: 'caller', limit: 50 })

// 余额
const balance = await api.balance.get()

对应 billing-saas dashboard REST endpoint:

  • /tenants/me/transactions / /transactions/summary
  • /tenants/me/balance
  • /tenants/me/agents (CRUD)

非 a2a plugin, 是普通 fetch wrapper。


设计原则

  • a2a-only: caller → agent 调用必须经 @multi-agent/a2a, 没有 REST gateway 入口
  • plugin 风格 > wrapper 风格: 不抢 a2a API, 用 .use(plugin) 增强
  • 零额外协议: 老 events POST / /usage / /accounts 协议已下线
  • 可组合: 跟其他 a2a plugin (tracing / call-recorder) 链式 .use() 共存

类型导出

import type {
  // 三个 API 的 Options
  BillingClientPluginOptions,
  BillingServerPluginOptions,
  BillingApiClientOptions,
  BillingApiClient,

  // REST 数据结构
  BillingAgent,
  BillingAgentCreate,
  BillingTransaction,
  BalanceInfo,
  TopupResponse,
  TransactionListFilter,
  TransactionListPage,
  TransactionSummary,

  // 共享
  AuthConfig,
  TransportConfig,
  BillingError,
} from '@open-pay/sdk'

版本

  • 0.7.1: 细化 BillingServerPlugin 错误码 (MISSING_AGENT_ACCESS_TOKEN / AGENT_ACCESS_TOKEN_MISMATCH), error text 改成直白告知"两端 token 没对齐"
  • 0.7.0: 重写为 a2a plugin 集合
  • 0.6.0 及之前: 老 events 上报模型 (createAgentMeter / createBillingClient), 已废弃

License: MIT