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,153 @@
1
+ "use strict";
2
+ /**
3
+ * Attachments read-side subcommands of `vikunja_tasks`.
4
+ *
5
+ * Complements `attach.ts`'s upload path (`PUT /tasks/{id}/attachments`) with:
6
+ * - `list-attachments`: `GET /tasks/{id}/attachments` (page/per_page).
7
+ * - `get-attachment-info`: metadata for one attachment. The spec has no
8
+ * single-attachment metadata endpoint — `GET
9
+ * /tasks/{id}/attachments/{attachmentID}` returns the raw file bytes,
10
+ * not JSON — so this is derived by fetching the list and finding the
11
+ * matching id, the same fetch-list-and-filter shape `vikunja_webhooks`
12
+ * uses for its `get` subcommand (no per-id GET exists there either).
13
+ * - `delete-attachment`: `DELETE /tasks/{id}/attachments/{attachmentID}`.
14
+ * - `download-attachment`: per the OpenAPI spec, `GET
15
+ * /tasks/{id}/attachments/{attachmentID}` produces
16
+ * `application/octet-stream`. MCP has no binary/file-delivery channel
17
+ * (see docs/API_NOTES.md's "MCP-Specific Limitations"), so this cannot
18
+ * fetch and hand back the file itself. Honesty over pretending
19
+ * (docs/ENDPOINT-PLAYBOOK.md §7): it returns the direct download URL and
20
+ * the auth header the caller needs to fetch it themselves — the same
21
+ * shape as `vikunja_download_user_export` in `src/tools/export.ts`.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.listAttachments = listAttachments;
25
+ exports.getAttachmentInfo = getAttachmentInfo;
26
+ exports.deleteAttachment = deleteAttachment;
27
+ exports.downloadAttachment = downloadAttachment;
28
+ const types_1 = require("../../types");
29
+ const validation_1 = require("../../utils/validation");
30
+ const response_factory_1 = require("../../utils/response-factory");
31
+ const vikunja_rest_1 = require("../../utils/vikunja-rest");
32
+ function requireTaskId(args, op) {
33
+ if (args.id === undefined || args.id === null) {
34
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Task id is required for ${op}`);
35
+ }
36
+ (0, validation_1.validateId)(args.id, 'id');
37
+ return args.id;
38
+ }
39
+ function requireAttachmentId(args, op) {
40
+ if (args.attachmentId === undefined || args.attachmentId === null) {
41
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `attachmentId is required for ${op}`);
42
+ }
43
+ (0, validation_1.validateId)(args.attachmentId, 'attachmentId');
44
+ return args.attachmentId;
45
+ }
46
+ function buildPaginationQuery(args) {
47
+ if (args.page !== undefined)
48
+ (0, validation_1.validateId)(args.page, 'page');
49
+ if (args.perPage !== undefined)
50
+ (0, validation_1.validateId)(args.perPage, 'perPage');
51
+ const params = new URLSearchParams();
52
+ if (args.page !== undefined)
53
+ params.set('page', String(args.page));
54
+ if (args.perPage !== undefined)
55
+ params.set('per_page', String(args.perPage));
56
+ const qs = params.toString();
57
+ return qs ? `?${qs}` : '';
58
+ }
59
+ async function fetchAttachments(authManager, taskId, args) {
60
+ const items = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${taskId}/attachments${buildPaginationQuery(args)}`);
61
+ return Array.isArray(items) ? items : [];
62
+ }
63
+ function summarizeAttachment(attachment) {
64
+ return {
65
+ id: attachment.id ?? null,
66
+ filename: attachment.file?.name ?? null,
67
+ size: attachment.file?.size ?? null,
68
+ mime: attachment.file?.mime ?? null,
69
+ created: attachment.created ?? null,
70
+ createdBy: attachment.created_by
71
+ ? {
72
+ id: attachment.created_by.id ?? null,
73
+ username: attachment.created_by.username ?? null,
74
+ name: attachment.created_by.name ?? null,
75
+ }
76
+ : null,
77
+ };
78
+ }
79
+ /**
80
+ * Lists a task's attachments (`GET /tasks/{id}/attachments`).
81
+ */
82
+ async function listAttachments(args, authManager) {
83
+ const taskId = requireTaskId(args, 'list-attachments operation');
84
+ const attachments = await fetchAttachments(authManager, taskId, args);
85
+ const response = (0, response_factory_1.createStandardResponse)('list-attachments', `Task ${taskId} has ${attachments.length} attachment(s)`, {
86
+ taskId,
87
+ attachments: attachments.map(summarizeAttachment),
88
+ count: attachments.length,
89
+ }, {
90
+ timestamp: new Date().toISOString(),
91
+ count: attachments.length,
92
+ ...(args.page !== undefined ? { page: args.page } : {}),
93
+ ...(args.perPage !== undefined ? { perPage: args.perPage } : {}),
94
+ }, args.sessionId);
95
+ return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
96
+ }
97
+ /**
98
+ * Retrieves metadata (file name, size, mime, created, author) for a single
99
+ * attachment. There is no dedicated single-attachment metadata endpoint in
100
+ * the spec, so this fetches the list and picks out the matching id.
101
+ */
102
+ async function getAttachmentInfo(args, authManager) {
103
+ const taskId = requireTaskId(args, 'get-attachment-info operation');
104
+ const attachmentId = requireAttachmentId(args, 'get-attachment-info operation');
105
+ const attachments = await fetchAttachments(authManager, taskId, args);
106
+ const attachment = attachments.find((a) => a.id === attachmentId);
107
+ if (!attachment) {
108
+ throw new types_1.MCPError(types_1.ErrorCode.NOT_FOUND, `Attachment ${attachmentId} not found on task ${taskId}` +
109
+ (args.page !== undefined || args.perPage !== undefined
110
+ ? ' on the requested page — pass a different page/perPage to search elsewhere'
111
+ : ' on the default page — pass page/perPage to search further pages if the task has many attachments'));
112
+ }
113
+ const response = (0, response_factory_1.createStandardResponse)('get-attachment-info', `Retrieved metadata for attachment ${attachmentId} on task ${taskId}`, { taskId, ...summarizeAttachment(attachment) }, { timestamp: new Date().toISOString() }, args.sessionId);
114
+ return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
115
+ }
116
+ /**
117
+ * Deletes an attachment (`DELETE /tasks/{id}/attachments/{attachmentID}`).
118
+ */
119
+ async function deleteAttachment(args, authManager) {
120
+ const taskId = requireTaskId(args, 'delete-attachment operation');
121
+ const attachmentId = requireAttachmentId(args, 'delete-attachment operation');
122
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'DELETE', `/tasks/${taskId}/attachments/${attachmentId}`);
123
+ const response = (0, response_factory_1.createStandardResponse)('delete-attachment', `Deleted attachment ${attachmentId} from task ${taskId}`, { taskId, attachmentId, deleted: true }, { timestamp: new Date().toISOString(), affectedFields: ['attachments'] }, args.sessionId);
124
+ return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
125
+ }
126
+ /**
127
+ * Returns the direct download URL for an attachment plus auth guidance,
128
+ * instead of pretending this tool can deliver the binary file itself. See
129
+ * the module doc comment for why: `GET
130
+ * /tasks/{id}/attachments/{attachmentID}` returns
131
+ * `application/octet-stream`, and MCP has no binary content channel.
132
+ */
133
+ function downloadAttachment(args, authManager) {
134
+ const taskId = requireTaskId(args, 'download-attachment operation');
135
+ const attachmentId = requireAttachmentId(args, 'download-attachment operation');
136
+ const session = authManager.getSession();
137
+ const baseUrl = (0, vikunja_rest_1.resolveBaseUrl)(session.apiUrl);
138
+ const query = args.previewSize ? `?preview_size=${encodeURIComponent(args.previewSize)}` : '';
139
+ const downloadUrl = `${baseUrl}/tasks/${taskId}/attachments/${attachmentId}${query}`;
140
+ const response = (0, response_factory_1.createStandardResponse)('download-attachment', 'This endpoint returns application/octet-stream (the raw file bytes) per the ' +
141
+ 'Vikunja API spec, and the MCP protocol has no channel to deliver binary ' +
142
+ 'content through this tool. Fetch downloadUrl yourself with an ' +
143
+ '`Authorization: Bearer <token>` header, using the same token this server ' +
144
+ 'is configured with, to retrieve the file.', {
145
+ taskId,
146
+ attachmentId,
147
+ downloadUrl,
148
+ authHeader: 'Authorization: Bearer <your Vikunja API token>',
149
+ deliveredThroughThisTool: false,
150
+ }, { timestamp: new Date().toISOString() }, args.sessionId);
151
+ return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
152
+ }
153
+ //# sourceMappingURL=attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../../src/tools/tasks/attachments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Task Kanban bucket operations
3
+ *
4
+ * Implements `set-bucket`, which moves a task into a Kanban bucket (column)
5
+ * of its project's Kanban view. This is the operation behind a "move card to
6
+ * the Doing column" workflow.
7
+ *
8
+ * legacy client does not expose the Kanban view endpoints, so this calls the
9
+ * Vikunja REST API directly via the shared `vikunja-rest` helper.
10
+ */
11
+ import type { AuthManager } from '../../auth/AuthManager';
12
+ export interface SetTaskBucketArgs {
13
+ /** Id of the task to move. */
14
+ id?: number;
15
+ /** Id of the destination Kanban bucket. */
16
+ bucketId?: number;
17
+ /** Optional Kanban view id. Auto-resolved from the project when omitted. */
18
+ viewId?: number;
19
+ /** Optional project id. Auto-resolved from the task when omitted. */
20
+ projectId?: number;
21
+ /** Session id for response tracking. */
22
+ sessionId?: string;
23
+ }
24
+ /**
25
+ * Moves a task into a Kanban bucket.
26
+ *
27
+ * Resolution order when optional ids are omitted:
28
+ * - projectId: fetched from the task itself
29
+ * - viewId: resolved to the project's Kanban view
30
+ *
31
+ * @param args - Task id, destination bucket id, and optional view/project ids
32
+ * @param authManager - Active auth manager holding session credentials
33
+ * @returns MCP response describing the move
34
+ */
35
+ export declare function setTaskBucket(args: SetTaskBucketArgs, authManager: AuthManager): Promise<{
36
+ content: Array<{
37
+ type: 'text';
38
+ text: string;
39
+ }>;
40
+ }>;
41
+ //# sourceMappingURL=buckets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buckets.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/buckets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAM1D,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,iBAAiB,EACvB,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,CAsE7D"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /**
3
+ * Task Kanban bucket operations
4
+ *
5
+ * Implements `set-bucket`, which moves a task into a Kanban bucket (column)
6
+ * of its project's Kanban view. This is the operation behind a "move card to
7
+ * the Doing column" workflow.
8
+ *
9
+ * legacy client does not expose the Kanban view endpoints, so this calls the
10
+ * Vikunja REST API directly via the shared `vikunja-rest` helper.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.setTaskBucket = setTaskBucket;
14
+ const types_1 = require("../../types");
15
+ const validation_1 = require("../../utils/validation");
16
+ const response_factory_1 = require("../../utils/response-factory");
17
+ const vikunja_rest_1 = require("../../utils/vikunja-rest");
18
+ /**
19
+ * Moves a task into a Kanban bucket.
20
+ *
21
+ * Resolution order when optional ids are omitted:
22
+ * - projectId: fetched from the task itself
23
+ * - viewId: resolved to the project's Kanban view
24
+ *
25
+ * @param args - Task id, destination bucket id, and optional view/project ids
26
+ * @param authManager - Active auth manager holding session credentials
27
+ * @returns MCP response describing the move
28
+ */
29
+ async function setTaskBucket(args, authManager) {
30
+ if (!args.id) {
31
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Task id is required for set-bucket operation');
32
+ }
33
+ if (args.bucketId === undefined || args.bucketId === null) {
34
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'bucketId is required for set-bucket operation');
35
+ }
36
+ (0, validation_1.validateId)(args.id, 'id');
37
+ (0, validation_1.validateId)(args.bucketId, 'bucketId');
38
+ if (args.viewId !== undefined)
39
+ (0, validation_1.validateId)(args.viewId, 'viewId');
40
+ if (args.projectId !== undefined)
41
+ (0, validation_1.validateId)(args.projectId, 'projectId');
42
+ // Resolve the project id from the task when the caller did not supply it.
43
+ let projectId = args.projectId;
44
+ if (projectId === undefined) {
45
+ const task = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/tasks/${args.id}`);
46
+ if (!task || typeof task.project_id !== 'number') {
47
+ throw new types_1.MCPError(types_1.ErrorCode.NOT_FOUND, `Could not resolve the project of task ${args.id}`);
48
+ }
49
+ projectId = task.project_id;
50
+ }
51
+ // Resolve the Kanban view id when the caller did not supply it.
52
+ const viewId = args.viewId !== undefined ? args.viewId : await (0, vikunja_rest_1.resolveKanbanViewId)(authManager, projectId);
53
+ // Place the task into the bucket. Vikunja's bucket-task endpoint expects the
54
+ // TaskBucket payload; bucket_id is also part of the URL but is sent in the
55
+ // body as the API model requires it.
56
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/projects/${projectId}/views/${viewId}/buckets/${args.bucketId}/tasks`, { task_id: args.id, bucket_id: args.bucketId });
57
+ const response = (0, response_factory_1.createStandardResponse)('set-task-bucket', `Task ${args.id} moved to bucket ${args.bucketId}`, {
58
+ taskId: args.id,
59
+ bucketId: args.bucketId,
60
+ viewId,
61
+ projectId,
62
+ }, {
63
+ timestamp: new Date().toISOString(),
64
+ affectedFields: ['bucket_id'],
65
+ }, args.sessionId);
66
+ return {
67
+ content: [
68
+ {
69
+ type: 'text',
70
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response),
71
+ },
72
+ ],
73
+ };
74
+ }
75
+ //# sourceMappingURL=buckets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buckets.js","sourceRoot":"","sources":["../../../src/tools/tasks/buckets.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAsCH,sCAyEC;AA5GD,uCAAkD;AAClD,uDAAoD;AACpD,mEAA4F;AAC5F,2DAAmF;AAqBnF;;;;;;;;;;GAUG;AACI,KAAK,UAAU,aAAa,CACjC,IAAuB,EACvB,WAAwB;IAExB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,gBAAQ,CAAC,iBAAS,CAAC,gBAAgB,EAAE,8CAA8C,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,+CAA+C,CAChD,CAAC;IACJ,CAAC;IACD,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1B,IAAA,uBAAU,EAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,IAAA,uBAAU,EAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,IAAA,uBAAU,EAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE1E,0EAA0E;IAC1E,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC/B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAA,iCAAkB,EACnC,WAAW,EACX,KAAK,EACL,UAAU,IAAI,CAAC,EAAE,EAAE,CACpB,CAAC;QACF,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACjD,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,SAAS,EACnB,yCAAyC,IAAI,CAAC,EAAE,EAAE,CACnD,CAAC;QACJ,CAAC;QACD,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;IAC9B,CAAC;IAED,gEAAgE;IAChE,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAA,kCAAmB,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAE9F,6EAA6E;IAC7E,2EAA2E;IAC3E,qCAAqC;IACrC,MAAM,IAAA,iCAAkB,EACtB,WAAW,EACX,MAAM,EACN,aAAa,SAAS,UAAU,MAAM,YAAY,IAAI,CAAC,QAAQ,QAAQ,EACvE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC/C,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,yCAAsB,EACrC,iBAAiB,EACjB,QAAQ,IAAI,CAAC,EAAE,oBAAoB,IAAI,CAAC,QAAQ,EAAE,EAClD;QACE,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM;QACN,SAAS;KACV,EACD;QACE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,cAAc,EAAE,CAAC,WAAW,CAAC;KAC9B,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IAEF,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAA,uCAAoB,EAAC,QAAQ,CAAC;aACrC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Factory for creating and managing batch processors for bulk operations
3
+ */
4
+ import { BatchProcessor, type BatchResult } from '../../../utils/performance/batch-processor';
5
+ /**
6
+ * Factory for selecting appropriate batch processor based on operation type
7
+ */
8
+ export declare const batchProcessorFactory: {
9
+ /**
10
+ * Get the appropriate batch processor for an operation type
11
+ */
12
+ getProcessor(operationType: string): BatchProcessor;
13
+ /**
14
+ * Process items in batches using the appropriate processor
15
+ */
16
+ processBatches<T>(items: number[], processor: (item: number, index: number) => Promise<T>, operationType: string): Promise<BatchResult<T>>;
17
+ /**
18
+ * Get the create batch processor specifically
19
+ */
20
+ getCreateProcessor(): BatchProcessor;
21
+ /**
22
+ * Get the update batch processor specifically
23
+ */
24
+ getUpdateProcessor(): BatchProcessor;
25
+ /**
26
+ * Get the delete batch processor specifically
27
+ */
28
+ getDeleteProcessor(): BatchProcessor;
29
+ };
30
+ //# sourceMappingURL=BatchProcessorFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchProcessorFactory.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/bulk/BatchProcessorFactory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAwB9F;;GAEG;AACH,eAAO,MAAM,qBAAqB;IAChC;;OAEG;gCACyB,MAAM,GAAG,cAAc;IAUnD;;OAEG;mBACkB,CAAC,SACb,MAAM,EAAE,aACJ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,iBACvC,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAK1B;;OAEG;0BACmB,cAAc;IAIpC;;OAEG;0BACmB,cAAc;IAIpC;;OAEG;0BACmB,cAAc;CAGrC,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * Factory for creating and managing batch processors for bulk operations
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.batchProcessorFactory = void 0;
7
+ const batch_processor_1 = require("../../../utils/performance/batch-processor");
8
+ // Batch processors with optimized settings for different operation types
9
+ const updateBatchProcessor = new batch_processor_1.BatchProcessor({
10
+ maxConcurrency: 5,
11
+ batchSize: 10,
12
+ enableMetrics: true,
13
+ batchDelay: 0,
14
+ });
15
+ const deleteBatchProcessor = new batch_processor_1.BatchProcessor({
16
+ maxConcurrency: 3,
17
+ batchSize: 5,
18
+ enableMetrics: true,
19
+ batchDelay: 100,
20
+ });
21
+ const createBatchProcessor = new batch_processor_1.BatchProcessor({
22
+ maxConcurrency: 8,
23
+ batchSize: 15,
24
+ enableMetrics: true,
25
+ batchDelay: 0,
26
+ });
27
+ /**
28
+ * Factory for selecting appropriate batch processor based on operation type
29
+ */
30
+ exports.batchProcessorFactory = {
31
+ /**
32
+ * Get the appropriate batch processor for an operation type
33
+ */
34
+ getProcessor(operationType) {
35
+ if (operationType.includes('delete')) {
36
+ return deleteBatchProcessor;
37
+ }
38
+ if (operationType.includes('create')) {
39
+ return createBatchProcessor;
40
+ }
41
+ return updateBatchProcessor;
42
+ },
43
+ /**
44
+ * Process items in batches using the appropriate processor
45
+ */
46
+ async processBatches(items, processor, operationType) {
47
+ const batchProcessor = this.getProcessor(operationType);
48
+ return await batchProcessor.processBatches(items, processor);
49
+ },
50
+ /**
51
+ * Get the create batch processor specifically
52
+ */
53
+ getCreateProcessor() {
54
+ return createBatchProcessor;
55
+ },
56
+ /**
57
+ * Get the update batch processor specifically
58
+ */
59
+ getUpdateProcessor() {
60
+ return updateBatchProcessor;
61
+ },
62
+ /**
63
+ * Get the delete batch processor specifically
64
+ */
65
+ getDeleteProcessor() {
66
+ return deleteBatchProcessor;
67
+ }
68
+ };
69
+ //# sourceMappingURL=BatchProcessorFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BatchProcessorFactory.js","sourceRoot":"","sources":["../../../../src/tools/tasks/bulk/BatchProcessorFactory.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,gFAA8F;AAE9F,yEAAyE;AACzE,MAAM,oBAAoB,GAAG,IAAI,gCAAc,CAAC;IAC9C,cAAc,EAAE,CAAC;IACjB,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,CAAC;CACd,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,IAAI,gCAAc,CAAC;IAC9C,cAAc,EAAE,CAAC;IACjB,SAAS,EAAE,CAAC;IACZ,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,GAAG;CAChB,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,IAAI,gCAAc,CAAC;IAC9C,cAAc,EAAE,CAAC;IACjB,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,CAAC;CACd,CAAC,CAAC;AAEH;;GAEG;AACU,QAAA,qBAAqB,GAAG;IACnC;;OAEG;IACH,YAAY,CAAC,aAAqB;QAChC,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QACD,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QACD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,KAAe,EACf,SAAsD,EACtD,aAAqB;QAErB,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACxD,OAAO,MAAM,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;CACF,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Error handling and fallback logic for bulk operations
3
+ */
4
+ import type { Task, VikunjaClient } from 'node-vikunja';
5
+ import type { BulkUpdateArgs } from './BulkOperationValidator';
6
+ import type { BatchResult } from '../../../utils/performance/batch-processor';
7
+ /**
8
+ * Handles fallback logic when bulk APIs fail
9
+ */
10
+ export declare const bulkOperationErrorHandler: {
11
+ /**
12
+ * Handle bulk update fallback when main API fails
13
+ */
14
+ handleBulkUpdateFallback(args: BulkUpdateArgs, taskIds: number[], bulkError: Error): Promise<{
15
+ content: Array<{
16
+ type: "text";
17
+ text: string;
18
+ }>;
19
+ }>;
20
+ /**
21
+ * Update a single task as part of fallback logic
22
+ */
23
+ updateIndividualTask(client: VikunjaClient, taskId: number, args: BulkUpdateArgs): Promise<Task>;
24
+ /**
25
+ * Handle fields that require separate API calls (assignees, labels)
26
+ */
27
+ handleSpecialFields(client: VikunjaClient, taskId: number, args: BulkUpdateArgs, _updatedTask: Task): Promise<void>;
28
+ /**
29
+ * Handle assignee updates with proper error handling
30
+ */
31
+ handleAssigneeUpdate(client: VikunjaClient, taskId: number, newAssigneeIds: number[]): Promise<void>;
32
+ /**
33
+ * Process update results and handle various failure scenarios
34
+ */
35
+ processUpdateResults(args: BulkUpdateArgs, taskIds: number[], updateResult: BatchResult<Task>): Promise<{
36
+ content: Array<{
37
+ type: "text";
38
+ text: string;
39
+ }>;
40
+ }>;
41
+ /**
42
+ * Handle various types of update failures
43
+ */
44
+ handleUpdateFailures(args: BulkUpdateArgs, failures: Array<{
45
+ index: number;
46
+ error: unknown;
47
+ originalItem: unknown;
48
+ }>, successCount: number): void;
49
+ };
50
+ //# sourceMappingURL=BulkOperationErrorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkOperationErrorHandler.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/bulk/BulkOperationErrorHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,yBAAyB;IACpC;;OAEG;mCAEK,cAAc,WACX,MAAM,EAAE,aACN,KAAK,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAqB9D;;OAEG;iCAEO,aAAa,UACb,MAAM,QACR,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC;IAgBhB;;OAEG;gCAEO,aAAa,UACb,MAAM,QACR,cAAc,gBACN,IAAI,GACjB,OAAO,CAAC,IAAI,CAAC;IAkBhB;;OAEG;iCAEO,aAAa,UACb,MAAM,kBACE,MAAM,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;IAwDhB;;OAEG;+BAEK,cAAc,WACX,MAAM,EAAE,gBACH,WAAW,CAAC,IAAI,CAAC,GAC9B,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IA0D9D;;OAEG;+BAEK,cAAc,YACV,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC,gBAC3D,MAAM,GACnB,IAAI;CAqCR,CAAC"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ /**
3
+ * Error handling and fallback logic for bulk operations
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.bulkOperationErrorHandler = void 0;
7
+ const types_1 = require("../../../types");
8
+ const client_1 = require("../../../client");
9
+ const logger_1 = require("../../../utils/logger");
10
+ const response_factory_1 = require("../../../utils/response-factory");
11
+ const auth_error_handler_1 = require("../../../utils/auth-error-handler");
12
+ const retry_1 = require("../../../utils/retry");
13
+ const index_1 = require("./index");
14
+ const constants_1 = require("../constants");
15
+ const validation_1 = require("../validation");
16
+ /**
17
+ * Handles fallback logic when bulk APIs fail
18
+ */
19
+ exports.bulkOperationErrorHandler = {
20
+ /**
21
+ * Handle bulk update fallback when main API fails
22
+ */
23
+ async handleBulkUpdateFallback(args, taskIds, bulkError) {
24
+ logger_1.logger.warn('Bulk update API failed, falling back to individual updates', {
25
+ error: bulkError instanceof Error ? bulkError.message : String(bulkError),
26
+ field: args.field,
27
+ });
28
+ const client = await (0, client_1.getClientFromContext)();
29
+ // Perform bulk update using individual task updates as fallback
30
+ const updateResult = await index_1.BatchProcessorFactory.processBatches(taskIds, async (taskId) => {
31
+ return await this.updateIndividualTask(client, taskId, args);
32
+ }, 'bulk_update_individual_fallback');
33
+ // Process results and handle failures
34
+ return await this.processUpdateResults(args, taskIds, updateResult);
35
+ },
36
+ /**
37
+ * Update a single task as part of fallback logic
38
+ */
39
+ async updateIndividualTask(client, taskId, args) {
40
+ // Fetch current task to preserve required fields
41
+ const currentTask = await client.tasks.getTask(taskId);
42
+ // Apply field update using shared utility
43
+ const updateData = (0, validation_1.applyFieldUpdate)({ ...currentTask }, args.field, args.value);
44
+ // Update the task
45
+ const updatedTask = await client.tasks.updateTask(taskId, updateData);
46
+ // Handle special fields that require separate API calls
47
+ await this.handleSpecialFields(client, taskId, args, updatedTask);
48
+ return updatedTask;
49
+ },
50
+ /**
51
+ * Handle fields that require separate API calls (assignees, labels)
52
+ */
53
+ async handleSpecialFields(client, taskId, args, _updatedTask) {
54
+ if (args.field === 'assignees' && Array.isArray(args.value)) {
55
+ await this.handleAssigneeUpdate(client, taskId, args.value);
56
+ }
57
+ if (args.field === 'labels' && Array.isArray(args.value)) {
58
+ await (0, retry_1.withRetry)(() => client.tasks.updateTaskLabels(taskId, {
59
+ label_ids: args.value,
60
+ }), {
61
+ ...retry_1.RETRY_CONFIG.AUTH_ERRORS,
62
+ shouldRetry: (error) => (0, auth_error_handler_1.isAuthenticationError)(error)
63
+ });
64
+ }
65
+ },
66
+ /**
67
+ * Handle assignee updates with proper error handling
68
+ */
69
+ async handleAssigneeUpdate(client, taskId, newAssigneeIds) {
70
+ try {
71
+ // Replace all assignees with the new list
72
+ const currentTaskWithAssignees = await client.tasks.getTask(taskId);
73
+ const currentAssigneeIds = currentTaskWithAssignees.assignees?.map((a) => a.id) || [];
74
+ // Add new assignees first to avoid leaving task unassigned.
75
+ // Use the ADDITIVE single-assign endpoint per user: node-vikunja's
76
+ // bulkAssignUsersToTask sends `{ user_ids }` to Vikunja's bulk endpoint,
77
+ // which expects `{ assignees }` and REPLACES the whole list, silently
78
+ // unassigning everyone on the field mismatch (upstream issue #15).
79
+ if (newAssigneeIds.length > 0) {
80
+ await Promise.all(newAssigneeIds.map((userId) => (0, retry_1.withRetry)(() => client.tasks.assignUserToTask(taskId, userId), {
81
+ ...retry_1.RETRY_CONFIG.AUTH_ERRORS,
82
+ shouldRetry: (error) => (0, auth_error_handler_1.isAuthenticationError)(error)
83
+ })));
84
+ }
85
+ // Remove old assignees only after new ones are successfully added
86
+ for (const userId of currentAssigneeIds) {
87
+ try {
88
+ await (0, retry_1.withRetry)(() => client.tasks.removeUserFromTask(taskId, userId), {
89
+ ...retry_1.RETRY_CONFIG.AUTH_ERRORS,
90
+ shouldRetry: (error) => (0, auth_error_handler_1.isAuthenticationError)(error)
91
+ });
92
+ }
93
+ catch (removeError) {
94
+ if ((0, auth_error_handler_1.isAuthenticationError)(removeError)) {
95
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `${constants_1.AUTH_ERROR_MESSAGES.ASSIGNEE_REMOVE_PARTIAL} (Retried ${retry_1.RETRY_CONFIG.AUTH_ERRORS.maxRetries} times)`);
96
+ }
97
+ throw removeError;
98
+ }
99
+ }
100
+ }
101
+ catch (assigneeError) {
102
+ if ((0, auth_error_handler_1.isAuthenticationError)(assigneeError)) {
103
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `${constants_1.AUTH_ERROR_MESSAGES.ASSIGNEE_BULK_UPDATE} (Retried ${retry_1.RETRY_CONFIG.AUTH_ERRORS.maxRetries} times)`);
104
+ }
105
+ throw assigneeError;
106
+ }
107
+ },
108
+ /**
109
+ * Process update results and handle various failure scenarios
110
+ */
111
+ async processUpdateResults(args, taskIds, updateResult) {
112
+ const failures = updateResult.failed;
113
+ const successCount = updateResult.successful.length;
114
+ if (failures.length > 0) {
115
+ this.handleUpdateFailures(args, failures, successCount);
116
+ }
117
+ // Use successful tasks from the update operation, or fetch fresh if needed
118
+ let updatedTasks = updateResult.successful;
119
+ let failedFetches = 0;
120
+ if (updatedTasks.length < successCount) {
121
+ const fetchResult = await index_1.BatchProcessorFactory.processBatches(taskIds, async (taskId) => {
122
+ const client = await (0, client_1.getClientFromContext)();
123
+ return await client.tasks.getTask(taskId);
124
+ }, 'bulk_update_final_fetch');
125
+ updatedTasks = fetchResult.successful;
126
+ failedFetches = fetchResult.failed.length;
127
+ }
128
+ const response = (0, types_1.createStandardResponse)('update-task', `Successfully updated ${taskIds.length} tasks${failedFetches > 0 ? ` (${failedFetches} tasks could not be fetched after update)` : ''}`, { tasks: updatedTasks }, {
129
+ timestamp: new Date().toISOString(),
130
+ affectedFields: args.field ? [args.field] : [],
131
+ count: taskIds.length,
132
+ ...(failedFetches > 0 && { fetchErrors: failedFetches }),
133
+ performanceMetrics: {
134
+ totalDuration: updateResult.metrics.totalDuration,
135
+ operationsPerSecond: updateResult.metrics.operationsPerSecond,
136
+ apiCallsUsed: updateResult.metrics.successfulOperations + updateResult.metrics.failedOperations,
137
+ },
138
+ });
139
+ logger_1.logger.info('Bulk update completed', {
140
+ taskCount: taskIds.length,
141
+ field: args.field,
142
+ });
143
+ return {
144
+ content: [
145
+ {
146
+ type: 'text',
147
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response), // createStandardResponse returns AORP object, format as markdown
148
+ },
149
+ ],
150
+ };
151
+ },
152
+ /**
153
+ * Handle various types of update failures
154
+ */
155
+ handleUpdateFailures(args, failures, successCount) {
156
+ const failedIds = failures.map((f) => f.originalItem);
157
+ // Check if all failures are due to assignee auth errors
158
+ if (args.field === 'assignees') {
159
+ const authFailures = failures.filter((f) => {
160
+ const error = f.error;
161
+ return (error instanceof types_1.MCPError &&
162
+ error.message.includes('Assignee operations may have authentication issues'));
163
+ });
164
+ if (authFailures.length === failures.length) {
165
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, 'Assignee operations may have authentication issues with certain Vikunja API versions. ' +
166
+ 'This is a known limitation that prevents bulk updating assignees.');
167
+ }
168
+ }
169
+ // If some succeeded, report partial success
170
+ if (successCount > 0) {
171
+ logger_1.logger.warn('Bulk update partially failed', {
172
+ successCount,
173
+ failedCount: failures.length,
174
+ failedIds,
175
+ });
176
+ }
177
+ else {
178
+ // All failed
179
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `Bulk update failed. Could not update any tasks. Failed IDs: ${failedIds.join(', ')}`);
180
+ }
181
+ }
182
+ };
183
+ //# sourceMappingURL=BulkOperationErrorHandler.js.map