@wazir-dev/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. package/AGENTS.md +111 -0
  2. package/CHANGELOG.md +14 -0
  3. package/CONTRIBUTING.md +101 -0
  4. package/LICENSE +21 -0
  5. package/README.md +314 -0
  6. package/assets/composition-engine.mmd +34 -0
  7. package/assets/demo-script.sh +17 -0
  8. package/assets/logo-dark.svg +14 -0
  9. package/assets/logo.svg +14 -0
  10. package/assets/pipeline.mmd +39 -0
  11. package/assets/record-demo.sh +51 -0
  12. package/docs/README.md +51 -0
  13. package/docs/adapters/context-mode.md +60 -0
  14. package/docs/concepts/architecture.md +87 -0
  15. package/docs/concepts/artifact-model.md +60 -0
  16. package/docs/concepts/composition-engine.md +36 -0
  17. package/docs/concepts/indexing-and-recall.md +160 -0
  18. package/docs/concepts/observability.md +41 -0
  19. package/docs/concepts/roles-and-workflows.md +59 -0
  20. package/docs/concepts/terminology-policy.md +27 -0
  21. package/docs/getting-started/01-installation.md +78 -0
  22. package/docs/getting-started/02-first-run.md +102 -0
  23. package/docs/getting-started/03-adding-to-project.md +15 -0
  24. package/docs/getting-started/04-host-setup.md +15 -0
  25. package/docs/guides/ci-integration.md +15 -0
  26. package/docs/guides/creating-skills.md +15 -0
  27. package/docs/guides/expertise-module-authoring.md +15 -0
  28. package/docs/guides/hook-development.md +15 -0
  29. package/docs/guides/memory-and-learnings.md +34 -0
  30. package/docs/guides/multi-host-export.md +15 -0
  31. package/docs/guides/troubleshooting.md +101 -0
  32. package/docs/guides/writing-custom-roles.md +15 -0
  33. package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
  34. package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
  35. package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
  36. package/docs/readmes/INDEX.md +99 -0
  37. package/docs/readmes/features/expertise/README.md +171 -0
  38. package/docs/readmes/features/exports/README.md +222 -0
  39. package/docs/readmes/features/hooks/README.md +103 -0
  40. package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
  41. package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
  42. package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
  43. package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
  44. package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
  45. package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
  46. package/docs/readmes/features/hooks/session-start.md +119 -0
  47. package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
  48. package/docs/readmes/features/roles/README.md +157 -0
  49. package/docs/readmes/features/roles/clarifier.md +152 -0
  50. package/docs/readmes/features/roles/content-author.md +190 -0
  51. package/docs/readmes/features/roles/designer.md +193 -0
  52. package/docs/readmes/features/roles/executor.md +184 -0
  53. package/docs/readmes/features/roles/learner.md +210 -0
  54. package/docs/readmes/features/roles/planner.md +182 -0
  55. package/docs/readmes/features/roles/researcher.md +164 -0
  56. package/docs/readmes/features/roles/reviewer.md +184 -0
  57. package/docs/readmes/features/roles/specifier.md +162 -0
  58. package/docs/readmes/features/roles/verifier.md +215 -0
  59. package/docs/readmes/features/schemas/README.md +178 -0
  60. package/docs/readmes/features/skills/README.md +63 -0
  61. package/docs/readmes/features/skills/brainstorming.md +96 -0
  62. package/docs/readmes/features/skills/debugging.md +148 -0
  63. package/docs/readmes/features/skills/design.md +120 -0
  64. package/docs/readmes/features/skills/prepare-next.md +109 -0
  65. package/docs/readmes/features/skills/run-audit.md +159 -0
  66. package/docs/readmes/features/skills/scan-project.md +109 -0
  67. package/docs/readmes/features/skills/self-audit.md +176 -0
  68. package/docs/readmes/features/skills/tdd.md +137 -0
  69. package/docs/readmes/features/skills/using-skills.md +92 -0
  70. package/docs/readmes/features/skills/verification.md +120 -0
  71. package/docs/readmes/features/skills/writing-plans.md +104 -0
  72. package/docs/readmes/features/tooling/README.md +320 -0
  73. package/docs/readmes/features/workflows/README.md +186 -0
  74. package/docs/readmes/features/workflows/author.md +181 -0
  75. package/docs/readmes/features/workflows/clarify.md +154 -0
  76. package/docs/readmes/features/workflows/design-review.md +171 -0
  77. package/docs/readmes/features/workflows/design.md +169 -0
  78. package/docs/readmes/features/workflows/discover.md +162 -0
  79. package/docs/readmes/features/workflows/execute.md +173 -0
  80. package/docs/readmes/features/workflows/learn.md +167 -0
  81. package/docs/readmes/features/workflows/plan-review.md +165 -0
  82. package/docs/readmes/features/workflows/plan.md +170 -0
  83. package/docs/readmes/features/workflows/prepare-next.md +167 -0
  84. package/docs/readmes/features/workflows/review.md +169 -0
  85. package/docs/readmes/features/workflows/run-audit.md +191 -0
  86. package/docs/readmes/features/workflows/spec-challenge.md +159 -0
  87. package/docs/readmes/features/workflows/specify.md +160 -0
  88. package/docs/readmes/features/workflows/verify.md +177 -0
  89. package/docs/readmes/packages/README.md +50 -0
  90. package/docs/readmes/packages/ajv.md +117 -0
  91. package/docs/readmes/packages/context-mode.md +118 -0
  92. package/docs/readmes/packages/gray-matter.md +116 -0
  93. package/docs/readmes/packages/node-test.md +137 -0
  94. package/docs/readmes/packages/yaml.md +112 -0
  95. package/docs/reference/configuration-reference.md +159 -0
  96. package/docs/reference/expertise-index.md +52 -0
  97. package/docs/reference/git-flow.md +43 -0
  98. package/docs/reference/hooks.md +87 -0
  99. package/docs/reference/host-exports.md +50 -0
  100. package/docs/reference/launch-checklist.md +172 -0
  101. package/docs/reference/marketplace-listings.md +76 -0
  102. package/docs/reference/release-process.md +34 -0
  103. package/docs/reference/roles-reference.md +77 -0
  104. package/docs/reference/skills.md +33 -0
  105. package/docs/reference/templates.md +29 -0
  106. package/docs/reference/tooling-cli.md +94 -0
  107. package/docs/truth-claims.yaml +222 -0
  108. package/expertise/PROGRESS.md +63 -0
  109. package/expertise/README.md +18 -0
  110. package/expertise/antipatterns/PROGRESS.md +56 -0
  111. package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
  112. package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
  113. package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
  114. package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
  115. package/expertise/antipatterns/backend/index.md +24 -0
  116. package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
  117. package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
  118. package/expertise/antipatterns/code/async-antipatterns.md +622 -0
  119. package/expertise/antipatterns/code/code-smells.md +1186 -0
  120. package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
  121. package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
  122. package/expertise/antipatterns/code/index.md +27 -0
  123. package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
  124. package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
  125. package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
  126. package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
  127. package/expertise/antipatterns/design/dark-patterns.md +1121 -0
  128. package/expertise/antipatterns/design/index.md +22 -0
  129. package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
  130. package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
  131. package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
  132. package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
  133. package/expertise/antipatterns/frontend/index.md +23 -0
  134. package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
  135. package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
  136. package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
  137. package/expertise/antipatterns/index.md +31 -0
  138. package/expertise/antipatterns/performance/index.md +20 -0
  139. package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
  140. package/expertise/antipatterns/performance/premature-optimization.md +623 -0
  141. package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
  142. package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
  143. package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
  144. package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
  145. package/expertise/antipatterns/process/index.md +23 -0
  146. package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
  147. package/expertise/antipatterns/security/index.md +20 -0
  148. package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
  149. package/expertise/antipatterns/security/security-theater.md +843 -0
  150. package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
  151. package/expertise/architecture/PROGRESS.md +70 -0
  152. package/expertise/architecture/data/caching-architecture.md +671 -0
  153. package/expertise/architecture/data/data-consistency.md +574 -0
  154. package/expertise/architecture/data/data-modeling.md +536 -0
  155. package/expertise/architecture/data/event-streams-and-queues.md +634 -0
  156. package/expertise/architecture/data/index.md +25 -0
  157. package/expertise/architecture/data/search-architecture.md +663 -0
  158. package/expertise/architecture/data/sql-vs-nosql.md +708 -0
  159. package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
  160. package/expertise/architecture/decisions/build-vs-buy.md +616 -0
  161. package/expertise/architecture/decisions/index.md +23 -0
  162. package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
  163. package/expertise/architecture/decisions/technology-selection.md +616 -0
  164. package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
  165. package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
  166. package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
  167. package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
  168. package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
  169. package/expertise/architecture/distributed/index.md +25 -0
  170. package/expertise/architecture/distributed/saga-pattern.md +797 -0
  171. package/expertise/architecture/foundations/architectural-thinking.md +460 -0
  172. package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
  173. package/expertise/architecture/foundations/design-principles-solid.md +649 -0
  174. package/expertise/architecture/foundations/domain-driven-design.md +719 -0
  175. package/expertise/architecture/foundations/index.md +25 -0
  176. package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
  177. package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
  178. package/expertise/architecture/index.md +34 -0
  179. package/expertise/architecture/integration/api-design-graphql.md +638 -0
  180. package/expertise/architecture/integration/api-design-grpc.md +804 -0
  181. package/expertise/architecture/integration/api-design-rest.md +892 -0
  182. package/expertise/architecture/integration/index.md +25 -0
  183. package/expertise/architecture/integration/third-party-integration.md +795 -0
  184. package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
  185. package/expertise/architecture/integration/websockets-realtime.md +791 -0
  186. package/expertise/architecture/mobile-architecture/index.md +22 -0
  187. package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
  188. package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
  189. package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
  190. package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
  191. package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
  192. package/expertise/architecture/patterns/event-driven.md +797 -0
  193. package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
  194. package/expertise/architecture/patterns/index.md +27 -0
  195. package/expertise/architecture/patterns/layered-architecture.md +736 -0
  196. package/expertise/architecture/patterns/microservices.md +753 -0
  197. package/expertise/architecture/patterns/modular-monolith.md +692 -0
  198. package/expertise/architecture/patterns/monolith.md +626 -0
  199. package/expertise/architecture/patterns/plugin-architecture.md +735 -0
  200. package/expertise/architecture/patterns/serverless.md +780 -0
  201. package/expertise/architecture/scaling/database-scaling.md +615 -0
  202. package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
  203. package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
  204. package/expertise/architecture/scaling/index.md +24 -0
  205. package/expertise/architecture/scaling/multi-tenancy.md +800 -0
  206. package/expertise/architecture/scaling/stateless-design.md +787 -0
  207. package/expertise/backend/embedded-firmware.md +625 -0
  208. package/expertise/backend/go.md +853 -0
  209. package/expertise/backend/index.md +24 -0
  210. package/expertise/backend/java-spring.md +448 -0
  211. package/expertise/backend/node-typescript.md +625 -0
  212. package/expertise/backend/python-fastapi.md +724 -0
  213. package/expertise/backend/rust.md +458 -0
  214. package/expertise/backend/solidity.md +711 -0
  215. package/expertise/composition-map.yaml +443 -0
  216. package/expertise/content/foundations/content-modeling.md +395 -0
  217. package/expertise/content/foundations/editorial-standards.md +449 -0
  218. package/expertise/content/foundations/index.md +24 -0
  219. package/expertise/content/foundations/microcopy.md +455 -0
  220. package/expertise/content/foundations/terminology-governance.md +509 -0
  221. package/expertise/content/index.md +34 -0
  222. package/expertise/content/patterns/accessibility-copy.md +518 -0
  223. package/expertise/content/patterns/index.md +24 -0
  224. package/expertise/content/patterns/notification-content.md +433 -0
  225. package/expertise/content/patterns/sample-content.md +486 -0
  226. package/expertise/content/patterns/state-copy.md +439 -0
  227. package/expertise/design/PROGRESS.md +58 -0
  228. package/expertise/design/disciplines/dark-mode-theming.md +577 -0
  229. package/expertise/design/disciplines/design-systems.md +595 -0
  230. package/expertise/design/disciplines/index.md +25 -0
  231. package/expertise/design/disciplines/information-architecture.md +800 -0
  232. package/expertise/design/disciplines/interaction-design.md +788 -0
  233. package/expertise/design/disciplines/responsive-design.md +552 -0
  234. package/expertise/design/disciplines/usability-testing.md +516 -0
  235. package/expertise/design/disciplines/user-research.md +792 -0
  236. package/expertise/design/foundations/accessibility-design.md +796 -0
  237. package/expertise/design/foundations/color-theory.md +797 -0
  238. package/expertise/design/foundations/iconography.md +795 -0
  239. package/expertise/design/foundations/index.md +26 -0
  240. package/expertise/design/foundations/motion-and-animation.md +653 -0
  241. package/expertise/design/foundations/rtl-design.md +585 -0
  242. package/expertise/design/foundations/spacing-and-layout.md +607 -0
  243. package/expertise/design/foundations/typography.md +800 -0
  244. package/expertise/design/foundations/visual-hierarchy.md +761 -0
  245. package/expertise/design/index.md +32 -0
  246. package/expertise/design/patterns/authentication-flows.md +474 -0
  247. package/expertise/design/patterns/content-consumption.md +789 -0
  248. package/expertise/design/patterns/data-display.md +618 -0
  249. package/expertise/design/patterns/e-commerce.md +1494 -0
  250. package/expertise/design/patterns/feedback-and-states.md +642 -0
  251. package/expertise/design/patterns/forms-and-input.md +819 -0
  252. package/expertise/design/patterns/gamification.md +801 -0
  253. package/expertise/design/patterns/index.md +31 -0
  254. package/expertise/design/patterns/microinteractions.md +449 -0
  255. package/expertise/design/patterns/navigation.md +800 -0
  256. package/expertise/design/patterns/notifications.md +705 -0
  257. package/expertise/design/patterns/onboarding.md +700 -0
  258. package/expertise/design/patterns/search-and-filter.md +601 -0
  259. package/expertise/design/patterns/settings-and-preferences.md +768 -0
  260. package/expertise/design/patterns/social-and-community.md +748 -0
  261. package/expertise/design/platforms/desktop-native.md +612 -0
  262. package/expertise/design/platforms/index.md +25 -0
  263. package/expertise/design/platforms/mobile-android.md +825 -0
  264. package/expertise/design/platforms/mobile-cross-platform.md +983 -0
  265. package/expertise/design/platforms/mobile-ios.md +699 -0
  266. package/expertise/design/platforms/tablet.md +794 -0
  267. package/expertise/design/platforms/web-dashboard.md +790 -0
  268. package/expertise/design/platforms/web-responsive.md +550 -0
  269. package/expertise/design/psychology/behavioral-nudges.md +449 -0
  270. package/expertise/design/psychology/cognitive-load.md +1191 -0
  271. package/expertise/design/psychology/error-psychology.md +778 -0
  272. package/expertise/design/psychology/index.md +22 -0
  273. package/expertise/design/psychology/persuasive-design.md +736 -0
  274. package/expertise/design/psychology/user-mental-models.md +623 -0
  275. package/expertise/design/tooling/open-pencil.md +266 -0
  276. package/expertise/frontend/angular.md +1073 -0
  277. package/expertise/frontend/desktop-electron.md +546 -0
  278. package/expertise/frontend/flutter.md +782 -0
  279. package/expertise/frontend/index.md +27 -0
  280. package/expertise/frontend/native-android.md +409 -0
  281. package/expertise/frontend/native-ios.md +490 -0
  282. package/expertise/frontend/react-native.md +1160 -0
  283. package/expertise/frontend/react.md +808 -0
  284. package/expertise/frontend/vue.md +1089 -0
  285. package/expertise/humanize/domain-rules-code.md +79 -0
  286. package/expertise/humanize/domain-rules-content.md +67 -0
  287. package/expertise/humanize/domain-rules-technical-docs.md +56 -0
  288. package/expertise/humanize/index.md +35 -0
  289. package/expertise/humanize/self-audit-checklist.md +87 -0
  290. package/expertise/humanize/sentence-patterns.md +218 -0
  291. package/expertise/humanize/vocabulary-blacklist.md +105 -0
  292. package/expertise/i18n/PROGRESS.md +65 -0
  293. package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
  294. package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
  295. package/expertise/i18n/advanced/complex-scripts.md +30 -0
  296. package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
  297. package/expertise/i18n/advanced/testing-i18n.md +28 -0
  298. package/expertise/i18n/content/content-adaptation.md +23 -0
  299. package/expertise/i18n/content/locale-specific-formatting.md +23 -0
  300. package/expertise/i18n/content/machine-translation-integration.md +28 -0
  301. package/expertise/i18n/content/translation-management.md +29 -0
  302. package/expertise/i18n/foundations/date-time-calendars.md +67 -0
  303. package/expertise/i18n/foundations/i18n-architecture.md +272 -0
  304. package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
  305. package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
  306. package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
  307. package/expertise/i18n/foundations/string-externalization.md +236 -0
  308. package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
  309. package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
  310. package/expertise/i18n/index.md +38 -0
  311. package/expertise/i18n/platform/backend-i18n.md +31 -0
  312. package/expertise/i18n/platform/flutter-i18n.md +148 -0
  313. package/expertise/i18n/platform/native-android-i18n.md +36 -0
  314. package/expertise/i18n/platform/native-ios-i18n.md +36 -0
  315. package/expertise/i18n/platform/react-i18n.md +103 -0
  316. package/expertise/i18n/platform/web-css-i18n.md +81 -0
  317. package/expertise/i18n/rtl/arabic-specific.md +175 -0
  318. package/expertise/i18n/rtl/hebrew-specific.md +149 -0
  319. package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
  320. package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
  321. package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
  322. package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
  323. package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
  324. package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
  325. package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
  326. package/expertise/i18n/rtl/rtl-typography.md +160 -0
  327. package/expertise/index.md +113 -0
  328. package/expertise/index.yaml +216 -0
  329. package/expertise/infrastructure/cloud-aws.md +597 -0
  330. package/expertise/infrastructure/cloud-gcp.md +599 -0
  331. package/expertise/infrastructure/cybersecurity.md +816 -0
  332. package/expertise/infrastructure/database-mongodb.md +447 -0
  333. package/expertise/infrastructure/database-postgres.md +400 -0
  334. package/expertise/infrastructure/devops-cicd.md +787 -0
  335. package/expertise/infrastructure/index.md +27 -0
  336. package/expertise/performance/PROGRESS.md +50 -0
  337. package/expertise/performance/backend/api-latency.md +1204 -0
  338. package/expertise/performance/backend/background-jobs.md +506 -0
  339. package/expertise/performance/backend/connection-pooling.md +1209 -0
  340. package/expertise/performance/backend/database-query-optimization.md +515 -0
  341. package/expertise/performance/backend/index.md +23 -0
  342. package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
  343. package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
  344. package/expertise/performance/foundations/caching-strategies.md +489 -0
  345. package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
  346. package/expertise/performance/foundations/index.md +24 -0
  347. package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
  348. package/expertise/performance/foundations/memory-management.md +964 -0
  349. package/expertise/performance/foundations/performance-budgets.md +1314 -0
  350. package/expertise/performance/index.md +31 -0
  351. package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
  352. package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
  353. package/expertise/performance/infrastructure/index.md +22 -0
  354. package/expertise/performance/infrastructure/load-balancing.md +1081 -0
  355. package/expertise/performance/infrastructure/observability.md +1079 -0
  356. package/expertise/performance/mobile/index.md +23 -0
  357. package/expertise/performance/mobile/mobile-animations.md +544 -0
  358. package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
  359. package/expertise/performance/mobile/mobile-network.md +452 -0
  360. package/expertise/performance/mobile/mobile-rendering.md +599 -0
  361. package/expertise/performance/mobile/mobile-startup-time.md +505 -0
  362. package/expertise/performance/platform-specific/flutter-performance.md +647 -0
  363. package/expertise/performance/platform-specific/index.md +22 -0
  364. package/expertise/performance/platform-specific/node-performance.md +1307 -0
  365. package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
  366. package/expertise/performance/platform-specific/react-performance.md +1403 -0
  367. package/expertise/performance/web/bundle-optimization.md +1239 -0
  368. package/expertise/performance/web/image-and-media.md +636 -0
  369. package/expertise/performance/web/index.md +24 -0
  370. package/expertise/performance/web/network-optimization.md +1133 -0
  371. package/expertise/performance/web/rendering-performance.md +1098 -0
  372. package/expertise/performance/web/ssr-and-hydration.md +918 -0
  373. package/expertise/performance/web/web-vitals.md +1374 -0
  374. package/expertise/quality/accessibility.md +985 -0
  375. package/expertise/quality/evidence-based-verification.md +499 -0
  376. package/expertise/quality/index.md +24 -0
  377. package/expertise/quality/ml-model-audit.md +614 -0
  378. package/expertise/quality/performance.md +600 -0
  379. package/expertise/quality/testing-api.md +891 -0
  380. package/expertise/quality/testing-mobile.md +496 -0
  381. package/expertise/quality/testing-web.md +849 -0
  382. package/expertise/security/PROGRESS.md +54 -0
  383. package/expertise/security/agentic-identity.md +540 -0
  384. package/expertise/security/compliance-frameworks.md +601 -0
  385. package/expertise/security/data/data-encryption.md +364 -0
  386. package/expertise/security/data/data-privacy-gdpr.md +692 -0
  387. package/expertise/security/data/database-security.md +1171 -0
  388. package/expertise/security/data/index.md +22 -0
  389. package/expertise/security/data/pii-handling.md +531 -0
  390. package/expertise/security/foundations/authentication.md +1041 -0
  391. package/expertise/security/foundations/authorization.md +603 -0
  392. package/expertise/security/foundations/cryptography.md +1001 -0
  393. package/expertise/security/foundations/index.md +25 -0
  394. package/expertise/security/foundations/owasp-top-10.md +1354 -0
  395. package/expertise/security/foundations/secrets-management.md +1217 -0
  396. package/expertise/security/foundations/secure-sdlc.md +700 -0
  397. package/expertise/security/foundations/supply-chain-security.md +698 -0
  398. package/expertise/security/index.md +31 -0
  399. package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
  400. package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
  401. package/expertise/security/infrastructure/container-security.md +721 -0
  402. package/expertise/security/infrastructure/incident-response.md +1295 -0
  403. package/expertise/security/infrastructure/index.md +24 -0
  404. package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
  405. package/expertise/security/infrastructure/network-security.md +1337 -0
  406. package/expertise/security/mobile/index.md +23 -0
  407. package/expertise/security/mobile/mobile-android-security.md +1218 -0
  408. package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
  409. package/expertise/security/mobile/mobile-data-storage.md +1265 -0
  410. package/expertise/security/mobile/mobile-ios-security.md +1401 -0
  411. package/expertise/security/mobile/mobile-network-security.md +1520 -0
  412. package/expertise/security/smart-contract-security.md +594 -0
  413. package/expertise/security/testing/index.md +22 -0
  414. package/expertise/security/testing/penetration-testing.md +1258 -0
  415. package/expertise/security/testing/security-code-review.md +1765 -0
  416. package/expertise/security/testing/threat-modeling.md +1074 -0
  417. package/expertise/security/testing/vulnerability-scanning.md +1062 -0
  418. package/expertise/security/web/api-security.md +586 -0
  419. package/expertise/security/web/cors-and-headers.md +433 -0
  420. package/expertise/security/web/csrf.md +562 -0
  421. package/expertise/security/web/file-upload.md +1477 -0
  422. package/expertise/security/web/index.md +25 -0
  423. package/expertise/security/web/injection.md +1375 -0
  424. package/expertise/security/web/session-management.md +1101 -0
  425. package/expertise/security/web/xss.md +1158 -0
  426. package/exports/README.md +17 -0
  427. package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
  428. package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
  429. package/exports/hosts/claude/.claude/agents/designer.md +55 -0
  430. package/exports/hosts/claude/.claude/agents/executor.md +55 -0
  431. package/exports/hosts/claude/.claude/agents/learner.md +51 -0
  432. package/exports/hosts/claude/.claude/agents/planner.md +53 -0
  433. package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
  434. package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
  435. package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
  436. package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
  437. package/exports/hosts/claude/.claude/commands/author.md +42 -0
  438. package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
  439. package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
  440. package/exports/hosts/claude/.claude/commands/design.md +44 -0
  441. package/exports/hosts/claude/.claude/commands/discover.md +37 -0
  442. package/exports/hosts/claude/.claude/commands/execute.md +48 -0
  443. package/exports/hosts/claude/.claude/commands/learn.md +38 -0
  444. package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
  445. package/exports/hosts/claude/.claude/commands/plan.md +39 -0
  446. package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
  447. package/exports/hosts/claude/.claude/commands/review.md +40 -0
  448. package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
  449. package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
  450. package/exports/hosts/claude/.claude/commands/specify.md +38 -0
  451. package/exports/hosts/claude/.claude/commands/verify.md +37 -0
  452. package/exports/hosts/claude/.claude/settings.json +34 -0
  453. package/exports/hosts/claude/CLAUDE.md +19 -0
  454. package/exports/hosts/claude/export.manifest.json +38 -0
  455. package/exports/hosts/claude/host-package.json +67 -0
  456. package/exports/hosts/codex/AGENTS.md +19 -0
  457. package/exports/hosts/codex/export.manifest.json +38 -0
  458. package/exports/hosts/codex/host-package.json +41 -0
  459. package/exports/hosts/cursor/.cursor/hooks.json +16 -0
  460. package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
  461. package/exports/hosts/cursor/export.manifest.json +38 -0
  462. package/exports/hosts/cursor/host-package.json +42 -0
  463. package/exports/hosts/gemini/GEMINI.md +19 -0
  464. package/exports/hosts/gemini/export.manifest.json +38 -0
  465. package/exports/hosts/gemini/host-package.json +41 -0
  466. package/hooks/README.md +18 -0
  467. package/hooks/definitions/loop_cap_guard.yaml +21 -0
  468. package/hooks/definitions/post_tool_capture.yaml +24 -0
  469. package/hooks/definitions/pre_compact_summary.yaml +19 -0
  470. package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
  471. package/hooks/definitions/protected_path_write_guard.yaml +19 -0
  472. package/hooks/definitions/session_start.yaml +19 -0
  473. package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
  474. package/hooks/loop-cap-guard +17 -0
  475. package/hooks/post-tool-lint +36 -0
  476. package/hooks/protected-path-write-guard +17 -0
  477. package/hooks/session-start +41 -0
  478. package/llms-full.txt +2355 -0
  479. package/llms.txt +43 -0
  480. package/package.json +79 -0
  481. package/roles/README.md +20 -0
  482. package/roles/clarifier.md +42 -0
  483. package/roles/content-author.md +63 -0
  484. package/roles/designer.md +55 -0
  485. package/roles/executor.md +55 -0
  486. package/roles/learner.md +51 -0
  487. package/roles/planner.md +53 -0
  488. package/roles/researcher.md +43 -0
  489. package/roles/reviewer.md +54 -0
  490. package/roles/specifier.md +47 -0
  491. package/roles/verifier.md +71 -0
  492. package/schemas/README.md +24 -0
  493. package/schemas/accepted-learning.schema.json +20 -0
  494. package/schemas/author-artifact.schema.json +156 -0
  495. package/schemas/clarification.schema.json +19 -0
  496. package/schemas/design-artifact.schema.json +80 -0
  497. package/schemas/docs-claim.schema.json +18 -0
  498. package/schemas/export-manifest.schema.json +20 -0
  499. package/schemas/hook.schema.json +67 -0
  500. package/schemas/host-export-package.schema.json +18 -0
  501. package/schemas/implementation-plan.schema.json +19 -0
  502. package/schemas/proposed-learning.schema.json +19 -0
  503. package/schemas/research.schema.json +18 -0
  504. package/schemas/review.schema.json +29 -0
  505. package/schemas/run-manifest.schema.json +18 -0
  506. package/schemas/spec-challenge.schema.json +18 -0
  507. package/schemas/spec.schema.json +20 -0
  508. package/schemas/usage.schema.json +102 -0
  509. package/schemas/verification-proof.schema.json +29 -0
  510. package/schemas/wazir-manifest.schema.json +173 -0
  511. package/skills/README.md +40 -0
  512. package/skills/brainstorming/SKILL.md +77 -0
  513. package/skills/debugging/SKILL.md +50 -0
  514. package/skills/design/SKILL.md +61 -0
  515. package/skills/dispatching-parallel-agents/SKILL.md +128 -0
  516. package/skills/executing-plans/SKILL.md +70 -0
  517. package/skills/finishing-a-development-branch/SKILL.md +169 -0
  518. package/skills/humanize/SKILL.md +123 -0
  519. package/skills/init-pipeline/SKILL.md +124 -0
  520. package/skills/prepare-next/SKILL.md +20 -0
  521. package/skills/receiving-code-review/SKILL.md +123 -0
  522. package/skills/requesting-code-review/SKILL.md +105 -0
  523. package/skills/requesting-code-review/code-reviewer.md +108 -0
  524. package/skills/run-audit/SKILL.md +197 -0
  525. package/skills/scan-project/SKILL.md +41 -0
  526. package/skills/self-audit/SKILL.md +153 -0
  527. package/skills/subagent-driven-development/SKILL.md +154 -0
  528. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  529. package/skills/subagent-driven-development/implementer-prompt.md +102 -0
  530. package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  531. package/skills/tdd/SKILL.md +23 -0
  532. package/skills/using-git-worktrees/SKILL.md +163 -0
  533. package/skills/using-skills/SKILL.md +95 -0
  534. package/skills/verification/SKILL.md +22 -0
  535. package/skills/wazir/SKILL.md +463 -0
  536. package/skills/writing-plans/SKILL.md +30 -0
  537. package/skills/writing-skills/SKILL.md +157 -0
  538. package/skills/writing-skills/anthropic-best-practices.md +122 -0
  539. package/skills/writing-skills/persuasion-principles.md +50 -0
  540. package/templates/README.md +20 -0
  541. package/templates/artifacts/README.md +10 -0
  542. package/templates/artifacts/accepted-learning.md +19 -0
  543. package/templates/artifacts/accepted-learning.template.json +12 -0
  544. package/templates/artifacts/author.md +74 -0
  545. package/templates/artifacts/author.template.json +19 -0
  546. package/templates/artifacts/clarification.md +21 -0
  547. package/templates/artifacts/clarification.template.json +12 -0
  548. package/templates/artifacts/execute-notes.md +19 -0
  549. package/templates/artifacts/implementation-plan.md +21 -0
  550. package/templates/artifacts/implementation-plan.template.json +11 -0
  551. package/templates/artifacts/learning-proposal.md +19 -0
  552. package/templates/artifacts/next-run-handoff.md +21 -0
  553. package/templates/artifacts/plan-review.md +19 -0
  554. package/templates/artifacts/proposed-learning.template.json +12 -0
  555. package/templates/artifacts/research.md +21 -0
  556. package/templates/artifacts/research.template.json +12 -0
  557. package/templates/artifacts/review-findings.md +19 -0
  558. package/templates/artifacts/review.template.json +11 -0
  559. package/templates/artifacts/run-manifest.template.json +8 -0
  560. package/templates/artifacts/spec-challenge.md +19 -0
  561. package/templates/artifacts/spec-challenge.template.json +11 -0
  562. package/templates/artifacts/spec.md +21 -0
  563. package/templates/artifacts/spec.template.json +12 -0
  564. package/templates/artifacts/verification-proof.md +19 -0
  565. package/templates/artifacts/verification-proof.template.json +11 -0
  566. package/templates/examples/accepted-learning.example.json +14 -0
  567. package/templates/examples/author.example.json +152 -0
  568. package/templates/examples/clarification.example.json +15 -0
  569. package/templates/examples/docs-claim.example.json +8 -0
  570. package/templates/examples/export-manifest.example.json +7 -0
  571. package/templates/examples/host-export-package.example.json +11 -0
  572. package/templates/examples/implementation-plan.example.json +17 -0
  573. package/templates/examples/proposed-learning.example.json +13 -0
  574. package/templates/examples/research.example.json +15 -0
  575. package/templates/examples/research.example.md +6 -0
  576. package/templates/examples/review.example.json +17 -0
  577. package/templates/examples/run-manifest.example.json +9 -0
  578. package/templates/examples/spec-challenge.example.json +14 -0
  579. package/templates/examples/spec.example.json +21 -0
  580. package/templates/examples/verification-proof.example.json +21 -0
  581. package/templates/examples/wazir-manifest.example.yaml +65 -0
  582. package/templates/task-definition-schema.md +99 -0
  583. package/tooling/README.md +20 -0
  584. package/tooling/src/adapters/context-mode.js +50 -0
  585. package/tooling/src/capture/command.js +376 -0
  586. package/tooling/src/capture/store.js +99 -0
  587. package/tooling/src/capture/usage.js +270 -0
  588. package/tooling/src/checks/branches.js +50 -0
  589. package/tooling/src/checks/brand-truth.js +110 -0
  590. package/tooling/src/checks/changelog.js +231 -0
  591. package/tooling/src/checks/command-registry.js +36 -0
  592. package/tooling/src/checks/commits.js +102 -0
  593. package/tooling/src/checks/docs-drift.js +103 -0
  594. package/tooling/src/checks/docs-truth.js +201 -0
  595. package/tooling/src/checks/runtime-surface.js +156 -0
  596. package/tooling/src/cli.js +116 -0
  597. package/tooling/src/command-options.js +56 -0
  598. package/tooling/src/commands/validate.js +320 -0
  599. package/tooling/src/doctor/command.js +91 -0
  600. package/tooling/src/export/command.js +77 -0
  601. package/tooling/src/export/compiler.js +498 -0
  602. package/tooling/src/guards/loop-cap-guard.js +52 -0
  603. package/tooling/src/guards/protected-path-write-guard.js +67 -0
  604. package/tooling/src/index/command.js +152 -0
  605. package/tooling/src/index/storage.js +1061 -0
  606. package/tooling/src/index/summarizers.js +261 -0
  607. package/tooling/src/loaders.js +18 -0
  608. package/tooling/src/project-root.js +22 -0
  609. package/tooling/src/recall/command.js +225 -0
  610. package/tooling/src/schema-validator.js +30 -0
  611. package/tooling/src/state-root.js +40 -0
  612. package/tooling/src/status/command.js +71 -0
  613. package/wazir.manifest.yaml +135 -0
  614. package/workflows/README.md +19 -0
  615. package/workflows/author.md +42 -0
  616. package/workflows/clarify.md +38 -0
  617. package/workflows/design-review.md +46 -0
  618. package/workflows/design.md +44 -0
  619. package/workflows/discover.md +37 -0
  620. package/workflows/execute.md +48 -0
  621. package/workflows/learn.md +38 -0
  622. package/workflows/plan-review.md +42 -0
  623. package/workflows/plan.md +39 -0
  624. package/workflows/prepare-next.md +37 -0
  625. package/workflows/review.md +40 -0
  626. package/workflows/run-audit.md +41 -0
  627. package/workflows/spec-challenge.md +41 -0
  628. package/workflows/specify.md +38 -0
  629. package/workflows/verify.md +37 -0
@@ -0,0 +1,586 @@
1
+ # API Security — Comprehensive Expertise Module
2
+
3
+ > **Purpose:** Reference for AI agents during planning and implementation to secure APIs by default.
4
+ > **Last updated:** 2026-03-08
5
+ > **Sources:** OWASP API Security Top 10 2023, real-world breaches 2021-2025, NIST, PCI DSS 4.0
6
+
7
+ ---
8
+
9
+ ## 1. Threat Landscape
10
+
11
+ ### 1.1 Scale
12
+
13
+ APIs are the dominant attack surface. In Q1 2025, 99% of surveyed organizations experienced at
14
+ least one API security issue. BOLA and injection attacks made up over one-third of all incidents.
15
+ India saw a 3,000% increase in API cyberattacks in Q3 2024 (271M+ attacks). Akamai reported
16
+ ~26 billion credential stuffing attempts monthly in 2024.
17
+
18
+ ### 1.2 OWASP API Security Top 10 2023
19
+
20
+ | # | Risk | Key Concern |
21
+ |---|------|-------------|
22
+ | API1 | Broken Object Level Authorization (BOLA) | Accessing other users' objects by ID manipulation |
23
+ | API2 | Broken Authentication | Weak/missing auth on API endpoints |
24
+ | API3 | Broken Object Property Level Authorization | Excessive data exposure + mass assignment |
25
+ | API4 | Unrestricted Resource Consumption | No rate limiting / resource quotas |
26
+ | API5 | Broken Function Level Authorization | Unauthorized access to admin functions |
27
+ | API6 | Unrestricted Access to Sensitive Business Flows | Automated abuse of business logic |
28
+ | API7 | Server Side Request Forgery (SSRF) | Fetching attacker-controlled URLs from server |
29
+ | API8 | Security Misconfiguration | Missing hardening, verbose errors, open CORS |
30
+ | API9 | Improper Inventory Management | Shadow/zombie APIs, undocumented endpoints |
31
+ | API10 | Unsafe Consumption of APIs | Trusting third-party API responses without validation |
32
+
33
+ ### 1.3 Real-World Breaches
34
+
35
+ **Optus (Sep 2022) — Unauthenticated API, 10M records.** Endpoint `api.www.optus.com.au`
36
+ was publicly accessible since 2019 due to a coding error. Customer IDs were sequential
37
+ (predictable IDOR). No rate limiting. Attackers scraped names, DOBs, passport and license
38
+ numbers. Root causes: no auth, predictable IDs, no rate limiting.
39
+ *(Source: ACMA filings, Salt Security)*
40
+
41
+ **Peloton (May 2021) — BOLA, 3M users exposed.** API allowed unauthenticated requests for
42
+ user data regardless of privacy settings. Initial fix only required authentication but still let any
43
+ user access any other user's data — trading API2 (Broken Auth) for API1 (BOLA).
44
+ *(Source: Pen Test Partners, TechCrunch)*
45
+
46
+ **T-Mobile (Jan 2023) — API abuse, 37M records.** Attackers exploited a vulnerable API for 6
47
+ weeks (Nov 2022 - Jan 2023), extracting names, billing addresses, emails, phone numbers, DOBs,
48
+ and account numbers. Root causes: insufficient monitoring, weak access controls.
49
+ *(Source: Krebs on Security, BleepingComputer)*
50
+
51
+ **Dell (May 2024) — Partner portal API, 49M records.** Attackers registered fake partner
52
+ accounts (approved in 24-48h without verification), then scraped by generating service tags at
53
+ 5,000 req/min for 3 weeks. No rate limiting, no per-tag authorization.
54
+ *(Source: BleepingComputer, Salt Security)*
55
+
56
+ **DeepSeek (Jan 2025) — Open database via API.** ClickHouse database publicly accessible
57
+ without authentication. Over 1M log entries exposed including chat histories, API keys, backend
58
+ details. Anyone could execute SQL queries directly.
59
+ *(Source: Wiz Research)*
60
+
61
+ ### 1.4 Attack Trends
62
+
63
+ - BOLA remains #1 since 2019, appearing in ~40% of all API attacks
64
+ - Automated API abuse (scraping, credential stuffing) is the fastest-growing vector
65
+ - Shadow/zombie APIs are a blind spot — organizations average 3x more APIs than inventoried
66
+ - Supply chain attacks through third-party API consumption are emerging
67
+ - AI-powered attack tools are lowering the barrier for API exploitation
68
+
69
+ ---
70
+
71
+ ## 2. Core Security Principles
72
+
73
+ ### 2.1 Authentication
74
+
75
+ | Method | Use Case | Key Risk |
76
+ |--------|----------|----------|
77
+ | API Keys | Service-to-service identification | Not true auth — identifies, doesn't authenticate. Easily leaked |
78
+ | OAuth 2.0 + OIDC | User-facing apps, delegated access | Complex to implement correctly |
79
+ | JWT (Bearer) | Stateless API auth | Algorithm confusion attacks (CVE-2024-54150). Must pin algorithm |
80
+ | mTLS | Service mesh, zero-trust internal | Certificate management overhead |
81
+
82
+ **Rule:** API keys are NOT authentication. Always combine with OAuth/JWT for sensitive operations.
83
+
84
+ ### 2.2 Authorization at Every Endpoint
85
+
86
+ - Implement checks at object level, not just endpoint level (prevents BOLA)
87
+ - Never rely on client-supplied object IDs without verifying ownership
88
+ - Use RBAC/ABAC consistently; authorization logic must live server-side
89
+
90
+ ### 2.3 Input Validation
91
+
92
+ - Validate all input against strict schemas (type, length, format, range)
93
+ - Allowlists over denylists; validate Content-Type headers; reject unexpected fields
94
+
95
+ ### 2.4 Rate Limiting
96
+
97
+ - Per user/key, per IP, and per endpoint; stricter for auth endpoints
98
+ - Return `429` with `Retry-After` header; graduated response: warn, throttle, block, alert
99
+
100
+ ### 2.5 Response Filtering
101
+
102
+ - Never return more data than needed; explicit response schemas with allowlisted fields
103
+ - Strip internal IDs, debug info, stack traces from production responses
104
+
105
+ ### 2.6 API Versioning Security
106
+
107
+ - Deprecate old versions on clear timelines; max 2 active versions
108
+ - Old versions often lack security fixes — enforce migration
109
+
110
+ ---
111
+
112
+ ## 3. Implementation Patterns
113
+
114
+ ### 3.1 JWT Validation Middleware (TypeScript)
115
+
116
+ ```typescript
117
+ // VULNERABLE: No algorithm enforcement, no signature verification
118
+ const decoded = jwt.decode(token); // DANGEROUS: decode without verify
119
+ req.user = decoded;
120
+ ```
121
+
122
+ ```typescript
123
+ // SECURE: Full JWT validation with algorithm pinning
124
+ import jwt, { JwtPayload } from 'jsonwebtoken';
125
+
126
+ export function jwtAuthMiddleware(req: Request, res: Response, next: NextFunction) {
127
+ const authHeader = req.headers.authorization;
128
+ if (!authHeader?.startsWith('Bearer ')) {
129
+ return res.status(401).json({ error: 'Missing Authorization header' });
130
+ }
131
+ try {
132
+ const decoded = jwt.verify(authHeader.slice(7), publicKey, {
133
+ algorithms: ['RS256'], // Pin algorithm — prevents confusion attacks
134
+ issuer: 'https://auth.example.com',
135
+ audience: 'https://api.example.com',
136
+ clockTolerance: 30,
137
+ complete: true,
138
+ }) as { payload: JwtPayload };
139
+ if (!decoded.payload.sub) return res.status(401).json({ error: 'Missing subject' });
140
+ req.user = {
141
+ id: decoded.payload.sub,
142
+ scopes: decoded.payload.scope?.split(' ') ?? [],
143
+ };
144
+ next();
145
+ } catch (err) {
146
+ const msg = err instanceof jwt.TokenExpiredError ? 'Token expired' : 'Invalid token';
147
+ return res.status(401).json({ error: msg });
148
+ }
149
+ }
150
+ ```
151
+
152
+ ### 3.2 OAuth 2.0 Scope Enforcement
153
+
154
+ ```typescript
155
+ function requireScopes(...required: string[]) {
156
+ return (req: Request, res: Response, next: NextFunction) => {
157
+ const has = req.user?.scopes ?? [];
158
+ if (!required.every(s => has.includes(s))) {
159
+ return res.status(403).json({ error: 'Insufficient scope', required });
160
+ }
161
+ next();
162
+ };
163
+ }
164
+ router.delete('/users/:id', requireScopes('users:delete', 'admin'), deleteUser);
165
+ ```
166
+
167
+ ### 3.3 Rate Limiting (Token Bucket with Redis)
168
+
169
+ ```typescript
170
+ import rateLimit from 'express-rate-limit';
171
+ import RedisStore from 'rate-limit-redis';
172
+
173
+ // Strict limit for auth endpoints
174
+ const authLimiter = rateLimit({
175
+ store: new RedisStore({ sendCommand: (...args) => redis.call(...args) }),
176
+ windowMs: 15 * 60 * 1000, max: 10, // 10 attempts per 15 min
177
+ standardHeaders: true, legacyHeaders: false,
178
+ keyGenerator: (req) => req.ip ?? 'unknown',
179
+ });
180
+ // Standard limit for data endpoints
181
+ const apiLimiter = rateLimit({
182
+ store: new RedisStore({ sendCommand: (...args) => redis.call(...args) }),
183
+ windowMs: 60 * 1000, max: 100, // 100 req/min per user
184
+ keyGenerator: (req) => req.user?.id ?? req.ip ?? 'unknown',
185
+ });
186
+ app.use('/api/auth/', authLimiter);
187
+ app.use('/api/', apiLimiter);
188
+ ```
189
+
190
+ ### 3.4 Input Validation with Zod (Mass Assignment Prevention)
191
+
192
+ ```typescript
193
+ // VULNERABLE: Passes raw body to ORM — mass assignment
194
+ app.post('/api/users', (req, res) => { db.users.create(req.body); });
195
+ ```
196
+
197
+ ```typescript
198
+ // SECURE: Strict schema validation
199
+ import { z } from 'zod';
200
+ const CreateUserSchema = z.object({
201
+ email: z.string().email().max(254),
202
+ name: z.string().min(1).max(100),
203
+ password: z.string().min(12).max(128),
204
+ }).strict(); // Rejects unexpected fields — prevents mass assignment
205
+
206
+ app.post('/api/users', validateBody(CreateUserSchema), async (req, res) => {
207
+ const user = await db.users.create({
208
+ ...req.validatedBody,
209
+ role: 'user', // Server-controlled, never from input
210
+ isAdmin: false, // Server-controlled, never from input
211
+ });
212
+ res.status(201).json(toPublicUser(user));
213
+ });
214
+ ```
215
+
216
+ ### 3.5 BOLA Prevention
217
+
218
+ ```typescript
219
+ // VULNERABLE: Any authenticated user can see any order
220
+ app.get('/api/orders/:id', async (req, res) => {
221
+ const order = await db.orders.findById(req.params.id);
222
+ res.json(order);
223
+ });
224
+ ```
225
+
226
+ ```typescript
227
+ // SECURE: Ownership enforced at query level
228
+ app.get('/api/orders/:id', async (req, res) => {
229
+ const order = await db.orders.findOne({
230
+ _id: req.params.id,
231
+ userId: req.user.id, // Ownership check in query
232
+ });
233
+ if (!order) return res.status(404).json({ error: 'Not found' }); // 404, not 403
234
+ res.json(filterOrderResponse(order));
235
+ });
236
+ ```
237
+
238
+ ### 3.6 GraphQL Security
239
+
240
+ ```typescript
241
+ import { createYoga } from 'graphql-yoga';
242
+ import { useDepthLimit } from '@envelop/depth-limit';
243
+ import { costLimitPlugin } from '@escape.tech/graphql-armor-cost-limit';
244
+ import { maxAliasesPlugin } from '@escape.tech/graphql-armor-max-aliases';
245
+
246
+ const yoga = createYoga({
247
+ schema,
248
+ plugins: [
249
+ useDepthLimit({ maxDepth: 7 }), // Prevent deep nesting attacks
250
+ costLimitPlugin({ maxCost: 5000 }), // Query complexity limit
251
+ maxAliasesPlugin({ n: 15 }), // Prevent alias-based DoS
252
+ ],
253
+ });
254
+ ```
255
+
256
+ GraphQL-specific threats: query depth attacks, batch query abuse, introspection in production
257
+ (disable `__schema`/`__type`), field suggestion leakage, alias-based rate limit bypass.
258
+
259
+ ### 3.7 API Gateway Pattern
260
+
261
+ | Concern | Gateway Enforcement |
262
+ |---------|-------------------|
263
+ | Authentication | Validate JWT/OAuth before request reaches backend |
264
+ | Rate limiting | Token bucket per API key/IP |
265
+ | Request validation | Validate against OpenAPI schema |
266
+ | TLS termination | TLS at gateway, mTLS to backends |
267
+ | Logging | Centralized audit trail |
268
+
269
+ Key gateways: **Kong** (plugin-based), **AWS API Gateway** (Lambda authorizers),
270
+ **Envoy** (service mesh), **Nginx** (reverse proxy + `limit_req`).
271
+
272
+ ---
273
+
274
+ ## 4. Vulnerability Catalog — OWASP API Top 10 2023 with CWE
275
+
276
+ | # | Vulnerability | CWE | Fix |
277
+ |---|---------------|-----|-----|
278
+ | API1 | BOLA | CWE-285, CWE-639 | Ownership checks at query level; UUIDs over sequential IDs; return 404 not 403 |
279
+ | API2 | Broken Authentication | CWE-287, CWE-306 | OAuth 2.0/OIDC; MFA for sensitive ops; pin JWT algorithms |
280
+ | API3 | Broken Object Property Level Auth | CWE-213, CWE-915 | Explicit response schemas; `.strict()` validation; never pass raw body to ORM |
281
+ | API4 | Unrestricted Resource Consumption | CWE-770, CWE-400, CWE-799 | Rate limiting per user/IP; size limits; pagination caps; timeouts |
282
+ | API5 | Broken Function Level Auth | CWE-285 | Deny by default; RBAC/ABAC at every function; separate admin/user paths |
283
+ | API6 | Unrestricted Sensitive Business Flows | CWE-799 | CAPTCHA; device fingerprinting; anomaly detection; per-action rate limits |
284
+ | API7 | SSRF | CWE-918 | URL allowlists; block RFC 1918 ranges; disable redirects; DNS rebinding protection |
285
+ | API8 | Security Misconfiguration | CWE-2, CWE-16, CWE-209, CWE-942 | Harden defaults; no DEBUG; restrict CORS; enforce HTTPS; remove unused endpoints |
286
+ | API9 | Improper Inventory Management | CWE-1059 | API inventory; auto-discover via traffic; deprecate old versions; gateway visibility |
287
+ | API10 | Unsafe Consumption of APIs | CWE-20, CWE-918 | Validate third-party responses; timeouts; circuit breakers; same input validation rules |
288
+
289
+ ---
290
+
291
+ ## 5. Security Checklist (28 items)
292
+
293
+ ### Authentication & Authorization
294
+ - [ ] All endpoints require authentication (no unauthenticated data access)
295
+ - [ ] JWT algorithm pinned server-side (RS256/ES256) — never trust `alg` from header
296
+ - [ ] JWT claims validated: `iss`, `aud`, `exp`, `nbf`, `sub`
297
+ - [ ] OAuth scopes enforced at each endpoint
298
+ - [ ] Object-level authorization on every data access (BOLA prevention)
299
+ - [ ] Function-level auth separates user and admin paths
300
+ - [ ] API keys hashed in storage, shown once at creation, rotatable
301
+
302
+ ### Input & Output
303
+ - [ ] All requests validated against strict schemas (Zod/Joi/Pydantic)
304
+ - [ ] `.strict()` / `extra="forbid"` rejects unexpected fields (mass assignment prevention)
305
+ - [ ] Response schemas allowlist returned fields — no ORM leaking
306
+ - [ ] Content-Type validated; file uploads checked for type, size, and content
307
+ - [ ] Query params validated for type, range, injection patterns
308
+
309
+ ### Rate Limiting & Abuse
310
+ - [ ] Rate limiting per user/key AND per IP
311
+ - [ ] Auth endpoints: stricter limits (10-20 attempts/15 min)
312
+ - [ ] Rate limit headers: `RateLimit-Limit`, `RateLimit-Remaining`, `Retry-After`
313
+ - [ ] Pagination enforced (max 100 items/page); max pagination depth
314
+ - [ ] Request body size limits (e.g., 1MB max)
315
+ - [ ] GraphQL: depth, complexity, alias, and token limits
316
+
317
+ ### Infrastructure
318
+ - [ ] HTTPS enforced; HSTS header set
319
+ - [ ] CORS restricted to specific origins (never `*` for authenticated APIs)
320
+ - [ ] Errors never leak stack traces, SQL, or internal paths
321
+ - [ ] Unused HTTP methods disabled
322
+ - [ ] Security headers: `X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY`
323
+ - [ ] API inventory maintained; all endpoints documented and monitored
324
+ - [ ] Old API versions deprecated with sunset dates
325
+
326
+ ### Monitoring
327
+ - [ ] Access logs: timestamp, user ID, endpoint, status, IP, user-agent
328
+ - [ ] Anomaly detection for rate spikes, geo shifts, auth failures
329
+ - [ ] Alerting on repeated 401/403 from same source
330
+
331
+ ---
332
+
333
+ ## 6. Tools & Automation
334
+
335
+ ### Security Scanners
336
+
337
+ | Tool | Type | Strength |
338
+ |------|------|----------|
339
+ | **42Crunch** | SAST+DAST | 300+ checks on OpenAPI contracts; low false positives; CI/CD |
340
+ | **StackHawk** | DAST | Developer-friendly; CI native; REST + GraphQL OWASP coverage |
341
+ | **Snyk API** | SAST+DAST | Integrated API+web DAST; fits existing Snyk workflows |
342
+ | **Akto** | Inventory+Testing | Auto-discovers APIs from traffic; tests BOLA, auth issues |
343
+ | **APIsec** | Automated pentest | AI-driven test generation from OpenAPI specs |
344
+
345
+ ### API Gateways
346
+
347
+ | Gateway | Key Security Features |
348
+ |---------|----------------------|
349
+ | **Kong** | Plugin ecosystem: rate-limit, key-auth, jwt, cors, bot-detection |
350
+ | **AWS API Gateway** | IAM auth, Cognito, Lambda authorizers; per-key throttling; WAF |
351
+ | **Envoy** | mTLS, external auth filters, rate limiting service (Istio mesh) |
352
+ | **Nginx** | `limit_req_zone` rate limiting, IP filtering, request size limits |
353
+
354
+ ### Rate Limiting Libraries
355
+
356
+ | Library | Platform | Notes |
357
+ |---------|----------|-------|
358
+ | `express-rate-limit` | Node.js | Fixed/sliding window with Redis stores |
359
+ | `slowapi` | FastAPI | Sliding window, decorator-based |
360
+ | `bucket4j` | Spring Boot | Token bucket, distributed stores |
361
+ | Nginx `limit_req` | Infrastructure | Leaky bucket at proxy level |
362
+
363
+ ### Static Analysis
364
+
365
+ Semgrep rulesets for API security: `p/jwt` (JWT misuse), `p/owasp-top-ten`, `p/nodejs`
366
+ (Express patterns). Custom rules for BOLA, mass assignment, missing auth middleware.
367
+
368
+ ### OpenAPI Validation
369
+
370
+ **42Crunch Audit**, **Spectral** (Stoplight), **vacuum** (daveshanley) — lint OpenAPI specs
371
+ for missing security schemes, incomplete schemas, and security misconfigurations.
372
+
373
+ ---
374
+
375
+ ## 7. Platform-Specific Guidance
376
+
377
+ ### REST — Express.js Hardening
378
+
379
+ ```typescript
380
+ import helmet from 'helmet';
381
+ import cors from 'cors';
382
+ app.use(helmet());
383
+ app.use(cors({
384
+ origin: ['https://app.example.com'], // Explicit origins, never '*'
385
+ credentials: true,
386
+ methods: ['GET', 'POST', 'PUT', 'DELETE'],
387
+ }));
388
+ app.use(express.json({ limit: '1mb' }));
389
+ app.disable('x-powered-by');
390
+ ```
391
+
392
+ ### REST — FastAPI Hardening
393
+
394
+ ```python
395
+ from fastapi import FastAPI
396
+ from pydantic import BaseModel, Field
397
+ from slowapi import Limiter
398
+
399
+ app = FastAPI(docs_url=None, redoc_url=None) # Disable docs in production
400
+ limiter = Limiter(key_func=get_remote_address)
401
+
402
+ class UserCreate(BaseModel):
403
+ email: EmailStr
404
+ name: str = Field(..., min_length=1, max_length=100)
405
+ class Config:
406
+ extra = "forbid" # Mass assignment prevention
407
+ ```
408
+
409
+ ### REST — Spring Boot Hardening
410
+
411
+ ```java
412
+ http.authorizeHttpRequests(auth -> auth
413
+ .requestMatchers("/api/admin/**").hasRole("ADMIN")
414
+ .requestMatchers("/api/**").authenticated()
415
+ .anyRequest().denyAll() // Deny by default
416
+ ).oauth2ResourceServer(oauth2 -> oauth2.jwt(jwt -> jwt
417
+ .decoder(jwtDecoder()) // Pinned algorithm decoder
418
+ ));
419
+ ```
420
+
421
+ ### GraphQL Security Checklist
422
+
423
+ - Disable introspection in production
424
+ - Use persisted/allowlisted queries (Apollo APQ)
425
+ - Field-level auth via directives or resolver checks
426
+ - Limit batch operations (max 5-10 per request)
427
+ - Cost analysis with per-field weights
428
+
429
+ ### gRPC Security
430
+
431
+ - Always use TLS; mTLS for service-to-service
432
+ - Auth/authz via server interceptors (not per-handler)
433
+ - Set `maxRecvMsgSize`/`maxSendMsgSize` limits
434
+ - Disable server reflection in production
435
+ - Use short-lived certificates (90 days), automate rotation
436
+
437
+ ---
438
+
439
+ ## 8. Incident Patterns
440
+
441
+ ### 8.1 API Abuse Detection Signals
442
+
443
+ - Request rate >10x baseline from single key/IP
444
+ - Sequential ID enumeration (`/users/1001`, `/users/1002`, ...)
445
+ - Geographic impossibility (same user, two continents, minutes apart)
446
+ - High 4xx error ratio from single source (>50% with 20+ requests)
447
+ - Requests to deprecated/undocumented endpoints
448
+ - Off-hours access patterns for business APIs
449
+
450
+ ### 8.2 Credential Stuffing via APIs
451
+
452
+ ~26 billion attempts/month in 2024 (Akamai). Detection: high volume of failed logins from
453
+ distributed IPs, sub-100ms inter-request timing (bot), uniform patterns, alphabetical usernames.
454
+
455
+ **Prevention stack:** (1) Rate limit auth endpoints aggressively, (2) MFA on all accounts,
456
+ (3) CAPTCHA after 3 failures, (4) Check passwords against breach DBs (HaveIBeenPwned,
457
+ k-anonymity), (5) Device fingerprinting, (6) Temporary account lockout with notification.
458
+
459
+ ### 8.3 Data Exfiltration via APIs
460
+
461
+ Patterns: slow low-volume scraping under rate limits, pagination enumeration, compromised API
462
+ keys, abusing export endpoints, maximum-depth GraphQL queries.
463
+
464
+ **Prevention:** Monitor cumulative data volume per key; field-level access control; max
465
+ pagination depth (e.g., page 100 cap); log and alert on bulk download patterns.
466
+
467
+ ---
468
+
469
+ ## 9. Compliance & Standards
470
+
471
+ ### 9.1 OWASP API Security Top 10 2023
472
+
473
+ Published July 2023. Key changes from 2019: API3 combines Excessive Data Exposure + Mass
474
+ Assignment into BOPLA; API6 (Sensitive Business Flows), API7 (SSRF), API10 (Unsafe API
475
+ Consumption) are new. Compliance: map each endpoint to risks; test during review; automate
476
+ with 42Crunch, StackHawk, or Semgrep.
477
+
478
+ ### 9.2 PCI DSS 4.0
479
+
480
+ First version to explicitly mention APIs (released March 2022, mandatory March 2025).
481
+ - **Req 6.2.3:** Secure development and testing for APIs before production
482
+ - **Req 6.3:** Code reviews of APIs before deployment
483
+ - **Req 6.5:** Validate API documentation / OpenAPI schema accuracy
484
+ - **Req 11.6.1:** Change-detection on payment pages and APIs
485
+
486
+ ### 9.3 SOC 2
487
+
488
+ | Criteria | API Relevance |
489
+ |----------|---------------|
490
+ | Security | Auth, authz, encryption in transit, rate limiting |
491
+ | Availability | API uptime SLAs, DDoS protection, circuit breakers |
492
+ | Processing Integrity | Input validation, idempotency, error handling |
493
+ | Confidentiality | Response filtering, field-level ACL, data classification |
494
+ | Privacy | PII in responses, data minimization, consent enforcement |
495
+
496
+ Controls: API logs retained 12+ months; key rotation policy enforced; incident response covers
497
+ API breaches; change management includes API schema review; third-party APIs risk-assessed annually.
498
+
499
+ ### 9.4 Other Standards
500
+
501
+ - **NIST SP 800-204/204B:** Microservices security, ABAC for APIs
502
+ - **RFC 8725:** JWT Best Current Practices (algorithm pinning, claim validation)
503
+ - **RFC 6749/6750:** OAuth 2.0 framework and bearer token usage
504
+
505
+ ---
506
+
507
+ ## 10. Code Examples — SSRF and Response Filtering
508
+
509
+ ### 10.1 SSRF Prevention
510
+
511
+ ```typescript
512
+ // VULNERABLE: User-controlled URL fetched server-side
513
+ app.post('/api/preview', async (req, res) => {
514
+ const response = await fetch(req.body.url); // SSRF — can hit internal services
515
+ res.json(await response.json());
516
+ });
517
+ ```
518
+
519
+ ```typescript
520
+ // SECURE: URL validation blocking internal networks
521
+ import { URL } from 'url';
522
+ import dns from 'dns/promises';
523
+ import ipaddr from 'ipaddr.js';
524
+
525
+ async function validateExternalUrl(input: string): Promise<URL> {
526
+ const url = new URL(input);
527
+ if (url.protocol !== 'https:') throw new Error('HTTPS only');
528
+ if (['metadata.google.internal', '169.254.169.254'].includes(url.hostname)) {
529
+ throw new Error('Blocked host');
530
+ }
531
+ const addrs = await dns.resolve4(url.hostname);
532
+ for (const addr of addrs) {
533
+ const range = ipaddr.parse(addr).range();
534
+ if (['private', 'loopback', 'linkLocal'].includes(range)) {
535
+ throw new Error('Internal network blocked');
536
+ }
537
+ }
538
+ return url;
539
+ }
540
+
541
+ app.post('/api/preview', jwtAuthMiddleware, async (req, res) => {
542
+ const url = await validateExternalUrl(req.body.url);
543
+ const resp = await fetch(url.toString(), {
544
+ redirect: 'error', signal: AbortSignal.timeout(5000),
545
+ });
546
+ res.json(await resp.json());
547
+ });
548
+ ```
549
+
550
+ ### 10.2 Response Filtering
551
+
552
+ ```typescript
553
+ // VULNERABLE: Returns entire DB object
554
+ app.get('/api/users/:id', async (req, res) => {
555
+ res.json(await db.users.findById(req.params.id));
556
+ // Leaks: passwordHash, resetToken, internalNotes
557
+ });
558
+ ```
559
+
560
+ ```typescript
561
+ // SECURE: Explicit allowlist
562
+ function toPublicUser(u: DbUser) {
563
+ return { id: u.id, name: u.name, email: u.email, avatarUrl: u.avatarUrl };
564
+ }
565
+ app.get('/api/users/:id', jwtAuthMiddleware, async (req, res) => {
566
+ const user = await db.users.findOne({
567
+ _id: req.params.id, orgId: req.user.tenantId,
568
+ });
569
+ if (!user) return res.status(404).json({ error: 'Not found' });
570
+ res.json(toPublicUser(user));
571
+ });
572
+ ```
573
+
574
+ ---
575
+
576
+ ## References
577
+
578
+ - OWASP API Security Top 10 2023: https://owasp.org/API-Security/editions/2023/en/0x11-t10/
579
+ - PCI DSS 4.0: https://www.pcisecuritystandards.org/
580
+ - RFC 8725 — JWT Best Current Practices: https://datatracker.ietf.org/doc/html/rfc8725
581
+ - GraphQL Security — OWASP Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/GraphQL_Cheat_Sheet.html
582
+ - OWASP Credential Stuffing Prevention: https://cheatsheetseries.owasp.org/cheatsheets/Credential_Stuffing_Prevention_Cheat_Sheet.html
583
+ - NIST SP 800-204: https://csrc.nist.gov/pubs/sp/800/204/final
584
+ - gRPC Auth Guide: https://grpc.io/docs/guides/auth/
585
+ - Salt Security Breach Reviews: https://salt.security/blog
586
+ - 42Crunch API Security: https://42crunch.com/