{"_id":"@rabstack/rab-api","_rev":"34-3835be0c160c9ae47cddde3e7c23424d","name":"@rabstack/rab-api","dist-tags":{"next":"1.8.2-next.7","latest":"1.16.0"},"versions":{"1.0.1":{"name":"@rabstack/rab-api","version":"1.0.1","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.0.1","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"dist":{"shasum":"3635c663b8036fe8a61231c1a41464307c428b9a","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.0.1.tgz","fileCount":6,"integrity":"sha512-gRfS48K8s7YbnwZ8iTpxTRhljjZ1fvo458dzcJCLQOho6QMug6iFDWGL2le4uRjgpK7+FX1knbJiF5A+3koNZQ==","signatures":[{"sig":"MEYCIQDrJP6TFpf3VwOrD5ekXMoiDqgK7zCm9BZPtenv/mYDAwIhAN8Crrs9fXYtRP1itzA0Q31OqWy9wy+JZ1by0yPB93H8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125694},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"de40fa37083126c6ecfc107d94207aeb2d7de74b","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"_npmVersion":"10.9.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation.","directories":{},"_nodeVersion":"22.16.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"joi":"^17.0.0","typedi":"^0.10.0","express":"^4.18.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.1.13","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.0.1_1761936005307_0.9560504378010548","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@rabstack/rab-api","version":"1.1.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.1.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"0df1460ae23f89fb64b84afe46f8a1fda9a2d8b4","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.1.0.tgz","fileCount":6,"integrity":"sha512-Z2DuCb6QakJV86AeZLLDO3/anPtqcI8lihcXED5UmlDInv04bd6kT0KP1CZQO1srke1KsQpi3mC5miVrQ1+lpw==","signatures":[{"sig":"MEQCIGm77AL23eftvfj3wVCOZ+A9vDJiz6IrmjNuNhg4sit/AiB70qbqU/APrJFAZgUEruOy6NjyfHKxORUUd0ekGNWNvw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126131},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"2564f3ab610f6768d455a3d79393790b4a5e06cd","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.9.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"22.16.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"joi":"^17.0.0","typedi":"^0.10.0","express":"^4.18.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.1.13","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.1.0_1762093314112_0.3250200717755005","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@rabstack/rab-api","version":"1.3.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.3.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"cbb7b81fc021704f92f6ea78e01f6482a6b6845f","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.3.0.tgz","fileCount":6,"integrity":"sha512-f5VR7A4Gl4aI7uR27RQ8ww9SiU44OEankNkJmnHq9/FvGl0ULyuflThuyIjdL+HglIbgDBu6J9tzQtaG6xSWAQ==","signatures":[{"sig":"MEUCIQCdneYewHO5fwXNJF+zZGRFYPLP3J8AnLeM5MeloSXBRQIgGYj6i2x/Ofy6GyKArR0nX804BIfIM1V1uruNMJYxRb8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126130},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"3105051a59b5351ce40ea9a2a87b28e1d7d7b3ce","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.9.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"22.16.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"joi":"^17.0.0","typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.1.13","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.3.0_1762099930211_0.8728735927553504","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@rabstack/rab-api","version":"1.4.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.4.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"962eb0b3948e9f377a82eecbdf33e9cdb71c6a2c","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.4.0.tgz","fileCount":6,"integrity":"sha512-lb/InB7FKFiDgBtlhGXeJdhRlIhlxJDUj+FdlX42hay7VeoqVFlnAV14mAqx2T6S+ePtDCIpqWZbDrVZfLuNIg==","signatures":[{"sig":"MEYCIQD8o3x440Usgk1blL8x8wA54r+hmeXKkpHuBbNNhEvzAgIhAKMRXUcLV7rwm9yrxY1O/BWjfTEfvIiECEEsHqgMq1nL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126282},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"32028397618e2e87ffef950aa17c0393aa85f2d7","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.9.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"22.16.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"joi":"^17.0.0","typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.1.13","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.4.0_1762127204765_0.22532636766764091","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@rabstack/rab-api","version":"1.5.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.5.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"90c2b44e797d47c28990f06575d44fea6e25ac55","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.5.0.tgz","fileCount":6,"integrity":"sha512-2BrGJVHxoJWulpKEBsly/Fr6nJYHk6xemnuSlhz1jf1kaaz3TjRP2vcEa6cEq5hXc+ZkM2Pq2hfum5RjWT0B5w==","signatures":[{"sig":"MEUCIQDqnojMdtXSlFjarv7ejldQH1ZvOv2oIlv28dqffL8diwIgP8qq0cP08pU0GnhjEzLxWt6gZYfDgcJoVb60vtNu62E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126281},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"9d0e9d8f4a361a98c69b4b238c4c7f2075596457","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.9.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"22.16.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"joi":"^17.0.0","typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.5.0_1762127396032_0.2846906224776753","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@rabstack/rab-api","version":"1.6.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.6.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"d889db571223b7f6bebfb6fa8044c549d6a7635a","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.6.0.tgz","fileCount":6,"integrity":"sha512-F1/ZLiny4RbPCuMxnwu1vN09uGguj7FSGMl73SnjnbSMnj98eJDR/Aycn1ROlvsu5sn++6EnDKG0xDUV/iPNyA==","signatures":[{"sig":"MEUCIQDneF/5hHvSlEhHMCXljVMHxO4dZUYBeb4DRCp0IRRY9wIgGkzY9wvmc1Yj1UHt2iav2XUlP3XX382OM5LXu0O/gek=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126259},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"558602a3b3b4cdb9e59a59f25282c09140ec45ac","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.9.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"22.16.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.6.0_1762127636266_0.39201971562696336","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@rabstack/rab-api","version":"1.7.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.7.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"b8440b3a02652b4f246f9c82493f38d1cd79f947","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.7.0.tgz","fileCount":6,"integrity":"sha512-00gXgr8MLELxwSmwC7dTmA6vUmCYnW7TQSU09+soBMwpW8rEp71yIC/ni/cOykd7Y5jwnFrrgItaS/cvaMaysg==","signatures":[{"sig":"MEUCIDVJWI2S4rYyjqJOlAjh2mH6ftdPRO2Zv1yxzI1OCX1zAiEAvnmBTPKfJ/XiRhlrD7KovwQNcaaHP8mgcFuD2KKoqlI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126831},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"63f4dd5b00bba7adb7a1f93c2705dc926dd125d8","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.9.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"22.16.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.7.0_1765076737740_0.599067286039541","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@rabstack/rab-api","version":"1.8.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"79ea59370248f4c398fe4643e3bbfbb2c1f2ccf7","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.0.tgz","fileCount":6,"integrity":"sha512-XnjyjP83EALXV4wvHJoHqiLGDS1FN2kYw2BtWruPbL0alCbChIqhBMiH0ydNfyRlnxVILXjAjz7iE8vbesxivw==","signatures":[{"sig":"MEUCIDaej+ofVaEd+btuHsJ9KrncuCU6A/JoPURYE3lR3/4KAiEAm6mNkJYJaYbC0amRmXS3XJwCOUHqtIUUQJo8wcaD11k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126663},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"9566865d59bbad3c761ec5cb599ec516e0287cac","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.9.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"22.16.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.0_1765077196017_0.4504581999145989","host":"s3://npm-registry-packages-npm-production"}},"1.8.1-next.0":{"name":"@rabstack/rab-api","version":"1.8.1-next.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.1-next.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"2be11cd96e77215fe989fbd4c7c48295d154c504","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.1-next.0.tgz","fileCount":6,"integrity":"sha512-aJN2DKeuUtvQ1vNAh5NGIRUgmiONncmC1k9cBRoyeexwNDAQt6PuMI9a3tf1eZxZjMJdFDTt4aFf0RDEnVqXGw==","signatures":[{"sig":"MEYCIQDDhNao35aiBQ7snK+oNU8U2lo35IbzjZnUKscu/MT7OwIhAMnOen0grcElCWb3FOBGPUatWs6LRYO9v8V54dv8RTea","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126670},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"4835f7e654cac2bb907da79cf2d2bcb7a900bbc0","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.1-next.0_1765949692753_0.002446494830823376","host":"s3://npm-registry-packages-npm-production"}},"1.8.1-next.1":{"name":"@rabstack/rab-api","version":"1.8.1-next.1","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.1-next.1","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"79300cbcf61d7b3893ee395fceef793d82dab4b0","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.1-next.1.tgz","fileCount":6,"integrity":"sha512-cTrWBB8lV5Du8owVXlh/nhaMPdoM6MfJPQ7DpZq3+MWEgfBo4kiImHIKqMWVuqKDEvMm7VU/Fzzz8JK2R90cyg==","signatures":[{"sig":"MEYCIQCbH0g215m9HLW+kL3UhKrW9I7gkOuw1vt7dadnmil82wIhAPzZw9t3OmXFhmWZcf9uBkhrMExvbw3/cPsEylOZEUYR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139652},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"5642e2b6643370e6a7589e4c457eabbc613e9bcf","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.1-next.1_1766282695758_0.9488683677087653","host":"s3://npm-registry-packages-npm-production"}},"1.8.1-next.2":{"name":"@rabstack/rab-api","version":"1.8.1-next.2","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.1-next.2","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"5abb968818ed2946db98398b82c3c8d42a2fc978","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.1-next.2.tgz","fileCount":6,"integrity":"sha512-QT6wAPU6kmr5LcNLlaRVljIe0umrah8BhQ6u6cFzmSYTilmtMUdnBZWDVXGbUbT/r5k4U1KJUm6PdDeBB2/bXQ==","signatures":[{"sig":"MEQCIFxXLIq8Of/LMINg82x9QJO+xi2wz3gVd3P9b4YDJnYyAiAJxhqFFICYPBaODJuUt+KYYIx5BbGcOoYID8VYuj/Gog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139652},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"9de0e13128be8e6be623c565b5e499a1a1a6c913","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.1-next.2_1766283393768_0.745202997302642","host":"s3://npm-registry-packages-npm-production"}},"1.8.1-next.3":{"name":"@rabstack/rab-api","version":"1.8.1-next.3","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.1-next.3","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"b29ca45243f69fd1e8bf43f50411d90948d3c2ed","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.1-next.3.tgz","fileCount":6,"integrity":"sha512-fJ4EpKU5w6xUumpbB0ArKVZ+iZ6+FuKFkJphyfx3pV0uG2Hky4oXQvMeLPX6RfUYky/dv0aaidUGW8zGpX7ZyQ==","signatures":[{"sig":"MEQCIG6qQb2BUms35kJVzyI6+uFihM89mSwoAJRxnJYtFM/IAiA/xAmV0SkcIVv2kDJldC3J1N3MqVMALXKzGSLQ/64FNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139652},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"c4587166ed7a5ac101745ccee3f211f2d4c9afdf","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.1-next.3_1766283608165_0.8608917196793084","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"@rabstack/rab-api","version":"1.8.1","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.1","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"01007b97c2fbcfe9875315a43d093f3d8016f12a","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.1.tgz","fileCount":6,"integrity":"sha512-No2GpRMjmdtyKYD5GuDcKDsuWS0aykc9OWDJsl1KQBFr2+xf/va90vbFPQE9CvkweQMXzBtSPJyz8Aof/1nQWQ==","signatures":[{"sig":"MEYCIQDzqDvsUxAq5x4Dx1+uJsVU43Ds5X0Id2UHnzJqVGD3CAIhAMWiusTZ29e/l3VMwVrLigKmGYxK9FoXjk9d5hlXPpEf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139645},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"b538ad2a08b3215eba664c10b6d7ed1d515933b8","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.1_1766285839031_0.6938310593546653","host":"s3://npm-registry-packages-npm-production"}},"1.8.2-next.3":{"name":"@rabstack/rab-api","version":"1.8.2-next.3","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.2-next.3","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"3388c94d610a7d666e2c8680d4affb0f6fa9aa0a","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.2-next.3.tgz","fileCount":6,"integrity":"sha512-x3f8nh0C7yHeNLWcawljDAmcliP5i7aGh13U0q22OeVPvD+pE0HrsTZU1DA/+woOw7xsBYTgdUgKARfqcJBKew==","signatures":[{"sig":"MEUCIEfOoqXi+uMsGJU8xvPJpld4/raIZJ1ltWGEgcsn1cFRAiEApcPNheMGiuBIVJ8UCvqsHWg/1mKAs05x7DqecRDdNWc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139652},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"c4d5d21a02da890a14a3dd900f32f846204635d7","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.2-next.3_1766287923141_0.5903469996968231","host":"s3://npm-registry-packages-npm-production"}},"1.8.2-next.4":{"name":"@rabstack/rab-api","version":"1.8.2-next.4","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.2-next.4","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"b64917872fd93dc6587a9a3a9bdfef4bbc036c81","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.2-next.4.tgz","fileCount":6,"integrity":"sha512-JfXgWjEsmEWXwwyJI5RnSUN+p1k2F/1es5YgrlB7ifeGtsk1uVCVqFzowtBtffznHAgkeea36H9fFyHrrBhsYg==","signatures":[{"sig":"MEYCIQD4VarlKQBekXM7a/AD9zuJrSU0ymfi+TCmCr9YNIXffgIhAOFajuu0tul8+BwsOHwf4JLRMf79X1rUpGknJ9eTOF+R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139652},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"b00389fcc6d721cadbaa2875364754912a45c146","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.2-next.4_1766288162775_0.8584800788043627","host":"s3://npm-registry-packages-npm-production"}},"1.8.2-next.5":{"name":"@rabstack/rab-api","version":"1.8.2-next.5","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.2-next.5","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"5ceaac6ba56f57c0b808b00982c87ec9b52c7358","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.2-next.5.tgz","fileCount":6,"integrity":"sha512-w25+4MUkiwJzLeMWzE/xxetemHaTzlAA7+cP/Pyxn1MbeUaL4C1Fc5uskVVitgNfuS/Qnhlv9pd4pNRRrdLFXg==","signatures":[{"sig":"MEMCH2OLOEncBZzP8gcOp3kR+RyZcKgcdrUgVru6PlTf8f8CIFhEoHquriE15smorkXaN/ynNakghb835LpzAharDOB5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139652},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"144203d2c11f97efa833544c45cbbda56023b217","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.2-next.5_1766288777265_0.5421879987051736","host":"s3://npm-registry-packages-npm-production"}},"1.8.2-next.6":{"name":"@rabstack/rab-api","version":"1.8.2-next.6","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.2-next.6","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"69a5c7ab93fa6a1d7f09a02aa6b452c9db8baaea","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.2-next.6.tgz","fileCount":6,"integrity":"sha512-dPdi1QNm1ntaGH1PnSboHxvRWHvrV3ogpd4+QYrTsraOFxOUJBY23GLN4OKxItnNCJyWjPpAAp7OvE/22TO2EQ==","signatures":[{"sig":"MEUCIGmqGFD7aViRTGVv/zREOVWgWw9w23MiVsk3LeP86G32AiEAuxsNDvsxyEdh4JzqVIOjyNbWZONHGdko/YLB7awK/fI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139652},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"2f4038ee5379e3e40c7c56d38ea7e78fc540b8c9","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.2-next.6_1766289416934_0.8692762194257282","host":"s3://npm-registry-packages-npm-production"}},"1.8.2-next.7":{"name":"@rabstack/rab-api","version":"1.8.2-next.7","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.2-next.7","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"4164f92bb0e6c1c0d953165971cb0566b134d2cf","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.2-next.7.tgz","fileCount":6,"integrity":"sha512-j2LQbmmPlqCzX9KdMCz55WqyTxIgDpVfeXA1igFwsmrJ4H8B4urCzLxMX9/Q2yPRyK4Iuttk0rh90ds0R9D65A==","signatures":[{"sig":"MEUCIQCftFDDh5LinXiG+1+ZFcDNPedrLCnCs0jspgPKow/ZUgIgIQho6g/sHUcvog4dp0pxKiviKT59rLiRz7SrdMMPY3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139663},"main":"./dist/index.cjs.js","module":"./dist/index.esm.js","gitHead":"dc7fb877194b585057fd4853e132c19787def891","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.2-next.7_1766290496108_0.17290694785225602","host":"s3://npm-registry-packages-npm-production"}},"1.8.3":{"name":"@rabstack/rab-api","version":"1.8.3","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.8.3","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"3fc607d95a9c4ab565cace5f6ac5a5110c22c55c","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.8.3.tgz","fileCount":6,"integrity":"sha512-/nDgMk07TUznWYVn5y+v6lVxeBZ4ALScGHwyianOS7Rukws56FIoPm+NQYhbezcmhjyx9xBWmLrRVCAjzBxFKw==","signatures":[{"sig":"MEYCIQD5Iw3Pv3Jhcka3b4nTJLlZZmk7GmRK03vDnPCKP75IogIhANysokAhEpdnyPsX4FJeLlCVRFGGMzyfQOzR50akFJPJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139656},"main":"./dist/index.cjs.js","module":"./dist/index.esm.js","gitHead":"2b5e8a614343bcd3782ebc2350d68cb3655c1c67","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.8.3_1766290731165_0.33712050017983297","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@rabstack/rab-api","version":"1.9.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.9.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"915b3e621d4d9da9948d86720399c4bec580e225","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.9.0.tgz","fileCount":6,"integrity":"sha512-5W7eMAwneq3lNeaqKR2Mg7vfYqNNPdopYa+B2HboiJsVGne5O2zMbDDKlbkOZTtDCZiHvRf5xX6/6pbOinyX+w==","signatures":[{"sig":"MEUCIDyfZWIc4aCZ+5F4mZZBUsxVV3N+OX3VbO2YG3S50PVIAiEA8swWQWLquiGG8GGcWxk8MV7bd/0+W1lZsNX2SrWAx1E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139654},"main":"./dist/index.cjs.js","module":"./dist/index.esm.js","gitHead":"6fd508fa41e0d31d1af3c0d78e11a48b0f65addc","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.9.0_1766292537874_0.011306004847935425","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@rabstack/rab-api","version":"1.9.1","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.9.1","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"8b533e1880cd3e61e4d6998f02bd25ba87e92a57","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.9.1.tgz","fileCount":6,"integrity":"sha512-YYVZC5tBDim7hfekcdI4wqSp7QgOV0EUKmAdOmgPANkL7ip9Ep++H01WeeyhWtmG4BeoVmCensU0QTsgcvefhA==","signatures":[{"sig":"MEQCIHRvn/3wvBzo7LcgWCQZj6mWNFOwRPU4tTzfgcIAXv4KAiAlcDregAMSRwjvbGR25bNkOvuQjLnq+0ykeL4ZME179w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141418},"main":"./dist/index.cjs.js","module":"./dist/index.esm.js","gitHead":"e10834de2d2214542f3695cd868b47cce74f71a0","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.9.1_1766293447183_0.9325708957439831","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@rabstack/rab-api","version":"1.10.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.10.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"2cf54d362188514537a09a41af275247434e1e04","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.10.0.tgz","fileCount":6,"integrity":"sha512-ETj5YvwwegeB3Nfkc52ukNEpurZiptq57T+rk7LpgmpYkoLKBKNWUDu1Dix0hBEk0RDk8+CN597tT+x66CgudQ==","signatures":[{"sig":"MEUCIHQzSQxpExNYNPo6DHhf6jMq9juaIUfbPUVOHgm0L30lAiEArQDnKu8aDh/6P//4MtU+UCQT3Mz6tprygbROFNgHybU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141637},"main":"./dist/index.cjs.js","module":"./dist/index.esm.js","gitHead":"260b77bc23de1e342f87e89cfb10dcad6a8993d2","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.10.0_1766294305202_0.717256272227901","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"@rabstack/rab-api","version":"1.10.1","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.10.1","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"2542b85176acd534e76cd1eb5575ce5c3b68b88d","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.10.1.tgz","fileCount":6,"integrity":"sha512-j5oZzS3GLec4M2td7gjjzPqs4cuWeQivSwtqt7UVOkj2dF0Lspb16vH9fwldhuFgZ3Zc+9s7fx/O0pfRdc7ELQ==","signatures":[{"sig":"MEUCIQCYNj87hoR/IPxVacVf8Wc8jR0Oin46Rx8W5RGGBVy4sgIgNyGkfIJ9actSeRMdFTTE69xchnDSN/LKpVcXbigMbcM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141627},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"afb650e8aa2e0d0f000f3e508e35cdbb056c1f36","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.10.1_1766320948456_0.8841495142464695","host":"s3://npm-registry-packages-npm-production"}},"1.10.2":{"name":"@rabstack/rab-api","version":"1.10.2","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.10.2","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"13b2cdb74957327251cfd7b4e92594ddf6cb041b","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.10.2.tgz","fileCount":6,"integrity":"sha512-0AjSliu4nWDrgrVf5p2BREmFTnA6Gx5ElBxkkuc/EV1P3zRKwtSqjGGlKEPFC7htvMv85sK0nimSLGxJBwxyhg==","signatures":[{"sig":"MEYCIQD7U59aw4jiFXpFKe7zT4KJLOjua5knP4tikGItDkTOFQIhAIZpuzBMHZIyxEPopG5veQTYhgwXCAuVccfgOKXcS7k/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141627},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"cb692bb49ddbcf15bfe1d5e49c1116e14096df04","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.10.2_1766321434837_0.9733409708172123","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@rabstack/rab-api","version":"1.11.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.11.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"3c9dfe86f3524dadf0b602492c769afd0835fc8d","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.11.0.tgz","fileCount":6,"integrity":"sha512-HMUb2G4AlL68FEqPomEgtPKTV5tnkutvt2zyuMCGmoUeRLYWqmx3exDYdgfZ9guwz689KCenAvo4L/WNtaBzHA==","signatures":[{"sig":"MEUCIEHZsKXp/SS2Qv6XhmFIUycG/hxGF8TFLY32j86Kh/44AiEA05nv2mi0RlyMFoIv95UyGVRK2cSN3fd6+4O5lziUIrg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142153},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"a54a0c13e329a457ba8206ae546810362e1e2a36","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"^0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.11.0_1766323109449_0.8135251545599538","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"@rabstack/rab-api","version":"1.11.1","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.11.1","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"26dad4dbf458d4fcd86f940be37bb557ec0e663d","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.11.1.tgz","fileCount":6,"integrity":"sha512-PEp5DbEVzkApdh+53tUsGAdGrG/v9Onh06bJ/QCQh80KL0BYY+zk7viBC75ngKr+NcM0gfS5UOnM1TT/m4tZzQ==","signatures":[{"sig":"MEYCIQC3Ojl0uRN5O9azosof1OVqeEHW0Gf+trEM7qzhnlrwXQIhALZAcV4mgfdR2xmohMdwcCxMf2vP1W7+0h++UV8P/zN8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142232},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"5992b00d5bf66f8fead9772375675fbe5859ea79","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.11.1_1766443053774_0.3450322450582428","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@rabstack/rab-api","version":"1.12.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.12.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"65755153b79575ccb97fd0594e87555228ea6f69","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.12.0.tgz","fileCount":6,"integrity":"sha512-SawosG4frvQ7BahFenFNSjZME1s8n6IBbL8x7tcoyuRFQ4+q1CFlrJgI5ZhKWpVNl0jmMZNfuFfYp6E42QpnKQ==","signatures":[{"sig":"MEYCIQC1UhomYPjl0GpxF5tZwJ6gKAOuYXyQrj71fe3AqJKfvgIhAM54rl+iq2sS1QiLE37gzUt4WEcWnFq6asgCioX05yfI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145822},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"bdd28db0addfd0d0be48d97e16981d541a4a2335","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.12.0_1769300658124_0.35458683952869063","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@rabstack/rab-api","version":"1.13.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.13.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"a40a52eeccc675a1aaf8e60b73e1f6a527fce373","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.13.0.tgz","fileCount":6,"integrity":"sha512-Y+/vEpwo/TqQG1jzQ0hTSpabYGHRDBJ73oM3y8KMd5KAV060xoNAcKwICJR+6O9LhDnCATF4akGr40XxEDh+kQ==","signatures":[{"sig":"MEQCIEXES9AaoTSbstqKI3DX1BEhtpBYuxbMfwtTc2uGdi1xAiByggF68qurMHX57UXdc6gzvaJbGlMH15FVESZSyV2N4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146608},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"7c436d8d0e7b7b8bcae768fac2b9e46eddce015c","typings":"./index.esm.d.ts","_npmUser":{"name":"bonzali","email":"katbonzali@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.20.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.13.0_1771683319249_0.40518689896796145","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@rabstack/rab-api","version":"1.15.0","author":{"name":"Softin"},"license":"MIT","_id":"@rabstack/rab-api@1.15.0","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"dist":{"shasum":"563906b8991a1d3488285dfecad603bc26dfc6c9","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.15.0.tgz","fileCount":6,"integrity":"sha512-A7qBx2O+R4zSOkeIQsmIh1f4WT2dhLo1t6c0pTiS1Ab6fTT/+zMjC59q585S6aZUgJATOBymeqz6EJa9Ez5SrA==","signatures":[{"sig":"MEUCIQC4g4+i478jm22duvuNvpfK3caRrcbuSni2WSp9z179UAIgGuOQpNMFci0aSQJcj7fAiO/Z6hjYDhjYXj6GWWNaz6I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147118},"main":"./index.cjs.js","module":"./index.esm.js","gitHead":"213f7442fa0af93a7ef410daaee4b4782b09b429","typings":"./index.esm.d.ts","_npmUser":{"name":"softin.developer","email":"softin.developer@gmail.com"},"repository":{"url":"git+https://github.com/rabstack/rabstack.git","type":"git","directory":"apps/rab-api"},"_npmVersion":"10.8.2","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","directories":{},"_nodeVersion":"20.20.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"peerDependencies":{"typedi":"0.10.0","express":"^5.1.0","jsonwebtoken":"^9.0.0","reflect-metadata":"^0.2.2","compose-middleware":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rab-api_1.15.0_1774265706858_0.8674570326892423","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"@rabstack/rab-api","version":"1.16.0","description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","author":{"name":"Softin"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/rabstack/rabstack.git","directory":"apps/rab-api"},"homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"peerDependencies":{"express":"^5.1.0","typedi":"0.10.0","jsonwebtoken":"^9.0.0","compose-middleware":"^5.0.0","reflect-metadata":"^0.2.2"},"dependencies":{},"typings":"./index.esm.d.ts","main":"./index.cjs.js","module":"./index.esm.js","_id":"@rabstack/rab-api@1.16.0","gitHead":"51a68b160fee48919b0de7aea183ed9776868156","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-HOkm+dkRhmjz8rx8FNtjd6o6SUv2FizFDpTYAo/c+6k2FZ0E+GoLxjNpYj+VbDoHAnWoB/N95wgMikWwq8lglA==","shasum":"ba07c51c0f26d571af0fe15be1f2d652769423f2","tarball":"https://registry.npmjs.org/@rabstack/rab-api/-/rab-api-1.16.0.tgz","fileCount":6,"unpackedSize":147010,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGHYqPyT3R/wzGajjZbjLohMTYSnwjYBMtalkx7XG8umAiBCpArSdu87RV3/WWNpktR3SBLcKtdqUKL+ilSfb/Ccbw=="}]},"_npmUser":{"name":"softin.developer","email":"softin.developer@gmail.com"},"directories":{},"maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rab-api_1.16.0_1776795001418_0.6286386073419368"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-31T18:08:21.309Z","modified":"2026-04-21T18:10:01.783Z","1.2.0":"2025-10-31T18:08:21.590Z","2.0.0":"2025-10-31T18:29:01.418Z","1.0.1":"2025-10-31T18:40:05.507Z","1.1.0":"2025-11-02T14:21:54.308Z","1.3.0":"2025-11-02T16:12:10.427Z","1.4.0":"2025-11-02T23:46:45.014Z","1.5.0":"2025-11-02T23:49:56.234Z","1.6.0":"2025-11-02T23:53:56.456Z","1.7.0":"2025-12-07T03:05:37.894Z","1.8.0":"2025-12-07T03:13:16.152Z","1.8.1-next.0":"2025-12-17T05:34:52.878Z","1.8.1-next.1":"2025-12-21T02:04:55.917Z","1.8.1-next.2":"2025-12-21T02:16:33.924Z","1.8.1-next.3":"2025-12-21T02:20:08.317Z","1.8.1":"2025-12-21T02:57:19.180Z","1.8.2-next.3":"2025-12-21T03:32:03.294Z","1.8.2-next.4":"2025-12-21T03:36:02.907Z","1.8.2-next.5":"2025-12-21T03:46:17.432Z","1.8.2-next.6":"2025-12-21T03:56:57.085Z","1.8.2-next.7":"2025-12-21T04:14:56.253Z","1.8.3":"2025-12-21T04:18:51.326Z","1.9.0":"2025-12-21T04:48:58.063Z","1.9.1":"2025-12-21T05:04:07.322Z","1.10.0":"2025-12-21T05:18:25.372Z","1.10.1":"2025-12-21T12:42:28.674Z","1.10.2":"2025-12-21T12:50:35.084Z","1.11.0":"2025-12-21T13:18:29.624Z","1.11.1":"2025-12-22T22:37:33.917Z","1.12.0":"2026-01-25T00:24:18.260Z","1.13.0":"2026-02-21T14:15:19.391Z","1.15.0":"2026-03-23T11:35:07.000Z","1.16.0":"2026-04-21T18:10:01.595Z"},"bugs":{"url":"https://github.com/rabstack/rabstack/issues"},"author":{"name":"Softin"},"license":"MIT","homepage":"https://github.com/rabstack/rabstack/tree/main/softin/rab-api#readme","repository":{"type":"git","url":"git+https://github.com/rabstack/rabstack.git","directory":"apps/rab-api"},"description":"A TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation","maintainers":[{"name":"softin.developer","email":"softin.developer@gmail.com"},{"name":"bonzali","email":"katbonzali@gmail.com"}],"readme":"# rab-api\n\nA TypeScript REST API framework built on Express.js with decorator-based routing, dependency injection, and built-in validation.\n\n## Features\n\n- 🎯 Decorator-based routing with TypeScript\n- 🔒 Built-in JWT authentication\n- ✅ Request validation with Joi schemas\n- 💉 Dependency injection (TypeDI)\n- 🔐 Role-based access control\n- ⚡ Response caching with purge support\n- 📝 Full TypeScript type safety\n- 🚀 Production-ready\n\n## Installation\n\n```bash\nnpm install rab-api\n```\n\n**Peer dependencies:**\n```bash\nnpm install express joi typedi reflect-metadata jsonwebtoken compose-middleware\n```\n\n## Quick Start\n\n**1. Create a controller:**\n\n```typescript\nimport { Get, RabApiGet, GetController } from 'rab-api';\n\ntype ControllerT = GetController<{ status: string }>;\n\n@Get('/health')\nexport class HealthCheck implements RabApiGet<ControllerT> {\n  handler: ControllerT['request'] = async () => {\n    return { status: 'ok' };\n  };\n}\n```\n\n**2. Bootstrap your app:**\n\n```typescript\nimport { RabApi } from 'rab-api';\nimport express from 'express';\n\nconst app = RabApi.createApp({\n  auth: {\n    jwt: {\n      secret_key: process.env.JWT_SECRET!,\n      algorithms: ['HS256'],\n    },\n  },\n});\n\napp.use(express.json());\n\napp.route({\n  basePath: '/api',\n  controllers: [HealthCheck],\n});\n\napp.listen(3000);\n```\n\n## Core Concepts\n\n### Controllers\n\nControllers handle HTTP requests using decorators:\n\n```typescript\nimport { Post, RabApiPost, PostController } from 'rab-api';\nimport * as Joi from 'joi';\n\ntype CreateUserBody = { name: string; email: string };\ntype UserResponse = { id: string; name: string; email: string };\ntype ControllerT = PostController<CreateUserBody, UserResponse>;\n\nconst schema = Joi.object({\n  name: Joi.string().required(),\n  email: Joi.string().email().required(),\n});\n\n@Post('/users', { bodySchema: schema })\nexport class CreateUser implements RabApiPost<ControllerT> {\n  handler: ControllerT['request'] = async (request) => {\n    return { id: '1', ...request.body };\n  };\n}\n```\n\n**Available decorators:**\n- `@Get(path, options?)` - GET requests\n- `@Post(path, options?)` - POST requests\n- `@Put(path, options?)` - PUT requests\n- `@Patch(path, options?)` - PATCH requests\n- `@Delete(path, options?)` - DELETE requests\n\n### Dependency Injection\n\nControllers support constructor injection via TypeDI:\n\n```typescript\nimport { Injectable } from 'rab-api';\n\n@Injectable()\nclass UserService {\n  async findAll() {\n    return [];\n  }\n}\n\n@Get('/users')\nexport class ListUsers implements RabApiGet<ControllerT> {\n  constructor(private userService: UserService) {}\n\n  handler: ControllerT['request'] = async () => {\n    return await this.userService.findAll();\n  };\n}\n```\n\n### Routing\n\nGroup related controllers with routers:\n\n```typescript\napp.route({\n  basePath: '/users',\n  controllers: [ListUsers, CreateUser, UpdateUser, DeleteUser],\n});\n\n// Nested routes\napp.route({\n  basePath: '/users',\n  controllers: [\n    ListUsers,\n    RabApi.createRouter({\n      basePath: '/:userId/posts',\n      controllers: [ListPosts, CreatePost],\n    }),\n  ],\n});\n```\n\n## Validation\n\n### Request Body\n\n```typescript\nconst createProductSchema = Joi.object({\n  name: Joi.string().min(3).required(),\n  price: Joi.number().positive().required(),\n});\n\n@Post('/products', { bodySchema: createProductSchema })\nexport class CreateProduct implements RabApiPost<ControllerT> {\n  handler: ControllerT['request'] = async (request) => {\n    const { name, price } = request.body; // validated\n    return { id: '1', name, price };\n  };\n}\n```\n\n### Query Parameters\n\n```typescript\nconst listSchema = Joi.object({\n  page: Joi.number().integer().min(1).default(1),\n  limit: Joi.number().integer().min(1).max(100).default(10),\n});\n\n@Get('/products', { querySchema: listSchema })\nexport class ListProducts implements RabApiGet<ControllerT> {\n  handler: ControllerT['request'] = async (request) => {\n    const { page, limit } = request.query; // validated\n    return { items: [], page, limit };\n  };\n}\n```\n\n## Authentication\n\n### JWT Setup\n\n```typescript\nconst app = RabApi.createApp({\n  auth: {\n    jwt: {\n      secret_key: process.env.JWT_SECRET!,\n      algorithms: ['HS256'],\n    },\n  },\n});\n```\n\n### Protected Routes\n\nRoutes are protected by default. Make a route public:\n\n```typescript\n@Post('/auth/login', { isProtected: false })\nexport class Login implements RabApiPost<ControllerT> {\n  // Public endpoint\n}\n```\n\nAccess authenticated user:\n\n```typescript\n@Get('/profile')\nexport class GetProfile implements RabApiGet<ControllerT> {\n  handler: ControllerT['request'] = async (request) => {\n    const user = request.auth; // JWT payload\n    return { userId: user.userId };\n  };\n}\n```\n\n## Authorization\n\nUse permission-based access control:\n\n```typescript\n@Post('/admin/users', { permission: 'canCreateUser' })\nexport class CreateUser implements RabApiPost<ControllerT> {\n  // Only users with 'canCreateUser' permission\n}\n```\n\nIntegrate with `@softin/rab-access`:\n\n```typescript\nimport { Rab } from '@softin/rab-access';\n\nconst permissions = Rab.schema({\n  canCreateUser: [Rab.grant('admin'), Rab.grant('superAdmin')],\n  canDeleteUser: [Rab.grant('superAdmin')],\n});\n```\n\n## Error Handling\n\nBuilt-in exceptions:\n\n```typescript\nimport {\n  BadRequestException,\n  UnauthorizedException,\n  ForbiddenException,\n  NotFoundException,\n  ConflictException,\n} from 'rab-api';\n\n@Get('/users/:id')\nexport class GetUser implements RabApiGet<ControllerT> {\n  handler: ControllerT['request'] = async (request) => {\n    const user = await findUser(request.params.id);\n    if (!user) throw new NotFoundException('User not found');\n    return user;\n  };\n}\n```\n\nCustom error handler:\n\n```typescript\nconst app = RabApi.createApp({\n  errorHandler: (err, req, res, next) => {\n    if (err instanceof RabApiError) {\n      return res.status(err.statusCode).json({ error: err.message });\n    }\n    return res.status(500).json({ error: 'Internal error' });\n  },\n});\n```\n\n## Middleware\n\nApply middleware at different levels:\n\n```typescript\n// Route level\n@Get('/users', { pipes: [loggerMiddleware] })\nexport class ListUsers {}\n\n// Router level\napp.route({\n  basePath: '/api',\n  pipes: [corsMiddleware, loggerMiddleware],\n  controllers: [/* ... */],\n});\n\n// Conditional\nconst conditionalAuth = (route) => {\n  return route.isProtected ? [authMiddleware] : [];\n};\n\napp.route({\n  pipes: [conditionalAuth],\n  controllers: [/* ... */],\n});\n```\n\n## Caching\n\nBuilt-in response caching with cache invalidation (purge) support.\n\n### Setup\n\n```typescript\nconst app = RabApi.createApp({\n  cache: {\n    adapter: myCacheAdapter, // Implement ICacheAdapter\n    defaultTtl: 900,         // 15 minutes default\n  },\n});\n```\n\n### Cache Adapter Interface\n\n```typescript\ninterface ICacheAdapter {\n  get<T>(key: string): Promise<T | null>;\n  set<T>(key: string, data: T, ttlSeconds: number): Promise<void>;\n  del(key: string): Promise<void>;\n}\n```\n\n### Enable Caching\n\n```typescript\n// Simple - uses defaults (ttl: 900s, strategy: url-query)\n@Get('/products', { cache: true })\nexport class ListProducts {}\n\n// With options\n@Get('/products', {\n  cache: {\n    ttl: 600,                    // 10 minutes\n    strategy: 'url-query',       // Include query params in cache key\n  }\n})\nexport class ListProducts {}\n```\n\n### Cache Strategies\n\n- **`url-query`** (default): Cache key includes path + sorted query params\n  - `/products?page=1&limit=10` → key: `/products?limit=10&page=1`\n- **`url-params`**: Cache key is just the resolved path\n  - `/products?page=1&limit=10` → key: `/products`\n\n### How Cache Keys Work\n\nCache keys are deterministically generated from the request URL to ensure consistent cache hits. Understanding how keys are built helps you design effective caching and purge strategies.\n\n#### Key Generation Process\n\n1. **Extract the path**: The resolved path (with route params filled in) is extracted from the request\n2. **Apply strategy**: Based on the configured strategy, query parameters may be included\n3. **Sort & encode**: Query params are sorted alphabetically and URL-encoded to prevent collisions\n\n```\nRequest: GET /stores/123/products?page=2&limit=10&sort=name\n\nurl-params strategy → /stores/123/products\nurl-query strategy  → /stores/123/products?limit=10&page=2&sort=name\n                      ↑ params sorted alphabetically\n```\n\n#### Why Sorting Matters\n\nQuery parameters are sorted alphabetically to ensure the same cache key regardless of parameter order:\n\n```typescript\n// These requests produce the SAME cache key:\nGET /products?limit=10&page=1\nGET /products?page=1&limit=10\n// Both → /products?limit=10&page=1\n```\n\n#### URL Encoding for Safety\n\nSpecial characters in query values are URL-encoded to prevent cache key collisions:\n\n```typescript\n// Different requests, different cache keys:\nGET /search?q=a&b=2     → /search?b=2&q=a\nGET /search?q=a%26b=2   → /search?q=a%26b%3D2\n```\n\n#### Strategy Selection Guide\n\n| Strategy | Use When | Cache Key Example |\n|----------|----------|-------------------|\n| `url-query` | Response varies by query params (pagination, filters) | `/products?limit=10&page=1` |\n| `url-params` | Response is the same regardless of query params | `/products/123` |\n\n### Cache Purge\n\nPurge (invalidate) cache keys after mutations to keep cached data fresh.\n\n#### How Purge Works\n\n1. **After successful response**: Purge runs only after the handler returns successfully\n2. **Pattern resolution**: `:param` placeholders are replaced with actual request param values\n3. **Background execution**: Purge operations run asynchronously (non-blocking)\n4. **Silent failures**: Purge errors are caught and ignored to avoid breaking the main response\n\n#### Purge Patterns\n\n**Static patterns** - Exact cache keys to invalidate:\n\n```typescript\n@Post('/products', {\n  cache: {\n    purge: ['/products'],  // Purge the list endpoint\n  }\n})\nexport class CreateProduct {}\n```\n\n**Dynamic patterns** - Use `:param` placeholders resolved from request params:\n\n```typescript\n@Put('/products/:id', {\n  cache: {\n    purge: [\n      '/products',      // Purge the list\n      '/products/:id',  // :id → resolved to actual value (e.g., /products/123)\n    ]\n  }\n})\nexport class UpdateProduct {}\n```\n\n**Function patterns** - Full control with access to the request object:\n\n```typescript\n@Delete('/products/:id', {\n  cache: {\n    purge: [\n      (req) => `/products/${req.params.id}`,\n      (req) => `/categories/${req.body.categoryId}/products`,  // Access body\n      (req) => [  // Return multiple keys\n        `/products/${req.params.id}`,\n        `/products/${req.params.id}/reviews`,\n      ],\n    ]\n  }\n})\nexport class DeleteProduct {}\n```\n\n#### Purge Flow Diagram\n\n```\nRequest: DELETE /stores/123/products/456\n\n1. Handler executes successfully\n2. Purge patterns resolved:\n   - '/stores/:storeId/products' → '/stores/123/products'\n   - '/stores/:storeId/products/:id' → '/stores/123/products/456'\n3. cacheAdapter.del() called for each key (async, non-blocking)\n4. Response returned to client immediately\n```\n\n#### Common Purge Patterns\n\n```typescript\n// List + detail invalidation\n@Put('/products/:id', {\n  cache: {\n    purge: ['/products', '/products/:id']\n  }\n})\n\n// Hierarchical invalidation\n@Delete('/stores/:storeId/products/:id', {\n  cache: {\n    purge: [\n      '/stores/:storeId/products',           // List\n      '/stores/:storeId/products/:id',       // Detail\n      '/stores/:storeId',                    // Parent\n    ]\n  }\n})\n\n// Cross-entity invalidation\n@Post('/orders', {\n  cache: {\n    purge: [\n      '/orders',\n      (req) => `/users/${req.auth.userId}/orders`,  // User's orders\n      (req) => req.body.items.map(i => `/products/${i.productId}/stock`),\n    ]\n  }\n})\n```\n\n### Example: Redis Adapter\n\n```typescript\nimport Redis from 'ioredis';\nimport { ICacheAdapter } from 'rab-api';\n\nconst redis = new Redis();\n\nconst redisCacheAdapter: ICacheAdapter = {\n  async get(key) {\n    const data = await redis.get(key);\n    return data ? JSON.parse(data) : null;\n  },\n  async set(key, data, ttl) {\n    await redis.setex(key, ttl, JSON.stringify(data));\n  },\n  async del(key) {\n    await redis.del(key);\n  },\n};\n\nconst app = RabApi.createApp({\n  cache: { adapter: redisCacheAdapter },\n});\n```\n\n## Advanced Features\n\n### Controller Type Helpers\n\n```typescript\n// Type helpers for controllers\nPostController<TBody, TResponse, TParams?, TUser?, TQuery?>\nGetController<TResponse, TQuery?, TParams?, TUser?>\nPutController<TBody, TResponse, TParams?, TUser?, TQuery?>\nPatchController<TBody, TResponse, TParams?, TUser?, TQuery?>\nDeleteController<TParams?, TUser?>\n\n// Interface implementations\nRabApiPost<T> | AtomApiPost<T>\nRabApiGet<T> | AtomApiGet<T>\nRabApiPut<T> | AtomApiPut<T>\nRabApiPatch<T> | AtomApiPatch<T>\nRabApiDelete<T> | AtomApiDelete<T>\n```\n\n## Route Options\n\n```typescript\ninterface RouteOptions {\n  bodySchema?: Joi.ObjectSchema;    // Body validation\n  querySchema?: Joi.ObjectSchema;   // Query validation\n  isProtected?: boolean;            // JWT required (default: true)\n  permission?: string;              // Permission name\n  pipes?: Function[];               // Middleware\n  excludeFromDocs?: boolean;        // Hide from OpenAPI\n  tags?: string[];                  // OpenAPI tags\n}\n```\n\n## Complete Example\n\n```typescript\nimport { Get, Post, Put, Delete, RabApi, Injectable } from 'rab-api';\nimport * as Joi from 'joi';\n\n// Service\n@Injectable()\nclass ProductService {\n  async findAll() { return []; }\n  async create(data: any) { return { id: '1', ...data }; }\n}\n\n// Controllers\nconst createSchema = Joi.object({\n  name: Joi.string().required(),\n  price: Joi.number().required(),\n});\n\n@Get('/')\nclass ListProducts {\n  constructor(private service: ProductService) {}\n  handler = async () => await this.service.findAll();\n}\n\n@Post('/', { bodySchema: createSchema })\nclass CreateProduct {\n  constructor(private service: ProductService) {}\n  handler = async (req) => await this.service.create(req.body);\n}\n\n// App\nconst app = RabApi.createApp({\n  auth: { jwt: { secret_key: 'secret', algorithms: ['HS256'] } },\n});\n\napp.use(express.json());\napp.route({\n  basePath: '/products',\n  controllers: [ListProducts, CreateProduct],\n});\n\napp.listen(3000);\n```\n\n## License\n\nMIT © Softin Hub\n\n## Support\nEmail: softin.developer@gmail.com\n","readmeFilename":"README.md"}