{"_id":"@codenteam/pandoc-server","name":"@codenteam/pandoc-server","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@codenteam/pandoc-server","author":{"name":"Codenteam"},"version":"1.0.0","description":"A lightweight REST API server for Pandoc document conversion","main":"src/server.js","type":"module","bin":{"pandoc-server":"bin/pandoc-server.js"},"scripts":{"start":"node src/server.js","dev":"node --watch src/server.js","test":"node test.js"},"keywords":["pandoc","document","converter","api","server","pdf","word","html","markdown","latex","docx","odt"],"repository":{"type":"git","url":"git+https://github.com/codenteam/pandoc-server.git"},"bugs":{"url":"https://github.com/codenteam/pandoc-server/issues"},"homepage":"https://github.com/codenteam/pandoc-server#readme","engines":{"node":">=18.0.0"},"license":"GPL-2.0","dependencies":{"cors":"^2.8.5","express":"^4.18.2","helmet":"^7.1.0","multer":"^1.4.5-lts.1"},"devDependencies":{"nodemon":"^3.1.10"},"publishConfig":{"access":"public"},"_id":"@codenteam/pandoc-server@1.0.0","gitHead":"03ce8934f46da761ffa61ef1bc8367a071e78322","_nodeVersion":"20.19.4","_npmVersion":"10.8.2","dist":{"integrity":"sha512-fd0hnzqGJPrmiX5PGQBh0qAG7tngjqvFGhYkasBWKG1XTwRtsnOHuRra9evctS5zBE/ueYz5rvwvaci4aloFNg==","shasum":"c261f067abfe5dfe1a08a3f99d0b7e3a69372bd4","tarball":"https://registry.npmjs.org/@codenteam/pandoc-server/-/pandoc-server-1.0.0.tgz","fileCount":12,"unpackedSize":65255,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAOliMzmS2quVTcmVb/1dQ0SbOJl/5xRtwmOqXptJccZAiAfHkG8c/TgkS51SW18VmB4Ekr13acbwhSsU3b8Xt/6sw=="}]},"_npmUser":{"name":"fadysghatas","email":"fady@codenteam.com"},"directories":{},"maintainers":[{"name":"fadysghatas","email":"fady@codenteam.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pandoc-server_1.0.0_1760110174805_0.823330341546741"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-10T15:29:34.727Z","1.0.0":"2025-10-10T15:29:35.018Z","modified":"2025-10-10T15:29:35.282Z"},"maintainers":[{"name":"fadysghatas","email":"fady@codenteam.com"}],"description":"A lightweight REST API server for Pandoc document conversion","homepage":"https://github.com/codenteam/pandoc-server#readme","keywords":["pandoc","document","converter","api","server","pdf","word","html","markdown","latex","docx","odt"],"repository":{"type":"git","url":"git+https://github.com/codenteam/pandoc-server.git"},"author":{"name":"Codenteam"},"bugs":{"url":"https://github.com/codenteam/pandoc-server/issues"},"license":"GPL-2.0","readme":"# Pandoc Server\n\nA lightweight REST API server for Pandoc document conversion.\n\n## 🚀 Features\n\n- **Multiple Output Formats**: Text, blob (for downloads), and base64 encoding\n- **File Upload Support**: Convert uploaded files or direct content input\n- **Binary & Text Handling**: Automatic detection and appropriate formatting\n- **Security**: Input validation, sanitization, and security headers\n- **Error Handling**: Comprehensive error handling with detailed messages\n- **Docker Support**: Ready-to-deploy Docker configuration\n- **Health Monitoring**: Built-in health check and monitoring endpoints\n\n## Installation\n\n### Via npm (recommended)\n```bash\nnpx @codenteam/pandoc-server\n```\n\n### Via Docker\n```bash\ndocker-compose up\n```\n\n### Manual Installation\n```bash\ngit clone https://github.com/codenteam/pandoc-server.git\ncd pandoc-server\npnpm install # or npm\npnpm start # or npm\n```\n\n## Usage\n\nStart the server:\n```bash\nnpx @codenteam/pandoc-server --port=3000\n```\n\nConvert documents via HTTP POST:\n```bash\ncurl -X POST http://localhost:3000/convert \\\n  -F \"file=@document.md\" \\\n  -F \"to=pdf\"\n```\n\n## API Endpoints\n\n- `POST /convert` - Convert documents\n- `GET /formats` - Get supported formats\n- `GET /health` - Health check\n\n### POST /converter/convert\n\nConvert documents using Pandoc with custom arguments.\n\n**Request Body (JSON):**\n\n```json\n{\n  \"args\": [\"--from\", \"markdown\", \"--to\", \"html\"],\n  \"input\": \"# Hello World\\nThis is markdown content\",\n  \"outputFormat\": \"text\",\n  \"filename\": \"output.html\"\n}\n```\n\n**Request Body (Form Data for File Upload):**\n\n```bash\ncurl -X POST http://localhost:3000/converter/convert \\\n  -F \"file=@document.md\" \\\n  -F 'args=[\"--from\", \"markdown\", \"--to\", \"pdf\"]' \\\n  -F 'outputFormat=blob' \\\n  -F 'filename=document.pdf'\n```\n\n**Parameters:**\n\n- `args` (Array): Pandoc command line arguments\n- `input` (String): Direct content input (if no file)\n- `outputFormat` (String): `text`, `blob`, or `base64`\n- `filename` (String): Output filename\n\n**Response Formats:**\n\n**Text Format (JSON):**\n\n```json\n{\n  \"content\": \"<html><body><h1>Hello World</h1></body></html>\",\n  \"filename\": \"output.html\",\n  \"mimeType\": \"text/html\",\n  \"format\": \"text\",\n  \"size\": 45\n}\n```\n\n**Base64 Format (JSON):**\n\n```json\n{\n  \"content\": \"PGh0bWw+PGJvZHk+PGgxPkhlbGxvIFdvcmxkPC9oMT4=\",\n  \"filename\": \"output.html\",\n  \"mimeType\": \"text/html\",\n  \"format\": \"base64\",\n  \"size\": 45\n}\n```\n\n**Blob Format:**\nReturns raw binary/text data with appropriate Content-Type headers for direct download.\n\n### GET /converter/formats\n\nList all supported Pandoc input and output formats.\n\n**Response:**\n\n```json\n{\n  \"input\": [\"markdown\", \"html\", \"docx\", \"...\"],\n  \"output\": [\"html\", \"pdf\", \"docx\", \"...\"]\n}\n```\n\n### GET /converter/version\n\nGet the installed Pandoc version.\n\n**Response:**\n\n```json\n{\n  \"version\": \"pandoc 3.5\"\n}\n```\n\n### GET /health\n\nHealth check endpoint.\n\n**Response:**\n\n```json\n{\n  \"status\": \"ok\",\n  \"timestamp\": \"2024-01-01T12:00:00.000Z\",\n  \"service\": \"pandoc-server\"\n}\n```\n\n## 🧪 Testing\n\n### Quick Test\n\n```bash\n# Start the server\npnpm start # or npm\n\n# Run curl tests\n./test.sh\n\n# Or run Node.js tests\nnode test.js\n```\n\n### Example Conversions\n\n**Markdown to HTML:**\n\n```bash\ncurl -X POST http://localhost:3000/converter/convert \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"args\": [\"--from\", \"markdown\", \"--to\", \"html\"],\n    \"input\": \"# Hello\\n\\nThis is **bold** text.\",\n    \"outputFormat\": \"text\"\n  }'\n```\n\n**Markdown to PDF (download):**\n\n```bash\ncurl -X POST http://localhost:3000/converter/convert \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"args\": [\"--from\", \"markdown\", \"--to\", \"pdf\"],\n    \"input\": \"# My Document\\n\\nContent here.\",\n    \"outputFormat\": \"blob\",\n    \"filename\": \"document.pdf\"\n  }' \\\n  --output document.pdf\n```\n\n## ⚙️ Configuration\n\n### Environment Variables\n\n- `PORT` - Server port (default: 3000)\n- `NODE_ENV` - Environment mode\n\n### Supported Formats\n\nThe server supports all Pandoc input and output formats including:\n\n**Common Input Formats:**\n\n- `markdown`, `html`, `docx`, `odt`, `rtf`, `epub`, `latex`, `rst`\n\n**Common Output Formats:**\n\n- `html`, `pdf`, `docx`, `odt`, `epub`, `latex`, `rtf`, `plain`\n\n## 🔒 Security\n\n- Input validation and sanitization\n- File size limits\n- Dangerous argument detection\n- Security headers (Helmet.js)\n- CORS configuration\n- Rate limiting (in production with nginx)\n\n\n### Extra Security\n\n#### ExpressJS rate limiting\n\nIf you don't use nginx, you can do expressjs rate limiting using:\n```javascript\n// Add to package.json dependencies\n\"express-rate-limit\": \"^7.1.5\"\n\n// Add to server.js\nimport rateLimit from 'express-rate-limit';\napp.use(rateLimit({ windowMs: 15 * 60 * 1000, max: 100 }));\n```\n\n#### Extra security headers\n\nIf you don't use a security layer (Firewall, LB, etc), you can add extra security headers using:\n```javascript\n// Add to server.js\nimport helmet from 'helmet';\napp.use(helmet({\n  contentSecurityPolicy: false, // Configure based on needs\n  crossOriginResourcePolicy: { policy: \"cross-origin\" }\n}));\n```\n## 🚢 Production Deployment\n\n### With Docker Compose\n\n```bash\n# Production deployment with nginx proxy\ndocker-compose --profile production up -d\n```\n\n### Environment Setup\n\n1. Install Pandoc on your system\n2. Set appropriate environment variables\n3. Configure reverse proxy (nginx/Apache)\n4. Set up monitoring and logging\n5. Configure backup for temporary files cleanup\n\n## 📋 Requirements\n\n- **Node.js** >= 16\n- **Pandoc** >= 2.0 (installed on system)\n- **Optional**: Docker for containerized deployment\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Submit a pull request\n\n## License\n\nGPL-2.0 (same as Pandoc)\n","readmeFilename":"README.md","_rev":"1-e4c7a6db29825292e2a08343fc90e00a"}