Easydata SDK - Capture AI interactions for monetization
npm install easydata-sdkThe Easydata SDK - Capture AI interactions and monetize them.
Features:
- 🚀 Lazy initialization (no side effects at import)
- 🛡️ Graceful degradation (works as no-op when backend unavailable)
- ⚡ Edge runtime compatible (Vercel Edge, Cloudflare Workers)
- 📦 Framework agnostic (Next.js, Vite, plain JS)
- 🎨 Pre-built React consent components
``bash`
npm install @easydata/sdk
`typescript
import { initEasydata } from '@easydata/sdk';
// Initialize lazily (async, safe for SSR)
const easydata = await initEasydata({
apiKey: process.env.EASYDATA_API_KEY,
companyId: process.env.EASYDATA_COMPANY_ID,
industry: 'code',
});
// Set consent after user agrees
easydata.setConsent(true);
// Wrap your AI calls
const { response, recordEdit } = await easydata.wrapOpenAI(
() => openai.chat.completions.create({ model: 'gpt-4', messages }),
{ messages },
'gpt-4'
);
// Record user edits
await recordEdit(userEditedText);
`
`typescript
// lib/easydata.ts
import { createEasydata, EasydataClient } from '@easydata/sdk';
let easydata: EasydataClient | null = null;
export function getEasydata(): EasydataClient {
if (!easydata) {
easydata = createEasydata({
apiKey: process.env.EASYDATA_API_KEY,
companyId: process.env.EASYDATA_COMPANY_ID,
gracefulDegradation: true, // Won't crash if backend is down
});
}
return easydata;
}
`
`typescript
// app/api/chat/route.ts
export const runtime = 'edge';
import { createEasydata } from '@easydata/sdk';
export async function POST(req: Request) {
const easydata = createEasydata({
apiKey: process.env.EASYDATA_API_KEY!,
gracefulDegradation: true,
});
// Works in Edge!
const { response, recordEdit } = await easydata.wrapOpenAI(...);
return Response.json({ ... });
}
`
If you need builds to succeed even without the SDK configured:
`typescript
import { createEasydata, createStub } from '@easydata/sdk';
const isEnabled = !!process.env.EASYDATA_API_KEY;
export const easydata = isEnabled
? createEasydata({ apiKey: process.env.EASYDATA_API_KEY })
: createStub(); // No-op, all methods work but do nothing
`
Or import the stub directly:
`typescript`
import { createStub } from '@easydata/sdk/stub';
const easydata = createStub();
`tsx
import { EasydataProvider, ConsentBanner, useEasydata } from '@easydata/sdk/react';
function App() {
return (
apiKey: process.env.NEXT_PUBLIC_EASYDATA_API_KEY,
companyId: process.env.NEXT_PUBLIC_EASYDATA_COMPANY_ID,
}}
disabled={!process.env.NEXT_PUBLIC_EASYDATA_API_KEY} // Safe for builds
>
);
}
function ChatInterface() {
const { client, consent, setConsent, isConnected } = useEasydata();
if (!isConnected) {
return
}
// Use client.wrapOpenAI(), etc.
}
`
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| apiKey | string | env var | Your API key (or EASYDATA_API_KEY) |companyId
| | string | env var | Company ID (or EASYDATA_COMPANY_ID) |endpoint
| | string | https://api.easydata.ai/v1 | Backend URL |debug
| | boolean | auto | Enable logging (true in dev) |batchSize
| | number | 10 | Entries before auto-flush |flushInterval
| | number | 30000 | Auto-flush interval (ms) |industry
| | string | 'general' | Industry category |enabled
| | boolean | true | Enable/disable SDK |gracefulDegradation
| | boolean | true | No-op when backend unavailable |
typescript
import { createStub } from '@easydata/sdk/stub';
`$3
`typescript
const easydata = createEasydata(config);
await easydata.checkConnection(); // Call when ready
`$3
With gracefulDegradation: true` (default), the SDK operates as a no-op.- All data is anonymized before upload
- PII is automatically stripped
- Users can withdraw consent at any time
- Data only collected with explicit consent
MIT