{"_id":"@apiposture/cli","_rev":"7-f747d1a81d2f474658585234c68150a1","name":"@apiposture/cli","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.1":{"name":"@apiposture/cli","version":"1.0.1","keywords":["security","api","authorization","express","nestjs","fastify","koa","cli","static-analysis"],"author":"","license":"MIT","_id":"@apiposture/cli@1.0.1","maintainers":[{"name":"blago.culjak","email":"blago.culjak@hotmail.com"}],"homepage":"https://github.com/BlagoCuljak/ApiPosture.Node.js#readme","bugs":{"url":"https://github.com/BlagoCuljak/ApiPosture.Node.js/issues"},"bin":{"apiposture":"dist/index.js"},"dist":{"shasum":"02227b759913f745882b090a34cce3d933be1fc4","tarball":"https://registry.npmjs.org/@apiposture/cli/-/cli-1.0.1.tgz","fileCount":110,"integrity":"sha512-bXQauDMXHNU1cykzZoB46aUA1EJaXCEirayE4N6WHtxXiC866a94QTIJQs1GdSP8RIKR4a5DFWcrmoYg6gcqZg==","signatures":[{"sig":"MEYCIQDRk2QZC1OkcOifNBuEHlJcOpRayAKJpKLf3u3Sm1+XQQIhAKVFWHs3hqZ2Mr6sQxr7RhYi0ODv4U8mEjjO+Ihqnm8R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apiposture%2fcli@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":160332},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"703fe5f5195163aa72fb6f3f7cff7e7533df05d7","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"blago.culjak","email":"blago.culjak@hotmail.com"},"repository":{"url":"git+https://github.com/BlagoCuljak/ApiPosture.Node.js.git","type":"git"},"_npmVersion":"10.8.2","description":"Static source-code analysis CLI for Node.js API frameworks to identify authorization misconfigurations and security risks","directories":{},"_nodeVersion":"20.19.6","dependencies":{"ora":"^8.0.1","glob":"^10.3.0","axios":"^1.6.0","chalk":"^5.3.0","commander":"^12.0.0","cli-table3":"^0.6.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.18.0","@typescript-eslint/eslint-plugin":"^6.18.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.0.1_1769005576378_0.7050781368133379","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@apiposture/cli","version":"1.1.1","keywords":["security","api","authorization","express","nestjs","fastify","koa","cli","static-analysis"],"author":"","license":"MIT","_id":"@apiposture/cli@1.1.1","maintainers":[{"name":"blago.culjak","email":"blago.culjak@hotmail.com"}],"homepage":"https://github.com/BlagoCuljak/ApiPosture.Node.js#readme","bugs":{"url":"https://github.com/BlagoCuljak/ApiPosture.Node.js/issues"},"bin":{"apiposture":"dist/index.js"},"dist":{"shasum":"9b24b90c428be00f22789aaf9e8b2d235fd14927","tarball":"https://registry.npmjs.org/@apiposture/cli/-/cli-1.1.1.tgz","fileCount":112,"integrity":"sha512-y5Ex4scxHUgxr5q2WPMonrLCTjXKixhVmokL6l26W+2UG60QOdVvk6W6JXldMcUd4H1acxfSnqeyOaRdz0Ifxg==","signatures":[{"sig":"MEUCIE+8sA8BoowwlxqjimnDquqRrA94VCmmUArkovhWlot+AiEA4me/YoZQhmAmvPJKs88UdjJ0Su4GnESbkTMzMPHicLk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apiposture%2fcli@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":165134},"main":"dist/lib.js","type":"module","types":"dist/lib.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/lib.d.ts","default":"./dist/lib.js"},"./dist/*":"./dist/*"},"gitHead":"19200555d54c4431cde61396731a8219b5aef9ea","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"blago.culjak","email":"blago.culjak@hotmail.com"},"repository":{"url":"git+https://github.com/BlagoCuljak/ApiPosture.Node.js.git","type":"git"},"_npmVersion":"10.8.2","description":"Static source-code analysis CLI for Node.js API frameworks to identify authorization misconfigurations and security risks","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.1","glob":"^10.3.0","axios":"^1.13.5","chalk":"^5.3.0","commander":"^12.0.0","cli-table3":"^0.6.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^4.0.18","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.18.0","@typescript-eslint/eslint-plugin":"^6.18.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.1.1_1771957997100_0.4823398171021802","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@apiposture/cli","version":"1.1.3","keywords":["security","api","authorization","express","nestjs","fastify","koa","cli","static-analysis"],"author":"","license":"MIT","_id":"@apiposture/cli@1.1.3","maintainers":[{"name":"blago.culjak","email":"blago.culjak@hotmail.com"}],"homepage":"https://github.com/BlagoCuljak/ApiPosture.Node.js#readme","bugs":{"url":"https://github.com/BlagoCuljak/ApiPosture.Node.js/issues"},"bin":{"apiposture":"dist/index.js"},"dist":{"shasum":"d02ad10f1716c2cc587c65e9f8282f71c654f9e2","tarball":"https://registry.npmjs.org/@apiposture/cli/-/cli-1.1.3.tgz","fileCount":112,"integrity":"sha512-2BWPDUg8WFjdDiWKKV0YJEFmQD0/OBUZsa9NjjTIICuy7Aau5Jz1G8ZJfHJs41ahodNq6KKtO2v+K0iO3Vex6Q==","signatures":[{"sig":"MEUCIQCdJ0CVwnlCU8E1/KNs+qc3FCBscVdt9t37NxDG+3+NowIgQ7owW0lsc4cEII9xN0+sjdIF9Q2yZTouKbbRjw8L/T4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apiposture%2fcli@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":165128},"main":"dist/lib.js","type":"module","types":"dist/lib.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/lib.d.ts","default":"./dist/lib.js"},"./dist/*":"./dist/*"},"gitHead":"2ec5f7723aa8de68bd7677a060d97f2530caca5b","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"blago.culjak","email":"blago.culjak@hotmail.com"},"repository":{"url":"git+https://github.com/BlagoCuljak/ApiPosture.Node.js.git","type":"git"},"_npmVersion":"10.8.2","description":"Static source-code analysis CLI for Node.js API frameworks to identify authorization misconfigurations and security risks","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.1","glob":"^10.3.0","axios":"^1.13.5","chalk":"^5.3.0","commander":"^12.0.0","cli-table3":"^0.6.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^4.0.18","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.18.0","@typescript-eslint/eslint-plugin":"^6.18.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.1.3_1771958759923_0.3915970846439041","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@apiposture/cli","version":"1.1.5","keywords":["security","api","authorization","express","nestjs","fastify","koa","cli","static-analysis"],"author":"","license":"MIT","_id":"@apiposture/cli@1.1.5","maintainers":[{"name":"blago.culjak","email":"blago.culjak@hotmail.com"}],"homepage":"https://github.com/BlagoCuljak/ApiPosture.Node.js#readme","bugs":{"url":"https://github.com/BlagoCuljak/ApiPosture.Node.js/issues"},"bin":{"apiposture":"dist/index.js"},"dist":{"shasum":"9fe989fd15c276da505f5707a1f40bdbc632fd52","tarball":"https://registry.npmjs.org/@apiposture/cli/-/cli-1.1.5.tgz","fileCount":112,"integrity":"sha512-NWGqzeOEaUIOgR0uptyNyzXyDd57Ht8RHocHiR8Dn6/Ua95iBjZVY1pn8ADexmi5yOwqYWwq684m2YrcX1VwFg==","signatures":[{"sig":"MEQCIA/PmNh/FUk9hCteDZhZQsp8hkmSiw8FYMJ7obeRyDwcAiASFYazFylSE6IoeUzBuuCE/hTwo1qJnfYOBdtWoAj7rw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apiposture%2fcli@1.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":165134},"main":"dist/lib.js","type":"module","types":"dist/lib.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/lib.d.ts","default":"./dist/lib.js"},"./dist/*":"./dist/*"},"gitHead":"709813b4e08e5f7f1e6190cc082fe48595dbce90","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"blago.culjak","email":"blago.culjak@hotmail.com"},"repository":{"url":"git+https://github.com/BlagoCuljak/ApiPosture.Node.js.git","type":"git"},"_npmVersion":"10.8.2","description":"Static source-code analysis CLI for Node.js API frameworks to identify authorization misconfigurations and security risks","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.1","glob":"^10.3.0","axios":"^1.13.5","chalk":"^5.3.0","commander":"^12.0.0","cli-table3":"^0.6.3","typescript":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^4.0.18","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.18.0","@typescript-eslint/eslint-plugin":"^6.18.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.1.5_1772105239812_0.5990074002093448","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@apiposture/cli","version":"1.1.8","keywords":["security","api","authorization","express","nestjs","fastify","koa","cli","static-analysis"],"author":"","license":"MIT","_id":"@apiposture/cli@1.1.8","maintainers":[{"name":"blago.culjak","email":"blago.culjak@hotmail.com"}],"homepage":"https://github.com/BlagoCuljak/ApiPosture.Node.js#readme","bugs":{"url":"https://github.com/BlagoCuljak/ApiPosture.Node.js/issues"},"bin":{"apiposture":"dist/index.js"},"dist":{"shasum":"c6940c5731c719426e2322d77326ed47e4d35958","tarball":"https://registry.npmjs.org/@apiposture/cli/-/cli-1.1.8.tgz","fileCount":112,"integrity":"sha512-XO7caQ4R/XZi5sYRj45xW6kEETcNdN9579l1vqNYPbKDTKHu2UaafvQ7qI2Z73WBtYNSjjn6BNiZ/fZ3tL2mDw==","signatures":[{"sig":"MEYCIQDWSdf7/XwmvECf2D9MbY0D8oGA+yyFAEyvNxzZL1D/dAIhAOFMQ92YMNH7lrA64vzG6Q24czRmHmsnWUjXPvny338z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apiposture%2fcli@1.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":172437},"main":"dist/lib.js","type":"module","types":"dist/lib.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/lib.d.ts","default":"./dist/lib.js"},"./dist/*":"./dist/*"},"gitHead":"b1bc2695cd6bb18a7a1665554a6915f3df74a072","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"blago.culjak","email":"blago.culjak@hotmail.com"},"repository":{"url":"git+https://github.com/BlagoCuljak/ApiPosture.Node.js.git","type":"git"},"_npmVersion":"10.8.2","description":"Static source-code analysis CLI for Node.js API frameworks to identify authorization misconfigurations and security risks","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.1","glob":"^10.3.0","axios":"^1.13.5","chalk":"^5.3.0","commander":"^12.0.0","cli-table3":"^0.6.3","typescript":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^4.0.18","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.18.0","@typescript-eslint/eslint-plugin":"^6.18.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.1.8_1773046190325_0.8343675448202554","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@apiposture/cli","version":"1.2.0","keywords":["security","api","authorization","express","nestjs","fastify","koa","cli","static-analysis"],"author":"","license":"MIT","_id":"@apiposture/cli@1.2.0","maintainers":[{"name":"blago.culjak","email":"blago.culjak@hotmail.com"}],"homepage":"https://github.com/BlagoCuljak/ApiPosture.Node.js#readme","bugs":{"url":"https://github.com/BlagoCuljak/ApiPosture.Node.js/issues"},"bin":{"apiposture":"dist/index.js"},"dist":{"shasum":"4a23d03607207346196e67e7ce7bfdfeaa463eae","tarball":"https://registry.npmjs.org/@apiposture/cli/-/cli-1.2.0.tgz","fileCount":117,"integrity":"sha512-ATkqo1zNr8AvJIvjM+YY6dW0Yxj6ler2DC35Mnc5W2qvDJgoHrjl1eBYx36+3qlrrt6SRllulbxd+YBHduvuRg==","signatures":[{"sig":"MEUCICjcuf9dEUoTee0mojhkHwWVQVG5Jh9VHyip43OHr1vIAiEAyM5MOg85JnXi86cqGWkTUv+hqBvsmSqvGQRl/fWwXd0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apiposture%2fcli@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":301773},"main":"dist/lib.js","type":"module","types":"dist/lib.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/lib.d.ts","default":"./dist/lib.js"},"./dist/*":"./dist/*"},"gitHead":"393a9357d2d15ba64a0613feb7669f577661a62c","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"blago.culjak","email":"blago.culjak@hotmail.com"},"repository":{"url":"git+https://github.com/BlagoCuljak/ApiPosture.Node.js.git","type":"git"},"_npmVersion":"10.8.2","description":"Static source-code analysis CLI for Node.js API frameworks to identify authorization misconfigurations and security risks","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^8.0.1","glob":"^10.3.0","axios":"^1.13.5","chalk":"^5.3.0","commander":"^12.0.0","cli-table3":"^0.6.3","typescript":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^4.0.18","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.18.0","@typescript-eslint/eslint-plugin":"^6.18.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.2.0_1773126074411_0.4511268767959469","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@apiposture/cli","version":"1.2.1","description":"Static source-code analysis CLI for Node.js API frameworks to identify authorization misconfigurations and security risks","main":"dist/lib.js","types":"dist/lib.d.ts","exports":{".":{"types":"./dist/lib.d.ts","default":"./dist/lib.js"},"./dist/*":"./dist/*"},"bin":{"apiposture":"dist/index.js"},"type":"module","scripts":{"build":"tsc","dev":"tsx src/index.ts","start":"node dist/index.js","test":"vitest run","test:watch":"vitest","lint":"eslint src --ext .ts","prepublishOnly":"npm run build"},"keywords":["security","api","authorization","express","nestjs","fastify","koa","cli","static-analysis"],"author":"","license":"MIT","repository":{"type":"git","url":"git+https://github.com/BlagoCuljak/ApiPosture.Node.js.git"},"bugs":{"url":"https://github.com/BlagoCuljak/ApiPosture.Node.js/issues"},"homepage":"https://github.com/BlagoCuljak/ApiPosture.Node.js#readme","engines":{"node":">=20.0.0"},"dependencies":{"axios":"^1.13.5","chalk":"^5.3.0","cli-table3":"^0.6.3","commander":"^12.0.0","glob":"^10.3.0","ora":"^8.0.1","typescript":"^5.3.0"},"devDependencies":{"@types/node":"^20.10.0","@typescript-eslint/eslint-plugin":"^6.18.0","@typescript-eslint/parser":"^6.18.0","eslint":"^8.56.0","tsx":"^4.7.0","vitest":"^4.0.18"},"overrides":{"minimatch":">=9.0.7","flatted":">=3.4.0"},"_id":"@apiposture/cli@1.2.1","gitHead":"623ece8d89cdf1f8657699d6eca54549dd522e72","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-zFmYK59FScnPua7G31EyvFg3zCL4o8MBgbsHLPdY1jiyWqawuLgGHsIAcYGKD/qfFOkbmzzRjGX9Q8PqRLmupA==","shasum":"ddbbe5981014522456490df3fa5450bd12e3e305","tarball":"https://registry.npmjs.org/@apiposture/cli/-/cli-1.2.1.tgz","fileCount":117,"unpackedSize":301773,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apiposture%2fcli@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDAYzQoPkeVxxjVArnjVUJsKkavLRpjiGwbU2Zo729VQAiAHkv+4oDH5xcnRJnZrzxgOYOGC1uQ2qjWoXx3czCSttg=="}]},"_npmUser":{"name":"blago.culjak","email":"blago.culjak@hotmail.com"},"directories":{},"maintainers":[{"name":"blago.culjak","email":"blago.culjak@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_1.2.1_1775649826966_0.45652252192467446"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-21T14:26:16.212Z","modified":"2026-04-08T12:03:47.491Z","1.0.1":"2026-01-21T14:26:16.601Z","1.1.1":"2026-02-24T18:33:17.250Z","1.1.3":"2026-02-24T18:46:00.076Z","1.1.5":"2026-02-26T11:27:19.947Z","1.1.8":"2026-03-09T08:49:50.467Z","1.2.0":"2026-03-10T07:01:14.639Z","1.2.1":"2026-04-08T12:03:47.184Z"},"bugs":{"url":"https://github.com/BlagoCuljak/ApiPosture.Node.js/issues"},"license":"MIT","homepage":"https://github.com/BlagoCuljak/ApiPosture.Node.js#readme","keywords":["security","api","authorization","express","nestjs","fastify","koa","cli","static-analysis"],"repository":{"type":"git","url":"git+https://github.com/BlagoCuljak/ApiPosture.Node.js.git"},"description":"Static source-code analysis CLI for Node.js API frameworks to identify authorization misconfigurations and security risks","maintainers":[{"name":"blago.culjak","email":"blago.culjak@hotmail.com"}],"readme":"# ApiPosture CLI for Node.js\n\n[![Build and Test](https://github.com/BlagoCuljak/ApiPosture.Node.js/actions/workflows/test.yml/badge.svg)](https://github.com/BlagoCuljak/ApiPosture.Node.js/actions/workflows/test.yml)\n[![npm Version](https://img.shields.io/npm/v/@apiposture/cli?logo=npm&label=npm)](https://www.npmjs.com/package/@apiposture/cli)\n[![npm Downloads](https://img.shields.io/npm/dt/@apiposture/cli?logo=npm&label=Downloads)](https://www.npmjs.com/package/@apiposture/cli)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js](https://img.shields.io/badge/Node.js-20%20|%2022%20|%2024-339933?logo=node.js&logoColor=white)](https://nodejs.org/)\n[![Ko-fi](https://img.shields.io/badge/Ko--fi-support-FF5E5B?logo=ko-fi&logoColor=white)](https://ko-fi.com/blagoculjak)\n\nStatic source-code analysis CLI for Node.js API frameworks to identify authorization misconfigurations and security risks.\n\n## Features\n\n- **Multi-Framework Support**: Express.js, NestJS, Fastify, and Koa\n- **8 Security Rules**: Covering exposure, consistency, privilege, and surface area risks\n- **Multiple Output Formats**: Terminal, JSON, and Markdown\n- **Configurable**: Rule customization and suppression support\n- **CI/CD Ready**: Exit codes for pipeline integration\n\n### Terminal Output\n\n![Terminal Output](assets/images/Node1_result.webp)\n\n### Findings Report\n\n![Findings Report](assets/images/Node2_result.webp)\n\n## Installation\n\n```bash\nnpm install -g @apiposture/cli\n```\n\nOr use with npx:\n\n```bash\nnpx @apiposture/cli scan .\n```\n\n## Quick Start\n\n```bash\n# Scan current directory\napiposture scan\n\n# Scan specific path\napiposture scan ./src\n\n# Output as JSON\napiposture scan -o json\n\n# Fail CI if critical findings\napiposture scan --fail-on critical\n```\n\n## Security Rules\n\n| Rule | Name | Severity | Description |\n|------|------|----------|-------------|\n| AP001 | Public without explicit intent | High | Endpoint is public without @Public or allowAnonymous marker |\n| AP002 | AllowAnonymous on write | High | Write operation explicitly marked as public |\n| AP003 | Controller/action conflict | Medium | Method @Public overrides class-level guards (NestJS) |\n| AP004 | Missing auth on writes | Critical | Unprotected write endpoint |\n| AP005 | Excessive role access | Low | Endpoint allows >3 roles |\n| AP006 | Weak role naming | Low | Generic role names like \"admin\", \"user\" |\n| AP007 | Sensitive route keywords | Medium | Public route contains admin/debug/internal |\n| AP008 | Unprotected endpoint | High | No middleware chain at all |\n\n## CLI Options\n\n```bash\napiposture scan [path]\n\nOptions:\n  -o, --output <format>        Output format: terminal, json, markdown (default: terminal)\n  -f, --output-file <path>     Write output to file\n  -c, --config <path>          Config file path (.apiposture.json)\n  --severity <level>           Min severity: info, low, medium, high, critical\n  --fail-on <level>            Exit code 1 if findings at this level\n  --sort-by <field>            Sort by: severity, route, method, classification\n  --sort-dir <dir>             Sort direction: asc, desc\n  --classification <types>     Filter: public, authenticated, role-restricted, policy-restricted\n  --method <methods>           Filter: GET, POST, PUT, DELETE, PATCH\n  --route-contains <str>       Filter routes containing string\n  --api-style <styles>         Filter: express, nestjs, fastify, koa\n  --rule <rules>               Filter by rule ID (comma-separated)\n  --no-color                   Disable colors\n  --no-icons                   Disable icons\n\nLicense Commands:\n  apiposture license activate <key>    Activate a license\n  apiposture license deactivate        Deactivate current license\n  apiposture license status            Show license status\n```\n\n## Configuration\n\nCreate `.apiposture.json` in your project root:\n\n```json\n{\n  \"rules\": {\n    \"AP001\": { \"enabled\": true },\n    \"AP005\": { \"enabled\": true, \"options\": { \"maxRoles\": 3 } }\n  },\n  \"suppressions\": [\n    {\n      \"ruleId\": \"AP001\",\n      \"route\": \"/api/health\",\n      \"reason\": \"Health check is intentionally public\"\n    }\n  ],\n  \"scan\": {\n    \"excludePatterns\": [\"**/test/**\"]\n  }\n}\n```\n\n## Supported Frameworks\n\n### Express.js\n```javascript\napp.get('/path', handler);\nrouter.post('/path', authMiddleware, handler);\napp.use('/prefix', router);\n```\n\n### NestJS\n```typescript\n@Controller('path')\n@UseGuards(AuthGuard)\nclass MyController {\n  @Get()\n  @Roles('admin')\n  handler() {}\n}\n```\n\n### Fastify\n```javascript\nfastify.get('/path', { preHandler: [auth] }, handler);\nfastify.route({ method: 'GET', url: '/path', handler });\n```\n\n### Koa\n```javascript\nrouter.get('/path', authMiddleware, handler);\n```\n\n## CI/CD Integration\n\n```yaml\n# GitHub Actions\n- name: Security Scan\n  run: npx @apiposture/cli scan --fail-on high -o json -f report.json\n```\n\n```yaml\n# GitLab CI\nsecurity-scan:\n  script:\n    - npx @apiposture/cli scan --fail-on critical\n```\n\n## Environment Variables\n\n- `APIPOSTURE_LICENSE_KEY`: License key for Pro features\n\n## License\n\nMIT\n","readmeFilename":"README.md"}