O que são secrets?
Secrets são variáveis de ambiente criptografadas que você acessa em tempo de execução através de ctx.env. Use-os para chaves de API, URLs de banco de dados, tokens de serviços externos e quaisquer valores sensíveis.
Você tem três formas de configurar secrets com o CLI:
Inline
Arquivo .env
Interativo
Passe pares KEY=VALUE diretamente:jelou secrets set query-customer CRM_API_KEY=sk_test_EXAMPLE JELOU_API_KEY=jfn_pat_EXAMPLE
# ✓ Set 2 secrets
Importe de um arquivo .env:jelou secrets set query-customer --from-env .env.production
O arquivo segue o formato padrão:CRM_API_KEY=sk_test_EXAMPLE
JELOU_API_KEY=jfn_pat_EXAMPLE
DATABASE_URL=postgres://user:pass@host:5432/db
Linhas em branco e comentários (#) são ignorados. Sem argumentos, o CLI guia você passo a passo:jelou secrets set query-customer
# ? Secret key: CRM_API_KEY
# ? Secret value: ****
# ? Add another secret? (y/N) y
# ? Secret key: JELOU_API_KEY
# ? Secret value: ****
# ? Add another secret? (y/N) n
# ✓ Set 2 secrets
Os valores são mascarados durante a entrada.
As chaves devem estar em UPPER_SNAKE_CASE (padrão: ^[A-Z][A-Z0-9_]*$).
Acesse secrets na sua função
Use ctx.env dentro do handler:
import { define, z } from "@jelou/functions";
export default define({
name: "send-whatsapp",
description: "Sends a WhatsApp message using the Jelou API",
input: z.object({
phone: z.string().min(10),
message: z.string().min(1),
}),
handler: async (input, ctx) => {
const apiKey = ctx.env.get("JELOU_API_KEY");
const botId = ctx.env.get("BOT_ID");
if (!apiKey) {
ctx.log("Error: JELOU_API_KEY not configured");
return { sent: false, error: "Missing API key" };
}
const res = await fetch("https://api.jelou.ai/v1/messages/send", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${apiKey}`,
},
body: JSON.stringify({
botId,
phone: input.phone,
message: input.message,
}),
});
return { sent: res.ok, status: res.status };
},
});
Métodos de ctx.env
| Método | Retorna | Descrição |
|---|
ctx.env.get("KEY") | string | undefined | Obtém o valor de um secret |
ctx.env.has("KEY") | boolean | Verifica se um secret existe |
ctx.env.toObject() | Record<string, string> | Obtém todos os secrets como objeto |
Variáveis bloqueadas
Variáveis internas da plataforma com o prefixo __FN_ são bloqueadas. Chamar ctx.env.get("__FN_COMPANY_ID") retorna undefined.
Desenvolvimento local
No desenvolvimento local, o servidor jelou dev carrega secrets do seu arquivo .env:
CRM_API_KEY=sk-test-local123
JELOU_API_KEY=jfn_pat_test_local
DATABASE_URL=postgres://localhost:5432/mydb
Você pode especificar um arquivo diferente:
jelou dev --env .env.local
Nunca faça commit do seu arquivo .env no repositório. O jelou init o adiciona automaticamente ao .gitignore.
Listar e deletar secrets
jelou secrets list query-customer
# ▸ Key Updated
# ▸ CRM_API_KEY 2 hours ago
# ▸ JELOU_API_KEY 3 days ago
jelou secrets delete query-customer CRM_API_KEY
# ✓ Deleted CRM_API_KEY
Secrets em CI/CD
Em pipelines de CI, use variáveis de ambiente do sistema para injetar secrets:
- name: Configure secrets and deploy
env:
JELOU_TOKEN: ${{ secrets.JELOU_TOKEN }}
run: |
jelou secrets set query-customer \
CRM_API_KEY=${{ secrets.CRM_API_KEY }} \
JELOU_API_KEY=${{ secrets.JELOU_API_KEY }}
jelou deploy --no-confirm