Instalação
npm install @xpayr/extension-kit
# or copy src/index.js into your extension —
# zero dependencies, no build step, MV3-ready
Venda uma extensão de navegador, plugin ou app de desktop com cripto sem sistema de contas. O comprador paga da carteira dele, e essa carteira é a licença — ele desbloqueia qualquer outro dispositivo assinando uma mensagem gratuita. Sem e-mail, sem chaves de licença para perder, sem estornos.
Os pagamentos da Chrome Web Store foram encerrados em fevereiro de 2021, então todo desenvolvedor de extensões precisa de uma camada de pagamento externa. A opção líder exige conta Stripe, o que exclui completamente desenvolvedores da Turquia, Paquistão, Nigéria, Bangladesh, Indonésia, Egito e muitos outros países.
Os gateways de pagamento cripto param em "pagamento recebido". Entregam um webhook, não uma licença: sem registro de direitos, sem SDK, sem verificação entre dispositivos. Você acaba construindo a metade difícil sozinho. Este kit é essa metade.
ExtensionPay Paddle / LS Gateways cripto XPayr Kit
taxa 5% + Stripe 5% + 50c 0.5-1% 2.9% flat
sem Stripe nao parcial sim sim
camada licenca sim parcial nao sim
estornos sim sim nenhum nenhum
comerc. registado nao sim nao nao
Não somos merchant of record: você declara os próprios impostos. É exatamente isso que a taxa maior da Paddle e da Lemon Squeezy compra, e é um trade-off real que vale entender antes de escolher.
Crie um produto no seu painel de comerciante para obter um código de produto e então conecte o SDK. Não são necessárias host_permissions, então instalar sua extensão não exibe aviso de acesso a dados.
npm install @xpayr/extension-kit
# or copy src/index.js into your extension —
# zero dependencies, no build step, MV3-ready
{
"manifest_version": 3,
"permissions": ["storage", "alarms"],
"externally_connectable": { "matches": ["https://xpayr.com/*"] }
}
import XPayrKit from '@xpayr/extension-kit';
const xpayr = XPayrKit('prod_my_extension');
xpayr.startBackground(); // required: token delivery + daily refresh
xpayr.onLicenseChanged.addListener(user => {
console.log(user.licensed ? 'unlocked' : 'locked');
});
const user = await xpayr.getUser();
if (user.licensed) {
enableProFeatures();
} else {
showUpgradeButton(() => xpayr.openCheckout());
}
Essa é a integração inteira. O fluxo do comprador — escolher a rede, pagar, assinar, desbloquear — é hospedado por nós em xpayr.com/buy/{product_code}.
| Campo | Tipo | Significado |
|---|---|---|
licensed |
boolean |
Condicione seus recursos a isto. Responde a partir de um token verificado localmente, então é instantâneo e funciona offline. |
plan |
'lifetime' | 'prepaid_year' | null |
O plano que o comprador adquiriu. |
wallet |
string | null |
A carteira à qual a licença está vinculada — a que pagou. |
paidAt |
Date | null |
Quando a licença foi emitida. |
expiresAt |
Date | null |
Data final para planos por tempo limitado; null para vitalício. |
source |
'cache' | 'network' |
De onde veio esta resposta. |
staleSince |
Date | null |
Definido enquanto opera com um token vencido dentro da janela de tolerância offline de 30 dias. |
| Método | Descrição |
|---|---|
startBackground() |
Chame uma vez no seu service worker. Conecta a entrega do token e o alarme de atualização diária. |
getUser() |
Verificação de licença offline-first. Valida localmente o token ES256 em cache — sem ida e volta de rede no caminho crítico. |
openCheckout() |
Abre o checkout hospedado em uma nova aba. O comprador escolhe qualquer rede e token que você tenha habilitado. |
openRestore() |
"Já comprei isto" — desbloqueia outro dispositivo com uma assinatura de carteira. Sem e-mail, sem chave de licença. |
refresh() |
Força a revalidação online. Detecta reembolsos e revogações imediatamente. |
getPlans() |
Informações públicas do produto: preço, tipo de plano, redes permitidas. |
onLicenseChanged |
Dispara sempre que o estado da licença muda. |
Ficou offline por um tempo? A licença continua funcionando por 30 dias após o vencimento do token e depois entra em bloqueio suave com um aviso para reconectar — ninguém fica travado no meio do caminho. Reembolsou um cliente? Revogue no painel: a renovação falha na hora e o token morre em 7 dias.
Seus primeiros 300 $ em vendas de licenças não têm taxa alguma. Depois disso são 2,9% fixos, separados na mesma transação on-chain do pagamento — sem fatura e sem nada a cobrar depois. Sem taxa fixa, sem mensalidade, sem estornos. O gas da rede é à parte e pago pelo comprador.
Licença de 14 $, dentro da faixa gratuita -> você recebe 14,00 $Licença de 14 $, após a faixa gratuita -> você recebe 13,59 $ (taxa 0,41 $)
Webhooks são opcionais — o Kit emite e verifica licenças sem nenhum backend do seu lado. Se quiser eventos no servidor, eles usam o mesmo esquema de assinatura de qualquer webhook XPayr (veja o guia de assinatura) e são reenviados com backoff. Use o event_id para idempotência.
| Evento | Quando |
|---|---|
license.issued |
Um pagamento gerou uma licença. Traz a carteira, o código do produto, o plano e o hash da transação. |
license.revoked |
Você revogou uma licença pelo painel, normalmente após um reembolso. |
payment.pending |
Uma sessão de checkout foi criada. |
payment.processing |
O pagamento está on-chain aguardando confirmações. |
payment.completed |
Pagamento verificado on-chain. |
payment.failed |
A transação enviada não foi verificada contra a sessão. |
payment.expired |
A sessão expirou sem pagamento. |
Emita e gerencie licenças de software vinculadas à carteira com ES256 diretamente do Claude Desktop, Cursor, VS Code Copilot ou agentes autônomos de suporte de IA usando o Servidor MCP oficial da XPayr (`xpayr_issue_wallet_license`).
{
"name": "xpayr_issue_wallet_license",
"arguments": {
"product_id": "prod_my_extension",
"buyer_wallet": "0x71C...89A",
"plan": "lifetime",
"tx_hash": "0x9f8e...3b2a"
}
}
Incorpore selos dinâmicos SVG de confiança (partner-badge.php) ou o widget sem dependências da Calculadora de Taxa de 0.5% e Economia (xpayr-fee-widget.js) no README da sua extensão, portal de documentação ou landing page da agência.
<!-- Official Dynamic SVG Trust Badge -->
<a href="https://xpayr.com?utm_source=partner_badge" target="_blank" rel="noopener">
<img src="https://xpayr.com/partner-badge.php?type=powered_by&theme=dark" alt="Powered by XPayr — 0.5% Non-Custodial Crypto Checkout" height="28">
</a>
<!-- Interactive 0.5% Fee & Savings Calculator Widget -->
<div data-xpayr-fee-widget data-volume="100000" data-invoice="250" data-rate="1.0"></div>
<script src="https://xpayr.com/public/sdk/xpayr-fee-widget.js" async></script>
| ExtensionPay | Kit XPayr |
|---|---|
ExtPay('extension-id') |
XPayrKit('prod_code') |
extpay.startBackground() |
xpayr.startBackground() |
user.paid |
user.licensed |
user.email |
user.wallet |
openPaymentPage() |
openCheckout() |
openLoginPage() |
openRestore() |
onPaid.addListener |
onLicenseChanged.addListener |
getPlans() |
getPlans() |
A única diferença estrutural é a identidade: o ExtensionPay identifica o cliente por e-mail, o Kit identifica pela carteira. Isso elimina a ida e volta do magic link e significa que uma licença não pode ser compartilhada sem compartilhar uma carteira.
Instale @xpayr/node-sdk (v0.2.0), @xpayr/payment-evidence (v0.2.0), @xpayr/extension-kit (v0.2.0)ou @xpayr/mcp-server (v1.0.0) pelo NPM, ou execute chamadas de ferramentas JSON-RPC 2.0 ao vivo via POST https://xpayr.com/api/mcp.