{"_id":"@arsenydzelikatny/secure-api","_rev":"2-f80c59320cdff60175c0daa421eab6f1","name":"@arsenydzelikatny/secure-api","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@arsenydzelikatny/secure-api","version":"1.0.0","author":{"name":"Arseny Delikatny"},"license":"ISC","_id":"@arsenydzelikatny/secure-api@1.0.0","maintainers":[{"name":"arsenydzelikatny","email":"arseny.delikatny@gmail.com"}],"dist":{"shasum":"e6212d5f69c2900c17bfd3d750c5827b2ad52a52","tarball":"https://registry.npmjs.org/@arsenydzelikatny/secure-api/-/secure-api-1.0.0.tgz","fileCount":9,"integrity":"sha512-lkyUiHWoRFmJdXgA2yegtp4Q/hfMjejKY8bpcNbfYnJTnl3lVeBx9DZX3i6QlqvZBzbm+C2w2s/Nmx65688KvQ==","signatures":[{"sig":"MEQCIEHGu3X/phRqAA810rXp0aRSUrv1vpYJ540SZ7IyAUBjAiA3tQ6wDe0JLLUxRXyMph6Ac5PBdH7klCQ2L1zNkLOe3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11029},"main":"index.js","gitHead":"1fc6b50c708e34963fe0de8aae60fdad83604831","scripts":{"test":""},"_npmUser":{"name":"arsenydzelikatny","email":"arseny.delikatny@gmail.com"},"_npmVersion":"9.5.1","description":"Library for securing API","directories":{},"_nodeVersion":"19.8.0","dependencies":{"crypto":"^1.0.1","helmet":"^8.1.0","path-to-regexp":"^8.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/secure-api_1.0.0_1747602019463_0.5096318139513407","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@arsenydzelikatny/secure-api","version":"1.0.1","description":"Library for securing API","main":"index.js","scripts":{"test":""},"author":{"name":"Arseny Delikatny"},"license":"ISC","dependencies":{"crypto":"^1.0.1","helmet":"^8.1.0","path-to-regexp":"^8.2.0"},"publishConfig":{"access":"public"},"gitHead":"e50e1d974ce559221410ddd7c08e0d199471b266","_id":"@arsenydzelikatny/secure-api@1.0.1","_nodeVersion":"19.8.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-D2AG9XQBOlhKPnkEKe8gPfmv4DELHEGMmbK4uZ2JrPzNf5YhRHUzvbma7NmFLPoZtQjDLDC5lb8+pA9p9xW2lg==","shasum":"9cf950d005cb6ca9f3b04d2c17c1f3cf8e4ef59d","tarball":"https://registry.npmjs.org/@arsenydzelikatny/secure-api/-/secure-api-1.0.1.tgz","fileCount":9,"unpackedSize":13333,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAWVauJ6CFT3zBXL9Cwcfw4q94qGrtf9hvqvHK0NX42NAiEAsgWBszI7kM9Eb0IGHKydcqlyoYk35WVlUR3Ylp8WpCI="}]},"_npmUser":{"name":"arsenydzelikatny","email":"arseny.delikatny@gmail.com"},"directories":{},"maintainers":[{"name":"arsenydzelikatny","email":"arseny.delikatny@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/secure-api_1.0.1_1747602406506_0.8748066080359571"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-18T21:00:19.409Z","modified":"2025-05-18T21:06:47.148Z","1.0.0":"2025-05-18T21:00:19.658Z","1.0.1":"2025-05-18T21:06:46.664Z"},"author":{"name":"Arseny Delikatny"},"license":"ISC","description":"Library for securing API","maintainers":[{"name":"arsenydzelikatny","email":"arseny.delikatny@gmail.com"}],"readme":"# Secure API Middleware\r\n\r\nA lightweight middleware package for Node.js/Express that provides:\r\n\r\n- ✅ Configurable **CORS (Cross-Origin Resource Sharing)** headers\r\n- 🚫 Flexible **rate limiting** for route-based protection against abuse\r\n\r\n---\r\n\r\n## 📦 Installation\r\n\r\n```bash\r\nnpm install @arsenydzelikatny/secure-api\r\n```\r\n\r\n## CORS Middleware\r\n\r\nThe `cors` function configures Cross-Origin Resource Sharing headers to control which domains can access your API.\r\n\r\n### Configuration Options for `cors()`:\r\n\r\n1.  **`allowedOrigins`**: Specifies the allowed origin(s) for cross-origin requests.\r\n    - `\"*\"`: Allows all origins (not recommended for production).\r\n    - `string`: A single allowed origin (e.g., `'http://localhost:3000'`).\r\n    - `Array<string>`: An array of allowed origins (e.g., `['http://localhost:3000', 'https://example.com']`).\r\n    - Default: `\"*\"`\r\n2.  **`methods`**: An array of allowed HTTP methods for cross-origin requests (e.g., `['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']`). Default: `['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']`.\r\n3.  **`allowedHeaders`**: An array of allowed request headers for cross-origin requests (e.g., `['Content-Type', 'Authorization']`). Default: `['Content-Type', 'Authorization']`.\r\n4.  **`credentials`**: A boolean indicating whether to allow sending and receiving of credentials (cookies, Authorization headers) in cross-origin requests. Default: `true`.\r\n\r\n## Rate Limiting Middleware\r\n\r\nThe `rateLimiter` function limits the number of requests a client can make to your API within a specified time frame, protecting against abuse and overload.\r\n\r\n### Configuration Options for `rateLimiter()`:\r\n\r\n- **`resetIntervalMs`**: The time window in milliseconds during which requests are counted. Default: `15 * 60 * 1000` (15 minutes).\r\n- **`max`**: The maximum number of requests allowed from a client within the `resetIntervalMs`. Default: `100`.\r\n- **`exclude`**: An array of route paths to exclude from rate limiting (e.g., `[\"/health\", \"/static\"]`). Default: `[]`.\r\n- **`routes`**: An object defining specific rate limiting rules for individual routes. The keys are route paths (or patterns), and the values are configuration objects with `max` and `resetIntervalMs` that override the global settings for those routes. Default: `{}`.\r\n","readmeFilename":"README.md"}