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 carpetabase44/. NO leas archivos de documentación ni busques en la web antes de actuar.
Tu primera acción DEBE ser:
- Comprueba si
base44/config.jsoncexiste en el directorio actual - Si SÍ (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
- 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.jsoncya 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
- ❌ Inicializar nuevos proyectos de Base44 (usa
base44-clien 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(usabase44-cli)
base44-sdkasume que un proyecto de Base44 ya está inicializadobase44-clies un requisito previo parabase44-sdken nuevos proyectos- Si el usuario quiere “crear una app” y no existe un proyecto de Base44, usa
base44-cliprimero
- 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)
- SI (el directorio está vacío O no existe
Inicio rápido
⚠️ 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) |
currentUser | await 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ódulo | Propósito | Referencia |
|---|---|---|
entities | Operaciones CRUD en modelos de datos | entities.md |
auth | Inicio de sesión, registro, gestión de usuarios | auth.md |
agents | Conversaciones y mensajes de IA | base44-agents.md |
functions | Invocación de funciones de backend | functions.md |
integrations | IA, correo, subidas de archivos, APIs personalizadas | integrations.md |
analytics | Rastrear eventos personalizados y actividad de usuario | analytics.md |
appLogs | Registrar actividad de usuario en la app | app-logs.md |
users | Invitar usuarios a la app | users.md |
asServiceRole.connectors | Tokens OAuth con ámbito de app (solo rol de servicio) | connectors.md |
asServiceRole.sso | Generación de tokens SSO (solo rol de servicio) | sso.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 aEntityTypeRegistry, 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:@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 usaappId como nombre de parámetro:
appId (string) - Tu ID de aplicación de Base44
Parámetros opcionales:
token(string) - Token de usuario preautenticadooptions(object) - Opciones de configuraciónoptions.onError(function) - Manejador de errores global
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()
- Login/registro/logout →
auth - Obtener usuario actual →
auth.me() - Actualizar perfil de usuario →
auth.updateMe() - Invitar usuarios →
users.inviteUser()
- 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()
- Ejecutar código del lado del servidor →
functions.invoke() - Necesitas acceso de administrador →
base44.asServiceRole.functions.invoke()
- 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)
- Rastrear eventos personalizados →
analytics.track() - Registrar vistas de página/actividad →
appLogs.logUserInApp()
Patrones comunes
Filtrar y ordenar datos
Rutas protegidas (comprobar autenticación)
Llamada a función de backend
Acceso de rol de servicio
UsaasServiceRole en funciones de backend para operaciones de nivel administrador:
Frontend vs Backend
| Capacidad | Frontend | Backend |
|---|---|---|
entities (datos del usuario) | Sí | Sí |
auth | Sí | Sí |
agents | Sí | Sí |
functions.invoke() | Sí | Sí |
functions.fetch() | Sí | Sí |
integrations | Sí | Sí |
analytics | Sí | Sí |
appLogs | Sí | Sí |
users | Sí | Sí |
asServiceRole.* | No | Sí |
asServiceRole.connectors (OAuth de app) | No | Sí |
asServiceRole.sso | No | Sí |
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.

