Operatorin billing-komento ei ole loppukäyttäjän setup-virta. Se käyttää internal-audience Bearer-tokenia ja lukee tai kirjoittaa provider-neutralin catalogin Billing API:n sisäiseen pintaan:
$ bus operator billing catalog template
{
"products": [
{
"id": "llm",
"name": "LLM API",
"description": "OpenAI-compatible model API access"
}
],
"meters": [
{
"id": "llm_tokens",
"event_name": "llm.tokens",
"unit": "token"
}
],
"plans": [
{
"id": "llm_basic",
"product_id": "llm",
"features": [
"llm:proxy"
]
}
],
"provider_mappings": []
}
Sama operator-pinta voi julkaista catalogin palvelulle ja lukea sen takaisin catalog put --file- ja catalog get -komennoilla. Molemmat käyttävät internal-audience tokenia ja samaa /api/internal/billing/catalog -pintaa.
Stripe-komennot ovat erillisessä operator-perheessä, jotta provider-neutral billing ei ala puhua Stripe-objekteja käyttäjälle. bus operator stripe test tarkistaa test-mode-tunnukset harmless balance read -kutsulla ja tulostaa vain turvallista metadataa, kuten livemode-arvon. bus operator stripe catalog sync lukee Stripe-kohtaisen catalog JSONin ja luo Products- sekä Prices-objektit idempotency key -avaimilla, jotka perustuvat lookup key -arvoihin.
Runtime-puolella bus-integration-stripe kuuntelee provider-tapahtumia:
bus.stripe.checkout_session.create.request -> bus.stripe.checkout_session.create.response
bus.stripe.portal_session.create.request -> bus.stripe.portal_session.create.response
bus.stripe.webhook.verify.request -> bus.stripe.webhook.verify.response
bus.stripe.meter_event.record.request -> bus.stripe.meter_event.record.response
Self-test vahvistaa, että webhook-polku voidaan ajaa deterministisesti ilman Stripe-verkkokutsua:
$ bus-integration-stripe --self-test
bus-integration-stripe self-test OK
Tuotannossa webhook-varmistus käyttää raw request bodyä, Stripe-Signature-headeria ja webhook secret -arvoa. Kun tuettu webhook, kuten checkout.session.completed tai customer.subscription.updated, sisältää Bus-metadatan, Stripe-integraatio julkaisee provider-neutralin bus.billing.subscription.update -eventin. Billing-worker päättää sen perusteella, onko llm:proxy tai muu paid feature käytössä.
Meter-event-polku käyttää samaa rajaa. Billing-worker pyytää Stripe-integraatiolta bus.stripe.meter_event.record.request -eventillä mittarin, määrän ja idempotency keyn. Stripe-integraatio käyttää samaa avainta providerin requestissa, jotta retry ei tee kahta laskutettavaa meter-eventtiä.
Operator-komennot on kuvattu bus-operator-billing- ja bus-operator-stripe-dokumentaatiossa. Stripe-workerin event-sopimus löytyy bus-integration-stripe-dokumentaatiosta, ja provider-neutral billing-päätökset ovat bus-integration-billingin vastuulla.