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,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hybrid filtering strategy
|
|
4
|
+
*
|
|
5
|
+
* This strategy attempts server-side filtering first, and falls back to
|
|
6
|
+
* client-side filtering if server-side fails. This provides the best of
|
|
7
|
+
* both worlds: efficiency when possible, reliability always.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.HybridFilteringStrategy = void 0;
|
|
11
|
+
const ServerSideFilteringStrategy_1 = require("./ServerSideFilteringStrategy");
|
|
12
|
+
const ClientSideFilteringStrategy_1 = require("./ClientSideFilteringStrategy");
|
|
13
|
+
const logger_1 = require("../logger");
|
|
14
|
+
class HybridFilteringStrategy {
|
|
15
|
+
serverSideStrategy = new ServerSideFilteringStrategy_1.ServerSideFilteringStrategy();
|
|
16
|
+
clientSideStrategy = new ClientSideFilteringStrategy_1.ClientSideFilteringStrategy();
|
|
17
|
+
async execute(params) {
|
|
18
|
+
const { filterString } = params;
|
|
19
|
+
if (!filterString) {
|
|
20
|
+
// No filtering needed, use client-side strategy (which just loads tasks)
|
|
21
|
+
return this.clientSideStrategy.execute(params);
|
|
22
|
+
}
|
|
23
|
+
// Attempt server-side filtering first
|
|
24
|
+
try {
|
|
25
|
+
logger_1.logger.info('Hybrid filtering: attempting server-side filtering first', {
|
|
26
|
+
filter: filterString
|
|
27
|
+
});
|
|
28
|
+
const result = await this.serverSideStrategy.execute(params);
|
|
29
|
+
logger_1.logger.info('Hybrid filtering: server-side filtering succeeded', {
|
|
30
|
+
taskCount: result.tasks.length,
|
|
31
|
+
filter: filterString
|
|
32
|
+
});
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
// Server-side filtering failed, fall back to client-side
|
|
37
|
+
logger_1.logger.warn('Hybrid filtering: server-side filtering failed, falling back to client-side', {
|
|
38
|
+
error: error instanceof Error ? error.message : String(error),
|
|
39
|
+
filter: filterString
|
|
40
|
+
});
|
|
41
|
+
const result = await this.clientSideStrategy.execute(params);
|
|
42
|
+
// Update metadata to reflect that server-side was attempted
|
|
43
|
+
return {
|
|
44
|
+
...result,
|
|
45
|
+
metadata: {
|
|
46
|
+
...result.metadata,
|
|
47
|
+
serverSideFilteringAttempted: true,
|
|
48
|
+
filteringNote: 'Server-side filtering failed, client-side filtering applied as fallback'
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.HybridFilteringStrategy = HybridFilteringStrategy;
|
|
55
|
+
//# sourceMappingURL=HybridFilteringStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HybridFilteringStrategy.js","sourceRoot":"","sources":["../../../src/utils/filtering/HybridFilteringStrategy.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAIH,+EAA4E;AAC5E,+EAA4E;AAC5E,sCAAmC;AAEnC,MAAa,uBAAuB;IAC1B,kBAAkB,GAAG,IAAI,yDAA2B,EAAE,CAAC;IACvD,kBAAkB,GAAG,IAAI,yDAA2B,EAAE,CAAC;IAE/D,KAAK,CAAC,OAAO,CAAC,MAAuB;QACnC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAEhC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,yEAAyE;YACzE,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,sCAAsC;QACtC,IAAI,CAAC;YACH,eAAM,CAAC,IAAI,CAAC,0DAA0D,EAAE;gBACtE,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE7D,eAAM,CAAC,IAAI,CAAC,mDAAmD,EAAE;gBAC/D,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;gBAC9B,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAEhB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yDAAyD;YACzD,eAAM,CAAC,IAAI,CAAC,6EAA6E,EAAE;gBACzF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE7D,4DAA4D;YAC5D,OAAO;gBACL,GAAG,MAAM;gBACT,QAAQ,EAAE;oBACR,GAAG,MAAM,CAAC,QAAQ;oBAClB,4BAA4B,EAAE,IAAI;oBAClC,aAAa,EAAE,yEAAyE;iBACzF;aACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA/CD,0DA+CC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REST cross-project filtering strategy
|
|
3
|
+
*
|
|
4
|
+
* Vikunja documents a single-call `GET /tasks` endpoint for listing tasks
|
|
5
|
+
* across every project the user can access, with `page`, `per_page`, `s`,
|
|
6
|
+
* `sort_by`, `order_by`, `filter`, `filter_timezone`, `filter_include_nulls`
|
|
7
|
+
* and `expand` query params (see docs/vikunja-openapi.json). Neither
|
|
8
|
+
* the legacy client's `getAllTasks` (which calls the non-existent `GET
|
|
9
|
+
* /tasks/all`, confirmed to 400 "Invalid model provided" on real servers —
|
|
10
|
+
* see `ClientSideFilteringStrategy`) nor any other code path in this
|
|
11
|
+
* project ever called the real endpoint.
|
|
12
|
+
*
|
|
13
|
+
* This strategy calls `GET /tasks` directly via `vikunjaRestRequest` and is
|
|
14
|
+
* the PRIMARY strategy for cross-project ("all projects" or no `projectId`)
|
|
15
|
+
* listing — one call instead of an N+1 per-project aggregation. If the
|
|
16
|
+
* direct call fails for any reason (older server without the endpoint, the
|
|
17
|
+
* circuit breaker open, a transient network error surviving retries, etc.)
|
|
18
|
+
* it falls back to the existing per-project aggregation
|
|
19
|
+
* (`ClientSideFilteringStrategy`, which itself applies `filterExpression`
|
|
20
|
+
* client-side), kept as the documented fallback per
|
|
21
|
+
* docs/ENDPOINT-PLAYBOOK.md's hybrid pattern — the fallback matters if some
|
|
22
|
+
* server versions reject `GET /tasks`.
|
|
23
|
+
*
|
|
24
|
+
* Single-project listing is untouched by this strategy: it is only selected
|
|
25
|
+
* by `FilteringContext` when the listing is cross-project.
|
|
26
|
+
*/
|
|
27
|
+
import type { TaskFilteringStrategy } from './TaskFilteringStrategy';
|
|
28
|
+
import type { FilteringArgs, FilteringParams, FilteringResult, TaskListApiParams } from './types';
|
|
29
|
+
/**
|
|
30
|
+
* Builds the `GET /tasks` query string from the shared API params plus the
|
|
31
|
+
* task-list-only extras (`order_by`, `filter_timezone`,
|
|
32
|
+
* `filter_include_nulls`, `expand`) — single-project listing
|
|
33
|
+
* (`ClientSideFilteringStrategy`/`ServerSideFilteringStrategy`) does not
|
|
34
|
+
* honor these, since they were never part of the legacy client's `GetTasksParams`
|
|
35
|
+
* shape that the pre-migration single-project call sites used (see
|
|
36
|
+
* docs/ENDPOINT-PLAYBOOK.md's direct-REST rule).
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildTasksListQuery(apiParams: TaskListApiParams, filterString: string | undefined, args: FilteringArgs): string;
|
|
39
|
+
export declare class RestCrossProjectFilteringStrategy implements TaskFilteringStrategy {
|
|
40
|
+
execute(params: FilteringParams): Promise<FilteringResult>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=RestCrossProjectFilteringStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RestCrossProjectFilteringStrategy.d.ts","sourceRoot":"","sources":["../../../src/utils/filtering/RestCrossProjectFilteringStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAe,MAAM,SAAS,CAAC;AAM/G;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,iBAAiB,EAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,IAAI,EAAE,aAAa,GAClB,MAAM,CAkBR;AAED,qBAAa,iCAAkC,YAAW,qBAAqB;IACvE,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;CA6DjE"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* REST cross-project filtering strategy
|
|
4
|
+
*
|
|
5
|
+
* Vikunja documents a single-call `GET /tasks` endpoint for listing tasks
|
|
6
|
+
* across every project the user can access, with `page`, `per_page`, `s`,
|
|
7
|
+
* `sort_by`, `order_by`, `filter`, `filter_timezone`, `filter_include_nulls`
|
|
8
|
+
* and `expand` query params (see docs/vikunja-openapi.json). Neither
|
|
9
|
+
* the legacy client's `getAllTasks` (which calls the non-existent `GET
|
|
10
|
+
* /tasks/all`, confirmed to 400 "Invalid model provided" on real servers —
|
|
11
|
+
* see `ClientSideFilteringStrategy`) nor any other code path in this
|
|
12
|
+
* project ever called the real endpoint.
|
|
13
|
+
*
|
|
14
|
+
* This strategy calls `GET /tasks` directly via `vikunjaRestRequest` and is
|
|
15
|
+
* the PRIMARY strategy for cross-project ("all projects" or no `projectId`)
|
|
16
|
+
* listing — one call instead of an N+1 per-project aggregation. If the
|
|
17
|
+
* direct call fails for any reason (older server without the endpoint, the
|
|
18
|
+
* circuit breaker open, a transient network error surviving retries, etc.)
|
|
19
|
+
* it falls back to the existing per-project aggregation
|
|
20
|
+
* (`ClientSideFilteringStrategy`, which itself applies `filterExpression`
|
|
21
|
+
* client-side), kept as the documented fallback per
|
|
22
|
+
* docs/ENDPOINT-PLAYBOOK.md's hybrid pattern — the fallback matters if some
|
|
23
|
+
* server versions reject `GET /tasks`.
|
|
24
|
+
*
|
|
25
|
+
* Single-project listing is untouched by this strategy: it is only selected
|
|
26
|
+
* by `FilteringContext` when the listing is cross-project.
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.RestCrossProjectFilteringStrategy = void 0;
|
|
30
|
+
exports.buildTasksListQuery = buildTasksListQuery;
|
|
31
|
+
const ClientSideFilteringStrategy_1 = require("./ClientSideFilteringStrategy");
|
|
32
|
+
const vikunja_rest_1 = require("../vikunja-rest");
|
|
33
|
+
const types_1 = require("../../types");
|
|
34
|
+
const logger_1 = require("../logger");
|
|
35
|
+
/**
|
|
36
|
+
* Builds the `GET /tasks` query string from the shared API params plus the
|
|
37
|
+
* task-list-only extras (`order_by`, `filter_timezone`,
|
|
38
|
+
* `filter_include_nulls`, `expand`) — single-project listing
|
|
39
|
+
* (`ClientSideFilteringStrategy`/`ServerSideFilteringStrategy`) does not
|
|
40
|
+
* honor these, since they were never part of the legacy client's `GetTasksParams`
|
|
41
|
+
* shape that the pre-migration single-project call sites used (see
|
|
42
|
+
* docs/ENDPOINT-PLAYBOOK.md's direct-REST rule).
|
|
43
|
+
*/
|
|
44
|
+
function buildTasksListQuery(apiParams, filterString, args) {
|
|
45
|
+
const query = new URLSearchParams();
|
|
46
|
+
if (apiParams.page !== undefined)
|
|
47
|
+
query.set('page', String(apiParams.page));
|
|
48
|
+
if (apiParams.per_page !== undefined)
|
|
49
|
+
query.set('per_page', String(apiParams.per_page));
|
|
50
|
+
if (apiParams.s !== undefined)
|
|
51
|
+
query.set('s', String(apiParams.s));
|
|
52
|
+
if (apiParams.sort_by !== undefined)
|
|
53
|
+
query.set('sort_by', String(apiParams.sort_by));
|
|
54
|
+
if (filterString)
|
|
55
|
+
query.set('filter', filterString);
|
|
56
|
+
if (args.orderBy)
|
|
57
|
+
query.set('order_by', args.orderBy);
|
|
58
|
+
if (args.filterTimezone)
|
|
59
|
+
query.set('filter_timezone', args.filterTimezone);
|
|
60
|
+
if (args.filterIncludeNulls !== undefined) {
|
|
61
|
+
query.set('filter_include_nulls', args.filterIncludeNulls ? 'true' : 'false');
|
|
62
|
+
}
|
|
63
|
+
if (args.expand && args.expand.length > 0) {
|
|
64
|
+
for (const value of args.expand) {
|
|
65
|
+
query.append('expand', value);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return query.toString();
|
|
69
|
+
}
|
|
70
|
+
class RestCrossProjectFilteringStrategy {
|
|
71
|
+
async execute(params) {
|
|
72
|
+
const { authManager, filterString, args, params: apiParams } = params;
|
|
73
|
+
if (!authManager) {
|
|
74
|
+
// Programmer error: FilteringContext must only select this strategy
|
|
75
|
+
// when an authManager was threaded through from the tool handler.
|
|
76
|
+
throw new types_1.MCPError(types_1.ErrorCode.INTERNAL_ERROR, 'RestCrossProjectFilteringStrategy requires an authManager');
|
|
77
|
+
}
|
|
78
|
+
const query = buildTasksListQuery(apiParams, filterString, args);
|
|
79
|
+
const path = `/tasks${query ? `?${query}` : ''}`;
|
|
80
|
+
try {
|
|
81
|
+
logger_1.logger.info('Attempting cross-project task listing via direct REST GET /tasks', {
|
|
82
|
+
filter: filterString,
|
|
83
|
+
path,
|
|
84
|
+
});
|
|
85
|
+
const tasks = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', path);
|
|
86
|
+
const safeTasks = Array.isArray(tasks) ? tasks : [];
|
|
87
|
+
logger_1.logger.info('Direct REST GET /tasks succeeded for cross-project listing', {
|
|
88
|
+
taskCount: safeTasks.length,
|
|
89
|
+
});
|
|
90
|
+
return {
|
|
91
|
+
tasks: safeTasks,
|
|
92
|
+
metadata: {
|
|
93
|
+
serverSideFilteringUsed: Boolean(filterString),
|
|
94
|
+
serverSideFilteringAttempted: true,
|
|
95
|
+
clientSideFiltering: false,
|
|
96
|
+
filteringNote: filterString
|
|
97
|
+
? 'Server-side filtering used via direct REST GET /tasks'
|
|
98
|
+
: 'Cross-project listing via direct REST GET /tasks (single call, no per-project aggregation)',
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
logger_1.logger.warn('Direct REST GET /tasks failed for cross-project listing, falling back to per-project aggregation', {
|
|
104
|
+
error: error instanceof Error ? error.message : String(error),
|
|
105
|
+
filter: filterString,
|
|
106
|
+
});
|
|
107
|
+
const fallbackResult = await new ClientSideFilteringStrategy_1.ClientSideFilteringStrategy().execute(params);
|
|
108
|
+
return {
|
|
109
|
+
...fallbackResult,
|
|
110
|
+
metadata: {
|
|
111
|
+
...fallbackResult.metadata,
|
|
112
|
+
serverSideFilteringAttempted: true,
|
|
113
|
+
filteringNote: 'Direct REST GET /tasks failed; used per-project aggregation fallback',
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.RestCrossProjectFilteringStrategy = RestCrossProjectFilteringStrategy;
|
|
120
|
+
//# sourceMappingURL=RestCrossProjectFilteringStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RestCrossProjectFilteringStrategy.js","sourceRoot":"","sources":["../../../src/utils/filtering/RestCrossProjectFilteringStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side filtering strategy
|
|
3
|
+
*
|
|
4
|
+
* This strategy attempts to use Vikunja's server-side filtering capabilities
|
|
5
|
+
* by passing filter parameters directly to the API. This is the most efficient
|
|
6
|
+
* approach when the server supports advanced filtering.
|
|
7
|
+
*/
|
|
8
|
+
import type { TaskFilteringStrategy } from './TaskFilteringStrategy';
|
|
9
|
+
import type { FilteringParams, FilteringResult } from './types';
|
|
10
|
+
export declare class ServerSideFilteringStrategy implements TaskFilteringStrategy {
|
|
11
|
+
execute(params: FilteringParams): Promise<FilteringResult>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ServerSideFilteringStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerSideFilteringStrategy.d.ts","sourceRoot":"","sources":["../../../src/utils/filtering/ServerSideFilteringStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAe,MAAM,SAAS,CAAC;AAO7E,qBAAa,2BAA4B,YAAW,qBAAqB;IACjE,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;CAkFjE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Server-side filtering strategy
|
|
4
|
+
*
|
|
5
|
+
* This strategy attempts to use Vikunja's server-side filtering capabilities
|
|
6
|
+
* by passing filter parameters directly to the API. This is the most efficient
|
|
7
|
+
* approach when the server supports advanced filtering.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.ServerSideFilteringStrategy = void 0;
|
|
11
|
+
const vikunja_rest_1 = require("../vikunja-rest");
|
|
12
|
+
const validation_1 = require("../../tools/tasks/validation");
|
|
13
|
+
const logger_1 = require("../logger");
|
|
14
|
+
const types_1 = require("../../types");
|
|
15
|
+
const RestCrossProjectFilteringStrategy_1 = require("./RestCrossProjectFilteringStrategy");
|
|
16
|
+
class ServerSideFilteringStrategy {
|
|
17
|
+
async execute(params) {
|
|
18
|
+
const { args, filterString, params: apiParams, authManager } = params;
|
|
19
|
+
if (!filterString) {
|
|
20
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Server-side filtering requires a filter string');
|
|
21
|
+
}
|
|
22
|
+
if (!authManager) {
|
|
23
|
+
// Programmer error: FilteringContext must only select this strategy
|
|
24
|
+
// (via HybridFilteringStrategy) when an authManager was threaded
|
|
25
|
+
// through from the tool handler.
|
|
26
|
+
throw new types_1.MCPError(types_1.ErrorCode.INTERNAL_ERROR, 'ServerSideFilteringStrategy requires an authManager');
|
|
27
|
+
}
|
|
28
|
+
const query = (0, RestCrossProjectFilteringStrategy_1.buildTasksListQuery)(apiParams, filterString, {});
|
|
29
|
+
const singleProject = args.projectId !== undefined && !args.allProjects;
|
|
30
|
+
logger_1.logger.info('Attempting server-side filtering', {
|
|
31
|
+
filter: filterString,
|
|
32
|
+
endpoint: singleProject ? 'getProjectTasks' : 'getAllTasks'
|
|
33
|
+
});
|
|
34
|
+
let tasks;
|
|
35
|
+
try {
|
|
36
|
+
if (singleProject && args.projectId !== undefined) {
|
|
37
|
+
// Validate project ID
|
|
38
|
+
(0, validation_1.validateId)(args.projectId, 'projectId');
|
|
39
|
+
// Get tasks for specific project with server-side filter. Calls the
|
|
40
|
+
// same `GET /projects/{id}/tasks` path the legacy client's
|
|
41
|
+
// `getProjectTasks` used pre-migration — a literal call-site
|
|
42
|
+
// migration, not an endpoint redesign (see
|
|
43
|
+
// ClientSideFilteringStrategy's `fetchProjectTasks` doc comment for
|
|
44
|
+
// why the spec's `get?: never` at this path doesn't block reusing it
|
|
45
|
+
// here).
|
|
46
|
+
const path = `/projects/${args.projectId}/tasks${query ? `?${query}` : ''}`;
|
|
47
|
+
tasks = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', path);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// Get all tasks across all projects with server-side filter. Calls
|
|
51
|
+
// the same (non-existent, confirmed 400 "Invalid model provided" on
|
|
52
|
+
// real servers) `GET /tasks/all` path the legacy client's `getAllTasks`
|
|
53
|
+
// used pre-migration. This branch is unreachable in production —
|
|
54
|
+
// `FilteringContext` always routes cross-project listings through
|
|
55
|
+
// `RestCrossProjectFilteringStrategy` (real `GET /tasks`) before
|
|
56
|
+
// this strategy is ever selected — but the literal call-site
|
|
57
|
+
// migration is preserved rather than silently redirected to a
|
|
58
|
+
// different, working endpoint, per this item's byte-compatible
|
|
59
|
+
// refactor-not-redesign scope.
|
|
60
|
+
const path = `/tasks/all${query ? `?${query}` : ''}`;
|
|
61
|
+
tasks = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', path);
|
|
62
|
+
}
|
|
63
|
+
logger_1.logger.info('Server-side filtering completed successfully', {
|
|
64
|
+
taskCount: tasks?.length || 0,
|
|
65
|
+
filter: filterString
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
tasks: tasks || [],
|
|
69
|
+
metadata: {
|
|
70
|
+
serverSideFilteringUsed: true,
|
|
71
|
+
serverSideFilteringAttempted: true,
|
|
72
|
+
clientSideFiltering: false,
|
|
73
|
+
filteringNote: 'Server-side filtering used (modern Vikunja)'
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
logger_1.logger.error('Server-side filtering failed', {
|
|
79
|
+
error: error instanceof Error ? error.message : String(error),
|
|
80
|
+
filter: filterString
|
|
81
|
+
});
|
|
82
|
+
// Re-throw the error to be handled by the calling code
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.ServerSideFilteringStrategy = ServerSideFilteringStrategy;
|
|
88
|
+
//# sourceMappingURL=ServerSideFilteringStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerSideFilteringStrategy.js","sourceRoot":"","sources":["../../../src/utils/filtering/ServerSideFilteringStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base interface for task filtering strategies
|
|
3
|
+
*
|
|
4
|
+
* This interface defines the contract that all filtering strategies must implement.
|
|
5
|
+
* It follows the Strategy pattern to encapsulate different filtering approaches
|
|
6
|
+
* while maintaining a consistent interface.
|
|
7
|
+
*/
|
|
8
|
+
import type { FilteringParams, FilteringResult } from './types';
|
|
9
|
+
export interface TaskFilteringStrategy {
|
|
10
|
+
/**
|
|
11
|
+
* Execute the filtering strategy
|
|
12
|
+
*
|
|
13
|
+
* @param params - The filtering parameters including args, expressions, and API params
|
|
14
|
+
* @returns Promise resolving to the filtering result with tasks and metadata
|
|
15
|
+
* @throws MCPError for validation or API errors
|
|
16
|
+
*/
|
|
17
|
+
execute(params: FilteringParams): Promise<FilteringResult>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=TaskFilteringStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskFilteringStrategy.d.ts","sourceRoot":"","sources":["../../../src/utils/filtering/TaskFilteringStrategy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEhE,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC5D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base interface for task filtering strategies
|
|
4
|
+
*
|
|
5
|
+
* This interface defines the contract that all filtering strategies must implement.
|
|
6
|
+
* It follows the Strategy pattern to encapsulate different filtering approaches
|
|
7
|
+
* while maintaining a consistent interface.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
//# sourceMappingURL=TaskFilteringStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskFilteringStrategy.js","sourceRoot":"","sources":["../../../src/utils/filtering/TaskFilteringStrategy.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filtering strategy pattern exports
|
|
3
|
+
*
|
|
4
|
+
* This module provides a clean interface for the filtering strategy pattern
|
|
5
|
+
* implementation, allowing easy import of all necessary components.
|
|
6
|
+
*/
|
|
7
|
+
export type { TaskFilteringStrategy } from './TaskFilteringStrategy';
|
|
8
|
+
export { ServerSideFilteringStrategy } from './ServerSideFilteringStrategy';
|
|
9
|
+
export { ClientSideFilteringStrategy } from './ClientSideFilteringStrategy';
|
|
10
|
+
export { HybridFilteringStrategy } from './HybridFilteringStrategy';
|
|
11
|
+
export { RestCrossProjectFilteringStrategy } from './RestCrossProjectFilteringStrategy';
|
|
12
|
+
export { FilteringContext } from './FilteringContext';
|
|
13
|
+
export type { FilteringArgs, FilteringParams, FilteringMetadata, FilteringResult, StrategyConfig } from './types';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/filtering/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAGxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,YAAY,EACV,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,EACf,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Filtering strategy pattern exports
|
|
4
|
+
*
|
|
5
|
+
* This module provides a clean interface for the filtering strategy pattern
|
|
6
|
+
* implementation, allowing easy import of all necessary components.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.FilteringContext = exports.RestCrossProjectFilteringStrategy = exports.HybridFilteringStrategy = exports.ClientSideFilteringStrategy = exports.ServerSideFilteringStrategy = void 0;
|
|
10
|
+
// Strategy implementations
|
|
11
|
+
var ServerSideFilteringStrategy_1 = require("./ServerSideFilteringStrategy");
|
|
12
|
+
Object.defineProperty(exports, "ServerSideFilteringStrategy", { enumerable: true, get: function () { return ServerSideFilteringStrategy_1.ServerSideFilteringStrategy; } });
|
|
13
|
+
var ClientSideFilteringStrategy_1 = require("./ClientSideFilteringStrategy");
|
|
14
|
+
Object.defineProperty(exports, "ClientSideFilteringStrategy", { enumerable: true, get: function () { return ClientSideFilteringStrategy_1.ClientSideFilteringStrategy; } });
|
|
15
|
+
var HybridFilteringStrategy_1 = require("./HybridFilteringStrategy");
|
|
16
|
+
Object.defineProperty(exports, "HybridFilteringStrategy", { enumerable: true, get: function () { return HybridFilteringStrategy_1.HybridFilteringStrategy; } });
|
|
17
|
+
var RestCrossProjectFilteringStrategy_1 = require("./RestCrossProjectFilteringStrategy");
|
|
18
|
+
Object.defineProperty(exports, "RestCrossProjectFilteringStrategy", { enumerable: true, get: function () { return RestCrossProjectFilteringStrategy_1.RestCrossProjectFilteringStrategy; } });
|
|
19
|
+
// Context for strategy selection
|
|
20
|
+
var FilteringContext_1 = require("./FilteringContext");
|
|
21
|
+
Object.defineProperty(exports, "FilteringContext", { enumerable: true, get: function () { return FilteringContext_1.FilteringContext; } });
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/filtering/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAKH,2BAA2B;AAC3B,6EAA4E;AAAnE,0IAAA,2BAA2B,OAAA;AACpC,6EAA4E;AAAnE,0IAAA,2BAA2B,OAAA;AACpC,qEAAoE;AAA3D,kIAAA,uBAAuB,OAAA;AAChC,yFAAwF;AAA/E,sJAAA,iCAAiC,OAAA;AAE1C,iCAAiC;AACjC,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the filtering strategy pattern
|
|
3
|
+
*/
|
|
4
|
+
import type { FilterExpression } from '../../types/filters';
|
|
5
|
+
import type { AuthManager } from '../../auth/AuthManager';
|
|
6
|
+
import type { components } from '../../types/generated/vikunja-openapi';
|
|
7
|
+
/** `models.Task` per the OpenAPI spec. */
|
|
8
|
+
export type VikunjaTask = components['schemas']['models.Task'];
|
|
9
|
+
/**
|
|
10
|
+
* Query params shared by the task-listing endpoints (page/per_page/s/sort_by
|
|
11
|
+
* plus the server-side `filter` string). Mirrors the legacy client's
|
|
12
|
+
* `GetTasksParams` shape without depending on the (EOL) legacy client package.
|
|
13
|
+
*/
|
|
14
|
+
export interface TaskListApiParams {
|
|
15
|
+
page?: number;
|
|
16
|
+
per_page?: number;
|
|
17
|
+
s?: string;
|
|
18
|
+
sort_by?: string;
|
|
19
|
+
filter?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Arguments for filtering operations
|
|
23
|
+
*/
|
|
24
|
+
export interface FilteringArgs {
|
|
25
|
+
projectId?: number;
|
|
26
|
+
page?: number;
|
|
27
|
+
perPage?: number;
|
|
28
|
+
search?: string;
|
|
29
|
+
sort?: string;
|
|
30
|
+
filter?: string;
|
|
31
|
+
filterId?: string;
|
|
32
|
+
allProjects?: boolean;
|
|
33
|
+
done?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* The documented GET /tasks `order_by` param ('asc' | 'desc', paired with
|
|
36
|
+
* `sort_by`). Only honored by `RestCrossProjectFilteringStrategy` —
|
|
37
|
+
* single-project listing (`ClientSideFilteringStrategy`/
|
|
38
|
+
* `ServerSideFilteringStrategy`) never supported this param even
|
|
39
|
+
* pre-migration, so it stays REST-cross-project-only to preserve exact
|
|
40
|
+
* behavior.
|
|
41
|
+
*/
|
|
42
|
+
orderBy?: 'asc' | 'desc';
|
|
43
|
+
/** GET /tasks `filter_timezone` param. Same REST-only scope as `orderBy`. */
|
|
44
|
+
filterTimezone?: string;
|
|
45
|
+
/** GET /tasks `filter_include_nulls` param. Same REST-only scope as `orderBy`. */
|
|
46
|
+
filterIncludeNulls?: boolean;
|
|
47
|
+
/** GET /tasks `expand` param (repeatable). Same REST-only scope as `orderBy`. */
|
|
48
|
+
expand?: string[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parameters passed to filtering strategies
|
|
52
|
+
*/
|
|
53
|
+
export interface FilteringParams {
|
|
54
|
+
args: FilteringArgs;
|
|
55
|
+
filterExpression: FilterExpression | null;
|
|
56
|
+
filterString: string | undefined;
|
|
57
|
+
params: TaskListApiParams;
|
|
58
|
+
/**
|
|
59
|
+
* Active auth manager, required by strategies that call the direct-REST
|
|
60
|
+
* helper (`RestCrossProjectFilteringStrategy`). Kept as its own field
|
|
61
|
+
* rather than folded into `args` so that logging/debugging code that logs
|
|
62
|
+
* `args` wholesale never accidentally serializes session credentials.
|
|
63
|
+
*/
|
|
64
|
+
authManager?: AuthManager;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Metadata about the filtering operation performed
|
|
68
|
+
*/
|
|
69
|
+
export interface FilteringMetadata {
|
|
70
|
+
serverSideFilteringUsed: boolean;
|
|
71
|
+
serverSideFilteringAttempted: boolean;
|
|
72
|
+
clientSideFiltering: boolean;
|
|
73
|
+
filteringNote: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Result of a filtering operation
|
|
77
|
+
*/
|
|
78
|
+
export interface FilteringResult {
|
|
79
|
+
tasks: VikunjaTask[];
|
|
80
|
+
metadata: FilteringMetadata;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Configuration for strategy selection
|
|
84
|
+
*/
|
|
85
|
+
export interface StrategyConfig {
|
|
86
|
+
enableServerSide: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* True when the listing spans every accessible project (no `projectId`,
|
|
89
|
+
* or `allProjects: true`). Cross-project listing always routes through
|
|
90
|
+
* `RestCrossProjectFilteringStrategy` (direct REST GET /tasks, falling
|
|
91
|
+
* back to per-project aggregation), regardless of `enableServerSide` —
|
|
92
|
+
* the documented single-call endpoint is strictly better than the N+1
|
|
93
|
+
* aggregation whether or not a filter is present.
|
|
94
|
+
*/
|
|
95
|
+
crossProject?: boolean;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Task filtering strategy interface
|
|
99
|
+
*/
|
|
100
|
+
export interface TaskFilteringStrategy {
|
|
101
|
+
/**
|
|
102
|
+
* Execute the filtering strategy
|
|
103
|
+
* @param params - Filtering parameters
|
|
104
|
+
* @returns Promise resolving to filtering result
|
|
105
|
+
*/
|
|
106
|
+
execute(params: FilteringParams): Promise<FilteringResult>;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/filtering/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAExE,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACzB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,iBAAiB,CAAC;IAC1B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uBAAuB,EAAE,OAAO,CAAC;IACjC,4BAA4B,EAAE,OAAO,CAAC;IACtC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/filtering/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod-based filter validation and parsing system
|
|
3
|
+
* Replaces the complex custom tokenizer/parser with secure Zod schemas
|
|
4
|
+
*/
|
|
5
|
+
import type { FilterCondition, FilterExpression, FilterField, FilterGroup, FilterOperator, FilterValidationResult, FilterValidationConfig, LogicalOperator, ParseResult } from '../types/filters';
|
|
6
|
+
/**
|
|
7
|
+
* Security validation functions
|
|
8
|
+
*/
|
|
9
|
+
export declare const SecurityValidator: {
|
|
10
|
+
/**
|
|
11
|
+
* Validates input string contains only allowed characters
|
|
12
|
+
*/
|
|
13
|
+
validateAllowedChars(input: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Validates filter string length
|
|
16
|
+
*/
|
|
17
|
+
validateLength(input: string): {
|
|
18
|
+
isValid: boolean;
|
|
19
|
+
error?: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Validates individual value length and safety
|
|
23
|
+
*/
|
|
24
|
+
validateValue(value: string): {
|
|
25
|
+
isValid: boolean;
|
|
26
|
+
error?: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Main filter string parsing function
|
|
31
|
+
* Replaces the complex tokenizer/parser system with Zod validation
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseFilterString(filterStr: string): ParseResult;
|
|
34
|
+
/**
|
|
35
|
+
* Validate a filter condition using enhanced validation
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateCondition(condition: FilterCondition): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Validate filter expression using Zod
|
|
40
|
+
*/
|
|
41
|
+
export declare function validateFilterExpression(expression: FilterExpression, config?: FilterValidationConfig): FilterValidationResult;
|
|
42
|
+
/**
|
|
43
|
+
* Convert condition to string representation
|
|
44
|
+
*/
|
|
45
|
+
export declare function conditionToString(condition: FilterCondition): string;
|
|
46
|
+
/**
|
|
47
|
+
* Convert group to string representation
|
|
48
|
+
*/
|
|
49
|
+
export declare function groupToString(group: FilterGroup): string;
|
|
50
|
+
/**
|
|
51
|
+
* Convert expression to string representation
|
|
52
|
+
*/
|
|
53
|
+
export declare function expressionToString(expression: FilterExpression): string;
|
|
54
|
+
/**
|
|
55
|
+
* Filter builder class for fluent construction
|
|
56
|
+
*/
|
|
57
|
+
export declare class FilterBuilder {
|
|
58
|
+
private expression;
|
|
59
|
+
private currentGroup;
|
|
60
|
+
constructor();
|
|
61
|
+
where(field: FilterField, operator: FilterOperator, value: unknown): FilterBuilder;
|
|
62
|
+
and(): FilterBuilder;
|
|
63
|
+
or(): FilterBuilder;
|
|
64
|
+
group(operator?: LogicalOperator): FilterBuilder;
|
|
65
|
+
groupOperator(operator: LogicalOperator): FilterBuilder;
|
|
66
|
+
build(): FilterExpression;
|
|
67
|
+
toString(): string;
|
|
68
|
+
validate(config?: FilterValidationConfig): FilterValidationResult;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/utils/filters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,WAAW,EAEZ,MAAM,kBAAkB,CAAC;AA+E1B;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;gCACyB,MAAM,GAAG,OAAO;IAI5C;;OAEG;0BACmB,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAUnE;;OAEG;yBACkB,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;CASnE,CAAC;AA8XF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAgHhE;AAmHD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,EAAE,CAoBtE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,GAAE,sBAA2B,GAClC,sBAAsB,CAiDxB;AAwBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAoBpE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAKxD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,MAAM,CAIvE;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,YAAY,CAAc;;IAYlC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,GAAG,aAAa;IASlF,GAAG,IAAI,aAAa;IAKpB,EAAE,IAAI,aAAa;IAKnB,KAAK,CAAC,QAAQ,GAAE,eAAsB,GAAG,aAAa;IAStD,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,aAAa;IAKvD,KAAK,IAAI,gBAAgB;IAKzB,QAAQ,IAAI,MAAM;IAIlB,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,sBAAsB;CAGlE"}
|