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 utilizadorLogin 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 activaObservar 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 ficheiroListar ficheiros
const ficheiros = await bk.storage.list("basek-public");
ficheiros.forEach(f => console.log(f));Buckets disponíveis
| Bucket | Acesso |
|---|---|
| basek-public | Público — qualquer pessoa pode ler |
| basek-private | Privado — 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 segundosIdiomas 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étodo | Descriçã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étodo | Descriçã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étodo | Descrição |
|---|---|
| subscribe(canal, callback) | Subscrever canal — retorna função unsub() |
| publish(canal, dados) | Publicar evento no canal |
bk.storage
| Método | Descriçã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étodo | Descrição |
|---|---|
| transcrever(file, lingua) | Transcrição de áudio — retorna {texto, lingua, duracao} |
bk.migrations
| Método | Descriçã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
| Recurso | Gratuito | Essencial | Pro | Fundador |
|---|---|---|---|---|
| Preço | R$0 | R$39/mês | R$119/mês | R$119 único |
| MAU | 1.000 | 10.000 | 100.000 | 100.000 |
| Base de dados | 256 MB | 2 GB | 20 GB | 20 GB |
| Storage | 500 MB | 10 GB | 100 GB | 100 GB |
| Emails/mês | 500 | 5.000 | 20.000 | 20.000 |
| IA local | 60 min | 300 min | 2.000 min | 2.000 min |
| Canais realtime | 10 | 100 | Ilimitados | Ilimitados |
| Projectos | 1 | 5 | Ilimitados | Ilimitados |
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