JavaScript/TypeScript SDK
Official JavaScript/TypeScript SDK for TalonAI with full type support, React hooks, and Express middleware.
Installation
npm install @talonai/sdk
Quick Start
index.ts
1import TalonAI from '@talonai/sdk';23const talon = new TalonAI('sk_live_your_api_key');45// Analyze content6const result = await talon.analyze('Hello, how are you?');7console.log(result.allowed); // true8console.log(result.riskScore); // 0
Client Options
config.ts
1const talon = new TalonAI('sk_live_...', {2 // Base URL (default: https://api.talonai.io)3 baseUrl: 'https://api.talonai.io',45 // Request timeout in milliseconds (default: 30000)6 timeout: 30000,78 // Default risk threshold (0-100, default: 70)9 riskThreshold: 70,1011 // Retry configuration12 maxRetries: 3,13 retryDelay: 1000,1415 // Custom fetch implementation16 fetch: customFetch,17});
API Methods
analyze()
Analyze content for security threats. Returns detailed analysis including risk score and detected threats.
analyze.ts
1const result = await talon.analyze(content, {2 // Optional: Custom categories to check3 categories: ['PROMPT_INJECTION', 'PII_EXPOSURE'],45 // Optional: Enable detailed explanations6 detailed: true,78 // Optional: Custom risk threshold for this request9 riskThreshold: 80,1011 // Optional: Additional context12 context: {13 userId: 'user123',14 sessionId: 'session456',15 },16});1718// Result structure19interface AnalyzeResult {20 allowed: boolean; // Whether content is allowed21 riskScore: number; // 0-100 risk score22 action: 'ALLOW' | 'BLOCK' | 'FLAG' | 'MODIFY';23 threats: Threat[]; // Detected threats24 processingTimeMs: number;25}
protect()
Analyze and sanitize content. Returns sanitized content with PII and sensitive data redacted.
protect.ts
1const result = await talon.protect('My email is john@example.com');23console.log(result.sanitizedContent);4// "My email is [EMAIL_REDACTED]"56console.log(result.allowed); // true (after sanitization)7console.log(result.analysis.threats);8// [{ category: 'PII_EXPOSURE', severity: 'MEDIUM', ... }]
isAllowed()
Quick check if content is allowed. Returns a boolean.
is-allowed.ts
1const allowed = await talon.isAllowed(userInput);23if (!allowed) {4 return res.status(403).json({ error: 'Content not allowed' });5}
getRiskScore()
Get the risk score for content (0-100).
risk-score.ts
1const score = await talon.getRiskScore(content);23if (score > 70) {4 flagForReview(content);5}
Express Middleware
Automatically protect all incoming requests with the Express middleware:
server.ts
1import express from 'express';2import { talonMiddleware } from '@talonai/sdk/express';34const app = express();56// Apply globally7app.use(talonMiddleware({8 apiKey: 'sk_live_...',9 blockOnThreat: true,10 riskThreshold: 70,11 contentFields: ['prompt', 'message', 'content'],12}));1314// Or apply to specific routes15app.post('/chat', talonMiddleware({ apiKey: '...' }), (req, res) => {16 // req.talonAnalysis contains the analysis result17 console.log(req.talonAnalysis?.riskScore);18});
Middleware Options
The middleware supports custom error handlers, content field extraction, and fail-open/fail-closed modes.
React Hooks
Use TalonAI in React applications with hooks:
ChatInput.tsx
1import { TalonProvider, useTalon } from '@talonai/sdk/react';23// Wrap your app4function App() {5 return (6 <TalonProvider apiKey="sk_live_...">7 <ChatInput />8 </TalonProvider>9 );10}1112// Use in components13function ChatInput() {14 const { analyze, isLoading, error } = useTalon();15 const [message, setMessage] = useState('');1617 const handleSubmit = async () => {18 const result = await analyze(message);1920 if (!result.allowed) {21 alert('Message blocked: ' + result.threats[0]?.description);22 return;23 }2425 // Safe to send26 sendMessage(message);27 };2829 return (30 <div>31 <input32 value={message}33 onChange={(e) => setMessage(e.target.value)}34 disabled={isLoading}35 />36 <button onClick={handleSubmit} disabled={isLoading}>37 {isLoading ? 'Checking...' : 'Send'}38 </button>39 {error && <p className="error">{error.message}</p>}40 </div>41 );42}
Error Handling
errors.ts
1import TalonAI, {2 TalonAIError,3 AuthenticationError,4 RateLimitError,5 ValidationError,6} from '@talonai/sdk';78try {9 const result = await talon.analyze(content);10} catch (error) {11 if (error instanceof AuthenticationError) {12 // Invalid API key13 console.error('Check your API key');14 } else if (error instanceof RateLimitError) {15 // Rate limited - wait and retry16 console.log(`Retry after ${error.retryAfter}s`);17 await sleep(error.retryAfter * 1000);18 } else if (error instanceof ValidationError) {19 // Invalid request20 console.error('Invalid request:', error.message);21 } else if (error instanceof TalonAIError) {22 // Other API error23 console.error(`API error [${error.code}]: ${error.message}`);24 }25}
TypeScript Support
Full TypeScript support with exported types:
types.ts
1import type {2 AnalyzeResult,3 ProtectResult,4 Threat,5 ThreatCategory,6 ThreatSeverity,7 TalonOptions,8 AnalyzeOptions,9} from '@talonai/sdk';1011// All types are exported and documented12const handleResult = (result: AnalyzeResult) => {13 result.threats.forEach((threat: Threat) => {14 console.log(threat.category, threat.severity, threat.confidence);15 });16};