{"_id":"@0layimika/api-response-kit","_rev":"4-972a5528ae4b227bede8bfc6a358cb63","name":"@0layimika/api-response-kit","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@0layimika/api-response-kit","version":"0.1.0","_id":"@0layimika/api-response-kit@0.1.0","maintainers":[{"name":"0layimika","email":"olakay739@gmail.com"}],"dist":{"shasum":"428b8f41b950a66246eeb44a3d7cc28b935d5e61","tarball":"https://registry.npmjs.org/@0layimika/api-response-kit/-/api-response-kit-0.1.0.tgz","fileCount":38,"integrity":"sha512-VasFfN4eLOXving3RfPq3B1c7Uq0OoHRUaY5c9SVFjLrRLa5hXHXqFwApzhasP61ksouimrARbY50cH2zlI0fA==","signatures":[{"sig":"MEQCIERm3mAPBQsMxI42eOIFfQLmg8JV9Qiy+kw3fDaUEA3fAiBuZddvCUnqfNLUq6IFyiij91YWiPq8TJh0bEud/RbFwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34665},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./express":{"import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"}},"gitHead":"d46084deec28657fcbb686989a5c9e5957e85d8b","private":false,"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"0layimika","email":"olakay739@gmail.com"},"_npmVersion":"10.9.2","description":"A typed toolkit for consistent API success and error responses","directories":{},"_nodeVersion":"22.17.1","dependencies":{"tsup":"^8.5.1","express":"^5.2.1","fastify":"^5.6.2"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.9.3","@types/node":"^25.0.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/api-response-kit_0.1.0_1767431646232_0.02717483953447397","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@0layimika/api-response-kit","version":"0.1.1","_id":"@0layimika/api-response-kit@0.1.1","maintainers":[{"name":"0layimika","email":"olakay739@gmail.com"}],"dist":{"shasum":"2f59c8338a147b1a1703789587faf002a733568b","tarball":"https://registry.npmjs.org/@0layimika/api-response-kit/-/api-response-kit-0.1.1.tgz","fileCount":38,"integrity":"sha512-2oZ/E3TOsMVeh+hN7p7fDzPLosqkZFqRQIqz+K8fr2T/dhXbj1shnE0iNzyUycicVj4gXs5J6JYTk0BSJWXJ4g==","signatures":[{"sig":"MEYCIQDev7Sdl9942IcIRTKwBL16LOHjksZHZyyXEauDoKAMRgIhAKen5mjz0IgeneRE+2VOKfiQ/ie35vKFxJrmAcf27FXj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34742},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./express":{"import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"}},"gitHead":"3291b02bf5d405d7b6143088fe88c01683649e5f","private":false,"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"0layimika","email":"olakay739@gmail.com"},"_npmVersion":"10.9.2","description":"A typed toolkit for consistent API success and error responses","directories":{},"_nodeVersion":"22.17.1","dependencies":{"tsup":"^8.5.1","express":"^5.2.1","fastify":"^5.6.2"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.9.3","@types/node":"^25.0.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/api-response-kit_0.1.1_1767432938046_0.8693622658909994","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@0layimika/api-response-kit","version":"0.1.2","keywords":["api","express","fastify","nestjs","typescript","api-response","rest","http","error-handling","success-response","api-toolkit","developer-tools"],"_id":"@0layimika/api-response-kit@0.1.2","maintainers":[{"name":"0layimika","email":"olakay739@gmail.com"}],"dist":{"shasum":"0cb0cd742a0fcaf6107d211e8596c0adef71b198","tarball":"https://registry.npmjs.org/@0layimika/api-response-kit/-/api-response-kit-0.1.2.tgz","fileCount":38,"integrity":"sha512-B/rQBkDpCTk+oPXncuRZMd7FRiEd5NMq/evh/p8vvmv6+JnBl9nPgio3OLA3zQFOqZkSQyh3W2fBEcBz7Vgm1g==","signatures":[{"sig":"MEUCIQCN5YqAkKJb9e6kkP5vObOfcGniSgFJZJA5GlUG44fVTQIgMn+CLx29wMDeA+vBB4p64SvP53ktew+dQ95qNwTfIvc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34967},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs"},"./express":{"import":"./dist/adapters/express.js","require":"./dist/adapters/express.cjs"},"./fastify":{"import":"./dist/adapters/fastify.js","require":"./dist/adapters/fastify.cjs"}},"gitHead":"ec73434e43710f8c034ce45d977d264a714ec5b9","private":false,"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"0layimika","email":"olakay739@gmail.com"},"_npmVersion":"10.9.2","description":"A typed toolkit for consistent API success and error responses","directories":{},"_nodeVersion":"22.17.1","dependencies":{"tsup":"^8.5.1","express":"^5.2.1","fastify":"^5.6.2"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.9.3","@types/node":"^25.0.3","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/api-response-kit_0.1.2_1767434381449_0.8571540813560319","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@0layimika/api-response-kit","version":"0.1.3","description":"A typed toolkit for consistent API success and error responses","keywords":["api","express","fastify","nestjs","typescript","api-response","rest","http","error-handling","success-response","api-toolkit","developer-tools"],"main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","type":"commonjs","exports":{".":{"require":"./dist/index.js","import":"./dist/index.mjs","types":"./dist/index.d.ts"},"./express":{"require":"./dist/adapters/express.js","import":"./dist/adapters/express.mjs","types":"./dist/adapters/express.d.ts"},"./fastify":{"require":"./dist/adapters/fastify.js","import":"./dist/adapters/fastify.mjs","types":"./dist/adapters/fastify.d.ts"}},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit"},"dependencies":{"express":"^5.2.1","fastify":"^5.6.2","tsup":"^8.5.1"},"devDependencies":{"@types/express":"^5.0.6","@types/node":"^25.0.3","ts-node":"^10.9.2","typescript":"^5.9.3"},"private":false,"_id":"@0layimika/api-response-kit@0.1.3","gitHead":"ec73434e43710f8c034ce45d977d264a714ec5b9","_nodeVersion":"22.17.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-YX6oaMCK91e+tsYw1sVeZGLMhdfHkT3E5bquYvHXha0Sx9nFbFwZFSOtQWfhNSDArv7ri4FKvdZ5sa2H1o0jXA==","shasum":"2ef21e737fd8215cc5b6778fdf87e16d07ccf4a9","tarball":"https://registry.npmjs.org/@0layimika/api-response-kit/-/api-response-kit-0.1.3.tgz","fileCount":38,"unpackedSize":35098,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAahrHRzyggBVZ7PKXLYFvnZn+du3OwVmz4ZGgpmfjXcAiA8q9BDBWSh6W0w9AeYFkhnPJr4rxi7jsxuDqm7KCy4NQ=="}]},"_npmUser":{"name":"0layimika","email":"olakay739@gmail.com"},"directories":{},"maintainers":[{"name":"0layimika","email":"olakay739@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/api-response-kit_0.1.3_1767508271819_0.33733963196586414"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-03T09:14:06.092Z","modified":"2026-01-04T06:31:12.159Z","0.1.0":"2026-01-03T09:14:06.409Z","0.1.1":"2026-01-03T09:35:38.201Z","0.1.2":"2026-01-03T09:59:41.587Z","0.1.3":"2026-01-04T06:31:11.972Z"},"keywords":["api","express","fastify","nestjs","typescript","api-response","rest","http","error-handling","success-response","api-toolkit","developer-tools"],"description":"A typed toolkit for consistent API success and error responses","maintainers":[{"name":"0layimika","email":"olakay739@gmail.com"}],"readme":"# api-response-kit\n\n> A small, TypeScript-first toolkit for **consistent API success and error responses**.\n\n---\n\n## Why This Exists\n\nMost APIs suffer from the same problems:\n\n- Inconsistent response shapes across endpoints\n- Ad-hoc error handling (`throw new Error`, random JSON)\n- Frontend has to guess response structures\n- Documentation drifts away from reality\n- Boilerplate `res.status().json()` everywhere\n\n**api-response-kit** fixes this by enforcing a **predictable response contract** for **both success and error responses** while keeping your code clean and framework-agnostic.\n\n---\n\n## Core Idea\n\nInstead of:\n\n```ts\nres.status(200).json(user)\nres.status(400).json({ error: \"Invalid input\" })\n```\n\nYou write:\n```ts\nreturn Ok(user)\nreturn BadRequest(\"Invalid input\")\n```\n## Response Contract\n### Success Response\n```ts\ntype ApiSuccess<T> = {\n  success: true\n  data: T\n  message?: string\n  meta?: Record<string, unknown>\n}\n```\n### Error Response\n```ts\ntype ApiError = {\n  success: false\n  error: {\n    code: string\n    message: string\n    details?: unknown\n  }\n}\n```\n## Installation\n```bash\nnpm install @0layimika/api-response-kit\n\nyarn add @0layimika/api-response-kit\n\npnpm add @0layimika/api-response-kit\n```\n## Basic Usage\n### Success Helpers\n```ts\nimport { Ok, Created, NoContent } from \"@0layimika/api-response-kit\"\n\nreturn Ok(user)\nreturn Created(newUser)\nreturn NoContent()\n```\n### Error Helpers\n```ts\nimport { BadRequest, NotFound, Unauthorized } from \"@olayimika/api-response-kit\"\n\nif (!user) return NotFound(\"User not found\")\nif (!email) return BadRequest(\"Email is required\")\nif (!token) return Unauthorized()\n```\n\n## Controller Example\n```ts\nexport function getUser(id: string) {\n  const user = findUser(id)\n\n  if (!user) {\n    return NotFound(\"User\")\n  }\n\n  return Ok(user)\n}\n```\n\n## Express Adapter Example\n```ts\nimport { sendResponse } from \"@0layimika/api-response-kit/express\"\n\napp.get(\"/users/:id\", (req, res) => {\n  const response = getUser(req.params.id)\n  sendResponse(res, response)\n})\n```\n## Custom Errors\n```ts\nimport { CustomError } from \"@0layimika/api-response-kit\"\n\nreturn CustomError({\n  code: \"PAYMENT_FAILED\",\n  status: 402,\n  message: \"Payment authorization failed\"\n})\n```\n\n","readmeFilename":"README.md"}