@skillsmith/mcp-server 0.2.3 → 0.3.1

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 (315) hide show
  1. package/package.json +3 -2
  2. package/src/assets/docs/USER_GUIDE.md +192 -0
  3. package/src/assets/skills/skillsmith/SKILL.md +147 -0
  4. package/src/assets/skills/skillsmith/docs/QUOTAS.md +182 -0
  5. package/src/assets/skills/skillsmith/docs/SECURITY.md +174 -0
  6. package/src/assets/skills/skillsmith/docs/TRUST_TIERS.md +142 -0
  7. package/dist/.tsbuildinfo +0 -1
  8. package/dist/src/__tests__/get-skill.test.d.ts +0 -6
  9. package/dist/src/__tests__/get-skill.test.d.ts.map +0 -1
  10. package/dist/src/__tests__/get-skill.test.js +0 -88
  11. package/dist/src/__tests__/get-skill.test.js.map +0 -1
  12. package/dist/src/__tests__/middleware/errorFormatter.test.d.ts +0 -7
  13. package/dist/src/__tests__/middleware/errorFormatter.test.d.ts.map +0 -1
  14. package/dist/src/__tests__/middleware/errorFormatter.test.js +0 -304
  15. package/dist/src/__tests__/middleware/errorFormatter.test.js.map +0 -1
  16. package/dist/src/__tests__/middleware/license.test.d.ts +0 -7
  17. package/dist/src/__tests__/middleware/license.test.d.ts.map +0 -1
  18. package/dist/src/__tests__/middleware/license.test.js +0 -500
  19. package/dist/src/__tests__/middleware/license.test.js.map +0 -1
  20. package/dist/src/__tests__/search.test.d.ts +0 -6
  21. package/dist/src/__tests__/search.test.d.ts.map +0 -1
  22. package/dist/src/__tests__/search.test.js +0 -86
  23. package/dist/src/__tests__/search.test.js.map +0 -1
  24. package/dist/src/__tests__/test-utils.d.ts +0 -20
  25. package/dist/src/__tests__/test-utils.d.ts.map +0 -1
  26. package/dist/src/__tests__/test-utils.js +0 -91
  27. package/dist/src/__tests__/test-utils.js.map +0 -1
  28. package/dist/src/context/index.d.ts +0 -19
  29. package/dist/src/context/index.d.ts.map +0 -1
  30. package/dist/src/context/index.js +0 -25
  31. package/dist/src/context/index.js.map +0 -1
  32. package/dist/src/context/project-detector.d.ts +0 -145
  33. package/dist/src/context/project-detector.d.ts.map +0 -1
  34. package/dist/src/context/project-detector.js +0 -321
  35. package/dist/src/context/project-detector.js.map +0 -1
  36. package/dist/src/context.d.ts +0 -135
  37. package/dist/src/context.d.ts.map +0 -1
  38. package/dist/src/context.js +0 -191
  39. package/dist/src/context.js.map +0 -1
  40. package/dist/src/core-shim.d.ts +0 -7
  41. package/dist/src/core-shim.d.ts.map +0 -1
  42. package/dist/src/core-shim.js +0 -9
  43. package/dist/src/core-shim.js.map +0 -1
  44. package/dist/src/health/healthCheck.d.ts +0 -88
  45. package/dist/src/health/healthCheck.d.ts.map +0 -1
  46. package/dist/src/health/healthCheck.js +0 -117
  47. package/dist/src/health/healthCheck.js.map +0 -1
  48. package/dist/src/health/index.d.ts +0 -21
  49. package/dist/src/health/index.d.ts.map +0 -1
  50. package/dist/src/health/index.js +0 -21
  51. package/dist/src/health/index.js.map +0 -1
  52. package/dist/src/health/readinessCheck.d.ts +0 -139
  53. package/dist/src/health/readinessCheck.d.ts.map +0 -1
  54. package/dist/src/health/readinessCheck.js +0 -266
  55. package/dist/src/health/readinessCheck.js.map +0 -1
  56. package/dist/src/index.d.ts +0 -8
  57. package/dist/src/index.d.ts.map +0 -1
  58. package/dist/src/index.js +0 -178
  59. package/dist/src/index.js.map +0 -1
  60. package/dist/src/index.test.d.ts +0 -2
  61. package/dist/src/index.test.d.ts.map +0 -1
  62. package/dist/src/index.test.js +0 -43
  63. package/dist/src/index.test.js.map +0 -1
  64. package/dist/src/logger.d.ts +0 -26
  65. package/dist/src/logger.d.ts.map +0 -1
  66. package/dist/src/logger.js +0 -179
  67. package/dist/src/logger.js.map +0 -1
  68. package/dist/src/middleware/__tests__/csp.test.d.ts +0 -2
  69. package/dist/src/middleware/__tests__/csp.test.d.ts.map +0 -1
  70. package/dist/src/middleware/__tests__/csp.test.js +0 -390
  71. package/dist/src/middleware/__tests__/csp.test.js.map +0 -1
  72. package/dist/src/middleware/csp.d.ts +0 -103
  73. package/dist/src/middleware/csp.d.ts.map +0 -1
  74. package/dist/src/middleware/csp.js +0 -273
  75. package/dist/src/middleware/csp.js.map +0 -1
  76. package/dist/src/middleware/degradation.d.ts +0 -105
  77. package/dist/src/middleware/degradation.d.ts.map +0 -1
  78. package/dist/src/middleware/degradation.js +0 -319
  79. package/dist/src/middleware/degradation.js.map +0 -1
  80. package/dist/src/middleware/errorFormatter.d.ts +0 -119
  81. package/dist/src/middleware/errorFormatter.d.ts.map +0 -1
  82. package/dist/src/middleware/errorFormatter.js +0 -294
  83. package/dist/src/middleware/errorFormatter.js.map +0 -1
  84. package/dist/src/middleware/index.d.ts +0 -11
  85. package/dist/src/middleware/index.d.ts.map +0 -1
  86. package/dist/src/middleware/index.js +0 -16
  87. package/dist/src/middleware/index.js.map +0 -1
  88. package/dist/src/middleware/license.d.ts +0 -169
  89. package/dist/src/middleware/license.d.ts.map +0 -1
  90. package/dist/src/middleware/license.js +0 -292
  91. package/dist/src/middleware/license.js.map +0 -1
  92. package/dist/src/middleware/quota.d.ts +0 -182
  93. package/dist/src/middleware/quota.d.ts.map +0 -1
  94. package/dist/src/middleware/quota.js +0 -309
  95. package/dist/src/middleware/quota.js.map +0 -1
  96. package/dist/src/middleware/toolFeatureMapping.d.ts +0 -36
  97. package/dist/src/middleware/toolFeatureMapping.d.ts.map +0 -1
  98. package/dist/src/middleware/toolFeatureMapping.js +0 -96
  99. package/dist/src/middleware/toolFeatureMapping.js.map +0 -1
  100. package/dist/src/onboarding/first-run.d.ts +0 -64
  101. package/dist/src/onboarding/first-run.d.ts.map +0 -1
  102. package/dist/src/onboarding/first-run.js +0 -77
  103. package/dist/src/onboarding/first-run.js.map +0 -1
  104. package/dist/src/onboarding/index.d.ts +0 -7
  105. package/dist/src/onboarding/index.d.ts.map +0 -1
  106. package/dist/src/onboarding/index.js +0 -7
  107. package/dist/src/onboarding/index.js.map +0 -1
  108. package/dist/src/suggestions/index.d.ts +0 -21
  109. package/dist/src/suggestions/index.d.ts.map +0 -1
  110. package/dist/src/suggestions/index.js +0 -20
  111. package/dist/src/suggestions/index.js.map +0 -1
  112. package/dist/src/suggestions/suggestion-engine.d.ts +0 -185
  113. package/dist/src/suggestions/suggestion-engine.d.ts.map +0 -1
  114. package/dist/src/suggestions/suggestion-engine.js +0 -352
  115. package/dist/src/suggestions/suggestion-engine.js.map +0 -1
  116. package/dist/src/suggestions/types.d.ts +0 -88
  117. package/dist/src/suggestions/types.d.ts.map +0 -1
  118. package/dist/src/suggestions/types.js +0 -21
  119. package/dist/src/suggestions/types.js.map +0 -1
  120. package/dist/src/tools/analyze.d.ts +0 -151
  121. package/dist/src/tools/analyze.d.ts.map +0 -1
  122. package/dist/src/tools/analyze.js +0 -205
  123. package/dist/src/tools/analyze.js.map +0 -1
  124. package/dist/src/tools/compare.d.ts +0 -149
  125. package/dist/src/tools/compare.d.ts.map +0 -1
  126. package/dist/src/tools/compare.js +0 -464
  127. package/dist/src/tools/compare.js.map +0 -1
  128. package/dist/src/tools/get-skill.d.ts +0 -107
  129. package/dist/src/tools/get-skill.d.ts.map +0 -1
  130. package/dist/src/tools/get-skill.js +0 -260
  131. package/dist/src/tools/get-skill.js.map +0 -1
  132. package/dist/src/tools/index.d.ts +0 -20
  133. package/dist/src/tools/index.d.ts.map +0 -1
  134. package/dist/src/tools/index.js +0 -20
  135. package/dist/src/tools/index.js.map +0 -1
  136. package/dist/src/tools/install.d.ts +0 -122
  137. package/dist/src/tools/install.d.ts.map +0 -1
  138. package/dist/src/tools/install.js +0 -326
  139. package/dist/src/tools/install.js.map +0 -1
  140. package/dist/src/tools/recommend.d.ts +0 -169
  141. package/dist/src/tools/recommend.d.ts.map +0 -1
  142. package/dist/src/tools/recommend.js +0 -357
  143. package/dist/src/tools/recommend.js.map +0 -1
  144. package/dist/src/tools/search.d.ts +0 -114
  145. package/dist/src/tools/search.d.ts.map +0 -1
  146. package/dist/src/tools/search.js +0 -247
  147. package/dist/src/tools/search.js.map +0 -1
  148. package/dist/src/tools/suggest.d.ts +0 -181
  149. package/dist/src/tools/suggest.d.ts.map +0 -1
  150. package/dist/src/tools/suggest.js +0 -310
  151. package/dist/src/tools/suggest.js.map +0 -1
  152. package/dist/src/tools/uninstall.d.ts +0 -123
  153. package/dist/src/tools/uninstall.d.ts.map +0 -1
  154. package/dist/src/tools/uninstall.js +0 -250
  155. package/dist/src/tools/uninstall.js.map +0 -1
  156. package/dist/src/tools/validate.d.ts +0 -122
  157. package/dist/src/tools/validate.d.ts.map +0 -1
  158. package/dist/src/tools/validate.js +0 -497
  159. package/dist/src/tools/validate.js.map +0 -1
  160. package/dist/src/utils/installed-skills.d.ts +0 -101
  161. package/dist/src/utils/installed-skills.d.ts.map +0 -1
  162. package/dist/src/utils/installed-skills.js +0 -220
  163. package/dist/src/utils/installed-skills.js.map +0 -1
  164. package/dist/src/utils/validation.d.ts +0 -95
  165. package/dist/src/utils/validation.d.ts.map +0 -1
  166. package/dist/src/utils/validation.js +0 -186
  167. package/dist/src/utils/validation.js.map +0 -1
  168. package/dist/src/webhooks/index.d.ts +0 -8
  169. package/dist/src/webhooks/index.d.ts.map +0 -1
  170. package/dist/src/webhooks/index.js +0 -9
  171. package/dist/src/webhooks/index.js.map +0 -1
  172. package/dist/src/webhooks/webhook-endpoint.d.ts +0 -149
  173. package/dist/src/webhooks/webhook-endpoint.d.ts.map +0 -1
  174. package/dist/src/webhooks/webhook-endpoint.js +0 -339
  175. package/dist/src/webhooks/webhook-endpoint.js.map +0 -1
  176. package/dist/tests/compare.test.d.ts +0 -6
  177. package/dist/tests/compare.test.d.ts.map +0 -1
  178. package/dist/tests/compare.test.js +0 -225
  179. package/dist/tests/compare.test.js.map +0 -1
  180. package/dist/tests/context/project-detector.test.d.ts +0 -6
  181. package/dist/tests/context/project-detector.test.d.ts.map +0 -1
  182. package/dist/tests/context/project-detector.test.js +0 -719
  183. package/dist/tests/context/project-detector.test.js.map +0 -1
  184. package/dist/tests/e2e/compare.e2e.test.d.ts +0 -10
  185. package/dist/tests/e2e/compare.e2e.test.d.ts.map +0 -1
  186. package/dist/tests/e2e/compare.e2e.test.js +0 -296
  187. package/dist/tests/e2e/compare.e2e.test.js.map +0 -1
  188. package/dist/tests/e2e/install-flow.e2e.test.d.ts +0 -10
  189. package/dist/tests/e2e/install-flow.e2e.test.d.ts.map +0 -1
  190. package/dist/tests/e2e/install-flow.e2e.test.js +0 -229
  191. package/dist/tests/e2e/install-flow.e2e.test.js.map +0 -1
  192. package/dist/tests/e2e/recommend.e2e.test.d.ts +0 -12
  193. package/dist/tests/e2e/recommend.e2e.test.d.ts.map +0 -1
  194. package/dist/tests/e2e/recommend.e2e.test.js +0 -357
  195. package/dist/tests/e2e/recommend.e2e.test.js.map +0 -1
  196. package/dist/tests/e2e/skill-flow.e2e.test.d.ts +0 -10
  197. package/dist/tests/e2e/skill-flow.e2e.test.d.ts.map +0 -1
  198. package/dist/tests/e2e/skill-flow.e2e.test.js +0 -311
  199. package/dist/tests/e2e/skill-flow.e2e.test.js.map +0 -1
  200. package/dist/tests/e2e/suggest.e2e.test.d.ts +0 -13
  201. package/dist/tests/e2e/suggest.e2e.test.d.ts.map +0 -1
  202. package/dist/tests/e2e/suggest.e2e.test.js +0 -367
  203. package/dist/tests/e2e/suggest.e2e.test.js.map +0 -1
  204. package/dist/tests/e2e/utils/baseline-collector.d.ts +0 -107
  205. package/dist/tests/e2e/utils/baseline-collector.d.ts.map +0 -1
  206. package/dist/tests/e2e/utils/baseline-collector.js +0 -211
  207. package/dist/tests/e2e/utils/baseline-collector.js.map +0 -1
  208. package/dist/tests/e2e/utils/hardcoded-detector.d.ts +0 -46
  209. package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +0 -1
  210. package/dist/tests/e2e/utils/hardcoded-detector.js +0 -255
  211. package/dist/tests/e2e/utils/hardcoded-detector.js.map +0 -1
  212. package/dist/tests/e2e/utils/index.d.ts +0 -7
  213. package/dist/tests/e2e/utils/index.d.ts.map +0 -1
  214. package/dist/tests/e2e/utils/index.js +0 -7
  215. package/dist/tests/e2e/utils/index.js.map +0 -1
  216. package/dist/tests/e2e/utils/linear-reporter.d.ts +0 -60
  217. package/dist/tests/e2e/utils/linear-reporter.d.ts.map +0 -1
  218. package/dist/tests/e2e/utils/linear-reporter.js +0 -232
  219. package/dist/tests/e2e/utils/linear-reporter.js.map +0 -1
  220. package/dist/tests/health.test.d.ts +0 -9
  221. package/dist/tests/health.test.d.ts.map +0 -1
  222. package/dist/tests/health.test.js +0 -308
  223. package/dist/tests/health.test.js.map +0 -1
  224. package/dist/tests/integration/analyze.integration.test.d.ts +0 -2
  225. package/dist/tests/integration/analyze.integration.test.d.ts.map +0 -1
  226. package/dist/tests/integration/analyze.integration.test.js +0 -244
  227. package/dist/tests/integration/analyze.integration.test.js.map +0 -1
  228. package/dist/tests/integration/compare.integration.test.d.ts +0 -2
  229. package/dist/tests/integration/compare.integration.test.d.ts.map +0 -1
  230. package/dist/tests/integration/compare.integration.test.js +0 -120
  231. package/dist/tests/integration/compare.integration.test.js.map +0 -1
  232. package/dist/tests/integration/fixtures/test-skills.d.ts +0 -62
  233. package/dist/tests/integration/fixtures/test-skills.d.ts.map +0 -1
  234. package/dist/tests/integration/fixtures/test-skills.js +0 -644
  235. package/dist/tests/integration/fixtures/test-skills.js.map +0 -1
  236. package/dist/tests/integration/get-skill.integration.test.d.ts +0 -6
  237. package/dist/tests/integration/get-skill.integration.test.d.ts.map +0 -1
  238. package/dist/tests/integration/get-skill.integration.test.js +0 -203
  239. package/dist/tests/integration/get-skill.integration.test.js.map +0 -1
  240. package/dist/tests/integration/github-api.integration.test.d.ts +0 -14
  241. package/dist/tests/integration/github-api.integration.test.d.ts.map +0 -1
  242. package/dist/tests/integration/github-api.integration.test.js +0 -190
  243. package/dist/tests/integration/github-api.integration.test.js.map +0 -1
  244. package/dist/tests/integration/install.integration.test.d.ts +0 -6
  245. package/dist/tests/integration/install.integration.test.d.ts.map +0 -1
  246. package/dist/tests/integration/install.integration.test.js +0 -282
  247. package/dist/tests/integration/install.integration.test.js.map +0 -1
  248. package/dist/tests/integration/recommend.integration.test.d.ts +0 -2
  249. package/dist/tests/integration/recommend.integration.test.d.ts.map +0 -1
  250. package/dist/tests/integration/recommend.integration.test.js +0 -217
  251. package/dist/tests/integration/recommend.integration.test.js.map +0 -1
  252. package/dist/tests/integration/search.integration.test.d.ts +0 -6
  253. package/dist/tests/integration/search.integration.test.d.ts.map +0 -1
  254. package/dist/tests/integration/search.integration.test.js +0 -229
  255. package/dist/tests/integration/search.integration.test.js.map +0 -1
  256. package/dist/tests/integration/setup.d.ts +0 -74
  257. package/dist/tests/integration/setup.d.ts.map +0 -1
  258. package/dist/tests/integration/setup.js +0 -131
  259. package/dist/tests/integration/setup.js.map +0 -1
  260. package/dist/tests/integration/uninstall.integration.test.d.ts +0 -6
  261. package/dist/tests/integration/uninstall.integration.test.d.ts.map +0 -1
  262. package/dist/tests/integration/uninstall.integration.test.js +0 -296
  263. package/dist/tests/integration/uninstall.integration.test.js.map +0 -1
  264. package/dist/tests/integration/validate.integration.test.d.ts +0 -2
  265. package/dist/tests/integration/validate.integration.test.d.ts.map +0 -1
  266. package/dist/tests/integration/validate.integration.test.js +0 -181
  267. package/dist/tests/integration/validate.integration.test.js.map +0 -1
  268. package/dist/tests/onboarding/first-run.test.d.ts +0 -7
  269. package/dist/tests/onboarding/first-run.test.d.ts.map +0 -1
  270. package/dist/tests/onboarding/first-run.test.js +0 -258
  271. package/dist/tests/onboarding/first-run.test.js.map +0 -1
  272. package/dist/tests/performance/search-performance.test.d.ts +0 -10
  273. package/dist/tests/performance/search-performance.test.d.ts.map +0 -1
  274. package/dist/tests/performance/search-performance.test.js +0 -222
  275. package/dist/tests/performance/search-performance.test.js.map +0 -1
  276. package/dist/tests/recommend.test.d.ts +0 -6
  277. package/dist/tests/recommend.test.d.ts.map +0 -1
  278. package/dist/tests/recommend.test.js +0 -210
  279. package/dist/tests/recommend.test.js.map +0 -1
  280. package/dist/tests/suggestions/suggestion-engine.test.d.ts +0 -6
  281. package/dist/tests/suggestions/suggestion-engine.test.d.ts.map +0 -1
  282. package/dist/tests/suggestions/suggestion-engine.test.js +0 -448
  283. package/dist/tests/suggestions/suggestion-engine.test.js.map +0 -1
  284. package/dist/tests/test-utils.d.ts +0 -74
  285. package/dist/tests/test-utils.d.ts.map +0 -1
  286. package/dist/tests/test-utils.js +0 -98
  287. package/dist/tests/test-utils.js.map +0 -1
  288. package/dist/tests/tools.test.d.ts +0 -5
  289. package/dist/tests/tools.test.d.ts.map +0 -1
  290. package/dist/tests/tools.test.js +0 -138
  291. package/dist/tests/tools.test.js.map +0 -1
  292. package/dist/tests/unit/installed-skills.test.d.ts +0 -6
  293. package/dist/tests/unit/installed-skills.test.d.ts.map +0 -1
  294. package/dist/tests/unit/installed-skills.test.js +0 -285
  295. package/dist/tests/unit/installed-skills.test.js.map +0 -1
  296. package/dist/tests/unit/logger.test.d.ts +0 -6
  297. package/dist/tests/unit/logger.test.d.ts.map +0 -1
  298. package/dist/tests/unit/logger.test.js +0 -281
  299. package/dist/tests/unit/logger.test.js.map +0 -1
  300. package/dist/tests/validate.test.d.ts +0 -5
  301. package/dist/tests/validate.test.d.ts.map +0 -1
  302. package/dist/tests/validate.test.js +0 -303
  303. package/dist/tests/validate.test.js.map +0 -1
  304. package/dist/tests/webhooks/proxy-trust.security.test.d.ts +0 -8
  305. package/dist/tests/webhooks/proxy-trust.security.test.d.ts.map +0 -1
  306. package/dist/tests/webhooks/proxy-trust.security.test.js +0 -145
  307. package/dist/tests/webhooks/proxy-trust.security.test.js.map +0 -1
  308. package/dist/tests/webhooks/rate-limiter.security.test.d.ts +0 -8
  309. package/dist/tests/webhooks/rate-limiter.security.test.d.ts.map +0 -1
  310. package/dist/tests/webhooks/rate-limiter.security.test.js +0 -122
  311. package/dist/tests/webhooks/rate-limiter.security.test.js.map +0 -1
  312. package/dist/vitest.config.d.ts +0 -6
  313. package/dist/vitest.config.d.ts.map +0 -1
  314. package/dist/vitest.config.js +0 -13
  315. package/dist/vitest.config.js.map +0 -1
@@ -1,145 +0,0 @@
1
- /**
2
- * SMI-682: Security tests for X-Forwarded-For proxy trust validation
3
- *
4
- * These tests verify that the server only trusts X-Forwarded-For headers
5
- * when explicitly configured and from trusted proxy sources.
6
- */
7
- import { describe, it, expect } from 'vitest';
8
- // Import the getClientIp function directly from TypeScript source
9
- import { getClientIp } from '../../src/webhooks/webhook-endpoint.js';
10
- describe('X-Forwarded-For Proxy Trust (SMI-682)', () => {
11
- function createMockRequest(headers, remoteAddress = '10.0.0.1') {
12
- const socket = {
13
- remoteAddress,
14
- };
15
- const req = {
16
- headers,
17
- socket,
18
- };
19
- return req;
20
- }
21
- describe('when trustProxy is false (default)', () => {
22
- it('should ignore X-Forwarded-For header and use socket address', () => {
23
- const config = {
24
- secret: 'test-secret',
25
- trustProxy: false,
26
- };
27
- const req = createMockRequest({ 'x-forwarded-for': '203.0.113.50' }, '10.0.0.1');
28
- const ip = getClientIp(req, config);
29
- expect(ip).toBe('10.0.0.1');
30
- });
31
- it('should use socket address when no X-Forwarded-For present', () => {
32
- const config = {
33
- secret: 'test-secret',
34
- trustProxy: false,
35
- };
36
- const req = createMockRequest({}, '192.168.1.100');
37
- const ip = getClientIp(req, config);
38
- expect(ip).toBe('192.168.1.100');
39
- });
40
- });
41
- describe('when trustProxy is true', () => {
42
- it('should use X-Forwarded-For header value', () => {
43
- const config = {
44
- secret: 'test-secret',
45
- trustProxy: true,
46
- };
47
- const req = createMockRequest({ 'x-forwarded-for': '203.0.113.50' }, '10.0.0.1');
48
- const ip = getClientIp(req, config);
49
- expect(ip).toBe('203.0.113.50');
50
- });
51
- it('should use first IP from comma-separated X-Forwarded-For', () => {
52
- const config = {
53
- secret: 'test-secret',
54
- trustProxy: true,
55
- };
56
- const req = createMockRequest({ 'x-forwarded-for': '203.0.113.50, 10.0.0.1, 192.168.1.1' }, '127.0.0.1');
57
- const ip = getClientIp(req, config);
58
- expect(ip).toBe('203.0.113.50');
59
- });
60
- it('should fallback to socket address when no X-Forwarded-For', () => {
61
- const config = {
62
- secret: 'test-secret',
63
- trustProxy: true,
64
- };
65
- const req = createMockRequest({}, '10.0.0.1');
66
- const ip = getClientIp(req, config);
67
- expect(ip).toBe('10.0.0.1');
68
- });
69
- });
70
- describe('when trustedProxies is configured', () => {
71
- it('should trust X-Forwarded-For only from trusted proxy IPs', () => {
72
- const config = {
73
- secret: 'test-secret',
74
- trustProxy: true,
75
- trustedProxies: ['10.0.0.1', '10.0.0.2'],
76
- };
77
- // Request comes from trusted proxy
78
- const req = createMockRequest({ 'x-forwarded-for': '203.0.113.50' }, '10.0.0.1');
79
- const ip = getClientIp(req, config);
80
- expect(ip).toBe('203.0.113.50');
81
- });
82
- it('should NOT trust X-Forwarded-For from untrusted proxy IPs', () => {
83
- const config = {
84
- secret: 'test-secret',
85
- trustProxy: true,
86
- trustedProxies: ['10.0.0.1', '10.0.0.2'],
87
- };
88
- // Request comes from untrusted IP (potential attacker)
89
- const req = createMockRequest({ 'x-forwarded-for': '203.0.113.50' }, '192.168.1.100' // Not in trusted list
90
- );
91
- const ip = getClientIp(req, config);
92
- // Should use socket address, not spoofed header
93
- expect(ip).toBe('192.168.1.100');
94
- });
95
- it('should prevent IP spoofing attacks from untrusted sources', () => {
96
- const config = {
97
- secret: 'test-secret',
98
- trustProxy: true,
99
- trustedProxies: ['10.0.0.1'],
100
- };
101
- // Attacker tries to spoof IP by setting X-Forwarded-For
102
- const req = createMockRequest({ 'x-forwarded-for': '1.2.3.4' }, // Spoofed IP
103
- '192.168.1.100' // Attacker's real IP (not trusted)
104
- );
105
- const ip = getClientIp(req, config);
106
- // Attack should fail - use real socket address
107
- expect(ip).toBe('192.168.1.100');
108
- expect(ip).not.toBe('1.2.3.4');
109
- });
110
- });
111
- describe('edge cases', () => {
112
- it('should return "unknown" when socket has no remoteAddress', () => {
113
- const config = {
114
- secret: 'test-secret',
115
- trustProxy: false,
116
- };
117
- const socket = {}; // No remoteAddress
118
- const req = {
119
- headers: {},
120
- socket,
121
- };
122
- const ip = getClientIp(req, config);
123
- expect(ip).toBe('unknown');
124
- });
125
- it('should handle array X-Forwarded-For header', () => {
126
- const config = {
127
- secret: 'test-secret',
128
- trustProxy: true,
129
- };
130
- const req = createMockRequest({ 'x-forwarded-for': ['203.0.113.50', '10.0.0.1'] }, '127.0.0.1');
131
- const ip = getClientIp(req, config);
132
- expect(ip).toBe('203.0.113.50');
133
- });
134
- it('should trim whitespace from X-Forwarded-For values', () => {
135
- const config = {
136
- secret: 'test-secret',
137
- trustProxy: true,
138
- };
139
- const req = createMockRequest({ 'x-forwarded-for': ' 203.0.113.50 , 10.0.0.1 ' }, '127.0.0.1');
140
- const ip = getClientIp(req, config);
141
- expect(ip).toBe('203.0.113.50');
142
- });
143
- });
144
- });
145
- //# sourceMappingURL=proxy-trust.security.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy-trust.security.test.js","sourceRoot":"","sources":["../../../tests/webhooks/proxy-trust.security.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * SMI-681: Security tests for Rate Limiter memory leak prevention
3
- *
4
- * These tests verify that the rate limiter properly cleans up
5
- * old entries to prevent memory leaks from storing stale IP data.
6
- */
7
- export {};
8
- //# sourceMappingURL=rate-limiter.security.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rate-limiter.security.test.d.ts","sourceRoot":"","sources":["../../../tests/webhooks/rate-limiter.security.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,122 +0,0 @@
1
- /**
2
- * SMI-681: Security tests for Rate Limiter memory leak prevention
3
- *
4
- * These tests verify that the rate limiter properly cleans up
5
- * old entries to prevent memory leaks from storing stale IP data.
6
- */
7
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
8
- // Import rate limiter functions directly from the TypeScript source
9
- import { createRateLimiter, isRateLimited, destroyRateLimiter, } from '../../src/webhooks/webhook-endpoint.js';
10
- describe('Rate Limiter Memory Leak Prevention (SMI-681)', () => {
11
- beforeEach(() => {
12
- vi.useFakeTimers();
13
- });
14
- afterEach(() => {
15
- vi.useRealTimers();
16
- });
17
- describe('createRateLimiter', () => {
18
- it('should create a rate limiter with cleanup timer', () => {
19
- const limiter = createRateLimiter(100, 60000);
20
- expect(limiter.requests).toBeInstanceOf(Map);
21
- expect(limiter.limit).toBe(100);
22
- expect(limiter.window).toBe(60000);
23
- expect(limiter.cleanupTimer).toBeDefined();
24
- destroyRateLimiter(limiter);
25
- });
26
- });
27
- describe('periodic cleanup', () => {
28
- it('should clean up old IPs after window period expires', () => {
29
- const windowMs = 60000; // 1 minute
30
- const limiter = createRateLimiter(100, windowMs);
31
- // Add some requests from different IPs
32
- isRateLimited(limiter, '192.168.1.1');
33
- isRateLimited(limiter, '192.168.1.2');
34
- isRateLimited(limiter, '192.168.1.3');
35
- expect(limiter.requests.size).toBe(3);
36
- // Advance time past the window
37
- vi.advanceTimersByTime(windowMs + 1);
38
- // After cleanup runs, old entries should be removed
39
- expect(limiter.requests.size).toBe(0);
40
- destroyRateLimiter(limiter);
41
- });
42
- it('should NOT clean up IPs with recent activity', () => {
43
- const windowMs = 60000;
44
- const limiter = createRateLimiter(100, windowMs);
45
- // Add initial request
46
- isRateLimited(limiter, '192.168.1.1');
47
- // Advance time but not past window
48
- vi.advanceTimersByTime(windowMs / 2);
49
- // Add another request from same IP (keeps it active)
50
- isRateLimited(limiter, '192.168.1.1');
51
- // Add request from new IP
52
- isRateLimited(limiter, '192.168.1.2');
53
- // Advance to trigger cleanup
54
- vi.advanceTimersByTime(windowMs + 1);
55
- // Old IP without recent activity should be cleaned
56
- // IPs with activity within window should remain
57
- // Note: Due to timing, both might have recent entries
58
- expect(limiter.requests.has('192.168.1.2')).toBe(true);
59
- destroyRateLimiter(limiter);
60
- });
61
- it('should continuously clean up over multiple windows', () => {
62
- const windowMs = 60000;
63
- const limiter = createRateLimiter(100, windowMs);
64
- // First wave of IPs
65
- for (let i = 0; i < 100; i++) {
66
- isRateLimited(limiter, `192.168.1.${i}`);
67
- }
68
- expect(limiter.requests.size).toBe(100);
69
- // Advance past window, cleanup should run
70
- vi.advanceTimersByTime(windowMs + 1);
71
- expect(limiter.requests.size).toBe(0);
72
- // Second wave of IPs
73
- for (let i = 0; i < 50; i++) {
74
- isRateLimited(limiter, `10.0.0.${i}`);
75
- }
76
- expect(limiter.requests.size).toBe(50);
77
- // Advance past TWO windows to ensure cleanup runs after entries expire
78
- // (cleanup runs at intervals, so first run may still see entries in window)
79
- vi.advanceTimersByTime(windowMs * 2);
80
- expect(limiter.requests.size).toBe(0);
81
- destroyRateLimiter(limiter);
82
- });
83
- });
84
- describe('destroyRateLimiter', () => {
85
- it('should clear all state and stop cleanup timer', () => {
86
- const limiter = createRateLimiter(100, 60000);
87
- // Add some data
88
- isRateLimited(limiter, '192.168.1.1');
89
- isRateLimited(limiter, '192.168.1.2');
90
- expect(limiter.requests.size).toBe(2);
91
- // Destroy the limiter
92
- destroyRateLimiter(limiter);
93
- // All state should be cleared
94
- expect(limiter.requests.size).toBe(0);
95
- expect(limiter.cleanupTimer).toBeUndefined();
96
- });
97
- it('should be safe to call multiple times', () => {
98
- const limiter = createRateLimiter(100, 60000);
99
- destroyRateLimiter(limiter);
100
- destroyRateLimiter(limiter); // Should not throw
101
- expect(limiter.requests.size).toBe(0);
102
- });
103
- });
104
- describe('memory growth prevention', () => {
105
- it('should not grow memory unboundedly with many unique IPs', () => {
106
- const windowMs = 1000; // 1 second for faster testing
107
- const limiter = createRateLimiter(100, windowMs);
108
- // Simulate many unique IPs over time
109
- for (let batch = 0; batch < 10; batch++) {
110
- for (let i = 0; i < 100; i++) {
111
- isRateLimited(limiter, `${batch}.${i}.0.1`);
112
- }
113
- // Advance time past window to trigger cleanup
114
- vi.advanceTimersByTime(windowMs + 100);
115
- }
116
- // After all cleanups, map should be empty (no recent activity)
117
- expect(limiter.requests.size).toBeLessThanOrEqual(100);
118
- destroyRateLimiter(limiter);
119
- });
120
- });
121
- });
122
- //# sourceMappingURL=rate-limiter.security.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rate-limiter.security.test.js","sourceRoot":"","sources":["../../../tests/webhooks/rate-limiter.security.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Vitest Configuration for Unit Tests
3
- */
4
- declare const _default: import("vite").UserConfig;
5
- export default _default;
6
- //# sourceMappingURL=vitest.config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAIH,wBAOE"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Vitest Configuration for Unit Tests
3
- */
4
- import { defineConfig } from 'vitest/config';
5
- export default defineConfig({
6
- test: {
7
- globals: true,
8
- environment: 'node',
9
- include: ['tests/**/*.test.ts'],
10
- exclude: ['tests/integration/**/*.integration.test.ts'],
11
- },
12
- });
13
- //# sourceMappingURL=vitest.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,OAAO,EAAE,CAAC,4CAA4C,CAAC;KACxD;CACF,CAAC,CAAA"}