@absolutejs/billing
由托管的绝对JS.ai平台使用的供应商中立定价和发票计算.
@absolutejs/billing 是介于
@absolutejs/metering (收集使用事件)和
开出后端(Stripe,QuickBooks,一个内部计费引擎).
它做两件事:
createPlan(...)- 宣布定价产品:可选平面 基准费、每单元价格、可选毕业等级、, 免费补贴.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 QQunit: 1024*1024label——发票行项目显示名称
计划级节点 :
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 防止意外丢失能力; 运行时间 检查对于不可信的输入和变化状态仍然是必要的.