Billing workerin self-test näyttää, että moduuli on ajettava itsenäisenä prosessina ilman ulkoista maksupalvelua:
$ bus-integration-billing --self-test
bus-integration-billing self-test OK
Event-sopimus on provider-neutralin billing-kerroksen ydin:
bus.billing.status.request -> bus.billing.status.response
bus.billing.checkout_session.request -> bus.billing.checkout_session.response
bus.billing.portal_session.request -> bus.billing.portal_session.response
bus.billing.entitlement.check.request -> bus.billing.entitlement.check.response
bus.billing.usage.export.request -> bus.billing.usage.export.response
Status-vastaus voi palauttaa suoraan loppukäyttäjän komennolle tarvittavan ohjeen. Kun billing puuttuu, response sisältää billing_required-tilan ja komennon bus billing setup. Kun planin quota ylittyy, entitlement-vastaus palauttaa quota_exceeded-syyn, käyttöikkunan tiedot ja mahdollisen upgrade-planin.
{
"allowed": false,
"reason": "quota_exceeded",
"command": "bus billing setup",
"recommended_plan": "llm_plus"
}
Quota-konfiguraatio on oma provider-neutral JSON-tiedosto. Sama plan voi sisältää useita yhtäaikaisia ikkunoita, esimerkiksi minuutti- ja kuukausirajan samalle llm:proxy-featurelle:
{
"plans": {
"llm_basic": [
{"feature": "llm:proxy", "meter_event_name": "bus_llm_tokens", "window": "minute", "limit": 1200, "upgrade_plan_id": "llm_plus"},
{"feature": "llm:proxy", "meter_event_name": "bus_llm_tokens", "window": "month", "limit": 1000000, "upgrade_plan_id": "llm_plus"}
]
}
}
Subscription-päivitys on myös provider-neutral. Stripe tai muu maksupalvelu julkaisee lopulta bus.billing.subscription.update -eventin, jossa on event_id, account_id, providerin nimi, providerin asiakas- ja subscription-tunnisteet, subscriptionin tila ja enabled feature -scopet. active avaa listatut featuret. past_due, canceled, incomplete ja tuntemattomat tilat sulkevat paid-feature-pääsyn.
Usage export yhdistää billingin ja quota-laskennan. LLM usage voi tulla usage_recorded-tapahtumana, jossa määrä saadaan joko suoraan quantity-kentästä tai OpenAI-tyylisen datan token-kentistä. Onnistunut export kasvattaa kaikki planiin sopivat quota bucketit. Sama idempotency key ei lähetä providerille uutta meter-eventtiä eikä kasvata bucketia uudelleen.
Provider-backend valitaan asetuksella BUS_BILLING_PROVIDER_BACKEND=local|events. events-tilassa checkout, portal ja meter export kääntyvät provider-kohtaisiksi tapahtumiksi, kuten bus.stripe.checkout_session.create.request ja bus.stripe.meter_event.record.request. Näin entitlement-politiikka pysyy Busin omassa billing-workerissä, vaikka maksupalvelun protokolla vaihtuisi myöhemmin.
Workerin nykyinen sopimus on kuvattu bus-integration-billing-dokumentaatiossa. Loppukäyttäjän HTTP- ja CLI-pinta on erikseen Billing API -providerin ja bus-billing-komennon dokumentaatiossa.