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