@cubis/foundry 0.3.33 → 0.3.35

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 (591) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +56 -11
  3. package/bin/cubis.js +2809 -965
  4. package/mcp/.dockerignore +5 -0
  5. package/mcp/Dockerfile +19 -0
  6. package/mcp/README.md +550 -11
  7. package/mcp/config.json +18 -0
  8. package/mcp/dist/index.d.ts +1 -0
  9. package/mcp/dist/index.js +1488 -0
  10. package/mcp/package.json +36 -0
  11. package/mcp/src/cbxConfig/index.ts +23 -0
  12. package/mcp/src/cbxConfig/paths.ts +45 -0
  13. package/mcp/src/cbxConfig/reader.ts +149 -0
  14. package/mcp/src/cbxConfig/readerWriter.test.ts +147 -0
  15. package/mcp/src/cbxConfig/serviceConfig.test.ts +42 -0
  16. package/mcp/src/cbxConfig/serviceConfig.ts +157 -0
  17. package/mcp/src/cbxConfig/types.ts +44 -0
  18. package/mcp/src/cbxConfig/writer.ts +90 -0
  19. package/mcp/src/config/index.test.ts +81 -0
  20. package/mcp/src/config/index.ts +45 -0
  21. package/mcp/src/config/schema.ts +55 -0
  22. package/mcp/src/gateway/catalog.ts +37 -0
  23. package/mcp/src/gateway/config.ts +247 -0
  24. package/mcp/src/gateway/manager.ts +255 -0
  25. package/mcp/src/gateway/types.ts +54 -0
  26. package/mcp/src/gateway/upstreamClient.ts +80 -0
  27. package/mcp/src/index.ts +211 -0
  28. package/mcp/src/server.ts +219 -0
  29. package/mcp/src/tools/configTools.test.ts +166 -0
  30. package/mcp/src/tools/future/README.md +21 -0
  31. package/mcp/src/tools/future/index.ts +8 -0
  32. package/mcp/src/tools/index.ts +76 -0
  33. package/mcp/src/tools/mcpGateway.ts +44 -0
  34. package/mcp/src/tools/postmanGetMode.ts +82 -0
  35. package/mcp/src/tools/postmanGetStatus.ts +65 -0
  36. package/mcp/src/tools/postmanModes.ts +28 -0
  37. package/mcp/src/tools/postmanSetMode.ts +71 -0
  38. package/mcp/src/tools/skillBrowseCategory.ts +54 -0
  39. package/mcp/src/tools/skillGet.ts +43 -0
  40. package/mcp/src/tools/skillListCategories.ts +40 -0
  41. package/mcp/src/tools/skillSearch.ts +72 -0
  42. package/mcp/src/tools/skillTools.test.ts +126 -0
  43. package/mcp/src/tools/stitchGetMode.ts +58 -0
  44. package/mcp/src/tools/stitchGetStatus.ts +70 -0
  45. package/mcp/src/tools/stitchSetProfile.ts +82 -0
  46. package/mcp/src/transports/stdio.ts +9 -0
  47. package/mcp/src/transports/streamableHttp.ts +43 -0
  48. package/mcp/src/upstream/passthrough.ts +273 -0
  49. package/mcp/src/utils/errors.ts +38 -0
  50. package/mcp/src/utils/logger.ts +63 -0
  51. package/mcp/src/vault/manifest.test.ts +126 -0
  52. package/mcp/src/vault/manifest.ts +99 -0
  53. package/mcp/src/vault/scanner.test.ts +70 -0
  54. package/mcp/src/vault/scanner.ts +145 -0
  55. package/mcp/src/vault/types.ts +21 -0
  56. package/package.json +9 -2
  57. package/workflows/scripts/generate-powers.mjs +27 -18
  58. package/workflows/skills/skills_index.json +0 -102
  59. package/workflows/workflows/agent-environment-setup/manifest.json +0 -24
  60. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/nextjs-react-expert/SKILL.md +1 -1
  61. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/skills_index.json +0 -102
  62. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/nextjs-react-expert/SKILL.md +1 -1
  63. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/skills_index.json +0 -102
  64. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/nextjs-react-expert/SKILL.md +1 -1
  65. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/skills_index.json +0 -102
  66. package/mcp/catalogs/default.json +0 -14
  67. package/mcp/powers/atlassian-mcp/POWER.md +0 -91
  68. package/mcp/powers/atlassian-mcp/SKILL.md +0 -88
  69. package/mcp/powers/atlassian-mcp/steering/authentication-patterns.md +0 -520
  70. package/mcp/powers/atlassian-mcp/steering/common-workflows.md +0 -660
  71. package/mcp/powers/atlassian-mcp/steering/confluence-operations.md +0 -528
  72. package/mcp/powers/atlassian-mcp/steering/jira-queries.md +0 -421
  73. package/mcp/powers/atlassian-mcp/steering/mcp-server-setup.md +0 -292
  74. package/mcp/powers/building-mcp-server-on-cloudflare/POWER.md +0 -261
  75. package/mcp/powers/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  76. package/mcp/powers/building-mcp-server-on-cloudflare/steering/examples.md +0 -115
  77. package/mcp/powers/building-mcp-server-on-cloudflare/steering/oauth-setup.md +0 -338
  78. package/mcp/powers/building-mcp-server-on-cloudflare/steering/troubleshooting.md +0 -317
  79. package/mcp/powers/datadog-automation/POWER.md +0 -238
  80. package/mcp/powers/datadog-automation/SKILL.md +0 -235
  81. package/mcp/powers/github-automation/POWER.md +0 -230
  82. package/mcp/powers/github-automation/SKILL.md +0 -227
  83. package/mcp/powers/mcp-builder/LICENSE.txt +0 -202
  84. package/mcp/powers/mcp-builder/POWER.md +0 -179
  85. package/mcp/powers/mcp-builder/SKILL.md +0 -176
  86. package/mcp/powers/mcp-builder/reference/evaluation.md +0 -602
  87. package/mcp/powers/mcp-builder/reference/mcp_best_practices.md +0 -915
  88. package/mcp/powers/mcp-builder/reference/node_mcp_server.md +0 -916
  89. package/mcp/powers/mcp-builder/reference/python_mcp_server.md +0 -752
  90. package/mcp/powers/mcp-builder/scripts/connections.py +0 -151
  91. package/mcp/powers/mcp-builder/scripts/evaluation.py +0 -373
  92. package/mcp/powers/mcp-builder/scripts/example_evaluation.xml +0 -22
  93. package/mcp/powers/mcp-builder/scripts/requirements.txt +0 -2
  94. package/mcp/powers/mcp-developer/POWER.md +0 -88
  95. package/mcp/powers/mcp-developer/SKILL.md +0 -85
  96. package/mcp/powers/mcp-developer/steering/protocol.md +0 -244
  97. package/mcp/powers/mcp-developer/steering/python-sdk.md +0 -367
  98. package/mcp/powers/mcp-developer/steering/resources.md +0 -554
  99. package/mcp/powers/mcp-developer/steering/tools.md +0 -480
  100. package/mcp/powers/mcp-developer/steering/typescript-sdk.md +0 -350
  101. package/mcp/powers/postman/POWER.md +0 -243
  102. package/mcp/powers/postman/SKILL.md +0 -240
  103. package/mcp/powers/postman/flutter-expert/POWER.md +0 -89
  104. package/mcp/powers/postman/flutter-expert/SKILL.md +0 -77
  105. package/mcp/powers/postman/flutter-expert/steering/bloc-state.md +0 -259
  106. package/mcp/powers/postman/flutter-expert/steering/engineering-principles.md +0 -82
  107. package/mcp/powers/postman/flutter-expert/steering/gorouter-navigation.md +0 -157
  108. package/mcp/powers/postman/flutter-expert/steering/performance.md +0 -99
  109. package/mcp/powers/postman/flutter-expert/steering/project-structure.md +0 -77
  110. package/mcp/powers/postman/flutter-expert/steering/riverpod-state.md +0 -404
  111. package/mcp/powers/postman/flutter-expert/steering/widget-patterns.md +0 -123
  112. package/mcp/powers/postman/flutter-security-reviewer/POWER.md +0 -204
  113. package/mcp/powers/postman/flutter-security-reviewer/SKILL.md +0 -180
  114. package/mcp/powers/postman/flutter-security-reviewer/steering/log_redaction.md +0 -17
  115. package/mcp/powers/postman/flutter-security-reviewer/steering/network_hardening.md +0 -13
  116. package/mcp/powers/postman/flutter-security-reviewer/steering/secret-scanning.md +0 -123
  117. package/mcp/powers/postman/flutter-security-reviewer/steering/secure_storage_policy.md +0 -16
  118. package/mcp/powers/postman/flutter-security-reviewer/steering/vulnerability-patterns.md +0 -189
  119. package/mcp/powers/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  120. package/mcp/powers/postman/flutter-test-master/POWER.md +0 -527
  121. package/mcp/powers/postman/flutter-test-master/SKILL.md +0 -513
  122. package/mcp/powers/postman/flutter-test-master/steering/golden-testing.md +0 -444
  123. package/mcp/powers/postman/flutter-test-master/steering/integration-testing.md +0 -688
  124. package/mcp/powers/postman/flutter-test-master/steering/property-testing.md +0 -408
  125. package/mcp/powers/postman/flutter-test-master/steering/riverpod-testing.md +0 -606
  126. package/mcp/powers/postman/flutter-test-master/steering/test-utilities.md +0 -566
  127. package/mcp/powers/postman/flutter-test-master/steering/unit-testing.md +0 -511
  128. package/mcp/powers/postman/flutter-test-master/steering/widget-testing.md +0 -601
  129. package/mcp/powers/postman/git-commit/POWER.md +0 -47
  130. package/mcp/powers/postman/git-commit/SKILL.md +0 -46
  131. package/mcp/powers/postman/gorouter-restoration/POWER.md +0 -227
  132. package/mcp/powers/postman/gorouter-restoration/SKILL.md +0 -217
  133. package/mcp/powers/postman/gorouter-restoration/steering/guard_patterns.md +0 -14
  134. package/mcp/powers/postman/gorouter-restoration/steering/tab_preservation.md +0 -12
  135. package/mcp/powers/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  136. package/mcp/powers/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  137. package/mcp/powers/postman/mcp.json +0 -11
  138. package/mcp/powers/postman/microservices-architect/POWER.md +0 -109
  139. package/mcp/powers/postman/microservices-architect/SKILL.md +0 -93
  140. package/mcp/powers/postman/microservices-architect/steering/communication.md +0 -499
  141. package/mcp/powers/postman/microservices-architect/steering/data.md +0 -721
  142. package/mcp/powers/postman/microservices-architect/steering/decomposition.md +0 -344
  143. package/mcp/powers/postman/microservices-architect/steering/observability.md +0 -805
  144. package/mcp/powers/postman/microservices-architect/steering/patterns.md +0 -603
  145. package/mcp/powers/postman/nestjs-expert/POWER.md +0 -130
  146. package/mcp/powers/postman/nestjs-expert/SKILL.md +0 -114
  147. package/mcp/powers/postman/nestjs-expert/steering/authentication.md +0 -461
  148. package/mcp/powers/postman/nestjs-expert/steering/controllers-routing.md +0 -114
  149. package/mcp/powers/postman/nestjs-expert/steering/dtos-validation.md +0 -156
  150. package/mcp/powers/postman/nestjs-expert/steering/migration-from-express.md +0 -1240
  151. package/mcp/powers/postman/nestjs-expert/steering/secure-sessions.md +0 -56
  152. package/mcp/powers/postman/nestjs-expert/steering/services-di.md +0 -143
  153. package/mcp/powers/postman/nestjs-expert/steering/strangler-fig-pattern.md +0 -47
  154. package/mcp/powers/postman/nestjs-expert/steering/testing-patterns.md +0 -189
  155. package/mcp/powers/postman/oneup-design/POWER.md +0 -72
  156. package/mcp/powers/postman/oneup-design/SKILL.md +0 -71
  157. package/mcp/powers/postman/oneup-design/steering/colors.md +0 -41
  158. package/mcp/powers/postman/oneup-design/steering/components.md +0 -53
  159. package/mcp/powers/postman/oneup-design/steering/spacing.md +0 -84
  160. package/mcp/powers/postman/openapi-docs/POWER.md +0 -78
  161. package/mcp/powers/postman/openapi-docs/SKILL.md +0 -68
  162. package/mcp/powers/postman/openapi-docs/steering/crud-templates.md +0 -43
  163. package/mcp/powers/postman/openapi-docs/steering/framework-express.md +0 -19
  164. package/mcp/powers/postman/openapi-docs/steering/framework-fastapi.md +0 -20
  165. package/mcp/powers/postman/openapi-docs/steering/framework-nestjs.md +0 -20
  166. package/mcp/powers/postman/openapi-docs/steering/framework-raw-openapi.md +0 -14
  167. package/mcp/powers/postman/openapi-docs/steering/openapi-checklist.md +0 -33
  168. package/mcp/powers/postman/openapi-docs/steering/stoplight-ui.md +0 -21
  169. package/mcp/powers/postman/steering/steering.md +0 -26
  170. package/mcp/powers/sentry-automation/POWER.md +0 -235
  171. package/mcp/powers/sentry-automation/SKILL.md +0 -232
  172. package/mcp/skills/atlassian-mcp/SKILL.md +0 -88
  173. package/mcp/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  174. package/mcp/skills/atlassian-mcp/references/common-workflows.md +0 -660
  175. package/mcp/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  176. package/mcp/skills/atlassian-mcp/references/jira-queries.md +0 -421
  177. package/mcp/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  178. package/mcp/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  179. package/mcp/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  180. package/mcp/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  181. package/mcp/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  182. package/mcp/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  183. package/mcp/skills/datadog-automation/SKILL.md +0 -235
  184. package/mcp/skills/github-automation/SKILL.md +0 -227
  185. package/mcp/skills/mcp-builder/LICENSE.txt +0 -202
  186. package/mcp/skills/mcp-builder/SKILL.md +0 -176
  187. package/mcp/skills/mcp-builder/reference/evaluation.md +0 -602
  188. package/mcp/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  189. package/mcp/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  190. package/mcp/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  191. package/mcp/skills/mcp-builder/scripts/connections.py +0 -151
  192. package/mcp/skills/mcp-builder/scripts/evaluation.py +0 -373
  193. package/mcp/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  194. package/mcp/skills/mcp-builder/scripts/requirements.txt +0 -2
  195. package/mcp/skills/mcp-developer/SKILL.md +0 -85
  196. package/mcp/skills/mcp-developer/references/protocol.md +0 -244
  197. package/mcp/skills/mcp-developer/references/python-sdk.md +0 -367
  198. package/mcp/skills/mcp-developer/references/resources.md +0 -554
  199. package/mcp/skills/mcp-developer/references/tools.md +0 -480
  200. package/mcp/skills/mcp-developer/references/typescript-sdk.md +0 -350
  201. package/mcp/skills/postman/POWER.md +0 -242
  202. package/mcp/skills/postman/SKILL.md +0 -240
  203. package/mcp/skills/postman/flutter-expert/POWER.md +0 -89
  204. package/mcp/skills/postman/flutter-expert/SKILL.md +0 -77
  205. package/mcp/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  206. package/mcp/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  207. package/mcp/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  208. package/mcp/skills/postman/flutter-expert/references/performance.md +0 -99
  209. package/mcp/skills/postman/flutter-expert/references/project-structure.md +0 -77
  210. package/mcp/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  211. package/mcp/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  212. package/mcp/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  213. package/mcp/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  214. package/mcp/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  215. package/mcp/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  216. package/mcp/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  217. package/mcp/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  218. package/mcp/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  219. package/mcp/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  220. package/mcp/skills/postman/flutter-test-master/POWER.md +0 -527
  221. package/mcp/skills/postman/flutter-test-master/SKILL.md +0 -513
  222. package/mcp/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  223. package/mcp/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  224. package/mcp/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  225. package/mcp/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  226. package/mcp/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  227. package/mcp/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  228. package/mcp/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  229. package/mcp/skills/postman/git-commit/POWER.md +0 -47
  230. package/mcp/skills/postman/git-commit/SKILL.md +0 -46
  231. package/mcp/skills/postman/gorouter-restoration/POWER.md +0 -227
  232. package/mcp/skills/postman/gorouter-restoration/SKILL.md +0 -217
  233. package/mcp/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  234. package/mcp/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  235. package/mcp/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  236. package/mcp/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  237. package/mcp/skills/postman/mcp.json +0 -11
  238. package/mcp/skills/postman/microservices-architect/POWER.md +0 -109
  239. package/mcp/skills/postman/microservices-architect/SKILL.md +0 -93
  240. package/mcp/skills/postman/microservices-architect/references/communication.md +0 -499
  241. package/mcp/skills/postman/microservices-architect/references/data.md +0 -721
  242. package/mcp/skills/postman/microservices-architect/references/decomposition.md +0 -344
  243. package/mcp/skills/postman/microservices-architect/references/observability.md +0 -805
  244. package/mcp/skills/postman/microservices-architect/references/patterns.md +0 -603
  245. package/mcp/skills/postman/nestjs-expert/POWER.md +0 -130
  246. package/mcp/skills/postman/nestjs-expert/SKILL.md +0 -114
  247. package/mcp/skills/postman/nestjs-expert/references/authentication.md +0 -461
  248. package/mcp/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  249. package/mcp/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  250. package/mcp/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  251. package/mcp/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  252. package/mcp/skills/postman/nestjs-expert/references/services-di.md +0 -143
  253. package/mcp/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  254. package/mcp/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  255. package/mcp/skills/postman/oneup-design/POWER.md +0 -72
  256. package/mcp/skills/postman/oneup-design/SKILL.md +0 -71
  257. package/mcp/skills/postman/oneup-design/references/colors.md +0 -41
  258. package/mcp/skills/postman/oneup-design/references/components.md +0 -53
  259. package/mcp/skills/postman/oneup-design/references/spacing.md +0 -84
  260. package/mcp/skills/postman/openapi-docs/POWER.md +0 -78
  261. package/mcp/skills/postman/openapi-docs/SKILL.md +0 -68
  262. package/mcp/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  263. package/mcp/skills/postman/openapi-docs/references/framework-express.md +0 -19
  264. package/mcp/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  265. package/mcp/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  266. package/mcp/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  267. package/mcp/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  268. package/mcp/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  269. package/mcp/skills/postman/references/steering.md +0 -26
  270. package/mcp/skills/sentry-automation/SKILL.md +0 -232
  271. package/workflows/powers/atlassian-mcp/POWER.md +0 -21
  272. package/workflows/powers/atlassian-mcp/SKILL.md +0 -18
  273. package/workflows/powers/building-mcp-server-on-cloudflare/POWER.md +0 -21
  274. package/workflows/powers/building-mcp-server-on-cloudflare/SKILL.md +0 -18
  275. package/workflows/powers/datadog-automation/POWER.md +0 -21
  276. package/workflows/powers/datadog-automation/SKILL.md +0 -18
  277. package/workflows/powers/github-automation/POWER.md +0 -21
  278. package/workflows/powers/github-automation/SKILL.md +0 -18
  279. package/workflows/powers/mcp-builder/POWER.md +0 -21
  280. package/workflows/powers/mcp-builder/SKILL.md +0 -18
  281. package/workflows/powers/mcp-developer/POWER.md +0 -21
  282. package/workflows/powers/mcp-developer/SKILL.md +0 -18
  283. package/workflows/powers/postman/POWER.md +0 -21
  284. package/workflows/powers/postman/SKILL.md +0 -18
  285. package/workflows/powers/sentry-automation/POWER.md +0 -21
  286. package/workflows/powers/sentry-automation/SKILL.md +0 -18
  287. package/workflows/skills/atlassian-mcp/SKILL.md +0 -18
  288. package/workflows/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -18
  289. package/workflows/skills/datadog-automation/SKILL.md +0 -18
  290. package/workflows/skills/github-automation/SKILL.md +0 -18
  291. package/workflows/skills/mcp-builder/SKILL.md +0 -18
  292. package/workflows/skills/mcp-developer/SKILL.md +0 -18
  293. package/workflows/skills/postman/SKILL.md +0 -18
  294. package/workflows/skills/sentry-automation/SKILL.md +0 -18
  295. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/SKILL.md +0 -88
  296. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  297. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/common-workflows.md +0 -660
  298. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  299. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/jira-queries.md +0 -421
  300. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  301. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  302. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  303. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  304. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  305. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  306. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/datadog-automation/SKILL.md +0 -235
  307. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/github-automation/SKILL.md +0 -227
  308. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/LICENSE.txt +0 -202
  309. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/SKILL.md +0 -176
  310. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/evaluation.md +0 -602
  311. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  312. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  313. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  314. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/connections.py +0 -151
  315. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/evaluation.py +0 -373
  316. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  317. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/requirements.txt +0 -2
  318. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/SKILL.md +0 -85
  319. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/protocol.md +0 -244
  320. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/python-sdk.md +0 -367
  321. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/resources.md +0 -554
  322. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/tools.md +0 -480
  323. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/typescript-sdk.md +0 -350
  324. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/POWER.md +0 -242
  325. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/SKILL.md +0 -240
  326. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/POWER.md +0 -89
  327. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/SKILL.md +0 -77
  328. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  329. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  330. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  331. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/performance.md +0 -99
  332. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/project-structure.md +0 -77
  333. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  334. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  335. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  336. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  337. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  338. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  339. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  340. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  341. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  342. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  343. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/POWER.md +0 -527
  344. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/SKILL.md +0 -513
  345. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  346. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  347. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  348. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  349. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  350. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  351. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  352. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/git-commit/POWER.md +0 -47
  353. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/git-commit/SKILL.md +0 -46
  354. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/POWER.md +0 -227
  355. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/SKILL.md +0 -217
  356. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  357. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  358. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  359. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  360. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/mcp.json +0 -11
  361. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/POWER.md +0 -109
  362. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/SKILL.md +0 -93
  363. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/communication.md +0 -499
  364. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/data.md +0 -721
  365. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/decomposition.md +0 -344
  366. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/observability.md +0 -805
  367. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/patterns.md +0 -603
  368. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/POWER.md +0 -130
  369. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/SKILL.md +0 -114
  370. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/authentication.md +0 -461
  371. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  372. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  373. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  374. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  375. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/services-di.md +0 -143
  376. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  377. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  378. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/POWER.md +0 -72
  379. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/SKILL.md +0 -71
  380. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/colors.md +0 -41
  381. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/components.md +0 -53
  382. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/spacing.md +0 -84
  383. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/POWER.md +0 -78
  384. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/SKILL.md +0 -68
  385. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  386. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-express.md +0 -19
  387. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  388. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  389. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  390. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  391. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  392. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/references/steering.md +0 -26
  393. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/sentry-automation/SKILL.md +0 -232
  394. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/SKILL.md +0 -88
  395. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  396. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/common-workflows.md +0 -660
  397. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  398. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/jira-queries.md +0 -421
  399. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  400. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  401. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  402. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  403. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  404. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  405. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/datadog-automation/SKILL.md +0 -235
  406. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/github-automation/SKILL.md +0 -227
  407. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/LICENSE.txt +0 -202
  408. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/SKILL.md +0 -176
  409. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/evaluation.md +0 -602
  410. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  411. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  412. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  413. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/connections.py +0 -151
  414. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/evaluation.py +0 -373
  415. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  416. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/requirements.txt +0 -2
  417. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/SKILL.md +0 -85
  418. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/protocol.md +0 -244
  419. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/python-sdk.md +0 -367
  420. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/resources.md +0 -554
  421. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/tools.md +0 -480
  422. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/typescript-sdk.md +0 -350
  423. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/POWER.md +0 -242
  424. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/SKILL.md +0 -240
  425. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/POWER.md +0 -89
  426. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/SKILL.md +0 -77
  427. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  428. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  429. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  430. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/performance.md +0 -99
  431. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/project-structure.md +0 -77
  432. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  433. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  434. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  435. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  436. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  437. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  438. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  439. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  440. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  441. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  442. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/POWER.md +0 -527
  443. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/SKILL.md +0 -513
  444. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  445. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  446. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  447. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  448. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  449. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  450. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  451. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/git-commit/POWER.md +0 -47
  452. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/git-commit/SKILL.md +0 -46
  453. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/POWER.md +0 -227
  454. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/SKILL.md +0 -217
  455. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  456. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  457. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  458. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  459. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/mcp.json +0 -11
  460. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/POWER.md +0 -109
  461. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/SKILL.md +0 -93
  462. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/communication.md +0 -499
  463. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/data.md +0 -721
  464. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/decomposition.md +0 -344
  465. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/observability.md +0 -805
  466. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/patterns.md +0 -603
  467. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/POWER.md +0 -130
  468. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/SKILL.md +0 -114
  469. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/authentication.md +0 -461
  470. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  471. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  472. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  473. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  474. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/services-di.md +0 -143
  475. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  476. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  477. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/POWER.md +0 -72
  478. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/SKILL.md +0 -71
  479. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/colors.md +0 -41
  480. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/components.md +0 -53
  481. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/spacing.md +0 -84
  482. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/POWER.md +0 -78
  483. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/SKILL.md +0 -68
  484. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  485. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-express.md +0 -19
  486. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  487. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  488. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  489. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  490. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  491. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/references/steering.md +0 -26
  492. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/sentry-automation/SKILL.md +0 -232
  493. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/SKILL.md +0 -88
  494. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  495. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/common-workflows.md +0 -660
  496. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  497. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/jira-queries.md +0 -421
  498. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  499. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  500. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  501. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  502. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  503. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  504. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/datadog-automation/SKILL.md +0 -235
  505. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/github-automation/SKILL.md +0 -227
  506. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/LICENSE.txt +0 -202
  507. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/SKILL.md +0 -176
  508. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/evaluation.md +0 -602
  509. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  510. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  511. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  512. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/connections.py +0 -151
  513. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/evaluation.py +0 -373
  514. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  515. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/requirements.txt +0 -2
  516. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/SKILL.md +0 -85
  517. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/protocol.md +0 -244
  518. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/python-sdk.md +0 -367
  519. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/resources.md +0 -554
  520. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/tools.md +0 -480
  521. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/typescript-sdk.md +0 -350
  522. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/POWER.md +0 -242
  523. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/SKILL.md +0 -240
  524. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/POWER.md +0 -89
  525. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/SKILL.md +0 -77
  526. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  527. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  528. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  529. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/performance.md +0 -99
  530. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/project-structure.md +0 -77
  531. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  532. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  533. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  534. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  535. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  536. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  537. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  538. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  539. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  540. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  541. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/POWER.md +0 -527
  542. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/SKILL.md +0 -513
  543. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  544. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  545. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  546. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  547. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  548. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  549. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  550. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/git-commit/POWER.md +0 -47
  551. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/git-commit/SKILL.md +0 -46
  552. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/POWER.md +0 -227
  553. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/SKILL.md +0 -217
  554. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  555. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  556. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  557. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  558. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/mcp.json +0 -11
  559. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/POWER.md +0 -109
  560. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/SKILL.md +0 -93
  561. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/communication.md +0 -499
  562. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/data.md +0 -721
  563. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/decomposition.md +0 -344
  564. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/observability.md +0 -805
  565. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/patterns.md +0 -603
  566. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/POWER.md +0 -130
  567. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/SKILL.md +0 -114
  568. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/authentication.md +0 -461
  569. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  570. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  571. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  572. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  573. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/services-di.md +0 -143
  574. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  575. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  576. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/POWER.md +0 -72
  577. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/SKILL.md +0 -71
  578. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/colors.md +0 -41
  579. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/components.md +0 -53
  580. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/spacing.md +0 -84
  581. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/POWER.md +0 -78
  582. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/SKILL.md +0 -68
  583. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  584. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-express.md +0 -19
  585. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  586. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  587. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  588. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  589. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  590. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/references/steering.md +0 -26
  591. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/sentry-automation/SKILL.md +0 -232
@@ -1,1240 +0,0 @@
1
- # Express to NestJS Migration Guide
2
-
3
- > Reference for: NestJS Expert
4
- > Load when: Express migration, Express to NestJS, converting Express app, porting Node.js API, migrating from Express, rewriting Express application
5
-
6
- ---
7
-
8
- ## When to Use This Guide
9
-
10
- **Use when:**
11
- - Migrating existing Express.js applications to NestJS
12
- - Modernizing legacy Node.js APIs with structured architecture
13
- - Adding TypeScript and dependency injection to Express codebases
14
- - Scaling Express applications requiring better organization
15
- - Team needs enforced architectural patterns and conventions
16
- - Application complexity justifies framework overhead
17
-
18
- **When NOT to Use:**
19
-
20
- - Simple CRUD APIs with < 10 endpoints (Express may be sufficient)
21
- - Serverless functions requiring minimal cold start time
22
- - Prototypes or MVPs where speed > structure
23
- - Team lacks TypeScript experience and timeline is tight
24
- - Performance-critical microservices where framework overhead matters
25
- - Projects with unique architectural requirements conflicting with NestJS patterns
26
-
27
- ---
28
-
29
- ## Concept Mapping: Express → NestJS
30
-
31
- | Express Concept | NestJS Equivalent | Key Difference |
32
- |----------------|-------------------|----------------|
33
- | `app.get('/path', handler)` | `@Get('/path')` decorator | Declarative vs imperative |
34
- | Middleware functions | Guards, Interceptors, Pipes | Specialized by purpose |
35
- | `req.params`, `req.body` | `@Param()`, `@Body()` decorators | Automatic injection |
36
- | Manual `require()` | Dependency Injection | IoC container managed |
37
- | `express.Router()` | Controller classes | Object-oriented grouping |
38
- | `app.use(express.json())` | Built-in body parsing | Automatic configuration |
39
- | Error handling middleware | Exception Filters | Class-based with inheritance |
40
- | `app.listen(3000)` | `NestFactory.create()` | Bootstrap pattern |
41
- | Custom validation | `class-validator` pipes | Decorator-based validation |
42
- | Manual service instances | Provider registration | Singleton by default |
43
-
44
- ---
45
-
46
- ## Architecture Comparison
47
-
48
- ### Express Application Structure
49
-
50
- ```
51
- src/
52
- ├── routes/
53
- │ ├── users.js
54
- │ └── posts.js
55
- ├── controllers/
56
- │ ├── userController.js
57
- │ └── postController.js
58
- ├── services/
59
- │ ├── userService.js
60
- │ └── postService.js
61
- ├── middleware/
62
- │ ├── auth.js
63
- │ └── errorHandler.js
64
- └── app.js
65
- ```
66
-
67
- ### NestJS Application Structure
68
-
69
- ```
70
- src/
71
- ├── users/
72
- │ ├── users.controller.ts
73
- │ ├── users.service.ts
74
- │ ├── users.module.ts
75
- │ ├── dto/
76
- │ │ ├── create-user.dto.ts
77
- │ │ └── update-user.dto.ts
78
- │ └── entities/
79
- │ └── user.entity.ts
80
- ├── posts/
81
- │ ├── posts.controller.ts
82
- │ ├── posts.service.ts
83
- │ └── posts.module.ts
84
- ├── common/
85
- │ ├── guards/
86
- │ ├── interceptors/
87
- │ └── filters/
88
- ├── app.module.ts
89
- └── main.ts
90
- ```
91
-
92
- ---
93
-
94
- ## Migration Pattern: Route Handler → Controller
95
-
96
- ### Before: Express Route Handler
97
-
98
- ```typescript
99
- // routes/users.js
100
- const express = require('express');
101
- const router = express.Router();
102
- const UserService = require('../services/userService');
103
-
104
- const userService = new UserService();
105
-
106
- router.get('/', async (req, res, next) => {
107
- try {
108
- const page = parseInt(req.query.page) || 1;
109
- const limit = parseInt(req.query.limit) || 10;
110
-
111
- const users = await userService.findAll(page, limit);
112
- res.json({
113
- success: true,
114
- data: users,
115
- page,
116
- limit
117
- });
118
- } catch (error) {
119
- next(error);
120
- }
121
- });
122
-
123
- router.get('/:id', async (req, res, next) => {
124
- try {
125
- const user = await userService.findById(req.params.id);
126
- if (!user) {
127
- return res.status(404).json({
128
- success: false,
129
- message: 'User not found'
130
- });
131
- }
132
- res.json({ success: true, data: user });
133
- } catch (error) {
134
- next(error);
135
- }
136
- });
137
-
138
- router.post('/', async (req, res, next) => {
139
- try {
140
- const { email, name } = req.body;
141
-
142
- // Manual validation
143
- if (!email || !name) {
144
- return res.status(400).json({
145
- success: false,
146
- message: 'Email and name are required'
147
- });
148
- }
149
-
150
- const user = await userService.create({ email, name });
151
- res.status(201).json({ success: true, data: user });
152
- } catch (error) {
153
- next(error);
154
- }
155
- });
156
-
157
- module.exports = router;
158
- ```
159
-
160
- ### After: NestJS Controller
161
-
162
- ```typescript
163
- // users/dto/create-user.dto.ts
164
- import { IsEmail, IsNotEmpty, IsString, MinLength } from 'class-validator';
165
-
166
- export class CreateUserDto {
167
- @IsEmail()
168
- @IsNotEmpty()
169
- email: string;
170
-
171
- @IsString()
172
- @MinLength(2)
173
- name: string;
174
- }
175
-
176
- // users/dto/pagination-query.dto.ts
177
- import { IsOptional, IsInt, Min, Max } from 'class-validator';
178
- import { Type } from 'class-transformer';
179
-
180
- export class PaginationQueryDto {
181
- @IsOptional()
182
- @Type(() => Number)
183
- @IsInt()
184
- @Min(1)
185
- page?: number = 1;
186
-
187
- @IsOptional()
188
- @Type(() => Number)
189
- @IsInt()
190
- @Min(1)
191
- @Max(100)
192
- limit?: number = 10;
193
- }
194
-
195
- // users/users.controller.ts
196
- import {
197
- Controller,
198
- Get,
199
- Post,
200
- Body,
201
- Param,
202
- Query,
203
- HttpCode,
204
- HttpStatus,
205
- ParseIntPipe,
206
- } from '@nestjs/common';
207
- import { UsersService } from './users.service';
208
- import { CreateUserDto } from './dto/create-user.dto';
209
- import { PaginationQueryDto } from './dto/pagination-query.dto';
210
-
211
- @Controller('users')
212
- export class UsersController {
213
- constructor(private readonly usersService: UsersService) {}
214
-
215
- @Get()
216
- async findAll(@Query() query: PaginationQueryDto) {
217
- const users = await this.usersService.findAll(query.page, query.limit);
218
- return {
219
- success: true,
220
- data: users,
221
- page: query.page,
222
- limit: query.limit,
223
- };
224
- }
225
-
226
- @Get(':id')
227
- async findOne(@Param('id', ParseIntPipe) id: number) {
228
- const user = await this.usersService.findById(id);
229
- return { success: true, data: user };
230
- }
231
-
232
- @Post()
233
- @HttpCode(HttpStatus.CREATED)
234
- async create(@Body() createUserDto: CreateUserDto) {
235
- const user = await this.usersService.create(createUserDto);
236
- return { success: true, data: user };
237
- }
238
- }
239
- ```
240
-
241
- ---
242
-
243
- ## Migration Pattern: Middleware → Guards/Interceptors
244
-
245
- ### Before: Express Authentication Middleware
246
-
247
- ```typescript
248
- // middleware/auth.js
249
- const jwt = require('jsonwebtoken');
250
-
251
- function authMiddleware(req, res, next) {
252
- const token = req.headers.authorization?.split(' ')[1];
253
-
254
- if (!token) {
255
- return res.status(401).json({
256
- success: false,
257
- message: 'No token provided'
258
- });
259
- }
260
-
261
- try {
262
- const decoded = jwt.verify(token, process.env.JWT_SECRET);
263
- req.user = decoded;
264
- next();
265
- } catch (error) {
266
- return res.status(401).json({
267
- success: false,
268
- message: 'Invalid token'
269
- });
270
- }
271
- }
272
-
273
- // Usage in routes
274
- router.get('/profile', authMiddleware, async (req, res) => {
275
- const user = await userService.findById(req.user.id);
276
- res.json({ success: true, data: user });
277
- });
278
- ```
279
-
280
- ### After: NestJS Guard
281
-
282
- ```typescript
283
- // common/guards/jwt-auth.guard.ts
284
- import {
285
- Injectable,
286
- CanActivate,
287
- ExecutionContext,
288
- UnauthorizedException,
289
- } from '@nestjs/common';
290
- import { JwtService } from '@nestjs/jwt';
291
- import { Request } from 'express';
292
-
293
- @Injectable()
294
- export class JwtAuthGuard implements CanActivate {
295
- constructor(private jwtService: JwtService) {}
296
-
297
- async canActivate(context: ExecutionContext): Promise<boolean> {
298
- const request = context.switchToHttp().getRequest<Request>();
299
- const token = this.extractTokenFromHeader(request);
300
-
301
- if (!token) {
302
- throw new UnauthorizedException('No token provided');
303
- }
304
-
305
- try {
306
- const payload = await this.jwtService.verifyAsync(token);
307
- request['user'] = payload;
308
- } catch {
309
- throw new UnauthorizedException('Invalid token');
310
- }
311
-
312
- return true;
313
- }
314
-
315
- private extractTokenFromHeader(request: Request): string | undefined {
316
- const [type, token] = request.headers.authorization?.split(' ') ?? [];
317
- return type === 'Bearer' ? token : undefined;
318
- }
319
- }
320
-
321
- // Usage in controller
322
- import { UseGuards } from '@nestjs/common';
323
- import { JwtAuthGuard } from '../common/guards/jwt-auth.guard';
324
-
325
- @Controller('users')
326
- export class UsersController {
327
- @Get('profile')
328
- @UseGuards(JwtAuthGuard)
329
- async getProfile(@Request() req) {
330
- return this.usersService.findById(req.user.id);
331
- }
332
- }
333
- ```
334
-
335
- ### Before: Express Logging Middleware
336
-
337
- ```typescript
338
- // middleware/logger.js
339
- function loggerMiddleware(req, res, next) {
340
- const start = Date.now();
341
-
342
- res.on('finish', () => {
343
- const duration = Date.now() - start;
344
- console.log(`${req.method} ${req.path} - ${res.statusCode} - ${duration}ms`);
345
- });
346
-
347
- next();
348
- }
349
-
350
- // app.js
351
- app.use(loggerMiddleware);
352
- ```
353
-
354
- ### After: NestJS Interceptor
355
-
356
- ```typescript
357
- // common/interceptors/logging.interceptor.ts
358
- import {
359
- Injectable,
360
- NestInterceptor,
361
- ExecutionContext,
362
- CallHandler,
363
- Logger,
364
- } from '@nestjs/common';
365
- import { Observable } from 'rxjs';
366
- import { tap } from 'rxjs/operators';
367
-
368
- @Injectable()
369
- export class LoggingInterceptor implements NestInterceptor {
370
- private readonly logger = new Logger(LoggingInterceptor.name);
371
-
372
- intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
373
- const request = context.switchToHttp().getRequest();
374
- const { method, url } = request;
375
- const start = Date.now();
376
-
377
- return next.handle().pipe(
378
- tap(() => {
379
- const response = context.switchToHttp().getResponse();
380
- const duration = Date.now() - start;
381
- this.logger.log(
382
- `${method} ${url} - ${response.statusCode} - ${duration}ms`,
383
- );
384
- }),
385
- );
386
- }
387
- }
388
-
389
- // main.ts - Apply globally
390
- import { NestFactory } from '@nestjs/core';
391
- import { AppModule } from './app.module';
392
- import { LoggingInterceptor } from './common/interceptors/logging.interceptor';
393
-
394
- async function bootstrap() {
395
- const app = await NestFactory.create(AppModule);
396
- app.useGlobalInterceptors(new LoggingInterceptor());
397
- await app.listen(3000);
398
- }
399
- bootstrap();
400
- ```
401
-
402
- ---
403
-
404
- ## Migration Pattern: Dependency Injection
405
-
406
- ### Before: Express Manual Instantiation
407
-
408
- ```typescript
409
- // services/userService.js
410
- const UserRepository = require('../repositories/userRepository');
411
- const EmailService = require('./emailService');
412
-
413
- class UserService {
414
- constructor() {
415
- this.userRepository = new UserRepository();
416
- this.emailService = new EmailService();
417
- }
418
-
419
- async create(userData) {
420
- const user = await this.userRepository.create(userData);
421
- await this.emailService.sendWelcomeEmail(user.email);
422
- return user;
423
- }
424
- }
425
-
426
- module.exports = UserService;
427
-
428
- // controllers/userController.js
429
- const UserService = require('../services/userService');
430
- const userService = new UserService();
431
-
432
- async function createUser(req, res) {
433
- const user = await userService.create(req.body);
434
- res.json({ success: true, data: user });
435
- }
436
- ```
437
-
438
- ### After: NestJS Dependency Injection
439
-
440
- ```typescript
441
- // users/users.repository.ts
442
- import { Injectable } from '@nestjs/common';
443
- import { InjectRepository } from '@nestjs/typeorm';
444
- import { Repository } from 'typeorm';
445
- import { User } from './entities/user.entity';
446
-
447
- @Injectable()
448
- export class UsersRepository {
449
- constructor(
450
- @InjectRepository(User)
451
- private readonly repository: Repository<User>,
452
- ) {}
453
-
454
- async create(userData: Partial<User>): Promise<User> {
455
- const user = this.repository.create(userData);
456
- return this.repository.save(user);
457
- }
458
-
459
- async findById(id: number): Promise<User | null> {
460
- return this.repository.findOne({ where: { id } });
461
- }
462
- }
463
-
464
- // email/email.service.ts
465
- import { Injectable, Logger } from '@nestjs/common';
466
-
467
- @Injectable()
468
- export class EmailService {
469
- private readonly logger = new Logger(EmailService.name);
470
-
471
- async sendWelcomeEmail(email: string): Promise<void> {
472
- this.logger.log(`Sending welcome email to ${email}`);
473
- // Email sending logic
474
- }
475
- }
476
-
477
- // users/users.service.ts
478
- import { Injectable, NotFoundException } from '@nestjs/common';
479
- import { UsersRepository } from './users.repository';
480
- import { EmailService } from '../email/email.service';
481
- import { CreateUserDto } from './dto/create-user.dto';
482
- import { User } from './entities/user.entity';
483
-
484
- @Injectable()
485
- export class UsersService {
486
- constructor(
487
- private readonly usersRepository: UsersRepository,
488
- private readonly emailService: EmailService,
489
- ) {}
490
-
491
- async create(createUserDto: CreateUserDto): Promise<User> {
492
- const user = await this.usersRepository.create(createUserDto);
493
- await this.emailService.sendWelcomeEmail(user.email);
494
- return user;
495
- }
496
-
497
- async findById(id: number): Promise<User> {
498
- const user = await this.usersRepository.findById(id);
499
- if (!user) {
500
- throw new NotFoundException(`User with ID ${id} not found`);
501
- }
502
- return user;
503
- }
504
- }
505
-
506
- // users/users.module.ts
507
- import { Module } from '@nestjs/common';
508
- import { TypeOrmModule } from '@nestjs/typeorm';
509
- import { UsersController } from './users.controller';
510
- import { UsersService } from './users.service';
511
- import { UsersRepository } from './users.repository';
512
- import { User } from './entities/user.entity';
513
- import { EmailModule } from '../email/email.module';
514
-
515
- @Module({
516
- imports: [TypeOrmModule.forFeature([User]), EmailModule],
517
- controllers: [UsersController],
518
- providers: [UsersService, UsersRepository],
519
- exports: [UsersService],
520
- })
521
- export class UsersModule {}
522
- ```
523
-
524
- ---
525
-
526
- ## Migration Pattern: Error Handling
527
-
528
- ### Before: Express Error Middleware
529
-
530
- ```typescript
531
- // middleware/errorHandler.js
532
- function errorHandler(err, req, res, next) {
533
- console.error(err.stack);
534
-
535
- if (err.name === 'ValidationError') {
536
- return res.status(400).json({
537
- success: false,
538
- message: 'Validation failed',
539
- errors: err.errors
540
- });
541
- }
542
-
543
- if (err.name === 'UnauthorizedError') {
544
- return res.status(401).json({
545
- success: false,
546
- message: 'Unauthorized'
547
- });
548
- }
549
-
550
- res.status(500).json({
551
- success: false,
552
- message: 'Internal server error'
553
- });
554
- }
555
-
556
- // app.js
557
- app.use(errorHandler);
558
- ```
559
-
560
- ### After: NestJS Exception Filter
561
-
562
- ```typescript
563
- // common/filters/http-exception.filter.ts
564
- import {
565
- ExceptionFilter,
566
- Catch,
567
- ArgumentsHost,
568
- HttpException,
569
- HttpStatus,
570
- Logger,
571
- } from '@nestjs/common';
572
- import { Request, Response } from 'express';
573
-
574
- @Catch()
575
- export class HttpExceptionFilter implements ExceptionFilter {
576
- private readonly logger = new Logger(HttpExceptionFilter.name);
577
-
578
- catch(exception: unknown, host: ArgumentsHost) {
579
- const ctx = host.switchToHttp();
580
- const response = ctx.getResponse<Response>();
581
- const request = ctx.getRequest<Request>();
582
-
583
- let status = HttpStatus.INTERNAL_SERVER_ERROR;
584
- let message = 'Internal server error';
585
- let errors: any = undefined;
586
-
587
- if (exception instanceof HttpException) {
588
- status = exception.getStatus();
589
- const exceptionResponse = exception.getResponse();
590
-
591
- if (typeof exceptionResponse === 'object') {
592
- message = (exceptionResponse as any).message || message;
593
- errors = (exceptionResponse as any).errors;
594
- } else {
595
- message = exceptionResponse;
596
- }
597
- } else if (exception instanceof Error) {
598
- message = exception.message;
599
- this.logger.error(exception.stack);
600
- }
601
-
602
- response.status(status).json({
603
- success: false,
604
- statusCode: status,
605
- message,
606
- errors,
607
- timestamp: new Date().toISOString(),
608
- path: request.url,
609
- });
610
- }
611
- }
612
-
613
- // main.ts
614
- import { NestFactory } from '@nestjs/core';
615
- import { AppModule } from './app.module';
616
- import { HttpExceptionFilter } from './common/filters/http-exception.filter';
617
-
618
- async function bootstrap() {
619
- const app = await NestFactory.create(AppModule);
620
- app.useGlobalFilters(new HttpExceptionFilter());
621
- await app.listen(3000);
622
- }
623
- bootstrap();
624
- ```
625
-
626
- ---
627
-
628
- ## Migration Pattern: Validation
629
-
630
- ### Before: Express with express-validator
631
-
632
- ```typescript
633
- // routes/users.js
634
- const { body, validationResult } = require('express-validator');
635
-
636
- router.post(
637
- '/',
638
- [
639
- body('email').isEmail().normalizeEmail(),
640
- body('name').trim().isLength({ min: 2, max: 50 }),
641
- body('age').optional().isInt({ min: 0, max: 120 }),
642
- ],
643
- async (req, res, next) => {
644
- const errors = validationResult(req);
645
- if (!errors.isEmpty()) {
646
- return res.status(400).json({
647
- success: false,
648
- errors: errors.array()
649
- });
650
- }
651
-
652
- try {
653
- const user = await userService.create(req.body);
654
- res.status(201).json({ success: true, data: user });
655
- } catch (error) {
656
- next(error);
657
- }
658
- }
659
- );
660
- ```
661
-
662
- ### After: NestJS with class-validator
663
-
664
- ```typescript
665
- // users/dto/create-user.dto.ts
666
- import {
667
- IsEmail,
668
- IsNotEmpty,
669
- IsString,
670
- MinLength,
671
- MaxLength,
672
- IsOptional,
673
- IsInt,
674
- Min,
675
- Max,
676
- } from 'class-validator';
677
- import { Transform } from 'class-transformer';
678
-
679
- export class CreateUserDto {
680
- @IsEmail()
681
- @IsNotEmpty()
682
- @Transform(({ value }) => value.toLowerCase().trim())
683
- email: string;
684
-
685
- @IsString()
686
- @MinLength(2)
687
- @MaxLength(50)
688
- @Transform(({ value }) => value.trim())
689
- name: string;
690
-
691
- @IsOptional()
692
- @IsInt()
693
- @Min(0)
694
- @Max(120)
695
- age?: number;
696
- }
697
-
698
- // users/users.controller.ts
699
- import { Controller, Post, Body, ValidationPipe } from '@nestjs/common';
700
- import { UsersService } from './users.service';
701
- import { CreateUserDto } from './dto/create-user.dto';
702
-
703
- @Controller('users')
704
- export class UsersController {
705
- constructor(private readonly usersService: UsersService) {}
706
-
707
- @Post()
708
- async create(@Body(ValidationPipe) createUserDto: CreateUserDto) {
709
- const user = await this.usersService.create(createUserDto);
710
- return { success: true, data: user };
711
- }
712
- }
713
-
714
- // main.ts - Global validation pipe
715
- import { ValidationPipe } from '@nestjs/common';
716
-
717
- async function bootstrap() {
718
- const app = await NestFactory.create(AppModule);
719
- app.useGlobalPipes(
720
- new ValidationPipe({
721
- whitelist: true, // Strip non-whitelisted properties
722
- forbidNonWhitelisted: true, // Throw error for non-whitelisted
723
- transform: true, // Auto-transform payloads to DTO instances
724
- transformOptions: {
725
- enableImplicitConversion: true,
726
- },
727
- }),
728
- );
729
- await app.listen(3000);
730
- }
731
- ```
732
-
733
- ---
734
-
735
- ## Migration Pattern: Testing
736
-
737
- ### Before: Express with Mocha/Chai
738
-
739
- ```typescript
740
- // test/users.test.js
741
- const request = require('supertest');
742
- const { expect } = require('chai');
743
- const app = require('../src/app');
744
-
745
- describe('Users API', () => {
746
- describe('POST /users', () => {
747
- it('should create a new user', async () => {
748
- const userData = {
749
- email: 'test@example.com',
750
- name: 'Test User'
751
- };
752
-
753
- const response = await request(app)
754
- .post('/users')
755
- .send(userData)
756
- .expect(201);
757
-
758
- expect(response.body.success).to.be.true;
759
- expect(response.body.data).to.have.property('id');
760
- expect(response.body.data.email).to.equal(userData.email);
761
- });
762
-
763
- it('should return 400 for invalid email', async () => {
764
- const response = await request(app)
765
- .post('/users')
766
- .send({ email: 'invalid', name: 'Test' })
767
- .expect(400);
768
-
769
- expect(response.body.success).to.be.false;
770
- });
771
- });
772
- });
773
- ```
774
-
775
- ### After: NestJS with Jest
776
-
777
- ```typescript
778
- // users/users.controller.spec.ts
779
- import { Test, TestingModule } from '@nestjs/testing';
780
- import { UsersController } from './users.controller';
781
- import { UsersService } from './users.service';
782
- import { CreateUserDto } from './dto/create-user.dto';
783
-
784
- describe('UsersController', () => {
785
- let controller: UsersController;
786
- let service: UsersService;
787
-
788
- const mockUsersService = {
789
- create: jest.fn(),
790
- findById: jest.fn(),
791
- findAll: jest.fn(),
792
- };
793
-
794
- beforeEach(async () => {
795
- const module: TestingModule = await Test.createTestingModule({
796
- controllers: [UsersController],
797
- providers: [
798
- {
799
- provide: UsersService,
800
- useValue: mockUsersService,
801
- },
802
- ],
803
- }).compile();
804
-
805
- controller = module.get<UsersController>(UsersController);
806
- service = module.get<UsersService>(UsersService);
807
- });
808
-
809
- afterEach(() => {
810
- jest.clearAllMocks();
811
- });
812
-
813
- describe('create', () => {
814
- it('should create a new user', async () => {
815
- const createUserDto: CreateUserDto = {
816
- email: 'test@example.com',
817
- name: 'Test User',
818
- };
819
-
820
- const expectedUser = {
821
- id: 1,
822
- ...createUserDto,
823
- createdAt: new Date(),
824
- };
825
-
826
- mockUsersService.create.mockResolvedValue(expectedUser);
827
-
828
- const result = await controller.create(createUserDto);
829
-
830
- expect(result.success).toBe(true);
831
- expect(result.data).toEqual(expectedUser);
832
- expect(service.create).toHaveBeenCalledWith(createUserDto);
833
- expect(service.create).toHaveBeenCalledTimes(1);
834
- });
835
- });
836
-
837
- describe('findOne', () => {
838
- it('should return a user by id', async () => {
839
- const userId = 1;
840
- const expectedUser = {
841
- id: userId,
842
- email: 'test@example.com',
843
- name: 'Test User',
844
- };
845
-
846
- mockUsersService.findById.mockResolvedValue(expectedUser);
847
-
848
- const result = await controller.findOne(userId);
849
-
850
- expect(result.data).toEqual(expectedUser);
851
- expect(service.findById).toHaveBeenCalledWith(userId);
852
- });
853
- });
854
- });
855
-
856
- // users/users.service.spec.ts
857
- import { Test, TestingModule } from '@nestjs/testing';
858
- import { NotFoundException } from '@nestjs/common';
859
- import { UsersService } from './users.service';
860
- import { UsersRepository } from './users.repository';
861
- import { EmailService } from '../email/email.service';
862
-
863
- describe('UsersService', () => {
864
- let service: UsersService;
865
- let repository: UsersRepository;
866
- let emailService: EmailService;
867
-
868
- const mockUsersRepository = {
869
- create: jest.fn(),
870
- findById: jest.fn(),
871
- };
872
-
873
- const mockEmailService = {
874
- sendWelcomeEmail: jest.fn(),
875
- };
876
-
877
- beforeEach(async () => {
878
- const module: TestingModule = await Test.createTestingModule({
879
- providers: [
880
- UsersService,
881
- {
882
- provide: UsersRepository,
883
- useValue: mockUsersRepository,
884
- },
885
- {
886
- provide: EmailService,
887
- useValue: mockEmailService,
888
- },
889
- ],
890
- }).compile();
891
-
892
- service = module.get<UsersService>(UsersService);
893
- repository = module.get<UsersRepository>(UsersRepository);
894
- emailService = module.get<EmailService>(EmailService);
895
- });
896
-
897
- describe('create', () => {
898
- it('should create user and send welcome email', async () => {
899
- const createUserDto = {
900
- email: 'test@example.com',
901
- name: 'Test User',
902
- };
903
-
904
- const createdUser = { id: 1, ...createUserDto };
905
-
906
- mockUsersRepository.create.mockResolvedValue(createdUser);
907
- mockEmailService.sendWelcomeEmail.mockResolvedValue(undefined);
908
-
909
- const result = await service.create(createUserDto);
910
-
911
- expect(result).toEqual(createdUser);
912
- expect(repository.create).toHaveBeenCalledWith(createUserDto);
913
- expect(emailService.sendWelcomeEmail).toHaveBeenCalledWith(
914
- createUserDto.email,
915
- );
916
- });
917
- });
918
-
919
- describe('findById', () => {
920
- it('should throw NotFoundException when user not found', async () => {
921
- mockUsersRepository.findById.mockResolvedValue(null);
922
-
923
- await expect(service.findById(999)).rejects.toThrow(NotFoundException);
924
- await expect(service.findById(999)).rejects.toThrow(
925
- 'User with ID 999 not found',
926
- );
927
- });
928
- });
929
- });
930
-
931
- // E2E Testing
932
- // test/users.e2e-spec.ts
933
- import { Test, TestingModule } from '@nestjs/testing';
934
- import { INestApplication, ValidationPipe } from '@nestjs/common';
935
- import * as request from 'supertest';
936
- import { AppModule } from '../src/app.module';
937
-
938
- describe('UsersController (e2e)', () => {
939
- let app: INestApplication;
940
-
941
- beforeAll(async () => {
942
- const moduleFixture: TestingModule = await Test.createTestingModule({
943
- imports: [AppModule],
944
- }).compile();
945
-
946
- app = moduleFixture.createNestApplication();
947
- app.useGlobalPipes(new ValidationPipe());
948
- await app.init();
949
- });
950
-
951
- afterAll(async () => {
952
- await app.close();
953
- });
954
-
955
- describe('/users (POST)', () => {
956
- it('should create a new user', () => {
957
- return request(app.getHttpServer())
958
- .post('/users')
959
- .send({
960
- email: 'test@example.com',
961
- name: 'Test User',
962
- })
963
- .expect(201)
964
- .expect((res) => {
965
- expect(res.body.success).toBe(true);
966
- expect(res.body.data).toHaveProperty('id');
967
- expect(res.body.data.email).toBe('test@example.com');
968
- });
969
- });
970
-
971
- it('should return 400 for invalid email', () => {
972
- return request(app.getHttpServer())
973
- .post('/users')
974
- .send({
975
- email: 'invalid-email',
976
- name: 'Test',
977
- })
978
- .expect(400);
979
- });
980
- });
981
- });
982
- ```
983
-
984
- ---
985
-
986
- ## Incremental Migration Strategy
987
-
988
- ### Strategy 1: Strangler Fig Pattern (Recommended)
989
-
990
- Gradually replace Express routes with NestJS while both run simultaneously.
991
-
992
- **Cross-reference:** See `references/strangler-fig-pattern.md` for detailed implementation.
993
-
994
- ```typescript
995
- // main.ts - Running both Express and NestJS
996
- import { NestFactory } from '@nestjs/core';
997
- import { AppModule } from './app.module';
998
- import * as express from 'express';
999
- import { expressApp } from './legacy/express-app';
1000
-
1001
- async function bootstrap() {
1002
- const nestApp = await NestFactory.create(AppModule);
1003
-
1004
- // Proxy middleware to route between NestJS and Express
1005
- const app = express();
1006
-
1007
- // NestJS routes (new implementation)
1008
- app.use('/api/v2', nestApp.getHttpAdapter().getInstance());
1009
-
1010
- // Express routes (legacy)
1011
- app.use('/api', expressApp);
1012
-
1013
- await app.listen(3000);
1014
- }
1015
- bootstrap();
1016
- ```
1017
-
1018
- **Migration steps:**
1019
- 1. Set up NestJS alongside Express
1020
- 2. Migrate one module at a time to NestJS
1021
- 3. Route new endpoints to NestJS, old to Express
1022
- 4. Update frontend/clients to use new endpoints
1023
- 5. Remove Express routes once fully migrated
1024
- 6. Decommission Express app
1025
-
1026
- ### Strategy 2: Module-by-Module Migration
1027
-
1028
- Migrate complete feature modules sequentially.
1029
-
1030
- ```
1031
- Phase 1: Authentication (Week 1-2)
1032
- - Migrate auth middleware → Guards
1033
- - Migrate JWT handling → @nestjs/jwt
1034
- - Test authentication flows
1035
- - Deploy with feature flag
1036
-
1037
- Phase 2: Users Module (Week 3-4)
1038
- - Migrate user routes → Controllers
1039
- - Migrate user service → Providers
1040
- - Add validation with DTOs
1041
- - Write tests
1042
-
1043
- Phase 3: Posts Module (Week 5-6)
1044
- ...
1045
- ```
1046
-
1047
- ### Strategy 3: Adapter Pattern for Gradual DI Migration
1048
-
1049
- Wrap Express services in NestJS providers during transition.
1050
-
1051
- ```typescript
1052
- // Adapter for legacy Express service
1053
- import { Injectable } from '@nestjs/common';
1054
- const LegacyUserService = require('../legacy/services/userService');
1055
-
1056
- @Injectable()
1057
- export class UserServiceAdapter {
1058
- private legacyService = new LegacyUserService();
1059
-
1060
- async findAll(): Promise<any[]> {
1061
- return this.legacyService.findAll();
1062
- }
1063
-
1064
- async create(data: any): Promise<any> {
1065
- return this.legacyService.create(data);
1066
- }
1067
- }
1068
-
1069
- // Use in NestJS controller while migrating
1070
- @Controller('users')
1071
- export class UsersController {
1072
- constructor(private readonly userService: UserServiceAdapter) {}
1073
-
1074
- @Get()
1075
- async findAll() {
1076
- return this.userService.findAll();
1077
- }
1078
- }
1079
- ```
1080
-
1081
- ---
1082
-
1083
- ## Common Pitfalls
1084
-
1085
- ### 1. Over-engineering Simple Applications
1086
-
1087
- **Problem:** Migrating a 500-line Express app to full NestJS with modules, DTOs, repositories, guards, etc.
1088
-
1089
- **Solution:** Evaluate if NestJS complexity is justified. Consider keeping simple APIs in Express.
1090
-
1091
- ### 2. Not Understanding Dependency Injection Lifecycle
1092
-
1093
- **Problem:**
1094
- ```typescript
1095
- // WRONG - Creates new instance, bypassing DI
1096
- @Injectable()
1097
- export class UsersService {
1098
- constructor() {
1099
- this.emailService = new EmailService(); // Don't do this!
1100
- }
1101
- }
1102
- ```
1103
-
1104
- **Solution:**
1105
- ```typescript
1106
- // CORRECT - Let NestJS inject dependencies
1107
- @Injectable()
1108
- export class UsersService {
1109
- constructor(private readonly emailService: EmailService) {}
1110
- }
1111
- ```
1112
-
1113
- ### 3. Mixing Middleware and Guards Incorrectly
1114
-
1115
- **Problem:** Using Express middleware for authentication instead of Guards, losing NestJS benefits.
1116
-
1117
- **Solution:** Use Guards for authentication/authorization, Interceptors for logging/transformation, Middleware only for Express-specific needs.
1118
-
1119
- ### 4. Ignoring Validation Pipes
1120
-
1121
- **Problem:** Manual validation in controllers like Express.
1122
-
1123
- ```typescript
1124
- // WRONG - Manual validation
1125
- @Post()
1126
- async create(@Body() body: any) {
1127
- if (!body.email) {
1128
- throw new BadRequestException('Email required');
1129
- }
1130
- // ...
1131
- }
1132
- ```
1133
-
1134
- **Solution:**
1135
- ```typescript
1136
- // CORRECT - Use DTOs with class-validator
1137
- @Post()
1138
- async create(@Body() createUserDto: CreateUserDto) {
1139
- // Validation happens automatically
1140
- return this.usersService.create(createUserDto);
1141
- }
1142
- ```
1143
-
1144
- ### 5. Not Leveraging Module Imports/Exports
1145
-
1146
- **Problem:** Circular dependencies and tightly coupled modules.
1147
-
1148
- **Solution:** Properly structure module imports/exports. Use forwardRef() for circular dependencies.
1149
-
1150
- ```typescript
1151
- @Module({
1152
- imports: [TypeOrmModule.forFeature([User]), EmailModule],
1153
- providers: [UsersService, UsersRepository],
1154
- exports: [UsersService], // Export for other modules
1155
- })
1156
- export class UsersModule {}
1157
- ```
1158
-
1159
- ### 6. Forgetting to Enable CORS
1160
-
1161
- **Problem:** CORS working in Express but failing in NestJS.
1162
-
1163
- **Solution:**
1164
- ```typescript
1165
- // main.ts
1166
- const app = await NestFactory.create(AppModule);
1167
- app.enableCors({
1168
- origin: process.env.ALLOWED_ORIGINS?.split(','),
1169
- credentials: true,
1170
- });
1171
- ```
1172
-
1173
- ### 7. Incorrect Exception Handling
1174
-
1175
- **Problem:** Using Express error middleware patterns.
1176
-
1177
- **Solution:** Use NestJS built-in exceptions and filters.
1178
-
1179
- ```typescript
1180
- // Throw NestJS exceptions
1181
- throw new NotFoundException('User not found');
1182
- throw new BadRequestException('Invalid input');
1183
- throw new UnauthorizedException('Invalid credentials');
1184
- ```
1185
-
1186
- ### 8. Not Configuring ValidationPipe Globally
1187
-
1188
- **Problem:** Validation inconsistent across endpoints.
1189
-
1190
- **Solution:**
1191
- ```typescript
1192
- // main.ts
1193
- app.useGlobalPipes(
1194
- new ValidationPipe({
1195
- whitelist: true,
1196
- forbidNonWhitelisted: true,
1197
- transform: true,
1198
- }),
1199
- );
1200
- ```
1201
-
1202
- ---
1203
-
1204
- ## Migration Checklist
1205
-
1206
- **Pre-Migration:**
1207
- - [ ] Audit existing Express codebase structure
1208
- - [ ] Document all routes and dependencies
1209
- - [ ] Identify shared services and utilities
1210
- - [ ] Plan module boundaries
1211
- - [ ] Set up NestJS project structure
1212
-
1213
- **During Migration:**
1214
- - [ ] Migrate DTOs and validation rules
1215
- - [ ] Convert route handlers to controllers
1216
- - [ ] Refactor services for dependency injection
1217
- - [ ] Implement guards for authentication
1218
- - [ ] Create interceptors for cross-cutting concerns
1219
- - [ ] Add exception filters
1220
- - [ ] Write unit tests for each component
1221
- - [ ] Write e2e tests for critical flows
1222
-
1223
- **Post-Migration:**
1224
- - [ ] Performance testing and optimization
1225
- - [ ] Update API documentation
1226
- - [ ] Configure logging and monitoring
1227
- - [ ] Set up CI/CD for NestJS
1228
- - [ ] Train team on NestJS patterns
1229
- - [ ] Remove Express dependencies
1230
- - [ ] Refactor for NestJS best practices
1231
-
1232
- ---
1233
-
1234
- ## Additional Resources
1235
-
1236
- - NestJS Official Documentation: https://docs.nestjs.com
1237
- - NestJS Migration Guide: https://docs.nestjs.com/migration-guide
1238
- - class-validator Decorators: https://github.com/typestack/class-validator
1239
- - TypeORM with NestJS: https://docs.nestjs.com/techniques/database
1240
- - Testing Guide: https://docs.nestjs.com/fundamentals/testing