vikunja-mcp-ng 0.4.0

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 (582) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -0
  3. package/dist/auth/AuthManager.d.ts +63 -0
  4. package/dist/auth/AuthManager.d.ts.map +1 -0
  5. package/dist/auth/AuthManager.js +137 -0
  6. package/dist/auth/AuthManager.js.map +1 -0
  7. package/dist/auth/index.d.ts +7 -0
  8. package/dist/auth/index.d.ts.map +1 -0
  9. package/dist/auth/index.js +14 -0
  10. package/dist/auth/index.js.map +1 -0
  11. package/dist/auth/permissions.d.ts +60 -0
  12. package/dist/auth/permissions.d.ts.map +1 -0
  13. package/dist/auth/permissions.js +173 -0
  14. package/dist/auth/permissions.js.map +1 -0
  15. package/dist/client/VikunjaClientFactory.d.ts +41 -0
  16. package/dist/client/VikunjaClientFactory.d.ts.map +1 -0
  17. package/dist/client/VikunjaClientFactory.js +58 -0
  18. package/dist/client/VikunjaClientFactory.js.map +1 -0
  19. package/dist/client.d.ts +70 -0
  20. package/dist/client.d.ts.map +1 -0
  21. package/dist/client.js +136 -0
  22. package/dist/client.js.map +1 -0
  23. package/dist/config/ConfigurationManager.d.ts +106 -0
  24. package/dist/config/ConfigurationManager.d.ts.map +1 -0
  25. package/dist/config/ConfigurationManager.js +509 -0
  26. package/dist/config/ConfigurationManager.js.map +1 -0
  27. package/dist/config/index.d.ts +9 -0
  28. package/dist/config/index.d.ts.map +1 -0
  29. package/dist/config/index.js +36 -0
  30. package/dist/config/index.js.map +1 -0
  31. package/dist/config/secrets.d.ts +33 -0
  32. package/dist/config/secrets.d.ts.map +1 -0
  33. package/dist/config/secrets.js +90 -0
  34. package/dist/config/secrets.js.map +1 -0
  35. package/dist/config/types.d.ts +1113 -0
  36. package/dist/config/types.d.ts.map +1 -0
  37. package/dist/config/types.js +189 -0
  38. package/dist/config/types.js.map +1 -0
  39. package/dist/formatters/BatchImportResponseFormatter.d.ts +89 -0
  40. package/dist/formatters/BatchImportResponseFormatter.d.ts.map +1 -0
  41. package/dist/formatters/BatchImportResponseFormatter.js +125 -0
  42. package/dist/formatters/BatchImportResponseFormatter.js.map +1 -0
  43. package/dist/index.d.ts +20 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +130 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/middleware/direct-middleware.d.ts +9 -0
  48. package/dist/middleware/direct-middleware.d.ts.map +1 -0
  49. package/dist/middleware/direct-middleware.js +49 -0
  50. package/dist/middleware/direct-middleware.js.map +1 -0
  51. package/dist/middleware/index.d.ts +8 -0
  52. package/dist/middleware/index.d.ts.map +1 -0
  53. package/dist/middleware/index.js +21 -0
  54. package/dist/middleware/index.js.map +1 -0
  55. package/dist/middleware/simplified-rate-limit.d.ts +147 -0
  56. package/dist/middleware/simplified-rate-limit.d.ts.map +1 -0
  57. package/dist/middleware/simplified-rate-limit.js +533 -0
  58. package/dist/middleware/simplified-rate-limit.js.map +1 -0
  59. package/dist/parsers/CSVParser.d.ts +36 -0
  60. package/dist/parsers/CSVParser.d.ts.map +1 -0
  61. package/dist/parsers/CSVParser.js +69 -0
  62. package/dist/parsers/CSVParser.js.map +1 -0
  63. package/dist/parsers/InputParserFactory.d.ts +17 -0
  64. package/dist/parsers/InputParserFactory.d.ts.map +1 -0
  65. package/dist/parsers/InputParserFactory.js +137 -0
  66. package/dist/parsers/InputParserFactory.js.map +1 -0
  67. package/dist/parsers/JSONParser.d.ts +74 -0
  68. package/dist/parsers/JSONParser.d.ts.map +1 -0
  69. package/dist/parsers/JSONParser.js +69 -0
  70. package/dist/parsers/JSONParser.js.map +1 -0
  71. package/dist/services/EntityResolver.d.ts +92 -0
  72. package/dist/services/EntityResolver.d.ts.map +1 -0
  73. package/dist/services/EntityResolver.js +201 -0
  74. package/dist/services/EntityResolver.js.map +1 -0
  75. package/dist/services/TaskCreationService.d.ts +99 -0
  76. package/dist/services/TaskCreationService.d.ts.map +1 -0
  77. package/dist/services/TaskCreationService.js +392 -0
  78. package/dist/services/TaskCreationService.js.map +1 -0
  79. package/dist/storage/SimpleFilterStorage.d.ts +103 -0
  80. package/dist/storage/SimpleFilterStorage.d.ts.map +1 -0
  81. package/dist/storage/SimpleFilterStorage.js +350 -0
  82. package/dist/storage/SimpleFilterStorage.js.map +1 -0
  83. package/dist/storage/filtering/FilterSerializer.d.ts +45 -0
  84. package/dist/storage/filtering/FilterSerializer.d.ts.map +1 -0
  85. package/dist/storage/filtering/FilterSerializer.js +171 -0
  86. package/dist/storage/filtering/FilterSerializer.js.map +1 -0
  87. package/dist/storage/filtering/FilterValidator.d.ts +59 -0
  88. package/dist/storage/filtering/FilterValidator.d.ts.map +1 -0
  89. package/dist/storage/filtering/FilterValidator.js +183 -0
  90. package/dist/storage/filtering/FilterValidator.js.map +1 -0
  91. package/dist/storage/index.d.ts +61 -0
  92. package/dist/storage/index.d.ts.map +1 -0
  93. package/dist/storage/index.js +125 -0
  94. package/dist/storage/index.js.map +1 -0
  95. package/dist/storage/templateFileStore.d.ts +62 -0
  96. package/dist/storage/templateFileStore.d.ts.map +1 -0
  97. package/dist/storage/templateFileStore.js +151 -0
  98. package/dist/storage/templateFileStore.js.map +1 -0
  99. package/dist/tools/admin.d.ts +51 -0
  100. package/dist/tools/admin.d.ts.map +1 -0
  101. package/dist/tools/admin.js +207 -0
  102. package/dist/tools/admin.js.map +1 -0
  103. package/dist/tools/auth.d.ts +9 -0
  104. package/dist/tools/auth.d.ts.map +1 -0
  105. package/dist/tools/auth.js +175 -0
  106. package/dist/tools/auth.js.map +1 -0
  107. package/dist/tools/batch-import.d.ts +5 -0
  108. package/dist/tools/batch-import.d.ts.map +1 -0
  109. package/dist/tools/batch-import.js +153 -0
  110. package/dist/tools/batch-import.js.map +1 -0
  111. package/dist/tools/caldav-tokens.d.ts +45 -0
  112. package/dist/tools/caldav-tokens.d.ts.map +1 -0
  113. package/dist/tools/caldav-tokens.js +93 -0
  114. package/dist/tools/caldav-tokens.js.map +1 -0
  115. package/dist/tools/export.d.ts +14 -0
  116. package/dist/tools/export.d.ts.map +1 -0
  117. package/dist/tools/export.js +252 -0
  118. package/dist/tools/export.js.map +1 -0
  119. package/dist/tools/filters.d.ts +50 -0
  120. package/dist/tools/filters.d.ts.map +1 -0
  121. package/dist/tools/filters.js +512 -0
  122. package/dist/tools/filters.js.map +1 -0
  123. package/dist/tools/index.d.ts +53 -0
  124. package/dist/tools/index.d.ts.map +1 -0
  125. package/dist/tools/index.js +217 -0
  126. package/dist/tools/index.js.map +1 -0
  127. package/dist/tools/labels.d.ts +22 -0
  128. package/dist/tools/labels.d.ts.map +1 -0
  129. package/dist/tools/labels.js +206 -0
  130. package/dist/tools/labels.js.map +1 -0
  131. package/dist/tools/notifications.d.ts +17 -0
  132. package/dist/tools/notifications.d.ts.map +1 -0
  133. package/dist/tools/notifications.js +171 -0
  134. package/dist/tools/notifications.js.map +1 -0
  135. package/dist/tools/projects/backgrounds.d.ts +80 -0
  136. package/dist/tools/projects/backgrounds.d.ts.map +1 -0
  137. package/dist/tools/projects/backgrounds.js +154 -0
  138. package/dist/tools/projects/backgrounds.js.map +1 -0
  139. package/dist/tools/projects/buckets.d.ts +147 -0
  140. package/dist/tools/projects/buckets.d.ts.map +1 -0
  141. package/dist/tools/projects/buckets.js +291 -0
  142. package/dist/tools/projects/buckets.js.map +1 -0
  143. package/dist/tools/projects/crud.d.ts +145 -0
  144. package/dist/tools/projects/crud.d.ts.map +1 -0
  145. package/dist/tools/projects/crud.js +425 -0
  146. package/dist/tools/projects/crud.js.map +1 -0
  147. package/dist/tools/projects/duplicate.d.ts +41 -0
  148. package/dist/tools/projects/duplicate.d.ts.map +1 -0
  149. package/dist/tools/projects/duplicate.js +49 -0
  150. package/dist/tools/projects/duplicate.js.map +1 -0
  151. package/dist/tools/projects/hierarchy.d.ts +77 -0
  152. package/dist/tools/projects/hierarchy.d.ts.map +1 -0
  153. package/dist/tools/projects/hierarchy.js +300 -0
  154. package/dist/tools/projects/hierarchy.js.map +1 -0
  155. package/dist/tools/projects/index.d.ts +34 -0
  156. package/dist/tools/projects/index.d.ts.map +1 -0
  157. package/dist/tools/projects/index.js +522 -0
  158. package/dist/tools/projects/index.js.map +1 -0
  159. package/dist/tools/projects/permission.d.ts +26 -0
  160. package/dist/tools/projects/permission.d.ts.map +1 -0
  161. package/dist/tools/projects/permission.js +53 -0
  162. package/dist/tools/projects/permission.js.map +1 -0
  163. package/dist/tools/projects/response-formatter.d.ts +54 -0
  164. package/dist/tools/projects/response-formatter.d.ts.map +1 -0
  165. package/dist/tools/projects/response-formatter.js +139 -0
  166. package/dist/tools/projects/response-formatter.js.map +1 -0
  167. package/dist/tools/projects/sharing-access.d.ts +165 -0
  168. package/dist/tools/projects/sharing-access.d.ts.map +1 -0
  169. package/dist/tools/projects/sharing-access.js +450 -0
  170. package/dist/tools/projects/sharing-access.js.map +1 -0
  171. package/dist/tools/projects/sharing.d.ts +105 -0
  172. package/dist/tools/projects/sharing.d.ts.map +1 -0
  173. package/dist/tools/projects/sharing.js +258 -0
  174. package/dist/tools/projects/sharing.js.map +1 -0
  175. package/dist/tools/projects/validation.d.ts +51 -0
  176. package/dist/tools/projects/validation.d.ts.map +1 -0
  177. package/dist/tools/projects/validation.js +160 -0
  178. package/dist/tools/projects/validation.js.map +1 -0
  179. package/dist/tools/projects/views.d.ts +161 -0
  180. package/dist/tools/projects/views.d.ts.map +1 -0
  181. package/dist/tools/projects/views.js +234 -0
  182. package/dist/tools/projects/views.js.map +1 -0
  183. package/dist/tools/projects.d.ts +20 -0
  184. package/dist/tools/projects.d.ts.map +1 -0
  185. package/dist/tools/projects.js +66 -0
  186. package/dist/tools/projects.js.map +1 -0
  187. package/dist/tools/reactions.d.ts +25 -0
  188. package/dist/tools/reactions.d.ts.map +1 -0
  189. package/dist/tools/reactions.js +108 -0
  190. package/dist/tools/reactions.js.map +1 -0
  191. package/dist/tools/subscriptions.d.ts +23 -0
  192. package/dist/tools/subscriptions.d.ts.map +1 -0
  193. package/dist/tools/subscriptions.js +111 -0
  194. package/dist/tools/subscriptions.js.map +1 -0
  195. package/dist/tools/task-assignees.d.ts +13 -0
  196. package/dist/tools/task-assignees.d.ts.map +1 -0
  197. package/dist/tools/task-assignees.js +74 -0
  198. package/dist/tools/task-assignees.js.map +1 -0
  199. package/dist/tools/task-bulk.d.ts +13 -0
  200. package/dist/tools/task-bulk.d.ts.map +1 -0
  201. package/dist/tools/task-bulk.js +117 -0
  202. package/dist/tools/task-bulk.js.map +1 -0
  203. package/dist/tools/task-comments.d.ts +12 -0
  204. package/dist/tools/task-comments.d.ts.map +1 -0
  205. package/dist/tools/task-comments.js +65 -0
  206. package/dist/tools/task-comments.js.map +1 -0
  207. package/dist/tools/task-crud.d.ts +13 -0
  208. package/dist/tools/task-crud.d.ts.map +1 -0
  209. package/dist/tools/task-crud.js +168 -0
  210. package/dist/tools/task-crud.js.map +1 -0
  211. package/dist/tools/task-labels.d.ts +13 -0
  212. package/dist/tools/task-labels.d.ts.map +1 -0
  213. package/dist/tools/task-labels.js +64 -0
  214. package/dist/tools/task-labels.js.map +1 -0
  215. package/dist/tools/task-relations.d.ts +13 -0
  216. package/dist/tools/task-relations.d.ts.map +1 -0
  217. package/dist/tools/task-relations.js +74 -0
  218. package/dist/tools/task-relations.js.map +1 -0
  219. package/dist/tools/task-reminders.d.ts +13 -0
  220. package/dist/tools/task-reminders.d.ts.map +1 -0
  221. package/dist/tools/task-reminders.js +69 -0
  222. package/dist/tools/task-reminders.js.map +1 -0
  223. package/dist/tools/tasks/assignees/AssigneeOperationsService.d.ts +63 -0
  224. package/dist/tools/tasks/assignees/AssigneeOperationsService.d.ts.map +1 -0
  225. package/dist/tools/tasks/assignees/AssigneeOperationsService.js +152 -0
  226. package/dist/tools/tasks/assignees/AssigneeOperationsService.js.map +1 -0
  227. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.d.ts +28 -0
  228. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.d.ts.map +1 -0
  229. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.js +73 -0
  230. package/dist/tools/tasks/assignees/AssigneeResponseFormatter.js.map +1 -0
  231. package/dist/tools/tasks/assignees/AssigneeValidationService.d.ts +46 -0
  232. package/dist/tools/tasks/assignees/AssigneeValidationService.d.ts.map +1 -0
  233. package/dist/tools/tasks/assignees/AssigneeValidationService.js +70 -0
  234. package/dist/tools/tasks/assignees/AssigneeValidationService.js.map +1 -0
  235. package/dist/tools/tasks/assignees/index.d.ts +52 -0
  236. package/dist/tools/tasks/assignees/index.d.ts.map +1 -0
  237. package/dist/tools/tasks/assignees/index.js +103 -0
  238. package/dist/tools/tasks/assignees/index.js.map +1 -0
  239. package/dist/tools/tasks/attach.d.ts +39 -0
  240. package/dist/tools/tasks/attach.d.ts.map +1 -0
  241. package/dist/tools/tasks/attach.js +90 -0
  242. package/dist/tools/tasks/attach.js.map +1 -0
  243. package/dist/tools/tasks/attachments.d.ts +67 -0
  244. package/dist/tools/tasks/attachments.d.ts.map +1 -0
  245. package/dist/tools/tasks/attachments.js +153 -0
  246. package/dist/tools/tasks/attachments.js.map +1 -0
  247. package/dist/tools/tasks/buckets.d.ts +41 -0
  248. package/dist/tools/tasks/buckets.d.ts.map +1 -0
  249. package/dist/tools/tasks/buckets.js +75 -0
  250. package/dist/tools/tasks/buckets.js.map +1 -0
  251. package/dist/tools/tasks/bulk/BatchProcessorFactory.d.ts +30 -0
  252. package/dist/tools/tasks/bulk/BatchProcessorFactory.d.ts.map +1 -0
  253. package/dist/tools/tasks/bulk/BatchProcessorFactory.js +69 -0
  254. package/dist/tools/tasks/bulk/BatchProcessorFactory.js.map +1 -0
  255. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.d.ts +50 -0
  256. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.d.ts.map +1 -0
  257. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.js +183 -0
  258. package/dist/tools/tasks/bulk/BulkOperationErrorHandler.js.map +1 -0
  259. package/dist/tools/tasks/bulk/BulkOperationProcessor.d.ts +101 -0
  260. package/dist/tools/tasks/bulk/BulkOperationProcessor.d.ts.map +1 -0
  261. package/dist/tools/tasks/bulk/BulkOperationProcessor.js +416 -0
  262. package/dist/tools/tasks/bulk/BulkOperationProcessor.js.map +1 -0
  263. package/dist/tools/tasks/bulk/BulkOperationTypes.d.ts +50 -0
  264. package/dist/tools/tasks/bulk/BulkOperationTypes.d.ts.map +1 -0
  265. package/dist/tools/tasks/bulk/BulkOperationTypes.js +6 -0
  266. package/dist/tools/tasks/bulk/BulkOperationTypes.js.map +1 -0
  267. package/dist/tools/tasks/bulk/BulkOperationValidator.d.ts +53 -0
  268. package/dist/tools/tasks/bulk/BulkOperationValidator.d.ts.map +1 -0
  269. package/dist/tools/tasks/bulk/BulkOperationValidator.js +216 -0
  270. package/dist/tools/tasks/bulk/BulkOperationValidator.js.map +1 -0
  271. package/dist/tools/tasks/bulk/index.d.ts +9 -0
  272. package/dist/tools/tasks/bulk/index.d.ts.map +1 -0
  273. package/dist/tools/tasks/bulk/index.js +15 -0
  274. package/dist/tools/tasks/bulk/index.js.map +1 -0
  275. package/dist/tools/tasks/bulk-operations-simplified.d.ts +62 -0
  276. package/dist/tools/tasks/bulk-operations-simplified.d.ts.map +1 -0
  277. package/dist/tools/tasks/bulk-operations-simplified.js +416 -0
  278. package/dist/tools/tasks/bulk-operations-simplified.js.map +1 -0
  279. package/dist/tools/tasks/bulk-operations.d.ts +8 -0
  280. package/dist/tools/tasks/bulk-operations.d.ts.map +1 -0
  281. package/dist/tools/tasks/bulk-operations.js +13 -0
  282. package/dist/tools/tasks/bulk-operations.js.map +1 -0
  283. package/dist/tools/tasks/by-index.d.ts +36 -0
  284. package/dist/tools/tasks/by-index.d.ts.map +1 -0
  285. package/dist/tools/tasks/by-index.js +52 -0
  286. package/dist/tools/tasks/by-index.js.map +1 -0
  287. package/dist/tools/tasks/comments/CommentOperationsService.d.ts +44 -0
  288. package/dist/tools/tasks/comments/CommentOperationsService.d.ts.map +1 -0
  289. package/dist/tools/tasks/comments/CommentOperationsService.js +86 -0
  290. package/dist/tools/tasks/comments/CommentOperationsService.js.map +1 -0
  291. package/dist/tools/tasks/comments/CommentResponseFormatter.d.ts +41 -0
  292. package/dist/tools/tasks/comments/CommentResponseFormatter.d.ts.map +1 -0
  293. package/dist/tools/tasks/comments/CommentResponseFormatter.js +114 -0
  294. package/dist/tools/tasks/comments/CommentResponseFormatter.js.map +1 -0
  295. package/dist/tools/tasks/comments/CommentValidationService.d.ts +62 -0
  296. package/dist/tools/tasks/comments/CommentValidationService.d.ts.map +1 -0
  297. package/dist/tools/tasks/comments/CommentValidationService.js +105 -0
  298. package/dist/tools/tasks/comments/CommentValidationService.js.map +1 -0
  299. package/dist/tools/tasks/comments/index.d.ts +66 -0
  300. package/dist/tools/tasks/comments/index.d.ts.map +1 -0
  301. package/dist/tools/tasks/comments/index.js +99 -0
  302. package/dist/tools/tasks/comments/index.js.map +1 -0
  303. package/dist/tools/tasks/constants.d.ts +19 -0
  304. package/dist/tools/tasks/constants.d.ts.map +1 -0
  305. package/dist/tools/tasks/constants.js +82 -0
  306. package/dist/tools/tasks/constants.js.map +1 -0
  307. package/dist/tools/tasks/crud/TaskCreationService.d.ts +29 -0
  308. package/dist/tools/tasks/crud/TaskCreationService.d.ts.map +1 -0
  309. package/dist/tools/tasks/crud/TaskCreationService.js +274 -0
  310. package/dist/tools/tasks/crud/TaskCreationService.js.map +1 -0
  311. package/dist/tools/tasks/crud/TaskDeletionService.d.ts +19 -0
  312. package/dist/tools/tasks/crud/TaskDeletionService.d.ts.map +1 -0
  313. package/dist/tools/tasks/crud/TaskDeletionService.js +96 -0
  314. package/dist/tools/tasks/crud/TaskDeletionService.js.map +1 -0
  315. package/dist/tools/tasks/crud/TaskReadService.d.ts +19 -0
  316. package/dist/tools/tasks/crud/TaskReadService.d.ts.map +1 -0
  317. package/dist/tools/tasks/crud/TaskReadService.js +66 -0
  318. package/dist/tools/tasks/crud/TaskReadService.js.map +1 -0
  319. package/dist/tools/tasks/crud/TaskResponseFormatter.d.ts +18 -0
  320. package/dist/tools/tasks/crud/TaskResponseFormatter.d.ts.map +1 -0
  321. package/dist/tools/tasks/crud/TaskResponseFormatter.js +248 -0
  322. package/dist/tools/tasks/crud/TaskResponseFormatter.js.map +1 -0
  323. package/dist/tools/tasks/crud/TaskUpdateService.d.ts +33 -0
  324. package/dist/tools/tasks/crud/TaskUpdateService.d.ts.map +1 -0
  325. package/dist/tools/tasks/crud/TaskUpdateService.js +294 -0
  326. package/dist/tools/tasks/crud/TaskUpdateService.js.map +1 -0
  327. package/dist/tools/tasks/crud/index.d.ts +17 -0
  328. package/dist/tools/tasks/crud/index.d.ts.map +1 -0
  329. package/dist/tools/tasks/crud/index.js +20 -0
  330. package/dist/tools/tasks/crud/index.js.map +1 -0
  331. package/dist/tools/tasks/duplicate.d.ts +28 -0
  332. package/dist/tools/tasks/duplicate.d.ts.map +1 -0
  333. package/dist/tools/tasks/duplicate.js +41 -0
  334. package/dist/tools/tasks/duplicate.js.map +1 -0
  335. package/dist/tools/tasks/filtering/FilterExecutor.d.ts +39 -0
  336. package/dist/tools/tasks/filtering/FilterExecutor.d.ts.map +1 -0
  337. package/dist/tools/tasks/filtering/FilterExecutor.js +214 -0
  338. package/dist/tools/tasks/filtering/FilterExecutor.js.map +1 -0
  339. package/dist/tools/tasks/filtering/FilterValidator.d.ts +59 -0
  340. package/dist/tools/tasks/filtering/FilterValidator.d.ts.map +1 -0
  341. package/dist/tools/tasks/filtering/FilterValidator.js +257 -0
  342. package/dist/tools/tasks/filtering/FilterValidator.js.map +1 -0
  343. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.d.ts +78 -0
  344. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.d.ts.map +1 -0
  345. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.js +195 -0
  346. package/dist/tools/tasks/filtering/TaskFilteringOrchestrator.js.map +1 -0
  347. package/dist/tools/tasks/filtering/evaluators.d.ts +41 -0
  348. package/dist/tools/tasks/filtering/evaluators.d.ts.map +1 -0
  349. package/dist/tools/tasks/filtering/evaluators.js +224 -0
  350. package/dist/tools/tasks/filtering/evaluators.js.map +1 -0
  351. package/dist/tools/tasks/filtering/index.d.ts +11 -0
  352. package/dist/tools/tasks/filtering/index.d.ts.map +1 -0
  353. package/dist/tools/tasks/filtering/index.js +26 -0
  354. package/dist/tools/tasks/filtering/index.js.map +1 -0
  355. package/dist/tools/tasks/index.d.ts +9 -0
  356. package/dist/tools/tasks/index.d.ts.map +1 -0
  357. package/dist/tools/tasks/index.js +337 -0
  358. package/dist/tools/tasks/index.js.map +1 -0
  359. package/dist/tools/tasks/labels.d.ts +49 -0
  360. package/dist/tools/tasks/labels.d.ts.map +1 -0
  361. package/dist/tools/tasks/labels.js +223 -0
  362. package/dist/tools/tasks/labels.js.map +1 -0
  363. package/dist/tools/tasks/mark-read.d.ts +27 -0
  364. package/dist/tools/tasks/mark-read.d.ts.map +1 -0
  365. package/dist/tools/tasks/mark-read.js +38 -0
  366. package/dist/tools/tasks/mark-read.js.map +1 -0
  367. package/dist/tools/tasks/position.d.ts +53 -0
  368. package/dist/tools/tasks/position.d.ts.map +1 -0
  369. package/dist/tools/tasks/position.js +83 -0
  370. package/dist/tools/tasks/position.js.map +1 -0
  371. package/dist/tools/tasks/reminders.d.ts +56 -0
  372. package/dist/tools/tasks/reminders.d.ts.map +1 -0
  373. package/dist/tools/tasks/reminders.js +213 -0
  374. package/dist/tools/tasks/reminders.js.map +1 -0
  375. package/dist/tools/tasks/subtasks.d.ts +85 -0
  376. package/dist/tools/tasks/subtasks.d.ts.map +1 -0
  377. package/dist/tools/tasks/subtasks.js +286 -0
  378. package/dist/tools/tasks/subtasks.js.map +1 -0
  379. package/dist/tools/tasks/types/filters.d.ts +136 -0
  380. package/dist/tools/tasks/types/filters.d.ts.map +1 -0
  381. package/dist/tools/tasks/types/filters.js +7 -0
  382. package/dist/tools/tasks/types/filters.js.map +1 -0
  383. package/dist/tools/tasks/validation.d.ts +47 -0
  384. package/dist/tools/tasks/validation.d.ts.map +1 -0
  385. package/dist/tools/tasks/validation.js +131 -0
  386. package/dist/tools/tasks/validation.js.map +1 -0
  387. package/dist/tools/tasks-relations.d.ts +25 -0
  388. package/dist/tools/tasks-relations.d.ts.map +1 -0
  389. package/dist/tools/tasks-relations.js +271 -0
  390. package/dist/tools/tasks-relations.js.map +1 -0
  391. package/dist/tools/tasks.d.ts +6 -0
  392. package/dist/tools/tasks.d.ts.map +1 -0
  393. package/dist/tools/tasks.js +10 -0
  394. package/dist/tools/tasks.js.map +1 -0
  395. package/dist/tools/teams.d.ts +9 -0
  396. package/dist/tools/teams.d.ts.map +1 -0
  397. package/dist/tools/teams.js +255 -0
  398. package/dist/tools/teams.js.map +1 -0
  399. package/dist/tools/templates.d.ts +9 -0
  400. package/dist/tools/templates.d.ts.map +1 -0
  401. package/dist/tools/templates.js +450 -0
  402. package/dist/tools/templates.js.map +1 -0
  403. package/dist/tools/tokens.d.ts +37 -0
  404. package/dist/tools/tokens.d.ts.map +1 -0
  405. package/dist/tools/tokens.js +122 -0
  406. package/dist/tools/tokens.js.map +1 -0
  407. package/dist/tools/user-deletion.d.ts +41 -0
  408. package/dist/tools/user-deletion.d.ts.map +1 -0
  409. package/dist/tools/user-deletion.js +126 -0
  410. package/dist/tools/user-deletion.js.map +1 -0
  411. package/dist/tools/users.d.ts +9 -0
  412. package/dist/tools/users.d.ts.map +1 -0
  413. package/dist/tools/users.js +418 -0
  414. package/dist/tools/users.js.map +1 -0
  415. package/dist/tools/webhooks.d.ts +31 -0
  416. package/dist/tools/webhooks.d.ts.map +1 -0
  417. package/dist/tools/webhooks.js +414 -0
  418. package/dist/tools/webhooks.js.map +1 -0
  419. package/dist/transforms/base.d.ts +204 -0
  420. package/dist/transforms/base.d.ts.map +1 -0
  421. package/dist/transforms/base.js +175 -0
  422. package/dist/transforms/base.js.map +1 -0
  423. package/dist/transforms/field-selector.d.ts +27 -0
  424. package/dist/transforms/field-selector.d.ts.map +1 -0
  425. package/dist/transforms/field-selector.js +91 -0
  426. package/dist/transforms/field-selector.js.map +1 -0
  427. package/dist/transforms/index.d.ts +15 -0
  428. package/dist/transforms/index.d.ts.map +1 -0
  429. package/dist/transforms/index.js +50 -0
  430. package/dist/transforms/index.js.map +1 -0
  431. package/dist/transforms/size-calculator.d.ts +131 -0
  432. package/dist/transforms/size-calculator.d.ts.map +1 -0
  433. package/dist/transforms/size-calculator.js +284 -0
  434. package/dist/transforms/size-calculator.js.map +1 -0
  435. package/dist/transforms/task.d.ts +207 -0
  436. package/dist/transforms/task.d.ts.map +1 -0
  437. package/dist/transforms/task.js +259 -0
  438. package/dist/transforms/task.js.map +1 -0
  439. package/dist/types/errors.d.ts +65 -0
  440. package/dist/types/errors.d.ts.map +1 -0
  441. package/dist/types/errors.js +44 -0
  442. package/dist/types/errors.js.map +1 -0
  443. package/dist/types/filters.d.ts +149 -0
  444. package/dist/types/filters.d.ts.map +1 -0
  445. package/dist/types/filters.js +26 -0
  446. package/dist/types/filters.js.map +1 -0
  447. package/dist/types/index.d.ts +147 -0
  448. package/dist/types/index.d.ts.map +1 -0
  449. package/dist/types/index.js +24 -0
  450. package/dist/types/index.js.map +1 -0
  451. package/dist/types/node-vikunja-extended.d.ts +36 -0
  452. package/dist/types/node-vikunja-extended.d.ts.map +1 -0
  453. package/dist/types/node-vikunja-extended.js +25 -0
  454. package/dist/types/node-vikunja-extended.js.map +1 -0
  455. package/dist/types/responses.d.ts +121 -0
  456. package/dist/types/responses.d.ts.map +1 -0
  457. package/dist/types/responses.js +26 -0
  458. package/dist/types/responses.js.map +1 -0
  459. package/dist/types/vikunja.d.ts +319 -0
  460. package/dist/types/vikunja.d.ts.map +1 -0
  461. package/dist/types/vikunja.js +7 -0
  462. package/dist/types/vikunja.js.map +1 -0
  463. package/dist/utils/auth-error-handler.d.ts +23 -0
  464. package/dist/utils/auth-error-handler.d.ts.map +1 -0
  465. package/dist/utils/auth-error-handler.js +162 -0
  466. package/dist/utils/auth-error-handler.js.map +1 -0
  467. package/dist/utils/composite-operation.d.ts +184 -0
  468. package/dist/utils/composite-operation.d.ts.map +1 -0
  469. package/dist/utils/composite-operation.js +293 -0
  470. package/dist/utils/composite-operation.js.map +1 -0
  471. package/dist/utils/error-handler.d.ts +39 -0
  472. package/dist/utils/error-handler.d.ts.map +1 -0
  473. package/dist/utils/error-handler.js +336 -0
  474. package/dist/utils/error-handler.js.map +1 -0
  475. package/dist/utils/filtering/ClientSideFilteringStrategy.d.ts +13 -0
  476. package/dist/utils/filtering/ClientSideFilteringStrategy.d.ts.map +1 -0
  477. package/dist/utils/filtering/ClientSideFilteringStrategy.js +129 -0
  478. package/dist/utils/filtering/ClientSideFilteringStrategy.js.map +1 -0
  479. package/dist/utils/filtering/FilteringContext.d.ts +40 -0
  480. package/dist/utils/filtering/FilteringContext.d.ts.map +1 -0
  481. package/dist/utils/filtering/FilteringContext.js +58 -0
  482. package/dist/utils/filtering/FilteringContext.js.map +1 -0
  483. package/dist/utils/filtering/HybridFilteringStrategy.d.ts +15 -0
  484. package/dist/utils/filtering/HybridFilteringStrategy.d.ts.map +1 -0
  485. package/dist/utils/filtering/HybridFilteringStrategy.js +55 -0
  486. package/dist/utils/filtering/HybridFilteringStrategy.js.map +1 -0
  487. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.d.ts +42 -0
  488. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.d.ts.map +1 -0
  489. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.js +120 -0
  490. package/dist/utils/filtering/RestCrossProjectFilteringStrategy.js.map +1 -0
  491. package/dist/utils/filtering/ServerSideFilteringStrategy.d.ts +13 -0
  492. package/dist/utils/filtering/ServerSideFilteringStrategy.d.ts.map +1 -0
  493. package/dist/utils/filtering/ServerSideFilteringStrategy.js +88 -0
  494. package/dist/utils/filtering/ServerSideFilteringStrategy.js.map +1 -0
  495. package/dist/utils/filtering/TaskFilteringStrategy.d.ts +19 -0
  496. package/dist/utils/filtering/TaskFilteringStrategy.d.ts.map +1 -0
  497. package/dist/utils/filtering/TaskFilteringStrategy.js +10 -0
  498. package/dist/utils/filtering/TaskFilteringStrategy.js.map +1 -0
  499. package/dist/utils/filtering/index.d.ts +14 -0
  500. package/dist/utils/filtering/index.d.ts.map +1 -0
  501. package/dist/utils/filtering/index.js +22 -0
  502. package/dist/utils/filtering/index.js.map +1 -0
  503. package/dist/utils/filtering/types.d.ts +108 -0
  504. package/dist/utils/filtering/types.d.ts.map +1 -0
  505. package/dist/utils/filtering/types.js +6 -0
  506. package/dist/utils/filtering/types.js.map +1 -0
  507. package/dist/utils/filters.d.ts +70 -0
  508. package/dist/utils/filters.d.ts.map +1 -0
  509. package/dist/utils/filters.js +812 -0
  510. package/dist/utils/filters.js.map +1 -0
  511. package/dist/utils/http-error-detail.d.ts +28 -0
  512. package/dist/utils/http-error-detail.d.ts.map +1 -0
  513. package/dist/utils/http-error-detail.js +67 -0
  514. package/dist/utils/http-error-detail.js.map +1 -0
  515. package/dist/utils/label-bulk.d.ts +21 -0
  516. package/dist/utils/label-bulk.d.ts.map +1 -0
  517. package/dist/utils/label-bulk.js +51 -0
  518. package/dist/utils/label-bulk.js.map +1 -0
  519. package/dist/utils/logger.d.ts +20 -0
  520. package/dist/utils/logger.d.ts.map +1 -0
  521. package/dist/utils/logger.js +66 -0
  522. package/dist/utils/logger.js.map +1 -0
  523. package/dist/utils/memory.d.ts +73 -0
  524. package/dist/utils/memory.d.ts.map +1 -0
  525. package/dist/utils/memory.js +194 -0
  526. package/dist/utils/memory.js.map +1 -0
  527. package/dist/utils/performance/batch-processor.d.ts +77 -0
  528. package/dist/utils/performance/batch-processor.d.ts.map +1 -0
  529. package/dist/utils/performance/batch-processor.js +218 -0
  530. package/dist/utils/performance/batch-processor.js.map +1 -0
  531. package/dist/utils/performance/index.d.ts +42 -0
  532. package/dist/utils/performance/index.d.ts.map +1 -0
  533. package/dist/utils/performance/index.js +49 -0
  534. package/dist/utils/performance/index.js.map +1 -0
  535. package/dist/utils/performance/performance-monitor.d.ts +116 -0
  536. package/dist/utils/performance/performance-monitor.d.ts.map +1 -0
  537. package/dist/utils/performance/performance-monitor.js +307 -0
  538. package/dist/utils/performance/performance-monitor.js.map +1 -0
  539. package/dist/utils/read-only.d.ts +111 -0
  540. package/dist/utils/read-only.d.ts.map +1 -0
  541. package/dist/utils/read-only.js +503 -0
  542. package/dist/utils/read-only.js.map +1 -0
  543. package/dist/utils/response-factory.d.ts +81 -0
  544. package/dist/utils/response-factory.d.ts.map +1 -0
  545. package/dist/utils/response-factory.js +86 -0
  546. package/dist/utils/response-factory.js.map +1 -0
  547. package/dist/utils/retry.d.ts +160 -0
  548. package/dist/utils/retry.d.ts.map +1 -0
  549. package/dist/utils/retry.js +316 -0
  550. package/dist/utils/retry.js.map +1 -0
  551. package/dist/utils/security.d.ts +70 -0
  552. package/dist/utils/security.d.ts.map +1 -0
  553. package/dist/utils/security.js +358 -0
  554. package/dist/utils/security.js.map +1 -0
  555. package/dist/utils/simple-response.d.ts +75 -0
  556. package/dist/utils/simple-response.d.ts.map +1 -0
  557. package/dist/utils/simple-response.js +311 -0
  558. package/dist/utils/simple-response.js.map +1 -0
  559. package/dist/utils/storage-errors.d.ts +9 -0
  560. package/dist/utils/storage-errors.d.ts.map +1 -0
  561. package/dist/utils/storage-errors.js +20 -0
  562. package/dist/utils/storage-errors.js.map +1 -0
  563. package/dist/utils/task-rest-transport.d.ts +28 -0
  564. package/dist/utils/task-rest-transport.d.ts.map +1 -0
  565. package/dist/utils/task-rest-transport.js +33 -0
  566. package/dist/utils/task-rest-transport.js.map +1 -0
  567. package/dist/utils/unicode-fix.d.ts +19 -0
  568. package/dist/utils/unicode-fix.d.ts.map +1 -0
  569. package/dist/utils/unicode-fix.js +70 -0
  570. package/dist/utils/unicode-fix.js.map +1 -0
  571. package/dist/utils/validation.d.ts +75 -0
  572. package/dist/utils/validation.d.ts.map +1 -0
  573. package/dist/utils/validation.js +758 -0
  574. package/dist/utils/validation.js.map +1 -0
  575. package/dist/utils/vikunja-rest.d.ts +159 -0
  576. package/dist/utils/vikunja-rest.d.ts.map +1 -0
  577. package/dist/utils/vikunja-rest.js +378 -0
  578. package/dist/utils/vikunja-rest.js.map +1 -0
  579. package/docs/CONFIGURATION.md +957 -0
  580. package/docs/DOCKER-DESKTOP-MCP.md +207 -0
  581. package/docs/TOOLS.md +422 -0
  582. package/package.json +145 -0
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ /**
3
+ * Project Link Sharing Module
4
+ *
5
+ * Handles link sharing operations for projects: `create-share`,
6
+ * `list-shares`, `get-share`, `delete-share`, `auth-share`.
7
+ *
8
+ * Migrated off the legacy client (Wave D domain migration, tracking issue #28)
9
+ * onto `vikunjaRestRequest` + types generated from the vendored OpenAPI
10
+ * spec. the legacy client's `LinkSharing` type is stale — it models
11
+ * `right`/`label`/`password_enabled`/`expires`, none of which the real API
12
+ * accepts or returns; the spec's `models.LinkSharing` uses `permission` and
13
+ * `name`, and has no `expires`/`password_enabled`/`shares` field at all. See
14
+ * docs/API_NOTES.md "Project Sharing" and docs/API-COVERAGE.md.
15
+ *
16
+ * Endpoints (verified against docs/vikunja-openapi.json):
17
+ * - PUT /projects/{project}/shares create
18
+ * - GET /projects/{project}/shares list
19
+ * - GET /projects/{project}/shares/{share} get
20
+ * - DELETE /projects/{project}/shares/{share} delete
21
+ * - POST /shares/{share}/auth auth
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.createProjectShare = createProjectShare;
25
+ exports.listProjectShares = listProjectShares;
26
+ exports.getProjectShare = getProjectShare;
27
+ exports.deleteProjectShare = deleteProjectShare;
28
+ exports.authProjectShare = authProjectShare;
29
+ const types_1 = require("../../types");
30
+ const vikunja_rest_1 = require("../../utils/vikunja-rest");
31
+ const error_handler_1 = require("../../utils/error-handler");
32
+ const validation_1 = require("./validation");
33
+ const permission_1 = require("./permission");
34
+ const response_formatter_1 = require("./response-formatter");
35
+ const response_factory_1 = require("../../utils/response-factory");
36
+ /**
37
+ * Re-throws a REST-layer 404 as a friendlier "project not found" message;
38
+ * everything else is re-thrown unchanged (MCPError as-is, anything else
39
+ * through `transformApiError`).
40
+ */
41
+ function rethrowProjectNotFound(error, projectId, context) {
42
+ if (error instanceof types_1.MCPError) {
43
+ if (error.details?.statusCode === 404) {
44
+ throw new types_1.MCPError(types_1.ErrorCode.NOT_FOUND, `Project with ID ${projectId} not found`);
45
+ }
46
+ throw error;
47
+ }
48
+ throw (0, error_handler_1.transformApiError)(error, context);
49
+ }
50
+ /**
51
+ * Creates a new link share for a project
52
+ */
53
+ async function createProjectShare(args, authManager) {
54
+ const { projectId, right, name, password, verbosity, useOptimizedFormat, useAorp } = args;
55
+ try {
56
+ (0, validation_1.validateId)(projectId, 'project id');
57
+ const numericRight = (0, permission_1.resolvePermission)(right);
58
+ // Verify the project exists before writing (verify-then-apply) so a
59
+ // missing project produces a friendly NOT_FOUND rather than whatever
60
+ // the shares endpoint itself happens to return for an absent project.
61
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/projects/${projectId}`);
62
+ // models.LinkSharing's request shape is {permission, name, password}.
63
+ const body = {
64
+ permission: numericRight,
65
+ };
66
+ if (name !== undefined) {
67
+ body.name = name.trim();
68
+ }
69
+ if (password !== undefined) {
70
+ body.password = password;
71
+ }
72
+ const createdShare = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'PUT', `/projects/${projectId}/shares`, body);
73
+ const result = (0, response_formatter_1.createProjectResponse)('create_project_share', `Share created successfully for project ID ${projectId}`, { share: createdShare }, {
74
+ projectId,
75
+ shareRight: right,
76
+ hasPassword: !!password
77
+ }, verbosity, useOptimizedFormat, useAorp);
78
+ return {
79
+ content: [
80
+ {
81
+ type: 'text',
82
+ text: (0, response_factory_1.formatAorpAsMarkdown)(result.response),
83
+ }
84
+ ]
85
+ };
86
+ }
87
+ catch (error) {
88
+ if (error instanceof types_1.MCPError && error.code === types_1.ErrorCode.VALIDATION_ERROR) {
89
+ throw error;
90
+ }
91
+ rethrowProjectNotFound(error, projectId, 'Failed to create share');
92
+ }
93
+ }
94
+ /**
95
+ * Lists all link shares for a project
96
+ */
97
+ async function listProjectShares(args, authManager) {
98
+ const { projectId, page = 1, perPage = 50, verbosity, useOptimizedFormat, useAorp } = args;
99
+ try {
100
+ (0, validation_1.validateId)(projectId, 'project id');
101
+ // Verify the project exists first (same verify-then-apply shape as create).
102
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/projects/${projectId}`);
103
+ const params = new URLSearchParams();
104
+ if (page !== 1)
105
+ params.set('page', String(page));
106
+ if (perPage !== 50)
107
+ params.set('per_page', String(perPage));
108
+ const query = params.toString();
109
+ const shares = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/projects/${projectId}/shares${query ? `?${query}` : ''}`);
110
+ const shareList = Array.isArray(shares) ? shares : [];
111
+ const result = (0, response_formatter_1.createProjectResponse)('list_project_shares', `Retrieved ${shareList.length} shares for project ${projectId}`, { shares: shareList }, {
112
+ projectId,
113
+ page,
114
+ perPage,
115
+ count: shareList.length,
116
+ totalShares: shareList.length
117
+ }, verbosity, useOptimizedFormat, useAorp);
118
+ return {
119
+ content: [
120
+ {
121
+ type: 'text',
122
+ text: (0, response_factory_1.formatAorpAsMarkdown)(result.response),
123
+ }
124
+ ]
125
+ };
126
+ }
127
+ catch (error) {
128
+ if (error instanceof types_1.MCPError && error.code === types_1.ErrorCode.VALIDATION_ERROR) {
129
+ throw error;
130
+ }
131
+ rethrowProjectNotFound(error, projectId, 'Failed to list shares');
132
+ }
133
+ }
134
+ /**
135
+ * Gets a specific link share by ID
136
+ */
137
+ async function getProjectShare(args, authManager) {
138
+ const { shareId, projectId, verbosity, useOptimizedFormat, useAorp } = args;
139
+ try {
140
+ if (!shareId || typeof shareId !== 'string' || shareId.trim().length === 0) {
141
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Share ID must be a non-empty string');
142
+ }
143
+ if (!projectId || typeof projectId !== 'number' || projectId <= 0) {
144
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Project ID is required');
145
+ }
146
+ const share = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/projects/${projectId}/shares/${Number(shareId)}`);
147
+ const shareDisplayName = share.name || `Share #${shareId}`;
148
+ const result = (0, response_formatter_1.createProjectResponse)('get_project_share', `Retrieved link share: ${shareDisplayName}`, { share }, { shareId }, verbosity, useOptimizedFormat, useAorp);
149
+ return {
150
+ content: [
151
+ {
152
+ type: 'text',
153
+ text: (0, response_factory_1.formatAorpAsMarkdown)(result.response),
154
+ }
155
+ ]
156
+ };
157
+ }
158
+ catch (error) {
159
+ if (error instanceof types_1.MCPError) {
160
+ if (error.details?.statusCode === 404) {
161
+ throw new types_1.MCPError(types_1.ErrorCode.NOT_FOUND, `Share with ID ${shareId} not found for project ${projectId}`);
162
+ }
163
+ throw error;
164
+ }
165
+ throw (0, error_handler_1.transformApiError)(error, 'Failed to get share');
166
+ }
167
+ }
168
+ /**
169
+ * Deletes a link share
170
+ */
171
+ async function deleteProjectShare(args, authManager) {
172
+ const { shareId, projectId, verbosity, useOptimizedFormat, useAorp } = args;
173
+ try {
174
+ if (!shareId || typeof shareId !== 'string' || shareId.trim().length === 0) {
175
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Share ID must be a non-empty string');
176
+ }
177
+ if (!projectId || typeof projectId !== 'number' || projectId <= 0) {
178
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Project ID is required');
179
+ }
180
+ // Get share details before deletion so the response can report the
181
+ // share's name and project id.
182
+ const share = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/projects/${projectId}/shares/${Number(shareId)}`);
183
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'DELETE', `/projects/${projectId}/shares/${Number(shareId)}`);
184
+ const result = (0, response_formatter_1.createProjectResponse)('delete_project_share', `Share with ID ${shareId} deleted successfully`, {
185
+ deleted: true,
186
+ shareId,
187
+ shareName: share.name,
188
+ projectId,
189
+ }, {
190
+ projectId,
191
+ shareId,
192
+ shareName: share.name
193
+ }, verbosity, useOptimizedFormat, useAorp);
194
+ return {
195
+ content: [
196
+ {
197
+ type: 'text',
198
+ text: (0, response_factory_1.formatAorpAsMarkdown)(result.response),
199
+ }
200
+ ]
201
+ };
202
+ }
203
+ catch (error) {
204
+ if (error instanceof types_1.MCPError) {
205
+ if (error.details?.statusCode === 404) {
206
+ throw new types_1.MCPError(types_1.ErrorCode.NOT_FOUND, `Share with ID ${shareId} not found for project ${projectId}`);
207
+ }
208
+ throw error;
209
+ }
210
+ throw (0, error_handler_1.transformApiError)(error, 'Failed to delete share');
211
+ }
212
+ }
213
+ /**
214
+ * Authenticates access to a shared project
215
+ */
216
+ async function authProjectShare(args, authManager) {
217
+ const { shareHash, password, verbosity, useOptimizedFormat, useAorp } = args;
218
+ try {
219
+ if (!shareHash || typeof shareHash !== 'string' || shareHash.trim().length === 0) {
220
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Share hash must be a non-empty string');
221
+ }
222
+ // v1.LinkShareAuth: {password}. Unauthenticated endpoint (no share-scoped
223
+ // JWT needed yet — this call obtains one), but vikunjaRestRequest is
224
+ // still used since it uses the same host/breaker/retry plumbing as every
225
+ // other authenticated call; the session's Authorization header is simply
226
+ // unused server-side for this specific route.
227
+ const authResult = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/shares/${shareHash}/auth`, { password: password || '' });
228
+ const result = (0, response_formatter_1.createProjectResponse)('auth_project_share', `Successfully authenticated to share`, { auth: authResult }, {
229
+ shareHash,
230
+ hasPassword: !!password,
231
+ authenticated: true
232
+ }, verbosity, useOptimizedFormat, useAorp);
233
+ return {
234
+ content: [
235
+ {
236
+ type: 'text',
237
+ text: (0, response_factory_1.formatAorpAsMarkdown)(result.response),
238
+ }
239
+ ]
240
+ };
241
+ }
242
+ catch (error) {
243
+ if (error instanceof types_1.MCPError) {
244
+ if (error.code === types_1.ErrorCode.VALIDATION_ERROR) {
245
+ throw error;
246
+ }
247
+ if (error.details?.statusCode === 401) {
248
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Invalid password for share`);
249
+ }
250
+ if (error.details?.statusCode === 404) {
251
+ throw new types_1.MCPError(types_1.ErrorCode.NOT_FOUND, `Share with hash ${shareHash} not found`);
252
+ }
253
+ throw error;
254
+ }
255
+ throw (0, error_handler_1.transformApiError)(error, 'Failed to authenticate to share');
256
+ }
257
+ }
258
+ //# sourceMappingURL=sharing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharing.js","sourceRoot":"","sources":["../../../src/tools/projects/sharing.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;AAsGH,gDAqEC;AAKD,8CA6DC;AAKD,0CAuDC;AAKD,gDAuEC;AAKD,4CAgEC;AAvbD,uCAAkD;AAClD,2DAA8D;AAC9D,6DAA8D;AAC9D,6CAA0C;AAC1C,6CAAuE;AACvE,6DAA6D;AAC7D,mEAAoE;AA2EpE;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,KAAc,EAAE,SAAiB,EAAE,OAAe;IAChF,IAAI,KAAK,YAAY,gBAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,KAAK,GAAG,EAAE,CAAC;YACtC,MAAM,IAAI,gBAAQ,CAAC,iBAAS,CAAC,SAAS,EAAE,mBAAmB,SAAS,YAAY,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,IAAA,iCAAiB,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CACtC,IAAqB,EACrB,WAAwB;IAExB,MAAM,EACJ,SAAS,EACT,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,kBAAkB,EAClB,OAAO,EACR,GAAG,IAAI,CAAC;IAET,IAAI,CAAC;QACH,IAAA,uBAAU,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACpC,MAAM,YAAY,GAAG,IAAA,8BAAiB,EAAC,KAAK,CAAC,CAAC;QAE9C,oEAAoE;QACpE,qEAAqE;QACrE,sEAAsE;QACtE,MAAM,IAAA,iCAAkB,EAAiB,WAAW,EAAE,KAAK,EAAE,aAAa,SAAS,EAAE,CAAC,CAAC;QAEvF,sEAAsE;QACtE,MAAM,IAAI,GAA6D;YACrE,UAAU,EAAE,YAAY;SACzB,CAAC;QACF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAA,iCAAkB,EAC3C,WAAW,EACX,KAAK,EACL,aAAa,SAAS,SAAS,EAC/B,IAAI,CACL,CAAC;QAEF,MAAM,MAAM,GAAG,IAAA,0CAAqB,EAClC,sBAAsB,EACtB,6CAA6C,SAAS,EAAE,EACxD,EAAE,KAAK,EAAE,YAAY,EAAE,EACvB;YACE,SAAS;YACT,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,CAAC,CAAC,QAAQ;SACxB,EACD,SAAS,EACT,kBAAkB,EAClB,OAAO,CACR,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAA,uCAAoB,EAAC,MAAM,CAAC,QAAQ,CAAC;iBAC5C;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAS,CAAC,gBAAgB,EAAE,CAAC;YAC3E,MAAM,KAAK,CAAC;QACd,CAAC;QACD,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACrC,IAAoB,EACpB,WAAwB;IAExB,MAAM,EACJ,SAAS,EACT,IAAI,GAAG,CAAC,EACR,OAAO,GAAG,EAAE,EACZ,SAAS,EACT,kBAAkB,EAClB,OAAO,EACR,GAAG,IAAI,CAAC;IAET,IAAI,CAAC;QACH,IAAA,uBAAU,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAEpC,4EAA4E;QAC5E,MAAM,IAAA,iCAAkB,EAAiB,WAAW,EAAE,KAAK,EAAE,aAAa,SAAS,EAAE,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,IAAI,KAAK,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,IAAI,OAAO,KAAK,EAAE;YAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAkB,EACrC,WAAW,EACX,KAAK,EACL,aAAa,SAAS,UAAU,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3D,CAAC;QACF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtD,MAAM,MAAM,GAAG,IAAA,0CAAqB,EAClC,qBAAqB,EACrB,aAAa,SAAS,CAAC,MAAM,uBAAuB,SAAS,EAAE,EAC/D,EAAE,MAAM,EAAE,SAAS,EAAE,EACrB;YACE,SAAS;YACT,IAAI;YACJ,OAAO;YACP,KAAK,EAAE,SAAS,CAAC,MAAM;YACvB,WAAW,EAAE,SAAS,CAAC,MAAM;SAC9B,EACD,SAAS,EACT,kBAAkB,EAClB,OAAO,CACR,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAA,uCAAoB,EAAC,MAAM,CAAC,QAAQ,CAAC;iBAC5C;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAS,CAAC,gBAAgB,EAAE,CAAC;YAC3E,MAAM,KAAK,CAAC;QACd,CAAC;QACD,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,uBAAuB,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CACnC,IAAkB,EAClB,WAAwB;IAExB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAE5E,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,qCAAqC,CACtC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,wBAAwB,CACzB,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAA,iCAAkB,EACpC,WAAW,EACX,KAAK,EACL,aAAa,SAAS,WAAW,MAAM,CAAC,OAAO,CAAC,EAAE,CACnD,CAAC;QAEF,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,IAAI,UAAU,OAAO,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAA,0CAAqB,EAClC,mBAAmB,EACnB,yBAAyB,gBAAgB,EAAE,EAC3C,EAAE,KAAK,EAAE,EACT,EAAE,OAAO,EAAE,EACX,SAAS,EACT,kBAAkB,EAClB,OAAO,CACR,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAA,uCAAoB,EAAC,MAAM,CAAC,QAAQ,CAAC;iBAC5C;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,KAAK,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,gBAAQ,CAAC,iBAAS,CAAC,SAAS,EAAE,iBAAiB,OAAO,0BAA0B,SAAS,EAAE,CAAC,CAAC;YACzG,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAA,iCAAiB,EAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,kBAAkB,CACtC,IAAqB,EACrB,WAAwB;IAExB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAE5E,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,qCAAqC,CACtC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,wBAAwB,CACzB,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,+BAA+B;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAA,iCAAkB,EACpC,WAAW,EACX,KAAK,EACL,aAAa,SAAS,WAAW,MAAM,CAAC,OAAO,CAAC,EAAE,CACnD,CAAC;QAEF,MAAM,IAAA,iCAAkB,EACtB,WAAW,EACX,QAAQ,EACR,aAAa,SAAS,WAAW,MAAM,CAAC,OAAO,CAAC,EAAE,CACnD,CAAC;QAEF,MAAM,MAAM,GAAG,IAAA,0CAAqB,EAClC,sBAAsB,EACtB,iBAAiB,OAAO,uBAAuB,EAC/C;YACE,OAAO,EAAE,IAAI;YACb,OAAO;YACP,SAAS,EAAE,KAAK,CAAC,IAAI;YACrB,SAAS;SACV,EACD;YACE,SAAS;YACT,OAAO;YACP,SAAS,EAAE,KAAK,CAAC,IAAI;SACtB,EACD,SAAS,EACT,kBAAkB,EAClB,OAAO,CACR,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAA,uCAAoB,EAAC,MAAM,CAAC,QAAQ,CAAC;iBAC5C;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,KAAK,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,gBAAQ,CAAC,iBAAS,CAAC,SAAS,EAAE,iBAAiB,OAAO,0BAA0B,SAAS,EAAE,CAAC,CAAC;YACzG,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAA,iCAAiB,EAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CACpC,IAAmB,EACnB,WAAwB;IAExB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAE7E,IAAI,CAAC;QACH,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjF,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,uCAAuC,CACxC,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,qEAAqE;QACrE,yEAAyE;QACzE,yEAAyE;QACzE,8CAA8C;QAC9C,MAAM,UAAU,GAAG,MAAM,IAAA,iCAAkB,EACzC,WAAW,EACX,MAAM,EACN,WAAW,SAAS,OAAO,EAC3B,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE,CAC7B,CAAC;QAEF,MAAM,MAAM,GAAG,IAAA,0CAAqB,EAClC,oBAAoB,EACpB,qCAAqC,EACrC,EAAE,IAAI,EAAE,UAAU,EAAE,EACpB;YACE,SAAS;YACT,WAAW,EAAE,CAAC,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI;SACpB,EACD,SAAS,EACT,kBAAkB,EAClB,OAAO,CACR,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAA,uCAAoB,EAAC,MAAM,CAAC,QAAQ,CAAC;iBAC5C;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAS,CAAC,gBAAgB,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAC;YACd,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,KAAK,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,gBAAQ,CAAC,iBAAS,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,KAAK,GAAG,EAAE,CAAC;gBACtC,MAAM,IAAI,gBAAQ,CAAC,iBAAS,CAAC,SAAS,EAAE,mBAAmB,SAAS,YAAY,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAA,iCAAiB,EAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Project Validation Module
3
+ * Handles all validation logic for project operations
4
+ */
5
+ import type { components } from '../../types/generated/vikunja-openapi';
6
+ import { validateId as validateSharedId } from '../../utils/validation';
7
+ type Project = components['schemas']['models.Project'];
8
+ /**
9
+ * Maximum allowed depth for project hierarchy to prevent excessive nesting
10
+ */
11
+ export declare const MAX_PROJECT_DEPTH = 10;
12
+ /**
13
+ * Validates that an ID is a positive integer
14
+ */
15
+ export declare const validateId: typeof validateSharedId;
16
+ /**
17
+ * Validates that a hex color is in the correct format (#RRGGBB)
18
+ */
19
+ export declare function validateHexColor(hexColor: string): void;
20
+ /**
21
+ * Calculates the depth of a project in the hierarchy
22
+ */
23
+ export declare function calculateProjectDepth(projectId: number, allProjects: Project[]): number;
24
+ /**
25
+ * Gets the maximum depth of a project's subtree
26
+ *
27
+ * Cycle detection is path-based (an "ancestors in the current DFS branch"
28
+ * set, popped on backtrack) rather than a single set shared across the
29
+ * whole traversal. A global set would flag legitimate non-cyclic data —
30
+ * e.g. two sibling branches that happen to reach the same (duplicate or
31
+ * corrupted) id — as a false-positive cycle. Path-based detection still
32
+ * catches every genuine cycle: a real cycle always revisits a node that is
33
+ * its own ancestor somewhere along a single branch.
34
+ */
35
+ export declare function getMaxSubtreeDepth(projectId: number, allProjects: Project[]): number;
36
+ /**
37
+ * Validates move constraints for a project: self-parenting, circular
38
+ * references, and the resulting depth of the moved project's subtree once
39
+ * it is reparented.
40
+ */
41
+ export declare function validateMoveConstraints(projectId: number, newParentId: number | undefined, allProjects: Project[]): void;
42
+ /**
43
+ * Validates project create/update data
44
+ */
45
+ export declare function validateProjectData(data: {
46
+ title?: string;
47
+ hexColor?: string;
48
+ parentProjectId?: number;
49
+ }, allProjects?: Project[]): void;
50
+ export {};
51
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAKxE,KAAK,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,UAAU,yBAAmB,CAAC;AAE3C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQvD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAwBvF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAiCpF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,WAAW,EAAE,OAAO,EAAE,GACrB,IAAI,CA+CN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CA0ChC"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ /**
3
+ * Project Validation Module
4
+ * Handles all validation logic for project operations
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.validateId = exports.MAX_PROJECT_DEPTH = void 0;
8
+ exports.validateHexColor = validateHexColor;
9
+ exports.calculateProjectDepth = calculateProjectDepth;
10
+ exports.getMaxSubtreeDepth = getMaxSubtreeDepth;
11
+ exports.validateMoveConstraints = validateMoveConstraints;
12
+ exports.validateProjectData = validateProjectData;
13
+ const types_1 = require("../../types");
14
+ const validation_1 = require("../../utils/validation");
15
+ /**
16
+ * Maximum allowed depth for project hierarchy to prevent excessive nesting
17
+ */
18
+ exports.MAX_PROJECT_DEPTH = 10;
19
+ /**
20
+ * Validates that an ID is a positive integer
21
+ */
22
+ exports.validateId = validation_1.validateId;
23
+ /**
24
+ * Validates that a hex color is in the correct format (#RRGGBB)
25
+ */
26
+ function validateHexColor(hexColor) {
27
+ // Validates hex color in format #RRGGBB (6 hex digits)
28
+ if (!/^#[0-9A-Fa-f]{6}$/.test(hexColor)) {
29
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Invalid hex color format. Expected format: #RRGGBB (e.g., #4287f5, #FF0000, #00ff00)');
30
+ }
31
+ }
32
+ /**
33
+ * Calculates the depth of a project in the hierarchy
34
+ */
35
+ function calculateProjectDepth(projectId, allProjects) {
36
+ let depth = 0;
37
+ let currentId = projectId;
38
+ const visitedIds = new Set();
39
+ while (currentId !== undefined) {
40
+ if (visitedIds.has(currentId)) {
41
+ throw new types_1.MCPError(types_1.ErrorCode.INTERNAL_ERROR, 'Circular reference detected in project hierarchy');
42
+ }
43
+ visitedIds.add(currentId);
44
+ const project = allProjects.find((p) => p.id === currentId);
45
+ if (!project) {
46
+ break;
47
+ }
48
+ currentId = typeof project.parent_project_id === 'number' ? project.parent_project_id : undefined;
49
+ depth++;
50
+ }
51
+ return depth;
52
+ }
53
+ /**
54
+ * Gets the maximum depth of a project's subtree
55
+ *
56
+ * Cycle detection is path-based (an "ancestors in the current DFS branch"
57
+ * set, popped on backtrack) rather than a single set shared across the
58
+ * whole traversal. A global set would flag legitimate non-cyclic data —
59
+ * e.g. two sibling branches that happen to reach the same (duplicate or
60
+ * corrupted) id — as a false-positive cycle. Path-based detection still
61
+ * catches every genuine cycle: a real cycle always revisits a node that is
62
+ * its own ancestor somewhere along a single branch.
63
+ */
64
+ function getMaxSubtreeDepth(projectId, allProjects) {
65
+ function dfs(currentId, currentDepth, path) {
66
+ if (path.has(currentId)) {
67
+ throw new types_1.MCPError(types_1.ErrorCode.INTERNAL_ERROR, 'Circular reference detected in project hierarchy');
68
+ }
69
+ if (currentDepth > exports.MAX_PROJECT_DEPTH) {
70
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Project hierarchy depth exceeds maximum allowed depth of ${exports.MAX_PROJECT_DEPTH}`);
71
+ }
72
+ path.add(currentId);
73
+ let maxDepth = currentDepth;
74
+ const children = allProjects.filter((p) => p.parent_project_id === currentId);
75
+ for (const child of children) {
76
+ if (child.id === undefined) {
77
+ continue; // Skip children without valid IDs
78
+ }
79
+ const childDepth = dfs(child.id, currentDepth + 1, path);
80
+ maxDepth = Math.max(maxDepth, childDepth);
81
+ }
82
+ path.delete(currentId);
83
+ return maxDepth;
84
+ }
85
+ return dfs(projectId, 0, new Set());
86
+ }
87
+ /**
88
+ * Validates move constraints for a project: self-parenting, circular
89
+ * references, and the resulting depth of the moved project's subtree once
90
+ * it is reparented.
91
+ */
92
+ function validateMoveConstraints(projectId, newParentId, allProjects) {
93
+ if (newParentId === projectId) {
94
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Cannot move a project to be its own parent');
95
+ }
96
+ // Check if moving would create a circular reference. Reassigning
97
+ // projectId's parent_project_id to newParentId and then walking
98
+ // projectId's own descendants (via child links) will revisit projectId
99
+ // itself if newParentId is one of projectId's descendants — the moved
100
+ // project's own (updated) record shows up as "a child of" whichever node
101
+ // in its old subtree it would now be parented under.
102
+ const updatedProjects = allProjects.map((p) => p.id === projectId ? { ...p, parent_project_id: newParentId } : p);
103
+ let subtreeDepth;
104
+ try {
105
+ subtreeDepth = getMaxSubtreeDepth(projectId, updatedProjects);
106
+ }
107
+ catch (error) {
108
+ if (error instanceof types_1.MCPError && error.code === types_1.ErrorCode.INTERNAL_ERROR) {
109
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Move would create a circular reference in project hierarchy');
110
+ }
111
+ throw error;
112
+ }
113
+ // Moving under a new parent can push the project's subtree past the
114
+ // maximum allowed depth even when neither the project's own subtree nor
115
+ // the new parent's ancestor chain is individually too deep. newParentId's
116
+ // depth is computed against the original (pre-move) hierarchy — by this
117
+ // point it's confirmed not to be a descendant of projectId, so it can't
118
+ // have been affected by the reparenting.
119
+ if (newParentId !== undefined) {
120
+ const newParentDepth = calculateProjectDepth(newParentId, allProjects);
121
+ const resultingDepth = newParentDepth + 1 + subtreeDepth;
122
+ if (resultingDepth > exports.MAX_PROJECT_DEPTH) {
123
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Moving this project would exceed the maximum depth of ${exports.MAX_PROJECT_DEPTH} levels`);
124
+ }
125
+ }
126
+ }
127
+ /**
128
+ * Validates project create/update data
129
+ */
130
+ function validateProjectData(data, allProjects) {
131
+ if (data.title !== undefined) {
132
+ if (typeof data.title !== 'string' || data.title.trim().length === 0) {
133
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Project title must be a non-empty string');
134
+ }
135
+ if (data.title.length > 250) {
136
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Project title must not exceed 250 characters');
137
+ }
138
+ }
139
+ if (data.hexColor !== undefined) {
140
+ validateHexColor(data.hexColor);
141
+ }
142
+ // parentProjectId === 0 is Vikunja's own "no parent / root project"
143
+ // sentinel, never a real project id to validate — the caller-facing Zod
144
+ // schema already enforces `.positive()` for a genuinely *supplied*
145
+ // parentProjectId, so a 0 reaching here only ever comes from
146
+ // updateProject's merge-preserve default (buildProjectUpdatePayload
147
+ // resolving an omitted parentProjectId to the current project's own
148
+ // parent_project_id, which is 0 for a root project — see
149
+ // ENDPOINT-PLAYBOOK.md §4). Treating it as "must be a positive integer
150
+ // AND must exist in allProjects" broke every no-op update of a
151
+ // already-root-level project.
152
+ if (data.parentProjectId !== undefined && data.parentProjectId !== 0 && allProjects) {
153
+ (0, exports.validateId)(data.parentProjectId, 'parentProjectId');
154
+ const parentProject = allProjects.find((p) => p.id === data.parentProjectId);
155
+ if (!parentProject) {
156
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Parent project with ID ${data.parentProjectId} not found`);
157
+ }
158
+ }
159
+ }
160
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/tools/projects/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Project view operations
3
+ *
4
+ * Implements `list-views`, `get-view`, `create-view`, `update-view`,
5
+ * `delete-view`, and the `set-done-bucket` composite, against Vikunja's
6
+ * project view endpoints (`/projects/{project}/views[/{id}]`). legacy client
7
+ * has no support for project views at all, so — like `buckets.ts` — this
8
+ * calls the Vikunja REST API directly via the shared `vikunja-rest` helper.
9
+ *
10
+ * `POST /projects/{project}/views/{id}` replaces the entire ProjectView
11
+ * resource (see docs/ENDPOINT-PLAYBOOK.md §4), so `update-view` and
12
+ * `set-done-bucket` both fetch the current view first and merge requested
13
+ * changes onto it (`buildViewUpdatePayload`) rather than sending a bare
14
+ * partial object — the same fetch-merge-POST pattern as
15
+ * `buildProjectUpdatePayload` in `crud.ts`.
16
+ */
17
+ import type { AuthManager } from '../../auth/AuthManager';
18
+ import type { components } from '../../types/generated/vikunja-openapi';
19
+ type VikunjaProjectView = components['schemas']['models.ProjectView'];
20
+ type ViewKind = 'list' | 'gantt' | 'table' | 'kanban';
21
+ type BucketConfigurationMode = 'none' | 'manual' | 'filter';
22
+ export interface ListViewsArgs {
23
+ /** Project whose views should be listed. */
24
+ id?: number;
25
+ /** Session id for response tracking. */
26
+ sessionId?: string;
27
+ }
28
+ export interface GetViewArgs {
29
+ /** Project the view belongs to. */
30
+ id?: number;
31
+ /** Id of the view to fetch. */
32
+ viewId?: number;
33
+ /** Session id for response tracking. */
34
+ sessionId?: string;
35
+ }
36
+ export interface CreateViewArgs {
37
+ /** Project the new view should belong to. */
38
+ id?: number;
39
+ /** Title of the new view. */
40
+ title?: string;
41
+ /** Kind of view to create (`list`, `gantt`, `table`, or `kanban`). */
42
+ viewKind?: ViewKind;
43
+ /** Bucket configuration mode. Only meaningful for kanban-style views. */
44
+ bucketConfigurationMode?: BucketConfigurationMode;
45
+ /** Session id for response tracking. */
46
+ sessionId?: string;
47
+ }
48
+ export interface UpdateViewArgs {
49
+ /** Project the view belongs to. */
50
+ id?: number;
51
+ /** Id of the view to update. */
52
+ viewId?: number;
53
+ /** New title, if changing. */
54
+ title?: string;
55
+ /** New view kind, if changing. */
56
+ viewKind?: ViewKind;
57
+ /** New bucket configuration mode, if changing. */
58
+ bucketConfigurationMode?: BucketConfigurationMode;
59
+ /** New done-bucket id, if changing. Also settable via `set-done-bucket`. */
60
+ doneBucketId?: number;
61
+ /** New default-bucket id, if changing. */
62
+ defaultBucketId?: number;
63
+ /** Session id for response tracking. */
64
+ sessionId?: string;
65
+ }
66
+ export interface DeleteViewArgs {
67
+ /** Project the view belongs to. */
68
+ id?: number;
69
+ /** Id of the view to delete. */
70
+ viewId?: number;
71
+ /** Session id for response tracking. */
72
+ sessionId?: string;
73
+ }
74
+ export interface SetDoneBucketArgs {
75
+ /** Project whose Kanban view's done bucket should be set. */
76
+ id?: number;
77
+ /** Optional Kanban view id. Auto-resolved from the project when omitted. */
78
+ viewId?: number;
79
+ /** Id of the bucket that should become the done bucket. */
80
+ bucketId?: number;
81
+ /** Session id for response tracking. */
82
+ sessionId?: string;
83
+ }
84
+ /**
85
+ * Builds a project view update payload by merging the current view with
86
+ * requested field changes, so fields the caller didn't mention survive the
87
+ * full-model-replace `POST /projects/{project}/views/{id}` round trip.
88
+ */
89
+ export declare function buildViewUpdatePayload(currentView: VikunjaProjectView, updates: {
90
+ title?: string;
91
+ viewKind?: ViewKind;
92
+ bucketConfigurationMode?: BucketConfigurationMode;
93
+ doneBucketId?: number;
94
+ defaultBucketId?: number;
95
+ }): VikunjaProjectView;
96
+ /**
97
+ * Lists the views of a project.
98
+ */
99
+ export declare function listViews(args: ListViewsArgs, authManager: AuthManager): Promise<{
100
+ content: Array<{
101
+ type: 'text';
102
+ text: string;
103
+ }>;
104
+ }>;
105
+ /**
106
+ * Gets a single project view by id.
107
+ */
108
+ export declare function getView(args: GetViewArgs, authManager: AuthManager): Promise<{
109
+ content: Array<{
110
+ type: 'text';
111
+ text: string;
112
+ }>;
113
+ }>;
114
+ /**
115
+ * Creates a new view on a project.
116
+ */
117
+ export declare function createView(args: CreateViewArgs, authManager: AuthManager): Promise<{
118
+ content: Array<{
119
+ type: 'text';
120
+ text: string;
121
+ }>;
122
+ }>;
123
+ /**
124
+ * Updates a project view. `POST /projects/{project}/views/{id}` is a
125
+ * full-model-replace endpoint, so the current view is fetched first and
126
+ * merged with the requested changes (see `buildViewUpdatePayload`).
127
+ */
128
+ export declare function updateView(args: UpdateViewArgs, authManager: AuthManager): Promise<{
129
+ content: Array<{
130
+ type: 'text';
131
+ text: string;
132
+ }>;
133
+ }>;
134
+ /**
135
+ * Deletes a project view.
136
+ */
137
+ export declare function deleteView(args: DeleteViewArgs, authManager: AuthManager): Promise<{
138
+ content: Array<{
139
+ type: 'text';
140
+ text: string;
141
+ }>;
142
+ }>;
143
+ /**
144
+ * Composite: sets a Kanban view's done bucket.
145
+ *
146
+ * `models.Bucket` has no `is_done_bucket` field of its own (see
147
+ * docs/API_NOTES.md "Kanban 'Done' Bucket") — the done bucket is a property
148
+ * of the ProjectView (`done_bucket_id`), not the bucket. This is the only
149
+ * way to *set* it (list-buckets can only read it). Steps: resolve the
150
+ * project's Kanban view (or use an explicit `viewId`), fetch-merge-POST the
151
+ * `done_bucket_id` change onto it, then verify the response reflects the
152
+ * requested bucket before reporting success.
153
+ */
154
+ export declare function setDoneBucket(args: SetDoneBucketArgs, authManager: AuthManager): Promise<{
155
+ content: Array<{
156
+ type: 'text';
157
+ text: string;
158
+ }>;
159
+ }>;
160
+ export {};
161
+ //# sourceMappingURL=views.d.ts.map