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,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Simple Response Factory
|
|
4
|
+
* Replaces 2,925-line AORP system with clean, direct response formatting
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createSimpleResponse = createSimpleResponse;
|
|
8
|
+
exports.createAorpResponse = createSimpleResponse;
|
|
9
|
+
exports.formatResponseForMcp = formatResponseForMcp;
|
|
10
|
+
exports.formatAorpAsMarkdown = formatResponseForMcp;
|
|
11
|
+
exports.createTaskResponse = createTaskResponse;
|
|
12
|
+
exports.createStandardResponse = createTaskResponse;
|
|
13
|
+
exports.createTaskAorpResponse = createTaskResponse;
|
|
14
|
+
exports.createSimpleErrorResponse = createSimpleErrorResponse;
|
|
15
|
+
exports.createAorpErrorResponse = createSimpleErrorResponse;
|
|
16
|
+
exports.createAorpFromData = createAorpFromData;
|
|
17
|
+
const simple_response_1 = require("./simple-response");
|
|
18
|
+
/**
|
|
19
|
+
* Create a simple response (replaces createAorpResponse)
|
|
20
|
+
* Direct replacement for AORP factory functions
|
|
21
|
+
*/
|
|
22
|
+
function createSimpleResponse(operation, message, data, options) {
|
|
23
|
+
const { success = true, metadata } = options || {};
|
|
24
|
+
if (success) {
|
|
25
|
+
return (0, simple_response_1.createSuccessResponse)(operation, message, data, {
|
|
26
|
+
timestamp: new Date().toISOString(),
|
|
27
|
+
success,
|
|
28
|
+
operation,
|
|
29
|
+
...metadata,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return (0, simple_response_1.createErrorResponse)(operation, message, 'OPERATION_FAILED', {
|
|
34
|
+
timestamp: new Date().toISOString(),
|
|
35
|
+
success: false,
|
|
36
|
+
operation,
|
|
37
|
+
...metadata,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Format response for MCP (replaces AORP formatting)
|
|
43
|
+
*/
|
|
44
|
+
function formatResponseForMcp(response) {
|
|
45
|
+
return response.content;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create task response (replaces createTaskResponse)
|
|
49
|
+
* Now handles flexible data for backward compatibility
|
|
50
|
+
*/
|
|
51
|
+
function createTaskResponse(operation, message, data, metadata, sessionId) {
|
|
52
|
+
// Handle both task data structure and arbitrary data objects
|
|
53
|
+
const responseData = data && typeof data === 'object' && 'tasks' in data ? data.tasks : data;
|
|
54
|
+
// Respect success flag from metadata, default to true
|
|
55
|
+
const successFlag = metadata?.success !== undefined ? metadata.success : true;
|
|
56
|
+
const responseMetadata = {
|
|
57
|
+
timestamp: new Date().toISOString(),
|
|
58
|
+
success: successFlag,
|
|
59
|
+
operation,
|
|
60
|
+
...metadata,
|
|
61
|
+
};
|
|
62
|
+
if (sessionId !== undefined) {
|
|
63
|
+
responseMetadata.sessionId = sessionId;
|
|
64
|
+
}
|
|
65
|
+
// Use createErrorResponse for failed operations, createSuccessResponse for successful ones
|
|
66
|
+
if (successFlag) {
|
|
67
|
+
return (0, simple_response_1.createSuccessResponse)(operation, message, responseData, responseMetadata);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return (0, simple_response_1.createErrorResponse)(operation, message, 'OPERATION_FAILED', responseMetadata);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create error response (replaces createAorpErrorResponse)
|
|
75
|
+
*/
|
|
76
|
+
function createSimpleErrorResponse(operation, message, errorCode = 'UNKNOWN_ERROR', metadata) {
|
|
77
|
+
return (0, simple_response_1.createErrorResponse)(operation, message, errorCode, metadata);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create AORP response from data (compatibility function)
|
|
81
|
+
* Simple replacement for createAorpFromData
|
|
82
|
+
*/
|
|
83
|
+
function createAorpFromData(operation, message, success = true, details) {
|
|
84
|
+
return createSimpleResponse(operation, details || message, undefined, { success });
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=response-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-factory.js","sourceRoot":"","sources":["../../src/utils/response-factory.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAoCH,oDA2BC;AAgEgC,kDAAkB;AA3DnD,oDAEC;AAsDgC,oDAAoB;AAhDrD,gDA8BC;AAe8B,oDAAsB;AACtB,oDAAsB;AAXrD,8DAOC;AAKqC,4DAAuB;AAa7D,gDAOC;AA7ID,uDAAoG;AA8BpG;;;GAGG;AACH,SAAgB,oBAAoB,CAClC,SAAiB,EACjB,OAAe,EACf,IAAmB,EACnB,OAIC;IAED,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAEnD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,IAAA,uCAAqB,EAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;YACrD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO;YACP,SAAS;YACT,GAAG,QAAQ;SACZ,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,IAAA,qCAAmB,EAAC,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE;YACjE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,KAAK;YACd,SAAS;YACT,GAAG,QAAQ;SACZ,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,QAAwB;IAC3D,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,SAAiB,EACjB,OAAe,EACf,IAA+C,EAC/C,QAA2B,EAC3B,SAAkB;IAElB,6DAA6D;IAC7D,MAAM,YAAY,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7F,sDAAsD;IACtD,MAAM,WAAW,GAAG,QAAQ,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAE9E,MAAM,gBAAgB,GAAqB;QACzC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO,EAAE,WAAW;QACpB,SAAS;QACT,GAAG,QAAQ;KACZ,CAAC;IAEF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,gBAAgB,CAAC,SAAS,GAAG,SAAS,CAAC;IACzC,CAAC;IAED,2FAA2F;IAC3F,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAA,uCAAqB,EAAC,SAAS,EAAE,OAAO,EAAE,YAA4B,EAAE,gBAAgB,CAAC,CAAC;IACnG,CAAC;SAAM,CAAC;QACN,OAAO,IAAA,qCAAmB,EAAC,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;IACvF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CACvC,SAAiB,EACjB,OAAe,EACf,YAAoB,eAAe,EACnC,QAA2B;IAE3B,OAAO,IAAA,qCAAmB,EAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACtE,CAAC;AAcD;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,SAAiB,EACjB,OAAe,EACf,UAAmB,IAAI,EACvB,OAAgB;IAEhB,OAAO,oBAAoB,CAAC,SAAS,EAAE,OAAO,IAAI,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Production-Ready Retry with Opossum Circuit Breaker
|
|
3
|
+
* Replaces 374-line custom implementation with battle-tested patterns
|
|
4
|
+
*/
|
|
5
|
+
import CircuitBreaker from 'opossum';
|
|
6
|
+
/**
|
|
7
|
+
* Simple circuit breaker registry for tracking and managing circuit breakers
|
|
8
|
+
*/
|
|
9
|
+
declare class CircuitBreakerRegistry {
|
|
10
|
+
private breakers;
|
|
11
|
+
register(name: string, breaker: CircuitBreaker): void;
|
|
12
|
+
get(name: string): CircuitBreaker | undefined;
|
|
13
|
+
resetAll(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Shuts down and forgets every registered breaker, including its
|
|
16
|
+
* accumulated failure/success stats. `resetAll` only closes breakers that
|
|
17
|
+
* are currently open — it leaves their rolling stats intact, so a breaker
|
|
18
|
+
* that tripped once would still be closer to tripping again. Test suites
|
|
19
|
+
* that exercise `vikunjaRestRequest` (which registers a real, named
|
|
20
|
+
* breaker per endpoint group) need full isolation between test cases;
|
|
21
|
+
* this is that reset.
|
|
22
|
+
*/
|
|
23
|
+
clear(): void;
|
|
24
|
+
getAllStats(): Record<string, unknown>;
|
|
25
|
+
getAllStatsSync(): Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
export declare const circuitBreakerRegistry: CircuitBreakerRegistry;
|
|
28
|
+
/**
|
|
29
|
+
* Interface for errors that have code properties (like Node.js system errors)
|
|
30
|
+
*/
|
|
31
|
+
interface ErrorWithCode extends Error {
|
|
32
|
+
code?: string;
|
|
33
|
+
status?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Simple retry configuration using opossum's built-in capabilities
|
|
37
|
+
*/
|
|
38
|
+
export interface RetryOptions {
|
|
39
|
+
maxRetries?: number;
|
|
40
|
+
timeout?: number;
|
|
41
|
+
resetTimeout?: number;
|
|
42
|
+
errorThresholdPercentage?: number;
|
|
43
|
+
volumeThreshold?: number;
|
|
44
|
+
shouldRetry?: (error: Error | ErrorWithCode) => boolean;
|
|
45
|
+
initialDelay?: number;
|
|
46
|
+
backoffFactor?: number;
|
|
47
|
+
maxDelay?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Simple circuit breaker factory using opossum directly.
|
|
51
|
+
*
|
|
52
|
+
* `operation` MUST be a stable function reference — not a closure captured
|
|
53
|
+
* per call-site invocation — because the registry caches the breaker (and
|
|
54
|
+
* therefore the action it was constructed with) by `name` and returns the
|
|
55
|
+
* cached instance on every subsequent call with that name, silently
|
|
56
|
+
* discarding whatever `operation` was passed that time. Passing a fresh
|
|
57
|
+
* closure each call under a shared/reused name was the exact bug fixed in
|
|
58
|
+
* the wave0 baseline (a later call's arguments got lost, and the FIRST
|
|
59
|
+
* closure ever registered under that name kept firing instead). Callers
|
|
60
|
+
* that need per-call arguments must give `operation` a signature that takes
|
|
61
|
+
* those arguments as parameters and pass them to `breaker.fire(...)` —
|
|
62
|
+
* never bake them into the closure.
|
|
63
|
+
*/
|
|
64
|
+
export declare function createCircuitBreaker<TArgs extends unknown[], TR>(operation: (...args: TArgs) => Promise<TR>, name: string, options?: RetryOptions): CircuitBreaker<TArgs, TR>;
|
|
65
|
+
/**
|
|
66
|
+
* Execute operation with automatic retry and circuit breaking
|
|
67
|
+
*/
|
|
68
|
+
export declare function withRetry<T>(operation: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
69
|
+
/**
|
|
70
|
+
* Execute operation with named circuit breaker for stats
|
|
71
|
+
*/
|
|
72
|
+
export declare function withNamedRetry<T>(operation: () => Promise<T>, name: string, options?: RetryOptions): Promise<T>;
|
|
73
|
+
/**
|
|
74
|
+
* Alias for withNamedRetry for backward compatibility
|
|
75
|
+
*/
|
|
76
|
+
export declare const withCircuitBreaker: typeof withNamedRetry;
|
|
77
|
+
/**
|
|
78
|
+
* Get circuit breaker health stats
|
|
79
|
+
*/
|
|
80
|
+
export declare function getHealthStats(breaker: CircuitBreaker): CircuitBreaker.Stats;
|
|
81
|
+
/**
|
|
82
|
+
* Check if error is retryable (basic implementation)
|
|
83
|
+
*/
|
|
84
|
+
export declare function isRetryableError(error: unknown): error is ErrorWithCode;
|
|
85
|
+
/**
|
|
86
|
+
* Check if error is transient for circuit breaker purposes
|
|
87
|
+
*/
|
|
88
|
+
export declare function isTransientError(error: unknown): error is ErrorWithCode;
|
|
89
|
+
/**
|
|
90
|
+
* Predefined retry configurations for different operation types
|
|
91
|
+
*/
|
|
92
|
+
export declare const RETRY_CONFIG: {
|
|
93
|
+
readonly AUTH_ERRORS: {
|
|
94
|
+
readonly maxRetries: 3;
|
|
95
|
+
readonly initialDelay: 1000;
|
|
96
|
+
readonly maxDelay: 10000;
|
|
97
|
+
readonly backoffFactor: 2;
|
|
98
|
+
readonly enableCircuitBreaker: true;
|
|
99
|
+
readonly circuitBreakerName: "vikunja-auth-connect";
|
|
100
|
+
};
|
|
101
|
+
readonly NETWORK_ERRORS: {
|
|
102
|
+
readonly maxRetries: 5;
|
|
103
|
+
readonly initialDelay: 500;
|
|
104
|
+
readonly maxDelay: 30000;
|
|
105
|
+
readonly backoffFactor: 1.5;
|
|
106
|
+
readonly enableCircuitBreaker: true;
|
|
107
|
+
readonly circuitBreakerName: "vikunja-api-operations";
|
|
108
|
+
};
|
|
109
|
+
readonly TASK_OPERATIONS: {
|
|
110
|
+
readonly maxRetries: 3;
|
|
111
|
+
readonly initialDelay: 1000;
|
|
112
|
+
readonly maxDelay: 15000;
|
|
113
|
+
readonly backoffFactor: 2;
|
|
114
|
+
readonly enableCircuitBreaker: true;
|
|
115
|
+
readonly circuitBreakerName: "vikunja-task-create";
|
|
116
|
+
};
|
|
117
|
+
readonly BULK_OPERATIONS: {
|
|
118
|
+
readonly maxRetries: 2;
|
|
119
|
+
readonly initialDelay: 2000;
|
|
120
|
+
readonly maxDelay: 20000;
|
|
121
|
+
readonly backoffFactor: 1.5;
|
|
122
|
+
readonly enableCircuitBreaker: true;
|
|
123
|
+
readonly circuitBreakerName: "vikunja-bulk-operations";
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Circuit breaker name constants for consistent naming across the application
|
|
128
|
+
*/
|
|
129
|
+
export declare const CIRCUIT_BREAKER_NAMES: {
|
|
130
|
+
readonly AUTH_CONNECT: "vikunja-auth-connect";
|
|
131
|
+
readonly AUTH_REFRESH: "vikunja-auth-refresh";
|
|
132
|
+
readonly AUTH_STATUS: "vikunja-auth-status";
|
|
133
|
+
readonly API_OPERATIONS: "vikunja-api-operations";
|
|
134
|
+
readonly CLIENT_OPERATIONS: "vikunja-client-operations";
|
|
135
|
+
readonly FILTER_OPERATIONS: "vikunja-filter-operations";
|
|
136
|
+
readonly TASK_CREATE: "vikunja-task-create";
|
|
137
|
+
readonly TASK_UPDATE: "vikunja-task-update";
|
|
138
|
+
readonly TASK_DELETE: "vikunja-task-delete";
|
|
139
|
+
readonly TASK_GET: "vikunja-task-get";
|
|
140
|
+
readonly TASK_LIST: "vikunja-task-list";
|
|
141
|
+
readonly TASK_RELATIONS: "vikunja-task-relations";
|
|
142
|
+
readonly TASK_ASSIGNEES: "vikunja-task-assignees";
|
|
143
|
+
readonly TASK_LABELS: "vikunja-task-labels";
|
|
144
|
+
readonly PROJECT_CRUD: "vikunja-project-crud";
|
|
145
|
+
readonly PROJECT_HIERARCHY: "vikunja-project-hierarchy";
|
|
146
|
+
readonly PROJECT_SHARING: "vikunja-project-sharing";
|
|
147
|
+
readonly BULK_OPERATIONS: "vikunja-bulk-operations";
|
|
148
|
+
readonly BULK_IMPORT: "vikunja-bulk-import";
|
|
149
|
+
readonly BULK_EXPORT: "vikunja-bulk-export";
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Execute task operations with task-specific circuit breaker
|
|
153
|
+
*/
|
|
154
|
+
export declare function withTaskRetry<T>(operation: () => Promise<T>, operationType: 'create' | 'update' | 'delete' | 'get', options?: RetryOptions): Promise<T>;
|
|
155
|
+
/**
|
|
156
|
+
* Execute bulk operations with bulk-specific circuit breaker
|
|
157
|
+
*/
|
|
158
|
+
export declare function withBulkRetry<T>(operation: () => Promise<T>, operationType: 'import' | 'export', options?: RetryOptions): Promise<T>;
|
|
159
|
+
export {};
|
|
160
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Production-Ready Retry with Opossum Circuit Breaker
|
|
4
|
+
* Replaces 374-line custom implementation with battle-tested patterns
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.CIRCUIT_BREAKER_NAMES = exports.RETRY_CONFIG = exports.withCircuitBreaker = exports.circuitBreakerRegistry = void 0;
|
|
11
|
+
exports.createCircuitBreaker = createCircuitBreaker;
|
|
12
|
+
exports.withRetry = withRetry;
|
|
13
|
+
exports.withNamedRetry = withNamedRetry;
|
|
14
|
+
exports.getHealthStats = getHealthStats;
|
|
15
|
+
exports.isRetryableError = isRetryableError;
|
|
16
|
+
exports.isTransientError = isTransientError;
|
|
17
|
+
exports.withTaskRetry = withTaskRetry;
|
|
18
|
+
exports.withBulkRetry = withBulkRetry;
|
|
19
|
+
const opossum_1 = __importDefault(require("opossum"));
|
|
20
|
+
const logger_1 = require("./logger");
|
|
21
|
+
const auth_error_handler_1 = require("./auth-error-handler");
|
|
22
|
+
/**
|
|
23
|
+
* Simple circuit breaker registry for tracking and managing circuit breakers
|
|
24
|
+
*/
|
|
25
|
+
class CircuitBreakerRegistry {
|
|
26
|
+
breakers = new Map();
|
|
27
|
+
register(name, breaker) {
|
|
28
|
+
this.breakers.set(name, breaker);
|
|
29
|
+
}
|
|
30
|
+
get(name) {
|
|
31
|
+
return this.breakers.get(name);
|
|
32
|
+
}
|
|
33
|
+
async resetAll() {
|
|
34
|
+
const promises = Array.from(this.breakers.values()).map(breaker => {
|
|
35
|
+
return new Promise((resolve) => {
|
|
36
|
+
if (breaker.opened) {
|
|
37
|
+
breaker.close();
|
|
38
|
+
}
|
|
39
|
+
resolve();
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
await Promise.all(promises);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Shuts down and forgets every registered breaker, including its
|
|
46
|
+
* accumulated failure/success stats. `resetAll` only closes breakers that
|
|
47
|
+
* are currently open — it leaves their rolling stats intact, so a breaker
|
|
48
|
+
* that tripped once would still be closer to tripping again. Test suites
|
|
49
|
+
* that exercise `vikunjaRestRequest` (which registers a real, named
|
|
50
|
+
* breaker per endpoint group) need full isolation between test cases;
|
|
51
|
+
* this is that reset.
|
|
52
|
+
*/
|
|
53
|
+
clear() {
|
|
54
|
+
for (const breaker of this.breakers.values()) {
|
|
55
|
+
breaker.shutdown();
|
|
56
|
+
}
|
|
57
|
+
this.breakers.clear();
|
|
58
|
+
}
|
|
59
|
+
getAllStats() {
|
|
60
|
+
const stats = {};
|
|
61
|
+
for (const [name, breaker] of this.breakers.entries()) {
|
|
62
|
+
stats[name] = breaker.stats;
|
|
63
|
+
}
|
|
64
|
+
return stats;
|
|
65
|
+
}
|
|
66
|
+
getAllStatsSync() {
|
|
67
|
+
return this.getAllStats();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.circuitBreakerRegistry = new CircuitBreakerRegistry();
|
|
71
|
+
/**
|
|
72
|
+
* Resolves after `ms` milliseconds, via a `setTimeout` that is `.unref()`d
|
|
73
|
+
* (mirrors the pattern opossum itself uses for its own internal timers — see
|
|
74
|
+
* `node_modules/opossum/lib/circuit.js`/`status.js`). `withRetry`'s
|
|
75
|
+
* exponential backoff (below) is the only place this module schedules a
|
|
76
|
+
* real (non-breaker-owned) timer; without `.unref()` a pending backoff delay
|
|
77
|
+
* (up to `maxDelay`, 30s by default) counts as an active handle keeping the
|
|
78
|
+
* process — or a `jest --runInBand` run — alive even though nothing is
|
|
79
|
+
* actually waiting on it to fire. `.unref()` only affects whether the timer
|
|
80
|
+
* alone can keep the event loop alive; it still fires normally and this
|
|
81
|
+
* function still resolves at the same time either way.
|
|
82
|
+
*/
|
|
83
|
+
function sleepUnref(ms) {
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
const timer = setTimeout(resolve, ms);
|
|
86
|
+
// Guards environments where `setTimeout` doesn't return an unref-able
|
|
87
|
+
// handle (e.g. a DOM/browser global returning a plain number) — not
|
|
88
|
+
// expected here (`testEnvironment: 'node'`), but matches opossum's own
|
|
89
|
+
// defensive check rather than assuming Node's timer shape.
|
|
90
|
+
if (typeof timer.unref === 'function') {
|
|
91
|
+
timer.unref();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
// Production-ready defaults
|
|
96
|
+
const DEFAULT_OPTIONS = {
|
|
97
|
+
maxRetries: 3,
|
|
98
|
+
timeout: 30000,
|
|
99
|
+
resetTimeout: 30000,
|
|
100
|
+
errorThresholdPercentage: 50,
|
|
101
|
+
volumeThreshold: 5,
|
|
102
|
+
initialDelay: 1000,
|
|
103
|
+
backoffFactor: 2,
|
|
104
|
+
maxDelay: 30000
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Simple circuit breaker factory using opossum directly.
|
|
108
|
+
*
|
|
109
|
+
* `operation` MUST be a stable function reference — not a closure captured
|
|
110
|
+
* per call-site invocation — because the registry caches the breaker (and
|
|
111
|
+
* therefore the action it was constructed with) by `name` and returns the
|
|
112
|
+
* cached instance on every subsequent call with that name, silently
|
|
113
|
+
* discarding whatever `operation` was passed that time. Passing a fresh
|
|
114
|
+
* closure each call under a shared/reused name was the exact bug fixed in
|
|
115
|
+
* the wave0 baseline (a later call's arguments got lost, and the FIRST
|
|
116
|
+
* closure ever registered under that name kept firing instead). Callers
|
|
117
|
+
* that need per-call arguments must give `operation` a signature that takes
|
|
118
|
+
* those arguments as parameters and pass them to `breaker.fire(...)` —
|
|
119
|
+
* never bake them into the closure.
|
|
120
|
+
*/
|
|
121
|
+
function createCircuitBreaker(operation, name, options = {}) {
|
|
122
|
+
// Check if a circuit breaker with this name already exists
|
|
123
|
+
const existingBreaker = exports.circuitBreakerRegistry.get(name);
|
|
124
|
+
if (existingBreaker) {
|
|
125
|
+
return existingBreaker;
|
|
126
|
+
}
|
|
127
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
128
|
+
const breaker = new opossum_1.default(operation, {
|
|
129
|
+
name,
|
|
130
|
+
timeout: opts.timeout,
|
|
131
|
+
resetTimeout: opts.resetTimeout,
|
|
132
|
+
errorThresholdPercentage: opts.errorThresholdPercentage,
|
|
133
|
+
volumeThreshold: opts.volumeThreshold
|
|
134
|
+
});
|
|
135
|
+
// Register with the global registry
|
|
136
|
+
exports.circuitBreakerRegistry.register(name, breaker);
|
|
137
|
+
// Essential logging only
|
|
138
|
+
breaker.on('open', () => logger_1.logger.warn(`Circuit breaker ${name} opened`));
|
|
139
|
+
breaker.on('close', () => logger_1.logger.info(`Circuit breaker ${name} closed`));
|
|
140
|
+
return breaker;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Execute operation with automatic retry and circuit breaking
|
|
144
|
+
*/
|
|
145
|
+
async function withRetry(operation, options = {}) {
|
|
146
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
147
|
+
let lastError;
|
|
148
|
+
let delay = opts.initialDelay || 1000;
|
|
149
|
+
// `?? 3`, not `|| 3`: 0 is a meaningful, valid value ("don't retry at
|
|
150
|
+
// all") and must not be coerced to the default of 3 the way `||` would.
|
|
151
|
+
const maxRetries = opts.maxRetries ?? 3;
|
|
152
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
153
|
+
try {
|
|
154
|
+
// Execute the operation directly. Note: we intentionally do NOT wrap
|
|
155
|
+
// this in a name-cached circuit breaker here. The breaker registry
|
|
156
|
+
// caches breakers by name and opossum binds the action closure at
|
|
157
|
+
// construction time, so a shared 'anonymous' breaker would silently
|
|
158
|
+
// re-fire whichever operation first created it instead of this one.
|
|
159
|
+
// Callers that want circuit-breaker semantics should use
|
|
160
|
+
// withNamedRetry/withTaskRetry/withBulkRetry with a real, unique name.
|
|
161
|
+
return await operation();
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
lastError = error;
|
|
165
|
+
// Check if we should retry this error
|
|
166
|
+
const shouldRetry = opts.shouldRetry
|
|
167
|
+
? opts.shouldRetry(error)
|
|
168
|
+
: isRetryableError(error);
|
|
169
|
+
// If this is the last attempt or error is not retryable, throw
|
|
170
|
+
if (attempt === maxRetries || !shouldRetry) {
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
// Log retry attempt
|
|
174
|
+
logger_1.logger.debug(`Retry attempt ${attempt + 1}/${maxRetries} after ${delay}ms`);
|
|
175
|
+
// Wait before retrying with exponential backoff
|
|
176
|
+
await sleepUnref(delay);
|
|
177
|
+
delay = Math.min(delay * (opts.backoffFactor || 2), opts.maxDelay || 30000);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
throw lastError;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Execute operation with named circuit breaker for stats
|
|
184
|
+
*/
|
|
185
|
+
async function withNamedRetry(operation, name, options = {}) {
|
|
186
|
+
const breaker = createCircuitBreaker(operation, name, options);
|
|
187
|
+
return breaker.fire();
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Alias for withNamedRetry for backward compatibility
|
|
191
|
+
*/
|
|
192
|
+
exports.withCircuitBreaker = withNamedRetry;
|
|
193
|
+
/**
|
|
194
|
+
* Get circuit breaker health stats
|
|
195
|
+
*/
|
|
196
|
+
function getHealthStats(breaker) {
|
|
197
|
+
return breaker.stats;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Check if error is retryable (basic implementation)
|
|
201
|
+
*/
|
|
202
|
+
function isRetryableError(error) {
|
|
203
|
+
if (error instanceof Error) {
|
|
204
|
+
// Authentication errors are retryable
|
|
205
|
+
if ((0, auth_error_handler_1.isAuthenticationError)(error)) {
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
const message = error.message.toLowerCase();
|
|
209
|
+
return message.includes('timeout') ||
|
|
210
|
+
message.includes('connection') ||
|
|
211
|
+
message.includes('network') ||
|
|
212
|
+
message.includes('rate limit') ||
|
|
213
|
+
error.code === 'ECONNRESET' ||
|
|
214
|
+
error.code === 'ETIMEDOUT';
|
|
215
|
+
}
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Check if error is transient for circuit breaker purposes
|
|
220
|
+
*/
|
|
221
|
+
function isTransientError(error) {
|
|
222
|
+
if (error instanceof Error) {
|
|
223
|
+
const message = error.message.toLowerCase();
|
|
224
|
+
return message.includes('timeout') ||
|
|
225
|
+
message.includes('timed out') ||
|
|
226
|
+
message.includes('connection') ||
|
|
227
|
+
message.includes('network') ||
|
|
228
|
+
message.includes('rate limit') ||
|
|
229
|
+
message.includes('socket') ||
|
|
230
|
+
message.includes('hang up') ||
|
|
231
|
+
message.includes('econnreset') ||
|
|
232
|
+
message.includes('etimedout') ||
|
|
233
|
+
message.includes('reset by peer') ||
|
|
234
|
+
message.includes('closed unexpectedly') ||
|
|
235
|
+
error.code === 'ECONNRESET' ||
|
|
236
|
+
error.code === 'ETIMEDOUT';
|
|
237
|
+
}
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Predefined retry configurations for different operation types
|
|
242
|
+
*/
|
|
243
|
+
exports.RETRY_CONFIG = {
|
|
244
|
+
AUTH_ERRORS: {
|
|
245
|
+
maxRetries: 3,
|
|
246
|
+
initialDelay: 1000,
|
|
247
|
+
maxDelay: 10000,
|
|
248
|
+
backoffFactor: 2,
|
|
249
|
+
enableCircuitBreaker: true,
|
|
250
|
+
circuitBreakerName: 'vikunja-auth-connect'
|
|
251
|
+
},
|
|
252
|
+
NETWORK_ERRORS: {
|
|
253
|
+
maxRetries: 5,
|
|
254
|
+
initialDelay: 500,
|
|
255
|
+
maxDelay: 30000,
|
|
256
|
+
backoffFactor: 1.5,
|
|
257
|
+
enableCircuitBreaker: true,
|
|
258
|
+
circuitBreakerName: 'vikunja-api-operations'
|
|
259
|
+
},
|
|
260
|
+
TASK_OPERATIONS: {
|
|
261
|
+
maxRetries: 3,
|
|
262
|
+
initialDelay: 1000,
|
|
263
|
+
maxDelay: 15000,
|
|
264
|
+
backoffFactor: 2,
|
|
265
|
+
enableCircuitBreaker: true,
|
|
266
|
+
circuitBreakerName: 'vikunja-task-create'
|
|
267
|
+
},
|
|
268
|
+
BULK_OPERATIONS: {
|
|
269
|
+
maxRetries: 2,
|
|
270
|
+
initialDelay: 2000,
|
|
271
|
+
maxDelay: 20000,
|
|
272
|
+
backoffFactor: 1.5,
|
|
273
|
+
enableCircuitBreaker: true,
|
|
274
|
+
circuitBreakerName: 'vikunja-bulk-operations'
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
/**
|
|
278
|
+
* Circuit breaker name constants for consistent naming across the application
|
|
279
|
+
*/
|
|
280
|
+
exports.CIRCUIT_BREAKER_NAMES = {
|
|
281
|
+
AUTH_CONNECT: 'vikunja-auth-connect',
|
|
282
|
+
AUTH_REFRESH: 'vikunja-auth-refresh',
|
|
283
|
+
AUTH_STATUS: 'vikunja-auth-status',
|
|
284
|
+
API_OPERATIONS: 'vikunja-api-operations',
|
|
285
|
+
CLIENT_OPERATIONS: 'vikunja-client-operations',
|
|
286
|
+
FILTER_OPERATIONS: 'vikunja-filter-operations',
|
|
287
|
+
TASK_CREATE: 'vikunja-task-create',
|
|
288
|
+
TASK_UPDATE: 'vikunja-task-update',
|
|
289
|
+
TASK_DELETE: 'vikunja-task-delete',
|
|
290
|
+
TASK_GET: 'vikunja-task-get',
|
|
291
|
+
TASK_LIST: 'vikunja-task-list',
|
|
292
|
+
TASK_RELATIONS: 'vikunja-task-relations',
|
|
293
|
+
TASK_ASSIGNEES: 'vikunja-task-assignees',
|
|
294
|
+
TASK_LABELS: 'vikunja-task-labels',
|
|
295
|
+
PROJECT_CRUD: 'vikunja-project-crud',
|
|
296
|
+
PROJECT_HIERARCHY: 'vikunja-project-hierarchy',
|
|
297
|
+
PROJECT_SHARING: 'vikunja-project-sharing',
|
|
298
|
+
BULK_OPERATIONS: 'vikunja-bulk-operations',
|
|
299
|
+
BULK_IMPORT: 'vikunja-bulk-import',
|
|
300
|
+
BULK_EXPORT: 'vikunja-bulk-export'
|
|
301
|
+
};
|
|
302
|
+
/**
|
|
303
|
+
* Execute task operations with task-specific circuit breaker
|
|
304
|
+
*/
|
|
305
|
+
async function withTaskRetry(operation, operationType, options = {}) {
|
|
306
|
+
const name = `vikunja-task-${operationType}`;
|
|
307
|
+
return withNamedRetry(operation, name, options);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Execute bulk operations with bulk-specific circuit breaker
|
|
311
|
+
*/
|
|
312
|
+
async function withBulkRetry(operation, operationType, options = {}) {
|
|
313
|
+
const name = `vikunja-bulk-${operationType}`;
|
|
314
|
+
return withNamedRetry(operation, name, options);
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AA0IH,oDA6BC;AAKD,8BA4CC;AAKD,wCAOC;AAUD,wCAEC;AAKD,4CAgBC;AAKD,4CAkBC;AAqED,sCAOC;AAKD,sCAOC;AAlXD,sDAAqC;AACrC,qCAAkC;AAClC,6DAA6D;AAE7D;;GAEG;AACH,MAAM,sBAAsB;IAClB,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAErD,QAAQ,CAAC,IAAY,EAAE,OAAuB;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAChE,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACnC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK;QACH,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,WAAW;QACT,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;CACF;AAEY,QAAA,sBAAsB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AAEnE;;;;;;;;;;;GAWG;AACH,SAAS,UAAU,CAAC,EAAU;IAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,sEAAsE;QACtE,oEAAoE;QACpE,uEAAuE;QACvE,2DAA2D;QAC3D,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACtC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAyBD,4BAA4B;AAC5B,MAAM,eAAe,GAAgD;IACnE,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,KAAK;IACd,YAAY,EAAE,KAAK;IACnB,wBAAwB,EAAE,EAAE;IAC5B,eAAe,EAAE,CAAC;IAClB,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE,KAAK;CAChB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,SAAgB,oBAAoB,CAClC,SAA0C,EAC1C,IAAY,EACZ,UAAwB,EAAE;IAE1B,2DAA2D;IAC3D,MAAM,eAAe,GAAG,8BAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAuD,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;IAEhD,MAAM,OAAO,GAAG,IAAI,iBAAc,CAAY,SAAS,EAAE;QACvD,IAAI;QACJ,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;QACvD,eAAe,EAAE,IAAI,CAAC,eAAe;KACtC,CAAC,CAAC;IAEH,oCAAoC;IACpC,8BAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAoC,CAAC,CAAC;IAE5E,yBAAyB;IACzB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,eAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,SAAS,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,SAAS,CAAC,CAAC,CAAC;IAEzE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAC7B,SAA2B,EAC3B,UAAwB,EAAE;IAE1B,MAAM,IAAI,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;IAChD,IAAI,SAAkB,CAAC;IACvB,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;IACtC,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;IAExC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,qEAAqE;YACrE,mEAAmE;YACnE,kEAAkE;YAClE,oEAAoE;YACpE,oEAAoE;YACpE,yDAAyD;YACzD,uEAAuE;YACvE,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAElB,sCAAsC;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW;gBAClC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAc,CAAC;gBAClC,CAAC,CAAC,gBAAgB,CAAC,KAAc,CAAC,CAAC;YAErC,+DAA+D;YAC/D,IAAI,OAAO,KAAK,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC3C,MAAM,KAAK,CAAC;YACd,CAAC;YAED,oBAAoB;YACpB,eAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,GAAG,CAAC,IAAI,UAAU,UAAU,KAAK,IAAI,CAAC,CAAC;YAE5E,gDAAgD;YAChD,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;YACxB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,cAAc,CAClC,SAA2B,EAC3B,IAAY,EACZ,UAAwB,EAAE;IAE1B,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/D,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACU,QAAA,kBAAkB,GAAG,cAAc,CAAC;AAEjD;;GAEG;AACH,SAAgB,cAAc,CAAC,OAAuB;IACpD,OAAO,OAAO,CAAC,KAAK,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,sCAAsC;QACtC,IAAI,IAAA,0CAAqB,EAAC,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC7B,KAAuB,CAAC,IAAI,KAAK,YAAY;YAC7C,KAAuB,CAAC,IAAI,KAAK,WAAW,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACtC,KAAuB,CAAC,IAAI,KAAK,YAAY;YAC7C,KAAuB,CAAC,IAAI,KAAK,WAAW,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,WAAW,EAAE;QACX,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,CAAC;QAChB,oBAAoB,EAAE,IAAI;QAC1B,kBAAkB,EAAE,sBAAsB;KAC3C;IACD,cAAc,EAAE;QACd,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,GAAG;QACjB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,GAAG;QAClB,oBAAoB,EAAE,IAAI;QAC1B,kBAAkB,EAAE,wBAAwB;KAC7C;IACD,eAAe,EAAE;QACf,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,CAAC;QAChB,oBAAoB,EAAE,IAAI;QAC1B,kBAAkB,EAAE,qBAAqB;KAC1C;IACD,eAAe,EAAE;QACf,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,GAAG;QAClB,oBAAoB,EAAE,IAAI;QAC1B,kBAAkB,EAAE,yBAAyB;KAC9C;CACO,CAAC;AAEX;;GAEG;AACU,QAAA,qBAAqB,GAAG;IACnC,YAAY,EAAE,sBAAsB;IACpC,YAAY,EAAE,sBAAsB;IACpC,WAAW,EAAE,qBAAqB;IAClC,cAAc,EAAE,wBAAwB;IACxC,iBAAiB,EAAE,2BAA2B;IAC9C,iBAAiB,EAAE,2BAA2B;IAC9C,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,qBAAqB;IAClC,QAAQ,EAAE,kBAAkB;IAC5B,SAAS,EAAE,mBAAmB;IAC9B,cAAc,EAAE,wBAAwB;IACxC,cAAc,EAAE,wBAAwB;IACxC,WAAW,EAAE,qBAAqB;IAClC,YAAY,EAAE,sBAAsB;IACpC,iBAAiB,EAAE,2BAA2B;IAC9C,eAAe,EAAE,yBAAyB;IAC1C,eAAe,EAAE,yBAAyB;IAC1C,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,qBAAqB;CAC1B,CAAC;AAEX;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,SAA2B,EAC3B,aAAqD,EACrD,UAAwB,EAAE;IAE1B,MAAM,IAAI,GAAG,gBAAgB,aAAa,EAAE,CAAC;IAC7C,OAAO,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CACjC,SAA2B,EAC3B,aAAkC,EAClC,UAAwB,EAAE;IAE1B,MAAM,IAAI,GAAG,gBAAgB,aAAa,EAAE,CAAC;IAC7C,OAAO,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced security utilities for comprehensive credential masking and sensitive data protection
|
|
3
|
+
* Prevents credential exposure in logs, monitoring systems, and error reports
|
|
4
|
+
*
|
|
5
|
+
* Security Features:
|
|
6
|
+
* - Comprehensive sensitive key detection with regex patterns
|
|
7
|
+
* - Case-insensitive matching with Unicode normalization
|
|
8
|
+
* - Credential format detection (JWT, API keys, database URIs, etc.)
|
|
9
|
+
* - Protection against encoding bypasses and Unicode attacks
|
|
10
|
+
* - Performance-optimized for large datasets
|
|
11
|
+
* - Integration with input sanitization layer for comprehensive protection
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Enhanced credential masking that handles various formats
|
|
15
|
+
* Shows only the first 4 characters followed by ellipsis for long credentials
|
|
16
|
+
* Uses '[REDACTED]' for short credentials
|
|
17
|
+
*
|
|
18
|
+
* @param credential - The credential to mask (API token, password, etc.)
|
|
19
|
+
* @returns Masked credential string or empty string if input is invalid
|
|
20
|
+
*/
|
|
21
|
+
export declare function maskCredential(credential: string | undefined | null): string;
|
|
22
|
+
/**
|
|
23
|
+
* Masks sensitive information in URLs for logging
|
|
24
|
+
* Enhanced detection of sensitive path components and query parameters
|
|
25
|
+
*
|
|
26
|
+
* @param url - The URL to mask
|
|
27
|
+
* @returns Masked URL string or original if not a valid URL
|
|
28
|
+
*/
|
|
29
|
+
export declare function maskUrl(url: string | undefined | null): string;
|
|
30
|
+
/**
|
|
31
|
+
* Enhanced log data sanitization with comprehensive credential masking
|
|
32
|
+
* Recursively processes nested objects and arrays with advanced pattern detection
|
|
33
|
+
*
|
|
34
|
+
* @param data - The data object to sanitize
|
|
35
|
+
* @returns Sanitized data with masked sensitive fields
|
|
36
|
+
*/
|
|
37
|
+
export declare function sanitizeLogData(data: unknown): unknown;
|
|
38
|
+
/**
|
|
39
|
+
* Creates a secure configuration object for logging
|
|
40
|
+
* Masks sensitive environment variables and configuration values
|
|
41
|
+
*
|
|
42
|
+
* @param config - Configuration object to sanitize
|
|
43
|
+
* @returns Sanitized configuration for safe logging
|
|
44
|
+
*/
|
|
45
|
+
export declare function createSecureLogConfig(config: Record<string, unknown>): Record<string, unknown>;
|
|
46
|
+
/**
|
|
47
|
+
* Generates a safe connection status message with masked credentials
|
|
48
|
+
* Enhanced with comprehensive URL and token masking
|
|
49
|
+
*
|
|
50
|
+
* @param url - Connection URL
|
|
51
|
+
* @param token - API token or credential
|
|
52
|
+
* @param authType - Type of authentication being used
|
|
53
|
+
* @returns Safe status message for logging
|
|
54
|
+
*/
|
|
55
|
+
export declare function createSecureConnectionMessage(url: string | undefined, token: string | undefined, authType?: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Performance utility to clear the normalized key cache
|
|
58
|
+
* Useful for testing or memory management in long-running processes
|
|
59
|
+
*/
|
|
60
|
+
export declare function clearSecurityCache(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Gets cache statistics for performance monitoring
|
|
63
|
+
*
|
|
64
|
+
* @returns Object containing cache size and performance metrics
|
|
65
|
+
*/
|
|
66
|
+
export declare function getSecurityCacheStats(): {
|
|
67
|
+
size: number;
|
|
68
|
+
maxSize: number;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/utils/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8KH;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAgB5E;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAyC9D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAEtD;AAoFD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9F;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CASR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAKzE"}
|