Serenities SDK
The official JavaScript/TypeScript SDK for building apps with Serenities.
Quick Start
The SDK is auto-configured in App Builder projects. Just import and use.
Import Patterns
Option 1: Default Import (Recommended)
import serenities from '../api/sdk';
// Use the pre-configured client
await serenities.entities.Tasks.list();
await serenities.user.me();
await serenities.ai.invoke({ prompt: '...' });Option 2: Named Imports
import { entities, user, ai, payments, flows } from '../api/sdk';
await entities.Tasks.list();
await user.me();Option 3: Custom Client (NPM / API Key)
import { createClient } from '@serenities/sdk';
const client = createClient({
projectId: 'your-project-id',
apiBase: 'https://app.serenitiesai.com',
apiKey: 'mk_live_xxx', // optional, for server-side
});
await client.entities.Tasks.list();Available Modules
entities
CRUD operations for your tables
user
Authentication and user management
ai
LLM invocation and image generation
Send transactional emails
files
File upload and management
payments
Stripe integration
flows
Trigger automation flows
entities - Table CRUD
Access your database tables dynamically. Use table names exactly as they appear in your database.
List All Rows
const tasks = await serenities.entities.Tasks.list();
// With sorting and limit
const recent = await serenities.entities.Tasks.list('-createdAt', 50);Create
const newTask = await serenities.entities.Tasks.create({
title: 'New Task',
status: 'pending',
priority: 1
});Update
await serenities.entities.Tasks.update('row-id', {
status: 'completed'
});Delete
await serenities.entities.Tasks.delete('row-id');Get Single Row
const task = await serenities.entities.Tasks.get('row-id');Filter
const completed = await serenities.entities.Tasks.filter({
status: 'completed'
});user - Authentication
// Get current user (null if not logged in)
const currentUser = await serenities.user.me();
// Redirect to login page
serenities.user.login();
serenities.user.login('/dashboard'); // with redirect after login
// Log out
await serenities.user.logout();
// Sign up new user
await serenities.user.signup(email, password, name, profileData);
// Password reset flow
await serenities.user.forgotPassword(email);
await serenities.user.resetPassword(token, newPassword);
// Email verification
await serenities.user.verifyEmail(token);
await serenities.user.resendVerification(email);ai - LLM & Image Generation
Invoke LLM
const response = await serenities.ai.invoke({
prompt: 'Summarize this article...',
model: 'gpt-4', // optional
systemPrompt: 'You are a helpful assistant' // optional
});
console.log(response.text);Generate Image
const image = await serenities.ai.generateImage({
prompt: 'A sunset over mountains'
});email - Send Emails
await serenities.email.send({
to: 'user@example.com',
subject: 'Welcome!',
body: '<h1>Hello</h1><p>Welcome to our app!</p>'
});files - File Upload
const file = await serenities.files.upload({
file: base64Content,
filename: 'document.pdf',
folder: 'uploads'
});payments - Stripe Integration
// List available products
const products = await serenities.payments.listProducts();
// Create checkout session
const { url } = await serenities.payments.createCheckoutSession({
priceId: 'price_xxxxx',
successUrl: '/success',
cancelUrl: '/cancel'
});
window.location.href = url;flows - Automation
// Invoke a flow by name
const result = await serenities.flows.invoke('send-welcome-email', {
userId: 'user-123',
email: 'user@example.com'
});Complete Example
A full React component showing authentication and CRUD operations:
import React, { useState, useEffect } from 'react';
import serenities from '../api/sdk';
export default function TasksPage() {
const [tasks, setTasks] = useState([]);
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
async function loadData() {
// Check auth
const currentUser = await serenities.user.me();
setUser(currentUser);
// Load tasks
const allTasks = await serenities.entities.Tasks.list('-createdAt');
setTasks(allTasks);
setLoading(false);
}
loadData();
}, []);
const addTask = async (title) => {
const newTask = await serenities.entities.Tasks.create({
title,
status: 'pending'
});
setTasks([newTask, ...tasks]);
};
const completeTask = async (id) => {
await serenities.entities.Tasks.update(id, { status: 'completed' });
setTasks(tasks.map(t =>
t.id === id ? { ...t, status: 'completed' } : t
));
};
const deleteTask = async (id) => {
await serenities.entities.Tasks.delete(id);
setTasks(tasks.filter(t => t.id !== id));
};
if (loading) return <div className="p-8">Loading...</div>;
if (!user) {
return (
<div className="p-8 text-center">
<p className="mb-4">Please log in to view tasks</p>
<button
onClick={() => serenities.user.login()}
className="px-4 py-2 bg-blue-500 text-white rounded"
>
Log In
</button>
</div>
);
}
return (
<div className="p-8 max-w-2xl mx-auto">
<h1 className="text-2xl font-bold mb-6">My Tasks</h1>
{/* ... rest of UI */}
</div>
);
}NPM Installation (Coming Soon)
The SDK will be available on npm for use outside App Builder:
npm install @serenities/sdk