Documentação oficial · v1.0

Base-K
Documentação

Backend completo para o seu produto. Auth, base de dados, realtime, storage e IA local — num único SDK.

Início rápido

1. Incluir o SDK

<!-- No <head> do seu site -->
<script src="https://seudominio.com/basek.js"></script>

2. Inicializar

const bk = new Basek({
  url:    "https://seudominio.com",
  apikey: "SUA_CHAVE_API"
});
Onde encontrar a chave API: Developer Panel → clique no projecto → copie a API Key.

Autenticação

Signup com email

const user = await bk.auth.signup("[email protected]", "password123");
console.log(user.id); // UUID do utilizador

Login com email

const user = await bk.auth.login("[email protected]", "password123");

Login com Google OAuth

bk.auth.loginWithGoogle();
// Redireciona para Google e volta com sessão activa

Observar estado de autenticação

bk.auth.onAuthChange(user => {
  if (user) console.log("Autenticado:", user.email);
  else      console.log("Não autenticado");
});

Logout

await bk.auth.logout();

Base de Dados

PostgreSQL exposto via PostgREST. O developer cria as suas próprias tabelas no schema do projecto.

Ler dados

const dados = await bk.db
  .from("minha_tabela")
  .select("id,nome,email")
  .limit(10)
  .execute();

Filtrar

const item = await bk.db
  .from("minha_tabela")
  .select("*")
  .eq("id", "uuid-aqui")
  .execute();

Inserir

await bk.db
  .from("minha_tabela")
  .insert({ nome: "João", email: "[email protected]" })
  .execute();

Ordenar

const recentes = await bk.db
  .from("mensagens")
  .select("*")
  .order("criado_em", true) // true = descendente
  .limit(50)
  .execute();

Realtime

Comunicação em tempo real via SSE sobre Redis pub/sub. Canais por projecto isolados por chave API.

Subscrever canal

const unsub = bk.realtime.subscribe("projeto:CHAVE_API", evento => {
  console.log("Tipo:", evento.tipo);
  console.log("Dados:", evento.dados);
});

Publicar evento

await bk.realtime.publish("projeto:CHAVE_API", {
  tipo:  "nova_mensagem",
  dados: { texto: "Olá!", autor: "[email protected]" }
});

Exemplo completo — comentários em tempo real

// 1. Carregar comentários existentes
const comentarios = await bk.db
  .from("comentarios")
  .select("id,texto,criado_em")
  .order("criado_em", true)
  .execute();

// 2. Subscrever novos comentários
bk.realtime.subscribe("projeto:CHAVE_API", evento => {
  if (evento.tipo === "novo_comentario") adicionarNaUI(evento.dados);
});

// 3. Publicar comentário
async function comentar(texto) {
  await bk.db.from("comentarios")
    .insert({ texto, autor: bk.auth.getUser().email })
    .execute();
  await bk.realtime.publish("projeto:CHAVE_API", {
    tipo: "novo_comentario",
    dados: { texto, autor: bk.auth.getUser().email }
  });
}

Storage

Upload e gestão de ficheiros via MinIO. Suporta qualquer tipo de ficheiro.

Upload de ficheiro

const file = document.getElementById("meu-input").files[0];
const resultado = await bk.storage.upload(file, "basek-public");
console.log(resultado.url); // URL pública do ficheiro

Listar ficheiros

const ficheiros = await bk.storage.list("basek-public");
ficheiros.forEach(f => console.log(f));

Buckets disponíveis

BucketAcesso
basek-publicPúblico — qualquer pessoa pode ler
basek-privatePrivado — apenas autenticados

IA Local

Transcrição de áudio e tradução automática processadas localmente. Sem custo por uso, sem envio de dados para servidores externos.

Transcrever áudio

const file = document.getElementById("audio-input").files[0];
const resultado = await bk.ia.transcrever(file, "pt");

console.log(resultado.texto);   // Transcrição completa
console.log(resultado.lingua);  // Idioma detectado
console.log(resultado.duracao); // Duração em segundos

Idiomas suportados: pt en es fr it de ru zh ja ko ar hi

Migrações

Versionamento de schema da base de dados por projecto. Transaccional — ou aplica tudo ou regista a falha.

Aplicar migração

const resultado = await bk.migrations.apply(
  "UUID_DO_PROJECTO",
  1,                        // versão sequencial
  "criar_tabela_posts",     // nome descritivo
  `CREATE TABLE proj_meu_saas.posts (
    id        SERIAL PRIMARY KEY,
    titulo    TEXT NOT NULL,
    criado_em TIMESTAMPTZ DEFAULT NOW()
  );`
);

if (resultado.ok) console.log("Migração aplicada:", resultado.versao);
else               console.error("Erro:", resultado.erro);

Listar migrações

const lista = await bk.migrations.list("UUID_DO_PROJECTO");
lista.forEach(m => console.log(`v${m.versao} — ${m.nome} — ${m.estado}`));

Referência do SDK

bk.auth

MétodoDescrição
signup(email, password)Registo com email + confirmação por email
login(email, password)Login com email e password
loginWithGoogle()OAuth Google — redireciona e volta com sessão
logout()Terminar sessão e limpar tokens
getUser()Utilizador actual (null se não autenticado)
onAuthChange(callback)Observar mudanças de estado de autenticação

bk.db

MétodoDescrição
.from(tabela)Seleccionar tabela
.select(colunas)Colunas a retornar (ex: "id,nome" ou "*")
.insert(dados)Inserir registo
.eq(coluna, valor)Filtro de igualdade
.order(coluna, desc)Ordenação (desc=true para descendente)
.limit(n)Limite de resultados
.execute()Executar query — retorna array

bk.realtime

MétodoDescrição
subscribe(canal, callback)Subscrever canal — retorna função unsub()
publish(canal, dados)Publicar evento no canal

bk.storage

MétodoDescrição
upload(file, bucket)Upload de ficheiro — retorna {url, nome, bucket}
getUrl(bucket, nome)URL pública de ficheiro
list(bucket)Listar ficheiros no bucket
delete(bucket, nome)Eliminar ficheiro

bk.ia

MétodoDescrição
transcrever(file, lingua)Transcrição de áudio — retorna {texto, lingua, duracao}

bk.migrations

MétodoDescrição
apply(projetoId, versao, nome, sql)Aplicar migração transaccional
list(projetoId)Listar histórico de migrações
latestVersion(projetoId)Número da última versão aplicada

Planos & Limites

RecursoGratuitoEssencialProFundador
PreçoR$0R$39/mêsR$119/mêsR$119 único
MAU1.00010.000100.000100.000
Base de dados256 MB2 GB20 GB20 GB
Storage500 MB10 GB100 GB100 GB
Emails/mês5005.00020.00020.000
IA local60 min300 min2.000 min2.000 min
Canais realtime10100IlimitadosIlimitados
Projectos15IlimitadosIlimitados
Nota: Quando um limite é atingido o serviço pausa até ao próximo ciclo mensal. Não há cobranças adicionais automáticas.

Base-K · Kriptacorp · v1.0.0