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 @@
|
|
|
1
|
+
{"version":3,"file":"CSVParser.js","sourceRoot":"","sources":["../../src/parsers/CSVParser.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AA2BH,oCA8BC;AAvDD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACjC,gBAAgB;gBAChB,OAAO,IAAI,GAAG,CAAC;gBACf,CAAC,EAAE,CAAC,CAAC,kBAAkB;YACzB,CAAC;iBAAM,CAAC;gBACN,oBAAoB;gBACpB,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,eAAe;YACf,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5B,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ImportedTask } from './JSONParser';
|
|
2
|
+
export interface ParseInputOptions {
|
|
3
|
+
format: 'csv' | 'json';
|
|
4
|
+
data: string;
|
|
5
|
+
skipErrors?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export type { ImportedTask } from './JSONParser';
|
|
8
|
+
/**
|
|
9
|
+
* Factory function to parse input data based on format.
|
|
10
|
+
* This centralizes format detection and parser orchestration logic.
|
|
11
|
+
*
|
|
12
|
+
* @param options - Parsing options including format, data, and error handling
|
|
13
|
+
* @returns Array of parsed and validated ImportedTask objects
|
|
14
|
+
* @throws MCPError if parsing fails or validation errors occur
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseInputData(options: ParseInputOptions): ImportedTask[];
|
|
17
|
+
//# sourceMappingURL=InputParserFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputParserFactory.d.ts","sourceRoot":"","sources":["../../src/parsers/InputParserFactory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAGrF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAGD,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,EAAE,CAuCzE"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseInputData = parseInputData;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const CSVParser_1 = require("./CSVParser");
|
|
6
|
+
const JSONParser_1 = require("./JSONParser");
|
|
7
|
+
const logger_1 = require("../utils/logger");
|
|
8
|
+
/**
|
|
9
|
+
* Factory function to parse input data based on format.
|
|
10
|
+
* This centralizes format detection and parser orchestration logic.
|
|
11
|
+
*
|
|
12
|
+
* @param options - Parsing options including format, data, and error handling
|
|
13
|
+
* @returns Array of parsed and validated ImportedTask objects
|
|
14
|
+
* @throws MCPError if parsing fails or validation errors occur
|
|
15
|
+
*/
|
|
16
|
+
function parseInputData(options) {
|
|
17
|
+
const { format, data, skipErrors = false } = options;
|
|
18
|
+
// Validate input parameters
|
|
19
|
+
if (!data || data.trim() === '') {
|
|
20
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Input data cannot be empty');
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
switch (format) {
|
|
24
|
+
case 'json':
|
|
25
|
+
return (0, JSONParser_1.parseJSONInput)(data);
|
|
26
|
+
case 'csv':
|
|
27
|
+
return parseCSVInput(data, skipErrors);
|
|
28
|
+
default: {
|
|
29
|
+
// Use format directly for error message
|
|
30
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Unsupported format: ${String(format)}. Supported formats are: csv, json`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
// Re-throw MCP errors as-is
|
|
36
|
+
if (error instanceof types_1.MCPError) {
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
// Wrap other errors in MCPError
|
|
40
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Failed to parse ${format} input: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parse CSV input data and return array of ImportedTask objects.
|
|
45
|
+
* Extracted from batch-import.ts to improve modularity and testability.
|
|
46
|
+
*
|
|
47
|
+
* @param data - Raw CSV string data
|
|
48
|
+
* @param skipErrors - Whether to skip invalid rows or throw an error
|
|
49
|
+
* @returns Array of parsed and validated ImportedTask objects
|
|
50
|
+
* @throws MCPError if CSV structure is invalid or validation fails (when skipErrors=false)
|
|
51
|
+
*/
|
|
52
|
+
function parseCSVInput(data, skipErrors = false) {
|
|
53
|
+
const tasks = [];
|
|
54
|
+
// Split into lines and filter out empty lines
|
|
55
|
+
const lines = data.split('\n').filter((line) => line.trim());
|
|
56
|
+
if (lines.length < 2) {
|
|
57
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'CSV must have at least a header row and one data row');
|
|
58
|
+
}
|
|
59
|
+
// Parse header
|
|
60
|
+
const headers = (0, CSVParser_1.parseCSVLine)(lines[0] || '');
|
|
61
|
+
const requiredHeaders = ['title'];
|
|
62
|
+
const missingHeaders = requiredHeaders.filter((h) => !headers.includes(h));
|
|
63
|
+
if (missingHeaders.length > 0) {
|
|
64
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Missing required CSV headers: ${missingHeaders.join(', ')}`);
|
|
65
|
+
}
|
|
66
|
+
// Parse data rows
|
|
67
|
+
for (let i = 1; i < lines.length; i++) {
|
|
68
|
+
const values = (0, CSVParser_1.parseCSVLine)(lines[i] || '');
|
|
69
|
+
// Skip empty rows
|
|
70
|
+
if (values.every((value) => !value || value.trim() === '')) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const taskData = {};
|
|
74
|
+
headers.forEach((header, index) => {
|
|
75
|
+
const value = values[index];
|
|
76
|
+
if (value) {
|
|
77
|
+
switch (header) {
|
|
78
|
+
case 'title':
|
|
79
|
+
taskData.title = value;
|
|
80
|
+
break;
|
|
81
|
+
case 'description':
|
|
82
|
+
taskData.description = value;
|
|
83
|
+
break;
|
|
84
|
+
case 'done':
|
|
85
|
+
taskData.done = value.toLowerCase() === 'true';
|
|
86
|
+
break;
|
|
87
|
+
case 'dueDate':
|
|
88
|
+
taskData.dueDate = value;
|
|
89
|
+
break;
|
|
90
|
+
case 'priority':
|
|
91
|
+
taskData.priority = parseInt(value, 10);
|
|
92
|
+
break;
|
|
93
|
+
case 'labels':
|
|
94
|
+
taskData.labels = value ? value.split(';').map((l) => l.trim()).filter((l) => l.length > 0) : [];
|
|
95
|
+
logger_1.logger.debug('Parsed labels from CSV', {
|
|
96
|
+
rawValue: value,
|
|
97
|
+
parsedLabels: taskData.labels,
|
|
98
|
+
});
|
|
99
|
+
break;
|
|
100
|
+
case 'assignees':
|
|
101
|
+
taskData.assignees = value ? value.split(';').map((a) => a.trim()).filter((a) => a.length > 0) : [];
|
|
102
|
+
break;
|
|
103
|
+
case 'startDate':
|
|
104
|
+
taskData.startDate = value;
|
|
105
|
+
break;
|
|
106
|
+
case 'endDate':
|
|
107
|
+
taskData.endDate = value;
|
|
108
|
+
break;
|
|
109
|
+
case 'hexColor':
|
|
110
|
+
taskData.hexColor = value;
|
|
111
|
+
break;
|
|
112
|
+
case 'percentDone':
|
|
113
|
+
taskData.percentDone = parseInt(value, 10);
|
|
114
|
+
break;
|
|
115
|
+
case 'repeatAfter':
|
|
116
|
+
taskData.repeatAfter = parseInt(value, 10);
|
|
117
|
+
break;
|
|
118
|
+
case 'repeatMode':
|
|
119
|
+
taskData.repeatMode = parseInt(value, 10);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
try {
|
|
125
|
+
const validatedTask = JSONParser_1.importedTaskSchema.parse(taskData);
|
|
126
|
+
tasks.push(validatedTask);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (!skipErrors) {
|
|
130
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Invalid task data at row ${i + 1}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
131
|
+
}
|
|
132
|
+
// If skipErrors is true, we skip this row and continue
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return tasks;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=InputParserFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputParserFactory.js","sourceRoot":"","sources":["../../src/parsers/InputParserFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Zod schema for validating imported task data from JSON
|
|
4
|
+
* Defines the structure and validation rules for task objects
|
|
5
|
+
*/
|
|
6
|
+
export declare const importedTaskSchema: z.ZodObject<{
|
|
7
|
+
title: z.ZodString;
|
|
8
|
+
description: z.ZodOptional<z.ZodString>;
|
|
9
|
+
done: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
dueDate: z.ZodOptional<z.ZodString>;
|
|
11
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
labels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
13
|
+
assignees: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
14
|
+
startDate: z.ZodOptional<z.ZodString>;
|
|
15
|
+
endDate: z.ZodOptional<z.ZodString>;
|
|
16
|
+
hexColor: z.ZodOptional<z.ZodString>;
|
|
17
|
+
percentDone: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
repeatAfter: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
repeatMode: z.ZodOptional<z.ZodNumber>;
|
|
20
|
+
reminders: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
21
|
+
}, "strict", z.ZodTypeAny, {
|
|
22
|
+
title: string;
|
|
23
|
+
done?: boolean | undefined;
|
|
24
|
+
priority?: number | undefined;
|
|
25
|
+
description?: string | undefined;
|
|
26
|
+
labels?: string[] | undefined;
|
|
27
|
+
percentDone?: number | undefined;
|
|
28
|
+
dueDate?: string | undefined;
|
|
29
|
+
startDate?: string | undefined;
|
|
30
|
+
endDate?: string | undefined;
|
|
31
|
+
assignees?: string[] | undefined;
|
|
32
|
+
repeatAfter?: number | undefined;
|
|
33
|
+
hexColor?: string | undefined;
|
|
34
|
+
reminders?: string[] | undefined;
|
|
35
|
+
repeatMode?: number | undefined;
|
|
36
|
+
}, {
|
|
37
|
+
title: string;
|
|
38
|
+
done?: boolean | undefined;
|
|
39
|
+
priority?: number | undefined;
|
|
40
|
+
description?: string | undefined;
|
|
41
|
+
labels?: string[] | undefined;
|
|
42
|
+
percentDone?: number | undefined;
|
|
43
|
+
dueDate?: string | undefined;
|
|
44
|
+
startDate?: string | undefined;
|
|
45
|
+
endDate?: string | undefined;
|
|
46
|
+
assignees?: string[] | undefined;
|
|
47
|
+
repeatAfter?: number | undefined;
|
|
48
|
+
hexColor?: string | undefined;
|
|
49
|
+
reminders?: string[] | undefined;
|
|
50
|
+
repeatMode?: number | undefined;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* TypeScript type inferred from the importedTaskSchema
|
|
54
|
+
* Represents a valid task object that can be imported
|
|
55
|
+
*/
|
|
56
|
+
export type ImportedTask = z.infer<typeof importedTaskSchema>;
|
|
57
|
+
/**
|
|
58
|
+
* Parses JSON input and normalizes to array of ImportedTask objects.
|
|
59
|
+
* Handles both single task objects and arrays of tasks.
|
|
60
|
+
* Validates each task against importedTaskSchema.
|
|
61
|
+
*
|
|
62
|
+
* @param data - JSON string containing task data
|
|
63
|
+
* @returns Array of validated ImportedTask objects
|
|
64
|
+
* @throws {MCPError} If JSON is malformed or validation fails
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* parseJSONInput('{"title": "Task 1"}')
|
|
68
|
+
* // Returns: [{title: "Task 1"}]
|
|
69
|
+
*
|
|
70
|
+
* parseJSONInput('[{"title": "Task 1"}, {"title": "Task 2"}]')
|
|
71
|
+
* // Returns: [{title: "Task 1"}, {title: "Task 2"}]
|
|
72
|
+
*/
|
|
73
|
+
export declare function parseJSONInput(data: string): ImportedTask[];
|
|
74
|
+
//# sourceMappingURL=JSONParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JSONParser.d.ts","sourceRoot":"","sources":["../../src/parsers/JSONParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBpB,CAAC;AAEZ;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAO9D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAiB3D"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.importedTaskSchema = void 0;
|
|
4
|
+
exports.parseJSONInput = parseJSONInput;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const types_1 = require("../types");
|
|
7
|
+
/* ===================================================================
|
|
8
|
+
* TYPE DEFINITIONS & SCHEMAS
|
|
9
|
+
* Zod schemas and TypeScript interfaces for imported tasks from JSON
|
|
10
|
+
* =================================================================== */
|
|
11
|
+
/**
|
|
12
|
+
* Zod schema for validating imported task data from JSON
|
|
13
|
+
* Defines the structure and validation rules for task objects
|
|
14
|
+
*/
|
|
15
|
+
exports.importedTaskSchema = zod_1.z.object({
|
|
16
|
+
title: zod_1.z.string().min(1),
|
|
17
|
+
description: zod_1.z.string().optional(),
|
|
18
|
+
done: zod_1.z.boolean().optional(),
|
|
19
|
+
dueDate: zod_1.z.string().optional(),
|
|
20
|
+
priority: zod_1.z.number().optional(),
|
|
21
|
+
labels: zod_1.z.array(zod_1.z.string()).optional(),
|
|
22
|
+
assignees: zod_1.z.array(zod_1.z.string()).optional(),
|
|
23
|
+
startDate: zod_1.z.string().optional(),
|
|
24
|
+
endDate: zod_1.z.string().optional(),
|
|
25
|
+
hexColor: zod_1.z
|
|
26
|
+
.string()
|
|
27
|
+
.regex(/^#[0-9A-Fa-f]{6}$/)
|
|
28
|
+
.optional(),
|
|
29
|
+
percentDone: zod_1.z.number().min(0).max(100).optional(),
|
|
30
|
+
repeatAfter: zod_1.z.number().optional(),
|
|
31
|
+
repeatMode: zod_1.z.number().optional(),
|
|
32
|
+
reminders: zod_1.z.array(zod_1.z.string()).optional(),
|
|
33
|
+
}).strict(); // Reject unknown properties
|
|
34
|
+
/* ===================================================================
|
|
35
|
+
* JSON PARSING FUNCTIONS
|
|
36
|
+
* Functions for parsing and validating JSON input data
|
|
37
|
+
* =================================================================== */
|
|
38
|
+
/**
|
|
39
|
+
* Parses JSON input and normalizes to array of ImportedTask objects.
|
|
40
|
+
* Handles both single task objects and arrays of tasks.
|
|
41
|
+
* Validates each task against importedTaskSchema.
|
|
42
|
+
*
|
|
43
|
+
* @param data - JSON string containing task data
|
|
44
|
+
* @returns Array of validated ImportedTask objects
|
|
45
|
+
* @throws {MCPError} If JSON is malformed or validation fails
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* parseJSONInput('{"title": "Task 1"}')
|
|
49
|
+
* // Returns: [{title: "Task 1"}]
|
|
50
|
+
*
|
|
51
|
+
* parseJSONInput('[{"title": "Task 1"}, {"title": "Task 2"}]')
|
|
52
|
+
* // Returns: [{title: "Task 1"}, {title: "Task 2"}]
|
|
53
|
+
*/
|
|
54
|
+
function parseJSONInput(data) {
|
|
55
|
+
try {
|
|
56
|
+
const parsed = JSON.parse(data);
|
|
57
|
+
const taskArray = Array.isArray(parsed) ? parsed : [parsed];
|
|
58
|
+
const tasks = [];
|
|
59
|
+
for (const task of taskArray) {
|
|
60
|
+
const validatedTask = exports.importedTaskSchema.parse(task);
|
|
61
|
+
tasks.push(validatedTask);
|
|
62
|
+
}
|
|
63
|
+
return tasks;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Invalid JSON data: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=JSONParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JSONParser.js","sourceRoot":"","sources":["../../src/parsers/JSONParser.ts"],"names":[],"mappings":";;;AA2DA,wCAiBC;AA5ED,6BAAwB;AACxB,oCAA+C;AAE/C;;;yEAGyE;AAEzE;;;GAGG;AACU,QAAA,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,OAAC;SACR,MAAM,EAAE;SACR,KAAK,CAAC,mBAAmB,CAAC;SAC1B,QAAQ,EAAE;IACb,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAClD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,4BAA4B;AAQzC;;;yEAGyE;AAEzE;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;QAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAmB,EAAE,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,0BAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,sBAAsB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACjF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity Resolver Service
|
|
3
|
+
*
|
|
4
|
+
* Handles label and user resolution for batch import operations.
|
|
5
|
+
* This service encapsulates the complex logic for fetching entities from the Vikunja API,
|
|
6
|
+
* handling authentication errors, and creating name-to-ID mappings.
|
|
7
|
+
*/
|
|
8
|
+
import type { AuthManager } from '../auth/AuthManager';
|
|
9
|
+
import type { components } from '../types/generated/vikunja-openapi';
|
|
10
|
+
type VikunjaUser = components['schemas']['user.User'];
|
|
11
|
+
type VikunjaLabel = components['schemas']['models.Label'];
|
|
12
|
+
/**
|
|
13
|
+
* Result of entity resolution operations
|
|
14
|
+
*/
|
|
15
|
+
export interface EntityResolutionResult {
|
|
16
|
+
/** Map of lowercase label names to label IDs */
|
|
17
|
+
labelMap: Map<string, number>;
|
|
18
|
+
/** Map of lowercase usernames to user IDs */
|
|
19
|
+
userMap: Map<string, number>;
|
|
20
|
+
/** Whether user fetch failed due to known authentication issues */
|
|
21
|
+
userFetchFailedDueToAuth: boolean;
|
|
22
|
+
/** Raw labels array for reference */
|
|
23
|
+
projectLabels: VikunjaLabel[];
|
|
24
|
+
/** Raw users array for reference */
|
|
25
|
+
projectUsers: VikunjaUser[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Entity Resolver service for mapping label and user names to IDs
|
|
29
|
+
*/
|
|
30
|
+
export declare class EntityResolver {
|
|
31
|
+
/**
|
|
32
|
+
* Fetches labels and users from the Vikunja API and creates resolution maps
|
|
33
|
+
*
|
|
34
|
+
* This method handles the complex logic of:
|
|
35
|
+
* - Fetching labels with robust error handling for malformed responses
|
|
36
|
+
* - Fetching users with special handling for known Vikunja API authentication issues
|
|
37
|
+
* - Creating case-insensitive name-to-ID mappings
|
|
38
|
+
* - Providing comprehensive logging for debugging
|
|
39
|
+
*
|
|
40
|
+
* @param authManager - Active auth manager holding the session credentials,
|
|
41
|
+
* used for the direct-REST `GET /labels` and `GET /users` calls
|
|
42
|
+
* @returns Promise resolving to entity resolution results
|
|
43
|
+
*/
|
|
44
|
+
resolveEntities(authManager: AuthManager): Promise<EntityResolutionResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Fetch labels from the API with robust error handling
|
|
47
|
+
*
|
|
48
|
+
* Handles multiple edge cases:
|
|
49
|
+
* - null/undefined responses
|
|
50
|
+
* - Non-array responses
|
|
51
|
+
* - Network errors
|
|
52
|
+
* - Auth errors (less common for labels than users)
|
|
53
|
+
*
|
|
54
|
+
* @param authManager - Active auth manager holding the session credentials
|
|
55
|
+
* @param result - The result object to update with fetched labels
|
|
56
|
+
*/
|
|
57
|
+
private fetchLabels;
|
|
58
|
+
/**
|
|
59
|
+
* Fetch users from the API with authentication error handling
|
|
60
|
+
*
|
|
61
|
+
* KNOWN VIKUNJA API ISSUE: Users endpoint often fails with API tokens.
|
|
62
|
+
* This is not a bug in our code - it's a documented Vikunja API limitation.
|
|
63
|
+
*
|
|
64
|
+
* KNOWN ISSUE (Wave D migration): per the vendored OpenAPI spec,
|
|
65
|
+
* `GET /users` is a *search* endpoint ("Search for a user by its username,
|
|
66
|
+
* name or full email") that takes an `s` query parameter — it is not a
|
|
67
|
+
* "list all users I can see" endpoint. Called with no `s`, as this method
|
|
68
|
+
* does (matching the pre-migration legacy client call, which passed the
|
|
69
|
+
* same empty `{}` params), it likely returns an empty array on real
|
|
70
|
+
* servers rather than the full set of assignable project users. This
|
|
71
|
+
* migration moves the transport (legacy client -> `vikunjaRestRequest`)
|
|
72
|
+
* without changing that behavior — fixing the semantic mismatch (e.g.
|
|
73
|
+
* passing a search term, or resolving assignees a different way) is a
|
|
74
|
+
* separate, deliberately out-of-scope follow-up.
|
|
75
|
+
*
|
|
76
|
+
* @param authManager - Active auth manager for the direct-REST call
|
|
77
|
+
* @param result - The result object to update with fetched users
|
|
78
|
+
*/
|
|
79
|
+
private fetchUsers;
|
|
80
|
+
/**
|
|
81
|
+
* Create case-insensitive resolution maps from fetched entities
|
|
82
|
+
*
|
|
83
|
+
* This method is more defensive than the original batch-import.ts implementation.
|
|
84
|
+
* The original code would crash on undefined/null titles, but this implementation
|
|
85
|
+
* handles edge cases gracefully by converting them to unique string representations.
|
|
86
|
+
*
|
|
87
|
+
* @param result - The result object to update with resolution maps
|
|
88
|
+
*/
|
|
89
|
+
private createResolutionMaps;
|
|
90
|
+
}
|
|
91
|
+
export {};
|
|
92
|
+
//# sourceMappingURL=EntityResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityResolver.d.ts","sourceRoot":"","sources":["../../src/services/EntityResolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAGrE,KAAK,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC;AACtD,KAAK,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,gDAAgD;IAChD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,6CAA6C;IAC7C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,mEAAmE;IACnE,wBAAwB,EAAE,OAAO,CAAC;IAClC,qCAAqC;IACrC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,oCAAoC;IACpC,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB;;;;;;;;;;;;OAYG;IACG,eAAe,CACnB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,sBAAsB,CAAC;IAyBlC;;;;;;;;;;;OAWG;YACW,WAAW;IA6CzB;;;;;;;;;;;;;;;;;;;;OAoBG;YACW,UAAU;IAwCxB;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;CAuC7B"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Entity Resolver Service
|
|
4
|
+
*
|
|
5
|
+
* Handles label and user resolution for batch import operations.
|
|
6
|
+
* This service encapsulates the complex logic for fetching entities from the Vikunja API,
|
|
7
|
+
* handling authentication errors, and creating name-to-ID mappings.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.EntityResolver = void 0;
|
|
11
|
+
const logger_1 = require("../utils/logger");
|
|
12
|
+
const auth_error_handler_1 = require("../utils/auth-error-handler");
|
|
13
|
+
const types_1 = require("../types");
|
|
14
|
+
const vikunja_rest_1 = require("../utils/vikunja-rest");
|
|
15
|
+
/**
|
|
16
|
+
* Entity Resolver service for mapping label and user names to IDs
|
|
17
|
+
*/
|
|
18
|
+
class EntityResolver {
|
|
19
|
+
/**
|
|
20
|
+
* Fetches labels and users from the Vikunja API and creates resolution maps
|
|
21
|
+
*
|
|
22
|
+
* This method handles the complex logic of:
|
|
23
|
+
* - Fetching labels with robust error handling for malformed responses
|
|
24
|
+
* - Fetching users with special handling for known Vikunja API authentication issues
|
|
25
|
+
* - Creating case-insensitive name-to-ID mappings
|
|
26
|
+
* - Providing comprehensive logging for debugging
|
|
27
|
+
*
|
|
28
|
+
* @param authManager - Active auth manager holding the session credentials,
|
|
29
|
+
* used for the direct-REST `GET /labels` and `GET /users` calls
|
|
30
|
+
* @returns Promise resolving to entity resolution results
|
|
31
|
+
*/
|
|
32
|
+
async resolveEntities(authManager) {
|
|
33
|
+
const result = {
|
|
34
|
+
labelMap: new Map(),
|
|
35
|
+
userMap: new Map(),
|
|
36
|
+
userFetchFailedDueToAuth: false,
|
|
37
|
+
projectLabels: [],
|
|
38
|
+
projectUsers: [],
|
|
39
|
+
};
|
|
40
|
+
await this.fetchLabels(authManager, result);
|
|
41
|
+
await this.fetchUsers(authManager, result);
|
|
42
|
+
this.createResolutionMaps(result);
|
|
43
|
+
// Log the final result for debugging
|
|
44
|
+
logger_1.logger.debug('Label and user maps created', {
|
|
45
|
+
labelMapSize: result.labelMap.size,
|
|
46
|
+
labelMapEntries: Array.from(result.labelMap.entries()),
|
|
47
|
+
userMapSize: result.userMap.size,
|
|
48
|
+
});
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Fetch labels from the API with robust error handling
|
|
53
|
+
*
|
|
54
|
+
* Handles multiple edge cases:
|
|
55
|
+
* - null/undefined responses
|
|
56
|
+
* - Non-array responses
|
|
57
|
+
* - Network errors
|
|
58
|
+
* - Auth errors (less common for labels than users)
|
|
59
|
+
*
|
|
60
|
+
* @param authManager - Active auth manager holding the session credentials
|
|
61
|
+
* @param result - The result object to update with fetched labels
|
|
62
|
+
*/
|
|
63
|
+
async fetchLabels(authManager, result) {
|
|
64
|
+
try {
|
|
65
|
+
// GET /labels per the OpenAPI spec (models.Label[]).
|
|
66
|
+
const labelsResponse = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', '/labels');
|
|
67
|
+
// Handle potential null/undefined response
|
|
68
|
+
if (!labelsResponse) {
|
|
69
|
+
logger_1.logger.warn('Labels response is null/undefined');
|
|
70
|
+
result.projectLabels = [];
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Handle non-array responses
|
|
74
|
+
if (!Array.isArray(labelsResponse)) {
|
|
75
|
+
logger_1.logger.warn('Labels response is not an array', {
|
|
76
|
+
responseType: typeof labelsResponse,
|
|
77
|
+
response: labelsResponse,
|
|
78
|
+
});
|
|
79
|
+
result.projectLabels = [];
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Valid response
|
|
83
|
+
result.projectLabels = labelsResponse;
|
|
84
|
+
logger_1.logger.debug('Labels fetched', {
|
|
85
|
+
count: result.projectLabels.length,
|
|
86
|
+
labels: result.projectLabels.map((l) => ({ id: l.id ?? 0, title: l.title ?? '' })),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
logger_1.logger.error('Failed to fetch labels', {
|
|
91
|
+
error: error instanceof Error ? error.message : String(error),
|
|
92
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
93
|
+
});
|
|
94
|
+
result.projectLabels = [];
|
|
95
|
+
// Continue without labels mapping
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Fetch users from the API with authentication error handling
|
|
100
|
+
*
|
|
101
|
+
* KNOWN VIKUNJA API ISSUE: Users endpoint often fails with API tokens.
|
|
102
|
+
* This is not a bug in our code - it's a documented Vikunja API limitation.
|
|
103
|
+
*
|
|
104
|
+
* KNOWN ISSUE (Wave D migration): per the vendored OpenAPI spec,
|
|
105
|
+
* `GET /users` is a *search* endpoint ("Search for a user by its username,
|
|
106
|
+
* name or full email") that takes an `s` query parameter — it is not a
|
|
107
|
+
* "list all users I can see" endpoint. Called with no `s`, as this method
|
|
108
|
+
* does (matching the pre-migration legacy client call, which passed the
|
|
109
|
+
* same empty `{}` params), it likely returns an empty array on real
|
|
110
|
+
* servers rather than the full set of assignable project users. This
|
|
111
|
+
* migration moves the transport (legacy client -> `vikunjaRestRequest`)
|
|
112
|
+
* without changing that behavior — fixing the semantic mismatch (e.g.
|
|
113
|
+
* passing a search term, or resolving assignees a different way) is a
|
|
114
|
+
* separate, deliberately out-of-scope follow-up.
|
|
115
|
+
*
|
|
116
|
+
* @param authManager - Active auth manager for the direct-REST call
|
|
117
|
+
* @param result - The result object to update with fetched users
|
|
118
|
+
*/
|
|
119
|
+
async fetchUsers(authManager, result) {
|
|
120
|
+
try {
|
|
121
|
+
const usersResponse = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', '/users');
|
|
122
|
+
result.projectUsers = usersResponse || [];
|
|
123
|
+
logger_1.logger.debug('Users fetched', { count: result.projectUsers.length });
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
// This is a known limitation with Vikunja API authentication. Checked
|
|
127
|
+
// directly via `details.statusCode` (set by `vikunjaRestRequest` on
|
|
128
|
+
// every non-2xx response) alongside the shared message-pattern
|
|
129
|
+
// classifier: `isAuthenticationError`'s structured checks look for
|
|
130
|
+
// `.status`/`.response.status`, properties the legacy client's HTTP errors
|
|
131
|
+
// carried but a plain `MCPError` from the REST helper does not — so a
|
|
132
|
+
// bare 401/403 with a response body that doesn't happen to match one
|
|
133
|
+
// of the message-pattern fallbacks would otherwise stop being
|
|
134
|
+
// classified as an auth failure after this transport migration.
|
|
135
|
+
const statusCode = error instanceof types_1.MCPError ? error.details?.statusCode : undefined;
|
|
136
|
+
if (statusCode === 401 || statusCode === 403 || (0, auth_error_handler_1.isAuthenticationError)(error)) {
|
|
137
|
+
logger_1.logger.warn('Cannot fetch users due to known Vikunja API authentication issue. Assignees will be skipped.', {
|
|
138
|
+
error: error instanceof Error ? error.message : String(error),
|
|
139
|
+
});
|
|
140
|
+
result.userFetchFailedDueToAuth = true;
|
|
141
|
+
// Continue without user mapping - assignees will be ignored
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// Some other error - log but continue
|
|
145
|
+
logger_1.logger.warn('Failed to fetch users', { error });
|
|
146
|
+
}
|
|
147
|
+
result.projectUsers = [];
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Create case-insensitive resolution maps from fetched entities
|
|
152
|
+
*
|
|
153
|
+
* This method is more defensive than the original batch-import.ts implementation.
|
|
154
|
+
* The original code would crash on undefined/null titles, but this implementation
|
|
155
|
+
* handles edge cases gracefully by converting them to unique string representations.
|
|
156
|
+
*
|
|
157
|
+
* @param result - The result object to update with resolution maps
|
|
158
|
+
*/
|
|
159
|
+
createResolutionMaps(result) {
|
|
160
|
+
// Create case-insensitive label name to ID map
|
|
161
|
+
result.labelMap = new Map((result.projectLabels || [])
|
|
162
|
+
.filter((label) => label !== null && label.id !== null && label.id !== undefined)
|
|
163
|
+
.map((label) => {
|
|
164
|
+
let key;
|
|
165
|
+
if (!('title' in label)) {
|
|
166
|
+
key = '[missing]';
|
|
167
|
+
}
|
|
168
|
+
else if (label.title === null) {
|
|
169
|
+
key = '[null]';
|
|
170
|
+
}
|
|
171
|
+
else if (label.title === undefined) {
|
|
172
|
+
key = '[undefined]';
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
key = String(label.title).toLowerCase();
|
|
176
|
+
}
|
|
177
|
+
return [key, label.id];
|
|
178
|
+
}));
|
|
179
|
+
// Create case-insensitive username to ID map
|
|
180
|
+
result.userMap = new Map((result.projectUsers || [])
|
|
181
|
+
.filter((user) => user !== null && user.id !== null && user.id !== undefined)
|
|
182
|
+
.map((user) => {
|
|
183
|
+
let key;
|
|
184
|
+
if (!('username' in user)) {
|
|
185
|
+
key = '[missing]';
|
|
186
|
+
}
|
|
187
|
+
else if (user.username === null) {
|
|
188
|
+
key = '[null]';
|
|
189
|
+
}
|
|
190
|
+
else if (user.username === undefined) {
|
|
191
|
+
key = '[undefined]';
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
key = String(user.username).toLowerCase();
|
|
195
|
+
}
|
|
196
|
+
return [key, user.id];
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.EntityResolver = EntityResolver;
|
|
201
|
+
//# sourceMappingURL=EntityResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityResolver.js","sourceRoot":"","sources":["../../src/services/EntityResolver.ts"],"names":[],"mappings":"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"}
|