{"_id":"apikee","_rev":"27-61b2302c2dc366de8a97d175a59c4fc1","name":"apikee","dist-tags":{"latest":"0.1.2"},"versions":{"1.1.0":{"name":"apikee","version":"1.1.0","keywords":["api-key","hmac","typescript","nodejs","middleware","stateless"],"author":{"name":"usmhic"},"license":"MIT","_id":"apikee@1.1.0","maintainers":[{"name":"usmhic","email":"usmhic@gmail.com"}],"homepage":"https://github.com/apikee-dev/apikee-node#readme","bugs":{"url":"https://github.com/apikee-dev/apikee-node/issues"},"dist":{"shasum":"8dfee86c0e98c7e2628e9424fd23ffd226c0e188","tarball":"https://registry.npmjs.org/apikee/-/apikee-1.1.0.tgz","fileCount":26,"integrity":"sha512-HfUIE/9jkXfVKrUILsFTeY8Ii/YVLQ8laLwtpsVptzvrYPlYQRHBxnX+ufSlRUXOVWtYhgNrY3S31Sh94OUWEw==","signatures":[{"sig":"MEUCIQDfFZ5RNleIAU0qitwXf59xQXcfH2l85r/2SKJq862ZewIgEu+EXixG7SFNu4D/0bqmoIuVcYP7dqWE1d+jsUttMaY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49240},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./koa":"./dist/middleware/koa.js","./hapi":"./dist/middleware/hapi.js","./express":"./dist/middleware/express.js","./fastify":"./dist/middleware/fastify.js","./restify":"./dist/middleware/restify.js","./next/app":"./dist/middleware/next/app.js","./next/pages":"./dist/middleware/next/pages.js","./package.json":"./package.json"},"scripts":{"test":"ts-node test.ts","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"usmhic","email":"usmhic@gmail.com"},"deprecated":"Superseded by 0.1.1 — please upgrade: npm install apikee@latest","repository":{"url":"git+https://github.com/apikee-dev/apikee-node.git","type":"git"},"_npmVersion":"11.4.1","description":"Zero-dependency, stateless API-key layer for Node.js (TypeScript).","directories":{},"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","@types/koa":"^2.15.0","typescript":"^5.8.3","@types/express":"^5.0.2","@types/restify":"^8.5.12"},"peerDependencies":{"koa":">=2.0.0","next":"^12.0.0 || ^13.0.0","express":">=4.0.0","fastify":">=3.0.0","restify":">=8.0.0","@hapi/hapi":">=20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/apikee_1.1.0_1749322610122_0.8003283644361545","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"apikee","version":"1.1.1","keywords":["api-key","hmac","typescript","nodejs","middleware","stateless"],"author":{"name":"usmhic"},"license":"MIT","_id":"apikee@1.1.1","maintainers":[{"name":"usmhic","email":"usmhic@gmail.com"}],"homepage":"https://github.com/apikee-dev/apikee-node#readme","bugs":{"url":"https://github.com/apikee-dev/apikee-node/issues"},"dist":{"shasum":"55e97b6ab8d5c10700631867ac273f7455fe471f","tarball":"https://registry.npmjs.org/apikee/-/apikee-1.1.1.tgz","fileCount":26,"integrity":"sha512-HqY+lDTlHy8a3PhZwuwX9v/F4nhAUaMQs1cWLYxbgzO1fSWZUBYkwgU1LU7lVoliunWwHqKT3UTF/uPH3LFGeQ==","signatures":[{"sig":"MEQCIAdJR/Dsea4HH5Ilp9+GXdSh9TLfEGHffQvnqC1fLJLgAiBGInYnssOD1JWAituI7L+SQL8PAaX4a00Hotwba96XYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48771},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./koa":"./dist/middleware/koa.js","./hapi":"./dist/middleware/hapi.js","./express":"./dist/middleware/express.js","./fastify":"./dist/middleware/fastify.js","./restify":"./dist/middleware/restify.js","./next/app":"./dist/middleware/next/app.js","./next/pages":"./dist/middleware/next/pages.js","./package.json":"./package.json"},"scripts":{"test":"ts-node test.ts","build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"usmhic","email":"usmhic@gmail.com"},"deprecated":"Superseded by 0.1.0 — please upgrade","repository":{"url":"git+https://github.com/apikee-dev/apikee-node.git","type":"git"},"_npmVersion":"11.4.1","description":"Zero-dependency, stateless API-key layer for Node.js (TypeScript).","directories":{},"_nodeVersion":"22.11.0","_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","@types/koa":"^2.15.0","typescript":"^5.8.3","@types/express":"^5.0.3","@types/restify":"^8.5.12"},"peerDependencies":{"koa":">=2.0.0","next":">=12.0.0","express":">=4.0.0","fastify":">=3.0.0","restify":">=8.0.0","@hapi/hapi":">=20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/apikee_1.1.1_1749323350203_0.30973200298002257","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"apikee","version":"0.1.1","license":"MIT","_id":"apikee@0.1.1","maintainers":[{"name":"usmhic","email":"usmhic@gmail.com"}],"homepage":"https://apikee.dev","dist":{"shasum":"6b2b8465fd02d258455c3c510e011573d2703c8f","tarball":"https://registry.npmjs.org/apikee/-/apikee-0.1.1.tgz","fileCount":20,"integrity":"sha512-oxkmPpiEOiJ2XDBIMygbRlNlF23rb+8E8scwQkUe+7BYHPJHFsNkJBZgFtppNqO38fPQq6J32RrUzYCfarBFxg==","signatures":[{"sig":"MEQCIAv/7eFymPPI7WpRylXhc+Q+Ao0AmEw+Yz3m11czX8OyAiBHaVKHljw8EGN2bN31qsAhGrb+Zba76V/0ahIxZIIUjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117245},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./hono":{"types":"./dist/adapters/hono.d.ts","import":"./dist/adapters/hono.js","require":"./dist/adapters/hono.cjs"},"./express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"}},"gitHead":"05e8f5aa54238f6ca518e4c6ee99f25feac19036","scripts":{"dev":"tsup --watch","test":"node --test --import tsx/esm tests/apikee.test.ts","build":"tsup src/index.ts src/adapters/express.ts src/adapters/fastify.ts src/adapters/hono.ts --format esm,cjs --dts --clean"},"_npmUser":{"name":"usmhic","email":"usmhic@gmail.com"},"_npmVersion":"11.7.0","description":"API key plugin — Express, Fastify, Hono","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4","hono":"^4.12.9","tsup":"^8.0","fastify":"^5.8.4","typescript":"^5.4","@types/node":"^20.19.37","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/apikee_0.1.1_1774895068576_0.0020183577281958076","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"apikee","version":"0.1.2","description":"API key plugin — Express, Fastify, Hono","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./express":{"types":"./dist/adapters/express.d.ts","import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"types":"./dist/adapters/fastify.d.ts","import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"},"./hono":{"types":"./dist/adapters/hono.d.ts","import":"./dist/adapters/hono.js","require":"./dist/adapters/hono.cjs"}},"license":"MIT","homepage":"https://apikee.dev","engines":{"node":">=18"},"devDependencies":{"@types/express":"^5.0.6","@types/node":"^20.19.37","fastify":"^5.8.4","hono":"^4.12.9","tsup":"^8.0","tsx":"^4","typescript":"^5.4"},"scripts":{"build":"tsup src/index.ts src/adapters/express.ts src/adapters/fastify.ts src/adapters/hono.ts --format esm,cjs --dts --clean","dev":"tsup --watch","test":"node --test --import tsx/esm tests/apikee.test.ts"},"gitHead":"05e8f5aa54238f6ca518e4c6ee99f25feac19036","_id":"apikee@0.1.2","_nodeVersion":"24.11.1","_npmVersion":"11.7.0","dist":{"integrity":"sha512-PTSc2CLIp+6uzzRHVh8ikfGQq63fgHuFyJ6pTi1+OosMfVYbGksotbCxugb8dLqwUPI5MHQdIwxlUVHfQT3w5A==","shasum":"8f7254b4dd926fa9adf2cf00bf2d999a4bbdee5d","tarball":"https://registry.npmjs.org/apikee/-/apikee-0.1.2.tgz","fileCount":20,"unpackedSize":117293,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGpEP4qb3FagvEv2efRqHC9Z3n3fdLe/DhlnzArwNNLcAiA7lk4Q1vA1Js9gxF6HiqXJTWVjM+CML697epi7ter5wg=="}]},"_npmUser":{"name":"usmhic","email":"usmhic@gmail.com"},"directories":{},"maintainers":[{"name":"usmhic","email":"usmhic@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/apikee_0.1.2_1774896432772_0.988203600064776"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-07T18:56:50.121Z","modified":"2026-03-30T18:47:13.022Z","1.0.0":"2024-11-02T14:45:08.292Z","1.0.1":"2024-11-02T15:02:47.559Z","1.0.2":"2024-11-25T19:48:24.641Z","1.0.3":"2024-11-25T19:53:29.662Z","1.0.4":"2024-11-26T19:51:07.630Z","1.0.5":"2024-11-27T17:22:26.932Z","1.0.6":"2024-11-27T17:36:52.355Z","1.0.7":"2024-11-27T17:51:35.163Z","1.0.8":"2024-11-27T17:57:41.556Z","0.0.1":"2025-01-21T17:47:48.995Z","0.0.5":"2025-01-21T19:03:03.670Z","0.0.6":"2025-01-22T20:25:42.648Z","0.0.7":"2025-01-22T20:31:12.795Z","0.0.8":"2025-01-22T20:42:48.056Z","0.0.9":"2025-02-23T16:44:02.024Z","0.1.0":"2025-02-23T17:05:33.053Z","1.1.0":"2025-06-07T18:56:50.312Z","1.1.1":"2025-06-07T19:09:10.387Z","0.1.1":"2026-03-30T18:24:28.728Z","0.1.2":"2026-03-30T18:47:12.907Z"},"license":"MIT","homepage":"https://apikee.dev","description":"API key plugin — Express, Fastify, Hono","maintainers":[{"name":"usmhic","email":"usmhic@gmail.com"}],"readme":"# apikee · Node.js\n\n[![npm](https://img.shields.io/npm/v/apikee)](https://www.npmjs.com/package/apikee)\n\nAPI key middleware for Node.js — Express, Fastify, and Hono. Zero dependencies, pure Node built-ins.\n\n## Install\n\n```bash\nnpm install apikee\n```\n\n## Configure\n\n```bash\nexport APIKEE_SECRET=$(openssl rand -hex 32)\n\n# Optional — enables server (platform) mode\nexport APIKEE_SERVER_KEY=sk_live_...\nexport APIKEE_PROJECT_ENV=my-api-production\n```\n\n## Express\n\n```ts\nimport express from 'express'\nimport { apikeeMiddleware, requireScope, injectSwagger } from 'apikee/express'\nimport swaggerJsdoc from 'swagger-jsdoc'\nimport swaggerUi from 'swagger-ui-express'\n\nconst app  = express()\nconst spec = swaggerJsdoc({ definition: { openapi: '3.0.0', info: { title: 'My API', version: '1.0.0' } }, apis: ['./routes.js'] })\n\ninjectSwagger(spec)           // adds 🔒 to every route in Swagger UI\napp.use('/docs', swaggerUi.serve, swaggerUi.setup(spec))\napp.use(apikeeMiddleware())   // reads APIKEE_SECRET — done\n\napp.get('/data', (req, res) => res.json({ tenant: req.apikee!.tenant }))\napp.delete('/x', requireScope('admin'), (req, res) => res.json({ ok: true }))\n```\n\n## Fastify\n\n```ts\nimport Fastify from 'fastify'\nimport { apikeePlugin } from 'apikee/fastify'\n\nconst fastify = Fastify()\nawait fastify.register(apikeePlugin)  // reads APIKEE_SECRET — done\n\nfastify.get('/data', async req => ({ tenant: req.apikee.tenant }))\n```\n\n## Hono (edge-ready)\n\n```ts\nimport { Hono } from 'hono'\nimport { apikeeMiddleware, requireScope } from 'apikee/hono'\n\nconst app = new Hono()\napp.use('*', apikeeMiddleware())  // reads APIKEE_SECRET — done\n\napp.get('/data', c => c.json({ tenant: c.get('apikee').tenant }))\napp.delete('/x', requireScope('admin'), c => c.json({ ok: true }))\n```\n\n## Key creation\n\n```ts\nimport { Apikee } from 'apikee'\n\nconst apikee = new Apikee()  // reads env vars\n\nconst key = await apikee.create('acme-corp', {\n  scopes:    ['read', 'write'],\n  expiresIn: '90d',\n  meta:      { plan: 'pro' },\n})\n```\n\n## Verification\n\n```ts\nconst claims = apikee.verify(key)\n// { id, tenant, scopes, expiresAt, environment, meta, rawKey }\n```\n\n## Scopes\n\n```ts\n// Express — route-level scope guard\napp.delete('/users/:id', requireScope('admin'), handler)\n\n// Hono — same API\napp.delete('/users/:id', requireScope('admin'), handler)\n\n// Manual check\nconst claims = apikee.verify(req.headers['x-api-key'])\nif (!claims.scopes.includes('write')) return res.status(403).json({ error: 'INSUFFICIENT_SCOPE' })\n```\n\n## Config reference\n\n| Option | Env var | Default |\n|--------|---------|---------|\n| `secret` / `secrets` | `APIKEE_SECRET` | — |\n| `serverKey` | `APIKEE_SERVER_KEY` | — |\n| `projectEnv` | `APIKEE_PROJECT_ENV` | — |\n| `headerName` | — | `\"x-api-key\"` |\n| `defaultExpiresIn` | — | `\"90d\"` |\n| `failOpen` | — | `true` |\n| `serverTimeout` | — | `3000` ms |\n\n## Docs\n\n[apikee.com/docs](https://apikee.com/docs) · [apikee.dev](https://apikee.dev)\n","readmeFilename":"README.md"}