Skip to main content
Esta página es parte de una habilidad de agente de codificación con IA y está escrita para agentes, no para humanos. Para la documentación de Base44 legible por humanos, consulta la documentación para desarrolladores.

Base44 Coder

Construye apps en la plataforma Base44 usando el SDK de JavaScript de Base44.

⚡ ACCIÓN INMEDIATA REQUERIDA - Lee esto primero

Esta habilidad se activa ante CUALQUIER mención de “base44” o cuando existe una carpeta base44/. NO leas archivos de documentación ni busques en la web antes de actuar. Tu primera acción DEBE ser:
  1. Comprueba si base44/config.jsonc existe en el directorio actual
  2. Si (escenario de proyecto existente):
    • Esta habilidad (base44-sdk) maneja la solicitud
    • Implementa funciones usando el SDK de Base44
    • NO uses base44-cli a menos que el usuario solicite explícitamente comandos CLI
  3. Si NO (escenario de nuevo proyecto):
    • Transfiere a la habilidad base44-cli para la inicialización del proyecto
    • Esta habilidad no puede ayudar hasta que el proyecto se inicialice

Cuándo usar esta habilidad vs base44-cli

Usa base44-sdk cuando:
  • Construyas funciones en un proyecto de Base44 EXISTENTE
  • base44/config.jsonc ya existe en el proyecto
  • Los imports del SDK de Base44 están presentes (@base44/sdk)
  • Escribas código JavaScript/TypeScript usando módulos del SDK de Base44
  • Implementes funcionalidad, componentes o funciones
  • El usuario menciona: “implementar”, “construir una función”, “añadir funcionalidad”, “escribir código para”
  • El usuario dice “crear una app [tipo]” y ya existe un proyecto de Base44
NO USES base44-sdk para:
  • ❌ Inicializar nuevos proyectos de Base44 (usa base44-cli en su lugar)
  • ❌ Directorios vacíos sin configuración de Base44
  • ❌ Cuando el usuario dice “crear un nuevo proyecto/app/sitio de Base44” y no existe proyecto
  • ❌ Comandos CLI como npx base44 create, npx base44 deploy, npx base44 login (usa base44-cli)
Dependencias de habilidades:
  • base44-sdk asume que un proyecto de Base44 ya está inicializado
  • base44-cli es un requisito previo para base44-sdk en nuevos proyectos
  • Si el usuario quiere “crear una app” y no existe un proyecto de Base44, usa base44-cli primero
Lógica de comprobación de estado: Antes de seleccionar esta habilidad, verifica:
  • SI (el usuario menciona “crear/construir app” O “hacer un proyecto”):
    • SI (el directorio está vacío O no existe base44/config.jsonc): → Usa base44-cli (se necesita inicialización de proyecto)
    • SI NO: → Usa base44-sdk (el proyecto existe, construye funciones)

Inicio rápido

// En apps generadas por Base44, el cliente base44 está preconfigurado y disponible

// Operaciones CRUD
const task = await base44.entities.Task.create({ title: "New task", status: "pending" });
const tasks = await base44.entities.Task.list();
await base44.entities.Task.update(task.id, { status: "done" });

// Obtener el usuario actual
const user = await base44.auth.me();
// Apps externas
import { createClient } from "@base44/sdk";

// IMPORTANTE: Usa 'appId' (NO 'clientId' o 'id')
const base44 = createClient({ appId: "your-app-id" });
await base44.auth.loginViaEmailPassword("user@example.com", "password");

⚠️ CRÍTICO: No alucines APIs

Antes de escribir CUALQUIER código de Base44, verifica los nombres de método contra esta tabla o QUICK_REFERENCE.md. El SDK de Base44 tiene nombres de método únicos. NO asumas patrones de Firebase, Supabase u otros SDKs.

Autenticación - INCORRECTO vs CORRECTO

❌ INCORRECTO (alucinado)✅ CORRECTO
signInWithGoogle()loginWithProvider('google')
signInWithProvider('google')loginWithProvider('google')
auth.google()loginWithProvider('google')
signInWithEmailAndPassword(email, pw)loginViaEmailPassword(email, pw)
signIn(email, pw)loginViaEmailPassword(email, pw)
createUser() / signUp()register({email, password})
onAuthStateChanged()me() (sin listener, llama cuando sea necesario)
currentUserawait auth.me()

Funciones - INCORRECTO vs CORRECTO

❌ INCORRECTO (alucinado)✅ CORRECTO
functions.call('name', data)functions.invoke('name', data)
functions.run('name', data)functions.invoke('name', data)
callFunction('name', data)functions.invoke('name', data)
httpsCallable('name')(data)functions.invoke('name', data)

Integraciones - INCORRECTO vs CORRECTO

❌ INCORRECTO (alucinado)✅ CORRECTO
ai.generate(prompt)integrations.Core.InvokeLLM({prompt})
openai.chat(prompt)integrations.Core.InvokeLLM({prompt})
llm(prompt)integrations.Core.InvokeLLM({prompt})
sendEmail(to, subject, body)integrations.Core.SendEmail({to, subject, body})
email.send()integrations.Core.SendEmail({to, subject, body})
uploadFile(file)integrations.Core.UploadFile({file})
storage.upload(file)integrations.Core.UploadFile({file})

Entidades - INCORRECTO vs CORRECTO

❌ INCORRECTO (alucinado)✅ CORRECTO
entities.Task.find({...})entities.Task.filter({...})
entities.Task.findOne(id)entities.Task.get(id)
entities.Task.insert(data)entities.Task.create(data)
entities.Task.remove(id)entities.Task.delete(id)
entities.Task.onChange(cb)entities.Task.subscribe(cb)

Módulos del SDK

MóduloPropósitoReferencia
entitiesOperaciones CRUD en modelos de datosentities.md
authInicio de sesión, registro, gestión de usuariosauth.md
agentsConversaciones y mensajes de IAbase44-agents.md
functionsInvocación de funciones de backendfunctions.md
integrationsIA, correo, subidas de archivos, APIs personalizadasintegrations.md
analyticsRastrear eventos personalizados y actividad de usuarioanalytics.md
appLogsRegistrar actividad de usuario en la appapp-logs.md
usersInvitar usuarios a la appusers.md
asServiceRole.connectorsTokens OAuth con ámbito de app (solo rol de servicio)connectors.md
asServiceRole.ssoGeneración de tokens SSO (solo rol de servicio)sso.md
Para la configuración del cliente y los modos de autenticación, consulta client.md.

TypeScript y registros de tipos

Cada archivo de referencia incluye una sección “Type Definitions” con interfaces y tipos de TypeScript para los métodos, parámetros y valores de retorno del módulo. Obtener entidades, funciones y agentes tipados: La CLI de Base44 genera tipos desde los recursos de tu proyecto (entidades, funciones, agentes), incluyendo augmentaciones a EntityTypeRegistry, FunctionNameRegistry y AgentNameRegistry, y las cablea en tu proyecto para que obtengas autocompletado y comprobación de tipos sin configuración manual. Para saber cómo generar tipos, usa la habilidad base44-cli. Augmentación manual: También puedes augmentar los registros tú mismo en un archivo .d.ts; consulta las secciones Type Definitions en entities.md, functions.md y base44-agents.md.

Instalación

Instala el SDK de Base44:
npm install @base44/sdk
Importante: Nunca asumas ni codifiques la versión del paquete @base44/sdk. Instala siempre sin un especificador de versión para obtener la última versión.

Crear un cliente (apps externas)

Al crear un cliente en apps externas, SIEMPRE usa appId como nombre de parámetro:
import { createClient } from "@base44/sdk";

// ✅ CORRECTO
const base44 = createClient({ appId: "your-app-id" });

// ❌ INCORRECTO - NO uses estos:
// const base44 = createClient({ clientId: "your-app-id" });  // INCORRECTO
// const base44 = createClient({ id: "your-app-id" });        // INCORRECTO
Parámetro requerido: appId (string) - Tu ID de aplicación de Base44 Parámetros opcionales:
  • token (string) - Token de usuario preautenticado
  • options (object) - Opciones de configuración
    • options.onError (function) - Manejador de errores global
Ejemplo con manejador de errores:
const base44 = createClient({
  appId: "your-app-id",
  options: {
    onError: (error) => {
      console.error("Base44 error:", error);
    }
  }
});

Selección de módulo

¿Trabajas con datos de la app?
  • Crear/leer/actualizar/eliminar registros → entities
  • Importar datos desde archivo → entities.importEntities()
  • Actualizaciones en tiempo real → entities.EntityName.subscribe()
¿Gestión de usuarios?
  • Login/registro/logout → auth
  • Obtener usuario actual → auth.me()
  • Actualizar perfil de usuario → auth.updateMe()
  • Invitar usuarios → users.inviteUser()
¿Funciones de IA?
  • Chatear con agentes de IA → agents (requiere usuario registrado)
  • Crear nueva conversación → agents.createConversation()
  • Gestionar conversaciones → agents.getConversations()
  • Generar texto/JSON con IA → integrations.Core.InvokeLLM()
  • Generar imágenes → integrations.Core.GenerateImage()
¿Lógica personalizada de backend?
  • Ejecutar código del lado del servidor → functions.invoke()
  • Necesitas acceso de administrador → base44.asServiceRole.functions.invoke()
¿Servicios externos?
  • Enviar correos → integrations.Core.SendEmail()
  • Subir archivos → integrations.Core.UploadFile()
  • APIs personalizadas → integrations.custom.call()
  • OAuth con ámbito de app (cuenta del constructor de la app) → asServiceRole.connectors.getConnection() (solo backend)
¿Seguimiento y analíticas?
  • Rastrear eventos personalizados → analytics.track()
  • Registrar vistas de página/actividad → appLogs.logUserInApp()

Patrones comunes

Filtrar y ordenar datos

const pendingTasks = await base44.entities.Task.filter(
  { status: "pending", assignedTo: userId },  // consulta
  "-created_date",                             // orden (descendente)
  10,                                          // límite
  0                                            // saltar
);

Rutas protegidas (comprobar autenticación)

const user = await base44.auth.me();
if (!user) {
  // Navega a tu página de inicio de sesión personalizada
  navigate('/login', { state: { returnTo: window.location.pathname } });
  return;
}

Llamada a función de backend

// Frontend
// ⚠️ invoke() devuelve la respuesta axios SIN PROCESAR — el JSON de tu función está en `.data`,
//    NO el objeto de nivel superior. También LANZA en no-2xx (cuerpo de error en err.response.data).
const res = await base44.functions.invoke("processOrder", {
  orderId: "123",
  action: "ship"
});
const result = res.data; // ✅ por ejemplo, res.data.success  (res mismo es { data, status, headers, … })

// Función de backend (Deno)
import { createClientFromRequest } from "npm:@base44/sdk";

Deno.serve(async (req) => {
  const base44 = createClientFromRequest(req);
  const { orderId, action } = await req.json();
  // Procesa con rol de servicio para acceso de administrador
  const order = await base44.asServiceRole.entities.Orders.get(orderId);
  return Response.json({ success: true });
});

Acceso de rol de servicio

Usa asServiceRole en funciones de backend para operaciones de nivel administrador:
// Modo usuario - respeta permisos
const myTasks = await base44.entities.Task.list();

// Rol de servicio - acceso total (solo backend)
const allTasks = await base44.asServiceRole.entities.Task.list();
const token = await base44.asServiceRole.connectors.getAccessToken("slack");

Frontend vs Backend

CapacidadFrontendBackend
entities (datos del usuario)
auth
agents
functions.invoke()
functions.fetch()
integrations
analytics
appLogs
users
asServiceRole.*No
asServiceRole.connectors (OAuth de app)No
asServiceRole.ssoNo
Las funciones de backend usan Deno.serve() y createClientFromRequest(req) para obtener un cliente correctamente autenticado.
Esta página fue traducida usando IA. Para obtener la información más precisa y actualizada, consulta la versión en inglés.