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,82 @@
1
+ "use strict";
2
+ /**
3
+ * Constants for task operations
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SORT_FIELD_ALIASES = exports.VALID_SORT_FIELDS = exports.REPEAT_MODE_MAP = exports.MAX_BULK_OPERATION_TASKS = exports.BULK_OPERATION_BATCH_SIZE = exports.AUTH_ERROR_MESSAGES = void 0;
7
+ // Error message constants
8
+ exports.AUTH_ERROR_MESSAGES = {
9
+ ASSIGNEE_CREATE: 'Assignee operations may have authentication issues with certain Vikunja API versions. ' +
10
+ 'This is a known limitation. The task was created but assignees could not be added.',
11
+ ASSIGNEE_UPDATE: 'Assignee operations may have authentication issues with certain Vikunja API versions. ' +
12
+ 'This is a known limitation. Other task fields were updated but assignees could not be changed.',
13
+ ASSIGNEE_ASSIGN: 'Assignee operations may have authentication issues with certain Vikunja API versions. ' +
14
+ 'This is a known limitation that prevents assigning users to tasks.',
15
+ ASSIGNEE_REMOVE: 'Assignee removal operations may have authentication issues with certain Vikunja API versions. ' +
16
+ 'This is a known limitation that prevents removing users from tasks.',
17
+ ASSIGNEE_REMOVE_PARTIAL: 'Assignee removal operations may have authentication issues with certain Vikunja API versions. ' +
18
+ 'This is a known limitation. New assignees were added but old assignees could not be removed.',
19
+ ASSIGNEE_BULK_UPDATE: 'Assignee operations may have authentication issues with certain Vikunja API versions. ' +
20
+ 'This is a known limitation that prevents bulk updating assignees.',
21
+ LABEL_CREATE: 'Label operations may have authentication issues with certain Vikunja API versions. ' +
22
+ 'This is a known limitation. The task was created but labels could not be added.',
23
+ LABEL_UPDATE: 'Label operations may have authentication issues with certain Vikunja API versions. ' +
24
+ 'This is a known limitation. Other task fields were updated but labels could not be changed.',
25
+ };
26
+ // Bulk operation constants
27
+ exports.BULK_OPERATION_BATCH_SIZE = 10;
28
+ exports.MAX_BULK_OPERATION_TASKS = 100;
29
+ // Repeat mode mapping for bulk update API
30
+ // Maps user-friendly string values to Vikunja API numeric codes
31
+ exports.REPEAT_MODE_MAP = {
32
+ default: 0,
33
+ month: 1,
34
+ from_current: 2,
35
+ };
36
+ // Valid `sort_by` values for `GET /tasks`/`GET /projects/{id}/tasks`, per the
37
+ // vendored OpenAPI spec (docs/vikunja-openapi.json, `sort_by` query param
38
+ // description). An unrecognized value is silently ignored server-side rather
39
+ // than erroring, so passing e.g. a misspelled or camelCase field name results
40
+ // in tasks quietly coming back in default (id) order with no indication
41
+ // anything was wrong — the same "free-form string that behaves like an enum"
42
+ // class of ergonomics gap the post-#89 sweep's field/enum allowlist item
43
+ // targets. Validated explicitly here so the caller gets an agent-friendly
44
+ // error instead of a silent no-op.
45
+ exports.VALID_SORT_FIELDS = [
46
+ 'id',
47
+ 'title',
48
+ 'description',
49
+ 'done',
50
+ 'done_at',
51
+ 'due_date',
52
+ 'created_by_id',
53
+ 'project_id',
54
+ 'repeat_after',
55
+ 'priority',
56
+ 'start_date',
57
+ 'end_date',
58
+ 'hex_color',
59
+ 'percent_done',
60
+ 'uid',
61
+ 'created',
62
+ 'updated',
63
+ 'relevance',
64
+ ];
65
+ // This tool exposes task fields to callers in camelCase (dueDate, startDate,
66
+ // etc. — see CreateTaskArgs/UpdateTaskArgs), so `sort` accepts the same
67
+ // camelCase spelling and is translated to the API's snake_case field name
68
+ // here, mirroring `FILTER_FIELD_TO_API_FIELD` in src/utils/filters.ts (added
69
+ // for the exact same reason: sending `dueDate` verbatim as `sort_by` is not a
70
+ // field Vikunja recognizes).
71
+ exports.SORT_FIELD_ALIASES = {
72
+ doneAt: 'done_at',
73
+ dueDate: 'due_date',
74
+ createdById: 'created_by_id',
75
+ projectId: 'project_id',
76
+ repeatAfter: 'repeat_after',
77
+ startDate: 'start_date',
78
+ endDate: 'end_date',
79
+ hexColor: 'hex_color',
80
+ percentDone: 'percent_done',
81
+ };
82
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/tools/tasks/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,0BAA0B;AACb,QAAA,mBAAmB,GAAG;IACjC,eAAe,EACb,wFAAwF;QACxF,oFAAoF;IACtF,eAAe,EACb,wFAAwF;QACxF,gGAAgG;IAClG,eAAe,EACb,wFAAwF;QACxF,oEAAoE;IACtE,eAAe,EACb,gGAAgG;QAChG,qEAAqE;IACvE,uBAAuB,EACrB,gGAAgG;QAChG,8FAA8F;IAChG,oBAAoB,EAClB,wFAAwF;QACxF,mEAAmE;IACrE,YAAY,EACV,qFAAqF;QACrF,iFAAiF;IACnF,YAAY,EACV,qFAAqF;QACrF,6FAA6F;CAChG,CAAC;AAEF,2BAA2B;AACd,QAAA,yBAAyB,GAAG,EAAE,CAAC;AAC/B,QAAA,wBAAwB,GAAG,GAAG,CAAC;AAE5C,0CAA0C;AAC1C,gEAAgE;AACnD,QAAA,eAAe,GAA2B;IACrD,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,YAAY,EAAE,CAAC;CACP,CAAC;AAEX,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,wEAAwE;AACxE,6EAA6E;AAC7E,yEAAyE;AACzE,0EAA0E;AAC1E,mCAAmC;AACtB,QAAA,iBAAiB,GAAG;IAC/B,IAAI;IACJ,OAAO;IACP,aAAa;IACb,MAAM;IACN,SAAS;IACT,UAAU;IACV,eAAe;IACf,YAAY;IACZ,cAAc;IACd,UAAU;IACV,YAAY;IACZ,UAAU;IACV,WAAW;IACX,cAAc;IACd,KAAK;IACL,SAAS;IACT,SAAS;IACT,WAAW;CACH,CAAC;AAEX,6EAA6E;AAC7E,wEAAwE;AACxE,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,6BAA6B;AAChB,QAAA,kBAAkB,GAA2B;IACxD,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,UAAU;IACnB,WAAW,EAAE,eAAe;IAC5B,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE,cAAc;IAC3B,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,cAAc;CACnB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Task Creation Service
3
+ * Handles task creation with label/assignee management and rollback logic
4
+ */
5
+ import type { AuthManager } from '../../../auth/AuthManager';
6
+ export interface CreateTaskArgs {
7
+ projectId?: number;
8
+ title?: string;
9
+ description?: string;
10
+ dueDate?: string;
11
+ startDate?: string;
12
+ endDate?: string;
13
+ priority?: number;
14
+ labels?: number[];
15
+ assignees?: number[];
16
+ repeatAfter?: number;
17
+ repeatMode?: 'day' | 'week' | 'month' | 'year';
18
+ sessionId?: string;
19
+ }
20
+ /**
21
+ * Creates a new task with comprehensive error handling and rollback support
22
+ */
23
+ export declare function createTask(args: CreateTaskArgs, authManager: AuthManager): Promise<{
24
+ content: Array<{
25
+ type: 'text';
26
+ text: string;
27
+ }>;
28
+ }>;
29
+ //# sourceMappingURL=TaskCreationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskCreationService.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/crud/TaskCreationService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAgB7D,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAE/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA4M7D"}
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ /**
3
+ * Task Creation Service
4
+ * Handles task creation with label/assignee management and rollback logic
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createTask = createTask;
8
+ const types_1 = require("../../../types");
9
+ const vikunja_rest_1 = require("../../../utils/vikunja-rest");
10
+ const logger_1 = require("../../../utils/logger");
11
+ const auth_error_handler_1 = require("../../../utils/auth-error-handler");
12
+ const retry_1 = require("../../../utils/retry");
13
+ const error_handler_1 = require("../../../utils/error-handler");
14
+ const validation_1 = require("../../../utils/validation");
15
+ const constants_1 = require("../constants");
16
+ const validation_2 = require("../validation");
17
+ const TaskResponseFormatter_1 = require("./TaskResponseFormatter");
18
+ const response_factory_1 = require("../../../utils/response-factory");
19
+ /**
20
+ * Creates a new task with comprehensive error handling and rollback support
21
+ */
22
+ async function createTask(args, authManager) {
23
+ try {
24
+ // Validate required fields
25
+ if (!args.projectId) {
26
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'projectId is required to create a task');
27
+ }
28
+ (0, validation_2.validateId)(args.projectId, 'projectId');
29
+ if (!args.title) {
30
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'title is required to create a task');
31
+ }
32
+ // Sanitize and validate user inputs for comprehensive security
33
+ const sanitizedTitle = (0, validation_1.sanitizeString)(args.title);
34
+ // Preserve empty strings as they are valid descriptions
35
+ const sanitizedDescription = args.description !== undefined ? (0, validation_1.sanitizeString)(args.description) : undefined;
36
+ // Validate optional date fields
37
+ if (args.dueDate) {
38
+ (0, validation_2.validateDateString)(args.dueDate, 'dueDate');
39
+ }
40
+ if (args.startDate) {
41
+ (0, validation_2.validateDateString)(args.startDate, 'startDate');
42
+ }
43
+ if (args.endDate) {
44
+ (0, validation_2.validateDateString)(args.endDate, 'endDate');
45
+ }
46
+ // Validate assignee IDs upfront
47
+ if (args.assignees && args.assignees.length > 0) {
48
+ args.assignees.forEach((id) => (0, validation_2.validateId)(id, 'assignee ID'));
49
+ }
50
+ // Validate label IDs upfront
51
+ if (args.labels && args.labels.length > 0) {
52
+ args.labels.forEach((id) => (0, validation_2.validateId)(id, 'label ID'));
53
+ }
54
+ // Build the initial task object with sanitized values
55
+ const newTask = {
56
+ title: sanitizedTitle,
57
+ project_id: args.projectId,
58
+ };
59
+ // Add optional fields with sanitized values
60
+ if (sanitizedDescription !== undefined)
61
+ newTask.description = sanitizedDescription;
62
+ if (args.dueDate !== undefined)
63
+ newTask.due_date = args.dueDate;
64
+ if (args.startDate !== undefined)
65
+ newTask.start_date = args.startDate;
66
+ if (args.endDate !== undefined)
67
+ newTask.end_date = args.endDate;
68
+ if (args.priority !== undefined)
69
+ newTask.priority = args.priority;
70
+ // Handle repeat configuration. The generated `models.Task.repeat_mode`
71
+ // type (0 | 1 | 2) matches the real API, unlike the legacy client's
72
+ // (incorrect) 'day' | 'week' | 'month' | 'year' typing — no bypass cast
73
+ // needed now that this goes through the generated type.
74
+ if (args.repeatAfter !== undefined || args.repeatMode !== undefined) {
75
+ const repeatConfig = (0, validation_2.convertRepeatConfiguration)(args.repeatAfter, args.repeatMode);
76
+ if (repeatConfig.repeat_after !== undefined)
77
+ newTask.repeat_after = repeatConfig.repeat_after;
78
+ if (repeatConfig.repeat_mode !== undefined) {
79
+ newTask.repeat_mode = repeatConfig.repeat_mode;
80
+ }
81
+ }
82
+ // Create the base task. PUT /projects/{id}/tasks per the OpenAPI spec
83
+ // (models.Task request/response body).
84
+ const createdTask = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'PUT', `/projects/${args.projectId}/tasks`, newTask);
85
+ // Labels/assignees require a task id — fail loudly instead of reporting success without them
86
+ const needsPostCreate = (args.labels !== undefined && args.labels.length > 0) ||
87
+ (args.assignees !== undefined && args.assignees.length > 0);
88
+ if (needsPostCreate && !createdTask.id) {
89
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, 'Task was created but Vikunja did not return a task id, so labels/assignees could not be applied');
90
+ }
91
+ // Track creation state for potential rollback
92
+ const creationState = {
93
+ createdTask,
94
+ labelsAdded: false,
95
+ assigneesAdded: false
96
+ };
97
+ if (needsPostCreate) {
98
+ try {
99
+ // Add labels if provided
100
+ if (args.labels && args.labels.length > 0 && createdTask.id) {
101
+ await addLabelsToTask(authManager, createdTask.id, args.labels);
102
+ creationState.labelsAdded = true;
103
+ }
104
+ // Add assignees if provided
105
+ if (args.assignees && args.assignees.length > 0 && createdTask.id) {
106
+ await addAssigneesToTask(authManager, createdTask.id, args.assignees);
107
+ creationState.assigneesAdded = true;
108
+ }
109
+ }
110
+ catch (updateError) {
111
+ // Attempt to clean up the partially created task
112
+ await rollbackTaskCreation(authManager, creationState, updateError);
113
+ // The rollback function will re-throw the original error with context
114
+ }
115
+ }
116
+ // Fetch the complete task with labels and assignees
117
+ const completeTask = createdTask.id
118
+ ? await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${createdTask.id}`)
119
+ : createdTask;
120
+ // Defense-in-depth (adapted from upstream PR #43): verify assignees actually
121
+ // persisted. Even with the additive per-user endpoint, some Vikunja API/auth
122
+ // combinations can report success without persisting — surface that instead
123
+ // of silently reporting success.
124
+ let assigneeWarning;
125
+ if (args.assignees && args.assignees.length > 0 && completeTask.id) {
126
+ const persistedIds = new Set((completeTask.assignees || []).map((a) => a.id));
127
+ const missingIds = args.assignees.filter((id) => !persistedIds.has(id));
128
+ if (missingIds.length > 0) {
129
+ assigneeWarning =
130
+ `Warning: assignee(s) [${missingIds.join(', ')}] were not persisted. ` +
131
+ `This is a known Vikunja API limitation with API token auth. Try using JWT authentication instead.`;
132
+ }
133
+ }
134
+ // Verify labels actually stuck — avoid silent success when the API no-ops
135
+ if (args.labels && args.labels.length > 0) {
136
+ const attachedIds = new Set((completeTask.labels || [])
137
+ .map((label) => label.id)
138
+ .filter((id) => typeof id === 'number'));
139
+ const missing = args.labels.filter((id) => !attachedIds.has(id));
140
+ if (missing.length > 0) {
141
+ await rollbackTaskCreation(authManager, creationState, new Error(`Labels were requested but not attached after create (missing label ids: ${missing.join(', ')})`));
142
+ }
143
+ }
144
+ const response = (0, TaskResponseFormatter_1.createTaskResponse)('create-task', assigneeWarning
145
+ ? `Task created, but assignees may not have been saved. ${assigneeWarning}`
146
+ : 'Task created successfully', { task: completeTask }, {
147
+ timestamp: new Date().toISOString(),
148
+ projectId: args.projectId,
149
+ // Reflect what was actually persisted, not merely what was requested:
150
+ // if label/assignee attachment fails the task creation is rolled back
151
+ // and this response is never reached, so these flags are only true
152
+ // once the corresponding step has genuinely succeeded.
153
+ labelsAdded: creationState.labelsAdded,
154
+ assigneesAdded: creationState.assigneesAdded,
155
+ }, undefined, // verbosity (ignored - using standard AORP)
156
+ undefined, // useOptimizedFormat (ignored - using standard AORP)
157
+ undefined, // useAorp (ignored - always using AORP)
158
+ undefined, // aorpConfig (using auto-generated)
159
+ args.sessionId);
160
+ logger_1.logger.debug('Tasks tool response', {
161
+ subcommand: 'create',
162
+ taskId: completeTask.id,
163
+ });
164
+ return {
165
+ content: [
166
+ {
167
+ type: 'text',
168
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response.response),
169
+ },
170
+ ],
171
+ };
172
+ }
173
+ catch (error) {
174
+ // Re-throw MCPError instances without modification
175
+ if (error instanceof types_1.MCPError) {
176
+ throw error;
177
+ }
178
+ // Handle fetch/connection errors with helpful guidance
179
+ if (error instanceof Error && (error.message.includes('fetch failed') ||
180
+ error.message.includes('ECONNREFUSED') ||
181
+ error.message.includes('ENOTFOUND'))) {
182
+ throw (0, error_handler_1.handleFetchError)(error, 'create task');
183
+ }
184
+ // Use standardized error transformation for all other errors
185
+ throw (0, error_handler_1.transformApiError)(error, 'Failed to create task');
186
+ }
187
+ }
188
+ /**
189
+ * Adds labels to a task via the additive per-label endpoint (PUT
190
+ * /tasks/{taskID}/labels, body { label_id }, models.LabelTask) — same as
191
+ * apply-label. The bulk endpoint can silently no-op on some Vikunja versions
192
+ * (GitHub #37).
193
+ *
194
+ * Intentionally does not use withRetry: that helper shares an "anonymous"
195
+ * circuit breaker across calls, so a later create would re-fire the first
196
+ * call's label set against the wrong task.
197
+ */
198
+ async function addLabelsToTask(authManager, taskId, labelIds) {
199
+ try {
200
+ for (const labelId of labelIds) {
201
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'PUT', `/tasks/${taskId}/labels`, {
202
+ label_id: labelId,
203
+ });
204
+ }
205
+ }
206
+ catch (labelError) {
207
+ // Check if it's an auth error
208
+ if ((0, auth_error_handler_1.isAuthenticationError)(labelError)) {
209
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `${constants_1.AUTH_ERROR_MESSAGES.LABEL_CREATE} Task ID: ${taskId}`);
210
+ }
211
+ throw labelError;
212
+ }
213
+ }
214
+ /**
215
+ * Adds assignees to a task with retry logic for authentication errors, via the
216
+ * direct-REST additive single-assign endpoint.
217
+ */
218
+ async function addAssigneesToTask(authManager, taskId, assigneeIds) {
219
+ try {
220
+ // Assign each user via the ADDITIVE single-assign endpoint (PUT
221
+ // /tasks/{taskID}/assignees, body { user_id }, models.TaskAssginee) rather
222
+ // than the bulk endpoint (POST .../assignees/bulk), which REPLACES the
223
+ // entire assignee list — a bulk call would silently unassign everyone
224
+ // (democratize-technology/vikunja-mcp#15). Sequential on purpose
225
+ // (post-#89 pattern sweep):
226
+ // concurrent per-user writes to the same task risk "database is locked"
227
+ // 500s on SQLite-backed instances, same class as the bulk-update
228
+ // assignee-restore fix.
229
+ for (const userId of assigneeIds) {
230
+ await (0, retry_1.withRetry)(() => (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'PUT', `/tasks/${taskId}/assignees`, { user_id: userId }), {
231
+ ...retry_1.RETRY_CONFIG.AUTH_ERRORS,
232
+ shouldRetry: (error) => (0, auth_error_handler_1.isAuthenticationError)(error)
233
+ });
234
+ }
235
+ }
236
+ catch (assigneeError) {
237
+ // Check if it's an auth error after retries
238
+ if ((0, auth_error_handler_1.isAuthenticationError)(assigneeError)) {
239
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `${constants_1.AUTH_ERROR_MESSAGES.ASSIGNEE_CREATE} (Retried ${retry_1.RETRY_CONFIG.AUTH_ERRORS.maxRetries} times). Task ID: ${taskId}`);
240
+ }
241
+ throw assigneeError;
242
+ }
243
+ }
244
+ /**
245
+ * Attempts to roll back a partially created task and throws enhanced error context
246
+ */
247
+ async function rollbackTaskCreation(authManager, creationState, originalError) {
248
+ // Attempt to clean up the partially created task
249
+ let rollbackSucceeded = false;
250
+ if (creationState.createdTask.id) {
251
+ try {
252
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'DELETE', `/tasks/${creationState.createdTask.id}`);
253
+ rollbackSucceeded = true;
254
+ }
255
+ catch (deleteError) {
256
+ // Log the cleanup failure but throw the original error
257
+ logger_1.logger.error('Failed to clean up partially created task:', deleteError);
258
+ }
259
+ }
260
+ // Re-throw the original error with context
261
+ const errorMessage = `Failed to complete task creation: ${originalError instanceof Error ? originalError.message : String(originalError)}. ${rollbackSucceeded
262
+ ? 'Task was successfully rolled back.'
263
+ : 'Task rollback also failed - manual cleanup may be required.'}`;
264
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, errorMessage, {
265
+ vikunjaError: {
266
+ taskId: creationState.createdTask.id,
267
+ partiallyCreated: true,
268
+ labelsAdded: creationState.labelsAdded,
269
+ assigneesAdded: creationState.assigneesAdded,
270
+ rollbackSucceeded,
271
+ },
272
+ });
273
+ }
274
+ //# sourceMappingURL=TaskCreationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskCreationService.js","sourceRoot":"","sources":["../../../../src/tools/tasks/crud/TaskCreationService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Task Deletion Service
3
+ * Handles task deletion with graceful error handling and response formatting
4
+ */
5
+ import type { AuthManager } from '../../../auth/AuthManager';
6
+ export interface DeleteTaskArgs {
7
+ id?: number;
8
+ sessionId?: string;
9
+ }
10
+ /**
11
+ * Deletes a task with graceful error handling and informative response
12
+ */
13
+ export declare function deleteTask(args: DeleteTaskArgs, authManager: AuthManager): Promise<{
14
+ content: Array<{
15
+ type: 'text';
16
+ text: string;
17
+ }>;
18
+ }>;
19
+ //# sourceMappingURL=TaskDeletionService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskDeletionService.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/crud/TaskDeletionService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAW7D,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAoE7D"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * Task Deletion Service
4
+ * Handles task deletion with graceful error handling and response formatting
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.deleteTask = deleteTask;
8
+ const types_1 = require("../../../types");
9
+ const vikunja_rest_1 = require("../../../utils/vikunja-rest");
10
+ const validation_1 = require("../validation");
11
+ const error_handler_1 = require("../../../utils/error-handler");
12
+ const TaskResponseFormatter_1 = require("./TaskResponseFormatter");
13
+ const response_factory_1 = require("../../../utils/response-factory");
14
+ /**
15
+ * Deletes a task with graceful error handling and informative response
16
+ */
17
+ async function deleteTask(args, authManager) {
18
+ try {
19
+ if (!args.id) {
20
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Task id is required for delete operation');
21
+ }
22
+ (0, validation_1.validateId)(args.id, 'id');
23
+ // Try to get task before deletion for response, but handle failure gracefully
24
+ const deletionContext = await gatherDeletionContext(authManager, args.id);
25
+ // Perform the deletion
26
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'DELETE', `/tasks/${args.id}`);
27
+ const response = (0, TaskResponseFormatter_1.createTaskResponse)('delete-task', deletionContext.taskToDelete
28
+ ? `Task "${deletionContext.taskToDelete.title}" deleted successfully`
29
+ : `Task ${args.id} deleted successfully`, (deletionContext.taskToDelete
30
+ ? { task: deletionContext.taskToDelete }
31
+ : { deletedTaskId: args.id }), {
32
+ timestamp: new Date().toISOString(),
33
+ taskId: args.id,
34
+ ...(deletionContext.taskToDelete?.title && { taskTitle: deletionContext.taskToDelete.title }),
35
+ }, undefined, // verbosity (ignored)
36
+ undefined, // useOptimizedFormat (ignored)
37
+ undefined, // useAorp (ignored)
38
+ undefined, // aorpConfig (using auto-generated)
39
+ args.sessionId);
40
+ return {
41
+ content: [
42
+ {
43
+ type: 'text',
44
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response.response),
45
+ },
46
+ ],
47
+ };
48
+ }
49
+ catch (error) {
50
+ // A REST 404 is translated to the same friendly "not found" message the
51
+ // pre-migration legacy client error path produced via handleStatusCodeError
52
+ // (which keys off a bare `.statusCode` property). vikunjaRestRequest
53
+ // always throws MCPError with the status nested under `.details`.
54
+ if (error instanceof types_1.MCPError) {
55
+ if (error.details?.statusCode === 404 && args.id) {
56
+ throw new types_1.MCPError(types_1.ErrorCode.NOT_FOUND, `Task with ID ${args.id} not found`);
57
+ }
58
+ throw error;
59
+ }
60
+ // Handle fetch/connection errors with helpful guidance
61
+ if (error instanceof Error && (error.message.includes('fetch failed') ||
62
+ error.message.includes('ECONNREFUSED') ||
63
+ error.message.includes('ENOTFOUND'))) {
64
+ throw (0, error_handler_1.handleFetchError)(error, 'delete task');
65
+ }
66
+ // Use standardized error transformation for all other errors
67
+ if (args.id) {
68
+ throw (0, error_handler_1.handleStatusCodeError)(error, 'delete task', args.id, `Task with ID ${args.id} not found`);
69
+ }
70
+ throw (0, error_handler_1.transformApiError)(error, 'Failed to delete task');
71
+ }
72
+ }
73
+ /**
74
+ * Gathers information about the task before deletion for better response messaging
75
+ * Handles cases where the task might not exist or be accessible
76
+ */
77
+ async function gatherDeletionContext(authManager, taskId) {
78
+ let taskToDelete;
79
+ let retrievalSuccess = false;
80
+ try {
81
+ taskToDelete = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${taskId}`);
82
+ retrievalSuccess = true;
83
+ }
84
+ catch {
85
+ // If we can't get the task, proceed with deletion anyway
86
+ // This handles cases where the task exists but isn't accessible due to permissions
87
+ // or the task is already deleted/inconsistent state
88
+ taskToDelete = undefined;
89
+ retrievalSuccess = false;
90
+ }
91
+ return {
92
+ taskToDelete,
93
+ retrievalSuccess
94
+ };
95
+ }
96
+ //# sourceMappingURL=TaskDeletionService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskDeletionService.js","sourceRoot":"","sources":["../../../../src/tools/tasks/crud/TaskDeletionService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Task Read Service
3
+ * Handles task retrieval operations with comprehensive error handling
4
+ */
5
+ import type { AuthManager } from '../../../auth/AuthManager';
6
+ export interface GetTaskArgs {
7
+ id?: number;
8
+ sessionId?: string;
9
+ }
10
+ /**
11
+ * Retrieves a task by ID with comprehensive error handling
12
+ */
13
+ export declare function getTask(args: GetTaskArgs, authManager: AuthManager): Promise<{
14
+ content: Array<{
15
+ type: 'text';
16
+ text: string;
17
+ }>;
18
+ }>;
19
+ //# sourceMappingURL=TaskReadService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskReadService.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/crud/TaskReadService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAU7D,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,IAAI,EAAE,WAAW,EACjB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6D7D"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /**
3
+ * Task Read Service
4
+ * Handles task retrieval operations with comprehensive error handling
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getTask = getTask;
8
+ const index_1 = require("../../../index");
9
+ const vikunja_rest_1 = require("../../../utils/vikunja-rest");
10
+ const validation_1 = require("../validation");
11
+ const TaskResponseFormatter_1 = require("./TaskResponseFormatter");
12
+ const response_factory_1 = require("../../../utils/response-factory");
13
+ /**
14
+ * Retrieves a task by ID with comprehensive error handling
15
+ */
16
+ async function getTask(args, authManager) {
17
+ try {
18
+ if (!args.id) {
19
+ throw new index_1.MCPError(index_1.ErrorCode.VALIDATION_ERROR, 'Task id is required for get operation');
20
+ }
21
+ (0, validation_1.validateId)(args.id, 'id');
22
+ const task = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${args.id}`);
23
+ const response = (0, TaskResponseFormatter_1.createTaskResponse)('get-task', `Retrieved task "${task.title}"`, { task }, {
24
+ timestamp: new Date().toISOString(),
25
+ taskId: args.id,
26
+ }, undefined, // verbosity (ignored)
27
+ undefined, // useOptimizedFormat (ignored)
28
+ undefined, // useAorp (ignored)
29
+ undefined, // aorpConfig (using auto-generated)
30
+ args.sessionId);
31
+ return {
32
+ content: [
33
+ {
34
+ type: 'text',
35
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response.response),
36
+ },
37
+ ],
38
+ };
39
+ }
40
+ catch (error) {
41
+ // A REST 404 is translated to the same friendly "not found" message the
42
+ // pre-migration legacy client error path produced via handleStatusCodeError
43
+ // (which keys off a bare `.statusCode` property). vikunjaRestRequest
44
+ // always throws MCPError with the status nested under `.details`, so that
45
+ // 404 case is intercepted here, before the generic MCPError passthrough
46
+ // below would otherwise re-throw the raw REST error message unchanged.
47
+ if (error instanceof index_1.MCPError) {
48
+ if (error.details?.statusCode === 404 && args.id) {
49
+ throw new index_1.MCPError(index_1.ErrorCode.NOT_FOUND, `Task with ID ${args.id} not found`);
50
+ }
51
+ throw error;
52
+ }
53
+ // Handle fetch/connection errors with helpful guidance
54
+ if (error instanceof Error && (error.message.includes('fetch failed') ||
55
+ error.message.includes('ECONNREFUSED') ||
56
+ error.message.includes('ENOTFOUND'))) {
57
+ throw (0, index_1.handleFetchError)(error, 'get task');
58
+ }
59
+ // Use standardized error transformation for all other errors
60
+ if (args.id) {
61
+ throw (0, index_1.handleStatusCodeError)(error, 'get task', args.id, `Task with ID ${args.id} not found`);
62
+ }
63
+ throw (0, index_1.transformApiError)(error, 'Failed to get task');
64
+ }
65
+ }
66
+ //# sourceMappingURL=TaskReadService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskReadService.js","sourceRoot":"","sources":["../../../../src/tools/tasks/crud/TaskReadService.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAqBH,0BAgEC;AAnFD,0CAAiH;AAEjH,8DAAiE;AACjE,8CAA2C;AAC3C,mEAA6D;AAC7D,sEAAuE;AAWvE;;GAEG;AACI,KAAK,UAAU,OAAO,CAC3B,IAAiB,EACjB,WAAwB;IAExB,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,gBAAQ,CAAC,iBAAS,CAAC,gBAAgB,EAAE,uCAAuC,CAAC,CAAC;QAC1F,CAAC;QACD,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE1B,MAAM,IAAI,GAAG,MAAM,IAAA,iCAAkB,EAAc,WAAW,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAE5F,MAAM,QAAQ,GAAG,IAAA,0CAAkB,EACjC,UAAU,EACV,mBAAmB,IAAI,CAAC,KAAK,GAAG,EAChC,EAAE,IAAI,EAAyD,EAC/D;YACE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,EAAE;SAChB,EACD,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,+BAA+B;QAC1C,SAAS,EAAE,oBAAoB;QAC/B,SAAS,EAAE,oCAAoC;QAC/C,IAAI,CAAC,SAAS,CACf,CAAC;QAEF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAA,uCAAoB,EAAC,QAAQ,CAAC,QAAQ,CAAC;iBAC9C;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wEAAwE;QACxE,4EAA4E;QAC5E,qEAAqE;QACrE,0EAA0E;QAC1E,wEAAwE;QACxE,uEAAuE;QACvE,IAAI,KAAK,YAAY,gBAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,KAAK,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACjD,MAAM,IAAI,gBAAQ,CAAC,iBAAS,CAAC,SAAS,EAAE,gBAAgB,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;YAC/E,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,uDAAuD;QACvD,IAAI,KAAK,YAAY,KAAK,IAAI,CAC5B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YACtC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YACtC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CACpC,EAAE,CAAC;YACF,MAAM,IAAA,wBAAgB,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;QAED,6DAA6D;QAC7D,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAA,6BAAqB,EAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,gBAAgB,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,IAAA,yBAAiB,EAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}