> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# Limitação de taxa

Um limiter para cada rota sensível a abuso.

## Passo a passo para iniciantes

Pré-requisitos: Leia os dois guias para iniciantes abaixo, conclua a configuração local da Web e abra este monorepo na raiz do seu editor. As configurações da Web pertencem a `apps/web/.env.local`; Next.js não lê a raiz `.env`. `/dashboard` no modo falso padrão é uma demonstração sem banco de dados; `/auth` precisa de um banco de dados migrado.

Termos rápidos: um espaço de trabalho consiste em usuários, dados e configurações separados de uma equipe. O servidor é o back-end confiável; mantenha as chaves do provedor fora do navegador e do código do telefone. Uma migração é uma alteração de versão do banco de dados que cria ou atualiza tabelas. Um modelo de IA é o mecanismo que responde; o catálogo de modelos é a lista do servidor de IDs e preços de modelos disponíveis. Um provedor é um serviço externo, como IA, e-mail ou serviço de cobrança. Um direito é uma concessão que permite que um espaço de trabalho use um recurso. Um webhook é uma mensagem que um serviço envia para o URL de outro serviço.

1. No ambiente do servidor, escolha `RATE_LIMIT_STORE=postgres` para buckets de produção compartilhados e defina `PUBLIC_AI_DAILY_BUDGET_MICROUNITS=0` para manter a IA pública desabilitada.

2. Configure `TRUSTED_PROXY_COUNT` apenas para o número exato de proxies controlados que acrescentam cabeçalhos de encaminhamento; não copie `1`, a menos que isso seja verdade para o seu host.

3. Verifique se uma solicitação negada retorna um erro de repetição segura. Se os limites diferirem entre as instâncias, verifique se eles compartilham Postgres.

Para código personalizado, comece com o `prompts/README.md` fornecido e copie o prompt mais próximo: `prompts/new-app-screen.md` para uma tela de aplicativo ou `prompts/new-landing-page.md` para uma página pública. Para trabalho de servidor, banco de dados ou provedor, dê ao seu agente de codificação a tarefa deste guia e peça-lhe para ler `AGENTS.md`, `.ai/PROJECT_CONTEXT.md` e espelhos `.ai/` correspondentes; inspecione os arquivos de origem exatos nomeados aqui; listar arquivos e verificações antes de editar; preservar a propriedade do espaço de trabalho e os segredos apenas do servidor; e mostrar a diferença. Informe o comportamento desejado, campos de entrada e saída, funções permitidas, sucessos e erros esperados e a conta de teste, provedor ou dispositivo. Use valores de amostra; nunca cole um segredo real.

[Antes de começar](https://supastack.dev/pt/docs/web/before-you-start.md)

[Noções básicas sobre terminais](https://supastack.dev/pt/docs/web/terminal-basics.md)

[Configuração local da Web](https://supastack.dev/pt/docs/web/ship-in-5-minutes.md)

[Avisos do agente e memória do projeto](https://supastack.dev/pt/docs/web/agents.md)


## Escolha a loja do limitador

`RATE_LIMIT_STORE` é memória ou postgres. Quando não definido, a produção seleciona Postgres e outros ambientes selecionam memória. As linhas `rate_limit_bucket` compartilhadas coordenam vários servidores; falhas de armazenamento atualmente falham em abrir para preservar a disponibilidade do API.

Os limites de envio de IA do espaço de trabalho/usuário e o limitador público API/MCP protegem suas superfícies separadas. Preserve as chaves de bucket existentes específicas do chamador ao adicionar rotas.


## Confie apenas em saltos de proxy controlados

`TRUSTED_PROXY_COUNT` varia de 0 a 10 e conta proxies reversos que acrescentam `x-forwarded-for`. Zero não confia em ninguém e usa um bucket desconhecido compartilhado; um proxy controlado normalmente precisa de 1. Uma contagem incorreta permite que valores encaminhados não confiáveis ​​afetem o limitador.


## Limite os gastos anônimos do provedor

`PUBLIC_AI_DAILY_BUDGET_MICROUNITS=0` desativa chamadas públicas de IA. Um limite UTC diário não negativo configurado reserva os gastos da plataforma antes das chamadas do provedor e é separado do orçamento de cada espaço de trabalho. Teste reservas simultâneas, redefina limites e negações antes de qualquer tentativa de provedor faturável.

```
RATE_LIMIT_STORE=postgres
TRUSTED_PROXY_COUNT=1
PUBLIC_AI_DAILY_BUDGET_MICROUNITS=0
```


## Instalação e configuração

rate-limit-runtime fornece limiters partilhados ligados às superfícies sensíveis a abuso — apiV1Limiter (600 pedidos/minuto) e authLimiter (300 pedidos/minuto) são os presets enviados. Os limites fazem key em identidade mais bucket de rota e respondem com um 429 repetível com Retry-After em vez de um erro genérico.

Estende o limiter existente a novos endpoints sensíveis a abuso — sign-in, OTP, checkout, submissão de tarefas, criação de chaves — em vez de inventar contadores por rota que divergem.

```
export const apiV1Limiter = createNamedRateLimiter("api-v1", 600, 60_000);
export const authLimiter = createNamedRateLimiter("auth", 300, 60_000);
```


## Fluxo de implementação

Escolhe a key com cuidado: por utilizador para ações autenticadas, por API key para tráfego público, por IP só como último recurso para endpoints anónimos. Bursts legítimos recebem um Retry-After; ataques batem num teto rígido.

Mantém o limiter fail-closed em rotas sensíveis a abuso — se a store estiver inalcançável, prefere rejeitar trabalho caro a deixá-lo passar sem limite.


## Verificação e resolução de problemas

Exercita um limiter até devolver 429 com um Retry-After sensato, verifica que workspaces diferentes recebem buckets independentes e confirma que um burst volta ao sucesso depois da janela. Regista recusas sem o payload sensível do pedido.


## Seguinte

[IA e jobs em segundo plano](https://supastack.dev/pt/docs/modules/ai.md)
