@structured-world/gitlab-mcp 6.62.1 → 6.62.2

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 (414) hide show
  1. package/README.md +1 -1
  2. package/dist/generated/prisma/client.js.map +1 -1
  3. package/dist/generated/prisma/internal/class.js +2 -2
  4. package/dist/generated/prisma/internal/class.js.map +1 -1
  5. package/dist/generated/prisma/internal/prismaNamespace.js +2 -2
  6. package/dist/src/cli/docker/container-runtime.d.ts +1 -1
  7. package/dist/src/cli/docker/container-runtime.js +14 -14
  8. package/dist/src/cli/docker/docker-command.d.ts +1 -1
  9. package/dist/src/cli/docker/docker-command.js +113 -113
  10. package/dist/src/cli/docker/docker-command.js.map +1 -1
  11. package/dist/src/cli/docker/docker-utils.d.ts +3 -3
  12. package/dist/src/cli/docker/docker-utils.js +74 -74
  13. package/dist/src/cli/docker/docker-utils.js.map +1 -1
  14. package/dist/src/cli/docker/index.d.ts +4 -4
  15. package/dist/src/cli/docker/types.d.ts +3 -3
  16. package/dist/src/cli/docker/types.js +5 -5
  17. package/dist/src/cli/init/browser.js +2 -2
  18. package/dist/src/cli/init/config-generator.d.ts +2 -2
  19. package/dist/src/cli/init/config-generator.js +22 -22
  20. package/dist/src/cli/init/connection.d.ts +1 -1
  21. package/dist/src/cli/init/connection.js +17 -17
  22. package/dist/src/cli/init/index.d.ts +4 -4
  23. package/dist/src/cli/init/types.d.ts +3 -3
  24. package/dist/src/cli/init/types.js +36 -36
  25. package/dist/src/cli/init/wizard.js +80 -80
  26. package/dist/src/cli/init/wizard.js.map +1 -1
  27. package/dist/src/cli/inject-tool-refs.js +47 -47
  28. package/dist/src/cli/inject-tool-refs.js.map +1 -1
  29. package/dist/src/cli/install/backup.d.ts +1 -1
  30. package/dist/src/cli/install/backup.js +3 -3
  31. package/dist/src/cli/install/detector.d.ts +2 -2
  32. package/dist/src/cli/install/detector.js +18 -18
  33. package/dist/src/cli/install/detector.js.map +1 -1
  34. package/dist/src/cli/install/index.d.ts +5 -5
  35. package/dist/src/cli/install/install-command.d.ts +2 -2
  36. package/dist/src/cli/install/install-command.js +68 -68
  37. package/dist/src/cli/install/install-command.js.map +1 -1
  38. package/dist/src/cli/install/installers.d.ts +2 -2
  39. package/dist/src/cli/install/installers.js +55 -55
  40. package/dist/src/cli/install/installers.js.map +1 -1
  41. package/dist/src/cli/install/types.d.ts +4 -4
  42. package/dist/src/cli/install/types.js +48 -48
  43. package/dist/src/cli/instances/index.d.ts +2 -2
  44. package/dist/src/cli/instances/instances-command.d.ts +1 -1
  45. package/dist/src/cli/instances/instances-command.js +65 -65
  46. package/dist/src/cli/instances/instances-command.js.map +1 -1
  47. package/dist/src/cli/list-tools.js +396 -396
  48. package/dist/src/cli/list-tools.js.map +1 -1
  49. package/dist/src/cli/setup/discovery.d.ts +1 -1
  50. package/dist/src/cli/setup/discovery.js +10 -10
  51. package/dist/src/cli/setup/discovery.js.map +1 -1
  52. package/dist/src/cli/setup/flows/configure-existing.d.ts +1 -1
  53. package/dist/src/cli/setup/flows/configure-existing.js +57 -57
  54. package/dist/src/cli/setup/flows/configure-existing.js.map +1 -1
  55. package/dist/src/cli/setup/flows/local-setup.d.ts +1 -1
  56. package/dist/src/cli/setup/flows/local-setup.js +51 -51
  57. package/dist/src/cli/setup/flows/local-setup.js.map +1 -1
  58. package/dist/src/cli/setup/flows/server-setup.d.ts +1 -1
  59. package/dist/src/cli/setup/flows/server-setup.js +50 -50
  60. package/dist/src/cli/setup/flows/server-setup.js.map +1 -1
  61. package/dist/src/cli/setup/flows/tool-selection.d.ts +1 -1
  62. package/dist/src/cli/setup/flows/tool-selection.js +94 -94
  63. package/dist/src/cli/setup/flows/tool-selection.js.map +1 -1
  64. package/dist/src/cli/setup/index.d.ts +4 -4
  65. package/dist/src/cli/setup/presets.d.ts +1 -1
  66. package/dist/src/cli/setup/presets.js +157 -157
  67. package/dist/src/cli/setup/presets.js.map +1 -1
  68. package/dist/src/cli/setup/types.d.ts +7 -7
  69. package/dist/src/cli/setup/wizard.d.ts +1 -1
  70. package/dist/src/cli/setup/wizard.js +25 -25
  71. package/dist/src/cli/utils/index.d.ts +1 -1
  72. package/dist/src/cli/utils/path-utils.js +3 -3
  73. package/dist/src/cli-utils.d.ts +2 -2
  74. package/dist/src/cli-utils.js +46 -46
  75. package/dist/src/config/index.d.ts +4 -4
  76. package/dist/src/config/instances-loader.d.ts +3 -3
  77. package/dist/src/config/instances-loader.js +53 -53
  78. package/dist/src/config/instances-loader.js.map +1 -1
  79. package/dist/src/config/instances-schema.d.ts +1 -1
  80. package/dist/src/config/instances-schema.js +33 -33
  81. package/dist/src/config/instances-schema.js.map +1 -1
  82. package/dist/src/config.d.ts +4 -4
  83. package/dist/src/config.js +89 -89
  84. package/dist/src/config.js.map +1 -1
  85. package/dist/src/dashboard/handler.d.ts +2 -2
  86. package/dist/src/dashboard/handler.js +7 -7
  87. package/dist/src/dashboard/html-template.d.ts +1 -1
  88. package/dist/src/dashboard/html-template.js +44 -44
  89. package/dist/src/dashboard/html-template.js.map +1 -1
  90. package/dist/src/dashboard/index.d.ts +4 -4
  91. package/dist/src/dashboard/metrics.d.ts +3 -3
  92. package/dist/src/dashboard/metrics.js +42 -42
  93. package/dist/src/discovery/auto.d.ts +3 -3
  94. package/dist/src/discovery/auto.js +28 -28
  95. package/dist/src/discovery/git-remote.d.ts +2 -2
  96. package/dist/src/discovery/git-remote.js +18 -18
  97. package/dist/src/discovery/index.d.ts +3 -3
  98. package/dist/src/discovery/profile-matcher.d.ts +2 -2
  99. package/dist/src/discovery/profile-matcher.js +8 -8
  100. package/dist/src/discovery/profile-matcher.js.map +1 -1
  101. package/dist/src/entities/context/context-manager.d.ts +3 -3
  102. package/dist/src/entities/context/context-manager.js +34 -34
  103. package/dist/src/entities/context/context-manager.js.map +1 -1
  104. package/dist/src/entities/context/handlers.d.ts +2 -2
  105. package/dist/src/entities/context/handlers.js +8 -8
  106. package/dist/src/entities/context/index.d.ts +8 -8
  107. package/dist/src/entities/context/index.js +1 -1
  108. package/dist/src/entities/context/registry.d.ts +1 -1
  109. package/dist/src/entities/context/registry.js +4 -4
  110. package/dist/src/entities/context/schema.d.ts +1 -1
  111. package/dist/src/entities/context/schema.js +19 -19
  112. package/dist/src/entities/context/types.d.ts +9 -9
  113. package/dist/src/entities/context/whoami.d.ts +1 -1
  114. package/dist/src/entities/context/whoami.js +31 -31
  115. package/dist/src/entities/context/whoami.js.map +1 -1
  116. package/dist/src/entities/core/index.d.ts +5 -5
  117. package/dist/src/entities/core/index.js +1 -1
  118. package/dist/src/entities/core/registry.d.ts +1 -1
  119. package/dist/src/entities/core/registry.js +194 -194
  120. package/dist/src/entities/core/registry.js.map +1 -1
  121. package/dist/src/entities/core/schema-readonly.d.ts +1 -1
  122. package/dist/src/entities/core/schema-readonly.js +117 -117
  123. package/dist/src/entities/core/schema.d.ts +1 -1
  124. package/dist/src/entities/core/schema.js +67 -67
  125. package/dist/src/entities/files/index.d.ts +5 -5
  126. package/dist/src/entities/files/index.js +1 -1
  127. package/dist/src/entities/files/registry.d.ts +1 -1
  128. package/dist/src/entities/files/registry.js +45 -45
  129. package/dist/src/entities/files/registry.js.map +1 -1
  130. package/dist/src/entities/files/schema-readonly.d.ts +1 -1
  131. package/dist/src/entities/files/schema-readonly.js +13 -13
  132. package/dist/src/entities/files/schema.d.ts +1 -1
  133. package/dist/src/entities/files/schema.js +29 -29
  134. package/dist/src/entities/index.d.ts +17 -17
  135. package/dist/src/entities/integrations/index.d.ts +4 -4
  136. package/dist/src/entities/integrations/registry.d.ts +1 -1
  137. package/dist/src/entities/integrations/registry.js +17 -17
  138. package/dist/src/entities/integrations/registry.js.map +1 -1
  139. package/dist/src/entities/integrations/schema-readonly.d.ts +1 -1
  140. package/dist/src/entities/integrations/schema-readonly.js +5 -5
  141. package/dist/src/entities/integrations/schema.d.ts +1 -1
  142. package/dist/src/entities/integrations/schema.js +69 -69
  143. package/dist/src/entities/iterations/index.d.ts +2 -2
  144. package/dist/src/entities/iterations/registry.d.ts +1 -1
  145. package/dist/src/entities/iterations/registry.js +13 -13
  146. package/dist/src/entities/iterations/registry.js.map +1 -1
  147. package/dist/src/entities/iterations/schema-readonly.d.ts +1 -1
  148. package/dist/src/entities/iterations/schema-readonly.js +9 -9
  149. package/dist/src/entities/labels/index.d.ts +5 -5
  150. package/dist/src/entities/labels/index.js +1 -1
  151. package/dist/src/entities/labels/registry.d.ts +1 -1
  152. package/dist/src/entities/labels/registry.js +19 -19
  153. package/dist/src/entities/labels/registry.js.map +1 -1
  154. package/dist/src/entities/labels/schema-readonly.d.ts +1 -1
  155. package/dist/src/entities/labels/schema-readonly.js +8 -8
  156. package/dist/src/entities/labels/schema.d.ts +1 -1
  157. package/dist/src/entities/labels/schema.js +11 -11
  158. package/dist/src/entities/members/index.d.ts +3 -3
  159. package/dist/src/entities/members/registry.d.ts +1 -1
  160. package/dist/src/entities/members/registry.js +26 -26
  161. package/dist/src/entities/members/registry.js.map +1 -1
  162. package/dist/src/entities/members/schema-readonly.d.ts +1 -1
  163. package/dist/src/entities/members/schema-readonly.js +32 -32
  164. package/dist/src/entities/members/schema-readonly.js.map +1 -1
  165. package/dist/src/entities/members/schema.d.ts +1 -1
  166. package/dist/src/entities/members/schema.js +28 -28
  167. package/dist/src/entities/milestones/index.d.ts +5 -5
  168. package/dist/src/entities/milestones/index.js +1 -1
  169. package/dist/src/entities/milestones/registry.d.ts +1 -1
  170. package/dist/src/entities/milestones/registry.js +25 -25
  171. package/dist/src/entities/milestones/registry.js.map +1 -1
  172. package/dist/src/entities/milestones/schema-readonly.d.ts +2 -2
  173. package/dist/src/entities/milestones/schema-readonly.js +15 -15
  174. package/dist/src/entities/milestones/schema.d.ts +1 -1
  175. package/dist/src/entities/milestones/schema.js +16 -16
  176. package/dist/src/entities/milestones/schema.js.map +1 -1
  177. package/dist/src/entities/mrs/index.d.ts +5 -5
  178. package/dist/src/entities/mrs/index.js +1 -1
  179. package/dist/src/entities/mrs/registry.d.ts +1 -1
  180. package/dist/src/entities/mrs/registry.js +102 -102
  181. package/dist/src/entities/mrs/registry.js.map +1 -1
  182. package/dist/src/entities/mrs/schema-readonly.d.ts +1 -1
  183. package/dist/src/entities/mrs/schema-readonly.js +126 -126
  184. package/dist/src/entities/mrs/schema-readonly.js.map +1 -1
  185. package/dist/src/entities/mrs/schema.d.ts +1 -1
  186. package/dist/src/entities/mrs/schema.js +111 -111
  187. package/dist/src/entities/mrs/schema.js.map +1 -1
  188. package/dist/src/entities/pipelines/index.d.ts +5 -5
  189. package/dist/src/entities/pipelines/index.js +1 -1
  190. package/dist/src/entities/pipelines/registry.d.ts +1 -1
  191. package/dist/src/entities/pipelines/registry.js +45 -45
  192. package/dist/src/entities/pipelines/registry.js.map +1 -1
  193. package/dist/src/entities/pipelines/schema-readonly.d.ts +1 -1
  194. package/dist/src/entities/pipelines/schema-readonly.js +73 -73
  195. package/dist/src/entities/pipelines/schema.d.ts +1 -1
  196. package/dist/src/entities/pipelines/schema.js +21 -21
  197. package/dist/src/entities/refs/index.d.ts +3 -3
  198. package/dist/src/entities/refs/registry.d.ts +1 -1
  199. package/dist/src/entities/refs/registry.js +31 -31
  200. package/dist/src/entities/refs/registry.js.map +1 -1
  201. package/dist/src/entities/refs/schema-readonly.d.ts +1 -1
  202. package/dist/src/entities/refs/schema-readonly.js +21 -21
  203. package/dist/src/entities/refs/schema.d.ts +1 -1
  204. package/dist/src/entities/refs/schema.js +56 -56
  205. package/dist/src/entities/releases/index.d.ts +3 -3
  206. package/dist/src/entities/releases/registry.d.ts +1 -1
  207. package/dist/src/entities/releases/registry.js +21 -21
  208. package/dist/src/entities/releases/registry.js.map +1 -1
  209. package/dist/src/entities/releases/schema-readonly.d.ts +1 -1
  210. package/dist/src/entities/releases/schema-readonly.js +13 -13
  211. package/dist/src/entities/releases/schema.d.ts +1 -1
  212. package/dist/src/entities/releases/schema.js +21 -21
  213. package/dist/src/entities/search/index.d.ts +2 -2
  214. package/dist/src/entities/search/registry.d.ts +1 -1
  215. package/dist/src/entities/search/registry.js +13 -13
  216. package/dist/src/entities/search/schema-readonly.d.ts +1 -1
  217. package/dist/src/entities/search/schema-readonly.js +23 -23
  218. package/dist/src/entities/shared.d.ts +1 -1
  219. package/dist/src/entities/shared.js +5 -5
  220. package/dist/src/entities/snippets/index.d.ts +5 -5
  221. package/dist/src/entities/snippets/index.js +1 -1
  222. package/dist/src/entities/snippets/registry.d.ts +1 -1
  223. package/dist/src/entities/snippets/registry.js +24 -24
  224. package/dist/src/entities/snippets/registry.js.map +1 -1
  225. package/dist/src/entities/snippets/schema-readonly.d.ts +1 -1
  226. package/dist/src/entities/snippets/schema-readonly.js +11 -11
  227. package/dist/src/entities/snippets/schema.d.ts +1 -1
  228. package/dist/src/entities/snippets/schema.js +27 -27
  229. package/dist/src/entities/snippets/schema.js.map +1 -1
  230. package/dist/src/entities/utils.d.ts +2 -2
  231. package/dist/src/entities/utils.js +8 -8
  232. package/dist/src/entities/utils.js.map +1 -1
  233. package/dist/src/entities/variables/index.d.ts +5 -5
  234. package/dist/src/entities/variables/index.js +1 -1
  235. package/dist/src/entities/variables/registry.d.ts +1 -1
  236. package/dist/src/entities/variables/registry.js +22 -22
  237. package/dist/src/entities/variables/registry.js.map +1 -1
  238. package/dist/src/entities/variables/schema-readonly.d.ts +1 -1
  239. package/dist/src/entities/variables/schema-readonly.js +6 -6
  240. package/dist/src/entities/variables/schema.d.ts +1 -1
  241. package/dist/src/entities/variables/schema.js +21 -21
  242. package/dist/src/entities/variables/schema.js.map +1 -1
  243. package/dist/src/entities/webhooks/index.d.ts +4 -4
  244. package/dist/src/entities/webhooks/registry.d.ts +1 -1
  245. package/dist/src/entities/webhooks/registry.js +29 -29
  246. package/dist/src/entities/webhooks/registry.js.map +1 -1
  247. package/dist/src/entities/webhooks/schema-readonly.d.ts +1 -1
  248. package/dist/src/entities/webhooks/schema-readonly.js +9 -9
  249. package/dist/src/entities/webhooks/schema.d.ts +1 -1
  250. package/dist/src/entities/webhooks/schema.js +59 -59
  251. package/dist/src/entities/wiki/index.d.ts +5 -5
  252. package/dist/src/entities/wiki/index.js +1 -1
  253. package/dist/src/entities/wiki/registry.d.ts +1 -1
  254. package/dist/src/entities/wiki/registry.js +19 -19
  255. package/dist/src/entities/wiki/registry.js.map +1 -1
  256. package/dist/src/entities/wiki/schema-readonly.d.ts +1 -1
  257. package/dist/src/entities/wiki/schema-readonly.js +6 -6
  258. package/dist/src/entities/wiki/schema.d.ts +1 -1
  259. package/dist/src/entities/wiki/schema.js +12 -12
  260. package/dist/src/entities/workitems/index.d.ts +5 -5
  261. package/dist/src/entities/workitems/index.js +1 -1
  262. package/dist/src/entities/workitems/registry.d.ts +1 -1
  263. package/dist/src/entities/workitems/registry.js +101 -101
  264. package/dist/src/entities/workitems/registry.js.map +1 -1
  265. package/dist/src/entities/workitems/schema-readonly.d.ts +1 -1
  266. package/dist/src/entities/workitems/schema-readonly.js +27 -27
  267. package/dist/src/entities/workitems/schema-readonly.js.map +1 -1
  268. package/dist/src/entities/workitems/schema.d.ts +1 -1
  269. package/dist/src/entities/workitems/schema.js +58 -58
  270. package/dist/src/graphql/DynamicWorkItemsQuery.d.ts +2 -2
  271. package/dist/src/graphql/DynamicWorkItemsQuery.js +47 -47
  272. package/dist/src/graphql/DynamicWorkItemsQuery.js.map +1 -1
  273. package/dist/src/graphql/client.d.ts +1 -1
  274. package/dist/src/graphql/client.js +4 -4
  275. package/dist/src/graphql/client.js.map +1 -1
  276. package/dist/src/graphql/index.d.ts +2 -2
  277. package/dist/src/graphql/workItems.d.ts +38 -38
  278. package/dist/src/graphql/workItems.js +30 -30
  279. package/dist/src/handlers.d.ts +1 -1
  280. package/dist/src/handlers.js +55 -55
  281. package/dist/src/handlers.js.map +1 -1
  282. package/dist/src/http-client.js +3 -3
  283. package/dist/src/logger.js +25 -25
  284. package/dist/src/logging/access-log.d.ts +2 -2
  285. package/dist/src/logging/access-log.js +25 -25
  286. package/dist/src/logging/connection-tracker.d.ts +1 -1
  287. package/dist/src/logging/connection-tracker.js +3 -3
  288. package/dist/src/logging/index.d.ts +5 -5
  289. package/dist/src/logging/request-tracker.d.ts +3 -3
  290. package/dist/src/logging/request-tracker.js +4 -4
  291. package/dist/src/logging/types.d.ts +3 -3
  292. package/dist/src/logging/types.js +1 -1
  293. package/dist/src/main.js +28 -28
  294. package/dist/src/middleware/index.d.ts +2 -2
  295. package/dist/src/middleware/oauth-auth.d.ts +1 -1
  296. package/dist/src/middleware/oauth-auth.js +17 -17
  297. package/dist/src/middleware/rate-limiter.d.ts +1 -1
  298. package/dist/src/middleware/rate-limiter.js +32 -32
  299. package/dist/src/oauth/config.d.ts +1 -1
  300. package/dist/src/oauth/config.js +18 -18
  301. package/dist/src/oauth/config.js.map +1 -1
  302. package/dist/src/oauth/endpoints/authorize.d.ts +1 -1
  303. package/dist/src/oauth/endpoints/authorize.js +32 -32
  304. package/dist/src/oauth/endpoints/callback.d.ts +1 -1
  305. package/dist/src/oauth/endpoints/callback.js +26 -26
  306. package/dist/src/oauth/endpoints/index.d.ts +5 -5
  307. package/dist/src/oauth/endpoints/metadata.d.ts +1 -1
  308. package/dist/src/oauth/endpoints/metadata.js +12 -12
  309. package/dist/src/oauth/endpoints/register.d.ts +1 -1
  310. package/dist/src/oauth/endpoints/register.js +9 -9
  311. package/dist/src/oauth/endpoints/token.d.ts +1 -1
  312. package/dist/src/oauth/endpoints/token.js +28 -28
  313. package/dist/src/oauth/gitlab-device-flow.d.ts +2 -2
  314. package/dist/src/oauth/gitlab-device-flow.js +46 -46
  315. package/dist/src/oauth/gitlab-device-flow.js.map +1 -1
  316. package/dist/src/oauth/index.d.ts +10 -10
  317. package/dist/src/oauth/session-store.d.ts +2 -2
  318. package/dist/src/oauth/session-store.js +40 -40
  319. package/dist/src/oauth/session-store.js.map +1 -1
  320. package/dist/src/oauth/storage/factory.d.ts +2 -2
  321. package/dist/src/oauth/storage/factory.js +16 -16
  322. package/dist/src/oauth/storage/file.d.ts +2 -2
  323. package/dist/src/oauth/storage/file.js +22 -22
  324. package/dist/src/oauth/storage/file.js.map +1 -1
  325. package/dist/src/oauth/storage/index.d.ts +5 -5
  326. package/dist/src/oauth/storage/memory.d.ts +2 -2
  327. package/dist/src/oauth/storage/memory.js +18 -18
  328. package/dist/src/oauth/storage/memory.js.map +1 -1
  329. package/dist/src/oauth/storage/postgresql.d.ts +2 -2
  330. package/dist/src/oauth/storage/postgresql.js +11 -11
  331. package/dist/src/oauth/storage/postgresql.js.map +1 -1
  332. package/dist/src/oauth/storage/types.d.ts +3 -3
  333. package/dist/src/oauth/token-context.d.ts +1 -1
  334. package/dist/src/oauth/token-context.js +1 -1
  335. package/dist/src/oauth/token-utils.d.ts +1 -1
  336. package/dist/src/oauth/token-utils.js +20 -20
  337. package/dist/src/oauth/types.d.ts +3 -3
  338. package/dist/src/profiles/applicator.d.ts +1 -1
  339. package/dist/src/profiles/applicator.js +48 -48
  340. package/dist/src/profiles/index.d.ts +5 -5
  341. package/dist/src/profiles/loader.d.ts +3 -3
  342. package/dist/src/profiles/loader.js +25 -25
  343. package/dist/src/profiles/loader.js.map +1 -1
  344. package/dist/src/profiles/project-loader.d.ts +1 -1
  345. package/dist/src/profiles/project-loader.js +23 -23
  346. package/dist/src/profiles/project-loader.js.map +1 -1
  347. package/dist/src/profiles/scope-enforcer.d.ts +2 -2
  348. package/dist/src/profiles/scope-enforcer.js +25 -25
  349. package/dist/src/profiles/scope-enforcer.js.map +1 -1
  350. package/dist/src/profiles/types.d.ts +2 -2
  351. package/dist/src/profiles/types.js +50 -48
  352. package/dist/src/profiles/types.js.map +1 -1
  353. package/dist/src/registry-manager.d.ts +1 -1
  354. package/dist/src/registry-manager.js +64 -64
  355. package/dist/src/registry-manager.js.map +1 -1
  356. package/dist/src/server.js +136 -136
  357. package/dist/src/server.js.map +1 -1
  358. package/dist/src/services/ConnectionManager.d.ts +5 -5
  359. package/dist/src/services/ConnectionManager.js +45 -45
  360. package/dist/src/services/ConnectionManager.js.map +1 -1
  361. package/dist/src/services/GitLabVersionDetector.d.ts +2 -2
  362. package/dist/src/services/GitLabVersionDetector.js +45 -45
  363. package/dist/src/services/GitLabVersionDetector.js.map +1 -1
  364. package/dist/src/services/InstanceConnectionPool.d.ts +2 -2
  365. package/dist/src/services/InstanceConnectionPool.js +13 -13
  366. package/dist/src/services/InstanceConnectionPool.js.map +1 -1
  367. package/dist/src/services/InstanceRateLimiter.js +6 -6
  368. package/dist/src/services/InstanceRateLimiter.js.map +1 -1
  369. package/dist/src/services/InstanceRegistry.d.ts +4 -4
  370. package/dist/src/services/InstanceRegistry.js +23 -23
  371. package/dist/src/services/InstanceRegistry.js.map +1 -1
  372. package/dist/src/services/NamespaceTierDetector.d.ts +2 -2
  373. package/dist/src/services/NamespaceTierDetector.js +30 -30
  374. package/dist/src/services/NamespaceTierDetector.js.map +1 -1
  375. package/dist/src/services/SchemaIntrospector.d.ts +1 -1
  376. package/dist/src/services/SchemaIntrospector.js +42 -42
  377. package/dist/src/services/SchemaIntrospector.js.map +1 -1
  378. package/dist/src/services/TokenScopeDetector.d.ts +2 -2
  379. package/dist/src/services/TokenScopeDetector.js +80 -80
  380. package/dist/src/services/TokenScopeDetector.js.map +1 -1
  381. package/dist/src/services/ToolAvailability.d.ts +6 -6
  382. package/dist/src/services/ToolAvailability.js +122 -122
  383. package/dist/src/services/ToolAvailability.js.map +1 -1
  384. package/dist/src/services/WidgetAvailability.d.ts +2 -2
  385. package/dist/src/services/WidgetAvailability.js +34 -34
  386. package/dist/src/session-manager.d.ts +3 -2
  387. package/dist/src/session-manager.js +17 -14
  388. package/dist/src/session-manager.js.map +1 -1
  389. package/dist/src/types.js +4 -4
  390. package/dist/src/utils/description-utils.js +4 -4
  391. package/dist/src/utils/description-utils.js.map +1 -1
  392. package/dist/src/utils/error-handler.d.ts +9 -9
  393. package/dist/src/utils/error-handler.js +187 -187
  394. package/dist/src/utils/error-handler.js.map +1 -1
  395. package/dist/src/utils/fetch.js +85 -85
  396. package/dist/src/utils/fetch.js.map +1 -1
  397. package/dist/src/utils/gitlab-api.d.ts +1 -1
  398. package/dist/src/utils/gitlab-api.js +24 -24
  399. package/dist/src/utils/idConversion.js +47 -47
  400. package/dist/src/utils/idConversion.js.map +1 -1
  401. package/dist/src/utils/namespace.d.ts +2 -2
  402. package/dist/src/utils/namespace.js +15 -15
  403. package/dist/src/utils/projectIdentifier.js +4 -4
  404. package/dist/src/utils/request-logger.d.ts +4 -4
  405. package/dist/src/utils/request-logger.js +5 -5
  406. package/dist/src/utils/schema-utils.js +24 -24
  407. package/dist/src/utils/schema-utils.js.map +1 -1
  408. package/dist/src/utils/smart-user-search.d.ts +1 -1
  409. package/dist/src/utils/smart-user-search.js +10 -10
  410. package/dist/src/utils/version.js +1 -1
  411. package/dist/structured-world-gitlab-mcp-6.62.2.tgz +0 -0
  412. package/dist/tsconfig.build.tsbuildinfo +1 -1
  413. package/package.json +18 -21
  414. package/dist/structured-world-gitlab-mcp-6.62.1.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/oauth/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/oauth/config.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { Request, Response } from "express";
1
+ import { Request, Response } from 'express';
2
2
  export declare function authorizeHandler(req: Request, res: Response): Promise<void>;
3
3
  export declare function pollHandler(req: Request, res: Response): Promise<void>;
@@ -13,31 +13,31 @@ const request_logger_1 = require("../../utils/request-logger");
13
13
  async function authorizeHandler(req, res) {
14
14
  const config = (0, config_1.loadOAuthConfig)();
15
15
  if (!config) {
16
- sendError(req, res, 500, "server_error", "OAuth not configured");
16
+ sendError(req, res, 500, 'server_error', 'OAuth not configured');
17
17
  return;
18
18
  }
19
19
  const { client_id, redirect_uri, response_type, state, code_challenge, code_challenge_method } = req.query;
20
- if (response_type !== "code") {
21
- sendError(req, res, 400, "unsupported_response_type", 'Only "code" response type is supported');
20
+ if (response_type !== 'code') {
21
+ sendError(req, res, 400, 'unsupported_response_type', 'Only "code" response type is supported');
22
22
  return;
23
23
  }
24
24
  if (!client_id) {
25
- sendError(req, res, 400, "invalid_request", "client_id is required");
25
+ sendError(req, res, 400, 'invalid_request', 'client_id is required');
26
26
  return;
27
27
  }
28
28
  if (!code_challenge) {
29
- sendError(req, res, 400, "invalid_request", "code_challenge is required (PKCE)");
29
+ sendError(req, res, 400, 'invalid_request', 'code_challenge is required (PKCE)');
30
30
  return;
31
31
  }
32
- if (code_challenge_method !== "S256") {
33
- sendError(req, res, 400, "invalid_request", 'code_challenge_method must be "S256"');
32
+ if (code_challenge_method !== 'S256') {
33
+ sendError(req, res, 400, 'invalid_request', 'code_challenge_method must be "S256"');
34
34
  return;
35
35
  }
36
36
  if (redirect_uri) {
37
37
  await handleAuthorizationCodeFlow(req, res, config, {
38
38
  clientId: client_id,
39
39
  redirectUri: redirect_uri,
40
- state: state ?? "",
40
+ state: state ?? '',
41
41
  codeChallenge: code_challenge,
42
42
  codeChallengeMethod: code_challenge_method,
43
43
  });
@@ -45,7 +45,7 @@ async function authorizeHandler(req, res) {
45
45
  else {
46
46
  await handleDeviceFlow(req, res, config, {
47
47
  clientId: client_id,
48
- state: state ?? "",
48
+ state: state ?? '',
49
49
  codeChallenge: code_challenge,
50
50
  codeChallengeMethod: code_challenge_method,
51
51
  });
@@ -66,7 +66,7 @@ async function handleAuthorizationCodeFlow(req, res, config, params) {
66
66
  expiresAt: Date.now() + 10 * 60 * 1000,
67
67
  });
68
68
  const gitlabAuthUrl = (0, gitlab_device_flow_1.buildGitLabAuthUrl)(config, callbackUri, internalState);
69
- (0, logger_1.logInfo)("Authorization Code Flow initiated, redirecting to GitLab", {
69
+ (0, logger_1.logInfo)('Authorization Code Flow initiated, redirecting to GitLab', {
70
70
  internalState: (0, logger_1.truncateId)(internalState),
71
71
  clientRedirectUri: params.redirectUri,
72
72
  });
@@ -89,7 +89,7 @@ async function handleDeviceFlow(req, res, config, params) {
89
89
  state: params.state,
90
90
  redirectUri: undefined,
91
91
  });
92
- (0, logger_1.logInfo)("Device flow initiated for authorization", {
92
+ (0, logger_1.logInfo)('Device flow initiated for authorization', {
93
93
  flowState: (0, logger_1.truncateId)(flowState),
94
94
  userCode: deviceResponse.user_code,
95
95
  });
@@ -102,37 +102,37 @@ async function handleDeviceFlow(req, res, config, params) {
102
102
  pollUrl: `${baseUrl}/oauth/poll`,
103
103
  expiresIn: deviceResponse.expires_in,
104
104
  });
105
- res.setHeader("Content-Type", "text/html");
105
+ res.setHeader('Content-Type', 'text/html');
106
106
  res.send(html);
107
107
  }
108
108
  catch (error) {
109
- (0, logger_1.logError)("Failed to initiate device flow", { err: error });
110
- sendError(req, res, 500, "server_error", "Failed to initiate authentication");
109
+ (0, logger_1.logError)('Failed to initiate device flow', { err: error });
110
+ sendError(req, res, 500, 'server_error', 'Failed to initiate authentication');
111
111
  }
112
112
  }
113
113
  async function pollHandler(req, res) {
114
114
  const config = (0, config_1.loadOAuthConfig)();
115
115
  if (!config) {
116
- res.status(500).json({ error: "server_error" });
116
+ res.status(500).json({ error: 'server_error' });
117
117
  return;
118
118
  }
119
119
  const { flow_state } = req.query;
120
120
  if (!flow_state) {
121
121
  res
122
122
  .status(400)
123
- .json({ status: "failed", error: "Missing flow_state" });
123
+ .json({ status: 'failed', error: 'Missing flow_state' });
124
124
  return;
125
125
  }
126
126
  const flow = session_store_1.sessionStore.getDeviceFlow(flow_state);
127
127
  if (!flow) {
128
- res.status(400).json({ status: "expired", error: "Flow not found" });
128
+ res.status(400).json({ status: 'expired', error: 'Flow not found' });
129
129
  return;
130
130
  }
131
131
  if (Date.now() > flow.expiresAt) {
132
132
  session_store_1.sessionStore.deleteDeviceFlow(flow_state);
133
133
  res
134
134
  .status(400)
135
- .json({ status: "expired", error: "Device code expired" });
135
+ .json({ status: 'expired', error: 'Device code expired' });
136
136
  return;
137
137
  }
138
138
  try {
@@ -153,8 +153,8 @@ async function pollHandler(req, res) {
153
153
  });
154
154
  session_store_1.sessionStore.createSession({
155
155
  id: sessionId,
156
- mcpAccessToken: "",
157
- mcpRefreshToken: "",
156
+ mcpAccessToken: '',
157
+ mcpRefreshToken: '',
158
158
  mcpTokenExpiry: 0,
159
159
  gitlabAccessToken: tokenResponse.access_token,
160
160
  gitlabRefreshToken: tokenResponse.refresh_token,
@@ -164,18 +164,18 @@ async function pollHandler(req, res) {
164
164
  gitlabApiUrl: flow.selectedInstance ?? config_2.GITLAB_BASE_URL,
165
165
  instanceLabel: flow.selectedInstanceLabel,
166
166
  clientId: flow.clientId,
167
- scopes: ["mcp:tools", "mcp:resources"],
167
+ scopes: ['mcp:tools', 'mcp:resources'],
168
168
  createdAt: now,
169
169
  updatedAt: now,
170
170
  });
171
171
  session_store_1.sessionStore.deleteDeviceFlow(flow_state);
172
- (0, logger_1.logInfo)("Device flow authorization completed", {
172
+ (0, logger_1.logInfo)('Device flow authorization completed', {
173
173
  sessionId: (0, logger_1.truncateId)(sessionId),
174
174
  userId: userInfo.id,
175
175
  username: userInfo.username,
176
176
  });
177
177
  const response = {
178
- status: "complete",
178
+ status: 'complete',
179
179
  redirect_uri: flow.redirectUri,
180
180
  code: authCode,
181
181
  state: flow.state ? flow.state : undefined,
@@ -183,25 +183,25 @@ async function pollHandler(req, res) {
183
183
  res.json(response);
184
184
  }
185
185
  else {
186
- res.json({ status: "pending" });
186
+ res.json({ status: 'pending' });
187
187
  }
188
188
  }
189
189
  catch (error) {
190
- const message = error instanceof Error ? error.message : "Unknown error";
191
- if (message.includes("expired") || message.includes("denied") || message.includes("invalid")) {
190
+ const message = error instanceof Error ? error.message : 'Unknown error';
191
+ if (message.includes('expired') || message.includes('denied') || message.includes('invalid')) {
192
192
  session_store_1.sessionStore.deleteDeviceFlow(flow_state);
193
- res.json({ status: "failed", error: message });
193
+ res.json({ status: 'failed', error: message });
194
194
  }
195
195
  else {
196
- (0, logger_1.logWarn)("Device flow poll error", { err: error });
197
- res.json({ status: "pending" });
196
+ (0, logger_1.logWarn)('Device flow poll error', { err: error });
197
+ res.json({ status: 'pending' });
198
198
  }
199
199
  }
200
200
  }
201
201
  function sendError(req, res, status, error, description) {
202
- (0, logger_1.logWarn)("OAuth authorize request failed", {
203
- event: "oauth_error",
204
- endpoint: "/authorize",
202
+ (0, logger_1.logWarn)('OAuth authorize request failed', {
203
+ event: 'oauth_error',
204
+ endpoint: '/authorize',
205
205
  ip: (0, request_logger_1.getIpAddress)(req),
206
206
  error,
207
207
  description,
@@ -1,2 +1,2 @@
1
- import { Request, Response } from "express";
1
+ import { Request, Response } from 'express';
2
2
  export declare function callbackHandler(req: Request, res: Response): Promise<void>;
@@ -11,25 +11,25 @@ async function callbackHandler(req, res) {
11
11
  const config = (0, config_1.loadOAuthConfig)();
12
12
  if (!config) {
13
13
  res.status(500).json({
14
- error: "server_error",
15
- error_description: "OAuth not configured",
14
+ error: 'server_error',
15
+ error_description: 'OAuth not configured',
16
16
  });
17
17
  return;
18
18
  }
19
19
  const { code, state, error, error_description } = req.query;
20
20
  if (error) {
21
- (0, logger_1.logWarn)("GitLab authorization error", { error, error_description });
21
+ (0, logger_1.logWarn)('GitLab authorization error', { error, error_description });
22
22
  if (state) {
23
23
  const flow = session_store_1.sessionStore.getAuthCodeFlow(state);
24
24
  if (flow) {
25
25
  session_store_1.sessionStore.deleteAuthCodeFlow(state);
26
26
  const redirectUrl = new URL(flow.clientRedirectUri);
27
- redirectUrl.searchParams.set("error", error);
27
+ redirectUrl.searchParams.set('error', error);
28
28
  if (error_description) {
29
- redirectUrl.searchParams.set("error_description", error_description);
29
+ redirectUrl.searchParams.set('error_description', error_description);
30
30
  }
31
31
  if (flow.clientState) {
32
- redirectUrl.searchParams.set("state", flow.clientState);
32
+ redirectUrl.searchParams.set('state', flow.clientState);
33
33
  }
34
34
  res.redirect(redirectUrl.toString());
35
35
  return;
@@ -37,37 +37,37 @@ async function callbackHandler(req, res) {
37
37
  }
38
38
  res.status(400).json({
39
39
  error: error,
40
- error_description: error_description ?? "GitLab authorization failed",
40
+ error_description: error_description ?? 'GitLab authorization failed',
41
41
  });
42
42
  return;
43
43
  }
44
44
  if (!code) {
45
45
  res.status(400).json({
46
- error: "invalid_request",
47
- error_description: "Missing authorization code from GitLab",
46
+ error: 'invalid_request',
47
+ error_description: 'Missing authorization code from GitLab',
48
48
  });
49
49
  return;
50
50
  }
51
51
  if (!state) {
52
52
  res.status(400).json({
53
- error: "invalid_request",
54
- error_description: "Missing state parameter",
53
+ error: 'invalid_request',
54
+ error_description: 'Missing state parameter',
55
55
  });
56
56
  return;
57
57
  }
58
58
  const flow = session_store_1.sessionStore.getAuthCodeFlow(state);
59
59
  if (!flow) {
60
60
  res.status(400).json({
61
- error: "invalid_request",
62
- error_description: "Invalid or expired state. Please start authorization again.",
61
+ error: 'invalid_request',
62
+ error_description: 'Invalid or expired state. Please start authorization again.',
63
63
  });
64
64
  return;
65
65
  }
66
66
  if (Date.now() > flow.expiresAt) {
67
67
  session_store_1.sessionStore.deleteAuthCodeFlow(state);
68
68
  res.status(400).json({
69
- error: "invalid_request",
70
- error_description: "Authorization flow expired. Please start again.",
69
+ error: 'invalid_request',
70
+ error_description: 'Authorization flow expired. Please start again.',
71
71
  });
72
72
  return;
73
73
  }
@@ -88,8 +88,8 @@ async function callbackHandler(req, res) {
88
88
  });
89
89
  session_store_1.sessionStore.createSession({
90
90
  id: sessionId,
91
- mcpAccessToken: "",
92
- mcpRefreshToken: "",
91
+ mcpAccessToken: '',
92
+ mcpRefreshToken: '',
93
93
  mcpTokenExpiry: 0,
94
94
  gitlabAccessToken: gitlabTokens.access_token,
95
95
  gitlabRefreshToken: gitlabTokens.refresh_token,
@@ -99,34 +99,34 @@ async function callbackHandler(req, res) {
99
99
  gitlabApiUrl: flow.selectedInstance ?? config_2.GITLAB_BASE_URL,
100
100
  instanceLabel: flow.selectedInstanceLabel,
101
101
  clientId: flow.clientId,
102
- scopes: ["mcp:tools", "mcp:resources"],
102
+ scopes: ['mcp:tools', 'mcp:resources'],
103
103
  createdAt: now,
104
104
  updatedAt: now,
105
105
  });
106
106
  session_store_1.sessionStore.deleteAuthCodeFlow(state);
107
- (0, logger_1.logInfo)("Authorization Code Flow completed successfully", {
107
+ (0, logger_1.logInfo)('Authorization Code Flow completed successfully', {
108
108
  sessionId: (0, logger_1.truncateId)(sessionId),
109
109
  userId: userInfo.id,
110
110
  username: userInfo.username,
111
111
  });
112
112
  const redirectUrl = new URL(flow.clientRedirectUri);
113
- redirectUrl.searchParams.set("code", mcpAuthCode);
113
+ redirectUrl.searchParams.set('code', mcpAuthCode);
114
114
  if (flow.clientState) {
115
- redirectUrl.searchParams.set("state", flow.clientState);
115
+ redirectUrl.searchParams.set('state', flow.clientState);
116
116
  }
117
- (0, logger_1.logDebug)("Redirecting to client with authorization code", {
117
+ (0, logger_1.logDebug)('Redirecting to client with authorization code', {
118
118
  redirectUri: flow.clientRedirectUri,
119
119
  });
120
120
  res.redirect(redirectUrl.toString());
121
121
  }
122
122
  catch (error) {
123
- (0, logger_1.logError)("Failed to complete authorization code flow", { err: error });
123
+ (0, logger_1.logError)('Failed to complete authorization code flow', { err: error });
124
124
  session_store_1.sessionStore.deleteAuthCodeFlow(state);
125
125
  const redirectUrl = new URL(flow.clientRedirectUri);
126
- redirectUrl.searchParams.set("error", "server_error");
127
- redirectUrl.searchParams.set("error_description", error instanceof Error ? error.message : "Failed to complete authorization");
126
+ redirectUrl.searchParams.set('error', 'server_error');
127
+ redirectUrl.searchParams.set('error_description', error instanceof Error ? error.message : 'Failed to complete authorization');
128
128
  if (flow.clientState) {
129
- redirectUrl.searchParams.set("state", flow.clientState);
129
+ redirectUrl.searchParams.set('state', flow.clientState);
130
130
  }
131
131
  res.redirect(redirectUrl.toString());
132
132
  }
@@ -1,5 +1,5 @@
1
- export { metadataHandler, protectedResourceHandler, getBaseUrl } from "./metadata";
2
- export { authorizeHandler, pollHandler } from "./authorize";
3
- export { callbackHandler } from "./callback";
4
- export { tokenHandler } from "./token";
5
- export { registerHandler, getRegisteredClient, isValidRedirectUri } from "./register";
1
+ export { metadataHandler, protectedResourceHandler, getBaseUrl } from './metadata';
2
+ export { authorizeHandler, pollHandler } from './authorize';
3
+ export { callbackHandler } from './callback';
4
+ export { tokenHandler } from './token';
5
+ export { registerHandler, getRegisteredClient, isValidRedirectUri } from './register';
@@ -1,4 +1,4 @@
1
- import { Request, Response } from "express";
1
+ import { Request, Response } from 'express';
2
2
  export declare const MCP_PROTOCOL_VERSION = "2025-03-26";
3
3
  export declare function getBaseUrl(req: Request): string;
4
4
  export declare function metadataHandler(req: Request, res: Response): void;
@@ -5,12 +5,12 @@ exports.getBaseUrl = getBaseUrl;
5
5
  exports.metadataHandler = metadataHandler;
6
6
  exports.protectedResourceHandler = protectedResourceHandler;
7
7
  const config_1 = require("../../config");
8
- exports.MCP_PROTOCOL_VERSION = "2025-03-26";
8
+ exports.MCP_PROTOCOL_VERSION = '2025-03-26';
9
9
  function getBaseUrl(req) {
10
- const forwardedProto = req.get("x-forwarded-proto");
11
- const protocol = forwardedProto ?? req.protocol ?? "http";
12
- const forwardedHost = req.get("x-forwarded-host");
13
- const host = forwardedHost ?? req.get("host") ?? `${config_1.HOST}:${config_1.PORT}`;
10
+ const forwardedProto = req.get('x-forwarded-proto');
11
+ const protocol = forwardedProto ?? req.protocol ?? 'http';
12
+ const forwardedHost = req.get('x-forwarded-host');
13
+ const host = forwardedHost ?? req.get('host') ?? `${config_1.HOST}:${config_1.PORT}`;
14
14
  return `${protocol}://${host}`;
15
15
  }
16
16
  function metadataHandler(req, res) {
@@ -19,11 +19,11 @@ function metadataHandler(req, res) {
19
19
  issuer: baseUrl,
20
20
  authorization_endpoint: `${baseUrl}/authorize`,
21
21
  token_endpoint: `${baseUrl}/token`,
22
- response_types_supported: ["code"],
23
- grant_types_supported: ["authorization_code", "refresh_token"],
24
- code_challenge_methods_supported: ["S256"],
25
- token_endpoint_auth_methods_supported: ["none"],
26
- scopes_supported: ["mcp:tools", "mcp:resources"],
22
+ response_types_supported: ['code'],
23
+ grant_types_supported: ['authorization_code', 'refresh_token'],
24
+ code_challenge_methods_supported: ['S256'],
25
+ token_endpoint_auth_methods_supported: ['none'],
26
+ scopes_supported: ['mcp:tools', 'mcp:resources'],
27
27
  registration_endpoint: `${baseUrl}/register`,
28
28
  mcp_version: exports.MCP_PROTOCOL_VERSION,
29
29
  };
@@ -34,8 +34,8 @@ function protectedResourceHandler(req, res) {
34
34
  const metadata = {
35
35
  resource: baseUrl,
36
36
  authorization_servers: [baseUrl],
37
- scopes_supported: ["mcp:tools", "mcp:resources"],
38
- bearer_methods_supported: ["header"],
37
+ scopes_supported: ['mcp:tools', 'mcp:resources'],
38
+ bearer_methods_supported: ['header'],
39
39
  };
40
40
  res.json(metadata);
41
41
  }
@@ -1,4 +1,4 @@
1
- import { Request, Response } from "express";
1
+ import { Request, Response } from 'express';
2
2
  interface RegisteredClient {
3
3
  client_id: string;
4
4
  client_secret?: string;
@@ -9,11 +9,11 @@ const registeredClients = new Map();
9
9
  async function registerHandler(req, res) {
10
10
  try {
11
11
  const body = req.body;
12
- const { redirect_uris, client_name, token_endpoint_auth_method = "none", grant_types = ["authorization_code", "refresh_token"], response_types = ["code"], } = body;
12
+ const { redirect_uris, client_name, token_endpoint_auth_method = 'none', grant_types = ['authorization_code', 'refresh_token'], response_types = ['code'], } = body;
13
13
  if (!redirect_uris || !Array.isArray(redirect_uris) || redirect_uris.length === 0) {
14
14
  res.status(400).json({
15
- error: "invalid_client_metadata",
16
- error_description: "redirect_uris is required and must be a non-empty array",
15
+ error: 'invalid_client_metadata',
16
+ error_description: 'redirect_uris is required and must be a non-empty array',
17
17
  });
18
18
  return;
19
19
  }
@@ -23,7 +23,7 @@ async function registerHandler(req, res) {
23
23
  }
24
24
  catch {
25
25
  res.status(400).json({
26
- error: "invalid_redirect_uri",
26
+ error: 'invalid_redirect_uri',
27
27
  error_description: `Invalid redirect URI: ${uri}`,
28
28
  });
29
29
  return;
@@ -31,7 +31,7 @@ async function registerHandler(req, res) {
31
31
  }
32
32
  const client_id = (0, crypto_1.randomUUID)();
33
33
  let client_secret;
34
- if (token_endpoint_auth_method !== "none") {
34
+ if (token_endpoint_auth_method !== 'none') {
35
35
  client_secret = (0, crypto_1.randomUUID)() + (0, crypto_1.randomUUID)();
36
36
  }
37
37
  const clientData = {
@@ -45,7 +45,7 @@ async function registerHandler(req, res) {
45
45
  created_at: Date.now(),
46
46
  };
47
47
  registeredClients.set(client_id, clientData);
48
- (0, logger_1.logInfo)("New OAuth client registered via DCR", {
48
+ (0, logger_1.logInfo)('New OAuth client registered via DCR', {
49
49
  client_id,
50
50
  client_name,
51
51
  redirect_uris,
@@ -65,10 +65,10 @@ async function registerHandler(req, res) {
65
65
  res.status(201).json(response);
66
66
  }
67
67
  catch (error) {
68
- (0, logger_1.logError)("Error in dynamic client registration", { err: error });
68
+ (0, logger_1.logError)('Error in dynamic client registration', { err: error });
69
69
  res.status(500).json({
70
- error: "server_error",
71
- error_description: "Failed to register client",
70
+ error: 'server_error',
71
+ error_description: 'Failed to register client',
72
72
  });
73
73
  }
74
74
  }
@@ -1,2 +1,2 @@
1
- import { Request, Response } from "express";
1
+ import { Request, Response } from 'express';
2
2
  export declare function tokenHandler(req: Request, res: Response): Promise<void>;
@@ -11,52 +11,52 @@ const request_logger_1 = require("../../utils/request-logger");
11
11
  async function tokenHandler(req, res) {
12
12
  const config = (0, config_1.loadOAuthConfig)();
13
13
  if (!config) {
14
- sendError(req, res, 500, "server_error", "OAuth not configured");
14
+ sendError(req, res, 500, 'server_error', 'OAuth not configured');
15
15
  return;
16
16
  }
17
17
  const { grant_type } = req.body;
18
18
  switch (grant_type) {
19
- case "authorization_code":
19
+ case 'authorization_code':
20
20
  await handleAuthorizationCode(req, res, config);
21
21
  break;
22
- case "refresh_token":
22
+ case 'refresh_token':
23
23
  await handleRefreshToken(req, res, config);
24
24
  break;
25
25
  default:
26
- sendError(req, res, 400, "unsupported_grant_type", `Grant type "${grant_type}" is not supported`);
26
+ sendError(req, res, 400, 'unsupported_grant_type', `Grant type "${grant_type}" is not supported`);
27
27
  }
28
28
  }
29
29
  async function handleAuthorizationCode(req, res, config) {
30
30
  const { code, code_verifier, redirect_uri } = req.body;
31
31
  if (!code) {
32
- sendError(req, res, 400, "invalid_request", "Missing authorization code");
32
+ sendError(req, res, 400, 'invalid_request', 'Missing authorization code');
33
33
  return;
34
34
  }
35
35
  if (!code_verifier) {
36
- sendError(req, res, 400, "invalid_request", "Missing code_verifier (PKCE required)");
36
+ sendError(req, res, 400, 'invalid_request', 'Missing code_verifier (PKCE required)');
37
37
  return;
38
38
  }
39
39
  const authCode = session_store_1.sessionStore.getAuthCode(code);
40
40
  if (!authCode) {
41
- sendError(req, res, 400, "invalid_grant", "Invalid or expired authorization code");
41
+ sendError(req, res, 400, 'invalid_grant', 'Invalid or expired authorization code');
42
42
  return;
43
43
  }
44
44
  if (Date.now() > authCode.expiresAt) {
45
45
  session_store_1.sessionStore.deleteAuthCode(code);
46
- sendError(req, res, 400, "invalid_grant", "Authorization code has expired");
46
+ sendError(req, res, 400, 'invalid_grant', 'Authorization code has expired');
47
47
  return;
48
48
  }
49
49
  if (!(0, token_utils_1.verifyCodeChallenge)(code_verifier, authCode.codeChallenge, authCode.codeChallengeMethod)) {
50
- sendError(req, res, 400, "invalid_grant", "Invalid code_verifier");
50
+ sendError(req, res, 400, 'invalid_grant', 'Invalid code_verifier');
51
51
  return;
52
52
  }
53
53
  if (authCode.redirectUri && redirect_uri !== authCode.redirectUri) {
54
- sendError(req, res, 400, "invalid_grant", "redirect_uri does not match");
54
+ sendError(req, res, 400, 'invalid_grant', 'redirect_uri does not match');
55
55
  return;
56
56
  }
57
57
  const session = session_store_1.sessionStore.getSession(authCode.sessionId);
58
58
  if (!session) {
59
- sendError(req, res, 400, "invalid_grant", "Session not found");
59
+ sendError(req, res, 400, 'invalid_grant', 'Session not found');
60
60
  return;
61
61
  }
62
62
  const baseUrl = (0, metadata_1.getBaseUrl)(req);
@@ -65,7 +65,7 @@ async function handleAuthorizationCode(req, res, config) {
65
65
  sub: session.gitlabUserId.toString(),
66
66
  aud: authCode.clientId,
67
67
  sid: session.id,
68
- scope: session.scopes.join(" "),
68
+ scope: session.scopes.join(' '),
69
69
  gitlab_user: session.gitlabUsername,
70
70
  }, config.sessionSecret, config.tokenTtl);
71
71
  const refreshToken = (0, token_utils_1.generateRefreshToken)();
@@ -75,28 +75,28 @@ async function handleAuthorizationCode(req, res, config) {
75
75
  mcpTokenExpiry: (0, token_utils_1.calculateTokenExpiry)(config.tokenTtl),
76
76
  });
77
77
  session_store_1.sessionStore.deleteAuthCode(code);
78
- (0, logger_1.logInfo)("MCP tokens issued via authorization_code grant", {
78
+ (0, logger_1.logInfo)('MCP tokens issued via authorization_code grant', {
79
79
  sessionId: (0, logger_1.truncateId)(session.id),
80
80
  userId: session.gitlabUserId,
81
81
  });
82
82
  const response = {
83
83
  access_token: accessToken,
84
- token_type: "Bearer",
84
+ token_type: 'Bearer',
85
85
  expires_in: config.tokenTtl,
86
86
  refresh_token: refreshToken,
87
- scope: session.scopes.join(" "),
87
+ scope: session.scopes.join(' '),
88
88
  };
89
89
  res.json(response);
90
90
  }
91
91
  async function handleRefreshToken(req, res, config) {
92
92
  const { refresh_token } = req.body;
93
93
  if (!refresh_token) {
94
- sendError(req, res, 400, "invalid_request", "Missing refresh_token");
94
+ sendError(req, res, 400, 'invalid_request', 'Missing refresh_token');
95
95
  return;
96
96
  }
97
97
  const session = session_store_1.sessionStore.getSessionByRefreshToken(refresh_token);
98
98
  if (!session) {
99
- sendError(req, res, 400, "invalid_grant", "Invalid refresh token");
99
+ sendError(req, res, 400, 'invalid_grant', 'Invalid refresh token');
100
100
  return;
101
101
  }
102
102
  let updatedSession = session;
@@ -110,15 +110,15 @@ async function handleRefreshToken(req, res, config) {
110
110
  });
111
111
  const refreshedSession = session_store_1.sessionStore.getSession(session.id);
112
112
  if (!refreshedSession) {
113
- sendError(req, res, 400, "invalid_grant", "Session lost during refresh");
113
+ sendError(req, res, 400, 'invalid_grant', 'Session lost during refresh');
114
114
  return;
115
115
  }
116
116
  updatedSession = refreshedSession;
117
- (0, logger_1.logDebug)("GitLab token refreshed", { sessionId: (0, logger_1.truncateId)(session.id) });
117
+ (0, logger_1.logDebug)('GitLab token refreshed', { sessionId: (0, logger_1.truncateId)(session.id) });
118
118
  }
119
119
  catch (error) {
120
- (0, logger_1.logError)("Failed to refresh GitLab token", { err: error });
121
- sendError(req, res, 400, "invalid_grant", "Failed to refresh underlying GitLab token");
120
+ (0, logger_1.logError)('Failed to refresh GitLab token', { err: error });
121
+ sendError(req, res, 400, 'invalid_grant', 'Failed to refresh underlying GitLab token');
122
122
  return;
123
123
  }
124
124
  }
@@ -128,7 +128,7 @@ async function handleRefreshToken(req, res, config) {
128
128
  sub: updatedSession.gitlabUserId.toString(),
129
129
  aud: updatedSession.clientId,
130
130
  sid: updatedSession.id,
131
- scope: updatedSession.scopes.join(" "),
131
+ scope: updatedSession.scopes.join(' '),
132
132
  gitlab_user: updatedSession.gitlabUsername,
133
133
  }, config.sessionSecret, config.tokenTtl);
134
134
  const newRefreshToken = (0, token_utils_1.generateRefreshToken)();
@@ -137,23 +137,23 @@ async function handleRefreshToken(req, res, config) {
137
137
  mcpRefreshToken: newRefreshToken,
138
138
  mcpTokenExpiry: (0, token_utils_1.calculateTokenExpiry)(config.tokenTtl),
139
139
  });
140
- (0, logger_1.logInfo)("MCP tokens refreshed via refresh_token grant", {
140
+ (0, logger_1.logInfo)('MCP tokens refreshed via refresh_token grant', {
141
141
  sessionId: (0, logger_1.truncateId)(updatedSession.id),
142
142
  userId: updatedSession.gitlabUserId,
143
143
  });
144
144
  const response = {
145
145
  access_token: accessToken,
146
- token_type: "Bearer",
146
+ token_type: 'Bearer',
147
147
  expires_in: config.tokenTtl,
148
148
  refresh_token: newRefreshToken,
149
- scope: updatedSession.scopes.join(" "),
149
+ scope: updatedSession.scopes.join(' '),
150
150
  };
151
151
  res.json(response);
152
152
  }
153
153
  function sendError(req, res, status, error, description) {
154
- (0, logger_1.logWarn)("OAuth token request failed", {
155
- event: "oauth_error",
156
- endpoint: "/token",
154
+ (0, logger_1.logWarn)('OAuth token request failed', {
155
+ event: 'oauth_error',
156
+ endpoint: '/token',
157
157
  ip: (0, request_logger_1.getIpAddress)(req),
158
158
  error,
159
159
  description,