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,46 @@
1
+ /**
2
+ * Assignee validation service
3
+ * Handles input validation for assignee operations
4
+ */
5
+ export interface AssigneeOperationInput {
6
+ id?: number;
7
+ assignees?: number[];
8
+ }
9
+ /**
10
+ * Service for validating assignee operation inputs
11
+ */
12
+ export declare const AssigneeValidationService: {
13
+ /**
14
+ * Validate input for assign operations
15
+ */
16
+ validateAssignInput(args: AssigneeOperationInput): {
17
+ taskId: number;
18
+ assigneeIds: number[];
19
+ };
20
+ /**
21
+ * Validate input for unassign operations
22
+ */
23
+ validateUnassignInput(args: AssigneeOperationInput): {
24
+ taskId: number;
25
+ userIds: number[];
26
+ };
27
+ /**
28
+ * Validate input for list assignees operation. `search`/`page`/`perPage`
29
+ * map onto the dedicated `GET /tasks/{taskID}/assignees` endpoint's
30
+ * documented `s`/`page`/`per_page` query params — id validation for
31
+ * page/perPage happens in AssigneeOperationsService.fetchAssigneesViaRest,
32
+ * which is the only place that knows the field names used on the wire.
33
+ */
34
+ validateListInput(args: {
35
+ id?: number;
36
+ search?: string;
37
+ page?: number;
38
+ perPage?: number;
39
+ }): {
40
+ taskId: number;
41
+ search?: string;
42
+ page?: number;
43
+ perPage?: number;
44
+ };
45
+ };
46
+ //# sourceMappingURL=AssigneeValidationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssigneeValidationService.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/assignees/AssigneeValidationService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,sBAAsB;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB;IACpC;;OAEG;8BACuB,sBAAsB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE;IAsB5F;;OAEG;gCACyB,sBAAsB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IAsB1F;;;;;;OAMG;4BACqB;QACtB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAgBzE,CAAC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * Assignee validation service
4
+ * Handles input validation for assignee operations
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AssigneeValidationService = void 0;
8
+ const types_1 = require("../../../types");
9
+ const validation_1 = require("../validation");
10
+ /**
11
+ * Service for validating assignee operation inputs
12
+ */
13
+ exports.AssigneeValidationService = {
14
+ /**
15
+ * Validate input for assign operations
16
+ */
17
+ validateAssignInput(args) {
18
+ if (!args.id) {
19
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Task id is required for assign operation');
20
+ }
21
+ (0, validation_1.validateId)(args.id, 'id');
22
+ if (!args.assignees || args.assignees.length === 0) {
23
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'At least one assignee (user id) is required');
24
+ }
25
+ // Validate assignee IDs
26
+ args.assignees.forEach((id) => (0, validation_1.validateId)(id, 'assignee ID'));
27
+ return {
28
+ taskId: args.id,
29
+ assigneeIds: args.assignees,
30
+ };
31
+ },
32
+ /**
33
+ * Validate input for unassign operations
34
+ */
35
+ validateUnassignInput(args) {
36
+ if (!args.id) {
37
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Task id is required for unassign operation');
38
+ }
39
+ (0, validation_1.validateId)(args.id, 'id');
40
+ if (!args.assignees || args.assignees.length === 0) {
41
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'At least one assignee (user id) is required to unassign');
42
+ }
43
+ // Validate assignee IDs
44
+ args.assignees.forEach((id) => (0, validation_1.validateId)(id, 'assignee ID'));
45
+ return {
46
+ taskId: args.id,
47
+ userIds: args.assignees,
48
+ };
49
+ },
50
+ /**
51
+ * Validate input for list assignees operation. `search`/`page`/`perPage`
52
+ * map onto the dedicated `GET /tasks/{taskID}/assignees` endpoint's
53
+ * documented `s`/`page`/`per_page` query params — id validation for
54
+ * page/perPage happens in AssigneeOperationsService.fetchAssigneesViaRest,
55
+ * which is the only place that knows the field names used on the wire.
56
+ */
57
+ validateListInput(args) {
58
+ if (args.id === undefined) {
59
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Task id is required for list-assignees operation');
60
+ }
61
+ (0, validation_1.validateId)(args.id, 'id');
62
+ return {
63
+ taskId: args.id,
64
+ ...(args.search !== undefined && { search: args.search }),
65
+ ...(args.page !== undefined && { page: args.page }),
66
+ ...(args.perPage !== undefined && { perPage: args.perPage }),
67
+ };
68
+ },
69
+ };
70
+ //# sourceMappingURL=AssigneeValidationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssigneeValidationService.js","sourceRoot":"","sources":["../../../../src/tools/tasks/assignees/AssigneeValidationService.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,0CAAqD;AACrD,8CAA2C;AAO3C;;GAEG;AACU,QAAA,yBAAyB,GAAG;IACvC;;OAEG;IACH,mBAAmB,CAAC,IAA4B;QAC9C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,gBAAQ,CAAC,iBAAS,CAAC,gBAAgB,EAAE,0CAA0C,CAAC,CAAC;QAC7F,CAAC;QACD,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,6CAA6C,CAC9C,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,uBAAU,EAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAE9D,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,WAAW,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,IAA4B;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,gBAAQ,CAAC,iBAAS,CAAC,gBAAgB,EAAE,4CAA4C,CAAC,CAAC;QAC/F,CAAC;QACD,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,uBAAU,EAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAE9D,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,OAAO,EAAE,IAAI,CAAC,SAAS;SACxB,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,IAKjB;QACC,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,kDAAkD,CACnD,CAAC;QACJ,CAAC;QACD,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE1B,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACzD,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACnD,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;SAC7D,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Assignee operations for tasks
3
+ * Refactored to use modular service architecture
4
+ */
5
+ import type { AuthManager } from '../../../auth/AuthManager';
6
+ /**
7
+ * Assign users to a task
8
+ */
9
+ export declare function assignUsers(args: {
10
+ id?: number;
11
+ assignees?: number[];
12
+ }, authManager: AuthManager): Promise<{
13
+ content: Array<{
14
+ type: 'text';
15
+ text: string;
16
+ }>;
17
+ }>;
18
+ /**
19
+ * Unassign users from a task
20
+ */
21
+ export declare function unassignUsers(args: {
22
+ id?: number;
23
+ assignees?: number[];
24
+ }, authManager: AuthManager): Promise<{
25
+ content: Array<{
26
+ type: 'text';
27
+ text: string;
28
+ }>;
29
+ }>;
30
+ /**
31
+ * List assignees of a task.
32
+ *
33
+ * Calls the dedicated `GET /tasks/{taskID}/assignees` endpoint directly
34
+ * (not `GET /tasks/{id}` + the embedded `assignees` array, which is what
35
+ * `assignUsers`/`unassignUsers` use internally for verification/refresh) so
36
+ * that the endpoint's documented `s` (username search) and `page`/`per_page`
37
+ * query params are actually reachable — see docs/API-COVERAGE.md's
38
+ * `GET /tasks/{taskID}/assignees` row for the gap this closes.
39
+ */
40
+ export declare function listAssignees(args: {
41
+ id?: number;
42
+ search?: string;
43
+ page?: number;
44
+ perPage?: number;
45
+ sessionId?: string;
46
+ }, authManager: AuthManager): Promise<{
47
+ content: Array<{
48
+ type: 'text';
49
+ text: string;
50
+ }>;
51
+ }>;
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/assignees/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAM7D;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE;IACJ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,EACD,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA8B7D;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,EACD,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAoB7D;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2C7D"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ /**
3
+ * Assignee operations for tasks
4
+ * Refactored to use modular service architecture
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.assignUsers = assignUsers;
8
+ exports.unassignUsers = unassignUsers;
9
+ exports.listAssignees = listAssignees;
10
+ const types_1 = require("../../../types");
11
+ const response_factory_1 = require("../../../utils/response-factory");
12
+ const AssigneeOperationsService_1 = require("./AssigneeOperationsService");
13
+ const AssigneeValidationService_1 = require("./AssigneeValidationService");
14
+ const AssigneeResponseFormatter_1 = require("./AssigneeResponseFormatter");
15
+ /**
16
+ * Assign users to a task
17
+ */
18
+ async function assignUsers(args, authManager) {
19
+ try {
20
+ const { taskId, assigneeIds } = AssigneeValidationService_1.AssigneeValidationService.validateAssignInput(args);
21
+ // Perform the assignment operation
22
+ await AssigneeOperationsService_1.AssigneeOperationsService.assignUsersToTask(authManager, taskId, assigneeIds);
23
+ // Verify the assignees actually persisted (defense-in-depth against silent
24
+ // API failures — adapted from upstream PR #43). Fails open on fetch errors.
25
+ const missingIds = await AssigneeOperationsService_1.AssigneeOperationsService.verifyAssignees(authManager, taskId, assigneeIds);
26
+ // Fetch updated task data
27
+ const task = await AssigneeOperationsService_1.AssigneeOperationsService.fetchTaskWithAssignees(authManager, taskId);
28
+ // Format and return response, surfacing a warning if verification failed
29
+ const response = AssigneeResponseFormatter_1.AssigneeResponseFormatter.formatAssignResponse(task);
30
+ if (missingIds.length > 0) {
31
+ response.success = false;
32
+ response.message =
33
+ `Assignee operation reported success, but user(s) [${missingIds.join(', ')}] were not persisted. ` +
34
+ `This is a known Vikunja API limitation with API token auth. Try using JWT authentication instead.`;
35
+ }
36
+ return AssigneeResponseFormatter_1.AssigneeResponseFormatter.formatMcpResponse(response);
37
+ }
38
+ catch (error) {
39
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `Failed to assign users to task: ${error instanceof Error ? error.message : String(error)}`);
40
+ }
41
+ }
42
+ /**
43
+ * Unassign users from a task
44
+ */
45
+ async function unassignUsers(args, authManager) {
46
+ try {
47
+ const { taskId, userIds } = AssigneeValidationService_1.AssigneeValidationService.validateUnassignInput(args);
48
+ // Perform the unassignment operation
49
+ await AssigneeOperationsService_1.AssigneeOperationsService.removeUsersFromTask(authManager, taskId, userIds);
50
+ // Fetch updated task data
51
+ const task = await AssigneeOperationsService_1.AssigneeOperationsService.fetchTaskWithAssignees(authManager, taskId);
52
+ // Format and return response
53
+ const response = AssigneeResponseFormatter_1.AssigneeResponseFormatter.formatUnassignResponse(task);
54
+ return AssigneeResponseFormatter_1.AssigneeResponseFormatter.formatMcpResponse(response);
55
+ }
56
+ catch (error) {
57
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `Failed to remove users from task: ${error instanceof Error ? error.message : String(error)}`);
58
+ }
59
+ }
60
+ /**
61
+ * List assignees of a task.
62
+ *
63
+ * Calls the dedicated `GET /tasks/{taskID}/assignees` endpoint directly
64
+ * (not `GET /tasks/{id}` + the embedded `assignees` array, which is what
65
+ * `assignUsers`/`unassignUsers` use internally for verification/refresh) so
66
+ * that the endpoint's documented `s` (username search) and `page`/`per_page`
67
+ * query params are actually reachable — see docs/API-COVERAGE.md's
68
+ * `GET /tasks/{taskID}/assignees` row for the gap this closes.
69
+ */
70
+ async function listAssignees(args, authManager) {
71
+ try {
72
+ const { taskId, search, page, perPage } = AssigneeValidationService_1.AssigneeValidationService.validateListInput(args);
73
+ const assignees = await AssigneeOperationsService_1.AssigneeOperationsService.fetchAssigneesViaRest(authManager, taskId, {
74
+ ...(search !== undefined && { search }),
75
+ ...(page !== undefined && { page }),
76
+ ...(perPage !== undefined && { perPage }),
77
+ });
78
+ const response = (0, response_factory_1.createStandardResponse)('get', `Task ${taskId} has ${assignees.length} assignee(s)`, {
79
+ taskId,
80
+ assignees: assignees.map((a) => ({
81
+ id: a.id ?? null,
82
+ username: a.username ?? null,
83
+ name: a.name ?? null,
84
+ email: a.email ?? null,
85
+ })),
86
+ count: assignees.length,
87
+ }, {
88
+ timestamp: new Date().toISOString(),
89
+ count: assignees.length,
90
+ ...(search !== undefined && { search }),
91
+ ...(page !== undefined && { page }),
92
+ ...(perPage !== undefined && { perPage }),
93
+ }, args.sessionId);
94
+ return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
95
+ }
96
+ catch (error) {
97
+ if (error instanceof types_1.MCPError) {
98
+ throw error;
99
+ }
100
+ throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `Failed to list task assignees: ${error instanceof Error ? error.message : String(error)}`);
101
+ }
102
+ }
103
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/tasks/assignees/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Attach subcommand of `vikunja_tasks`.
3
+ *
4
+ * Uploads a file as an attachment on an existing task via the Vikunja REST
5
+ * endpoint `PUT /tasks/{id}/attachments` (`multipart/form-data`, field name
6
+ * `files`). The endpoint accepts multiple files per call; this handler
7
+ * uploads a single file per invocation to keep the schema simple.
8
+ *
9
+ * Two ways to provide the file:
10
+ * - `filePath`: absolute path readable by the MCP server process.
11
+ * - `fileContent`: base64-encoded contents (typical when the MCP client
12
+ * runs on a different machine than the server).
13
+ *
14
+ * When both are present, `filePath` takes precedence. `filename` is optional
15
+ * and falls back to `basename(filePath)` or `attachment.bin`. Any directory
16
+ * components in `filename` are stripped before upload.
17
+ */
18
+ import { z } from 'zod';
19
+ import type { AuthManager } from '../../auth/AuthManager';
20
+ export declare const attachSchemaFields: {
21
+ filePath: z.ZodOptional<z.ZodString>;
22
+ fileContent: z.ZodOptional<z.ZodString>;
23
+ filename: z.ZodOptional<z.ZodString>;
24
+ };
25
+ export interface TaskAttachArgs {
26
+ id?: number;
27
+ filePath?: string;
28
+ fileContent?: string;
29
+ filename?: string;
30
+ }
31
+ interface AttachResult {
32
+ content: Array<{
33
+ type: 'text';
34
+ text: string;
35
+ }>;
36
+ }
37
+ export declare function handleAttach(args: TaskAttachArgs, authManager: AuthManager): Promise<AttachResult>;
38
+ export {};
39
+ //# sourceMappingURL=attach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/attach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,cAAc,EACpB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,YAAY,CAAC,CAgFvB"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * Attach subcommand of `vikunja_tasks`.
4
+ *
5
+ * Uploads a file as an attachment on an existing task via the Vikunja REST
6
+ * endpoint `PUT /tasks/{id}/attachments` (`multipart/form-data`, field name
7
+ * `files`). The endpoint accepts multiple files per call; this handler
8
+ * uploads a single file per invocation to keep the schema simple.
9
+ *
10
+ * Two ways to provide the file:
11
+ * - `filePath`: absolute path readable by the MCP server process.
12
+ * - `fileContent`: base64-encoded contents (typical when the MCP client
13
+ * runs on a different machine than the server).
14
+ *
15
+ * When both are present, `filePath` takes precedence. `filename` is optional
16
+ * and falls back to `basename(filePath)` or `attachment.bin`. Any directory
17
+ * components in `filename` are stripped before upload.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.attachSchemaFields = void 0;
21
+ exports.handleAttach = handleAttach;
22
+ const node_fs_1 = require("node:fs");
23
+ const node_path_1 = require("node:path");
24
+ const zod_1 = require("zod");
25
+ const types_1 = require("../../types");
26
+ const vikunja_rest_1 = require("../../utils/vikunja-rest");
27
+ exports.attachSchemaFields = {
28
+ filePath: zod_1.z.string().optional(),
29
+ fileContent: zod_1.z.string().optional(),
30
+ filename: zod_1.z.string().optional(),
31
+ };
32
+ async function handleAttach(args, authManager) {
33
+ const { id, filePath, fileContent, filename } = args ?? {};
34
+ if (typeof id !== 'number' || !Number.isFinite(id) || id <= 0) {
35
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'attach requires a positive numeric task id');
36
+ }
37
+ let bytes;
38
+ let name;
39
+ let source;
40
+ if (filePath) {
41
+ try {
42
+ bytes = (0, node_fs_1.readFileSync)(filePath);
43
+ }
44
+ catch (err) {
45
+ const message = err instanceof Error ? err.message : String(err);
46
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `attach: cannot read filePath ${filePath}: ${message}`);
47
+ }
48
+ name = filename || (0, node_path_1.basename)(filePath);
49
+ source = 'filePath';
50
+ }
51
+ else if (fileContent) {
52
+ const decoded = Buffer.from(fileContent, 'base64');
53
+ if (decoded.length === 0) {
54
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'attach: decoded fileContent is empty (not valid base64 or empty input)');
55
+ }
56
+ bytes = decoded;
57
+ name = filename || 'attachment.bin';
58
+ source = 'fileContent';
59
+ }
60
+ else {
61
+ throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'attach requires filePath or fileContent');
62
+ }
63
+ // Strip any directory component a caller might inject via `filename`.
64
+ name = (0, node_path_1.basename)(name);
65
+ const form = new FormData();
66
+ form.append('files', new Blob([bytes]), name);
67
+ // Uploads go through the shared REST helper's multipart variant, which
68
+ // gives this call the same URL normalization, named circuit breaker, and
69
+ // MCPError/statusCode error contract as every other direct-REST call —
70
+ // it previously built its own URL by hand (skipping the `/api/v1`
71
+ // normalization vikunjaRestRequest applies) and had no failure
72
+ // protection at all. Retries stay off by default here (see
73
+ // DEFAULT_MULTIPART_RETRY in vikunja-rest.ts): resending a file upload
74
+ // after an ambiguous failure risks duplicating the attachment.
75
+ const data = await (0, vikunja_rest_1.vikunjaRestMultipartRequest)(authManager, 'PUT', `/tasks/${id}/attachments`, form);
76
+ const summary = { taskId: id, filename: name, bytes: bytes.length, source };
77
+ return {
78
+ content: [
79
+ {
80
+ type: 'text',
81
+ text: `## ✅ Success\n\nAttached \`${name}\` (${bytes.length} bytes) to task #${id}\n\n` +
82
+ `**Operation:** attach-task-file\n\n` +
83
+ '```json\n' +
84
+ JSON.stringify({ summary, response: data }, null, 2) +
85
+ '\n```',
86
+ },
87
+ ],
88
+ };
89
+ }
90
+ //# sourceMappingURL=attach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../src/tools/tasks/attach.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Attachments read-side subcommands of `vikunja_tasks`.
3
+ *
4
+ * Complements `attach.ts`'s upload path (`PUT /tasks/{id}/attachments`) with:
5
+ * - `list-attachments`: `GET /tasks/{id}/attachments` (page/per_page).
6
+ * - `get-attachment-info`: metadata for one attachment. The spec has no
7
+ * single-attachment metadata endpoint — `GET
8
+ * /tasks/{id}/attachments/{attachmentID}` returns the raw file bytes,
9
+ * not JSON — so this is derived by fetching the list and finding the
10
+ * matching id, the same fetch-list-and-filter shape `vikunja_webhooks`
11
+ * uses for its `get` subcommand (no per-id GET exists there either).
12
+ * - `delete-attachment`: `DELETE /tasks/{id}/attachments/{attachmentID}`.
13
+ * - `download-attachment`: per the OpenAPI spec, `GET
14
+ * /tasks/{id}/attachments/{attachmentID}` produces
15
+ * `application/octet-stream`. MCP has no binary/file-delivery channel
16
+ * (see docs/API_NOTES.md's "MCP-Specific Limitations"), so this cannot
17
+ * fetch and hand back the file itself. Honesty over pretending
18
+ * (docs/ENDPOINT-PLAYBOOK.md §7): it returns the direct download URL and
19
+ * the auth header the caller needs to fetch it themselves — the same
20
+ * shape as `vikunja_download_user_export` in `src/tools/export.ts`.
21
+ */
22
+ import type { AuthManager } from '../../auth/AuthManager';
23
+ /** Preview sizes documented for the download endpoint's `preview_size` query param. */
24
+ export type AttachmentPreviewSize = 'sm' | 'md' | 'lg' | 'xl';
25
+ export interface AttachmentSubcommandArgs {
26
+ /** Id of the task the attachment belongs to. */
27
+ id?: number;
28
+ /** Id of a specific attachment (required by get-attachment-info, delete-attachment, download-attachment). */
29
+ attachmentId?: number;
30
+ /** Pagination (list-attachments, get-attachment-info). */
31
+ page?: number;
32
+ perPage?: number;
33
+ /** Preview image size hint for download-attachment (spec: sm/md/lg/xl). */
34
+ previewSize?: AttachmentPreviewSize;
35
+ /** Session id for AORP response tracking. */
36
+ sessionId?: string;
37
+ }
38
+ type McpTextResult = {
39
+ content: Array<{
40
+ type: 'text';
41
+ text: string;
42
+ }>;
43
+ };
44
+ /**
45
+ * Lists a task's attachments (`GET /tasks/{id}/attachments`).
46
+ */
47
+ export declare function listAttachments(args: AttachmentSubcommandArgs, authManager: AuthManager): Promise<McpTextResult>;
48
+ /**
49
+ * Retrieves metadata (file name, size, mime, created, author) for a single
50
+ * attachment. There is no dedicated single-attachment metadata endpoint in
51
+ * the spec, so this fetches the list and picks out the matching id.
52
+ */
53
+ export declare function getAttachmentInfo(args: AttachmentSubcommandArgs, authManager: AuthManager): Promise<McpTextResult>;
54
+ /**
55
+ * Deletes an attachment (`DELETE /tasks/{id}/attachments/{attachmentID}`).
56
+ */
57
+ export declare function deleteAttachment(args: AttachmentSubcommandArgs, authManager: AuthManager): Promise<McpTextResult>;
58
+ /**
59
+ * Returns the direct download URL for an attachment plus auth guidance,
60
+ * instead of pretending this tool can deliver the binary file itself. See
61
+ * the module doc comment for why: `GET
62
+ * /tasks/{id}/attachments/{attachmentID}` returns
63
+ * `application/octet-stream`, and MCP has no binary content channel.
64
+ */
65
+ export declare function downloadAttachment(args: AttachmentSubcommandArgs, authManager: AuthManager): McpTextResult;
66
+ export {};
67
+ //# sourceMappingURL=attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks/attachments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAS1D,uFAAuF;AACvF,MAAM,MAAM,qBAAqB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9D,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,6GAA6G;IAC7G,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,aAAa,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AA0DxE;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,wBAAwB,EAC9B,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,aAAa,CAAC,CAsBxB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,wBAAwB,EAC9B,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,aAAa,CAAC,CA0BxB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,wBAAwB,EAC9B,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,aAAa,CAAC,CAmBxB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,wBAAwB,EAC9B,WAAW,EAAE,WAAW,GACvB,aAAa,CA4Bf"}