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,171 @@
1
+ "use strict";
2
+ /**
3
+ * Notifications Tool
4
+ *
5
+ * Wraps Vikunja's `/notifications` endpoints (see docs/vikunja-openapi.json):
6
+ * - GET /notifications -> list, with page/per_page pagination
7
+ * - POST /notifications -> mark every notification read
8
+ * - POST /notifications/{id} -> toggle a single notification's read state
9
+ *
10
+ * All calls go through `vikunjaRestRequest` (direct-REST rule, see
11
+ * docs/ENDPOINT-PLAYBOOK.md §3) — legacy client has no notifications support
12
+ * to migrate away from, so this is a pure new call site.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.registerNotificationsTool = registerNotificationsTool;
16
+ const zod_1 = require("zod");
17
+ const types_1 = require("../types");
18
+ const client_1 = require("../client");
19
+ const logger_1 = require("../utils/logger");
20
+ const read_only_1 = require("../utils/read-only");
21
+ const validation_1 = require("../utils/validation");
22
+ const response_factory_1 = require("../utils/response-factory");
23
+ const vikunja_rest_1 = require("../utils/vikunja-rest");
24
+ /**
25
+ * Best-effort, zero-extra-request enrichment: some notification kinds (e.g.
26
+ * task assignment, task comments) embed a `{ task: { id, title } }` shape in
27
+ * their untyped `notification` payload in practice, but this is NOT
28
+ * documented in the OpenAPI spec (see `VikunjaNotification` doc comment
29
+ * above) — so this is purely a defensive, best-effort extraction over data
30
+ * already in hand from the `list` response, never a new API call, and it
31
+ * silently returns `undefined` (rather than throwing) whenever the shape
32
+ * doesn't match. This is what backs the `list` subcommand's optional
33
+ * `relatedTask` convenience field.
34
+ */
35
+ function extractRelatedTask(content) {
36
+ if (!content || typeof content !== 'object') {
37
+ return undefined;
38
+ }
39
+ const task = content.task;
40
+ if (!task || typeof task !== 'object') {
41
+ return undefined;
42
+ }
43
+ const id = task.id;
44
+ const title = task.title;
45
+ if (typeof id === 'number' && typeof title === 'string') {
46
+ return { id, title };
47
+ }
48
+ return undefined;
49
+ }
50
+ /**
51
+ * Ensures a notification ends up marked READ, working around
52
+ * `POST /notifications/{id}` being a pure toggle in the API (per the spec:
53
+ * "Marks a notification as either read or unread", no request body to pick
54
+ * which). A blind single POST would silently mark an already-read
55
+ * notification unread again on a repeat call — this makes `mark-read`
56
+ * idempotent (verify-then-apply, docs/ENDPOINT-PLAYBOOK.md §1) by checking
57
+ * the response and, if the toggle landed on "unread", toggling once more.
58
+ * At most 2 requests; typically 1.
59
+ */
60
+ async function ensureNotificationRead(authManager, notificationId) {
61
+ let notification = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/notifications/${notificationId}`);
62
+ if (!notification?.read_at) {
63
+ notification = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/notifications/${notificationId}`);
64
+ }
65
+ return notification;
66
+ }
67
+ function registerNotificationsTool(server, authManager, _clientFactory) {
68
+ server.tool('vikunja_notifications', (0, read_only_1.withReadOnlyNote)('vikunja_notifications', "Manage the current user's Vikunja notifications: list (with optional " +
69
+ "unread filtering and pagination), mark a single notification read " +
70
+ "(idempotent — safe to call repeatedly), and mark all notifications " +
71
+ "read at once."), {
72
+ subcommand: zod_1.z.enum(['list', 'mark-read', 'mark-all-read']),
73
+ // list parameters
74
+ unreadOnly: zod_1.z.boolean().optional(),
75
+ page: zod_1.z.number().int().positive().optional(),
76
+ perPage: zod_1.z.number().int().positive().optional(),
77
+ // mark-read parameter
78
+ notificationId: zod_1.z.number().int().positive().optional(),
79
+ }, (0, read_only_1.getToolAnnotations)('vikunja_notifications'), async (args) => {
80
+ if (!authManager.isAuthenticated()) {
81
+ throw new types_1.MCPError(types_1.ErrorCode.AUTH_REQUIRED, 'Authentication required. Please use vikunja_auth.connect first.');
82
+ }
83
+ await (0, client_1.getAuthManagerFromContext)(); // Ensure the session is initialized
84
+ const subcommand = args.subcommand;
85
+ (0, read_only_1.assertWriteAllowed)('vikunja_notifications', subcommand);
86
+ logger_1.logger.debug('Notifications tool called', { subcommand, args });
87
+ try {
88
+ switch (subcommand) {
89
+ case 'list': {
90
+ const query = [];
91
+ if (args.page !== undefined) {
92
+ query.push(`page=${encodeURIComponent(String(args.page))}`);
93
+ }
94
+ if (args.perPage !== undefined) {
95
+ query.push(`per_page=${encodeURIComponent(String(args.perPage))}`);
96
+ }
97
+ const qs = query.length > 0 ? `?${query.join('&')}` : '';
98
+ const allNotifications = (await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/notifications${qs}`)) ?? [];
99
+ // The spec's page/per_page are the only server-side filters
100
+ // documented for this endpoint — there is no server-side
101
+ // unread filter, so `unreadOnly` is applied client-side over the
102
+ // fetched page.
103
+ const notifications = args.unreadOnly
104
+ ? allNotifications.filter((n) => !n.read_at)
105
+ : allNotifications;
106
+ // Read-composite (docs/ENDPOINT-PLAYBOOK.md §1): attach a
107
+ // best-effort relatedTask summary with zero extra requests,
108
+ // see extractRelatedTask() doc comment for why this is
109
+ // heuristic rather than spec-guaranteed.
110
+ const enriched = notifications.map((n) => {
111
+ const relatedTask = extractRelatedTask(n.notification);
112
+ return relatedTask ? { ...n, relatedTask } : n;
113
+ });
114
+ logger_1.logger.info('Listed notifications', {
115
+ count: enriched.length,
116
+ unreadOnly: !!args.unreadOnly,
117
+ });
118
+ const aorpResult = (0, response_factory_1.createAorpResponse)('list', `Retrieved ${enriched.length} notification(s)`, { notifications: enriched }, {
119
+ success: true,
120
+ metadata: {
121
+ count: enriched.length,
122
+ },
123
+ });
124
+ return {
125
+ content: [{ type: 'text', text: aorpResult.content }],
126
+ };
127
+ }
128
+ case 'mark-read': {
129
+ const notificationId = (0, validation_1.validateAndConvertId)(args.notificationId, 'notificationId');
130
+ const notification = await ensureNotificationRead(authManager, notificationId);
131
+ logger_1.logger.info('Marked notification read', { notificationId });
132
+ const aorpResult = (0, response_factory_1.createAorpResponse)('mark-read', `Notification ${notificationId} marked as read`, { notification }, {
133
+ success: true,
134
+ metadata: { count: 1 },
135
+ });
136
+ return {
137
+ content: [{ type: 'text', text: aorpResult.content }],
138
+ };
139
+ }
140
+ case 'mark-all-read': {
141
+ const result = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', '/notifications');
142
+ logger_1.logger.info('Marked all notifications read');
143
+ const aorpResult = (0, response_factory_1.createAorpResponse)('mark-all-read', result?.message ?? 'All notifications marked as read', {}, { success: true });
144
+ return {
145
+ content: [{ type: 'text', text: aorpResult.content }],
146
+ };
147
+ }
148
+ default:
149
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Unknown subcommand: ${subcommand}`);
150
+ }
151
+ }
152
+ catch (error) {
153
+ logger_1.logger.error('Notifications operation failed', { error, subcommand, args });
154
+ if (error instanceof types_1.MCPError) {
155
+ // Link shares cannot have notifications — the spec documents a
156
+ // dedicated 403 for this case; surface it plainly rather than the
157
+ // generic HTTP error text.
158
+ const statusCode = error.details?.statusCode;
159
+ if (statusCode === 403) {
160
+ throw new types_1.MCPError(types_1.ErrorCode.PERMISSION_DENIED, 'Link shares cannot have notifications. Authenticate as a full user to use vikunja_notifications.');
161
+ }
162
+ throw error;
163
+ }
164
+ if (error instanceof Error) {
165
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `Notifications operation failed: ${error.message}`);
166
+ }
167
+ throw new types_1.MCPError(types_1.ErrorCode.INTERNAL_ERROR, 'An unexpected error occurred during a notifications operation');
168
+ }
169
+ });
170
+ }
171
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Project backgrounds — JSON-only subset (G7, docs/ENDPOINT-TAIL-RETRIAGE.md)
3
+ *
4
+ * Gated behind the opt-in, deny-by-default `backgrounds` module config key
5
+ * (`src/config/types.ts` — see the comment there for why this is "opt-in
6
+ * cosmetic", the deliberate opposite of every other default-on domain
7
+ * module). `registerProjectsTool` (`./index.ts`) only includes these three
8
+ * subcommands in `vikunja_projects`'s subcommand enum when the module is
9
+ * enabled, so — matching every other module's contract — they are genuinely
10
+ * absent from the tool's schema when disabled, not merely rejected at
11
+ * dispatch.
12
+ *
13
+ * Endpoints implemented (verified against docs/vikunja-openapi.json):
14
+ * - DELETE /projects/{id}/background -> models.Project
15
+ * - POST /projects/{id}/backgrounds/unsplash -> models.Project
16
+ * - GET /backgrounds/unsplash/search -> background.Image[]
17
+ *
18
+ * Deliberately parked (binary image bytes — no MCP content channel for
19
+ * them; see docs/ENDPOINT-TAIL-RETRIAGE.md and docs/ROADMAP.md §4):
20
+ * - PUT /projects/{id}/backgrounds/upload
21
+ * - GET /projects/{id}/background (the image bytes themselves)
22
+ * - GET /backgrounds/unsplash/image/{image}(/thumb)
23
+ *
24
+ * `POST /projects/{id}/backgrounds/unsplash`'s request body is typed as
25
+ * `background.Image` in the spec (id/url/thumb/blur_hash/info), but the
26
+ * server only needs the photo `id` — the endpoint description confirms it
27
+ * "sets a photo from unsplash as project background" by ID, not by echoing
28
+ * back full image metadata the caller has no independent way to know. So
29
+ * this module only accepts/sends `id`, matching G7's own scoping note
30
+ * ("likely the unsplash photo id").
31
+ *
32
+ * Unsplash search/set only work when the connected Vikunja server has an
33
+ * Unsplash provider configured (an admin-side API key). When it doesn't,
34
+ * the server errors — `wrapUnsplashProviderError` recognizes that shape and
35
+ * rewrites it into a friendly, actionable message instead of surfacing the
36
+ * server's raw error text.
37
+ */
38
+ import type { AuthManager } from '../../auth/AuthManager';
39
+ export type McpResponse = {
40
+ content: Array<{
41
+ type: 'text';
42
+ text: string;
43
+ }>;
44
+ };
45
+ export interface RemoveBackgroundArgs {
46
+ /** Project id to remove the background from. */
47
+ id?: number;
48
+ sessionId?: string;
49
+ }
50
+ export interface SetUnsplashBackgroundArgs {
51
+ /** Project id to set the background on. */
52
+ id?: number;
53
+ /** The unsplash photo id (`background.Image.id` from `search-unsplash`). */
54
+ unsplashImageId?: string;
55
+ sessionId?: string;
56
+ }
57
+ export interface SearchUnsplashArgs {
58
+ /** Search term (maps to the API's `s` query param). */
59
+ unsplashQuery?: string;
60
+ /** Page number, 1-based (maps to the API's `p` query param). */
61
+ page?: number;
62
+ sessionId?: string;
63
+ }
64
+ /**
65
+ * Removes a project's background, regardless of which provider set it.
66
+ * Per the spec, this does not error if the project has no background set.
67
+ */
68
+ export declare function removeProjectBackground(args: RemoveBackgroundArgs, authManager: AuthManager): Promise<McpResponse>;
69
+ /**
70
+ * Sets an unsplash photo (by its unsplash photo id, from `search-unsplash`)
71
+ * as a project's background.
72
+ */
73
+ export declare function setUnsplashBackground(args: SetUnsplashBackgroundArgs, authManager: AuthManager): Promise<McpResponse>;
74
+ /**
75
+ * Searches unsplash for candidate background photos. Only works when the
76
+ * connected Vikunja server has an Unsplash provider configured — see
77
+ * `wrapUnsplashError`.
78
+ */
79
+ export declare function searchUnsplashBackgrounds(args: SearchUnsplashArgs, authManager: AuthManager): Promise<McpResponse>;
80
+ //# sourceMappingURL=backgrounds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgrounds.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/backgrounds.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAY1D,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,2CAA2C;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuCD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,oBAAoB,EAC1B,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,WAAW,CAAC,CA6BtB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,yBAAyB,EAC/B,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,WAAW,CAAC,CAmCtB;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,WAAW,CAAC,CAoCtB"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ /**
3
+ * Project backgrounds — JSON-only subset (G7, docs/ENDPOINT-TAIL-RETRIAGE.md)
4
+ *
5
+ * Gated behind the opt-in, deny-by-default `backgrounds` module config key
6
+ * (`src/config/types.ts` — see the comment there for why this is "opt-in
7
+ * cosmetic", the deliberate opposite of every other default-on domain
8
+ * module). `registerProjectsTool` (`./index.ts`) only includes these three
9
+ * subcommands in `vikunja_projects`'s subcommand enum when the module is
10
+ * enabled, so — matching every other module's contract — they are genuinely
11
+ * absent from the tool's schema when disabled, not merely rejected at
12
+ * dispatch.
13
+ *
14
+ * Endpoints implemented (verified against docs/vikunja-openapi.json):
15
+ * - DELETE /projects/{id}/background -> models.Project
16
+ * - POST /projects/{id}/backgrounds/unsplash -> models.Project
17
+ * - GET /backgrounds/unsplash/search -> background.Image[]
18
+ *
19
+ * Deliberately parked (binary image bytes — no MCP content channel for
20
+ * them; see docs/ENDPOINT-TAIL-RETRIAGE.md and docs/ROADMAP.md §4):
21
+ * - PUT /projects/{id}/backgrounds/upload
22
+ * - GET /projects/{id}/background (the image bytes themselves)
23
+ * - GET /backgrounds/unsplash/image/{image}(/thumb)
24
+ *
25
+ * `POST /projects/{id}/backgrounds/unsplash`'s request body is typed as
26
+ * `background.Image` in the spec (id/url/thumb/blur_hash/info), but the
27
+ * server only needs the photo `id` — the endpoint description confirms it
28
+ * "sets a photo from unsplash as project background" by ID, not by echoing
29
+ * back full image metadata the caller has no independent way to know. So
30
+ * this module only accepts/sends `id`, matching G7's own scoping note
31
+ * ("likely the unsplash photo id").
32
+ *
33
+ * Unsplash search/set only work when the connected Vikunja server has an
34
+ * Unsplash provider configured (an admin-side API key). When it doesn't,
35
+ * the server errors — `wrapUnsplashProviderError` recognizes that shape and
36
+ * rewrites it into a friendly, actionable message instead of surfacing the
37
+ * server's raw error text.
38
+ */
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.removeProjectBackground = removeProjectBackground;
41
+ exports.setUnsplashBackground = setUnsplashBackground;
42
+ exports.searchUnsplashBackgrounds = searchUnsplashBackgrounds;
43
+ const types_1 = require("../../types");
44
+ const validation_1 = require("../../utils/validation");
45
+ const error_handler_1 = require("../../utils/error-handler");
46
+ const response_factory_1 = require("../../utils/response-factory");
47
+ const vikunja_rest_1 = require("../../utils/vikunja-rest");
48
+ /**
49
+ * Recognizes the shape of a server error that indicates the Unsplash
50
+ * provider isn't configured (no admin-side API key / feature disabled) so
51
+ * it can be rewritten into a friendly, actionable message rather than
52
+ * surfaced as an opaque server error. Deliberately conservative — only
53
+ * matches error text that clearly mentions unsplash AND a
54
+ * configuration/availability concern, so genuine unrelated failures (a bad
55
+ * project id, a permissions error, an actually-malformed request) are never
56
+ * misreported as a provider-configuration issue.
57
+ */
58
+ function isLikelyUnsplashNotConfigured(message) {
59
+ return /unsplash/i.test(message) && /(not[\s-]*(en|configur)|disabl|no.*(key|token)|access[\s-]*token)/i.test(message);
60
+ }
61
+ /**
62
+ * Wraps an error from an unsplash-touching REST call: a recognized
63
+ * "provider not configured" shape gets a friendly explanation (preserving
64
+ * the original server text for debugging); everything else passes through
65
+ * unchanged (already a non-stack-trace `MCPError` courtesy of
66
+ * `vikunjaRestRequest`'s own error contract).
67
+ */
68
+ function wrapUnsplashError(error, action) {
69
+ if (error instanceof types_1.MCPError) {
70
+ if (isLikelyUnsplashNotConfigured(error.message)) {
71
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `${action} unavailable: this Vikunja server does not appear to have an Unsplash ` +
72
+ `background provider configured. Ask your Vikunja administrator to set up an ` +
73
+ `Unsplash API key (or confirm Unsplash backgrounds are enabled) on the server. ` +
74
+ `(Server said: ${error.message})`);
75
+ }
76
+ throw error;
77
+ }
78
+ throw (0, error_handler_1.transformApiError)(error, action);
79
+ }
80
+ /**
81
+ * Removes a project's background, regardless of which provider set it.
82
+ * Per the spec, this does not error if the project has no background set.
83
+ */
84
+ async function removeProjectBackground(args, authManager) {
85
+ if (!args.id) {
86
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Project id is required for remove-background operation');
87
+ }
88
+ (0, validation_1.validateId)(args.id, 'id');
89
+ let project;
90
+ try {
91
+ project = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'DELETE', `/projects/${args.id}/background`);
92
+ }
93
+ catch (error) {
94
+ if (error instanceof types_1.MCPError) {
95
+ throw error;
96
+ }
97
+ throw (0, error_handler_1.transformApiError)(error, 'Failed to remove project background');
98
+ }
99
+ const response = (0, response_factory_1.createStandardResponse)('remove-background', `Background removed from project ${args.id}`, { project }, { timestamp: new Date().toISOString() }, args.sessionId);
100
+ return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
101
+ }
102
+ /**
103
+ * Sets an unsplash photo (by its unsplash photo id, from `search-unsplash`)
104
+ * as a project's background.
105
+ */
106
+ async function setUnsplashBackground(args, authManager) {
107
+ if (!args.id) {
108
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Project id is required for set-unsplash-background operation');
109
+ }
110
+ (0, validation_1.validateId)(args.id, 'id');
111
+ if (!args.unsplashImageId || args.unsplashImageId.trim() === '') {
112
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'unsplashImageId is required for set-unsplash-background operation');
113
+ }
114
+ const body = { id: args.unsplashImageId };
115
+ let project;
116
+ try {
117
+ project = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/projects/${args.id}/backgrounds/unsplash`, body);
118
+ }
119
+ catch (error) {
120
+ wrapUnsplashError(error, 'Setting the unsplash background');
121
+ }
122
+ const response = (0, response_factory_1.createStandardResponse)('set-unsplash-background', `Project ${args.id} background set to unsplash photo ${args.unsplashImageId}`, { project, unsplashImageId: args.unsplashImageId }, { timestamp: new Date().toISOString() }, args.sessionId);
123
+ return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
124
+ }
125
+ /**
126
+ * Searches unsplash for candidate background photos. Only works when the
127
+ * connected Vikunja server has an Unsplash provider configured — see
128
+ * `wrapUnsplashError`.
129
+ */
130
+ async function searchUnsplashBackgrounds(args, authManager) {
131
+ if (args.page !== undefined) {
132
+ (0, validation_1.validateId)(args.page, 'page');
133
+ }
134
+ const params = new URLSearchParams();
135
+ if (args.unsplashQuery !== undefined && args.unsplashQuery.trim() !== '') {
136
+ params.set('s', args.unsplashQuery);
137
+ }
138
+ if (args.page !== undefined) {
139
+ params.set('p', String(args.page));
140
+ }
141
+ const query = params.toString();
142
+ let photos;
143
+ try {
144
+ const result = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/backgrounds/unsplash/search${query ? `?${query}` : ''}`);
145
+ photos = Array.isArray(result) ? result : [];
146
+ }
147
+ catch (error) {
148
+ wrapUnsplashError(error, 'Searching unsplash backgrounds');
149
+ }
150
+ const photoWord = photos.length === 1 ? 'photo' : 'photos';
151
+ const response = (0, response_factory_1.createStandardResponse)('search-unsplash', `Found ${photos.length} unsplash ${photoWord}`, { photos }, { timestamp: new Date().toISOString() }, args.sessionId);
152
+ return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
153
+ }
154
+ //# sourceMappingURL=backgrounds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgrounds.js","sourceRoot":"","sources":["../../../src/tools/projects/backgrounds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Project Kanban bucket operations
3
+ *
4
+ * Implements `list-buckets`, `create-bucket`, `update-bucket`,
5
+ * `delete-bucket`, and `list-view-tasks` (per-view task listing in real
6
+ * Kanban card order). `list-buckets` lets callers resolve a bucket by name
7
+ * (e.g. "Doing") instead of hard-coding numeric bucket ids; `update-bucket`
8
+ * and `delete-bucket` extend that convenience by accepting a `bucketTitle`
9
+ * wherever a `bucketId` is otherwise required, resolved internally via a
10
+ * bucket list lookup — the same resolve-by-name-internally shape as
11
+ * `setTaskBucket` (`src/tools/tasks/buckets.ts`), Wave D's exemplar for
12
+ * "don't make the caller pre-fetch ids they shouldn't have to know"
13
+ * (docs/ENDPOINT-PLAYBOOK.md §1).
14
+ *
15
+ * legacy client does not expose the Kanban view endpoints, so this calls the
16
+ * Vikunja REST API directly via the shared `vikunja-rest` helper.
17
+ */
18
+ import type { AuthManager } from '../../auth/AuthManager';
19
+ export interface ListBucketsArgs {
20
+ /** Project whose Kanban buckets should be listed. */
21
+ id?: number;
22
+ /** Optional Kanban view id. Auto-resolved from the project when omitted. */
23
+ viewId?: number;
24
+ /** Session id for response tracking. */
25
+ sessionId?: string;
26
+ }
27
+ export interface CreateBucketArgs {
28
+ /** Project the new bucket should belong to. */
29
+ id?: number;
30
+ /** Optional Kanban view id. Auto-resolved from the project when omitted. */
31
+ viewId?: number;
32
+ /** Title of the new bucket. */
33
+ title?: string;
34
+ /** Optional max task count for the bucket (0 = unlimited). */
35
+ limit?: number;
36
+ /** Session id for response tracking. */
37
+ sessionId?: string;
38
+ }
39
+ /** Identifies an existing bucket by either its numeric id or its title. */
40
+ interface BucketRef {
41
+ bucketId?: number;
42
+ bucketTitle?: string;
43
+ }
44
+ export interface UpdateBucketArgs extends BucketRef {
45
+ /** Project the bucket belongs to. */
46
+ id?: number;
47
+ /** Optional Kanban view id. Auto-resolved from the project when omitted. */
48
+ viewId?: number;
49
+ /** New title, if renaming. */
50
+ title?: string;
51
+ /** New max task count, if changing (0 = unlimited). */
52
+ limit?: number;
53
+ /** Session id for response tracking. */
54
+ sessionId?: string;
55
+ }
56
+ export interface DeleteBucketArgs extends BucketRef {
57
+ /** Project the bucket belongs to. */
58
+ id?: number;
59
+ /** Optional Kanban view id. Auto-resolved from the project when omitted. */
60
+ viewId?: number;
61
+ /** Session id for response tracking. */
62
+ sessionId?: string;
63
+ }
64
+ export interface ListViewTasksArgs {
65
+ /** Project whose view tasks should be listed. */
66
+ id?: number;
67
+ /** Optional view id. Auto-resolved to the Kanban view when omitted. */
68
+ viewId?: number;
69
+ /** Page number for pagination. */
70
+ page?: number;
71
+ /** Items per page. */
72
+ perPage?: number;
73
+ /** Session id for response tracking. */
74
+ sessionId?: string;
75
+ }
76
+ /**
77
+ * Lists the Kanban buckets of a project.
78
+ *
79
+ * @param args - Project id and optional view id
80
+ * @param authManager - Active auth manager holding session credentials
81
+ * @returns MCP response containing the project's Kanban buckets
82
+ */
83
+ export declare function listBuckets(args: ListBucketsArgs, authManager: AuthManager): Promise<{
84
+ content: Array<{
85
+ type: 'text';
86
+ text: string;
87
+ }>;
88
+ }>;
89
+ /**
90
+ * Creates a new Kanban bucket (column) on a project's Kanban view.
91
+ */
92
+ export declare function createBucket(args: CreateBucketArgs, authManager: AuthManager): Promise<{
93
+ content: Array<{
94
+ type: 'text';
95
+ text: string;
96
+ }>;
97
+ }>;
98
+ /**
99
+ * Updates an existing Kanban bucket. `POST
100
+ * /projects/{projectID}/views/{view}/buckets/{bucketID}` replaces the whole
101
+ * bucket resource, so the current bucket is fetched first (via the bucket
102
+ * list, which also resolves `bucketTitle` when `bucketId` is omitted) and
103
+ * merged with the requested changes.
104
+ */
105
+ export declare function updateBucket(args: UpdateBucketArgs, authManager: AuthManager): Promise<{
106
+ content: Array<{
107
+ type: 'text';
108
+ text: string;
109
+ }>;
110
+ }>;
111
+ /**
112
+ * Deletes a Kanban bucket. Does not delete the tasks in it — Vikunja
113
+ * dissociates them from the bucket instead.
114
+ */
115
+ export declare function deleteBucket(args: DeleteBucketArgs, authManager: AuthManager): Promise<{
116
+ content: Array<{
117
+ type: 'text';
118
+ text: string;
119
+ }>;
120
+ }>;
121
+ /**
122
+ * Lists the tasks of a project view in their real server-side order
123
+ * (`GET /projects/{id}/views/{view}/tasks`), with pagination.
124
+ *
125
+ * The view id is auto-resolved to the project's Kanban view when omitted,
126
+ * matching `list-buckets`'s resolution behavior — this endpoint is most
127
+ * useful for Kanban views, where it returns cards in actual board order
128
+ * (unlike the generic task-listing endpoints used by `vikunja_tasks list`).
129
+ *
130
+ * The OpenAPI spec declares this endpoint's response as a flat `Task[]` for
131
+ * every view kind, but Vikunja's own endpoint description says a Kanban
132
+ * view returns "a list of buckets containing the tasks" instead — i.e. the
133
+ * real Kanban response is bucket-shaped (each item carries a nested `tasks`
134
+ * array), not task-shaped. Since this can't be verified against a live
135
+ * server from spec text alone, the response is passed through unmodified so
136
+ * callers can inspect the actual shape (check for a `tasks` field on each
137
+ * item) rather than have it silently coerced into an assumption that may be
138
+ * wrong. See docs/API_NOTES.md "Per-view task listing".
139
+ */
140
+ export declare function listViewTasks(args: ListViewTasksArgs, authManager: AuthManager): Promise<{
141
+ content: Array<{
142
+ type: 'text';
143
+ text: string;
144
+ }>;
145
+ }>;
146
+ export {};
147
+ //# sourceMappingURL=buckets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buckets.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/buckets.ts"],"names":[],"mappings":"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"}