riligar-infra-stripe — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited riligar-infra-stripe (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Esta skill configura a integração completa do Stripe no seu projeto. O agente vai guiar você através de um setup interativo.
Quando o usuário solicitar configurar o Stripe, siga este fluxo OBRIGATÓRIO:
Pergunte ao usuário:
Para configurar o Stripe, preciso das suas chaves da API. Você pode encontrá-las em: https://dashboard.stripe.com/apikeys
>
Por favor, me forneça:
>
1. Publishable Key (pklive... ou pktest...) 2. Secret Key (sklive... ou sktest...)
Aguarde as chaves antes de prosseguir.
Após receber as chaves, pergunte:
Agora preciso entender seus produtos. Me diga:
>
1. Tipo de cobrança: Assinatura (recorrente) ou pagamento único? 2. Quais planos/produtos você quer oferecer?
>
Exemplo de resposta:
>
- Assinatura mensal - Plano Starter: R$ 29/mês (5 projetos, suporte email) - Plano Pro: R$ 99/mês (ilimitado, suporte prioritário) - Plano Enterprise: R$ 299/mês (tudo + SLA)
Com as informações coletadas, gere o script para criar os produtos:
// scripts/setup-stripe-products.js
import Stripe from 'stripe'
const stripe = new Stripe('SK_KEY_AQUI')
async function setupProducts() {
const products = [
// Substituir com os produtos do usuário
{
name: 'Plano Starter',
description: '5 projetos, suporte email',
price: 2900, // R$ 29,00 em centavos
interval: 'month',
features: ['5 projetos', 'Suporte email', '1GB storage'],
},
{
name: 'Plano Pro',
description: 'Ilimitado, suporte prioritário',
price: 9900, // R$ 99,00 em centavos
interval: 'month',
features: ['Projetos ilimitados', 'Suporte prioritário', '10GB storage'],
},
]
console.log('Criando produtos no Stripe...\n')
for (const product of products) {
const stripeProduct = await stripe.products.create({
name: product.name,
description: product.description,
metadata: { features: JSON.stringify(product.features) },
})
const stripePrice = await stripe.prices.create({
product: stripeProduct.id,
unit_amount: product.price,
currency: 'brl',
recurring: product.interval ? { interval: product.interval } : undefined,
})
console.log(`✓ ${product.name}`)
console.log(` Product ID: ${stripeProduct.id}`)
console.log(` Price ID: ${stripePrice.id}\n`)
}
console.log('Produtos criados com sucesso!')
}
setupProducts().catch(console.error)Instrua o usuário a executar: bun run scripts/setup-stripe-products.js
Após executar o script, peça:
O script gerou os Price IDs. Por favor, me envie os IDs gerados. Exemplo: price_1ABC123...
Com as chaves e Price IDs, configure os arquivos de ambiente:
Backend: `.env.development` e `.env.production`
# .env.development (chaves de teste)
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
# .env.production (chaves de produção)
STRIPE_SECRET_KEY=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...Frontend: `.env.development` e `.env.production`
# .env.development
VITE_STRIPE_PUBLISHABLE_KEY=pk_test_...
# .env.production
VITE_STRIPE_PUBLISHABLE_KEY=pk_live_...Gere a migration para adicionar campos do Stripe:
// database/schema.js - adicionar aos users
stripeCustomerId: text('stripe_customer_id').unique(),
stripeSubscriptionId: text('stripe_subscription_id').unique(),
plan: text('plan').default('free'),
subscriptionStatus: text('subscription_status'),
currentPeriodEnd: integer('current_period_end', { mode: 'timestamp' }),Instrua o usuário:
Configure o webhook no Stripe Dashboard:
>
1. Acesse https://dashboard.stripe.com/webhooks 2. Clique em "Add endpoint" 3. URL:https://seu-dominio.com/api/webhook4. Selecione os eventos: -checkout.session.completed-customer.subscription.updated-customer.subscription.deleted-invoice.paid-invoice.payment_failed5. Copie o "Signing secret" (whsec\_...) 6. Adicione ao.env.developmente.env.production
Gere todos os arquivos necessários usando os templates de assets/:
| Arquivo | Baseado em |
|---|---|
plugins/stripe.js | stripe-server.js (seção 1) |
routes/billing.js | stripe-server.js (seção 2) |
routes/webhook.js | stripe-server.js (seção 3) |
services/billing.js | stripe-server.js (seção 4) |
config/stripe-prices.js | Price IDs coletados (Step 9) |
config/plans.js | PLAN_MAP + PLAN_LIMITS (Step 9) |
pages/Pricing.jsx | stripe-client.js (seção 3) |
components/BillingSettings.jsx | stripe-client.js (seção 4) |
hooks/useSubscription.js | stripe-client.js (seção 2) |
A) Arquivo de preços (config/stripe-prices.js):
// config/stripe-prices.js
export const STRIPE_PRICES = {
starter: {
priceId: 'price_COLETADO_STARTER',
name: 'Starter',
price: 29,
features: ['5 projetos', 'Suporte email', '1GB storage'],
},
pro: {
priceId: 'price_COLETADO_PRO',
name: 'Pro',
price: 99,
features: ['Projetos ilimitados', 'Suporte prioritário', '10GB storage'],
},
enterprise: {
priceId: 'price_COLETADO_ENTERPRISE',
name: 'Enterprise',
price: 299,
features: ['Tudo do Pro', 'Storage ilimitado', 'SLA garantido'],
},
}
export const getPrice = plan => STRIPE_PRICES[plan]
export const getPriceId = plan => STRIPE_PRICES[plan]?.priceIdB) Arquivo de mapeamento e limites (config/plans.js):
// config/plans.js
// Mapeia Price IDs do Stripe para nomes de planos internos
export const PLAN_MAP = {
price_COLETADO_STARTER: 'starter',
price_COLETADO_PRO: 'pro',
price_COLETADO_ENTERPRISE: 'enterprise',
}
// Define limites de features por plano
export const PLAN_LIMITS = {
free: {
maxFlows: 1,
maxContacts: 100,
// Adicione outros limites conforme necessário
},
starter: {
maxFlows: 3,
maxContacts: 500,
},
pro: {
maxFlows: 15,
maxContacts: 5000,
},
enterprise: {
maxFlows: 55,
maxContacts: Infinity,
},
}Ao completar o setup, confirme:
bun add stripe @stripe/stripe-js @stripe/react-stripe-js).env.development e .env.production (backend e frontend)config/stripe-prices.jsPLAN_MAP e PLAN_LIMITS configurados em config/plans.js/api/webhook)/api/billing/*)useSubscription hook com header Authorization# Instalar Stripe CLI
brew install stripe/stripe-cli/stripe
# Login
stripe login
# Forward webhooks (ajuste a porta conforme seu backend)
stripe listen --forward-to localhost:3333/api/webhook
# Testar checkout
stripe trigger checkout.session.completed| Guide | Content |
|---|---|
| stripe-elysia.md | Backend routes completas |
| stripe-react.md | Componentes React/Mantine |
| stripe-webhooks.md | Handlers de eventos |
| stripe-database.md | Schema Drizzle |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.