AgentSkillsCN

base44-sdk

用于在现有项目中使用Base44 SDK编写JavaScript/TypeScript代码。触发条件:用户希望实现功能、构建功能或使用Base44编写代码;代码中使用了‘@base44/sdk’导入;用户提及SDK方法,如base44.entities、base44.auth、base44.agents、base44.functions、base44.integrations;用户说“添加一个功能”、“实现”、“构建组件”、“编写代码”。不适用于:创建新项目、CLI命令(npx base44 create/deploy/login),或没有base44/config.jsonc文件的目录——请改用base44-cli。

SKILL.md
--- frontmatter
name: base44-sdk
description: "Use for writing JavaScript/TypeScript code with the Base44 SDK in EXISTING projects. Triggers: user wants to implement features, build functionality, or write code using Base44; code uses '@base44/sdk' imports; user mentions SDK methods like base44.entities, base44.auth, base44.agents, base44.functions, base44.integrations; user says 'add a feature', 'implement', 'build component', 'write code for'. NOT for: creating new projects, CLI commands (npx base44 create/deploy/login), or directories without base44/config.jsonc - use base44-cli instead."

Base44 Coder

Build apps on the Base44 platform using the Base44 JavaScript SDK.

⚡ IMMEDIATE ACTION REQUIRED - Read This First

This skill activates on ANY mention of "base44" or when a base44/ folder exists. DO NOT read documentation files or search the web before acting.

Your first action MUST be:

  1. Check if base44/config.jsonc exists in the current directory
  2. If YES (existing project scenario):
    • This skill (base44-sdk) handles the request
    • Implement features using Base44 SDK
    • Do NOT use base44-cli unless user explicitly requests CLI commands
  3. If NO (new project scenario):
    • Transfer to base44-cli skill for project initialization
    • This skill cannot help until project is initialized

When to Use This Skill vs base44-cli

Use base44-sdk when:

  • Building features in an EXISTING Base44 project
  • base44/config.jsonc already exists in the project
  • Base44 SDK imports are present (@base44/sdk)
  • Writing JavaScript/TypeScript code using Base44 SDK modules
  • Implementing functionality, components, or features
  • User mentions: "implement", "build a feature", "add functionality", "write code for"
  • User says "create a [type] app" and a Base44 project already exists

DO NOT USE base44-sdk for:

  • ❌ Initializing new Base44 projects (use base44-cli instead)
  • ❌ Empty directories without Base44 configuration
  • ❌ When user says "create a new Base44 project/app/site" and no project exists
  • ❌ CLI commands like npx base44 create, npx base44 deploy, npx base44 login (use base44-cli)

Skill Dependencies:

  • base44-sdk assumes a Base44 project is already initialized
  • base44-cli is a prerequisite for base44-sdk in new projects
  • If user wants to "create an app" and no Base44 project exists, use base44-cli first

State Check Logic: Before selecting this skill, verify:

  • IF (user mentions "create/build app" OR "make a project"):
    • IF (directory is empty OR no base44/config.jsonc exists): → Use base44-cli (project initialization needed)
    • ELSE: → Use base44-sdk (project exists, build features)

Quick Start

javascript
// In Base44-generated apps, base44 client is pre-configured and available

// CRUD operations
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" });

// Get current user
const user = await base44.auth.me();
javascript
// External apps
import { createClient } from "@base44/sdk";

// IMPORTANT: Use 'appId' (NOT 'clientId' or 'id')
const base44 = createClient({ appId: "your-app-id" });
await base44.auth.loginViaEmailPassword("user@example.com", "password");

SDK Modules

ModulePurposeReference
entitiesCRUD operations on data modelsentities.md
authLogin, register, user managementauth.md
agentsAI conversations and messagesbase44-agents.md
functionsBackend function invocationfunctions.md
integrationsAI, email, file uploads, custom APIsintegrations.md
connectorsOAuth tokens (service role only)connectors.md
analyticsTrack custom events and user activityanalytics.md
appLogsLog user activity in appapp-logs.md
usersInvite users to the appusers.md

For client setup and authentication modes, see client.md.

TypeScript Support: Each reference file includes a "Type Definitions" section with TypeScript interfaces and types for the module's methods, parameters, and return values.

Installation

Install the Base44 SDK:

bash
npm install @base44/sdk

Important: Never assume or hardcode the @base44/sdk package version. Always install without a version specifier to get the latest version.

Creating a Client (External Apps)

When creating a client in external apps, ALWAYS use appId as the parameter name:

javascript
import { createClient } from "@base44/sdk";

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

// ❌ WRONG - Do NOT use these:
// const base44 = createClient({ clientId: "your-app-id" });  // WRONG
// const base44 = createClient({ id: "your-app-id" });        // WRONG

Required parameter: appId (string) - Your Base44 application ID

Optional parameters:

  • token (string) - Pre-authenticated user token
  • options (object) - Configuration options
    • options.onError (function) - Global error handler

Example with error handler:

javascript
const base44 = createClient({
  appId: "your-app-id",
  options: {
    onError: (error) => {
      console.error("Base44 error:", error);
    }
  }
});

Module Selection

Working with app data?

  • Create/read/update/delete records → entities
  • Import data from file → entities.importEntities()
  • Realtime updates → entities.EntityName.subscribe()

User management?

  • Login/register/logout → auth
  • Get current user → auth.me()
  • Update user profile → auth.updateMe()
  • Invite users → users.inviteUser()

AI features?

  • Chat with AI agents → agents
  • Create new conversation → agents.createConversation()
  • Manage conversations → agents.getConversations()
  • Generate text/JSON with AI → integrations.Core.InvokeLLM()
  • Generate images → integrations.Core.GenerateImage()

Custom backend logic?

  • Run server-side code → functions.invoke()
  • Need admin access → base44.asServiceRole.functions.invoke()

External services?

  • Send emails → integrations.Core.SendEmail()
  • Upload files → integrations.Core.UploadFile()
  • Custom APIs → integrations.custom.call()
  • OAuth tokens (Google, Slack) → connectors (backend only)

Tracking and analytics?

  • Track custom events → analytics.track()
  • Log page views/activity → appLogs.logUserInApp()

Common Patterns

Filter and Sort Data

javascript
const pendingTasks = await base44.entities.Task.filter(
  { status: "pending", assignedTo: userId },  // query
  "-created_date",                             // sort (descending)
  10,                                          // limit
  0                                            // skip
);

Protected Routes (check auth)

javascript
const user = await base44.auth.me();
if (!user) {
  base44.auth.redirectToLogin(window.location.href);
  return;
}

Backend Function Call

javascript
// Frontend
const result = await base44.functions.invoke("processOrder", {
  orderId: "123",
  action: "ship"
});

// Backend function (Deno)
import { createClientFromRequest } from "@base44/sdk";

Deno.serve(async (req) => {
  const base44 = createClientFromRequest(req);
  const { orderId, action } = await req.json();
  // Process with service role for admin access
  const order = await base44.asServiceRole.entities.Orders.get(orderId);
  return Response.json({ success: true });
});

Service Role Access

Use asServiceRole in backend functions for admin-level operations:

javascript
// User mode - respects permissions
const myTasks = await base44.entities.Task.list();

// Service role - full access (backend only)
const allTasks = await base44.asServiceRole.entities.Task.list();
const token = await base44.asServiceRole.connectors.getAccessToken("slack");

Frontend vs Backend

CapabilityFrontendBackend
entities (user's data)YesYes
authYesYes
agentsYesYes
functions.invoke()YesYes
integrationsYesYes
analyticsYesYes
appLogsYesYes
usersYesYes
asServiceRole.*NoYes
connectorsNoYes

Backend functions use Deno.serve() and createClientFromRequest(req) to get a properly authenticated client.