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,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Filter validation for task filtering operations
|
|
4
|
+
* Handles validation of filter expressions and task listing parameters
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.FilterValidator = void 0;
|
|
8
|
+
const types_1 = require("../../../types");
|
|
9
|
+
const filters_1 = require("../../../utils/filters");
|
|
10
|
+
const memory_1 = require("../../../utils/memory");
|
|
11
|
+
const logger_1 = require("../../../utils/logger");
|
|
12
|
+
const constants_1 = require("../constants");
|
|
13
|
+
const VALID_SORT_FIELD_SET = new Set(constants_1.VALID_SORT_FIELDS);
|
|
14
|
+
/**
|
|
15
|
+
* Normalizes a `sort` argument (comma-separated `sort_by` field list) by
|
|
16
|
+
* translating this tool's camelCase field aliases to the API's snake_case
|
|
17
|
+
* names (`dueDate` -> `due_date`, mirroring `FILTER_FIELD_TO_API_FIELD`),
|
|
18
|
+
* then checks every resulting token against `VALID_SORT_FIELDS`.
|
|
19
|
+
*
|
|
20
|
+
* Without this, an unrecognized `sort_by` value is silently ignored by
|
|
21
|
+
* Vikunja (tasks come back in default order with no error) — exactly the
|
|
22
|
+
* "free-form field selector that silently no-ops" pattern this validation
|
|
23
|
+
* closes, per the field/enum allowlist ergonomics sweep.
|
|
24
|
+
*/
|
|
25
|
+
function normalizeAndValidateSort(sort) {
|
|
26
|
+
const invalidTokens = [];
|
|
27
|
+
const normalizedTokens = sort.split(',').map((rawToken) => {
|
|
28
|
+
const token = rawToken.trim();
|
|
29
|
+
const apiField = constants_1.SORT_FIELD_ALIASES[token] ?? token;
|
|
30
|
+
if (!VALID_SORT_FIELD_SET.has(apiField)) {
|
|
31
|
+
invalidTokens.push(token);
|
|
32
|
+
}
|
|
33
|
+
return apiField;
|
|
34
|
+
});
|
|
35
|
+
return { normalized: normalizedTokens.join(','), invalidTokens };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validates filter parameters for task listing operations
|
|
39
|
+
*/
|
|
40
|
+
exports.FilterValidator = {
|
|
41
|
+
/**
|
|
42
|
+
* Validates and processes filter string or filter ID
|
|
43
|
+
*/
|
|
44
|
+
async validateAndParseFilter(args, storage) {
|
|
45
|
+
let filterExpression = null;
|
|
46
|
+
let filterString;
|
|
47
|
+
const validationWarnings = [];
|
|
48
|
+
try {
|
|
49
|
+
// Resolve the user-supplied filter - either a direct filter string or a
|
|
50
|
+
// saved filter referenced by id.
|
|
51
|
+
let userFilter;
|
|
52
|
+
if (args.filterId) {
|
|
53
|
+
const savedFilter = await storage.get(args.filterId);
|
|
54
|
+
if (!savedFilter) {
|
|
55
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Filter with id ${args.filterId} not found`);
|
|
56
|
+
}
|
|
57
|
+
userFilter = savedFilter.filter;
|
|
58
|
+
}
|
|
59
|
+
else if (args.filter !== undefined) {
|
|
60
|
+
userFilter = args.filter;
|
|
61
|
+
}
|
|
62
|
+
// Parse the user-supplied filter into an expression.
|
|
63
|
+
if (userFilter) {
|
|
64
|
+
const parseResult = (0, filters_1.parseFilterString)(userFilter);
|
|
65
|
+
if (parseResult.error) {
|
|
66
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Invalid filter syntax: ${parseResult.error.message}${parseResult.error.context ? `\n${parseResult.error.context}` : ''}`);
|
|
67
|
+
}
|
|
68
|
+
filterExpression = parseResult.expression;
|
|
69
|
+
}
|
|
70
|
+
// Fold the `done` flag into the filter expression so it is applied
|
|
71
|
+
// server-side (before pagination) rather than trimming an already
|
|
72
|
+
// paginated page. Without this, `done=false` scattered open tasks
|
|
73
|
+
// unpredictably across raw pages.
|
|
74
|
+
if (args.done !== undefined) {
|
|
75
|
+
const doneGroup = {
|
|
76
|
+
conditions: [{ field: 'done', operator: '=', value: args.done }],
|
|
77
|
+
operator: '&&',
|
|
78
|
+
};
|
|
79
|
+
if (!filterExpression) {
|
|
80
|
+
filterExpression = { groups: [doneGroup] };
|
|
81
|
+
}
|
|
82
|
+
else if (filterExpression.groups.length === 1) {
|
|
83
|
+
// Single user group: AND `done` on as a second group. The user's
|
|
84
|
+
// group is parenthesised when serialised, so its own &&/|| operator
|
|
85
|
+
// is preserved.
|
|
86
|
+
filterExpression = {
|
|
87
|
+
groups: [...filterExpression.groups, doneGroup],
|
|
88
|
+
operator: '&&',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Multi-group user filter: left untouched - appending a group here
|
|
92
|
+
// could change group-join semantics. `done` is still enforced by
|
|
93
|
+
// FilterExecutor.applyPostProcessingFilters in that case.
|
|
94
|
+
}
|
|
95
|
+
// Serialise the final expression for Vikunja's server-side `filter`
|
|
96
|
+
// query param. When `done` was not folded in, keep the user's original
|
|
97
|
+
// string verbatim.
|
|
98
|
+
if (filterExpression) {
|
|
99
|
+
filterString =
|
|
100
|
+
args.done === undefined ? userFilter : (0, filters_1.expressionToString)(filterExpression);
|
|
101
|
+
}
|
|
102
|
+
if (filterString) {
|
|
103
|
+
// Log that we're preparing to attempt hybrid filtering
|
|
104
|
+
logger_1.logger.info('Preparing hybrid filtering (server-side attempt + client-side fallback)', {
|
|
105
|
+
filter: filterString,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return { filterExpression, filterString, validationWarnings };
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (error instanceof types_1.MCPError) {
|
|
112
|
+
throw error;
|
|
113
|
+
}
|
|
114
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Filter validation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
/**
|
|
118
|
+
* Validates pagination and memory constraints
|
|
119
|
+
*/
|
|
120
|
+
validateMemoryConstraints(args, requestedPageSize) {
|
|
121
|
+
const warnings = [];
|
|
122
|
+
// Validate pagination limits for memory protection with enhanced analysis
|
|
123
|
+
const taskCountValidation = (0, memory_1.validateTaskCountLimit)(requestedPageSize, undefined, args.filter ? {
|
|
124
|
+
filterExpression: args.filter,
|
|
125
|
+
operationType: 'list'
|
|
126
|
+
} : undefined);
|
|
127
|
+
if (!taskCountValidation.allowed) {
|
|
128
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Task count limit exceeded. Requested: ${requestedPageSize}, Max allowed: ${taskCountValidation.maxAllowed}. ` +
|
|
129
|
+
`Estimated memory usage: ${taskCountValidation.estimatedMemoryMB}MB (risk: ${taskCountValidation.riskLevel}). ` +
|
|
130
|
+
'Reduce the perPage parameter, use pagination with smaller page sizes, or apply more specific filters.');
|
|
131
|
+
}
|
|
132
|
+
// Add warnings for large page sizes
|
|
133
|
+
if (requestedPageSize > 500) {
|
|
134
|
+
warnings.push(`Large page size (${requestedPageSize}) may impact performance. Consider using smaller pages or more specific filters.`);
|
|
135
|
+
}
|
|
136
|
+
// Include enhanced memory validation warnings
|
|
137
|
+
if (taskCountValidation.warnings.length > 0) {
|
|
138
|
+
warnings.push(...taskCountValidation.warnings);
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
isValid: true,
|
|
142
|
+
warnings,
|
|
143
|
+
maxAllowed: taskCountValidation.maxAllowed
|
|
144
|
+
};
|
|
145
|
+
},
|
|
146
|
+
/**
|
|
147
|
+
* Validates the actual loaded task count against limits
|
|
148
|
+
*/
|
|
149
|
+
validateLoadedTasks(actualTaskCount, sampleTask) {
|
|
150
|
+
const warnings = [];
|
|
151
|
+
const finalTaskCountValidation = (0, memory_1.validateTaskCountLimit)(actualTaskCount, sampleTask);
|
|
152
|
+
if (!finalTaskCountValidation.allowed) {
|
|
153
|
+
// Log warning but don't fail since tasks are already loaded
|
|
154
|
+
logger_1.logger.warn('Loaded task count exceeds recommended limits', {
|
|
155
|
+
actualCount: actualTaskCount,
|
|
156
|
+
maxRecommended: finalTaskCountValidation.maxAllowed,
|
|
157
|
+
estimatedMemoryMB: finalTaskCountValidation.estimatedMemoryMB,
|
|
158
|
+
riskLevel: finalTaskCountValidation.riskLevel
|
|
159
|
+
});
|
|
160
|
+
warnings.push(`Loaded ${actualTaskCount} tasks, which exceeds recommended limit of ${finalTaskCountValidation.maxAllowed}. ` +
|
|
161
|
+
`Estimated memory usage: ${finalTaskCountValidation.estimatedMemoryMB}MB (risk: ${finalTaskCountValidation.riskLevel}).`);
|
|
162
|
+
// For extremely large datasets, still enforce hard limits
|
|
163
|
+
if (actualTaskCount > finalTaskCountValidation.maxAllowed * 1.5) {
|
|
164
|
+
return {
|
|
165
|
+
isValid: false,
|
|
166
|
+
warnings,
|
|
167
|
+
shouldThrow: true,
|
|
168
|
+
riskLevel: finalTaskCountValidation.riskLevel,
|
|
169
|
+
estimatedMemoryMB: finalTaskCountValidation.estimatedMemoryMB
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Include warnings from enhanced validation
|
|
174
|
+
if (finalTaskCountValidation.warnings.length > 0) {
|
|
175
|
+
warnings.push(...finalTaskCountValidation.warnings);
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
isValid: true,
|
|
179
|
+
warnings,
|
|
180
|
+
shouldThrow: false,
|
|
181
|
+
riskLevel: finalTaskCountValidation.riskLevel,
|
|
182
|
+
estimatedMemoryMB: finalTaskCountValidation.estimatedMemoryMB
|
|
183
|
+
};
|
|
184
|
+
},
|
|
185
|
+
/**
|
|
186
|
+
* Validates task listing arguments
|
|
187
|
+
*/
|
|
188
|
+
validateTaskListingArgs(args) {
|
|
189
|
+
const errors = [];
|
|
190
|
+
// Validate numeric parameters
|
|
191
|
+
if (args.page !== undefined && (args.page < 1 || !Number.isInteger(args.page))) {
|
|
192
|
+
errors.push('Page number must be a positive integer');
|
|
193
|
+
}
|
|
194
|
+
if (args.perPage !== undefined && (args.perPage < 1 || !Number.isInteger(args.perPage))) {
|
|
195
|
+
errors.push('Per page count must be a positive integer');
|
|
196
|
+
}
|
|
197
|
+
if (args.projectId !== undefined && (args.projectId < 1 || !Number.isInteger(args.projectId))) {
|
|
198
|
+
errors.push('Project ID must be a positive integer');
|
|
199
|
+
}
|
|
200
|
+
// Validate boolean parameters
|
|
201
|
+
if (args.done !== undefined && typeof args.done !== 'boolean') {
|
|
202
|
+
errors.push('Done parameter must be a boolean value');
|
|
203
|
+
}
|
|
204
|
+
// Validate string parameters
|
|
205
|
+
if (args.search !== undefined && typeof args.search !== 'string') {
|
|
206
|
+
errors.push('Search parameter must be a string');
|
|
207
|
+
}
|
|
208
|
+
if (args.sort !== undefined && typeof args.sort !== 'string') {
|
|
209
|
+
errors.push('Sort parameter must be a string');
|
|
210
|
+
}
|
|
211
|
+
else if (args.sort !== undefined && args.sort.trim() !== '') {
|
|
212
|
+
const { normalized, invalidTokens } = normalizeAndValidateSort(args.sort);
|
|
213
|
+
if (invalidTokens.length > 0) {
|
|
214
|
+
errors.push(`Invalid sort field(s): ${invalidTokens.join(', ')}. Valid fields: ${constants_1.VALID_SORT_FIELDS.join(', ')} ` +
|
|
215
|
+
`(camelCase aliases also accepted: ${Object.keys(constants_1.SORT_FIELD_ALIASES).join(', ')})`);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
// Normalize in place so the corrected (snake_case) value is what
|
|
219
|
+
// actually reaches the API — validation runs before
|
|
220
|
+
// FilterExecutor.prepareQueryParameters reads args.sort.
|
|
221
|
+
args.sort = normalized;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (args.filter !== undefined && typeof args.filter !== 'string') {
|
|
225
|
+
errors.push('Filter parameter must be a string');
|
|
226
|
+
}
|
|
227
|
+
if (args.filterId !== undefined && typeof args.filterId !== 'string') {
|
|
228
|
+
errors.push('Filter ID parameter must be a string');
|
|
229
|
+
}
|
|
230
|
+
return errors;
|
|
231
|
+
},
|
|
232
|
+
/**
|
|
233
|
+
* Performs comprehensive validation of task filtering parameters
|
|
234
|
+
*/
|
|
235
|
+
async validateTaskFiltering(args, storage, _config = {}) {
|
|
236
|
+
const allWarnings = [];
|
|
237
|
+
// Validate basic arguments
|
|
238
|
+
const argValidationErrors = exports.FilterValidator.validateTaskListingArgs(args);
|
|
239
|
+
if (argValidationErrors.length > 0) {
|
|
240
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Invalid task listing arguments: ${argValidationErrors.join(', ')}`);
|
|
241
|
+
}
|
|
242
|
+
// Validate and parse filter
|
|
243
|
+
const filterValidation = await exports.FilterValidator.validateAndParseFilter(args, storage);
|
|
244
|
+
allWarnings.push(...filterValidation.validationWarnings);
|
|
245
|
+
// Validate memory constraints
|
|
246
|
+
const pageSize = args.perPage || 1000; // Default pagination
|
|
247
|
+
const memoryValidation = exports.FilterValidator.validateMemoryConstraints(args, pageSize);
|
|
248
|
+
allWarnings.push(...memoryValidation.warnings);
|
|
249
|
+
return {
|
|
250
|
+
filterExpression: filterValidation.filterExpression,
|
|
251
|
+
filterString: filterValidation.filterString,
|
|
252
|
+
validationWarnings: allWarnings,
|
|
253
|
+
memoryValidation
|
|
254
|
+
};
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=FilterValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterValidator.js","sourceRoot":"","sources":["../../../../src/tools/tasks/filtering/FilterValidator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAKH,0CAAqD;AACrD,oDAA+E;AAC/E,kDAA+D;AAC/D,kDAA+C;AAC/C,4CAAqE;AAKrE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAS,6BAAiB,CAAC,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,8BAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;QACpD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC;AACnE,CAAC;AAED;;GAEG;AACU,QAAA,eAAe,GAAG;IAC7B;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAC1B,IAAqB,EACrB,OAA0B;QAM1B,IAAI,gBAAgB,GAA4B,IAAI,CAAC;QACrD,IAAI,YAAgC,CAAC;QACrC,MAAM,kBAAkB,GAAa,EAAE,CAAC;QAExC,IAAI,CAAC;YACH,wEAAwE;YACxE,iCAAiC;YACjC,IAAI,UAA8B,CAAC;YACnC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,kBAAkB,IAAI,CAAC,QAAQ,YAAY,CAC5C,CAAC;gBACJ,CAAC;gBACD,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;YAClC,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACrC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,CAAC;YAED,qDAAqD;YACrD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,WAAW,GAAgB,IAAA,2BAAiB,EAAC,UAAU,CAAC,CAAC;gBAC/D,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;oBACtB,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,0BAA0B,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1H,CAAC;gBACJ,CAAC;gBACD,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC;YAC5C,CAAC;YAED,mEAAmE;YACnE,kEAAkE;YAClE,kEAAkE;YAClE,kCAAkC;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAgB;oBAC7B,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;oBAChE,QAAQ,EAAE,IAAI;iBACf,CAAC;gBACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,gBAAgB,GAAG,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,CAAC;qBAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAChD,iEAAiE;oBACjE,oEAAoE;oBACpE,gBAAgB;oBAChB,gBAAgB,GAAG;wBACjB,MAAM,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC;wBAC/C,QAAQ,EAAE,IAAI;qBACf,CAAC;gBACJ,CAAC;gBACD,mEAAmE;gBACnE,iEAAiE;gBACjE,0DAA0D;YAC5D,CAAC;YAED,oEAAoE;YACpE,uEAAuE;YACvE,mBAAmB;YACnB,IAAI,gBAAgB,EAAE,CAAC;gBACrB,YAAY;oBACV,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAA,4BAAkB,EAAC,gBAAgB,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,uDAAuD;gBACvD,eAAM,CAAC,IAAI,CAAC,yEAAyE,EAAE;oBACrF,MAAM,EAAE,YAAY;iBACrB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,gBAAQ,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,yBAAyB,CACvB,IAAqB,EACrB,iBAAyB;QAMzB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,0EAA0E;QAC1E,MAAM,mBAAmB,GAAG,IAAA,+BAAsB,EAChD,iBAAiB,EACjB,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACZ,gBAAgB,EAAE,IAAI,CAAC,MAAM;YAC7B,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC,CAAC,SAAS,CACd,CAAC;QAEF,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,yCAAyC,iBAAiB,kBAAkB,mBAAmB,CAAC,UAAU,IAAI;gBAC9G,2BAA2B,mBAAmB,CAAC,iBAAiB,aAAa,mBAAmB,CAAC,SAAS,KAAK;gBAC/G,uGAAuG,CACxG,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,IAAI,iBAAiB,GAAG,GAAG,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,oBAAoB,iBAAiB,kFAAkF,CAAC,CAAC;QACzI,CAAC;QAED,8CAA8C;QAC9C,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,UAAU,EAAE,mBAAmB,CAAC,UAAU;SAO3C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,eAAuB,EAAE,UAAiB;QAO5D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,wBAAwB,GAAG,IAAA,+BAAsB,EAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAErF,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;YACtC,4DAA4D;YAC5D,eAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;gBAC1D,WAAW,EAAE,eAAe;gBAC5B,cAAc,EAAE,wBAAwB,CAAC,UAAU;gBACnD,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB;gBAC7D,SAAS,EAAE,wBAAwB,CAAC,SAAS;aAC9C,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CACX,UAAU,eAAe,8CAA8C,wBAAwB,CAAC,UAAU,IAAI;gBAC9G,2BAA2B,wBAAwB,CAAC,iBAAiB,aAAa,wBAAwB,CAAC,SAAS,IAAI,CACzH,CAAC;YAEF,0DAA0D;YAC1D,IAAI,eAAe,GAAG,wBAAwB,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAChE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ;oBACR,WAAW,EAAE,IAAI;oBACjB,SAAS,EAAE,wBAAwB,CAAC,SAAS;oBAC7C,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB;iBAC9D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,IAAI,wBAAwB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,wBAAwB,CAAC,SAAS;YAC7C,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB;SAC9D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,IAAqB;QAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,8BAA8B;QAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/E,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACxF,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC9F,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QAED,6BAA6B;QAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9D,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CACT,0BAA0B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,6BAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBAClG,qCAAqC,MAAM,CAAC,IAAI,CAAC,8BAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACrF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,iEAAiE;gBACjE,oDAAoD;gBACpD,yDAAyD;gBACzD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;YACzB,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrE,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CACzB,IAAqB,EACrB,OAA0B,EAC1B,UAAsC,EAAE;QAWxC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,2BAA2B;QAC3B,MAAM,mBAAmB,GAAG,uBAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,mCAAmC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpE,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,MAAM,gBAAgB,GAAG,MAAM,uBAAe,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrF,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAEzD,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,qBAAqB;QAC5D,MAAM,gBAAgB,GAAG,uBAAe,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnF,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE/C,OAAO;YACL,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB;YACnD,YAAY,EAAE,gBAAgB,CAAC,YAAY;YAC3C,kBAAkB,EAAE,WAAW;YAC/B,gBAAgB;SACjB,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Filtering Orchestrator
|
|
3
|
+
* Main service that coordinates all filtering operations for tasks
|
|
4
|
+
*/
|
|
5
|
+
import type { TaskListingArgs, TaskFilterExecutionResult } from '../types/filters';
|
|
6
|
+
import type { FilterValidationConfig } from '../../../types/filters';
|
|
7
|
+
import type { SimpleFilterStorage } from '../../../storage';
|
|
8
|
+
import type { AuthManager } from '../../../auth/AuthManager';
|
|
9
|
+
/**
|
|
10
|
+
* Main orchestrator for task filtering operations
|
|
11
|
+
* Coordinates validation, execution, and result processing
|
|
12
|
+
*/
|
|
13
|
+
export declare const TaskFilteringOrchestrator: {
|
|
14
|
+
/**
|
|
15
|
+
* Executes the complete task filtering workflow
|
|
16
|
+
*
|
|
17
|
+
* @param args - Task listing arguments including filters
|
|
18
|
+
* @param storage - Storage interface for saved filters
|
|
19
|
+
* @param config - Optional validation configuration
|
|
20
|
+
* @param authManager - Active auth manager, required by cross-project
|
|
21
|
+
* listing's direct-REST GET /tasks strategy
|
|
22
|
+
* @returns Promise resolving to filtering result with metadata
|
|
23
|
+
*/
|
|
24
|
+
executeTaskFiltering(args: TaskListingArgs, storage: SimpleFilterStorage, config?: FilterValidationConfig, authManager?: AuthManager): Promise<TaskFilterExecutionResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Validates task filtering parameters without executing the filtering
|
|
27
|
+
* Useful for pre-validation or UI validation scenarios
|
|
28
|
+
*/
|
|
29
|
+
validateTaskFiltering(args: TaskListingArgs, storage: SimpleFilterStorage, config?: FilterValidationConfig): Promise<{
|
|
30
|
+
isValid: boolean;
|
|
31
|
+
warnings: string[];
|
|
32
|
+
errors: string[];
|
|
33
|
+
memoryValidation: {
|
|
34
|
+
isValid: boolean;
|
|
35
|
+
warnings: string[];
|
|
36
|
+
maxAllowed?: number;
|
|
37
|
+
};
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Prepares filtering context information for debugging and monitoring
|
|
41
|
+
*/
|
|
42
|
+
createFilteringContext(args: TaskListingArgs, result: TaskFilterExecutionResult): {
|
|
43
|
+
input: {
|
|
44
|
+
hasFilter: boolean;
|
|
45
|
+
hasFilterId: boolean;
|
|
46
|
+
projectId?: number;
|
|
47
|
+
page?: number;
|
|
48
|
+
perPage?: number;
|
|
49
|
+
search?: string;
|
|
50
|
+
sort?: string;
|
|
51
|
+
};
|
|
52
|
+
output: {
|
|
53
|
+
taskCount: number;
|
|
54
|
+
serverSideFilteringUsed: boolean;
|
|
55
|
+
serverSideFilteringAttempted: boolean;
|
|
56
|
+
clientSideFiltering: boolean;
|
|
57
|
+
filteringNote: string;
|
|
58
|
+
memoryInfo?: {
|
|
59
|
+
actualCount: number;
|
|
60
|
+
maxAllowed: number;
|
|
61
|
+
estimatedMemoryMB: number;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
performance: {
|
|
65
|
+
timestamp: string;
|
|
66
|
+
processingTimeMs?: number;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Analyzes filtering performance and provides recommendations
|
|
71
|
+
*/
|
|
72
|
+
analyzeFilteringPerformance(args: TaskListingArgs, result: TaskFilterExecutionResult): {
|
|
73
|
+
isOptimal: boolean;
|
|
74
|
+
recommendations: string[];
|
|
75
|
+
issues: string[];
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=TaskFilteringOrchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskFilteringOrchestrator.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/filtering/TaskFilteringOrchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAKrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,yBAAyB;IACpC;;;;;;;;;OASG;+BAEK,eAAe,WACZ,mBAAmB,WACpB,sBAAsB,gBAChB,WAAW,GACxB,OAAO,CAAC,yBAAyB,CAAC;IA2ErC;;;OAGG;gCAEK,eAAe,WACZ,mBAAmB,WACpB,sBAAsB,GAC7B,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,gBAAgB,EAAE;YAChB,OAAO,EAAE,OAAO,CAAC;YACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnB,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;IA8BF;;OAEG;iCAEK,eAAe,UACb,yBAAyB,GAChC;QACD,KAAK,EAAE;YACL,SAAS,EAAE,OAAO,CAAC;YACnB,WAAW,EAAE,OAAO,CAAC;YACrB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF,MAAM,EAAE;YACN,SAAS,EAAE,MAAM,CAAC;YAClB,uBAAuB,EAAE,OAAO,CAAC;YACjC,4BAA4B,EAAE,OAAO,CAAC;YACtC,mBAAmB,EAAE,OAAO,CAAC;YAC7B,aAAa,EAAE,MAAM,CAAC;YACtB,UAAU,CAAC,EAAE;gBACX,WAAW,EAAE,MAAM,CAAC;gBACpB,UAAU,EAAE,MAAM,CAAC;gBACnB,iBAAiB,EAAE,MAAM,CAAC;aAC3B,CAAC;SACH,CAAC;QACF,WAAW,EAAE;YACX,SAAS,EAAE,MAAM,CAAC;YAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;SAC3B,CAAC;KACH;IAmED;;OAEG;sCAEK,eAAe,UACb,yBAAyB,GAChC;QACD,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;CAyCF,CAAC"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Task Filtering Orchestrator
|
|
4
|
+
* Main service that coordinates all filtering operations for tasks
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TaskFilteringOrchestrator = void 0;
|
|
8
|
+
const FilterValidator_1 = require("./FilterValidator");
|
|
9
|
+
const FilterExecutor_1 = require("./FilterExecutor");
|
|
10
|
+
const types_1 = require("../../../types");
|
|
11
|
+
const logger_1 = require("../../../utils/logger");
|
|
12
|
+
/**
|
|
13
|
+
* Main orchestrator for task filtering operations
|
|
14
|
+
* Coordinates validation, execution, and result processing
|
|
15
|
+
*/
|
|
16
|
+
exports.TaskFilteringOrchestrator = {
|
|
17
|
+
/**
|
|
18
|
+
* Executes the complete task filtering workflow
|
|
19
|
+
*
|
|
20
|
+
* @param args - Task listing arguments including filters
|
|
21
|
+
* @param storage - Storage interface for saved filters
|
|
22
|
+
* @param config - Optional validation configuration
|
|
23
|
+
* @param authManager - Active auth manager, required by cross-project
|
|
24
|
+
* listing's direct-REST GET /tasks strategy
|
|
25
|
+
* @returns Promise resolving to filtering result with metadata
|
|
26
|
+
*/
|
|
27
|
+
async executeTaskFiltering(args, storage, config = {}, authManager) {
|
|
28
|
+
try {
|
|
29
|
+
logger_1.logger.debug('Starting task filtering orchestration', {
|
|
30
|
+
hasFilter: !!args.filter,
|
|
31
|
+
hasFilterId: !!args.filterId,
|
|
32
|
+
projectId: args.projectId,
|
|
33
|
+
page: args.page,
|
|
34
|
+
perPage: args.perPage
|
|
35
|
+
});
|
|
36
|
+
// Step 1: Validate all inputs and parse filters
|
|
37
|
+
const validationResult = await FilterValidator_1.FilterValidator.validateTaskFiltering(args, storage, config);
|
|
38
|
+
// Log any validation warnings
|
|
39
|
+
if (validationResult.validationWarnings.length > 0) {
|
|
40
|
+
logger_1.logger.warn('Task filtering validation warnings', {
|
|
41
|
+
warnings: validationResult.validationWarnings
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Step 2: Prepare query parameters
|
|
45
|
+
const params = FilterExecutor_1.FilterExecutor.prepareQueryParameters(args);
|
|
46
|
+
// Step 3: Execute the filtering
|
|
47
|
+
const filteringResult = await FilterExecutor_1.FilterExecutor.executeFiltering(args, validationResult.filterExpression, validationResult.filterString, params, storage, authManager);
|
|
48
|
+
// Step 4: Post-process and validate results
|
|
49
|
+
const finalValidation = FilterValidator_1.FilterValidator.validateLoadedTasks(filteringResult.tasks.length);
|
|
50
|
+
if (finalValidation.warnings.length > 0) {
|
|
51
|
+
logger_1.logger.warn('Task filtering result warnings', {
|
|
52
|
+
warnings: finalValidation.warnings
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (finalValidation.shouldThrow) {
|
|
56
|
+
throw new types_1.MCPError(types_1.ErrorCode.INTERNAL_ERROR, `Task filtering result validation failed: ${finalValidation.warnings.join(', ')}`);
|
|
57
|
+
}
|
|
58
|
+
logger_1.logger.debug('Task filtering orchestration completed', {
|
|
59
|
+
taskCount: filteringResult.tasks.length,
|
|
60
|
+
serverSideFilteringUsed: filteringResult.metadata.serverSideFilteringUsed,
|
|
61
|
+
clientSideFiltering: filteringResult.metadata.clientSideFiltering
|
|
62
|
+
});
|
|
63
|
+
return filteringResult;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error instanceof types_1.MCPError) {
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
logger_1.logger.error('Task filtering orchestration failed', {
|
|
70
|
+
error: error instanceof Error ? error.message : String(error),
|
|
71
|
+
args: {
|
|
72
|
+
hasFilter: !!args.filter,
|
|
73
|
+
hasFilterId: !!args.filterId,
|
|
74
|
+
projectId: args.projectId
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// Re-throw original error to be handled by main function
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Validates task filtering parameters without executing the filtering
|
|
83
|
+
* Useful for pre-validation or UI validation scenarios
|
|
84
|
+
*/
|
|
85
|
+
async validateTaskFiltering(args, storage, config = {}) {
|
|
86
|
+
try {
|
|
87
|
+
const validationResult = await FilterValidator_1.FilterValidator.validateTaskFiltering(args, storage, config);
|
|
88
|
+
return {
|
|
89
|
+
isValid: true,
|
|
90
|
+
warnings: validationResult.validationWarnings,
|
|
91
|
+
errors: [],
|
|
92
|
+
memoryValidation: validationResult.memoryValidation
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
if (error instanceof types_1.MCPError) {
|
|
97
|
+
return {
|
|
98
|
+
isValid: false,
|
|
99
|
+
warnings: [],
|
|
100
|
+
errors: [error.message],
|
|
101
|
+
memoryValidation: { isValid: false, warnings: [] }
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
isValid: false,
|
|
106
|
+
warnings: [],
|
|
107
|
+
errors: [`Validation failed: ${error instanceof Error ? error.message : String(error)}`],
|
|
108
|
+
memoryValidation: { isValid: false, warnings: [] }
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
/**
|
|
113
|
+
* Prepares filtering context information for debugging and monitoring
|
|
114
|
+
*/
|
|
115
|
+
createFilteringContext(args, result) {
|
|
116
|
+
// Build input object, only including defined properties to satisfy exactOptionalPropertyTypes
|
|
117
|
+
const input = {
|
|
118
|
+
hasFilter: !!args.filter,
|
|
119
|
+
hasFilterId: !!args.filterId,
|
|
120
|
+
};
|
|
121
|
+
if (args.projectId !== undefined) {
|
|
122
|
+
input.projectId = args.projectId;
|
|
123
|
+
}
|
|
124
|
+
if (args.page !== undefined) {
|
|
125
|
+
input.page = args.page;
|
|
126
|
+
}
|
|
127
|
+
if (args.perPage !== undefined) {
|
|
128
|
+
input.perPage = args.perPage;
|
|
129
|
+
}
|
|
130
|
+
if (args.search !== undefined) {
|
|
131
|
+
input.search = args.search;
|
|
132
|
+
}
|
|
133
|
+
if (args.sort !== undefined) {
|
|
134
|
+
input.sort = args.sort;
|
|
135
|
+
}
|
|
136
|
+
const output = {
|
|
137
|
+
taskCount: result.tasks?.length || 0,
|
|
138
|
+
serverSideFilteringUsed: result.metadata?.serverSideFilteringUsed || false,
|
|
139
|
+
serverSideFilteringAttempted: result.metadata?.serverSideFilteringAttempted || false,
|
|
140
|
+
clientSideFiltering: result.metadata?.clientSideFiltering || false,
|
|
141
|
+
filteringNote: result.metadata?.filteringNote || '',
|
|
142
|
+
};
|
|
143
|
+
if (result.memoryInfo !== undefined) {
|
|
144
|
+
output.memoryInfo = result.memoryInfo;
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
input,
|
|
148
|
+
output,
|
|
149
|
+
performance: {
|
|
150
|
+
timestamp: new Date().toISOString()
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
},
|
|
154
|
+
/**
|
|
155
|
+
* Analyzes filtering performance and provides recommendations
|
|
156
|
+
*/
|
|
157
|
+
analyzeFilteringPerformance(args, result) {
|
|
158
|
+
const recommendations = [];
|
|
159
|
+
const issues = [];
|
|
160
|
+
let isOptimal = true;
|
|
161
|
+
// Check for server-side filtering usage
|
|
162
|
+
if (args.filter && !result.metadata?.serverSideFilteringUsed) {
|
|
163
|
+
if (result.metadata?.serverSideFilteringAttempted) {
|
|
164
|
+
issues.push('Server-side filtering was attempted but failed, falling back to client-side');
|
|
165
|
+
recommendations.push('Consider simplifying the filter syntax for better server-side compatibility');
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
recommendations.push('Consider enabling server-side filtering for better performance with large datasets');
|
|
169
|
+
}
|
|
170
|
+
isOptimal = false;
|
|
171
|
+
}
|
|
172
|
+
// Check page size efficiency
|
|
173
|
+
if (args.perPage && args.perPage > 500) {
|
|
174
|
+
issues.push('Large page size may impact performance');
|
|
175
|
+
recommendations.push('Consider using smaller page sizes (<= 500) for better performance');
|
|
176
|
+
isOptimal = false;
|
|
177
|
+
}
|
|
178
|
+
// Check memory usage
|
|
179
|
+
if (result.memoryInfo && result.memoryInfo.actualCount > result.memoryInfo.maxAllowed) {
|
|
180
|
+
issues.push('Task count exceeds recommended memory limits');
|
|
181
|
+
recommendations.push('Apply more specific filters or use pagination to reduce memory usage');
|
|
182
|
+
isOptimal = false;
|
|
183
|
+
}
|
|
184
|
+
// Check search efficiency
|
|
185
|
+
if (args.search && args.search.length < 3) {
|
|
186
|
+
recommendations.push('Search terms should be at least 3 characters for better results');
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
isOptimal,
|
|
190
|
+
recommendations,
|
|
191
|
+
issues
|
|
192
|
+
};
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=TaskFilteringOrchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskFilteringOrchestrator.js","sourceRoot":"","sources":["../../../../src/tools/tasks/filtering/TaskFilteringOrchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter evaluation functions for tasks
|
|
3
|
+
*/
|
|
4
|
+
import type { components } from '../../../types/generated/vikunja-openapi';
|
|
5
|
+
import type { FilterCondition, FilterGroup, FilterExpression } from '../../../types/filters';
|
|
6
|
+
/** `models.Task` per the OpenAPI spec — the task shape filters evaluate against. */
|
|
7
|
+
type Task = components['schemas']['models.Task'];
|
|
8
|
+
/**
|
|
9
|
+
* Evaluates a filter condition against a task
|
|
10
|
+
*/
|
|
11
|
+
export declare function evaluateCondition(task: Task, condition: FilterCondition): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Evaluates comparison operators
|
|
14
|
+
*/
|
|
15
|
+
export declare function evaluateComparison(actual: unknown, operator: string, expected: unknown): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Evaluates date comparisons (supports relative dates like "now+7d")
|
|
18
|
+
*/
|
|
19
|
+
export declare function evaluateDateComparison(actual: string, operator: string, expected: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Parses relative date strings (e.g., "now+7d", "now-1w")
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseRelativeDate(dateStr: string): Date | null;
|
|
24
|
+
/**
|
|
25
|
+
* Evaluates string comparisons
|
|
26
|
+
*/
|
|
27
|
+
export declare function evaluateStringComparison(actual: string, operator: string, expected: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Evaluates array comparisons (for assignees and labels)
|
|
30
|
+
*/
|
|
31
|
+
export declare function evaluateArrayComparison(actual: number[], operator: string, expected: number[]): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Evaluates a filter group against a task
|
|
34
|
+
*/
|
|
35
|
+
export declare function evaluateGroup(task: Task, group: FilterGroup): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Applies a filter expression to a list of tasks
|
|
38
|
+
*/
|
|
39
|
+
export declare function applyFilter(tasks: Task[], expression: FilterExpression): Task[];
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=evaluators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluators.d.ts","sourceRoot":"","sources":["../../../../src/tools/tasks/filtering/evaluators.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE7F,oFAAoF;AACpF,KAAK,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;AAEjD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CA4EjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAiBhG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAuBlG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CA8C9D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAYpG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAWvG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAMrE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI,EAAE,CAU/E"}
|