Documentación de NexaBase
Guías completas del SDK oficial, APIs y configuración para aprovechar al máximo tu backend.
Navegación
🚀 Quick Start
📋 API Reference
📚 Extras
⚙️ Configuración Inicial
Antes de usar el SDK de NexaBase, necesitas completar estos 3 pasos:
Crear Cuenta
Regístrate en NexaBase para comenzar:
Crear Primera Organización (Tenant)
Cada organización es un tenant aislado con su propia base de datos PostgreSQL.
- Inicia sesión en tu cuenta
- Haz clic en "Nueva Organización"
- Elige un nombre y subdominio único (ej:
mi-empresa) - Tu organización estará en:
https://mi-empresa.nexabase.app
Generar API Key
Necesitas una API Key para autenticar tus peticiones al SDK:
- Ve al Dashboard de tu organización
- Navega a "Settings" → "API Keys"
- Haz clic en "Generate New API Key"
- Copia y guarda la key de forma segura
Importante: Seguridad de API Keys
No compartas tu API Key públicamente. Guárdala en variables de entorno (.env) y nunca la incluyas en tu código fuente.
📦 Instalación del SDK
Instala el SDK oficial de NexaBase para JavaScript/TypeScript con npm o yarn:
Versión actual: El SDK incluye soporte completo para TypeScript y autocompletado en tu IDE.
🚀 Quick Start
Inicialización Básica
Existen varias formas de inicializar el cliente según tu caso de uso:
{`import { createNexaBaseClient } from '@nexabase/sdk';
// 1. Con API Key (recomendado para servidor/backend)
const nexabase = createNexaBaseClient({
baseURL: 'https://mi-empresa.nexabase.app',
apiKey: 'tu-api-key'
});
// 2. Con Bearer Token (para frontend con usuario autenticado)
const nexabase = createNexaBaseClient({
baseURL: 'https://mi-empresa.nexabase.app',
token: 'bearer-token-del-usuario'
});
// 3. Con Dual Auth (API Key + Token para máxima seguridad)
const nexabase = createNexaBaseClient({
baseURL: 'https://mi-empresa.nexabase.app',
apiKey: 'tu-api-key',
token: 'bearer-token-del-usuario'
});`}Cliente Autenticado (Login Automático)
Si prefieres autenticarte automáticamente con email/password:
{`import { createAuthenticatedApiClient } from '@nexabase/sdk';
const nexabase = await createAuthenticatedApiClient(
'https://mi-empresa.nexabase.app',
'tu-api-key',
'usuario@example.com',
'tu-password'
);
// El cliente ya está autenticado y listo para usar
console.log(nexabase.getTokenInfo());
console.log(nexabase.getOrganization());`}📚 Collections API
Las Collections son equivalentes a tablas en PostgreSQL. El SDK te permite listarlas, obtener detalles y schemas.
Listar Collections
{`const response = await nexabase.listCollections({
page: 1,
per_page: 25,
search: 'users',
sort: '-created_at',
fields: 'id,name,record_count,created_at'
});
console.log(response.data); // Array de collections
console.log(response.meta); // Metadata de paginación
console.log(response.links); // Links de navegación`}Obtener Detalles de una Collection
{`const { data: collection } = await nexabase.getCollection('users');
console.log(collection.name);
console.log(collection.record_count);
console.log(collection.schema);`}Obtener Schema de una Collection
{`const { data: schema } = await nexabase.getCollectionSchema('users');
console.log(schema.fields); // Campos disponibles
console.log(schema.schema); // Schema completo`}📝 Documents API (CRUD)
Los documentos son los registros dentro de una Collection. El SDK proporciona métodos completos para CRUD operations.
Listar Documentos
Lista documentos con soporte para paginación, filtrado, búsqueda y ordenamiento:
{`const response = await nexabase.listDocuments('users', {
page: 1,
per_page: 10,
search: 'john',
sort: '-created_at',
fields: 'id,name,email,created_at',
filter: {
status: 'active',
role: 'user'
},
include: 'profile,posts'
});
console.log(response.data); // Array de documentos
console.log(response.meta.total); // Total de registros`}Crear Documento
Crea un nuevo documento en una collection:
{`const { data: newUser } = await nexabase.createDocument('users', {
name: 'John Doe',
email: 'john@example.com',
status: 'active',
profile: {
bio: 'Software developer',
location: 'New York'
}
});
console.log(newUser.id);
console.log(newUser.created_at);`}Obtener Documento
Obtiene un documento específico por su ID:
{`const { data: user } = await nexabase.getDocument('users', 'user-id', {
fields: 'id,name,email,profile',
include: 'posts'
});
console.log(user);`}Actualizar Documento (Parcial)
Actualiza solo los campos especificados, manteniendo el resto:
{`const { data: updated } = await nexabase.updateDocument('users', 'user-id', {
status: 'inactive',
last_login: new Date().toISOString()
});
console.log(updated);`}Reemplazar Documento (Completo)
Cuidado: PUT reemplaza el documento completo. Los campos no incluidos serán eliminados.
{`const { data: replaced } = await nexabase.replaceDocument('users', 'user-id', {
name: 'Jane Doe',
email: 'jane@example.com',
status: 'active'
// Todos los demás campos serán eliminados
});`}Eliminar Documento
Elimina permanentemente un documento:
{`const result = await nexabase.deleteDocument('users', 'user-id');
console.log(result.message); // "Document deleted successfully"`}🔐 Authentication API
Maneja autenticación de usuarios con sign in, sign up y gestión de sesiones:
{`// Sign in
const { access_token, user } = await nexabase.signIn(
'user@example.com',
'password'
);
// Sign up
const auth = await nexabase.signUp(
'user@example.com',
'password',
{
name: 'John Doe',
profile: { role: 'user' }
}
);
// Get current user
const currentUser = await nexabase.getCurrentUser();
// Sign out
await nexabase.signOut();`}🏢 Tenant & Plans API
Gestiona información del tenant, estadísticas de uso y planes:
{`// Obtener información del tenant
const tenantInfo = await nexabase.getTenantInfo();
// Obtener estadísticas de uso
const usage = await nexabase.getUsageStats();
console.log(usage.current_usage.database_rows_count);
console.log(usage.usage_percentages.database_rows);
// Obtener planes disponibles
const plans = await nexabase.getAvailablePlans();
// Actualizar plan
await nexabase.upgradePlan('pro-plan-id', {
billing_cycle: 'yearly',
payment_method_id: 'pm_123456'
});`}🎯 Factory Functions
El SDK incluye varias funciones helper para crear clientes de manera más conveniente:
{`import {
createTenantClient,
createApiKeyClient,
createSubdomainClient,
createDualAuthClient
} from '@nexabase/sdk';
// Cliente específico de tenant
const tenantClient = createTenantClient(
'https://api.nexabase.app',
'tenant-id',
'api-key'
);
// Cliente por subdominio (más simple)
const subdomainClient = createSubdomainClient(
'mi-empresa', // subdominio
'api-key',
'nexabase.app' // dominio base
);
// Cliente con autenticación dual (recomendado para API de desarrollador)
const dualClient = createDualAuthClient(
'https://api.nexabase.app',
'api-key',
'bearer-token'
);`}📡 Event Handling
El SDK emite eventos para cambios en documentos y errores. Úsalos para reaccionar a cambios en tiempo real:
{`// Escuchar eventos de documentos
nexabase.on('document:created', (data) => {
console.log(\`Nuevo documento creado en \${data.collection}:\`, data.document);
});
nexabase.on('document:updated', (data) => {
console.log(\`Documento actualizado en \${data.collection}:\`, data.document);
});
nexabase.on('document:deleted', (data) => {
console.log(\`Documento \${data.id} eliminado de \${data.collection}\`);
});
nexabase.on('error', (error) => {
console.error('SDK Error:', error.code, error.message);
});`}🚨 Manejo de Errores
El SDK proporciona códigos de error específicos para facilitar el manejo de errores:
{`import { NexaBaseErrorCodes } from '@nexabase/sdk';
try {
const document = await nexabase.getDocument('users', 'invalid-id');
} catch (error) {
switch (error.code) {
case NexaBaseErrorCodes.DOCUMENT_NOT_FOUND:
console.log('Documento no encontrado');
break;
case NexaBaseErrorCodes.UNAUTHORIZED:
console.log('Credenciales inválidas');
break;
case NexaBaseErrorCodes.PLAN_LIMIT_REACHED:
console.log('Límite del plan alcanzado:', error.details);
break;
default:
console.error('Error inesperado:', error.message);
}
}`}Códigos de Error Comunes
DOCUMENT_NOT_FOUND- El documento no existeUNAUTHORIZED- Credenciales inválidasFORBIDDEN- Sin permisosPLAN_LIMIT_REACHED- Límite del plan alcanzadoVALIDATION_ERROR- Datos inválidos
📋 Formato de Respuestas
Todos los métodos del API retornan respuestas estandarizadas con la siguiente estructura:
interface StandardResponse<T> {
data: T; // Los datos solicitados
meta: { // Metadata de paginación
total: number;
page: number;
per_page: number;
total_pages: number;
};
links: { // Links de navegación
self: string;
next?: string;
prev?: string;
first: string;
last: string;
};
timestamp: string; // Timestamp de la respuesta
}🔧 Queries Avanzadas
Utiliza opciones avanzadas de filtrado, ordenamiento y paginación para queries complejas:
Filtrado Complejo
{`const users = await nexabase.listDocuments('users', {
filter: {
status: 'active',
'profile.role': 'admin',
'created_at': { '$gte': '2024-01-01' }
},
sort: '-created_at,name',
fields: 'id,name,email,profile.role',
include: 'profile,permissions',
search: 'john'
});`}Paginación
{`const firstPage = await nexabase.listDocuments('posts', {
page: 1,
per_page: 20
});
console.log(firstPage.links.next); // URL para la siguiente página`}Operadores de Filtrado
$eq- Igual a (por defecto)$ne- No igual a$gt- Mayor que$gte- Mayor o igual que$lt- Menor que$lte- Menor o igual que$in- Está en array$nin- No está en array
📚 Soporte TypeScript
El SDK está completamente tipado y ofrece autocompletado completo en TypeScript:
import {
NexaBase,
Document,
Collection,
StandardResponse,
DocumentQueryOptions
} from '@nexabase/sdk';
const nexabase: NexaBase = createNexaBaseClient(config);
const options: DocumentQueryOptions = {
page: 1,
per_page: 10,
fields: 'id,name,email'
};
const response: StandardResponse<Document[]> =
await nexabase.listDocuments('users', options);✨ Beneficios de TypeScript
- • Autocompletado en tu IDE favorito
- • Detección de errores en tiempo de desarrollo
- • Documentación inline de todos los métodos
- • Type safety en todas las operaciones
- • Intellisense para parámetros y respuestas
¿Necesitas Ayuda Específica?
Nuestro equipo de desarrollo está disponible para resolver dudas y ayudarte con implementaciones específicas.
