A CLI deduz o host da chave. A partir da
0.2.0 ela resolve o host pelo prefixo da chave (sk_test_ →
sandbox, sk_live_ → produção), então INFI_API_URL só serve pra apontar pra
outro lugar de propósito. Antes da 0.2.0 ele era obrigatório em sandbox.Arquivo
defineBilling / infi.billing.ts ainda funcionam como aliases.
O arquivo é carregado como ESM. A CLI importa o
.ts direto. Se o package.json do projeto não tem
"type": "module", o load falha com “Cannot use import statement outside a
module”.Intents
Atalhos que geram um company file sensato. Vivem na CLI e no arquivo — o endpoint público de provisionamento não aceitaintent:
Comandos
Grants do plano
Cada produto pode declarargrants[]:
on: "cycle"— credita no abrir/renovar o período (assinatura/prepaid)on: "payment"— credita empayment.confirmed(packs one-time)
meter do grant é real: cada meter tem a sua carteira. Um grant em
tokens credita a carteira de tokens, e GET /metering/customers/{id}/wallet
devolve o saldo de cada uma:
creditsPerCycle ainda existe (mas é legado). Ele continua nos tipos e continua sendo honrado: a regra é primeiro
grants[{ on: "cycle" }], e creditsPerCycle como fallback. Ou seja, arquivo
antigo não quebra — mas escreva grants[] em código novo, que é o único jeito de
creditar um meter específico ou de creditar on: "payment".Versão Toda
prepaid precisa de preço para publicar. Publicar uma versão prepaid exige basePrice positivo ou um preço de
meter publicado nela. Sem nenhum dos dois o publish responde 422 e o produto
fica em draft — cobrável por ninguém.Ou seja: dá para ter tier grátis (sem mensalidade) desde que o meter tenha
preço, que é o que rateia o consumo da carteira:price é taxa de meter: um valor fixo não é price, é o basePrice da
versão.Webhooks no arquivo
Owebhooks[] do company file é aplicado pelo sync — e em sandbox isso bate no
503 secret_store_unavailable, porque tenant de teste não tem cofre de segredos.
Não é erro de sintaxe do seu arquivo. Veja
webhooks.