{"_id":"@assistant-ui/local-pdf-adapter","name":"@assistant-ui/local-pdf-adapter","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@assistant-ui/local-pdf-adapter","version":"0.0.1","description":"Local PDF attachment adapter for @assistant-ui/react","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts","dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest","test:run":"vitest run","lint":"eslint src --ext .ts,.tsx","typecheck":"tsc --noEmit","size":"size-limit","changeset":"changeset","version-packages":"changeset version","release":"pnpm build && changeset publish"},"keywords":["pdf","attachment","assistant-ui","react","adapter"],"author":"","license":"MIT","repository":{"type":"git","url":"git+https://github.com/yonom/local-pdf-adapter.git"},"bugs":{"url":"https://github.com/yonom/local-pdf-adapter/issues"},"homepage":"https://github.com/yonom/local-pdf-adapter#readme","dependencies":{"@assistant-ui/react":"^0.11.34","pdfjs-dist":"^5.4.394"},"optionalDependencies":{"pdf-parse":"^1.1.1"},"devDependencies":{"@changesets/cli":"^2.29.7","@size-limit/preset-small-lib":"^11.2.0","@types/crypto-js":"^4.2.2","@types/node":"^24.10.1","@types/pdf-parse":"^1.1.5","@typescript-eslint/eslint-plugin":"^8.47.0","@typescript-eslint/parser":"^8.47.0","crypto-js":"^4.2.0","eslint":"^9","jsdom":"^27.2.0","tsup":"^8.0.0","typescript":"^5.0.0","vitest":"^2.0.0"},"peerDependencies":{"react":">=18.0.0"},"publishConfig":{"access":"public"},"_id":"@assistant-ui/local-pdf-adapter@0.0.1","_nodeVersion":"22.18.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-+uAcnIFGbDygrRl+WMIslFQeckZG0lLfIZlkoo6m4DbQM3LqQaPoivz7q+Jy/bgn4w54ao4KSBPVs/s+XI32Sg==","shasum":"f6a3e0a7008e75c69ab666d37fc41c91ba1e7216","tarball":"https://registry.npmjs.org/@assistant-ui/local-pdf-adapter/-/local-pdf-adapter-0.0.1.tgz","fileCount":7,"unpackedSize":16921,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCIJCd0d64ELNCUFpeLL8kJg0ZDkcILPmjLKNrF9TqYdgIhAI2ad43N/kUIQGIOzDlTGe42HUjo57MbnjY16AvFksRr"}]},"_npmUser":{"name":"yonom","email":"simon.farshid@outlook.com"},"directories":{},"maintainers":[{"name":"yonom","email":"simon.farshid@outlook.com"},{"name":"agentbase-bot","email":"npm@assistant-ui.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/local-pdf-adapter_0.0.1_1763412297573_0.40403849585229423"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-17T20:44:57.464Z","0.0.1":"2025-11-17T20:44:57.755Z","modified":"2025-11-17T20:44:58.054Z"},"maintainers":[{"name":"yonom","email":"simon.farshid@outlook.com"},{"name":"agentbase-bot","email":"npm@assistant-ui.com"}],"description":"Local PDF attachment adapter for @assistant-ui/react","homepage":"https://github.com/yonom/local-pdf-adapter#readme","keywords":["pdf","attachment","assistant-ui","react","adapter"],"repository":{"type":"git","url":"git+https://github.com/yonom/local-pdf-adapter.git"},"bugs":{"url":"https://github.com/yonom/local-pdf-adapter/issues"},"license":"MIT","readme":"# Local PDF Attachment Adapter\n\nA standalone PDF attachment adapter for [@assistant-ui/react](https://github.com/assistant-ui/assistant-ui) that provides native PDF text extraction support.\n\n## Features\n\n- 📄 **PDF Text Extraction**: Extracts text content from PDF documents for LLM consumption\n- 🌐 **Cross-Platform**: Works in both browser and Node.js environments\n- ⚡ **Performance Optimized**: Configurable file size limits to prevent browser performance issues\n- 🔒 **Security Conscious**: Support for self-hosted PDF.js worker scripts\n- 🛡️ **Error Handling**: Comprehensive error handling for corrupted or invalid PDFs\n- 📦 **Standalone**: Can be used as a separate package without modifying assistant-ui core\n\n## Installation\n\n```bash\nnpm install local-pdf-adapter\n```\n\n### Dependencies\n\nThis package requires:\n- `@assistant-ui/react` (peer dependency)\n- `pdfjs-dist` (for browser environments)\n\nFor Node.js environments, also install:\n```bash\nnpm install pdf-parse\n```\n\n## Usage\n\n### Basic Usage\n\n```tsx\nimport { LocalPDFAttachmentAdapter } from 'local-pdf-adapter';\nimport { CompositeAttachmentAdapter } from '@assistant-ui/react';\n\nconst pdfAdapter = new LocalPDFAttachmentAdapter();\n\n// Use with CompositeAttachmentAdapter\nconst attachmentAdapter = new CompositeAttachmentAdapter([\n  pdfAdapter,\n  // Add other adapters as needed\n]);\n\n// Use in your runtime\nconst runtime = useLocalRuntime({\n  attachmentAdapter,\n});\n```\n\n### Advanced Configuration\n\n```tsx\nconst pdfAdapter = new LocalPDFAttachmentAdapter({\n  maxFileSize: 20 * 1024 * 1024, // 20MB limit\n  workerSrc: '/pdf.worker.min.mjs', // Self-hosted worker\n});\n```\n\n## Configuration Options\n\n### `LocalPDFAttachmentAdapterConfig`\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `workerSrc` | `string` | `undefined` | Custom URL for PDF.js worker script. If not provided, uses unpkg CDN |\n| `maxFileSize` | `number` | `10 * 1024 * 1024` (10MB) | Maximum file size in bytes |\n\n## Security Considerations\n\n### Self-Hosting the PDF.js Worker\n\nBy default, the PDF.js worker is loaded from the unpkg CDN. For production applications, consider self-hosting:\n\n1. **Download the worker** from [PDF.js releases](https://github.com/mozilla/pdf.js/releases)\n2. **Serve it from your domain** (e.g., in your public directory)\n3. **Configure the adapter**:\n\n```tsx\nconst pdfAdapter = new LocalPDFAttachmentAdapter({\n  workerSrc: '/pdf.worker.min.mjs'\n});\n```\n\n### Content Security Policy (CSP)\n\nIf using the default CDN, add it to your Content Security Policy:\n```\nscript-src https://unpkg.com/pdfjs-dist@*\n```\n\n## Environment Support\n\n### Browser Environment\n- Uses `pdfjs-dist` for client-side PDF processing\n- Supports all modern browsers\n- Worker script handles heavy processing to avoid blocking UI\n\n### Node.js Environment\n- Uses `pdf-parse` for server-side PDF processing\n- Requires optional `pdf-parse` dependency\n- Faster processing for server applications\n\n## Error Handling\n\nThe adapter handles various error scenarios:\n- **File size exceeded**: Returns attachment with error status\n- **Corrupted PDFs**: Returns error message in attachment content\n- **Network failures**: Graceful fallback with error reporting\n- **Invalid format**: Clear error messages for unsupported files\n\n## Example Implementation\n\n```tsx\nimport { \n  LocalRuntime, \n  CompositeAttachmentAdapter,\n  useLocalRuntime \n} from '@assistant-ui/react';\nimport { LocalPDFAttachmentAdapter } from 'local-pdf-adapter';\n\nfunction ChatComponent() {\n  const attachmentAdapter = new CompositeAttachmentAdapter([\n    new LocalPDFAttachmentAdapter({\n      maxFileSize: 5 * 1024 * 1024, // 5MB limit\n      workerSrc: '/assets/pdf.worker.min.mjs' // Self-hosted\n    }),\n    // Add other adapters for images, text, etc.\n  ]);\n\n  const runtime = useLocalRuntime({\n    attachmentAdapter,\n  });\n\n  return (\n    <ThreadContainer runtime={runtime}>\n      <Viewport>\n        <ThreadWelcome />\n        <ThreadMessages />\n        <ThreadComposer />\n      </Viewport>\n    </ThreadContainer>\n  );\n}\n```\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Build the package\nnpm run build\n\n# Watch mode for development\nnpm run dev\n```\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.","readmeFilename":"README.md","_rev":"1-0b3101f7a8d361f0d428f13a523127d2"}