@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
@@ -60,18 +60,18 @@ async function sendToolsListChangedNotification() {
60
60
  await sessionManager.broadcastToolsListChanged();
61
61
  }
62
62
  catch (error) {
63
- (0, logger_1.logError)("Failed to broadcast tools/list_changed notification", { err: error });
63
+ (0, logger_1.logError)('Failed to broadcast tools/list_changed notification', { err: error });
64
64
  }
65
65
  }
66
66
  function registerOAuthEndpoints(app) {
67
- app.get("/.well-known/oauth-authorization-server", index_1.metadataHandler);
68
- app.get("/.well-known/oauth-protected-resource", index_1.protectedResourceHandler);
69
- app.get("/authorize", index_1.authorizeHandler);
70
- app.get("/oauth/poll", index_1.pollHandler);
71
- app.get("/oauth/callback", index_1.callbackHandler);
72
- app.post("/token", express_1.default.urlencoded({ extended: true }), index_1.tokenHandler);
73
- app.post("/register", express_1.default.json(), index_1.registerHandler);
74
- (0, logger_1.logInfo)("OAuth endpoints registered");
67
+ app.get('/.well-known/oauth-authorization-server', index_1.metadataHandler);
68
+ app.get('/.well-known/oauth-protected-resource', index_1.protectedResourceHandler);
69
+ app.get('/authorize', index_1.authorizeHandler);
70
+ app.get('/oauth/poll', index_1.pollHandler);
71
+ app.get('/oauth/callback', index_1.callbackHandler);
72
+ app.post('/token', express_1.default.urlencoded({ extended: true }), index_1.tokenHandler);
73
+ app.post('/register', express_1.default.json(), index_1.registerHandler);
74
+ (0, logger_1.logInfo)('OAuth endpoints registered');
75
75
  }
76
76
  function isTLSEnabled() {
77
77
  return !!(config_1.SSL_CERT_PATH && config_1.SSL_KEY_PATH);
@@ -87,16 +87,16 @@ function loadTLSOptions() {
87
87
  };
88
88
  if (config_1.SSL_CA_PATH) {
89
89
  options.ca = fs.readFileSync(config_1.SSL_CA_PATH);
90
- (0, logger_1.logInfo)("CA certificate loaded", { path: config_1.SSL_CA_PATH });
90
+ (0, logger_1.logInfo)('CA certificate loaded', { path: config_1.SSL_CA_PATH });
91
91
  }
92
92
  if (config_1.SSL_PASSPHRASE) {
93
93
  options.passphrase = config_1.SSL_PASSPHRASE;
94
94
  }
95
- (0, logger_1.logInfo)("TLS certificates loaded", { path: config_1.SSL_CERT_PATH });
95
+ (0, logger_1.logInfo)('TLS certificates loaded', { path: config_1.SSL_CERT_PATH });
96
96
  return options;
97
97
  }
98
98
  catch (error) {
99
- (0, logger_1.logError)("Failed to load TLS certificates", { err: error });
99
+ (0, logger_1.logError)('Failed to load TLS certificates', { err: error });
100
100
  throw new Error(`Failed to load TLS certificates: ${String(error)}`, { cause: error });
101
101
  }
102
102
  }
@@ -105,27 +105,27 @@ function configureTrustProxy(app) {
105
105
  return;
106
106
  }
107
107
  let trustValue = config_1.TRUST_PROXY;
108
- if (config_1.TRUST_PROXY === "true" || config_1.TRUST_PROXY === "1") {
108
+ if (config_1.TRUST_PROXY === 'true' || config_1.TRUST_PROXY === '1') {
109
109
  trustValue = true;
110
110
  }
111
- else if (config_1.TRUST_PROXY === "false" || config_1.TRUST_PROXY === "0") {
111
+ else if (config_1.TRUST_PROXY === 'false' || config_1.TRUST_PROXY === '0') {
112
112
  trustValue = false;
113
113
  }
114
114
  else if (!isNaN(Number(config_1.TRUST_PROXY))) {
115
115
  trustValue = Number(config_1.TRUST_PROXY);
116
116
  }
117
- app.set("trust proxy", trustValue);
118
- (0, logger_1.logInfo)("Trust proxy configured", { trustValue: String(trustValue) });
117
+ app.set('trust proxy', trustValue);
118
+ (0, logger_1.logInfo)('Trust proxy configured', { trustValue: String(trustValue) });
119
119
  }
120
120
  function configureServerTimeouts(server) {
121
121
  server.keepAliveTimeout = config_1.HTTP_KEEPALIVE_TIMEOUT_MS;
122
122
  server.headersTimeout = config_1.HTTP_KEEPALIVE_TIMEOUT_MS + 5000;
123
123
  server.timeout = 0;
124
- server.on("connection", (socket) => {
124
+ server.on('connection', (socket) => {
125
125
  socket.setKeepAlive(true, 30000);
126
126
  socket.setNoDelay(true);
127
127
  });
128
- (0, logger_1.logInfo)("HTTP server timeouts configured for SSE streaming", {
128
+ (0, logger_1.logInfo)('HTTP server timeouts configured for SSE streaming', {
129
129
  keepAliveTimeout: server.keepAliveTimeout,
130
130
  headersTimeout: server.headersTimeout,
131
131
  timeout: server.timeout,
@@ -145,7 +145,7 @@ function startHttpServer(app, callback) {
145
145
  }
146
146
  }
147
147
  function getProtocol() {
148
- return isTLSEnabled() ? "https" : "http";
148
+ return isTLSEnabled() ? 'https' : 'http';
149
149
  }
150
150
  const HEARTBEAT_DRAIN_TIMEOUT_MS = 10000;
151
151
  function startSseHeartbeat(res, sessionId) {
@@ -157,7 +157,7 @@ function startSseHeartbeat(res, sessionId) {
157
157
  pendingDrainTimeout = undefined;
158
158
  }
159
159
  waitingForDrain = false;
160
- (0, logger_1.logDebug)("SSE heartbeat drain recovered", { sessionId });
160
+ (0, logger_1.logDebug)('SSE heartbeat drain recovered', { sessionId });
161
161
  };
162
162
  const interval = setInterval(() => {
163
163
  if (waitingForDrain)
@@ -169,20 +169,20 @@ function startSseHeartbeat(res, sessionId) {
169
169
  clearTimeout(pendingDrainTimeout);
170
170
  pendingDrainTimeout = undefined;
171
171
  }
172
- res.removeListener("drain", drainListener);
172
+ res.removeListener('drain', drainListener);
173
173
  return;
174
174
  }
175
- const ok = res.write(": ping\n\n");
175
+ const ok = res.write(': ping\n\n');
176
176
  if (!ok) {
177
177
  waitingForDrain = true;
178
178
  pendingDrainTimeout = setTimeout(() => {
179
179
  pendingDrainTimeout = undefined;
180
180
  waitingForDrain = false;
181
- res.removeListener("drain", drainListener);
182
- (0, logger_1.logWarn)("SSE heartbeat drain timeout — destroying dead connection", {
181
+ res.removeListener('drain', drainListener);
182
+ (0, logger_1.logWarn)('SSE heartbeat drain timeout — destroying dead connection', {
183
183
  sessionId,
184
184
  drainTimeoutMs: HEARTBEAT_DRAIN_TIMEOUT_MS,
185
- reason: "heartbeat_drain_timeout",
185
+ reason: 'heartbeat_drain_timeout',
186
186
  });
187
187
  clearInterval(interval);
188
188
  res.locals = res.locals ?? {};
@@ -191,62 +191,62 @@ function startSseHeartbeat(res, sessionId) {
191
191
  res.destroy();
192
192
  }
193
193
  }, HEARTBEAT_DRAIN_TIMEOUT_MS);
194
- res.once("drain", drainListener);
194
+ res.once('drain', drainListener);
195
195
  }
196
196
  }
197
197
  catch (err) {
198
198
  const errMsg = err instanceof Error ? err.message : String(err);
199
- (0, logger_1.logWarn)("SSE heartbeat write error — connection likely dead", {
199
+ (0, logger_1.logWarn)('SSE heartbeat write error — connection likely dead', {
200
200
  sessionId,
201
201
  error: errMsg,
202
- reason: "heartbeat_write_error",
202
+ reason: 'heartbeat_write_error',
203
203
  });
204
204
  clearInterval(interval);
205
205
  if (pendingDrainTimeout) {
206
206
  clearTimeout(pendingDrainTimeout);
207
207
  pendingDrainTimeout = undefined;
208
208
  }
209
- res.removeListener("drain", drainListener);
209
+ res.removeListener('drain', drainListener);
210
210
  }
211
211
  }, config_1.SSE_HEARTBEAT_MS);
212
- (0, logger_1.logDebug)("SSE heartbeat started", { sessionId, intervalMs: config_1.SSE_HEARTBEAT_MS });
212
+ (0, logger_1.logDebug)('SSE heartbeat started', { sessionId, intervalMs: config_1.SSE_HEARTBEAT_MS });
213
213
  return () => {
214
214
  clearInterval(interval);
215
215
  if (pendingDrainTimeout) {
216
216
  clearTimeout(pendingDrainTimeout);
217
217
  pendingDrainTimeout = undefined;
218
218
  }
219
- res.removeListener("drain", drainListener);
220
- (0, logger_1.logDebug)("SSE heartbeat stopped", { sessionId });
219
+ res.removeListener('drain', drainListener);
220
+ (0, logger_1.logDebug)('SSE heartbeat stopped', { sessionId });
221
221
  };
222
222
  }
223
223
  function determineTransportMode() {
224
224
  const args = process.argv.slice(2);
225
- (0, logger_1.logInfo)("Transport mode detection", { args, PORT: config_1.PORT });
226
- if (args.includes("stdio")) {
227
- (0, logger_1.logInfo)("Selected stdio mode (explicit argument)");
228
- return "stdio";
225
+ (0, logger_1.logInfo)('Transport mode detection', { args, PORT: config_1.PORT });
226
+ if (args.includes('stdio')) {
227
+ (0, logger_1.logInfo)('Selected stdio mode (explicit argument)');
228
+ return 'stdio';
229
229
  }
230
230
  if (process.env.PORT) {
231
- (0, logger_1.logInfo)("Selected dual transport mode (SSE + StreamableHTTP) - PORT environment variable detected");
232
- return "dual";
231
+ (0, logger_1.logInfo)('Selected dual transport mode (SSE + StreamableHTTP) - PORT environment variable detected');
232
+ return 'dual';
233
233
  }
234
- (0, logger_1.logInfo)("Selected stdio mode (no PORT environment variable)");
235
- return "stdio";
234
+ (0, logger_1.logInfo)('Selected stdio mode (no PORT environment variable)');
235
+ return 'stdio';
236
236
  }
237
237
  async function startServer() {
238
238
  const oauthConfig = (0, index_1.loadOAuthConfig)();
239
239
  if (oauthConfig) {
240
- (0, logger_1.logInfo)("Starting in OAuth mode (per-user authentication)");
241
- (0, logger_1.logInfo)("OAuth client ID configured", { clientId: oauthConfig.gitlabClientId });
240
+ (0, logger_1.logInfo)('Starting in OAuth mode (per-user authentication)');
241
+ (0, logger_1.logInfo)('OAuth client ID configured', { clientId: oauthConfig.gitlabClientId });
242
242
  }
243
243
  else if (process.env.GITLAB_TOKEN) {
244
- (0, logger_1.logInfo)("Starting in static token mode (shared GITLAB_TOKEN)");
244
+ (0, logger_1.logInfo)('Starting in static token mode (shared GITLAB_TOKEN)');
245
245
  }
246
246
  else {
247
- (0, logger_1.logInfo)("Starting without authentication - tools/list will work, but tool calls require GITLAB_TOKEN");
247
+ (0, logger_1.logInfo)('Starting without authentication - tools/list will work, but tool calls require GITLAB_TOKEN');
248
248
  }
249
- (0, logger_1.logInfo)("Authentication mode", { mode: (0, index_1.getAuthModeDescription)() });
249
+ (0, logger_1.logInfo)('Authentication mode', { mode: (0, index_1.getAuthModeDescription)() });
250
250
  if (oauthConfig) {
251
251
  await index_1.sessionStore.initialize();
252
252
  }
@@ -254,28 +254,28 @@ async function startServer() {
254
254
  sessionManager.start();
255
255
  const requestTracker = (0, index_3.getRequestTracker)();
256
256
  const connectionTracker = (0, index_3.getConnectionTracker)();
257
- const useCondensedLogging = config_1.LOG_FORMAT === "condensed";
257
+ const useCondensedLogging = config_1.LOG_FORMAT === 'condensed';
258
258
  requestTracker.setEnabled(useCondensedLogging);
259
259
  connectionTracker.setEnabled(useCondensedLogging);
260
- (0, logger_1.logInfo)("Access log format", { logFormat: config_1.LOG_FORMAT });
260
+ (0, logger_1.logInfo)('Access log format', { logFormat: config_1.LOG_FORMAT });
261
261
  if (config_1.LOG_FILTER.length > 0) {
262
- (0, logger_1.logInfo)("Access log filter rules active", { count: config_1.LOG_FILTER.length });
262
+ (0, logger_1.logInfo)('Access log filter rules active', { count: config_1.LOG_FILTER.length });
263
263
  }
264
264
  const transportMode = determineTransportMode();
265
265
  switch (transportMode) {
266
- case "stdio": {
266
+ case 'stdio': {
267
267
  const transport = new stdio_js_1.StdioServerTransport();
268
- await sessionManager.createSession("stdio", transport);
269
- (0, logger_1.logInfo)("GitLab MCP Server running on stdio");
268
+ await sessionManager.createSession(session_manager_1.STDIO_SESSION_ID, transport);
269
+ (0, logger_1.logInfo)('GitLab MCP Server running on stdio');
270
270
  break;
271
271
  }
272
- case "dual": {
273
- (0, logger_1.logInfo)("Setting up dual transport mode (SSE + StreamableHTTP)...");
272
+ case 'dual': {
273
+ (0, logger_1.logInfo)('Setting up dual transport mode (SSE + StreamableHTTP)...');
274
274
  const app = (0, express_1.default)();
275
275
  app.use(express_1.default.json());
276
276
  configureTrustProxy(app);
277
- app.get("/health", (_req, res) => {
278
- res.status(200).json({ status: "ok" });
277
+ app.get('/health', (_req, res) => {
278
+ res.status(200).json({ status: 'ok' });
279
279
  });
280
280
  app.use((req, res, next) => {
281
281
  if (!useCondensedLogging) {
@@ -288,18 +288,18 @@ async function startServer() {
288
288
  }
289
289
  const requestId = crypto.randomUUID();
290
290
  const clientIp = (0, request_logger_1.getIpAddress)(req);
291
- const sessionId = req.headers["mcp-session-id"];
291
+ const sessionId = req.headers['mcp-session-id'];
292
292
  res.locals.accessLogRequestId = requestId;
293
293
  requestTracker.openStack(requestId, clientIp, req.method, req.path, sessionId);
294
- res.on("finish", () => {
294
+ res.on('finish', () => {
295
295
  requestTracker.closeStack(requestId, res.statusCode);
296
296
  });
297
- res.on("close", () => {
297
+ res.on('close', () => {
298
298
  if (res.writableFinished) {
299
299
  return;
300
300
  }
301
301
  if (!res.headersSent) {
302
- requestTracker.closeStackWithError(requestId, "connection_closed");
302
+ requestTracker.closeStackWithError(requestId, 'connection_closed');
303
303
  return;
304
304
  }
305
305
  requestTracker.closeStack(requestId, res.statusCode);
@@ -311,16 +311,16 @@ async function startServer() {
311
311
  registerOAuthEndpoints(app);
312
312
  }
313
313
  if (config_1.DASHBOARD_ENABLED) {
314
- app.get("/", index_js_1.dashboardHandler);
315
- (0, logger_1.logInfo)("Dashboard enabled at GET /");
314
+ app.get('/', index_js_1.dashboardHandler);
315
+ (0, logger_1.logInfo)('Dashboard enabled at GET /');
316
316
  }
317
- app.use(["/", "/mcp"], (req, res, next) => {
318
- const accept = req.headers.accept ?? "";
319
- if (req.method === "POST" && !accept.includes("text/event-stream")) {
317
+ app.use(['/', '/mcp'], (req, res, next) => {
318
+ const accept = req.headers.accept ?? '';
319
+ if (req.method === 'POST' && !accept.includes('text/event-stream')) {
320
320
  req.headers.accept = accept
321
321
  ? `${accept}, text/event-stream`
322
- : "application/json, text/event-stream";
323
- (0, logger_1.logDebug)("Modified Accept header for MCP compatibility", {
322
+ : 'application/json, text/event-stream';
323
+ (0, logger_1.logDebug)('Modified Accept header for MCP compatibility', {
324
324
  originalAccept: accept,
325
325
  newAccept: req.headers.accept,
326
326
  });
@@ -328,13 +328,13 @@ async function startServer() {
328
328
  next();
329
329
  });
330
330
  if ((0, index_1.isOAuthEnabled)()) {
331
- app.use(["/", "/mcp"], index_2.oauthAuthMiddleware);
331
+ app.use(['/', '/mcp'], index_2.oauthAuthMiddleware);
332
332
  }
333
333
  const sseTransports = {};
334
334
  const streamableTransports = {};
335
- app.get("/sse", async (req, res) => {
336
- (0, logger_1.logDebug)("SSE endpoint hit!");
337
- const transport = new sse_js_1.SSEServerTransport("/messages", res);
335
+ app.get('/sse', async (req, res) => {
336
+ (0, logger_1.logDebug)('SSE endpoint hit!');
337
+ const transport = new sse_js_1.SSEServerTransport('/messages', res);
338
338
  const sessionId = transport.sessionId;
339
339
  const clientIp = (0, request_logger_1.getIpAddress)(req);
340
340
  const accessLogRequestId = res.locals?.accessLogRequestId;
@@ -344,12 +344,12 @@ async function startServer() {
344
344
  try {
345
345
  await sessionManager.createSession(sessionId, transport);
346
346
  sseTransports[sessionId] = transport;
347
- (0, logger_1.logDebug)("SSE transport created with session", { sessionId });
347
+ (0, logger_1.logDebug)('SSE transport created with session', { sessionId });
348
348
  connectionTracker.openConnection(sessionId, clientIp);
349
349
  connectionTracker.incrementRequests(sessionId);
350
350
  }
351
351
  catch (error) {
352
- (0, logger_1.logError)("Failed to create SSE session", { err: error, sessionId });
352
+ (0, logger_1.logError)('Failed to create SSE session', { err: error, sessionId });
353
353
  if (!res.headersSent) {
354
354
  res.status(500).end();
355
355
  }
@@ -359,40 +359,40 @@ async function startServer() {
359
359
  let socketError;
360
360
  const socket = res.socket;
361
361
  if (socket) {
362
- socket.on("error", (err) => {
362
+ socket.on('error', (err) => {
363
363
  socketError = err.code ?? err.message;
364
- (0, logger_1.logWarn)("SSE socket error", {
364
+ (0, logger_1.logWarn)('SSE socket error', {
365
365
  sessionId,
366
366
  error: err.message,
367
367
  code: err.code,
368
- reason: "socket_error",
368
+ reason: 'socket_error',
369
369
  });
370
370
  });
371
371
  }
372
- res.on("close", () => {
372
+ res.on('close', () => {
373
373
  stopHeartbeat();
374
374
  delete sseTransports[sessionId];
375
375
  const reason = socketError
376
376
  ? `peer_reset:${socketError}`
377
377
  : res.writableFinished
378
- ? "normal_close"
378
+ ? 'normal_close'
379
379
  : res.locals?.heartbeatFailed
380
- ? "heartbeat_failed"
380
+ ? 'heartbeat_failed'
381
381
  : res.destroyed
382
- ? "destroyed"
383
- : "client_disconnect";
384
- (0, logger_1.logInfo)("SSE session disconnected", { sessionId, reason });
382
+ ? 'destroyed'
383
+ : 'client_disconnect';
384
+ (0, logger_1.logInfo)('SSE session disconnected', { sessionId, reason });
385
385
  connectionTracker.closeConnection(sessionId, reason);
386
386
  sessionManager.removeSession(sessionId).catch((error) => {
387
- (0, logger_1.logDebug)("Error removing SSE session on disconnect", { err: error, sessionId });
387
+ (0, logger_1.logDebug)('Error removing SSE session on disconnect', { err: error, sessionId });
388
388
  });
389
389
  });
390
390
  });
391
- app.post("/messages", async (req, res) => {
392
- (0, logger_1.logDebug)("SSE messages endpoint hit!");
391
+ app.post('/messages', async (req, res) => {
392
+ (0, logger_1.logDebug)('SSE messages endpoint hit!');
393
393
  const sessionId = req.query.sessionId;
394
394
  if (!sessionId || !sseTransports[sessionId]) {
395
- res.status(404).json({ error: "Session not found" });
395
+ res.status(404).json({ error: 'Session not found' });
396
396
  return;
397
397
  }
398
398
  connectionTracker.incrementRequests(sessionId);
@@ -414,14 +414,14 @@ async function startServer() {
414
414
  }
415
415
  }
416
416
  catch (error) {
417
- (0, logger_1.logError)("Error handling SSE message", { err: error });
417
+ (0, logger_1.logError)('Error handling SSE message', { err: error });
418
418
  if (!res.headersSent) {
419
- res.status(500).json({ error: "Internal server error" });
419
+ res.status(500).json({ error: 'Internal server error' });
420
420
  }
421
421
  }
422
422
  });
423
- app.all(["/", "/mcp"], async (req, res) => {
424
- const sessionId = req.headers["mcp-session-id"];
423
+ app.all(['/', '/mcp'], async (req, res) => {
424
+ const sessionId = req.headers['mcp-session-id'];
425
425
  const accessLogRequestId = res.locals.accessLogRequestId;
426
426
  const clientIp = (0, request_logger_1.getIpAddress)(req);
427
427
  const oauthSessionId = res.locals.oauthSessionId;
@@ -432,8 +432,8 @@ async function startServer() {
432
432
  const instanceLabel = res.locals.instanceLabel;
433
433
  if (!useCondensedLogging) {
434
434
  const requestContext = (0, request_logger_1.getRequestContext)(req, res);
435
- (0, logger_1.logInfo)("MCP endpoint request received", {
436
- event: "mcp_request",
435
+ (0, logger_1.logInfo)('MCP endpoint request received', {
436
+ event: 'mcp_request',
437
437
  ...requestContext,
438
438
  hasToken: !!gitlabToken,
439
439
  });
@@ -476,8 +476,8 @@ async function startServer() {
476
476
  else {
477
477
  if (sessionId) {
478
478
  res.status(404).json({
479
- error: "Session not found",
480
- message: "Your session has expired. Please reconnect.",
479
+ error: 'Session not found',
480
+ message: 'Your session has expired. Please reconnect.',
481
481
  });
482
482
  return;
483
483
  }
@@ -487,7 +487,7 @@ async function startServer() {
487
487
  sessionIdGenerator: () => newSessionId,
488
488
  onsessioninitialized: (initializedSessionId) => {
489
489
  streamableTransports[initializedSessionId] = transport;
490
- (0, logger_1.logInfo)("MCP session initialized", {
490
+ (0, logger_1.logInfo)('MCP session initialized', {
491
491
  sessionId: initializedSessionId,
492
492
  method: req.method,
493
493
  });
@@ -501,46 +501,46 @@ async function startServer() {
501
501
  onsessionclosed: (closedSessionId) => {
502
502
  delete streamableTransports[closedSessionId];
503
503
  index_1.sessionStore.removeMcpSessionAssociation(closedSessionId);
504
- connectionTracker.closeConnection(closedSessionId, "session_closed");
504
+ connectionTracker.closeConnection(closedSessionId, 'session_closed');
505
505
  sessionManager.removeSession(closedSessionId).catch((err) => {
506
- (0, logger_1.logDebug)("Error removing closed session", { err, sessionId: closedSessionId });
506
+ (0, logger_1.logDebug)('Error removing closed session', { err, sessionId: closedSessionId });
507
507
  });
508
- (0, logger_1.logInfo)("StreamableHTTP session closed", {
508
+ (0, logger_1.logInfo)('StreamableHTTP session closed', {
509
509
  sessionId: closedSessionId,
510
- reason: "session_closed",
510
+ reason: 'session_closed',
511
511
  });
512
512
  },
513
513
  });
514
514
  await sessionManager.createSession(newSessionId, transport);
515
515
  await handleWithContext(transport);
516
516
  }
517
- if (req.method === "GET" && !res.writableEnded) {
517
+ if (req.method === 'GET' && !res.writableEnded) {
518
518
  const stopHeartbeat = startSseHeartbeat(res, effectiveSessionId);
519
519
  let socketError;
520
520
  const socket = res.socket;
521
521
  if (socket) {
522
- socket.on("error", (err) => {
522
+ socket.on('error', (err) => {
523
523
  socketError = err.code ?? err.message;
524
- (0, logger_1.logWarn)("StreamableHTTP GET socket error", {
524
+ (0, logger_1.logWarn)('StreamableHTTP GET socket error', {
525
525
  sessionId: effectiveSessionId,
526
526
  error: err.message,
527
527
  code: err.code,
528
- reason: "socket_error",
528
+ reason: 'socket_error',
529
529
  });
530
530
  });
531
531
  }
532
- res.on("close", () => {
532
+ res.on('close', () => {
533
533
  stopHeartbeat();
534
534
  const reason = socketError
535
535
  ? `peer_reset:${socketError}`
536
536
  : res.writableFinished
537
- ? "normal_close"
537
+ ? 'normal_close'
538
538
  : res.locals?.heartbeatFailed
539
- ? "heartbeat_failed"
539
+ ? 'heartbeat_failed'
540
540
  : res.destroyed
541
- ? "destroyed"
542
- : "client_disconnect";
543
- (0, logger_1.logInfo)("StreamableHTTP GET stream disconnected", {
541
+ ? 'destroyed'
542
+ : 'client_disconnect';
543
+ (0, logger_1.logInfo)('StreamableHTTP GET stream disconnected', {
544
544
  sessionId: effectiveSessionId,
545
545
  reason,
546
546
  });
@@ -548,76 +548,76 @@ async function startServer() {
548
548
  }
549
549
  }
550
550
  catch (error) {
551
- (0, logger_1.logError)("Error in StreamableHTTP transport", { err: error });
551
+ (0, logger_1.logError)('Error in StreamableHTTP transport', { err: error });
552
552
  if (!res.headersSent) {
553
- res.status(500).json({ error: "Internal server error" });
553
+ res.status(500).json({ error: 'Internal server error' });
554
554
  }
555
555
  }
556
556
  });
557
557
  startHttpServer(app, () => {
558
558
  const url = `${getProtocol()}://${config_1.HOST}:${config_1.PORT}`;
559
- (0, logger_1.logInfo)("GitLab MCP Server running", { url });
559
+ (0, logger_1.logInfo)('GitLab MCP Server running', { url });
560
560
  if (isTLSEnabled()) {
561
- (0, logger_1.logInfo)("TLS/HTTPS enabled");
561
+ (0, logger_1.logInfo)('TLS/HTTPS enabled');
562
562
  }
563
- (0, logger_1.logInfo)("Dual Transport Mode Active");
564
- (0, logger_1.logInfo)("SSE endpoint", { endpoint: `${url}/sse`, note: "backwards compatibility" });
565
- (0, logger_1.logInfo)("StreamableHTTP endpoint", {
563
+ (0, logger_1.logInfo)('Dual Transport Mode Active');
564
+ (0, logger_1.logInfo)('SSE endpoint', { endpoint: `${url}/sse`, note: 'backwards compatibility' });
565
+ (0, logger_1.logInfo)('StreamableHTTP endpoint', {
566
566
  endpoint: `${url}/mcp`,
567
- note: "modern, supports SSE + JSON-RPC",
567
+ note: 'modern, supports SSE + JSON-RPC',
568
568
  });
569
569
  if ((0, index_1.isOAuthEnabled)()) {
570
- (0, logger_1.logInfo)("OAuth Mode Active");
571
- (0, logger_1.logInfo)("OAuth metadata", { endpoint: `${url}/.well-known/oauth-authorization-server` });
572
- (0, logger_1.logInfo)("Authorization endpoint", { endpoint: `${url}/authorize` });
573
- (0, logger_1.logInfo)("Token exchange endpoint", { endpoint: `${url}/token` });
570
+ (0, logger_1.logInfo)('OAuth Mode Active');
571
+ (0, logger_1.logInfo)('OAuth metadata', { endpoint: `${url}/.well-known/oauth-authorization-server` });
572
+ (0, logger_1.logInfo)('Authorization endpoint', { endpoint: `${url}/authorize` });
573
+ (0, logger_1.logInfo)('Token exchange endpoint', { endpoint: `${url}/token` });
574
574
  }
575
- (0, logger_1.logInfo)("SSE keepalive configured for proxy chain compatibility", {
575
+ (0, logger_1.logInfo)('SSE keepalive configured for proxy chain compatibility', {
576
576
  heartbeatMs: config_1.SSE_HEARTBEAT_MS,
577
577
  keepAliveTimeoutMs: config_1.HTTP_KEEPALIVE_TIMEOUT_MS,
578
578
  });
579
- (0, logger_1.logInfo)("Clients can use either transport as needed");
579
+ (0, logger_1.logInfo)('Clients can use either transport as needed');
580
580
  });
581
581
  break;
582
582
  }
583
583
  }
584
584
  }
585
585
  async function gracefulShutdown(signal) {
586
- (0, logger_1.logInfo)("Shutting down GitLab MCP Server...", { signal });
586
+ (0, logger_1.logInfo)('Shutting down GitLab MCP Server...', { signal });
587
587
  try {
588
588
  const connTracker = (0, index_3.getConnectionTracker)();
589
- connTracker.closeAllConnections("server_shutdown");
590
- (0, logger_1.logInfo)("All connections closed for shutdown");
589
+ connTracker.closeAllConnections('server_shutdown');
590
+ (0, logger_1.logInfo)('All connections closed for shutdown');
591
591
  }
592
592
  catch (error) {
593
- (0, logger_1.logError)("Error closing connections", { err: error });
593
+ (0, logger_1.logError)('Error closing connections', { err: error });
594
594
  }
595
595
  try {
596
596
  const sm = (0, session_manager_1.getSessionManager)();
597
597
  await sm.shutdown();
598
- (0, logger_1.logInfo)("Session manager shut down successfully");
598
+ (0, logger_1.logInfo)('Session manager shut down successfully');
599
599
  }
600
600
  catch (error) {
601
- (0, logger_1.logError)("Error shutting down session manager", { err: error });
601
+ (0, logger_1.logError)('Error shutting down session manager', { err: error });
602
602
  }
603
603
  try {
604
604
  await index_1.sessionStore.close();
605
- (0, logger_1.logInfo)("Session store closed successfully");
605
+ (0, logger_1.logInfo)('Session store closed successfully');
606
606
  }
607
607
  catch (error) {
608
- (0, logger_1.logError)("Error closing session store", { err: error });
608
+ (0, logger_1.logError)('Error closing session store', { err: error });
609
609
  }
610
610
  process.exit(0);
611
611
  }
612
- process.on("SIGINT", () => {
613
- gracefulShutdown("SIGINT").catch(err => {
614
- (0, logger_1.logError)("Error during graceful shutdown", { err });
612
+ process.on('SIGINT', () => {
613
+ gracefulShutdown('SIGINT').catch((err) => {
614
+ (0, logger_1.logError)('Error during graceful shutdown', { err });
615
615
  process.exit(1);
616
616
  });
617
617
  });
618
- process.on("SIGTERM", () => {
619
- gracefulShutdown("SIGTERM").catch(err => {
620
- (0, logger_1.logError)("Error during graceful shutdown", { err });
618
+ process.on('SIGTERM', () => {
619
+ gracefulShutdown('SIGTERM').catch((err) => {
620
+ (0, logger_1.logError)('Error during graceful shutdown', { err });
621
621
  process.exit(1);
622
622
  });
623
623
  });