@skillsmith/mcp-server 0.3.0 → 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 (314) hide show
  1. package/package.json +1 -1
  2. package/dist/.tsbuildinfo +0 -1
  3. package/dist/src/__tests__/get-skill.test.d.ts +0 -6
  4. package/dist/src/__tests__/get-skill.test.d.ts.map +0 -1
  5. package/dist/src/__tests__/get-skill.test.js +0 -88
  6. package/dist/src/__tests__/get-skill.test.js.map +0 -1
  7. package/dist/src/__tests__/middleware/errorFormatter.test.d.ts +0 -7
  8. package/dist/src/__tests__/middleware/errorFormatter.test.d.ts.map +0 -1
  9. package/dist/src/__tests__/middleware/errorFormatter.test.js +0 -304
  10. package/dist/src/__tests__/middleware/errorFormatter.test.js.map +0 -1
  11. package/dist/src/__tests__/middleware/license.test.d.ts +0 -7
  12. package/dist/src/__tests__/middleware/license.test.d.ts.map +0 -1
  13. package/dist/src/__tests__/middleware/license.test.js +0 -500
  14. package/dist/src/__tests__/middleware/license.test.js.map +0 -1
  15. package/dist/src/__tests__/search.test.d.ts +0 -6
  16. package/dist/src/__tests__/search.test.d.ts.map +0 -1
  17. package/dist/src/__tests__/search.test.js +0 -86
  18. package/dist/src/__tests__/search.test.js.map +0 -1
  19. package/dist/src/__tests__/test-utils.d.ts +0 -20
  20. package/dist/src/__tests__/test-utils.d.ts.map +0 -1
  21. package/dist/src/__tests__/test-utils.js +0 -91
  22. package/dist/src/__tests__/test-utils.js.map +0 -1
  23. package/dist/src/context/index.d.ts +0 -19
  24. package/dist/src/context/index.d.ts.map +0 -1
  25. package/dist/src/context/index.js +0 -25
  26. package/dist/src/context/index.js.map +0 -1
  27. package/dist/src/context/project-detector.d.ts +0 -145
  28. package/dist/src/context/project-detector.d.ts.map +0 -1
  29. package/dist/src/context/project-detector.js +0 -321
  30. package/dist/src/context/project-detector.js.map +0 -1
  31. package/dist/src/context.d.ts +0 -157
  32. package/dist/src/context.d.ts.map +0 -1
  33. package/dist/src/context.js +0 -231
  34. package/dist/src/context.js.map +0 -1
  35. package/dist/src/core-shim.d.ts +0 -7
  36. package/dist/src/core-shim.d.ts.map +0 -1
  37. package/dist/src/core-shim.js +0 -9
  38. package/dist/src/core-shim.js.map +0 -1
  39. package/dist/src/health/healthCheck.d.ts +0 -88
  40. package/dist/src/health/healthCheck.d.ts.map +0 -1
  41. package/dist/src/health/healthCheck.js +0 -117
  42. package/dist/src/health/healthCheck.js.map +0 -1
  43. package/dist/src/health/index.d.ts +0 -21
  44. package/dist/src/health/index.d.ts.map +0 -1
  45. package/dist/src/health/index.js +0 -21
  46. package/dist/src/health/index.js.map +0 -1
  47. package/dist/src/health/readinessCheck.d.ts +0 -139
  48. package/dist/src/health/readinessCheck.d.ts.map +0 -1
  49. package/dist/src/health/readinessCheck.js +0 -266
  50. package/dist/src/health/readinessCheck.js.map +0 -1
  51. package/dist/src/index.d.ts +0 -9
  52. package/dist/src/index.d.ts.map +0 -1
  53. package/dist/src/index.js +0 -236
  54. package/dist/src/index.js.map +0 -1
  55. package/dist/src/index.test.d.ts +0 -2
  56. package/dist/src/index.test.d.ts.map +0 -1
  57. package/dist/src/index.test.js +0 -43
  58. package/dist/src/index.test.js.map +0 -1
  59. package/dist/src/logger.d.ts +0 -26
  60. package/dist/src/logger.d.ts.map +0 -1
  61. package/dist/src/logger.js +0 -179
  62. package/dist/src/logger.js.map +0 -1
  63. package/dist/src/middleware/__tests__/csp.test.d.ts +0 -2
  64. package/dist/src/middleware/__tests__/csp.test.d.ts.map +0 -1
  65. package/dist/src/middleware/__tests__/csp.test.js +0 -390
  66. package/dist/src/middleware/__tests__/csp.test.js.map +0 -1
  67. package/dist/src/middleware/csp.d.ts +0 -103
  68. package/dist/src/middleware/csp.d.ts.map +0 -1
  69. package/dist/src/middleware/csp.js +0 -273
  70. package/dist/src/middleware/csp.js.map +0 -1
  71. package/dist/src/middleware/degradation.d.ts +0 -105
  72. package/dist/src/middleware/degradation.d.ts.map +0 -1
  73. package/dist/src/middleware/degradation.js +0 -319
  74. package/dist/src/middleware/degradation.js.map +0 -1
  75. package/dist/src/middleware/errorFormatter.d.ts +0 -119
  76. package/dist/src/middleware/errorFormatter.d.ts.map +0 -1
  77. package/dist/src/middleware/errorFormatter.js +0 -294
  78. package/dist/src/middleware/errorFormatter.js.map +0 -1
  79. package/dist/src/middleware/index.d.ts +0 -11
  80. package/dist/src/middleware/index.d.ts.map +0 -1
  81. package/dist/src/middleware/index.js +0 -16
  82. package/dist/src/middleware/index.js.map +0 -1
  83. package/dist/src/middleware/license.d.ts +0 -169
  84. package/dist/src/middleware/license.d.ts.map +0 -1
  85. package/dist/src/middleware/license.js +0 -292
  86. package/dist/src/middleware/license.js.map +0 -1
  87. package/dist/src/middleware/quota.d.ts +0 -182
  88. package/dist/src/middleware/quota.d.ts.map +0 -1
  89. package/dist/src/middleware/quota.js +0 -309
  90. package/dist/src/middleware/quota.js.map +0 -1
  91. package/dist/src/middleware/toolFeatureMapping.d.ts +0 -36
  92. package/dist/src/middleware/toolFeatureMapping.d.ts.map +0 -1
  93. package/dist/src/middleware/toolFeatureMapping.js +0 -96
  94. package/dist/src/middleware/toolFeatureMapping.js.map +0 -1
  95. package/dist/src/onboarding/first-run.d.ts +0 -65
  96. package/dist/src/onboarding/first-run.d.ts.map +0 -1
  97. package/dist/src/onboarding/first-run.js +0 -79
  98. package/dist/src/onboarding/first-run.js.map +0 -1
  99. package/dist/src/onboarding/index.d.ts +0 -7
  100. package/dist/src/onboarding/index.d.ts.map +0 -1
  101. package/dist/src/onboarding/index.js +0 -7
  102. package/dist/src/onboarding/index.js.map +0 -1
  103. package/dist/src/onboarding/install-assets.d.ts +0 -27
  104. package/dist/src/onboarding/install-assets.d.ts.map +0 -1
  105. package/dist/src/onboarding/install-assets.js +0 -128
  106. package/dist/src/onboarding/install-assets.js.map +0 -1
  107. package/dist/src/suggestions/index.d.ts +0 -21
  108. package/dist/src/suggestions/index.d.ts.map +0 -1
  109. package/dist/src/suggestions/index.js +0 -20
  110. package/dist/src/suggestions/index.js.map +0 -1
  111. package/dist/src/suggestions/suggestion-engine.d.ts +0 -185
  112. package/dist/src/suggestions/suggestion-engine.d.ts.map +0 -1
  113. package/dist/src/suggestions/suggestion-engine.js +0 -352
  114. package/dist/src/suggestions/suggestion-engine.js.map +0 -1
  115. package/dist/src/suggestions/types.d.ts +0 -88
  116. package/dist/src/suggestions/types.d.ts.map +0 -1
  117. package/dist/src/suggestions/types.js +0 -21
  118. package/dist/src/suggestions/types.js.map +0 -1
  119. package/dist/src/tools/analyze.d.ts +0 -151
  120. package/dist/src/tools/analyze.d.ts.map +0 -1
  121. package/dist/src/tools/analyze.js +0 -205
  122. package/dist/src/tools/analyze.js.map +0 -1
  123. package/dist/src/tools/compare.d.ts +0 -149
  124. package/dist/src/tools/compare.d.ts.map +0 -1
  125. package/dist/src/tools/compare.js +0 -464
  126. package/dist/src/tools/compare.js.map +0 -1
  127. package/dist/src/tools/get-skill.d.ts +0 -107
  128. package/dist/src/tools/get-skill.d.ts.map +0 -1
  129. package/dist/src/tools/get-skill.js +0 -260
  130. package/dist/src/tools/get-skill.js.map +0 -1
  131. package/dist/src/tools/index.d.ts +0 -20
  132. package/dist/src/tools/index.d.ts.map +0 -1
  133. package/dist/src/tools/index.js +0 -20
  134. package/dist/src/tools/index.js.map +0 -1
  135. package/dist/src/tools/install.d.ts +0 -122
  136. package/dist/src/tools/install.d.ts.map +0 -1
  137. package/dist/src/tools/install.js +0 -326
  138. package/dist/src/tools/install.js.map +0 -1
  139. package/dist/src/tools/recommend.d.ts +0 -169
  140. package/dist/src/tools/recommend.d.ts.map +0 -1
  141. package/dist/src/tools/recommend.js +0 -357
  142. package/dist/src/tools/recommend.js.map +0 -1
  143. package/dist/src/tools/search.d.ts +0 -114
  144. package/dist/src/tools/search.d.ts.map +0 -1
  145. package/dist/src/tools/search.js +0 -247
  146. package/dist/src/tools/search.js.map +0 -1
  147. package/dist/src/tools/suggest.d.ts +0 -181
  148. package/dist/src/tools/suggest.d.ts.map +0 -1
  149. package/dist/src/tools/suggest.js +0 -310
  150. package/dist/src/tools/suggest.js.map +0 -1
  151. package/dist/src/tools/uninstall.d.ts +0 -123
  152. package/dist/src/tools/uninstall.d.ts.map +0 -1
  153. package/dist/src/tools/uninstall.js +0 -250
  154. package/dist/src/tools/uninstall.js.map +0 -1
  155. package/dist/src/tools/validate.d.ts +0 -122
  156. package/dist/src/tools/validate.d.ts.map +0 -1
  157. package/dist/src/tools/validate.js +0 -497
  158. package/dist/src/tools/validate.js.map +0 -1
  159. package/dist/src/utils/installed-skills.d.ts +0 -101
  160. package/dist/src/utils/installed-skills.d.ts.map +0 -1
  161. package/dist/src/utils/installed-skills.js +0 -220
  162. package/dist/src/utils/installed-skills.js.map +0 -1
  163. package/dist/src/utils/validation.d.ts +0 -95
  164. package/dist/src/utils/validation.d.ts.map +0 -1
  165. package/dist/src/utils/validation.js +0 -186
  166. package/dist/src/utils/validation.js.map +0 -1
  167. package/dist/src/webhooks/index.d.ts +0 -8
  168. package/dist/src/webhooks/index.d.ts.map +0 -1
  169. package/dist/src/webhooks/index.js +0 -9
  170. package/dist/src/webhooks/index.js.map +0 -1
  171. package/dist/src/webhooks/webhook-endpoint.d.ts +0 -149
  172. package/dist/src/webhooks/webhook-endpoint.d.ts.map +0 -1
  173. package/dist/src/webhooks/webhook-endpoint.js +0 -339
  174. package/dist/src/webhooks/webhook-endpoint.js.map +0 -1
  175. package/dist/tests/compare.test.d.ts +0 -6
  176. package/dist/tests/compare.test.d.ts.map +0 -1
  177. package/dist/tests/compare.test.js +0 -225
  178. package/dist/tests/compare.test.js.map +0 -1
  179. package/dist/tests/context/project-detector.test.d.ts +0 -6
  180. package/dist/tests/context/project-detector.test.d.ts.map +0 -1
  181. package/dist/tests/context/project-detector.test.js +0 -719
  182. package/dist/tests/context/project-detector.test.js.map +0 -1
  183. package/dist/tests/e2e/compare.e2e.test.d.ts +0 -10
  184. package/dist/tests/e2e/compare.e2e.test.d.ts.map +0 -1
  185. package/dist/tests/e2e/compare.e2e.test.js +0 -296
  186. package/dist/tests/e2e/compare.e2e.test.js.map +0 -1
  187. package/dist/tests/e2e/install-flow.e2e.test.d.ts +0 -10
  188. package/dist/tests/e2e/install-flow.e2e.test.d.ts.map +0 -1
  189. package/dist/tests/e2e/install-flow.e2e.test.js +0 -229
  190. package/dist/tests/e2e/install-flow.e2e.test.js.map +0 -1
  191. package/dist/tests/e2e/recommend.e2e.test.d.ts +0 -12
  192. package/dist/tests/e2e/recommend.e2e.test.d.ts.map +0 -1
  193. package/dist/tests/e2e/recommend.e2e.test.js +0 -357
  194. package/dist/tests/e2e/recommend.e2e.test.js.map +0 -1
  195. package/dist/tests/e2e/skill-flow.e2e.test.d.ts +0 -10
  196. package/dist/tests/e2e/skill-flow.e2e.test.d.ts.map +0 -1
  197. package/dist/tests/e2e/skill-flow.e2e.test.js +0 -311
  198. package/dist/tests/e2e/skill-flow.e2e.test.js.map +0 -1
  199. package/dist/tests/e2e/suggest.e2e.test.d.ts +0 -13
  200. package/dist/tests/e2e/suggest.e2e.test.d.ts.map +0 -1
  201. package/dist/tests/e2e/suggest.e2e.test.js +0 -367
  202. package/dist/tests/e2e/suggest.e2e.test.js.map +0 -1
  203. package/dist/tests/e2e/utils/baseline-collector.d.ts +0 -107
  204. package/dist/tests/e2e/utils/baseline-collector.d.ts.map +0 -1
  205. package/dist/tests/e2e/utils/baseline-collector.js +0 -211
  206. package/dist/tests/e2e/utils/baseline-collector.js.map +0 -1
  207. package/dist/tests/e2e/utils/hardcoded-detector.d.ts +0 -46
  208. package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +0 -1
  209. package/dist/tests/e2e/utils/hardcoded-detector.js +0 -255
  210. package/dist/tests/e2e/utils/hardcoded-detector.js.map +0 -1
  211. package/dist/tests/e2e/utils/index.d.ts +0 -7
  212. package/dist/tests/e2e/utils/index.d.ts.map +0 -1
  213. package/dist/tests/e2e/utils/index.js +0 -7
  214. package/dist/tests/e2e/utils/index.js.map +0 -1
  215. package/dist/tests/e2e/utils/linear-reporter.d.ts +0 -60
  216. package/dist/tests/e2e/utils/linear-reporter.d.ts.map +0 -1
  217. package/dist/tests/e2e/utils/linear-reporter.js +0 -232
  218. package/dist/tests/e2e/utils/linear-reporter.js.map +0 -1
  219. package/dist/tests/health.test.d.ts +0 -9
  220. package/dist/tests/health.test.d.ts.map +0 -1
  221. package/dist/tests/health.test.js +0 -308
  222. package/dist/tests/health.test.js.map +0 -1
  223. package/dist/tests/integration/analyze.integration.test.d.ts +0 -2
  224. package/dist/tests/integration/analyze.integration.test.d.ts.map +0 -1
  225. package/dist/tests/integration/analyze.integration.test.js +0 -244
  226. package/dist/tests/integration/analyze.integration.test.js.map +0 -1
  227. package/dist/tests/integration/compare.integration.test.d.ts +0 -2
  228. package/dist/tests/integration/compare.integration.test.d.ts.map +0 -1
  229. package/dist/tests/integration/compare.integration.test.js +0 -120
  230. package/dist/tests/integration/compare.integration.test.js.map +0 -1
  231. package/dist/tests/integration/fixtures/test-skills.d.ts +0 -62
  232. package/dist/tests/integration/fixtures/test-skills.d.ts.map +0 -1
  233. package/dist/tests/integration/fixtures/test-skills.js +0 -644
  234. package/dist/tests/integration/fixtures/test-skills.js.map +0 -1
  235. package/dist/tests/integration/get-skill.integration.test.d.ts +0 -6
  236. package/dist/tests/integration/get-skill.integration.test.d.ts.map +0 -1
  237. package/dist/tests/integration/get-skill.integration.test.js +0 -203
  238. package/dist/tests/integration/get-skill.integration.test.js.map +0 -1
  239. package/dist/tests/integration/github-api.integration.test.d.ts +0 -14
  240. package/dist/tests/integration/github-api.integration.test.d.ts.map +0 -1
  241. package/dist/tests/integration/github-api.integration.test.js +0 -190
  242. package/dist/tests/integration/github-api.integration.test.js.map +0 -1
  243. package/dist/tests/integration/install.integration.test.d.ts +0 -6
  244. package/dist/tests/integration/install.integration.test.d.ts.map +0 -1
  245. package/dist/tests/integration/install.integration.test.js +0 -282
  246. package/dist/tests/integration/install.integration.test.js.map +0 -1
  247. package/dist/tests/integration/recommend.integration.test.d.ts +0 -2
  248. package/dist/tests/integration/recommend.integration.test.d.ts.map +0 -1
  249. package/dist/tests/integration/recommend.integration.test.js +0 -217
  250. package/dist/tests/integration/recommend.integration.test.js.map +0 -1
  251. package/dist/tests/integration/search.integration.test.d.ts +0 -6
  252. package/dist/tests/integration/search.integration.test.d.ts.map +0 -1
  253. package/dist/tests/integration/search.integration.test.js +0 -229
  254. package/dist/tests/integration/search.integration.test.js.map +0 -1
  255. package/dist/tests/integration/setup.d.ts +0 -74
  256. package/dist/tests/integration/setup.d.ts.map +0 -1
  257. package/dist/tests/integration/setup.js +0 -131
  258. package/dist/tests/integration/setup.js.map +0 -1
  259. package/dist/tests/integration/uninstall.integration.test.d.ts +0 -6
  260. package/dist/tests/integration/uninstall.integration.test.d.ts.map +0 -1
  261. package/dist/tests/integration/uninstall.integration.test.js +0 -296
  262. package/dist/tests/integration/uninstall.integration.test.js.map +0 -1
  263. package/dist/tests/integration/validate.integration.test.d.ts +0 -2
  264. package/dist/tests/integration/validate.integration.test.d.ts.map +0 -1
  265. package/dist/tests/integration/validate.integration.test.js +0 -181
  266. package/dist/tests/integration/validate.integration.test.js.map +0 -1
  267. package/dist/tests/onboarding/first-run.test.d.ts +0 -7
  268. package/dist/tests/onboarding/first-run.test.d.ts.map +0 -1
  269. package/dist/tests/onboarding/first-run.test.js +0 -264
  270. package/dist/tests/onboarding/first-run.test.js.map +0 -1
  271. package/dist/tests/performance/search-performance.test.d.ts +0 -10
  272. package/dist/tests/performance/search-performance.test.d.ts.map +0 -1
  273. package/dist/tests/performance/search-performance.test.js +0 -222
  274. package/dist/tests/performance/search-performance.test.js.map +0 -1
  275. package/dist/tests/recommend.test.d.ts +0 -6
  276. package/dist/tests/recommend.test.d.ts.map +0 -1
  277. package/dist/tests/recommend.test.js +0 -210
  278. package/dist/tests/recommend.test.js.map +0 -1
  279. package/dist/tests/suggestions/suggestion-engine.test.d.ts +0 -6
  280. package/dist/tests/suggestions/suggestion-engine.test.d.ts.map +0 -1
  281. package/dist/tests/suggestions/suggestion-engine.test.js +0 -448
  282. package/dist/tests/suggestions/suggestion-engine.test.js.map +0 -1
  283. package/dist/tests/test-utils.d.ts +0 -74
  284. package/dist/tests/test-utils.d.ts.map +0 -1
  285. package/dist/tests/test-utils.js +0 -98
  286. package/dist/tests/test-utils.js.map +0 -1
  287. package/dist/tests/tools.test.d.ts +0 -5
  288. package/dist/tests/tools.test.d.ts.map +0 -1
  289. package/dist/tests/tools.test.js +0 -138
  290. package/dist/tests/tools.test.js.map +0 -1
  291. package/dist/tests/unit/installed-skills.test.d.ts +0 -6
  292. package/dist/tests/unit/installed-skills.test.d.ts.map +0 -1
  293. package/dist/tests/unit/installed-skills.test.js +0 -285
  294. package/dist/tests/unit/installed-skills.test.js.map +0 -1
  295. package/dist/tests/unit/logger.test.d.ts +0 -6
  296. package/dist/tests/unit/logger.test.d.ts.map +0 -1
  297. package/dist/tests/unit/logger.test.js +0 -281
  298. package/dist/tests/unit/logger.test.js.map +0 -1
  299. package/dist/tests/validate.test.d.ts +0 -5
  300. package/dist/tests/validate.test.d.ts.map +0 -1
  301. package/dist/tests/validate.test.js +0 -303
  302. package/dist/tests/validate.test.js.map +0 -1
  303. package/dist/tests/webhooks/proxy-trust.security.test.d.ts +0 -8
  304. package/dist/tests/webhooks/proxy-trust.security.test.d.ts.map +0 -1
  305. package/dist/tests/webhooks/proxy-trust.security.test.js +0 -145
  306. package/dist/tests/webhooks/proxy-trust.security.test.js.map +0 -1
  307. package/dist/tests/webhooks/rate-limiter.security.test.d.ts +0 -8
  308. package/dist/tests/webhooks/rate-limiter.security.test.d.ts.map +0 -1
  309. package/dist/tests/webhooks/rate-limiter.security.test.js +0 -122
  310. package/dist/tests/webhooks/rate-limiter.security.test.js.map +0 -1
  311. package/dist/vitest.config.d.ts +0 -6
  312. package/dist/vitest.config.d.ts.map +0 -1
  313. package/dist/vitest.config.js +0 -13
  314. package/dist/vitest.config.js.map +0 -1
@@ -1,319 +0,0 @@
1
- /**
2
- * SMI-1060: Graceful Degradation Middleware
3
- *
4
- * Middleware that wraps tool handlers with graceful degradation,
5
- * returning helpful messages instead of hard errors when features
6
- * are unavailable.
7
- */
8
- import { createLicenseMiddleware, getRequiredFeature, } from './license.js';
9
- import { TOOL_FEATURES, FEATURE_DISPLAY_NAMES, FEATURE_TIERS, } from './toolFeatureMapping.js';
10
- // ============================================================================
11
- // Constants
12
- // ============================================================================
13
- const BASE_URL = 'https://skillsmith.app';
14
- /**
15
- * Pricing information for each tier
16
- */
17
- const TIER_PRICING = {
18
- community: '$0/month',
19
- individual: '$9.99/month',
20
- team: '$25/user/month',
21
- enterprise: '$55/user/month',
22
- };
23
- /**
24
- * Feature descriptions for upgrade prompts
25
- */
26
- const FEATURE_DESCRIPTIONS = {
27
- // Individual tier features
28
- basic_analytics: 'Track your personal skill usage and activity',
29
- email_support: 'Get help from our support team via email',
30
- // Team tier features
31
- private_skills: 'Create and manage private skills for your organization',
32
- team_workspaces: 'Collaborate with your team on shared skill collections',
33
- usage_analytics: 'Track skill usage and adoption across your organization',
34
- priority_support: 'Get faster response times from our support team',
35
- // Enterprise tier features
36
- sso_saml: 'Integrate with your identity provider for secure single sign-on',
37
- rbac: 'Fine-grained access control with custom roles and permissions',
38
- audit_logging: 'Comprehensive audit trail for compliance and security',
39
- siem_export: 'Export audit logs to your SIEM platform for centralized monitoring',
40
- compliance_reports: 'Generate compliance reports for SOC2, HIPAA, and other standards',
41
- private_registry: 'Host a private registry of skills for your organization',
42
- // Additional features
43
- custom_integrations: 'Build custom integrations with your tools',
44
- advanced_analytics: 'In-depth usage analytics and reporting',
45
- };
46
- // ============================================================================
47
- // Default Logger
48
- // ============================================================================
49
- /**
50
- * Default no-op logger
51
- */
52
- const noopLogger = {
53
- log: () => { },
54
- };
55
- /**
56
- * Console logger for degradation events
57
- */
58
- export const consoleDegradationLogger = {
59
- log: (event) => {
60
- const prefix = event.action === 'degraded' ? '[UPGRADE REQUIRED]' : `[${event.action.toUpperCase()}]`;
61
- console.log(`${prefix} ${event.toolName}: ${event.message || 'No message'}`);
62
- },
63
- };
64
- // ============================================================================
65
- // Upgrade Message Generators
66
- // ============================================================================
67
- /**
68
- * Create an upgrade prompt for a denied feature
69
- */
70
- function createUpgradePrompt(feature, _currentTier) {
71
- const displayName = FEATURE_DISPLAY_NAMES[feature];
72
- const requiredTier = FEATURE_TIERS[feature];
73
- const pricing = TIER_PRICING[requiredTier];
74
- return `${displayName} requires ${requiredTier.charAt(0).toUpperCase() + requiredTier.slice(1)} tier (${pricing}). Upgrade at ${BASE_URL}/upgrade?tier=${requiredTier}&feature=${feature}`;
75
- }
76
- /**
77
- * Create a detailed upgrade message with feature description
78
- */
79
- function createDetailedUpgradeMessage(feature, currentTier) {
80
- const displayName = FEATURE_DISPLAY_NAMES[feature];
81
- const description = FEATURE_DESCRIPTIONS[feature];
82
- const requiredTier = FEATURE_TIERS[feature];
83
- const pricing = TIER_PRICING[requiredTier];
84
- const currentPricing = TIER_PRICING[currentTier];
85
- return [
86
- `Feature Unavailable: ${displayName}`,
87
- '',
88
- description,
89
- '',
90
- `Current tier: ${currentTier.charAt(0).toUpperCase() + currentTier.slice(1)} (${currentPricing})`,
91
- `Required tier: ${requiredTier.charAt(0).toUpperCase() + requiredTier.slice(1)} (${pricing})`,
92
- '',
93
- `Upgrade to unlock: ${BASE_URL}/upgrade?tier=${requiredTier}&feature=${feature}`,
94
- `Compare plans: ${BASE_URL}/pricing?highlight=${feature}&current=${currentTier}`,
95
- ].join('\n');
96
- }
97
- /**
98
- * Get tier comparison message
99
- */
100
- export function getTierComparisonMessage() {
101
- return [
102
- 'Skillsmith Pricing Tiers',
103
- '========================',
104
- '',
105
- 'Community ($0/month)',
106
- '----------------------------------------',
107
- ' - Core features: search, install, recommend, validate, compare',
108
- '',
109
- 'Team ($25/user/month)',
110
- '----------------------------------------',
111
- ' - Private Skills',
112
- ' - Team Workspaces',
113
- ' - Priority Support',
114
- '',
115
- 'Enterprise ($55/user/month)',
116
- '----------------------------------------',
117
- ' - SSO/SAML Integration',
118
- ' - Role-Based Access Control',
119
- ' - Audit Logging',
120
- ' - Custom Integrations',
121
- ' - Advanced Analytics',
122
- '',
123
- `Learn more: ${BASE_URL}/pricing`,
124
- ].join('\n');
125
- }
126
- // ============================================================================
127
- // Graceful Degradation Response
128
- // ============================================================================
129
- /**
130
- * Create a graceful degradation response for an unavailable feature
131
- */
132
- function createGracefulDegradationResponse(toolName, feature, currentTier, _validationResult) {
133
- const requiredTier = FEATURE_TIERS[feature];
134
- const displayName = FEATURE_DISPLAY_NAMES[feature];
135
- const response = {
136
- status: 'upgrade_required',
137
- feature: {
138
- id: feature,
139
- name: displayName,
140
- description: FEATURE_DESCRIPTIONS[feature],
141
- },
142
- tiers: {
143
- current: {
144
- id: currentTier,
145
- pricing: TIER_PRICING[currentTier],
146
- },
147
- required: {
148
- id: requiredTier,
149
- pricing: TIER_PRICING[requiredTier],
150
- },
151
- },
152
- upgrade: {
153
- message: createUpgradePrompt(feature, currentTier),
154
- detailedMessage: createDetailedUpgradeMessage(feature, currentTier),
155
- url: `${BASE_URL}/upgrade?tier=${requiredTier}&feature=${feature}&tool=${toolName}`,
156
- pricingUrl: `${BASE_URL}/pricing?highlight=${feature}&current=${currentTier}`,
157
- },
158
- alternatives: getCommunityAlternatives(toolName),
159
- };
160
- return {
161
- content: [
162
- {
163
- type: 'text',
164
- text: JSON.stringify(response, null, 2),
165
- },
166
- ],
167
- isError: false,
168
- _meta: {
169
- upgradeRequired: true,
170
- feature,
171
- requiredTier,
172
- upgradeUrl: response.upgrade.url,
173
- },
174
- };
175
- }
176
- /**
177
- * Get community-tier alternatives for a premium tool
178
- */
179
- function getCommunityAlternatives(toolName) {
180
- // Map of premium tools to their community alternatives
181
- const alternatives = {
182
- publish_private: ['search', 'get_skill', 'install_skill'],
183
- team_workspace: ['search', 'install_skill'],
184
- share_skill: ['search', 'skill_compare'],
185
- configure_sso: ['search'],
186
- audit_export: ['search'],
187
- audit_query: ['search'],
188
- rbac_manage: ['search'],
189
- rbac_assign_role: ['search'],
190
- rbac_create_policy: ['search'],
191
- analytics_dashboard: ['search', 'skill_recommend'],
192
- usage_report: ['search'],
193
- webhook_configure: ['search'],
194
- api_key_manage: ['search'],
195
- };
196
- return alternatives[toolName] || ['search', 'get_skill', 'install_skill'];
197
- }
198
- // ============================================================================
199
- // Middleware Factory
200
- // ============================================================================
201
- /**
202
- * Create the degradation middleware
203
- *
204
- * This middleware wraps tool handlers to provide graceful degradation
205
- * when features are unavailable due to license restrictions.
206
- *
207
- * @param options - Middleware configuration options
208
- * @returns Middleware wrapper function
209
- *
210
- * @example
211
- * ```typescript
212
- * const middleware = createDegradationMiddleware({
213
- * logger: consoleDegradationLogger,
214
- * verbose: true,
215
- * });
216
- *
217
- * const wrappedHandler = middleware.wrapHandler('audit_query', originalHandler);
218
- * ```
219
- */
220
- export function createDegradationMiddleware(options = {}) {
221
- const licenseMiddleware = options.licenseMiddleware ?? createLicenseMiddleware();
222
- const logger = options.logger ?? noopLogger;
223
- /**
224
- * Wrap a tool handler with graceful degradation
225
- */
226
- async function wrapHandler(toolName, handler, request) {
227
- // Check if tool requires a license
228
- const requiredFeature = getRequiredFeature(toolName);
229
- // Community tools always pass through
230
- if (requiredFeature === null) {
231
- logger.log({
232
- timestamp: new Date().toISOString(),
233
- toolName,
234
- feature: null,
235
- tier: 'community',
236
- action: 'allowed',
237
- message: 'Community tool - no license required',
238
- });
239
- return handler(request);
240
- }
241
- // Check license for the required feature
242
- const validationResult = await licenseMiddleware.checkFeature(requiredFeature);
243
- if (validationResult.valid) {
244
- const licenseInfo = await licenseMiddleware.getLicenseInfo();
245
- logger.log({
246
- timestamp: new Date().toISOString(),
247
- toolName,
248
- feature: requiredFeature,
249
- tier: licenseInfo?.tier ?? 'community',
250
- action: 'allowed',
251
- message: 'Feature available in license',
252
- });
253
- return handler(request);
254
- }
255
- // Feature not available - return graceful degradation response
256
- const licenseInfo = await licenseMiddleware.getLicenseInfo();
257
- const currentTier = licenseInfo?.tier ?? 'community';
258
- logger.log({
259
- timestamp: new Date().toISOString(),
260
- toolName,
261
- feature: requiredFeature,
262
- tier: currentTier,
263
- action: 'degraded',
264
- message: `Feature ${requiredFeature} requires upgrade`,
265
- });
266
- return createGracefulDegradationResponse(toolName, requiredFeature, currentTier, validationResult);
267
- }
268
- /**
269
- * Create a wrapped handler function
270
- */
271
- function createWrappedHandler(toolName, handler) {
272
- return async (request) => {
273
- return wrapHandler(toolName, handler, request);
274
- };
275
- }
276
- /**
277
- * Check if a tool would be degraded for the current license
278
- */
279
- async function wouldDegrade(toolName) {
280
- const requiredFeature = getRequiredFeature(toolName);
281
- if (requiredFeature === null) {
282
- return false;
283
- }
284
- const validationResult = await licenseMiddleware.checkFeature(requiredFeature);
285
- return !validationResult.valid;
286
- }
287
- /**
288
- * Get degradation status for all tools
289
- */
290
- async function getDegradationStatus() {
291
- const status = new Map();
292
- for (const toolName of Object.keys(TOOL_FEATURES)) {
293
- status.set(toolName, await wouldDegrade(toolName));
294
- }
295
- return status;
296
- }
297
- /**
298
- * Get upgrade prompt for a tool
299
- */
300
- async function getUpgradePrompt(toolName) {
301
- const requiredFeature = getRequiredFeature(toolName);
302
- if (requiredFeature === null) {
303
- return null;
304
- }
305
- const licenseInfo = await licenseMiddleware.getLicenseInfo();
306
- const currentTier = licenseInfo?.tier ?? 'community';
307
- return createUpgradePrompt(requiredFeature, currentTier);
308
- }
309
- return {
310
- wrapHandler,
311
- createWrappedHandler,
312
- wouldDegrade,
313
- getDegradationStatus,
314
- getUpgradePrompt,
315
- getTierComparisonMessage,
316
- licenseMiddleware,
317
- };
318
- }
319
- //# sourceMappingURL=degradation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"degradation.js","sourceRoot":"","sources":["../../../src/middleware/degradation.ts"],"names":[],"mappings":"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"}
@@ -1,119 +0,0 @@
1
- /**
2
- * SMI-1061: MCP Error Formatter for License Errors
3
- *
4
- * Formats license errors into MCP protocol-compliant error responses
5
- * with actionable information for clients.
6
- */
7
- /**
8
- * MCP-formatted error response content
9
- */
10
- export interface MCPErrorContent {
11
- type: 'text';
12
- text: string;
13
- }
14
- /**
15
- * MCP-formatted error response
16
- */
17
- export interface MCPErrorResponse {
18
- content: MCPErrorContent[];
19
- isError: true;
20
- _meta?: {
21
- upgradeUrl?: string;
22
- errorCode?: string;
23
- recoverable?: boolean;
24
- };
25
- }
26
- /**
27
- * License error details structure (mirrors the enterprise package)
28
- */
29
- export interface LicenseErrorDetails {
30
- code: string;
31
- message: string;
32
- feature?: string;
33
- currentTier?: string;
34
- requiredTier?: string;
35
- upgradeUrl?: string;
36
- context?: Record<string, unknown>;
37
- timestamp?: string;
38
- }
39
- /**
40
- * Interface for license errors (duck-typed for optional enterprise package)
41
- */
42
- export interface LicenseErrorLike {
43
- code?: string;
44
- message: string;
45
- feature?: string;
46
- currentTier?: string;
47
- requiredTier?: string;
48
- upgradeUrl?: string;
49
- context?: Record<string, unknown>;
50
- timestamp?: Date;
51
- toJSON?: () => Record<string, unknown>;
52
- }
53
- /**
54
- * Format a license error into an MCP-compliant error response
55
- *
56
- * @param error - The license error to format
57
- * @returns MCP-formatted error response
58
- *
59
- * @example
60
- * ```typescript
61
- * import { formatLicenseError } from './middleware/errorFormatter.js';
62
- *
63
- * try {
64
- * await checkFeature('audit_logging');
65
- * } catch (error) {
66
- * if (isLicenseError(error)) {
67
- * return formatLicenseError(error);
68
- * }
69
- * throw error;
70
- * }
71
- * ```
72
- */
73
- export declare function formatLicenseError(error: LicenseErrorLike): MCPErrorResponse;
74
- /**
75
- * Format a generic error for MCP response
76
- *
77
- * Use this for non-license errors that still need MCP formatting.
78
- */
79
- export declare function formatGenericError(error: Error, code?: string): MCPErrorResponse;
80
- /**
81
- * Get a user-friendly message for an error code
82
- */
83
- export declare function getUserFriendlyMessage(code: string): string;
84
- /**
85
- * Configuration for upgrade URLs
86
- */
87
- export interface UpgradeUrlConfig {
88
- baseUrl?: string;
89
- includeFeature?: boolean;
90
- includeTiers?: boolean;
91
- includeSource?: boolean;
92
- }
93
- /**
94
- * Generate a customized upgrade URL with tracking parameters
95
- */
96
- export declare function generateUpgradeUrl(error: LicenseErrorLike, config?: Partial<UpgradeUrlConfig>): string;
97
- /**
98
- * Build an upgrade required response
99
- *
100
- * Use this when a feature requires an upgrade but isn't a full error.
101
- */
102
- export declare function buildUpgradeRequiredResponse(feature: string, currentTier: string, requiredTier: string): MCPErrorResponse;
103
- /**
104
- * Build a license expired response with renewal URL
105
- */
106
- export declare function buildLicenseExpiredResponse(expiredAt?: Date): MCPErrorResponse;
107
- /**
108
- * Build a quota exceeded response
109
- */
110
- export declare function buildQuotaExceededResponse(quotaType: string, current: number, max: number): MCPErrorResponse;
111
- /**
112
- * Check if an object looks like a license error
113
- */
114
- export declare function isLicenseErrorLike(error: unknown): error is LicenseErrorLike;
115
- /**
116
- * Safely convert any error to MCP format
117
- */
118
- export declare function safeFormatError(error: unknown): MCPErrorResponse;
119
- //# sourceMappingURL=errorFormatter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errorFormatter.d.ts","sourceRoot":"","sources":["../../../src/middleware/errorFormatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,OAAO,EAAE,IAAI,CAAA;IACb,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,WAAW,CAAC,EAAE,OAAO,CAAA;KACtB,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACvC;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAsD5E;AAYD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,SAAmB,GAAG,gBAAgB,CAmB1F;AAsBD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AASD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACrC,MAAM,CA0BR;AAMD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,gBAAgB,CAgClB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,gBAAgB,CA8B9E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,gBAAgB,CAgClB;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAiB5E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAUhE"}