{"_id":"@avis-ai/sdk-js","_rev":"8-3cc38bdc335f6a836ab1d40c9c1b682a","name":"@avis-ai/sdk-js","dist-tags":{"latest":"0.0.8"},"versions":{"0.0.1":{"name":"@avis-ai/sdk-js","version":"0.0.1","_id":"@avis-ai/sdk-js@0.0.1","maintainers":[{"name":"adminavis","email":"admin@avi-s.in"}],"dist":{"shasum":"72d7675627a2b418fbf53d71e1ddaac149d3fb38","tarball":"https://registry.npmjs.org/@avis-ai/sdk-js/-/sdk-js-0.0.1.tgz","fileCount":11,"integrity":"sha512-xgOa4zahYaE7s1g8QvrTApZeIuJ2GACIVhE/YsBKcqmkFgNhZ7d2qOUNdQCoC9YIhjLHAJHk+Ru/uPpkTubaAg==","signatures":[{"sig":"MEUCIAk+RI7mKHRZgAFd+4vcLX7Ze2MhV0cCzcvskANrDd3uAiEAlOtkeUIhr6ingqaRZNgH7VCk4TkJqMzDhqtA6swX56k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11176},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d05be9bd84dbd6708cd3bfbd6186b3e6fbbc416a","scripts":{"build":"tsc -p tsconfig.json"},"_npmUser":{"name":"adminavis","email":"admin@avi-s.in"},"_npmVersion":"10.9.3","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/sdk-js_0.0.1_1772632881697_0.08460497173710624","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@avis-ai/sdk-js","version":"0.0.2","_id":"@avis-ai/sdk-js@0.0.2","maintainers":[{"name":"adminavis","email":"admin@avi-s.in"}],"dist":{"shasum":"bbfb54193e32d8d7d0e966fe98ad5bd639618a4d","tarball":"https://registry.npmjs.org/@avis-ai/sdk-js/-/sdk-js-0.0.2.tgz","fileCount":11,"integrity":"sha512-h0IloBezvWuq74Px9Zf1jetVFIdRqnqQr0QkGyqjnHrlDbHc2V0vKF2z+DIASvGsJBFhIDnk/HABXnO4Y8+B8A==","signatures":[{"sig":"MEUCIDu8sjvtpVjq2xnZamIW8sqvdDJGxnKvuXjSyc5clUjpAiEAzZsIdMVORrG8/LbKMqeZPtZ35DtMFpSHp5rpsqJtmnw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11176},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"21c9e42c80fea396a910cc3d6c33f3e7fd45c6c9","scripts":{"build":"tsc -p tsconfig.json"},"_npmUser":{"name":"adminavis","email":"admin@avi-s.in"},"_npmVersion":"10.9.3","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/sdk-js_0.0.2_1772636019330_0.5138428701680955","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@avis-ai/sdk-js","version":"0.0.3","_id":"@avis-ai/sdk-js@0.0.3","maintainers":[{"name":"adminavis","email":"admin@avi-s.in"}],"dist":{"shasum":"705fd4f7ffc4c03aab4594c0a60e171d0af76105","tarball":"https://registry.npmjs.org/@avis-ai/sdk-js/-/sdk-js-0.0.3.tgz","fileCount":11,"integrity":"sha512-L1sEBoCMhcwy9RKwaTcczp6jCVmjVtyIH0lHp+4lf6AaL30h9ljxz+STuGUgQhj3Wum6OKotrq4blfYhJosb7Q==","signatures":[{"sig":"MEQCIC6mZ2F5I9EiPrq1sGTNHmVrMMbZtofb1onGykI4/AJhAiAcht6SkQ+jxjcKsZqY/gf+A2gPjaJwBSVLFw4F7Sp7Ng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11185},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"21c9e42c80fea396a910cc3d6c33f3e7fd45c6c9","scripts":{"build":"tsc -p tsconfig.json"},"_npmUser":{"name":"adminavis","email":"admin@avi-s.in"},"_npmVersion":"10.9.3","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/sdk-js_0.0.3_1772636539030_0.1085615790546055","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@avis-ai/sdk-js","version":"0.0.4","_id":"@avis-ai/sdk-js@0.0.4","maintainers":[{"name":"adminavis","email":"admin@avi-s.in"}],"dist":{"shasum":"cdd3b07d7d918b6f46ef22988f61f8418fbdaf69","tarball":"https://registry.npmjs.org/@avis-ai/sdk-js/-/sdk-js-0.0.4.tgz","fileCount":11,"integrity":"sha512-26lMwwiq4ctLn0GvmiwX5VEe6aO+Rvax9rLHlQB1sZZOeN7lcCn7dmXmdmMHWFzHoOiniIU4RXZOR3vSDjgbhw==","signatures":[{"sig":"MEUCIQCbROUBBlgP/u8kpVCTTr9Hzz1c3xWpSN4D5lkDh/hZsQIgFXyrHakl74TuROnHdKh2vjtTXOgR8gknaTBoTFTQq8c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11253},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"deb32e435f6401a1760b3a8cb43f40406eb7e2b3","scripts":{"build":"tsc -p tsconfig.json","build:watch":"tsc -p tsconfig.json --watch"},"_npmUser":{"name":"adminavis","email":"admin@avi-s.in"},"_npmVersion":"10.9.3","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/sdk-js_0.0.4_1772854147251_0.7727873875045579","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@avis-ai/sdk-js","version":"0.0.5","_id":"@avis-ai/sdk-js@0.0.5","maintainers":[{"name":"adminavis","email":"admin@avi-s.in"}],"dist":{"shasum":"98757ff7fdf688c856389347d1fd0d7dd30c5993","tarball":"https://registry.npmjs.org/@avis-ai/sdk-js/-/sdk-js-0.0.5.tgz","fileCount":11,"integrity":"sha512-GEHSuy4nf/2p78waQO2VnFlLrc04+1Iq8qxN8Y7fs7DmlBwm8d0i/S4uRbs/L8dTuFaEis1wNI1QsPKM+/jhvQ==","signatures":[{"sig":"MEQCIGq0XaHse3s7MDCN7bttGxM7dWJxixwHZ6VOdVYm2ypzAiA5wtkkZ0QGRYgQAcGMCFSdjHPIiTPI5mhIj5wIn/thng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11225},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"deb32e435f6401a1760b3a8cb43f40406eb7e2b3","scripts":{"build":"tsc -p tsconfig.json","build:watch":"tsc -p tsconfig.json --watch"},"_npmUser":{"name":"adminavis","email":"admin@avi-s.in"},"_npmVersion":"10.9.3","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/sdk-js_0.0.5_1772855324853_0.9650745609856877","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@avis-ai/sdk-js","version":"0.0.6","_id":"@avis-ai/sdk-js@0.0.6","maintainers":[{"name":"adminavis","email":"admin@avi-s.in"}],"dist":{"shasum":"060c91d58b90cb4f786d5e23d0260fa48ecd4ef3","tarball":"https://registry.npmjs.org/@avis-ai/sdk-js/-/sdk-js-0.0.6.tgz","fileCount":11,"integrity":"sha512-KVdnWhE9/fcL46yWtamLcTTm90noATQJgavg1K8+H7RZdHu7CEqS3iINWiaLsl7xcTlTN3bevoHpAEDxOQawlg==","signatures":[{"sig":"MEUCIQCmEV1k1XWWpy7fpYBWbWDojM0qLHndBuDZV6+NMbnXRwIgNMveEDETwHVPoOv8+iX6xMr5EGecMs+A2iMFocF2Wu8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11225},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"56dbffdee4d5780c594916d2b032b26c51ea3425","scripts":{"build":"tsc -p tsconfig.json","build:watch":"tsc -p tsconfig.json --watch"},"_npmUser":{"name":"adminavis","email":"admin@avi-s.in"},"_npmVersion":"10.9.3","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/sdk-js_0.0.6_1774724360093_0.9731988292753146","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@avis-ai/sdk-js","version":"0.0.7","_id":"@avis-ai/sdk-js@0.0.7","maintainers":[{"name":"adminavis","email":"admin@avi-s.in"}],"dist":{"shasum":"3d3ff20544dd73f2bb9d0825ea2db6ee5a4269d9","tarball":"https://registry.npmjs.org/@avis-ai/sdk-js/-/sdk-js-0.0.7.tgz","fileCount":11,"integrity":"sha512-L1OpdsqdHdB426Zx+YcWoy4naXqFacLY76oKp6xxDmQXrVomvSesodyzsXpxHl4oqjmE21xS09TFAnYoH2bIaQ==","signatures":[{"sig":"MEQCIFo9kwq9o5Ay0ZmPAvvfjhDK7PwDbDyL2UaiaycLHkluAiBBEKOTamgYTuqBCkY+inH8SiSIdECulKUkWmPssDD2Wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11225},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"74b24b3659705f38a061d42069b15e3e81f8167f","scripts":{"build":"tsc -p tsconfig.json","build:watch":"tsc -p tsconfig.json --watch"},"_npmUser":{"name":"adminavis","email":"admin@avi-s.in"},"_npmVersion":"10.9.3","directories":{},"_nodeVersion":"22.18.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/sdk-js_0.0.7_1775152924934_0.8931974208721152","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@avis-ai/sdk-js","version":"0.0.8","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc -p tsconfig.json","build:watch":"tsc -p tsconfig.json --watch"},"devDependencies":{"typescript":"^5.9.3"},"_id":"@avis-ai/sdk-js@0.0.8","gitHead":"a73e6dca6f591c3e21b6c1f22dacf2085ebf294c","description":"Minimal, **framework-agnostic** JavaScript/TypeScript client for the **Avis AI** HTTP API. Use it anywhere you can run `fetch`: **Vue, Svelte, Angular, vanilla sites, Electron, Node 18+, Deno**, etc.","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-OdVZT4b/+GYuvF9+jhvbHBAzoEPGKoryJbP/Sy0ZESn2Q3NMTLkCxDJC9gE61lvunyhvgOzmq5nwGNwc6dLr/w==","shasum":"05c5c85f8538ad7fa7bf473aec9665fb0fff8a45","tarball":"https://registry.npmjs.org/@avis-ai/sdk-js/-/sdk-js-0.0.8.tgz","fileCount":12,"unpackedSize":16094,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDs3t53jXZ2Hjk6pCqTut48azOzARv4lFlR89qjZ4+b9wIgevMkK4MxvXPzW6DsOji6n4axEe0V4OLlbL5RLns0N+8="}]},"_npmUser":{"name":"adminavis","email":"admin@avi-s.in"},"directories":{},"maintainers":[{"name":"adminavis","email":"admin@avi-s.in"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk-js_0.0.8_1775182188547_0.4610076421292695"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-04T14:01:21.603Z","modified":"2026-04-03T02:09:48.889Z","0.0.1":"2026-03-04T14:01:21.860Z","0.0.2":"2026-03-04T14:53:39.498Z","0.0.3":"2026-03-04T15:02:19.179Z","0.0.4":"2026-03-07T03:29:07.388Z","0.0.5":"2026-03-07T03:48:45.014Z","0.0.6":"2026-03-28T18:59:20.252Z","0.0.7":"2026-04-02T18:02:05.090Z","0.0.8":"2026-04-03T02:09:48.737Z"},"maintainers":[{"name":"adminavis","email":"admin@avi-s.in"}],"readme":"# `@avis-ai/sdk-js`\n\nMinimal, **framework-agnostic** JavaScript/TypeScript client for the **Avis AI** HTTP API. Use it anywhere you can run `fetch`: **Vue, Svelte, Angular, vanilla sites, Electron, Node 18+, Deno**, etc.\n\nThe React UI package [**`@avis-ai/avischat`**](https://www.npmjs.com/package/@avis-ai/avischat) uses this SDK internally (`Avis` + streaming). If you want the full chat widget (markdown, model picker, floating launcher), use AvisChat in React or load the hosted **iframe embed** (see [Embedding without React](#embedding-without-react)).\n\n**Demo:** [https://demo-ai.avi-s.in](https://demo-ai.avi-s.in)\n\n## Install\n\n```bash\nnpm install @avis-ai/sdk-js\npnpm add @avis-ai/sdk-js\nyarn add @avis-ai/sdk-js\n```\n\nNo peer dependency on React.\n\n## Quick start (non-streaming)\n\n```ts\nimport { Avis, generateSessionId } from \"@avis-ai/sdk-js\";\n\nconst client = new Avis({\n  apiKey: \"your-api-key\",\n  // baseUrl: \"https://api-ai.avi-s.in\", // default; omit or set for self-hosted / proxy\n});\n\nconst sessionId = generateSessionId();\n\nconst res = await client.chat({\n  sessionId,\n  model: \"gpt-4o-mini\",\n  messages: [{ role: \"user\", content: \"Hello!\" }],\n});\n\nconst text = res.choices[0]?.message?.content ?? \"\";\n```\n\n## Streaming\n\n`chatStream` returns a **`ReadableStream<string>`** of assistant text deltas (decoded from SSE). Consume it in the browser or Node:\n\n```ts\nconst stream = await client.chatStream({\n  sessionId,\n  messages: [{ role: \"user\", content: \"Explain streaming in one sentence.\" }],\n});\n\nconst reader = stream.getReader();\nconst decoder = new TextDecoder();\nlet full = \"\";\n\nwhile (true) {\n  const { done, value } = await reader.read();\n  if (done) break;\n  full += value; // incremental assistant text\n}\n\nconsole.log(full);\n```\n\nFor raw OpenAI-style SSE chunk objects, use **`chatStreamRaw`** (returns `ReadableStream<StreamChunk>`).\n\n## API\n\n### `new Avis(options)`\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `apiKey` | `string` | **Required.** Project API key (`sk_live_…`). |\n| `baseUrl` | `string` | API origin, no trailing slash. Default: **`https://api-ai.avi-s.in`**. |\n\nThe client sends **`Authorization: Bearer <apiKey>`** and posts JSON to **`POST /v1/chat/completions`**.\n\n### `chat(options)`\n\nNon-streaming completion.\n\n- **`messages`**: `{ role: \"system\" \\| \"user\" \\| \"assistant\"; content: string }[]` — required.\n- **`sessionId`**: optional; threads are keyed server-side by this id. If omitted, a new id is generated per call (via `generateSessionId()` inside the client). Reuse the same `sessionId` to continue a conversation.\n- **`model`**: optional model id (must be allowed by your project/backend).\n- **`signal`**: optional `AbortSignal` for cancellation.\n\nReturns **`ChatCompletionResponse`** (choices, usage, etc.).\n\n### `chatStream(options)` / `chatStreamRaw(options)`\n\nSame options shape as `chat`, with **`stream: true`** implied.  \n- **`chatStream`**: stream of text delta strings.  \n- **`chatStreamRaw`**: stream of parsed SSE JSON chunks.\n\n### `generateSessionId()`\n\nExported helper for creating a new conversation id when you manage sessions yourself.\n\n### Errors\n\nFailed responses throw **`AvisError`** (`message`, `code`, `statusCode`, optional `requestId`). Import `AvisError` and `parseErrorResponse` from the package if you extend the client.\n\n## Security (browser)\n\nIf `apiKey` is constructed in the **browser**, the SDK logs a **console warning** (same as in `@avis-ai/avischat`). For production, proxy `/v1/chat/completions` through **your** origin, attach the key server-side, and point **`baseUrl`** at that proxy.\n\n## TypeScript\n\nExported types include **`ChatMessage`**, **`ChatCompletionOptions`**, **`ChatCompletionResponse`**, **`StreamChunk`**, **`AvisOptions`**.\n\n## Embedding without React\n\nFor sites that are not React:\n\n1. **Iframe + script tag** — paste the loader from your **API** origin (same host you use for `baseUrl` / chat). The script injects a fixed iframe; your site does not need React.\n\n   **Production example** (replace the API key with your project key). You should set **`data-embed-url`** to a **public** page that renders the chat (the default in `widget.js` is `http://localhost:3002/embed`, which only works on your dev machine):\n\n   ```html\n   <script\n     src=\"https://api-ai.avi-s.in/widget.js\"\n     data-api-key=\"sk_live_YOUR_API_KEY\"\n     data-embed-url=\"https://demo-ai.avi-s.in/embed\"\n   ></script>\n   ```\n\n   If you self-host the embed app, point `data-embed-url` at your own origin’s `/embed` (or equivalent) instead.\n\n2. **This SDK** — build any UI and call `Avis` from your stack.\n\n## Related packages\n\n| Package | Use case |\n|---------|----------|\n| **`@avis-ai/avischat`** | Pre-built React chat widget and `useAvisChat` hook. |\n| **`@avis-ai/sdk-js`** | Headless API client (this package). |\n","readmeFilename":"README.md","description":"Minimal, **framework-agnostic** JavaScript/TypeScript client for the **Avis AI** HTTP API. Use it anywhere you can run `fetch`: **Vue, Svelte, Angular, vanilla sites, Electron, Node 18+, Deno**, etc."}