@absolutejs/billing

中文文档
0.19.0发布于 2026/11/05BSL-1.1TypeScriptES Module近 30 天下载 2904

由托管的绝对JS.ai平台使用的供应商中立定价和发票计算. 将计量吸入器的使用转换成精确的整数-微小细列项目,有等级和备抵.

中文使用文档
文档目录10 节
  1. 定价形状
  2. 为什么纯洁?
  3. 许可证
  4. 预付服务费
  5. 安全信用检查
  6. 递延进度
  7. 未封装嵌入式计划和应用预算
  8. 供应商的录取
  9. 用法归属
  10. 支付执行政策

@absolutejs/billing

由托管的绝对JS.ai平台使用的供应商中立定价和发票计算.

@absolutejs/billing 是介于 @absolutejs/metering (收集使用事件)和 开出后端(Stripe,QuickBooks,一个内部计费引擎).

它做两件事:

  1. createPlan(...) - 宣布定价产品:可选平面 基准费、每单元价格、可选毕业等级、, 免费补贴.
  2. computeInvoice({ plan, period, tenant, usage }) - 纯度 函数转换为 Usage 切入到一个 Invoice 与 和总计.

所有的钱都用整数计算 微数 (1个微观=1/1 000 000) - 同一面额 内部)。 漂浮在结构上是不可能的: 0.0002美元 每个要求价格为 200 并且四舍五入政策是明确的.

import { createPlan, computeInvoice, formatMicros } from "@absolutejs/billing";

const plan = createPlan({
  name: "pro",
  currency: "usd",
  basePriceMicros: 20_000_000, // $20/mo
  pricedDimensions: {
    requests: { perUnitMicros: 200, freeTier: 1_000_000 },
    cpuMs: { perUnitMicros: 50, unit: 1000, freeTier: 60_000 * 60 * 10 },
    bytesEgress: {
      perUnitMicros: 100,
      unit: 1024 * 1024,
      freeTier: 100 * 1024 * 1024,
    },
    hibernationGbSeconds: { perUnitMicros: 5 },
  },
});

const invoice = computeInvoice({
  plan,
  tenant: "acme",
  period: { start, end },
  usage, // a Usage from @absolutejs/metering
});

console.log(formatMicros(invoice.totalMicros, invoice.currency));
// "27.50 USD"

定价形状

A 类 PricedDimension 3个之一:

  • 每单位平地 —— 说 { perUnitMicros: 200, unit: 1 }
  • 等级(毕业) —— 说 { tiers: [{ upTo: 1_000_000, perUnitMicros: 200 }, { upTo: Infinity, perUnitMicros: 100 }] }
  • 自定义 —— 说 { price: (chargedQuantity) => micros } (逃出舱口用于激增/封顶/非模拟定价)

可选的把手 :

  • freeTier —在定价前减去的单位
  • unit ——分卫如此 bytesEgress 价格为 MB QQ unit: 1024*1024
  • label ——发票行项目显示名称

计划级节点 :

  • basePriceMicros ——每期统一收费
  • minimumChargeMicros — 下限; 调整行项目填充 任何间隙
  • rounding —— 说 'truncate' (违约;分计-美元)或 'round-half-up'
  • currency — 显示标签;未转换
  • metadata ——流入发票的任意密钥

为什么纯洁?

控制飞机需要:

  • 预览 期末前即将开具的发票
  • 重新定价 过去的一段时期,根据新的计划( " 这将是什么?" 客户已经按拟议的企业等级付款?")
  • 干线运行 在发布前计划更改

一个纯粹的成本模型功能使得所有三个小——没有花纹SDK, 没有副作用,没有IO。 条纹推 (或快书导出,或 寄出- PDF 生成器) 生活在此套件外, in @absolutejs/billing-adapters/*。 。 。 .

许可证

BSL-1.1 与主机 SaaS 计费平台进行命名例外 (Metronome, Orb, Lago,花纹比林,m3ter,Chargebee). 见 LICENSE。更改日期 : 2030-05-31 (英语) • Apache 2.0.

预付服务费

持久平衡、保留、工作上限和移徙规则 可通过 prepaid, (中文(简体) ), prepaid-postgres,以及 credit-work 潜行道.

安全信用检查

仅限采购的交割 提供过期的、单用浏览器能力,而无需完整的登录会话.

@absolutejs/billing/reports 提供客户身份、收据标记和使用合同. parseUsageRange 使用最多90天的半开放世界协调世界时的日期间隔(默认:包括今天在内的最近30天). 收到光标是位置,从不授权:将每个查询,倒转连接,光标绑入呼叫者的账户. 读者必须通过公共帮助者投影,后者省去提供者费用,支付代币和金库参考. 使用日及特征总额必须准确调节;购买的美元和消费的服务信贷是不同的衡量标准。 自动再填充目前不支持 .

递延进度

checkpointDeferred(accountId, workId, binding, expectedRevision, value) 保存 在不解决或保留更多信贷的情况下取得进展。 初步修订为:0; 成功返回递增的修订版并保存字符串 。 它能验证束缚 效果和授权、拒绝过时的修订和终端工作以及限制 值为一百万个字符。 现有工作使用相同的JSON状态 列; 不需要图示迁移.

检查站不是执行租约。 单项索赔执行 任何供应商呼叫前,在飞行中标记, 排出计量之前,保存其 如果结果不确定,保留保留.

未封装嵌入式计划和应用预算

过 monthlyTokenLimit: null 内 EmbeddingUsageSnapshot 当配置时 供应商计划没有每月嵌入式顶盖. monthlyBudgetTokens 能够 单独描述一个东道主拥有的支出保管人;从未报告为 供应商配额。 这两个值都是主机配置,而不是活的提供者平衡. exhausted: true 目前拒绝嵌入的报告而不假定每月 上限导致拒绝。 会员津贴仍然是东道方申请的政策.

供应商的录取

@absolutejs/billing/provider-budget 出口 createProviderBudget(client, table?) 使用现有的 CreditSqlClient 交易接口。 主机拥有一个日记 PostgreSQL 表格 id text primary key, (中文(简体) ), scope text, (中文(简体) ), period text, (中文(简体) ), reserved_micros bigint, (中文(简体) ), actual_micros bigint nullable,以及 status text (加上范围/期间指数)。 预留可防御最大值 在此之前 外部请求; 不将估计数视为硬度最大。 重复保留ID 永远不会授权另一个请求。 每月申请和每日费用范围可以独立保留;如果以后招生失败,则解除任何较早的范围.

解决已知的 满足或拒绝 电话准确一次。 中断/未知的提供者结果保留其全部保留,直到明确和解为止。 这个分类账范围承认了研究业务,独立于成员信用定价;它没有发现或记录外部的供应商呼叫。 主机必须说明保留地中的所有复写/修复,否则将无法使用.

用法归属

LedgerEntry.attribution 接受便携式 UsageAttribution 记录(呼叫追踪、运行、主题、会话、资助的工作、发布、服务器和工具)。 它不改变承诺和摊位,不影响定价。 主办方必须保留它与事件,并在授权后约束主体. 观察性身份不得改变提供者事件的充电/能力身份。 未知的外部主机开支不是零 .

支付执行政策

@absolutejs/billing/paid-work-policy 出口 createPaidWorkPolicy, (中文(简体) ), PaidAuthorization,以及 PaidWorkApprovalError 用于节点/Bun服务器。 创建一个 每个应用 currentWork 财务报告和审定财务报表 withWork 适应其供资 执行上下文。 内容包含 userSub选项 actorId 财务报告和审定财务报表 approvalId变异 closed 旗帜。 只有信任的录入代码可以创建 或附加此上下文.

将认证的处理器包入 withPaidRequester(userSub, request.method, handler, impersonatorId?)阅读(包括总部和备选方案)不能授权 花费,甚至通过嵌入式写框。 与 POST 开始有偿工作 反应可能流出。 GET 端点只应读取先前生成的数据 . 运输合同和支出合同必须商定:伊甸园的路线类型 单独无法验证处理器的副作用 .

要求a PaidAuthorization 每个付费运输边界的参数。 获取 它使用 authorizePaidWork() 在认可的执行范围中,和呼叫 requirePaidAuthorization(authorization) 在启动提供者之前 尝试。 托肯不透明,在运行时检查,具体针对政策实例 以及执行范围,并在供资/延期范围结束后被拒绝. bindPaidExecution 保留了反应延展者生存时间超过 处理者。 不要串行令牌, 接受客户端的令牌, 或把它们缓存到另一端 请求。 仅凭付款人身份证明无法伪造能力: authorizePaidWork 需要一个 核证或供资范围。 下级 requirePaidWorkOwner 保留a 信任的服务器支付器因归属而倒置; 该倒置不授权 a 供应商能力.

冒名顶替的要求需要资金支持的工作环境,其行为者与 冒名顶替,并持有批准证. withoutAutomaticSpend 块 未经批准的背景电话. withDeferredPaidRequester 专用于 在解剖学上已经提出持久批准要求的工人 允许在召回完成时使用.

这项政策检查执行身份和意图。 主机仍然认证 课程、验证批准所有权/终止、储备和界限提供者 在调用之前的费用、仪表实际使用量、结算或保留不确定 保留。 授权令牌不是信用余额或耐用 执行租赁。 TypeScript 防止意外丢失能力; 运行时间 检查对于不可信的输入和变化状态仍然是必要的.

版本与发布记录

@absolutejs/billing 共发布 29 个版本,首次发布于 2026/06/01;过去 12 个月发布了 29 个版本。

版本发布日期距今
0.19.0latest2026/11/052 天前
0.18.22026/11/025 天前
0.18.12026/11/025 天前
0.18.02026/10/2117 天前
0.17.22026/10/011 个月前
0.17.12026/10/011 个月前

关于 @absolutejs/billing 的常见问题

@absolutejs/billing 是什么?

由托管的绝对JS.ai平台使用的供应商中立定价和发票计算. 将计量吸入器的使用转换成精确的整数-微小细列项目,有等级和备抵.

如何安装 @absolutejs/billing?

在项目目录运行 npm install @absolutejs/billing,或使用 pnpm add / yarn add / bun add。

@absolutejs/billing 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@absolutejs/billing 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@absolutejs/billing 可以商用吗?

@absolutejs/billing 使用 BSL-1.1 许可。声明的许可为 BSL-1.1,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@absolutejs/billing 的下载量有多少?

根据 npm 官方下载统计,@absolutejs/billing 在 2026/10/05 – 2026/11/03 这 30 天内被下载 2,904 次,日均约 97 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@absolutejs/billing 还在维护吗?

最新版本 0.19.0 发布于 2026/11/05(2 天前);至今共发布 29 个版本,其中过去 12 个月发布了 29 个;首次发布于 2026/06/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。