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 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/tools/tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * User Self-Deletion Tool
3
+ *
4
+ * Covers the Vikunja OpenAPI spec's `/user/deletion/*` operations: request,
5
+ * confirm, and cancel the deletion of the CURRENTLY AUTHENTICATED account.
6
+ * This is the reserved slot the `userDeletion` deny-by-default module config
7
+ * key (see src/config/types.ts DANGEROUS_MODULE_KEYS) was set aside for —
8
+ * before this tool, the key existed but nothing was wired to it.
9
+ *
10
+ * Reserved behind TWO gates, both of which must allow the call (module
11
+ * config can only narrow auth, never expand it — see src/tools/index.ts,
12
+ * matching the existing `admin`/`users`/`export` precedent):
13
+ * 1. The deny-by-default `userDeletion` module config key — an operator
14
+ * must explicitly opt in before this tool is even registered.
15
+ * 2. JWT-only auth gating: per docs/VIKUNJA_API_ISSUES.md, ALL `/user/*`
16
+ * endpoints reject `tk_*` API tokens server-side and require a JWT
17
+ * session. API-token sessions never see this tool registered,
18
+ * regardless of the `userDeletion` config value.
19
+ *
20
+ * `request` and `confirm` additionally require an explicit `confirm: true`
21
+ * tool argument (mirroring `vikunja_admin`'s `delete-user` pattern) — both
22
+ * legs move the account irreversibly closer to deletion once Vikunja's
23
+ * email-confirmation flow completes. `cancel` is the safe "undo" leg and
24
+ * does NOT require `confirm: true`.
25
+ *
26
+ * SECRETS: `password` (request/cancel) and `token` (confirm, delivered by
27
+ * email — the caller supplies it, this tool never fetches or sees the
28
+ * email itself) are credentials. Neither is ever included in a response or
29
+ * error message here: success responses only echo the server's generic
30
+ * confirmation message (`models.Message.message`, which Vikunja itself
31
+ * never populates with the submitted credential), and the request body is
32
+ * never interpolated into any thrown error text. See src/utils/security.ts
33
+ * for the shared masking conventions — `logger.debug` below intentionally
34
+ * logs only the subcommand (never `args`), so neither secret can reach logs
35
+ * even incidentally.
36
+ */
37
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
38
+ import type { AuthManager } from '../auth/AuthManager';
39
+ import type { VikunjaClientFactory } from '../client/VikunjaClientFactory';
40
+ export declare function registerUserDeletionTool(server: McpServer, authManager: AuthManager, _clientFactory?: VikunjaClientFactory): void;
41
+ //# sourceMappingURL=user-deletion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-deletion.d.ts","sourceRoot":"","sources":["../../src/tools/user-deletion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAY3E,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,WAAW,EACxB,cAAc,CAAC,EAAE,oBAAoB,GACpC,IAAI,CAsKN"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ /**
3
+ * User Self-Deletion Tool
4
+ *
5
+ * Covers the Vikunja OpenAPI spec's `/user/deletion/*` operations: request,
6
+ * confirm, and cancel the deletion of the CURRENTLY AUTHENTICATED account.
7
+ * This is the reserved slot the `userDeletion` deny-by-default module config
8
+ * key (see src/config/types.ts DANGEROUS_MODULE_KEYS) was set aside for —
9
+ * before this tool, the key existed but nothing was wired to it.
10
+ *
11
+ * Reserved behind TWO gates, both of which must allow the call (module
12
+ * config can only narrow auth, never expand it — see src/tools/index.ts,
13
+ * matching the existing `admin`/`users`/`export` precedent):
14
+ * 1. The deny-by-default `userDeletion` module config key — an operator
15
+ * must explicitly opt in before this tool is even registered.
16
+ * 2. JWT-only auth gating: per docs/VIKUNJA_API_ISSUES.md, ALL `/user/*`
17
+ * endpoints reject `tk_*` API tokens server-side and require a JWT
18
+ * session. API-token sessions never see this tool registered,
19
+ * regardless of the `userDeletion` config value.
20
+ *
21
+ * `request` and `confirm` additionally require an explicit `confirm: true`
22
+ * tool argument (mirroring `vikunja_admin`'s `delete-user` pattern) — both
23
+ * legs move the account irreversibly closer to deletion once Vikunja's
24
+ * email-confirmation flow completes. `cancel` is the safe "undo" leg and
25
+ * does NOT require `confirm: true`.
26
+ *
27
+ * SECRETS: `password` (request/cancel) and `token` (confirm, delivered by
28
+ * email — the caller supplies it, this tool never fetches or sees the
29
+ * email itself) are credentials. Neither is ever included in a response or
30
+ * error message here: success responses only echo the server's generic
31
+ * confirmation message (`models.Message.message`, which Vikunja itself
32
+ * never populates with the submitted credential), and the request body is
33
+ * never interpolated into any thrown error text. See src/utils/security.ts
34
+ * for the shared masking conventions — `logger.debug` below intentionally
35
+ * logs only the subcommand (never `args`), so neither secret can reach logs
36
+ * even incidentally.
37
+ */
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.registerUserDeletionTool = registerUserDeletionTool;
40
+ const zod_1 = require("zod");
41
+ const types_1 = require("../types");
42
+ const logger_1 = require("../utils/logger");
43
+ const response_factory_1 = require("../utils/response-factory");
44
+ const vikunja_rest_1 = require("../utils/vikunja-rest");
45
+ const read_only_1 = require("../utils/read-only");
46
+ function registerUserDeletionTool(server, authManager, _clientFactory) {
47
+ server.tool('vikunja_user_deletion', (0, read_only_1.withReadOnlyNote)('vikunja_user_deletion', "Request, confirm, or cancel deletion of the CURRENTLY AUTHENTICATED Vikunja account. Reserved/deny-by-default: only registered when the 'userDeletion' module config key is explicitly enabled AND the session is JWT-authenticated (API-token sessions never see this tool, regardless of config). 'request' asks the server to start the deletion and sends a confirmation email; 'confirm' (given the token from that email) irreversibly proceeds with deletion; both require an explicit confirm: true argument. 'cancel' aborts an in-progress deletion request and does NOT require confirm: true — it is the safe undo."), {
48
+ subcommand: zod_1.z.enum(['request', 'confirm', 'cancel']),
49
+ // request / cancel
50
+ password: zod_1.z
51
+ .string()
52
+ .min(1)
53
+ .optional()
54
+ .describe('The account password. Required for request and cancel.'),
55
+ // confirm — the token Vikunja emailed to the account owner.
56
+ token: zod_1.z
57
+ .string()
58
+ .min(1)
59
+ .optional()
60
+ .describe('The deletion-confirmation token delivered by email. Required for confirm.'),
61
+ confirm: zod_1.z
62
+ .boolean()
63
+ .optional()
64
+ .describe('Must be true to perform request or confirm. Account deletion is scheduled and irreversible once the emailed token is confirmed. Not required for cancel.'),
65
+ }, (0, read_only_1.getToolAnnotations)('vikunja_user_deletion'), async (args) => {
66
+ if (!authManager.isAuthenticated()) {
67
+ throw new types_1.MCPError(types_1.ErrorCode.AUTH_REQUIRED, 'Authentication required. Please use vikunja_auth.connect first.');
68
+ }
69
+ if (authManager.getAuthType() !== 'jwt') {
70
+ throw new types_1.MCPError(types_1.ErrorCode.PERMISSION_DENIED, 'User deletion operations require JWT authentication. Please reconnect using vikunja_auth.connect with JWT authentication.');
71
+ }
72
+ const subcommand = args.subcommand;
73
+ (0, read_only_1.assertWriteAllowed)('vikunja_user_deletion', subcommand);
74
+ logger_1.logger.debug('User deletion tool called', { subcommand });
75
+ try {
76
+ switch (subcommand) {
77
+ case 'request': {
78
+ if (args.confirm !== true) {
79
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Requesting account deletion starts an irreversible process: Vikunja will email a confirmation token, and confirming it schedules the account for deletion. Pass confirm: true to proceed.');
80
+ }
81
+ if (!args.password) {
82
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'password is required for the request subcommand');
83
+ }
84
+ const result = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', '/user/deletion/request', { password: args.password });
85
+ logger_1.logger.info('Requested account deletion');
86
+ const aorpResult = (0, response_factory_1.createAorpResponse)('request', 'Account deletion requested. Vikunja has emailed a confirmation token — pass it to the confirm subcommand (with confirm: true) to proceed. The deletion is irreversible once confirmed; use the cancel subcommand beforehand to abort.', { serverMessage: result?.message ?? null }, { success: true });
87
+ return { content: [{ type: 'text', text: aorpResult.content }] };
88
+ }
89
+ case 'confirm': {
90
+ if (args.confirm !== true) {
91
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Confirming account deletion is irreversible: the account is scheduled for deletion once confirmed. Pass confirm: true to proceed.');
92
+ }
93
+ if (!args.token) {
94
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'token is required for the confirm subcommand (the token Vikunja emailed after request)');
95
+ }
96
+ const result = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', '/user/deletion/confirm', { token: args.token });
97
+ logger_1.logger.info('Confirmed account deletion');
98
+ const aorpResult = (0, response_factory_1.createAorpResponse)('confirm', 'Account deletion confirmed. The account is now scheduled for deletion; this is irreversible.', { serverMessage: result?.message ?? null }, { success: true });
99
+ return { content: [{ type: 'text', text: aorpResult.content }] };
100
+ }
101
+ case 'cancel': {
102
+ if (!args.password) {
103
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'password is required for the cancel subcommand');
104
+ }
105
+ const result = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', '/user/deletion/cancel', { password: args.password });
106
+ logger_1.logger.info('Canceled account deletion request');
107
+ const aorpResult = (0, response_factory_1.createAorpResponse)('cancel', 'Account deletion request canceled. The account will not be deleted.', { serverMessage: result?.message ?? null }, { success: true });
108
+ return { content: [{ type: 'text', text: aorpResult.content }] };
109
+ }
110
+ default:
111
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Unknown subcommand: ${subcommand}`);
112
+ }
113
+ }
114
+ catch (error) {
115
+ logger_1.logger.error('User deletion operation failed', { error, subcommand });
116
+ if (error instanceof types_1.MCPError) {
117
+ throw error;
118
+ }
119
+ if (error instanceof Error) {
120
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `User deletion operation failed: ${error.message}`);
121
+ }
122
+ throw new types_1.MCPError(types_1.ErrorCode.INTERNAL_ERROR, 'An unexpected error occurred during user deletion operation');
123
+ }
124
+ });
125
+ }
126
+ //# sourceMappingURL=user-deletion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-deletion.js","sourceRoot":"","sources":["../../src/tools/user-deletion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Users Tool
3
+ * Handles user operations for Vikunja
4
+ */
5
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import type { AuthManager } from '../auth/AuthManager';
7
+ import type { VikunjaClientFactory } from '../client/VikunjaClientFactory';
8
+ export declare function registerUsersTool(server: McpServer, authManager: AuthManager, _clientFactory?: VikunjaClientFactory): void;
9
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAoH3E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAkd1H"}
@@ -0,0 +1,418 @@
1
+ "use strict";
2
+ /**
3
+ * Users Tool
4
+ * Handles user operations for Vikunja
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.registerUsersTool = registerUsersTool;
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = require("node:path");
10
+ const zod_1 = require("zod");
11
+ const types_1 = require("../types");
12
+ const auth_error_handler_1 = require("../utils/auth-error-handler");
13
+ const response_factory_1 = require("../utils/response-factory");
14
+ const vikunja_rest_1 = require("../utils/vikunja-rest");
15
+ const read_only_1 = require("../utils/read-only");
16
+ /**
17
+ * The exact set of avatar provider strings the Vikunja server accepts.
18
+ * The OpenAPI spec documents `avatar_provider` as a freeform `string` with
19
+ * valid values only spelled out in prose, so this list is instead sourced
20
+ * from the server's own validation in the Vikunja source
21
+ * (`~/Projects/vikunja/pkg/user/user.go`, the avatar-provider check ahead of
22
+ * `ErrInvalidAvatarProvider`). Validating client-side against the same list
23
+ * gives a clear Zod error instead of a round-trip 400.
24
+ */
25
+ const AVATAR_PROVIDERS = [
26
+ 'gravatar',
27
+ 'upload',
28
+ 'initials',
29
+ 'marble',
30
+ 'ldap',
31
+ 'openid',
32
+ 'default',
33
+ ];
34
+ /**
35
+ * Type guard to check if an object is a valid user structure
36
+ */
37
+ function isUserObject(obj) {
38
+ return obj !== null && typeof obj === 'object' && !Array.isArray(obj);
39
+ }
40
+ /**
41
+ * Safely transforms a raw REST user object (v1.UserWithSettings or
42
+ * user.User) to our extended User interface
43
+ */
44
+ function transformUser(rawUser) {
45
+ if (!isUserObject(rawUser)) {
46
+ throw new Error('Invalid user data received');
47
+ }
48
+ const user = rawUser;
49
+ const safeString = (value) => {
50
+ if (typeof value === 'string')
51
+ return value;
52
+ if (typeof value === 'number' || typeof value === 'boolean')
53
+ return String(value);
54
+ if (value !== null && typeof value === 'object') {
55
+ try {
56
+ return JSON.stringify(value);
57
+ }
58
+ catch {
59
+ return '[object Object]';
60
+ }
61
+ }
62
+ return value !== null && value !== undefined && typeof value !== 'object' && typeof value !== 'boolean' ?
63
+ (typeof value === 'string' || typeof value === 'number' ? value.toString() : '') : '';
64
+ };
65
+ // GET /user returns v1.UserWithSettings: language, timezone, week_start,
66
+ // frontend_settings, email_reminders_enabled, overdue_tasks_reminders_enabled,
67
+ // overdue_tasks_reminders_time and name are nested under a `settings`
68
+ // sub-object (models.UserGeneralSettings), NOT flat on the top-level user
69
+ // object. (id, username, email, created, updated remain top-level.)
70
+ // Search results (GET /users) return plain user.User with no `settings` key,
71
+ // so this safely falls back to an empty object for those.
72
+ const settings = isUserObject(user.settings) ? user.settings : {};
73
+ const result = {
74
+ id: Number(user.id) || 0,
75
+ username: safeString(user.username),
76
+ frontend_settings: (settings.frontend_settings && typeof settings.frontend_settings === 'object') ? settings.frontend_settings : {},
77
+ };
78
+ const userResult = {
79
+ id: result.id,
80
+ username: result.username,
81
+ frontend_settings: result.frontend_settings,
82
+ ...(user.email ? { email: safeString(user.email) } : {}),
83
+ ...(settings.name ? { name: safeString(settings.name) } : {}),
84
+ ...(user.created ? { created: safeString(user.created) } : {}),
85
+ ...(user.updated ? { updated: safeString(user.updated) } : {}),
86
+ ...(settings.language ? { language: safeString(settings.language) } : {}),
87
+ ...(settings.timezone ? { timezone: safeString(settings.timezone) } : {}),
88
+ ...(settings.week_start !== undefined ? { week_start: Number(settings.week_start) } : {}),
89
+ ...(settings.email_reminders_enabled !== undefined ? { email_reminders_enabled: Boolean(settings.email_reminders_enabled) } : {}),
90
+ ...(settings.overdue_tasks_reminders_enabled !== undefined ? { overdue_tasks_reminders_enabled: Boolean(settings.overdue_tasks_reminders_enabled) } : {}),
91
+ ...(settings.overdue_tasks_reminders_time ? { overdue_tasks_reminders_time: safeString(settings.overdue_tasks_reminders_time) } : {}),
92
+ };
93
+ return userResult;
94
+ }
95
+ function registerUsersTool(server, authManager, _clientFactory) {
96
+ server.tool('vikunja_users', (0, read_only_1.withReadOnlyNote)('vikunja_users', "Manage user profiles, search users, and update user settings. Use the 'timezones' subcommand to fetch this Vikunja instance's list of valid IANA time zone names before calling 'update-settings' with a timezone value — the server rejects unrecognized zone names, and the valid set is instance-dependent (depends on the OS Vikunja runs on). 'get-avatar'/'set-avatar' read and write the avatar *provider* setting (JSON — one of gravatar/upload/initials/marble/ldap/openid/default), not image bytes; 'upload-avatar' uploads an actual image file and only takes effect once the provider is 'upload' (which it also sets as a side effect)."), {
97
+ // Operation type
98
+ subcommand: zod_1.z.enum([
99
+ 'current',
100
+ 'search',
101
+ 'settings',
102
+ 'update-settings',
103
+ 'timezones',
104
+ 'get-avatar',
105
+ 'set-avatar',
106
+ 'upload-avatar',
107
+ ]),
108
+ // Search parameters
109
+ search: zod_1.z.string().optional(),
110
+ page: zod_1.z.number().positive().optional(),
111
+ perPage: zod_1.z.number().positive().max(100).optional(),
112
+ // Settings update fields
113
+ name: zod_1.z.string().optional(),
114
+ language: zod_1.z.string().optional(),
115
+ timezone: zod_1.z.string().optional(),
116
+ weekStart: zod_1.z.number().min(0).max(6).optional(),
117
+ frontendSettings: zod_1.z.record(zod_1.z.unknown()).optional(),
118
+ // Notification preferences
119
+ emailRemindersEnabled: zod_1.z.boolean().optional(),
120
+ overdueTasksRemindersEnabled: zod_1.z.boolean().optional(),
121
+ overdueTasksRemindersTime: zod_1.z.string().optional(),
122
+ // Avatar settings (get-avatar/set-avatar/upload-avatar)
123
+ avatarProvider: zod_1.z.enum(AVATAR_PROVIDERS).optional(),
124
+ // Local file to upload, same contract as `vikunja_tasks attach`:
125
+ // `filePath` (absolute path readable by the MCP server process) takes
126
+ // precedence over `fileContent` (base64) when both are given.
127
+ filePath: zod_1.z.string().optional(),
128
+ fileContent: zod_1.z.string().optional(),
129
+ filename: zod_1.z.string().optional(),
130
+ }, (0, read_only_1.getToolAnnotations)('vikunja_users'), async (args) => {
131
+ if (!authManager.isAuthenticated()) {
132
+ throw new types_1.MCPError(types_1.ErrorCode.AUTH_REQUIRED, 'Authentication required. Please use vikunja_auth.connect first.');
133
+ }
134
+ // User operations require JWT authentication
135
+ if (authManager.getAuthType() !== 'jwt') {
136
+ throw new types_1.MCPError(types_1.ErrorCode.PERMISSION_DENIED, 'User operations require JWT authentication. Please reconnect using vikunja_auth.connect with JWT authentication.');
137
+ }
138
+ (0, read_only_1.assertWriteAllowed)('vikunja_users', args.subcommand);
139
+ try {
140
+ const subcommand = args.subcommand;
141
+ switch (subcommand) {
142
+ case 'current': {
143
+ const rawUser = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', '/user');
144
+ // Safely transform the raw REST user response to our extended User
145
+ // interface. Extended properties may not be available from all Vikunja API versions
146
+ const enhancedUser = transformUser(rawUser);
147
+ const response = (0, types_1.createStandardResponse)('get-current-user', 'Current user retrieved successfully', { user: enhancedUser });
148
+ return {
149
+ content: [
150
+ {
151
+ type: 'text',
152
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response),
153
+ },
154
+ ],
155
+ };
156
+ }
157
+ case 'search': {
158
+ const params = {};
159
+ if (args.search !== undefined)
160
+ params.s = args.search;
161
+ if (args.page !== undefined)
162
+ params.page = args.page;
163
+ if (args.perPage !== undefined)
164
+ params.per_page = args.perPage;
165
+ // GET /users only accepts the `s` query param per the spec (no
166
+ // page/per_page) — the legacy client's UserSearchParams type includes
167
+ // pagination fields the real endpoint doesn't support, so the
168
+ // request only ever sent `s` server-side even before this
169
+ // migration. `params`/`paramsMetadata` still record whatever the
170
+ // caller passed for the response metadata below.
171
+ const query = new URLSearchParams();
172
+ if (params.s !== undefined)
173
+ query.set('s', params.s);
174
+ const queryString = query.toString();
175
+ const usersResult = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/users${queryString ? `?${queryString}` : ''}`);
176
+ const users = usersResult ?? [];
177
+ const paramsMetadata = {};
178
+ if (args.search !== undefined)
179
+ paramsMetadata.search = args.search;
180
+ if (args.page !== undefined)
181
+ paramsMetadata.page = args.page;
182
+ if (args.perPage !== undefined)
183
+ paramsMetadata.perPage = args.perPage;
184
+ const response = (0, types_1.createStandardResponse)('search-users', `Found ${users.length} users`, { users: users.map(transformUser) }, { count: users.length, params: paramsMetadata });
185
+ return {
186
+ content: [
187
+ {
188
+ type: 'text',
189
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response),
190
+ },
191
+ ],
192
+ };
193
+ }
194
+ case 'settings': {
195
+ // Get current user first to get their settings
196
+ const rawUser = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', '/user');
197
+ // Safely transform the raw REST user response to our extended User interface
198
+ const user = transformUser(rawUser);
199
+ // Handle the actual API response format gracefully
200
+ const settings = {
201
+ id: user.id,
202
+ username: user.username,
203
+ ...(user.email && { email: user.email }),
204
+ ...(user.name && { name: user.name }),
205
+ ...(user.language && { language: user.language }),
206
+ ...(user.timezone && { timezone: user.timezone }),
207
+ ...(user.week_start !== undefined && { weekStart: user.week_start }),
208
+ frontendSettings: user.frontend_settings || {},
209
+ ...(user.email_reminders_enabled !== undefined && { emailRemindersEnabled: user.email_reminders_enabled }),
210
+ ...(user.overdue_tasks_reminders_enabled !== undefined && { overdueTasksRemindersEnabled: user.overdue_tasks_reminders_enabled }),
211
+ ...(user.overdue_tasks_reminders_time && { overdueTasksRemindersTime: user.overdue_tasks_reminders_time }),
212
+ };
213
+ const response = (0, types_1.createStandardResponse)('get-user-settings', 'User settings retrieved successfully', { settings });
214
+ return {
215
+ content: [
216
+ {
217
+ type: 'text',
218
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response),
219
+ },
220
+ ],
221
+ };
222
+ }
223
+ case 'update-settings': {
224
+ if (!args.name &&
225
+ !args.language &&
226
+ !args.timezone &&
227
+ args.weekStart === undefined &&
228
+ !args.frontendSettings &&
229
+ args.emailRemindersEnabled === undefined &&
230
+ args.overdueTasksRemindersEnabled === undefined &&
231
+ args.overdueTasksRemindersTime === undefined) {
232
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'At least one setting field is required');
233
+ }
234
+ const settings = {};
235
+ const affectedFields = [];
236
+ if (args.name !== undefined) {
237
+ settings.name = args.name;
238
+ affectedFields.push('name');
239
+ }
240
+ if (args.language !== undefined) {
241
+ settings.language = args.language;
242
+ affectedFields.push('language');
243
+ }
244
+ if (args.timezone !== undefined) {
245
+ settings.timezone = args.timezone;
246
+ affectedFields.push('timezone');
247
+ }
248
+ if (args.weekStart !== undefined) {
249
+ settings.week_start = args.weekStart;
250
+ affectedFields.push('weekStart');
251
+ }
252
+ if (args.frontendSettings !== undefined) {
253
+ settings.frontend_settings = args.frontendSettings;
254
+ affectedFields.push('frontendSettings');
255
+ }
256
+ if (args.emailRemindersEnabled !== undefined) {
257
+ settings.email_reminders_enabled = args.emailRemindersEnabled;
258
+ affectedFields.push('emailRemindersEnabled');
259
+ }
260
+ if (args.overdueTasksRemindersEnabled !== undefined) {
261
+ settings.overdue_tasks_reminders_enabled = args.overdueTasksRemindersEnabled;
262
+ affectedFields.push('overdueTasksRemindersEnabled');
263
+ }
264
+ if (args.overdueTasksRemindersTime !== undefined) {
265
+ settings.overdue_tasks_reminders_time = args.overdueTasksRemindersTime;
266
+ affectedFields.push('overdueTasksRemindersTime');
267
+ }
268
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', '/user/settings/general', settings);
269
+ // Get updated user info
270
+ const rawUpdatedUser = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', '/user');
271
+ // Safely transform the raw REST user response to our extended User interface
272
+ const updatedUser = transformUser(rawUpdatedUser);
273
+ const response = (0, types_1.createStandardResponse)('update-user-settings', 'User settings updated successfully', { user: updatedUser }, { affectedFields });
274
+ return {
275
+ content: [
276
+ {
277
+ type: 'text',
278
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response),
279
+ },
280
+ ],
281
+ };
282
+ }
283
+ case 'timezones': {
284
+ // GET /user/timezones. Not exposed via the legacy client's client
285
+ // (all new HTTP calls go through vikunjaRestRequest per
286
+ // docs/ENDPOINT-PLAYBOOK.md §3). The instance-dependent list of
287
+ // valid IANA time zone names this call returns is exactly what
288
+ // 'update-settings'' timezone argument needs to be validated
289
+ // against before being sent to POST /user/settings/general —
290
+ // Vikunja rejects unrecognized zone names there.
291
+ const timezones = (await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', '/user/timezones')) ?? [];
292
+ const response = (0, types_1.createStandardResponse)('get-user-timezones', `Retrieved ${timezones.length} available time zones`, { timezones }, { count: timezones.length });
293
+ return {
294
+ content: [
295
+ {
296
+ type: 'text',
297
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response),
298
+ },
299
+ ],
300
+ };
301
+ }
302
+ case 'get-avatar': {
303
+ // GET /user/settings/avatar returns v1.UserAvatarProvider
304
+ // ({avatar_provider}) — JSON, not image bytes. See the type
305
+ // comment above and docs/ENDPOINT-TAIL-RETRIAGE.md G5.
306
+ const raw = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', '/user/settings/avatar');
307
+ const avatarProvider = raw?.avatar_provider ?? '';
308
+ const response = (0, types_1.createStandardResponse)('get-avatar-provider', 'Avatar provider retrieved successfully', { avatarProvider });
309
+ return {
310
+ content: [
311
+ {
312
+ type: 'text',
313
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response),
314
+ },
315
+ ],
316
+ };
317
+ }
318
+ case 'set-avatar': {
319
+ if (!args.avatarProvider) {
320
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `set-avatar requires avatarProvider (one of: ${AVATAR_PROVIDERS.join(', ')})`);
321
+ }
322
+ // POST /user/settings/avatar, body v1.UserAvatarProvider. Zod's
323
+ // enum check above already rejects anything outside
324
+ // AVATAR_PROVIDERS before the handler runs.
325
+ await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', '/user/settings/avatar', { avatar_provider: args.avatarProvider });
326
+ const response = (0, types_1.createStandardResponse)('set-avatar-provider', `Avatar provider set to '${args.avatarProvider}'` +
327
+ (args.avatarProvider === 'upload'
328
+ ? " — call 'upload-avatar' with a file to complete the switch."
329
+ : ''), { avatarProvider: args.avatarProvider });
330
+ return {
331
+ content: [
332
+ {
333
+ type: 'text',
334
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response),
335
+ },
336
+ ],
337
+ };
338
+ }
339
+ case 'upload-avatar': {
340
+ // PUT /user/settings/avatar/upload, multipart/form-data, field
341
+ // name `avatar` (single file). This endpoint ALSO sets the
342
+ // avatar provider to 'upload' as a side effect on the server
343
+ // (see the Vikunja source's UploadAvatar handler) — the upload
344
+ // only actually shows up once the provider is 'upload', which
345
+ // this call itself guarantees going forward, but a *prior*
346
+ // 'gravatar'/'initials'/etc. provider is silently overwritten by
347
+ // it. Same file-input contract as `vikunja_tasks attach`:
348
+ // `filePath` (server-local path) or `fileContent` (base64),
349
+ // `filePath` wins when both are given.
350
+ const { filePath, fileContent, filename } = args;
351
+ let bytes;
352
+ let name;
353
+ let source;
354
+ if (filePath) {
355
+ try {
356
+ bytes = (0, node_fs_1.readFileSync)(filePath);
357
+ }
358
+ catch (err) {
359
+ const message = err instanceof Error ? err.message : String(err);
360
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `upload-avatar: cannot read filePath ${filePath}: ${message}`);
361
+ }
362
+ name = filename || (0, node_path_1.basename)(filePath);
363
+ source = 'filePath';
364
+ }
365
+ else if (fileContent) {
366
+ const decoded = Buffer.from(fileContent, 'base64');
367
+ if (decoded.length === 0) {
368
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'upload-avatar: decoded fileContent is empty (not valid base64 or empty input)');
369
+ }
370
+ bytes = decoded;
371
+ name = filename || 'avatar.png';
372
+ source = 'fileContent';
373
+ }
374
+ else {
375
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'upload-avatar requires filePath or fileContent');
376
+ }
377
+ // Strip any directory component a caller might inject via `filename`.
378
+ name = (0, node_path_1.basename)(name);
379
+ const form = new FormData();
380
+ form.append('avatar', new Blob([bytes]), name);
381
+ const data = await (0, vikunja_rest_1.vikunjaRestMultipartRequest)(authManager, 'PUT', '/user/settings/avatar/upload', form);
382
+ const response = (0, types_1.createStandardResponse)('upload-avatar', `Avatar uploaded (${bytes.length} bytes) and provider set to 'upload'`, { filename: name, bytes: bytes.length, source, response: data });
383
+ return {
384
+ content: [
385
+ {
386
+ type: 'text',
387
+ text: (0, response_factory_1.formatAorpAsMarkdown)(response),
388
+ },
389
+ ],
390
+ };
391
+ }
392
+ default:
393
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Invalid subcommand: ${String(subcommand)}`);
394
+ }
395
+ }
396
+ catch (error) {
397
+ if (error instanceof types_1.MCPError) {
398
+ // A REST-layer 401/403 on a user endpoint is the documented
399
+ // Vikunja API quirk (docs/API_NOTES.md "User Endpoint
400
+ // Authentication"): the same token that works everywhere else can
401
+ // be rejected on `/user`/`/users`. Route it through the same
402
+ // friendly auth-error translation legacy-client-sourced exceptions
403
+ // used to get — `vikunjaRestRequest` throws `MCPError` with the
404
+ // HTTP status under `details.statusCode`, not a `.message` string
405
+ // `handleAuthError`'s pattern matching recognizes, so this has to
406
+ // be detected structurally rather than by message content.
407
+ const statusCode = error.details?.statusCode;
408
+ if (statusCode === 401 || statusCode === 403) {
409
+ (0, auth_error_handler_1.handleAuthError)(new Error(`${statusCode} ${error.message}`), `user.${args.subcommand}`, `User operation error: ${error.message}`);
410
+ }
411
+ throw error;
412
+ }
413
+ // Use consistent auth error handling
414
+ (0, auth_error_handler_1.handleAuthError)(error, `user.${args.subcommand}`, `User operation error: ${error instanceof Error ? error.message : String(error)}`);
415
+ }
416
+ });
417
+ }
418
+ //# sourceMappingURL=users.js.map