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,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Notifications Tool
|
|
4
|
+
*
|
|
5
|
+
* Wraps Vikunja's `/notifications` endpoints (see docs/vikunja-openapi.json):
|
|
6
|
+
* - GET /notifications -> list, with page/per_page pagination
|
|
7
|
+
* - POST /notifications -> mark every notification read
|
|
8
|
+
* - POST /notifications/{id} -> toggle a single notification's read state
|
|
9
|
+
*
|
|
10
|
+
* All calls go through `vikunjaRestRequest` (direct-REST rule, see
|
|
11
|
+
* docs/ENDPOINT-PLAYBOOK.md §3) — legacy client has no notifications support
|
|
12
|
+
* to migrate away from, so this is a pure new call site.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.registerNotificationsTool = registerNotificationsTool;
|
|
16
|
+
const zod_1 = require("zod");
|
|
17
|
+
const types_1 = require("../types");
|
|
18
|
+
const client_1 = require("../client");
|
|
19
|
+
const logger_1 = require("../utils/logger");
|
|
20
|
+
const read_only_1 = require("../utils/read-only");
|
|
21
|
+
const validation_1 = require("../utils/validation");
|
|
22
|
+
const response_factory_1 = require("../utils/response-factory");
|
|
23
|
+
const vikunja_rest_1 = require("../utils/vikunja-rest");
|
|
24
|
+
/**
|
|
25
|
+
* Best-effort, zero-extra-request enrichment: some notification kinds (e.g.
|
|
26
|
+
* task assignment, task comments) embed a `{ task: { id, title } }` shape in
|
|
27
|
+
* their untyped `notification` payload in practice, but this is NOT
|
|
28
|
+
* documented in the OpenAPI spec (see `VikunjaNotification` doc comment
|
|
29
|
+
* above) — so this is purely a defensive, best-effort extraction over data
|
|
30
|
+
* already in hand from the `list` response, never a new API call, and it
|
|
31
|
+
* silently returns `undefined` (rather than throwing) whenever the shape
|
|
32
|
+
* doesn't match. This is what backs the `list` subcommand's optional
|
|
33
|
+
* `relatedTask` convenience field.
|
|
34
|
+
*/
|
|
35
|
+
function extractRelatedTask(content) {
|
|
36
|
+
if (!content || typeof content !== 'object') {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
const task = content.task;
|
|
40
|
+
if (!task || typeof task !== 'object') {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const id = task.id;
|
|
44
|
+
const title = task.title;
|
|
45
|
+
if (typeof id === 'number' && typeof title === 'string') {
|
|
46
|
+
return { id, title };
|
|
47
|
+
}
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Ensures a notification ends up marked READ, working around
|
|
52
|
+
* `POST /notifications/{id}` being a pure toggle in the API (per the spec:
|
|
53
|
+
* "Marks a notification as either read or unread", no request body to pick
|
|
54
|
+
* which). A blind single POST would silently mark an already-read
|
|
55
|
+
* notification unread again on a repeat call — this makes `mark-read`
|
|
56
|
+
* idempotent (verify-then-apply, docs/ENDPOINT-PLAYBOOK.md §1) by checking
|
|
57
|
+
* the response and, if the toggle landed on "unread", toggling once more.
|
|
58
|
+
* At most 2 requests; typically 1.
|
|
59
|
+
*/
|
|
60
|
+
async function ensureNotificationRead(authManager, notificationId) {
|
|
61
|
+
let notification = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/notifications/${notificationId}`);
|
|
62
|
+
if (!notification?.read_at) {
|
|
63
|
+
notification = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/notifications/${notificationId}`);
|
|
64
|
+
}
|
|
65
|
+
return notification;
|
|
66
|
+
}
|
|
67
|
+
function registerNotificationsTool(server, authManager, _clientFactory) {
|
|
68
|
+
server.tool('vikunja_notifications', (0, read_only_1.withReadOnlyNote)('vikunja_notifications', "Manage the current user's Vikunja notifications: list (with optional " +
|
|
69
|
+
"unread filtering and pagination), mark a single notification read " +
|
|
70
|
+
"(idempotent — safe to call repeatedly), and mark all notifications " +
|
|
71
|
+
"read at once."), {
|
|
72
|
+
subcommand: zod_1.z.enum(['list', 'mark-read', 'mark-all-read']),
|
|
73
|
+
// list parameters
|
|
74
|
+
unreadOnly: zod_1.z.boolean().optional(),
|
|
75
|
+
page: zod_1.z.number().int().positive().optional(),
|
|
76
|
+
perPage: zod_1.z.number().int().positive().optional(),
|
|
77
|
+
// mark-read parameter
|
|
78
|
+
notificationId: zod_1.z.number().int().positive().optional(),
|
|
79
|
+
}, (0, read_only_1.getToolAnnotations)('vikunja_notifications'), async (args) => {
|
|
80
|
+
if (!authManager.isAuthenticated()) {
|
|
81
|
+
throw new types_1.MCPError(types_1.ErrorCode.AUTH_REQUIRED, 'Authentication required. Please use vikunja_auth.connect first.');
|
|
82
|
+
}
|
|
83
|
+
await (0, client_1.getAuthManagerFromContext)(); // Ensure the session is initialized
|
|
84
|
+
const subcommand = args.subcommand;
|
|
85
|
+
(0, read_only_1.assertWriteAllowed)('vikunja_notifications', subcommand);
|
|
86
|
+
logger_1.logger.debug('Notifications tool called', { subcommand, args });
|
|
87
|
+
try {
|
|
88
|
+
switch (subcommand) {
|
|
89
|
+
case 'list': {
|
|
90
|
+
const query = [];
|
|
91
|
+
if (args.page !== undefined) {
|
|
92
|
+
query.push(`page=${encodeURIComponent(String(args.page))}`);
|
|
93
|
+
}
|
|
94
|
+
if (args.perPage !== undefined) {
|
|
95
|
+
query.push(`per_page=${encodeURIComponent(String(args.perPage))}`);
|
|
96
|
+
}
|
|
97
|
+
const qs = query.length > 0 ? `?${query.join('&')}` : '';
|
|
98
|
+
const allNotifications = (await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/notifications${qs}`)) ?? [];
|
|
99
|
+
// The spec's page/per_page are the only server-side filters
|
|
100
|
+
// documented for this endpoint — there is no server-side
|
|
101
|
+
// unread filter, so `unreadOnly` is applied client-side over the
|
|
102
|
+
// fetched page.
|
|
103
|
+
const notifications = args.unreadOnly
|
|
104
|
+
? allNotifications.filter((n) => !n.read_at)
|
|
105
|
+
: allNotifications;
|
|
106
|
+
// Read-composite (docs/ENDPOINT-PLAYBOOK.md §1): attach a
|
|
107
|
+
// best-effort relatedTask summary with zero extra requests,
|
|
108
|
+
// see extractRelatedTask() doc comment for why this is
|
|
109
|
+
// heuristic rather than spec-guaranteed.
|
|
110
|
+
const enriched = notifications.map((n) => {
|
|
111
|
+
const relatedTask = extractRelatedTask(n.notification);
|
|
112
|
+
return relatedTask ? { ...n, relatedTask } : n;
|
|
113
|
+
});
|
|
114
|
+
logger_1.logger.info('Listed notifications', {
|
|
115
|
+
count: enriched.length,
|
|
116
|
+
unreadOnly: !!args.unreadOnly,
|
|
117
|
+
});
|
|
118
|
+
const aorpResult = (0, response_factory_1.createAorpResponse)('list', `Retrieved ${enriched.length} notification(s)`, { notifications: enriched }, {
|
|
119
|
+
success: true,
|
|
120
|
+
metadata: {
|
|
121
|
+
count: enriched.length,
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
content: [{ type: 'text', text: aorpResult.content }],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
case 'mark-read': {
|
|
129
|
+
const notificationId = (0, validation_1.validateAndConvertId)(args.notificationId, 'notificationId');
|
|
130
|
+
const notification = await ensureNotificationRead(authManager, notificationId);
|
|
131
|
+
logger_1.logger.info('Marked notification read', { notificationId });
|
|
132
|
+
const aorpResult = (0, response_factory_1.createAorpResponse)('mark-read', `Notification ${notificationId} marked as read`, { notification }, {
|
|
133
|
+
success: true,
|
|
134
|
+
metadata: { count: 1 },
|
|
135
|
+
});
|
|
136
|
+
return {
|
|
137
|
+
content: [{ type: 'text', text: aorpResult.content }],
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
case 'mark-all-read': {
|
|
141
|
+
const result = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', '/notifications');
|
|
142
|
+
logger_1.logger.info('Marked all notifications read');
|
|
143
|
+
const aorpResult = (0, response_factory_1.createAorpResponse)('mark-all-read', result?.message ?? 'All notifications marked as read', {}, { success: true });
|
|
144
|
+
return {
|
|
145
|
+
content: [{ type: 'text', text: aorpResult.content }],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
default:
|
|
149
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Unknown subcommand: ${subcommand}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
logger_1.logger.error('Notifications operation failed', { error, subcommand, args });
|
|
154
|
+
if (error instanceof types_1.MCPError) {
|
|
155
|
+
// Link shares cannot have notifications — the spec documents a
|
|
156
|
+
// dedicated 403 for this case; surface it plainly rather than the
|
|
157
|
+
// generic HTTP error text.
|
|
158
|
+
const statusCode = error.details?.statusCode;
|
|
159
|
+
if (statusCode === 403) {
|
|
160
|
+
throw new types_1.MCPError(types_1.ErrorCode.PERMISSION_DENIED, 'Link shares cannot have notifications. Authenticate as a full user to use vikunja_notifications.');
|
|
161
|
+
}
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
if (error instanceof Error) {
|
|
165
|
+
throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `Notifications operation failed: ${error.message}`);
|
|
166
|
+
}
|
|
167
|
+
throw new types_1.MCPError(types_1.ErrorCode.INTERNAL_ERROR, 'An unexpected error occurred during a notifications operation');
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project backgrounds — JSON-only subset (G7, docs/ENDPOINT-TAIL-RETRIAGE.md)
|
|
3
|
+
*
|
|
4
|
+
* Gated behind the opt-in, deny-by-default `backgrounds` module config key
|
|
5
|
+
* (`src/config/types.ts` — see the comment there for why this is "opt-in
|
|
6
|
+
* cosmetic", the deliberate opposite of every other default-on domain
|
|
7
|
+
* module). `registerProjectsTool` (`./index.ts`) only includes these three
|
|
8
|
+
* subcommands in `vikunja_projects`'s subcommand enum when the module is
|
|
9
|
+
* enabled, so — matching every other module's contract — they are genuinely
|
|
10
|
+
* absent from the tool's schema when disabled, not merely rejected at
|
|
11
|
+
* dispatch.
|
|
12
|
+
*
|
|
13
|
+
* Endpoints implemented (verified against docs/vikunja-openapi.json):
|
|
14
|
+
* - DELETE /projects/{id}/background -> models.Project
|
|
15
|
+
* - POST /projects/{id}/backgrounds/unsplash -> models.Project
|
|
16
|
+
* - GET /backgrounds/unsplash/search -> background.Image[]
|
|
17
|
+
*
|
|
18
|
+
* Deliberately parked (binary image bytes — no MCP content channel for
|
|
19
|
+
* them; see docs/ENDPOINT-TAIL-RETRIAGE.md and docs/ROADMAP.md §4):
|
|
20
|
+
* - PUT /projects/{id}/backgrounds/upload
|
|
21
|
+
* - GET /projects/{id}/background (the image bytes themselves)
|
|
22
|
+
* - GET /backgrounds/unsplash/image/{image}(/thumb)
|
|
23
|
+
*
|
|
24
|
+
* `POST /projects/{id}/backgrounds/unsplash`'s request body is typed as
|
|
25
|
+
* `background.Image` in the spec (id/url/thumb/blur_hash/info), but the
|
|
26
|
+
* server only needs the photo `id` — the endpoint description confirms it
|
|
27
|
+
* "sets a photo from unsplash as project background" by ID, not by echoing
|
|
28
|
+
* back full image metadata the caller has no independent way to know. So
|
|
29
|
+
* this module only accepts/sends `id`, matching G7's own scoping note
|
|
30
|
+
* ("likely the unsplash photo id").
|
|
31
|
+
*
|
|
32
|
+
* Unsplash search/set only work when the connected Vikunja server has an
|
|
33
|
+
* Unsplash provider configured (an admin-side API key). When it doesn't,
|
|
34
|
+
* the server errors — `wrapUnsplashProviderError` recognizes that shape and
|
|
35
|
+
* rewrites it into a friendly, actionable message instead of surfacing the
|
|
36
|
+
* server's raw error text.
|
|
37
|
+
*/
|
|
38
|
+
import type { AuthManager } from '../../auth/AuthManager';
|
|
39
|
+
export type McpResponse = {
|
|
40
|
+
content: Array<{
|
|
41
|
+
type: 'text';
|
|
42
|
+
text: string;
|
|
43
|
+
}>;
|
|
44
|
+
};
|
|
45
|
+
export interface RemoveBackgroundArgs {
|
|
46
|
+
/** Project id to remove the background from. */
|
|
47
|
+
id?: number;
|
|
48
|
+
sessionId?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface SetUnsplashBackgroundArgs {
|
|
51
|
+
/** Project id to set the background on. */
|
|
52
|
+
id?: number;
|
|
53
|
+
/** The unsplash photo id (`background.Image.id` from `search-unsplash`). */
|
|
54
|
+
unsplashImageId?: string;
|
|
55
|
+
sessionId?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface SearchUnsplashArgs {
|
|
58
|
+
/** Search term (maps to the API's `s` query param). */
|
|
59
|
+
unsplashQuery?: string;
|
|
60
|
+
/** Page number, 1-based (maps to the API's `p` query param). */
|
|
61
|
+
page?: number;
|
|
62
|
+
sessionId?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Removes a project's background, regardless of which provider set it.
|
|
66
|
+
* Per the spec, this does not error if the project has no background set.
|
|
67
|
+
*/
|
|
68
|
+
export declare function removeProjectBackground(args: RemoveBackgroundArgs, authManager: AuthManager): Promise<McpResponse>;
|
|
69
|
+
/**
|
|
70
|
+
* Sets an unsplash photo (by its unsplash photo id, from `search-unsplash`)
|
|
71
|
+
* as a project's background.
|
|
72
|
+
*/
|
|
73
|
+
export declare function setUnsplashBackground(args: SetUnsplashBackgroundArgs, authManager: AuthManager): Promise<McpResponse>;
|
|
74
|
+
/**
|
|
75
|
+
* Searches unsplash for candidate background photos. Only works when the
|
|
76
|
+
* connected Vikunja server has an Unsplash provider configured — see
|
|
77
|
+
* `wrapUnsplashError`.
|
|
78
|
+
*/
|
|
79
|
+
export declare function searchUnsplashBackgrounds(args: SearchUnsplashArgs, authManager: AuthManager): Promise<McpResponse>;
|
|
80
|
+
//# sourceMappingURL=backgrounds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgrounds.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/backgrounds.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAY1D,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,2CAA2C;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuCD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,oBAAoB,EAC1B,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,WAAW,CAAC,CA6BtB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,yBAAyB,EAC/B,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,WAAW,CAAC,CAmCtB;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,kBAAkB,EACxB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,WAAW,CAAC,CAoCtB"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Project backgrounds — JSON-only subset (G7, docs/ENDPOINT-TAIL-RETRIAGE.md)
|
|
4
|
+
*
|
|
5
|
+
* Gated behind the opt-in, deny-by-default `backgrounds` module config key
|
|
6
|
+
* (`src/config/types.ts` — see the comment there for why this is "opt-in
|
|
7
|
+
* cosmetic", the deliberate opposite of every other default-on domain
|
|
8
|
+
* module). `registerProjectsTool` (`./index.ts`) only includes these three
|
|
9
|
+
* subcommands in `vikunja_projects`'s subcommand enum when the module is
|
|
10
|
+
* enabled, so — matching every other module's contract — they are genuinely
|
|
11
|
+
* absent from the tool's schema when disabled, not merely rejected at
|
|
12
|
+
* dispatch.
|
|
13
|
+
*
|
|
14
|
+
* Endpoints implemented (verified against docs/vikunja-openapi.json):
|
|
15
|
+
* - DELETE /projects/{id}/background -> models.Project
|
|
16
|
+
* - POST /projects/{id}/backgrounds/unsplash -> models.Project
|
|
17
|
+
* - GET /backgrounds/unsplash/search -> background.Image[]
|
|
18
|
+
*
|
|
19
|
+
* Deliberately parked (binary image bytes — no MCP content channel for
|
|
20
|
+
* them; see docs/ENDPOINT-TAIL-RETRIAGE.md and docs/ROADMAP.md §4):
|
|
21
|
+
* - PUT /projects/{id}/backgrounds/upload
|
|
22
|
+
* - GET /projects/{id}/background (the image bytes themselves)
|
|
23
|
+
* - GET /backgrounds/unsplash/image/{image}(/thumb)
|
|
24
|
+
*
|
|
25
|
+
* `POST /projects/{id}/backgrounds/unsplash`'s request body is typed as
|
|
26
|
+
* `background.Image` in the spec (id/url/thumb/blur_hash/info), but the
|
|
27
|
+
* server only needs the photo `id` — the endpoint description confirms it
|
|
28
|
+
* "sets a photo from unsplash as project background" by ID, not by echoing
|
|
29
|
+
* back full image metadata the caller has no independent way to know. So
|
|
30
|
+
* this module only accepts/sends `id`, matching G7's own scoping note
|
|
31
|
+
* ("likely the unsplash photo id").
|
|
32
|
+
*
|
|
33
|
+
* Unsplash search/set only work when the connected Vikunja server has an
|
|
34
|
+
* Unsplash provider configured (an admin-side API key). When it doesn't,
|
|
35
|
+
* the server errors — `wrapUnsplashProviderError` recognizes that shape and
|
|
36
|
+
* rewrites it into a friendly, actionable message instead of surfacing the
|
|
37
|
+
* server's raw error text.
|
|
38
|
+
*/
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.removeProjectBackground = removeProjectBackground;
|
|
41
|
+
exports.setUnsplashBackground = setUnsplashBackground;
|
|
42
|
+
exports.searchUnsplashBackgrounds = searchUnsplashBackgrounds;
|
|
43
|
+
const types_1 = require("../../types");
|
|
44
|
+
const validation_1 = require("../../utils/validation");
|
|
45
|
+
const error_handler_1 = require("../../utils/error-handler");
|
|
46
|
+
const response_factory_1 = require("../../utils/response-factory");
|
|
47
|
+
const vikunja_rest_1 = require("../../utils/vikunja-rest");
|
|
48
|
+
/**
|
|
49
|
+
* Recognizes the shape of a server error that indicates the Unsplash
|
|
50
|
+
* provider isn't configured (no admin-side API key / feature disabled) so
|
|
51
|
+
* it can be rewritten into a friendly, actionable message rather than
|
|
52
|
+
* surfaced as an opaque server error. Deliberately conservative — only
|
|
53
|
+
* matches error text that clearly mentions unsplash AND a
|
|
54
|
+
* configuration/availability concern, so genuine unrelated failures (a bad
|
|
55
|
+
* project id, a permissions error, an actually-malformed request) are never
|
|
56
|
+
* misreported as a provider-configuration issue.
|
|
57
|
+
*/
|
|
58
|
+
function isLikelyUnsplashNotConfigured(message) {
|
|
59
|
+
return /unsplash/i.test(message) && /(not[\s-]*(en|configur)|disabl|no.*(key|token)|access[\s-]*token)/i.test(message);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Wraps an error from an unsplash-touching REST call: a recognized
|
|
63
|
+
* "provider not configured" shape gets a friendly explanation (preserving
|
|
64
|
+
* the original server text for debugging); everything else passes through
|
|
65
|
+
* unchanged (already a non-stack-trace `MCPError` courtesy of
|
|
66
|
+
* `vikunjaRestRequest`'s own error contract).
|
|
67
|
+
*/
|
|
68
|
+
function wrapUnsplashError(error, action) {
|
|
69
|
+
if (error instanceof types_1.MCPError) {
|
|
70
|
+
if (isLikelyUnsplashNotConfigured(error.message)) {
|
|
71
|
+
throw new types_1.MCPError(types_1.ErrorCode.API_ERROR, `${action} unavailable: this Vikunja server does not appear to have an Unsplash ` +
|
|
72
|
+
`background provider configured. Ask your Vikunja administrator to set up an ` +
|
|
73
|
+
`Unsplash API key (or confirm Unsplash backgrounds are enabled) on the server. ` +
|
|
74
|
+
`(Server said: ${error.message})`);
|
|
75
|
+
}
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
throw (0, error_handler_1.transformApiError)(error, action);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Removes a project's background, regardless of which provider set it.
|
|
82
|
+
* Per the spec, this does not error if the project has no background set.
|
|
83
|
+
*/
|
|
84
|
+
async function removeProjectBackground(args, authManager) {
|
|
85
|
+
if (!args.id) {
|
|
86
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Project id is required for remove-background operation');
|
|
87
|
+
}
|
|
88
|
+
(0, validation_1.validateId)(args.id, 'id');
|
|
89
|
+
let project;
|
|
90
|
+
try {
|
|
91
|
+
project = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'DELETE', `/projects/${args.id}/background`);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
if (error instanceof types_1.MCPError) {
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
throw (0, error_handler_1.transformApiError)(error, 'Failed to remove project background');
|
|
98
|
+
}
|
|
99
|
+
const response = (0, response_factory_1.createStandardResponse)('remove-background', `Background removed from project ${args.id}`, { project }, { timestamp: new Date().toISOString() }, args.sessionId);
|
|
100
|
+
return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Sets an unsplash photo (by its unsplash photo id, from `search-unsplash`)
|
|
104
|
+
* as a project's background.
|
|
105
|
+
*/
|
|
106
|
+
async function setUnsplashBackground(args, authManager) {
|
|
107
|
+
if (!args.id) {
|
|
108
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'Project id is required for set-unsplash-background operation');
|
|
109
|
+
}
|
|
110
|
+
(0, validation_1.validateId)(args.id, 'id');
|
|
111
|
+
if (!args.unsplashImageId || args.unsplashImageId.trim() === '') {
|
|
112
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, 'unsplashImageId is required for set-unsplash-background operation');
|
|
113
|
+
}
|
|
114
|
+
const body = { id: args.unsplashImageId };
|
|
115
|
+
let project;
|
|
116
|
+
try {
|
|
117
|
+
project = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'POST', `/projects/${args.id}/backgrounds/unsplash`, body);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
wrapUnsplashError(error, 'Setting the unsplash background');
|
|
121
|
+
}
|
|
122
|
+
const response = (0, response_factory_1.createStandardResponse)('set-unsplash-background', `Project ${args.id} background set to unsplash photo ${args.unsplashImageId}`, { project, unsplashImageId: args.unsplashImageId }, { timestamp: new Date().toISOString() }, args.sessionId);
|
|
123
|
+
return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Searches unsplash for candidate background photos. Only works when the
|
|
127
|
+
* connected Vikunja server has an Unsplash provider configured — see
|
|
128
|
+
* `wrapUnsplashError`.
|
|
129
|
+
*/
|
|
130
|
+
async function searchUnsplashBackgrounds(args, authManager) {
|
|
131
|
+
if (args.page !== undefined) {
|
|
132
|
+
(0, validation_1.validateId)(args.page, 'page');
|
|
133
|
+
}
|
|
134
|
+
const params = new URLSearchParams();
|
|
135
|
+
if (args.unsplashQuery !== undefined && args.unsplashQuery.trim() !== '') {
|
|
136
|
+
params.set('s', args.unsplashQuery);
|
|
137
|
+
}
|
|
138
|
+
if (args.page !== undefined) {
|
|
139
|
+
params.set('p', String(args.page));
|
|
140
|
+
}
|
|
141
|
+
const query = params.toString();
|
|
142
|
+
let photos;
|
|
143
|
+
try {
|
|
144
|
+
const result = await (0, vikunja_rest_1.vikunjaRestRequest)(authManager, 'GET', `/backgrounds/unsplash/search${query ? `?${query}` : ''}`);
|
|
145
|
+
photos = Array.isArray(result) ? result : [];
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
wrapUnsplashError(error, 'Searching unsplash backgrounds');
|
|
149
|
+
}
|
|
150
|
+
const photoWord = photos.length === 1 ? 'photo' : 'photos';
|
|
151
|
+
const response = (0, response_factory_1.createStandardResponse)('search-unsplash', `Found ${photos.length} unsplash ${photoWord}`, { photos }, { timestamp: new Date().toISOString() }, args.sessionId);
|
|
152
|
+
return { content: [{ type: 'text', text: (0, response_factory_1.formatAorpAsMarkdown)(response) }] };
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=backgrounds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgrounds.js","sourceRoot":"","sources":["../../../src/tools/projects/backgrounds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Kanban bucket operations
|
|
3
|
+
*
|
|
4
|
+
* Implements `list-buckets`, `create-bucket`, `update-bucket`,
|
|
5
|
+
* `delete-bucket`, and `list-view-tasks` (per-view task listing in real
|
|
6
|
+
* Kanban card order). `list-buckets` lets callers resolve a bucket by name
|
|
7
|
+
* (e.g. "Doing") instead of hard-coding numeric bucket ids; `update-bucket`
|
|
8
|
+
* and `delete-bucket` extend that convenience by accepting a `bucketTitle`
|
|
9
|
+
* wherever a `bucketId` is otherwise required, resolved internally via a
|
|
10
|
+
* bucket list lookup — the same resolve-by-name-internally shape as
|
|
11
|
+
* `setTaskBucket` (`src/tools/tasks/buckets.ts`), Wave D's exemplar for
|
|
12
|
+
* "don't make the caller pre-fetch ids they shouldn't have to know"
|
|
13
|
+
* (docs/ENDPOINT-PLAYBOOK.md §1).
|
|
14
|
+
*
|
|
15
|
+
* legacy client does not expose the Kanban view endpoints, so this calls the
|
|
16
|
+
* Vikunja REST API directly via the shared `vikunja-rest` helper.
|
|
17
|
+
*/
|
|
18
|
+
import type { AuthManager } from '../../auth/AuthManager';
|
|
19
|
+
export interface ListBucketsArgs {
|
|
20
|
+
/** Project whose Kanban buckets should be listed. */
|
|
21
|
+
id?: number;
|
|
22
|
+
/** Optional Kanban view id. Auto-resolved from the project when omitted. */
|
|
23
|
+
viewId?: number;
|
|
24
|
+
/** Session id for response tracking. */
|
|
25
|
+
sessionId?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface CreateBucketArgs {
|
|
28
|
+
/** Project the new bucket should belong to. */
|
|
29
|
+
id?: number;
|
|
30
|
+
/** Optional Kanban view id. Auto-resolved from the project when omitted. */
|
|
31
|
+
viewId?: number;
|
|
32
|
+
/** Title of the new bucket. */
|
|
33
|
+
title?: string;
|
|
34
|
+
/** Optional max task count for the bucket (0 = unlimited). */
|
|
35
|
+
limit?: number;
|
|
36
|
+
/** Session id for response tracking. */
|
|
37
|
+
sessionId?: string;
|
|
38
|
+
}
|
|
39
|
+
/** Identifies an existing bucket by either its numeric id or its title. */
|
|
40
|
+
interface BucketRef {
|
|
41
|
+
bucketId?: number;
|
|
42
|
+
bucketTitle?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface UpdateBucketArgs extends BucketRef {
|
|
45
|
+
/** Project the bucket belongs to. */
|
|
46
|
+
id?: number;
|
|
47
|
+
/** Optional Kanban view id. Auto-resolved from the project when omitted. */
|
|
48
|
+
viewId?: number;
|
|
49
|
+
/** New title, if renaming. */
|
|
50
|
+
title?: string;
|
|
51
|
+
/** New max task count, if changing (0 = unlimited). */
|
|
52
|
+
limit?: number;
|
|
53
|
+
/** Session id for response tracking. */
|
|
54
|
+
sessionId?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface DeleteBucketArgs extends BucketRef {
|
|
57
|
+
/** Project the bucket belongs to. */
|
|
58
|
+
id?: number;
|
|
59
|
+
/** Optional Kanban view id. Auto-resolved from the project when omitted. */
|
|
60
|
+
viewId?: number;
|
|
61
|
+
/** Session id for response tracking. */
|
|
62
|
+
sessionId?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface ListViewTasksArgs {
|
|
65
|
+
/** Project whose view tasks should be listed. */
|
|
66
|
+
id?: number;
|
|
67
|
+
/** Optional view id. Auto-resolved to the Kanban view when omitted. */
|
|
68
|
+
viewId?: number;
|
|
69
|
+
/** Page number for pagination. */
|
|
70
|
+
page?: number;
|
|
71
|
+
/** Items per page. */
|
|
72
|
+
perPage?: number;
|
|
73
|
+
/** Session id for response tracking. */
|
|
74
|
+
sessionId?: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Lists the Kanban buckets of a project.
|
|
78
|
+
*
|
|
79
|
+
* @param args - Project id and optional view id
|
|
80
|
+
* @param authManager - Active auth manager holding session credentials
|
|
81
|
+
* @returns MCP response containing the project's Kanban buckets
|
|
82
|
+
*/
|
|
83
|
+
export declare function listBuckets(args: ListBucketsArgs, authManager: AuthManager): Promise<{
|
|
84
|
+
content: Array<{
|
|
85
|
+
type: 'text';
|
|
86
|
+
text: string;
|
|
87
|
+
}>;
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* Creates a new Kanban bucket (column) on a project's Kanban view.
|
|
91
|
+
*/
|
|
92
|
+
export declare function createBucket(args: CreateBucketArgs, authManager: AuthManager): Promise<{
|
|
93
|
+
content: Array<{
|
|
94
|
+
type: 'text';
|
|
95
|
+
text: string;
|
|
96
|
+
}>;
|
|
97
|
+
}>;
|
|
98
|
+
/**
|
|
99
|
+
* Updates an existing Kanban bucket. `POST
|
|
100
|
+
* /projects/{projectID}/views/{view}/buckets/{bucketID}` replaces the whole
|
|
101
|
+
* bucket resource, so the current bucket is fetched first (via the bucket
|
|
102
|
+
* list, which also resolves `bucketTitle` when `bucketId` is omitted) and
|
|
103
|
+
* merged with the requested changes.
|
|
104
|
+
*/
|
|
105
|
+
export declare function updateBucket(args: UpdateBucketArgs, authManager: AuthManager): Promise<{
|
|
106
|
+
content: Array<{
|
|
107
|
+
type: 'text';
|
|
108
|
+
text: string;
|
|
109
|
+
}>;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* Deletes a Kanban bucket. Does not delete the tasks in it — Vikunja
|
|
113
|
+
* dissociates them from the bucket instead.
|
|
114
|
+
*/
|
|
115
|
+
export declare function deleteBucket(args: DeleteBucketArgs, authManager: AuthManager): Promise<{
|
|
116
|
+
content: Array<{
|
|
117
|
+
type: 'text';
|
|
118
|
+
text: string;
|
|
119
|
+
}>;
|
|
120
|
+
}>;
|
|
121
|
+
/**
|
|
122
|
+
* Lists the tasks of a project view in their real server-side order
|
|
123
|
+
* (`GET /projects/{id}/views/{view}/tasks`), with pagination.
|
|
124
|
+
*
|
|
125
|
+
* The view id is auto-resolved to the project's Kanban view when omitted,
|
|
126
|
+
* matching `list-buckets`'s resolution behavior — this endpoint is most
|
|
127
|
+
* useful for Kanban views, where it returns cards in actual board order
|
|
128
|
+
* (unlike the generic task-listing endpoints used by `vikunja_tasks list`).
|
|
129
|
+
*
|
|
130
|
+
* The OpenAPI spec declares this endpoint's response as a flat `Task[]` for
|
|
131
|
+
* every view kind, but Vikunja's own endpoint description says a Kanban
|
|
132
|
+
* view returns "a list of buckets containing the tasks" instead — i.e. the
|
|
133
|
+
* real Kanban response is bucket-shaped (each item carries a nested `tasks`
|
|
134
|
+
* array), not task-shaped. Since this can't be verified against a live
|
|
135
|
+
* server from spec text alone, the response is passed through unmodified so
|
|
136
|
+
* callers can inspect the actual shape (check for a `tasks` field on each
|
|
137
|
+
* item) rather than have it silently coerced into an assumption that may be
|
|
138
|
+
* wrong. See docs/API_NOTES.md "Per-view task listing".
|
|
139
|
+
*/
|
|
140
|
+
export declare function listViewTasks(args: ListViewTasksArgs, authManager: AuthManager): Promise<{
|
|
141
|
+
content: Array<{
|
|
142
|
+
type: 'text';
|
|
143
|
+
text: string;
|
|
144
|
+
}>;
|
|
145
|
+
}>;
|
|
146
|
+
export {};
|
|
147
|
+
//# sourceMappingURL=buckets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buckets.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/buckets.ts"],"names":[],"mappings":"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"}
|