O que o código recebe
O entrypoint exporta uma função assíncrona. A cada execução, ela recebe um objeto com o pedido (req), a resposta (res) e o log (log, error), e precisa devolver uma resposta.
Pedido e resposta
Seção intitulada “Pedido e resposta”req. |
O quê |
|---|---|
method, path, query, queryString |
método HTTP, caminho, query como objeto e como texto |
headers |
headers do pedido, em minúsculas |
bodyText, bodyJson |
corpo como texto, ou convertido de JSON (lança erro se o corpo não for JSON) |
host, scheme, url |
de onde veio o pedido |
res. |
Devolve |
|---|---|
json(objeto, status?, headers?) |
JSON |
text(texto, status?, headers?) |
texto |
empty() |
204, sem corpo |
redirect(url, status?) |
redirecionamento (301 por padrão) |
log(...) e error(...) vão para os Logs e Erros da execução (se Guardar logs e erros das execuções estiver ligado em Configurações).
Variáveis que o Owbase define
Seção intitulada “Variáveis que o Owbase define”| Variável | Valor |
|---|---|
OWBASE_FUNCTION_API_ENDPOINT |
https://cloud.owbase.dev/v1: use no setEndpoint do SDK |
OWBASE_FUNCTION_PROJECT_ID |
ID do projeto |
OWBASE_FUNCTION_ID, OWBASE_FUNCTION_NAME |
ID e nome da function |
OWBASE_FUNCTION_DEPLOYMENT |
ID do deploy no ar |
OWBASE_FUNCTION_RUNTIME_NAME, OWBASE_FUNCTION_RUNTIME_VERSION |
runtime (Node, 22) |
OWBASE_FUNCTION_CPUS, OWBASE_FUNCTION_MEMORY |
CPU e memória da especificação |
OWBASE_VERSION |
versão do servidor Owbase |
Somam-se a elas as suas variáveis; num nome repetido, vale o do Owbase.
Headers que o Owbase acrescenta
Seção intitulada “Headers que o Owbase acrescenta”| Header | Valor |
|---|---|
x-owbase-key |
chave de API desta execução, com os escopos de Configurações → Escopos da chave da execução. Vale só enquanto a execução durar |
x-owbase-trigger |
http, schedule ou event |
x-owbase-event |
o evento que disparou (quando trigger é event) |
x-owbase-user-id, x-owbase-user-jwt |
quem chamou, se havia usuário logado |
x-owbase-execution-id |
ID da execução |
x-owbase-client-ip |
IP de quem chamou |
x-owbase-country-code, x-owbase-continent-code, x-owbase-continent-eu |
localização do IP, quando conhecida |
Headers x-owbase-* que o cliente tentar mandar são descartados: o código só vê os do Owbase.
Exemplo completo
Seção intitulada “Exemplo completo”Uma function que grava pedidos no banco com a chave da execução (dê a ela o escopo rows.write em Configurações):
import { Client, ID, TablesDB } from '@owbase/node';
// POST /pedidos grava um pedido com a chave da execução (dê o escopo rows.write em Configurações → Escopos da chave da execução).export default async ({ req, res, log, error }) => { const client = new Client() .setEndpoint(process.env.OWBASE_FUNCTION_API_ENDPOINT) .setProject(process.env.OWBASE_FUNCTION_PROJECT_ID) .setKey(req.headers['x-owbase-key'] ?? '');
if (req.method === 'GET') return res.json({ ok: true, function: process.env.OWBASE_FUNCTION_ID }); if (req.method !== 'POST' || req.path !== '/pedidos') return res.json({ erro: 'rota não encontrada' }, 404);
let pedido; try { pedido = JSON.parse(req.bodyText || '{}'); } catch { return res.json({ erro: 'o corpo precisa ser JSON' }, 400); } if (typeof pedido.total !== 'number') return res.json({ erro: 'informe total (número)' }, 400);
try { const linha = await new TablesDB(client).createRow({ databaseId: 'loja', tableId: 'pedidos', rowId: ID.unique(), data: { cliente: req.headers['x-owbase-user-id'] || 'anônimo', total: pedido.total }, }); log(`pedido ${linha.$id} gravado (gatilho: ${req.headers['x-owbase-trigger']})`); return res.json({ id: linha.$id }, 201); } catch (e) { error(`falha ao gravar o pedido: ${e.message}`); return res.json({ erro: 'não consegui gravar o pedido' }, 500); }};{ "name": "pedidos", "private": true, "type": "module", "dependencies": { "@owbase/node": "^1.0.1" }}Para chamar o banco como o usuário que executou (respeitando as permissões dele) em vez da chave, use setJWT(req.headers['x-owbase-user-jwt']) no lugar de setKey.