{"_id":"@bonapasogit-dev/responder","_rev":"2-de77fb350bba9ad4021ba99118c84604","name":"@bonapasogit-dev/responder","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@bonapasogit-dev/responder","version":"1.0.0","keywords":["response","api","express","typescript"],"author":"","license":"MIT","_id":"@bonapasogit-dev/responder@1.0.0","maintainers":[{"name":"vldcreation","email":"vicktordesrony@gmail.com"}],"homepage":"https://github.com/bonapasogit-dev/bonatools#readme","bugs":{"url":"https://github.com/bonapasogit-dev/bonatools/issues"},"dist":{"shasum":"f0d9cf17780ea9ec425eb372b4dd885c5bd75c56","tarball":"https://registry.npmjs.org/@bonapasogit-dev/responder/-/responder-1.0.0.tgz","fileCount":34,"integrity":"sha512-0fx69xFVDHHX4XRwQate3jPCUPC97HyaP6bePyoR4sp+vPRSDqe778C7CMijb20y07BF8bcBO17xDVLYo9ky4w==","signatures":[{"sig":"MEUCIFIQ9OanFnaShsGKwANoAMf1cutbJ0Gks6SxUBMEJeitAiEAk14cMDKa6aIt1D7POyMRl1JrH4+8iVSwWe/7wI9242A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51285},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"843a529bb37b4753db1d0a9ebf8ce07b48d39a30","scripts":{"test":"vitest run","build":"npx tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"vldcreation","email":"vicktordesrony@gmail.com"},"repository":{"url":"git+https://github.com/bonapasogit-dev/bonatools.git","type":"git"},"_npmVersion":"10.9.2","description":"Standardized API response builder and handler utilities","directories":{},"_nodeVersion":"22.13.1","_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.2.0","typescript":"^5.3.3","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/responder_1.0.0_1773819092916_0.7088639126323586","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bonapasogit-dev/responder","version":"1.0.1","description":"Standardized API response builder and handler utilities","main":"dist/index.js","types":"dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/bonapasogit-dev/bonatools.git","directory":"packages/responder"},"homepage":"https://github.com/bonapasogit-dev/bonatools/tree/main/packages/responder#readme","scripts":{"build":"npx tsc","test":"vitest run","test:watch":"vitest","prepublishOnly":"npm run build"},"keywords":["response","api","express","typescript"],"author":"","license":"MIT","devDependencies":{"@types/node":"^20.11.0","typescript":"^5.3.3","vitest":"^1.2.0"},"engines":{"node":">=18.0.0"},"_id":"@bonapasogit-dev/responder@1.0.1","gitHead":"7fd74e8a7bc9bcbc6ee9896847ae35d3458da561","bugs":{"url":"https://github.com/bonapasogit-dev/bonatools/issues"},"_nodeVersion":"22.13.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-+04ss8KGyzA0FX5hs5gvo7dkJCo2KOWR5wqqjLqJodG4FWU/2A4mG15/hTu52I+9WV1OLpHQcENpSmEd/fZvgA==","shasum":"f154d30ea6e8b6f9e86e252508b1c6cfe49eb5e8","tarball":"https://registry.npmjs.org/@bonapasogit-dev/responder/-/responder-1.0.1.tgz","fileCount":34,"unpackedSize":51433,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC//E2KZmVpp+KRQI2l5o4rs6UkHvo/ltoM3mqoIfUfZwIgQLnKJbQbydAnhof5sELIZ/q60f/YcqLQUtepFeCRy50="}]},"_npmUser":{"name":"vldcreation","email":"vicktordesrony@gmail.com"},"directories":{},"maintainers":[{"name":"vldcreation","email":"vicktordesrony@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/responder_1.0.1_1773819573143_0.36656224835717377"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-18T07:31:32.817Z","modified":"2026-03-18T07:39:33.732Z","1.0.0":"2026-03-18T07:31:33.042Z","1.0.1":"2026-03-18T07:39:33.281Z"},"bugs":{"url":"https://github.com/bonapasogit-dev/bonatools/issues"},"license":"MIT","homepage":"https://github.com/bonapasogit-dev/bonatools/tree/main/packages/responder#readme","keywords":["response","api","express","typescript"],"repository":{"type":"git","url":"git+https://github.com/bonapasogit-dev/bonatools.git","directory":"packages/responder"},"description":"Standardized API response builder and handler utilities","maintainers":[{"name":"vldcreation","email":"vicktordesrony@gmail.com"}],"readme":"# @bonapasogit-dev/responder\n\nUtility package for standardized API responses across Node.js services.\n\n## Features\n\n- ✅ Strict REST-friendly HTTP status behavior\n- ✅ Unified response payload shape with `data`, `meta`, and `error`\n- ✅ Express-style response handlers\n- ✅ Auto-adapting middleware helpers (`status/json` and `code/send`)\n- ✅ Consistent custom error payload object\n- ✅ Validation error normalization\n- ✅ TypeScript-first API\n\n## Installation\n\n```bash\nnpm install @bonapasogit-dev/responder\n```\n\n## Quick Start\n\n```typescript\nimport responder = require('@bonapasogit-dev/responder');\n\nconst payload = responder.builder.success({\n    message: 'User loaded',\n    data: { id: 'u-1' },\n    meta: { traceId: 'abc123-def456' },\n});\n\nconsole.log(payload);\n\n// {\n//   message: 'User loaded',\n//   data: { id: 'u-1' },\n//   meta: { traceId: 'abc123-def456' },\n//   error: null\n// }\n```\n\n## Response Schema\n\nAll responses follow the same root shape:\n\n```json\n{\n    \"message\": \"Success\",\n    \"data\": {},\n    \"meta\": {},\n    \"error\": null\n}\n```\n\nError responses:\n\n```json\n{\n    \"message\": \"Validation Error\",\n    \"data\": null,\n    \"meta\": {},\n    \"error\": {\n        \"code\": \"VALIDATION_FAILED\",\n        \"message\": \"email is required\",\n        \"details\": [\n            { \"field\": \"email\", \"issue\": \"missing\" }\n        ],\n        \"traceId\": \"abc123-def456\"\n    }\n}\n```\n\nYou can place any client-facing error context inside `error` (for example `traceId`, `details`, `code`, provider-specific fields). Clients can simply check whether `error` is `null`.\n\n## Middleware (Express/Fastify/Nest/Adonis)\n\n### Express-style middleware\n\n```typescript\nimport responderMiddleware from '@bonapasogit-dev/responder/middleware';\n\napp.use(responderMiddleware());\n\napp.get('/health', (_req, res) => {\n    return res.success({\n        message: 'Service ready',\n        data: { uptime: process.uptime() },\n    });\n});\n```\n\n### Fastify-style reply decoration\n\n```typescript\nimport responderMiddleware from '@bonapasogit-dev/responder/middleware';\n\nfastify.addHook('preHandler', async (_request, reply) => {\n    responderMiddleware.attach(reply);\n});\n\nfastify.get('/', async (_request, reply) => {\n    return reply.success({ data: { ok: true } });\n});\n```\n\n`@bonapasogit-dev/responder/middleware` auto-detects:\n\n- `response.status(...).json(...)` (Express / Nest Express)\n- `reply.code(...).send(...)` (Fastify / Nest Fastify)\n- `response.status(...).send(...)` (Adonis-style)\n\nHTTP statuses are strict and semantic: `201` for created, `400` for bad request/validation, `401`, `403`, `404`, `409`, and `500`.\n\n## API\n\n- `builder.success(options)`\n- `builder.error(options)`\n- `builder.validation(options)`\n- `builder.forward(response)`\n- `handler.success(res, options)`\n- `handler.created(res, options)`\n- `handler.noContent(res)`\n- `handler.badRequest(res, options)`\n- `handler.validationError(res, options)`\n- `handler.notFound(res, options)`\n- `handler.conflict(res, options)`\n- `handler.unauthorized(res, options)`\n- `handler.forbidden(res, options)`\n- `handler.internalError(res, options)`\n- `handler.error(res, options)`\n- `handler.forward(res, options)`\n- `middleware(options)`\n- `middleware.attach(response, options)`\n- `middleware.createMethods(response)`\n- `normalizer.fromJoi(error)`\n- `normalizer.fromExpressValidator(errors)`\n- `normalizer.fromCustom(field, issue)`\n\n## Development\n\n```bash\nnpm run build\nnpm test\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}