{"_id":"@airbolt/sdk","_rev":"14-cf92ab03b16a8e2cc2d9a78dc0983e67","name":"@airbolt/sdk","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@airbolt/sdk","version":"0.1.0","_id":"@airbolt/sdk@0.1.0","maintainers":[{"name":"mkw5053","email":"mark@airbolt.ai"}],"dist":{"shasum":"f5a927c60a3ae20bd6c89585f87bc601bb42d484","tarball":"https://registry.npmjs.org/@airbolt/sdk/-/sdk-0.1.0.tgz","fileCount":14,"integrity":"sha512-z10CFKe9XQA6KaIbeinJ8uZ3PIt5+Hn0tobjoOEkSJRTyUl0KNQXHRRDLU37VMP5hiL9P3Lr/m0v0p47LUcdtw==","signatures":[{"sig":"MEQCIGlOqII2ruxigMCN4+Wk0H62+M+5Y9Bdr85waVOCEXONAiAlCSyKIpyWkeVKAAb2fO5jOwjA9XievoRhSXSJ8+xdKw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":371444},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.mjs","require":"./dist/react/index.js"}},"gitHead":"8e2f847cf68b9c4e6b1cf38a48eeb3c2672015f6","scripts":{"dev":"tsup --watch","docs":"typedoc","test":"vitest","build":"tsup","type-check":"tsc --noEmit"},"_npmUser":{"name":"mkw5053","email":"mark@airbolt.ai"},"_npmVersion":"10.9.0","description":"Lightweight SDK for Airbolt's AI chat platform","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","vitest":"^1.0.0","typedoc":"^0.28.12","typescript":"^5.0.0","@types/node":"^20.0.0","@types/react":"^18.0.0","@testing-library/react":"^16.3.0","typedoc-plugin-markdown":"^4.8.1","@testing-library/jest-dom":"^6.8.0","@testing-library/react-hooks":"^8.0.1"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0_1757175281312_0.6941410318817693","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@airbolt/sdk","version":"0.2.0","description":"Lightweight SDK for Airbolt's AI chat platform","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","import":"./dist/index.mjs"},"./react":{"types":"./dist/react/index.d.ts","require":"./dist/react/index.js","import":"./dist/react/index.mjs"}},"scripts":{"build":"tsup","dev":"tsup --watch","docs":"typedoc","lint":"eslint .","lint:fix":"eslint . --fix","test":"vitest run","type-check":"tsc --noEmit"},"engines":{"node":">=18"},"devDependencies":{"@testing-library/jest-dom":"^6.8.0","@testing-library/react":"^16.3.0","@testing-library/react-hooks":"^8.0.1","@types/node":"^20.0.0","@types/react":"^18.0.0","jsdom":"^26.1.0","tsup":"^8.0.0","typedoc":"^0.28.12","typedoc-plugin-markdown":"^4.8.1","typescript":"^5.0.0","vitest":"^1.0.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_id":"@airbolt/sdk@0.2.0","gitHead":"7594095afe19a2d3de51f3231379b24aac267670","_nodeVersion":"23.11.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-CZk/x14t9/juYqpqHN56HHIY9URSS0oIz7yGDVx3sYJjxVFYTWJXYQQhzyAoOu4oDj2TdNDGOaNg1EPyxsWCKA==","shasum":"31348504f5316413bb74ed221da2676d6ed9e342","tarball":"https://registry.npmjs.org/@airbolt/sdk/-/sdk-0.2.0.tgz","fileCount":14,"unpackedSize":393702,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGnJ1sFZDJ7i+4AWBsccBYfyJ0vrUOYJgpIaXlfdw6qbAiBocJQ7+VAFMqsjM6U1vDCERbccrl03FlrCkANepojQAw=="}]},"_npmUser":{"name":"eric-airbolt","email":"eric@airbolt.ai"},"directories":{},"maintainers":[{"name":"mkw5053","email":"mark@airbolt.ai"},{"name":"eric-airbolt","email":"eric@airbolt.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.2.0_1758172324757_0.7401411240911155"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-06T16:14:41.247Z","modified":"2025-09-18T05:12:05.257Z","0.3.0":"2025-07-15T04:55:35.638Z","0.3.1":"2025-07-16T02:59:57.489Z","0.4.0":"2025-07-16T17:05:51.960Z","0.5.0":"2025-07-23T15:25:37.149Z","0.5.1":"2025-07-23T20:13:45.186Z","0.6.0":"2025-07-24T09:03:00.278Z","0.8.0":"2025-07-28T13:40:23.904Z","0.9.0":"2025-08-12T15:52:51.438Z","0.2.0-alpha.1":"2025-09-03T17:52:27.578Z","0.1.0":"2025-09-06T16:14:41.500Z","0.2.0":"2025-09-18T05:12:05.043Z"},"description":"Lightweight SDK for Airbolt's AI chat platform","maintainers":[{"name":"mkw5053","email":"mark@airbolt.ai"},{"name":"eric-airbolt","email":"eric@airbolt.ai"}],"readme":"# Airbolt SDK\n\nMinimal SDK for adding AI chat to your app. Works with vanilla JavaScript, React hooks, or a pre-built React component.\n\n## Installation\n\n```bash\nnpm install @airbolt/sdk\n```\n\n## Setup\n\n1. Sign up at [airbolt.ai](https://airbolt.ai) and create a project\n2. Add your OpenAI API key in project settings\n3. Copy your project ID (starts with `proj_`)\n\n## Usage\n\n### Vanilla JavaScript/TypeScript\n\n```javascript\nimport { Airbolt } from \"@airbolt/sdk\";\n\nconst client = new Airbolt({\n  projectId: \"proj_YOUR_PROJECT_ID\",\n});\n\n// Basic chat\nconst response = await client.chat({\n  model: \"gpt-4o-mini\",\n  messages: [{ role: \"user\", content: \"Hello!\" }],\n});\n\nconsole.log(response.choices[0].message.content);\n\n// Streaming\nconst stream = await client.stream({\n  model: \"gpt-4o-mini\",\n  messages: [{ role: \"user\", content: \"Tell me a story\" }],\n});\n\nfor await (const chunk of stream) {\n  process.stdout.write(chunk.choices[0].delta.content || \"\");\n}\n```\n\n### React Hook\n\n```jsx\nimport { useChat } from \"@airbolt/sdk/react\";\n\nfunction ChatApp() {\n  const { messages, input, handleInputChange, handleSubmit, isLoading } =\n    useChat({\n      projectId: \"proj_YOUR_PROJECT_ID\",\n    });\n\n  return (\n    <div>\n      {messages.map((m, i) => (\n        <div key={i}>\n          {m.role}: {m.content}\n        </div>\n      ))}\n      <form onSubmit={handleSubmit}>\n        <input\n          value={input}\n          onChange={handleInputChange}\n          disabled={isLoading}\n        />\n        <button type=\"submit\">Send</button>\n      </form>\n    </div>\n  );\n}\n```\n\n### Pre-built Component\n\n```jsx\nimport { ChatInterface } from \"@airbolt/sdk/react\";\n\nfunction App() {\n  return (\n    <ChatInterface\n      projectId=\"proj_YOUR_PROJECT_ID\"\n      theme=\"light\" // or \"dark\"\n      height=\"600px\"\n    />\n  );\n}\n```\n\n## Configuration Options\n\n### Client Configuration\n\n```javascript\nconst client = new Airbolt({\n  projectId: \"proj_YOUR_PROJECT_ID\", // Required\n  endUserId: \"user_123\", // Optional: Track end users\n  debug: true, // Optional: Enable console logging\n});\n```\n\n### React Hook Options\n\n```javascript\nconst {\n  messages, // Message history\n  input, // Current input\n  isLoading, // Loading state\n  error, // Error state\n  handleInputChange, // Input handler\n  handleSubmit, // Submit handler\n  append, // Add message\n  reload, // Retry last\n  stop, // Stop stream\n} = useChat({\n  projectId: \"proj_YOUR_PROJECT_ID\",\n  model: \"gpt-4o-mini\", // Optional: Default model\n  onFinish: (message) => {}, // Optional: Message callback\n  onError: (error) => {}, // Optional: Error callback\n});\n```\n\n### Component Props\n\n```jsx\n<ChatInterface\n  projectId=\"proj_YOUR_PROJECT_ID\" // Required\n  model=\"gpt-4o-mini\" // Optional: AI model\n  temperature={0.7} // Optional: Creativity (0-2)\n  maxTokens={1000} // Optional: Response length\n  theme=\"light\" // Optional: \"light\" or \"dark\"\n  height=\"600px\" // Optional: Component height\n  placeholder=\"Type a message...\" // Optional: Input placeholder\n  onMessage={(msg) => {}} // Optional: Message callback\n  onError={(err) => {}} // Optional: Error callback\n/>\n```\n\n## TypeScript\n\n```typescript\nimport {\n  Airbolt,\n  AirboltConfig,\n  ChatParams,\n  ChatResponse,\n  Message,\n} from \"@airbolt/sdk\";\n\nconst client: Airbolt = new Airbolt({\n  projectId: \"proj_YOUR_PROJECT_ID\",\n});\n\nconst response: ChatResponse = await client.chat({\n  model: \"gpt-4o-mini\",\n  messages: [{ role: \"user\", content: \"Hello!\" }],\n});\n```\n\n## Error Handling\n\n```javascript\ntry {\n  const response = await client.chat({ ... });\n} catch (error) {\n  switch(error.code) {\n    case 'AUTH_ERROR':        // Invalid project ID\n    case 'RATE_LIMIT_ERROR':  // Too many requests\n    case 'VALIDATION_ERROR':  // Invalid parameters\n    case 'NETWORK_ERROR':     // Connection issues\n  }\n}\n```\n\n## Models\n\nSupports all OpenAI models. Popular options:\n\n- `gpt-4o-mini` - Fast & affordable (recommended)\n- `gpt-4o` - Most capable\n- `gpt-4-turbo` - Previous generation\n- `o1-preview` - Advanced reasoning\n\n---\n\nSDK Version: 0.2.0-alpha.1\n","readmeFilename":"README.md"}