API Reference (Server-side)
TypeScript API for server-side usage in API routes
This page documents the TypeScript API for @constela/ai. Use this API in:
- API Routes (
src/api/*.ts) - Server-side scripts
- Build-time data loaders
For DSL-based usage (recommended for most cases), see Examples.
createDslGenerator(options)
Creates a new DSL generator instance.
typescript
import { createDslGenerator } from '@constela/ai';
const generator = createDslGenerator({
provider: 'anthropic',
security: {
allowedTags: ['div', 'button', 'input'],
allowedActions: ['set', 'update'],
},
});Options
typescript
interface DslGeneratorOptions {
provider: 'anthropic' | 'openai';
providerInstance?: AiProvider;
security?: SecurityOptions;
context?: GenerationContext;
}
interface SecurityOptions {
allowedTags?: string[];
allowedActions?: string[];
allowedUrlPatterns?: string[];
maxNestingDepth?: number;
}
interface GenerationContext {
existingComponents?: string[];
theme?: Record<string, unknown>;
schema?: Record<string, unknown>;
}generator.generate(options)
Generates DSL from a prompt.
typescript
const result = await generator.generate({
prompt: 'A card with title and description',
output: 'component',
});Options
typescript
interface GenerateOptions {
prompt: string;
output: 'component' | 'view' | 'suggestion';
context?: GenerationContext;
security?: SecurityOptions;
}Return Value
typescript
interface GenerateResult {
dsl: Record<string, unknown>;
raw: string;
validated: boolean;
errors?: string[];
}generator.validate(dsl, security?)
Validates DSL against security rules.
typescript
const result = generator.validate(dsl, {
allowedTags: ['div', 'span', 'button'],
});
if (!result.valid) {
console.error('Validation errors:', result.errors);
}Return Value
typescript
interface ValidationResult {
valid: boolean;
errors?: string[];
}Provider Access
getProvider(type)
Get a provider instance by type.
typescript
import { getProvider } from '@constela/ai';
const provider = getProvider('anthropic');Direct Provider Creation
typescript
import { AnthropicProvider, OpenAIProvider } from '@constela/ai';
const anthropic = new AnthropicProvider({
model: 'claude-sonnet-4-20250514',
});
const openai = new OpenAIProvider({
model: 'gpt-4o',
});Provider Methods
typescript
const response = await provider.generate('Generate a button component', {
systemPrompt: 'You are a UI component generator...',
maxTokens: 4096,
temperature: 0.7,
});Security Utilities
isForbiddenTag(tag)
Check if a tag is forbidden.
typescript
import { isForbiddenTag } from '@constela/ai';
isForbiddenTag('script'); // true
isForbiddenTag('div'); // falseisForbiddenAction(action)
Check if an action is forbidden.
typescript
import { isForbiddenAction } from '@constela/ai';
isForbiddenAction('import'); // true
isForbiddenAction('set'); // falseisRestrictedAction(action)
Check if an action is restricted (requires whitelist).
typescript
import { isRestrictedAction } from '@constela/ai';
isRestrictedAction('fetch'); // true
isRestrictedAction('set'); // falsevalidateUrl(url, options)
Validate a URL against security rules.
typescript
import { validateUrl } from '@constela/ai';
const result = validateUrl('https://example.com/api', {
allowedDomains: ['example.com'],
allowRelative: true,
});Constants
typescript
import { FORBIDDEN_TAGS, FORBIDDEN_ACTIONS, RESTRICTED_ACTIONS } from '@constela/ai';
// FORBIDDEN_TAGS: ['script', 'iframe', 'object', 'embed', 'form']
// FORBIDDEN_ACTIONS: ['import', 'call', 'dom']
// RESTRICTED_ACTIONS: ['fetch']Error Classes
AiError
Base error class for AI-related errors.
typescript
import { AiError } from '@constela/ai';
try {
await generator.generate({ prompt, output: 'component' });
} catch (err) {
if (err instanceof AiError) {
console.error(err.code, err.message);
}
}Error codes:
PROVIDER_NOT_CONFIGURED- API key not setPROVIDER_NOT_FOUND- Unknown provider typeAPI_ERROR- Provider API call failedRATE_LIMIT_EXCEEDED- API rate limit hit
ValidationError
Thrown when DSL validation fails.
typescript
import { ValidationError } from '@constela/ai';
if (err instanceof ValidationError) {
console.error('Violations:', err.violations);
}SecurityError
Thrown when a security rule is violated.
typescript
import { SecurityError } from '@constela/ai';
if (err instanceof SecurityError) {
console.error('Violation:', err.violation);
}