Pular para o conteúdo

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.

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á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.

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.

Uma function que grava pedidos no banco com a chave da execução (dê a ela o escopo rows.write em Configurações):

src/main.js
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);
}
};
package.json
{
"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.