> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Funções públicas

> Exponha funções sem autenticação com config: { public: true } para webhooks, callbacks e APIs públicas.

## Quando usar

Use `config: { public: true }` quando o chamador não pode enviar `X-Jelou-Token`:

* **Webhooks** de serviços externos (Stripe, GitHub, Twilio)
* **Callbacks** de gateways de pagamento
* **APIs públicas** acessíveis do navegador

## No modo `define()`

```typescript theme={null}
export default define({
  description: "Webhook do Stripe",
  input: z.object({ type: z.string() }),
  config: { public: true, methods: ["POST"], mcp: false },
  handler: async (input, ctx) => {
    return { received: true };
  },
});
```

## No modo `app()` — per-tool

```typescript theme={null}
export default app({
  tools: {
    webhook: define({
      config: { public: true, mcp: false },
      handler: async () => ({ ok: true }),
    }),
    admin: define({
      // protegido por padrão
      handler: async () => ({ ok: true }),
    }),
  },
});
```

## Segurança: validar webhooks

Com funções públicas, a plataforma não valida nada. **Seu código é responsável**:

```typescript theme={null}
handler: async (input, ctx, request) => {
  const signature = request.headers.get("x-webhook-signature");
  const secret = ctx.env.get("WEBHOOK_SECRET");
  // verificar HMAC-SHA256...
}
```

<Warning>
  Nunca confie em uma função pública sem validar a assinatura.
</Warning>
