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,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Filter validation for task filtering operations
|
|
4
|
+
* Handles validation of filter expressions and task listing parameters
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.FilterValidator = void 0;
|
|
8
|
+
const types_1 = require("../../types");
|
|
9
|
+
const filters_1 = require("../../utils/filters");
|
|
10
|
+
const memory_1 = require("../../utils/memory");
|
|
11
|
+
const logger_1 = require("../../utils/logger");
|
|
12
|
+
/**
|
|
13
|
+
* Validates filter parameters for task listing operations
|
|
14
|
+
*/
|
|
15
|
+
exports.FilterValidator = {
|
|
16
|
+
/**
|
|
17
|
+
* Validates and processes filter string or filter ID
|
|
18
|
+
*/
|
|
19
|
+
async validateAndParseFilter(args, storage) {
|
|
20
|
+
let filterExpression = null;
|
|
21
|
+
let filterString;
|
|
22
|
+
const validationWarnings = [];
|
|
23
|
+
try {
|
|
24
|
+
// Handle filter - either direct filter string or saved filter ID
|
|
25
|
+
if (args.filterId) {
|
|
26
|
+
const savedFilter = await storage.get(args.filterId);
|
|
27
|
+
if (!savedFilter) {
|
|
28
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Filter with id ${args.filterId} not found`);
|
|
29
|
+
}
|
|
30
|
+
filterString = savedFilter.filter;
|
|
31
|
+
}
|
|
32
|
+
else if (args.filter !== undefined) {
|
|
33
|
+
filterString = args.filter;
|
|
34
|
+
}
|
|
35
|
+
// Parse the filter string for client-side filtering
|
|
36
|
+
if (filterString) {
|
|
37
|
+
const parseResult = (0, filters_1.parseFilterString)(filterString);
|
|
38
|
+
if (parseResult.error) {
|
|
39
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Invalid filter syntax: ${parseResult.error.message}${parseResult.error.context ? `\n${parseResult.error.context}` : ''}`);
|
|
40
|
+
}
|
|
41
|
+
filterExpression = parseResult.expression;
|
|
42
|
+
// Log that we're preparing to attempt hybrid filtering
|
|
43
|
+
logger_1.logger.info('Preparing hybrid filtering (server-side attempt + client-side fallback)', {
|
|
44
|
+
filter: filterString,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return { filterExpression, filterString, validationWarnings };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error instanceof types_1.MCPError) {
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Filter validation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
/**
|
|
57
|
+
* Validates pagination and memory constraints
|
|
58
|
+
*/
|
|
59
|
+
validateMemoryConstraints(args, requestedPageSize) {
|
|
60
|
+
const warnings = [];
|
|
61
|
+
// Validate pagination limits for memory protection with enhanced analysis
|
|
62
|
+
const taskCountValidation = (0, memory_1.validateTaskCountLimit)(requestedPageSize, undefined, args.filter ? {
|
|
63
|
+
filterExpression: args.filter,
|
|
64
|
+
operationType: 'list'
|
|
65
|
+
} : undefined);
|
|
66
|
+
if (!taskCountValidation.allowed) {
|
|
67
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Task count limit exceeded. Requested: ${requestedPageSize}, Max allowed: ${taskCountValidation.maxAllowed}. ` +
|
|
68
|
+
`Estimated memory usage: ${taskCountValidation.estimatedMemoryMB}MB (risk: ${taskCountValidation.riskLevel}). ` +
|
|
69
|
+
'Reduce the perPage parameter, use pagination with smaller page sizes, or apply more specific filters.');
|
|
70
|
+
}
|
|
71
|
+
// Add warnings for large page sizes
|
|
72
|
+
if (requestedPageSize > 500) {
|
|
73
|
+
warnings.push(`Large page size (${requestedPageSize}) may impact performance. Consider using smaller pages or more specific filters.`);
|
|
74
|
+
}
|
|
75
|
+
// Include enhanced memory validation warnings
|
|
76
|
+
if (taskCountValidation.warnings.length > 0) {
|
|
77
|
+
warnings.push(...taskCountValidation.warnings);
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
isValid: true,
|
|
81
|
+
warnings,
|
|
82
|
+
maxAllowed: taskCountValidation.maxAllowed
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
/**
|
|
86
|
+
* Validates the actual loaded task count against limits
|
|
87
|
+
*/
|
|
88
|
+
validateLoadedTasks(actualTaskCount, sampleTask) {
|
|
89
|
+
const warnings = [];
|
|
90
|
+
const finalTaskCountValidation = (0, memory_1.validateTaskCountLimit)(actualTaskCount, sampleTask);
|
|
91
|
+
if (!finalTaskCountValidation.allowed) {
|
|
92
|
+
// Log warning but don't fail since tasks are already loaded
|
|
93
|
+
logger_1.logger.warn('Loaded task count exceeds recommended limits', {
|
|
94
|
+
actualCount: actualTaskCount,
|
|
95
|
+
maxRecommended: finalTaskCountValidation.maxAllowed,
|
|
96
|
+
estimatedMemoryMB: finalTaskCountValidation.estimatedMemoryMB,
|
|
97
|
+
riskLevel: finalTaskCountValidation.riskLevel
|
|
98
|
+
});
|
|
99
|
+
warnings.push(`Loaded ${actualTaskCount} tasks, which exceeds recommended limit of ${finalTaskCountValidation.maxAllowed}. ` +
|
|
100
|
+
`Estimated memory usage: ${finalTaskCountValidation.estimatedMemoryMB}MB (risk: ${finalTaskCountValidation.riskLevel}).`);
|
|
101
|
+
// For extremely large datasets, still enforce hard limits
|
|
102
|
+
if (actualTaskCount > finalTaskCountValidation.maxAllowed * 1.5) {
|
|
103
|
+
return {
|
|
104
|
+
isValid: false,
|
|
105
|
+
warnings,
|
|
106
|
+
shouldThrow: true,
|
|
107
|
+
riskLevel: finalTaskCountValidation.riskLevel,
|
|
108
|
+
estimatedMemoryMB: finalTaskCountValidation.estimatedMemoryMB
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Include warnings from enhanced validation
|
|
113
|
+
if (finalTaskCountValidation.warnings.length > 0) {
|
|
114
|
+
warnings.push(...finalTaskCountValidation.warnings);
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
isValid: true,
|
|
118
|
+
warnings,
|
|
119
|
+
shouldThrow: false,
|
|
120
|
+
riskLevel: finalTaskCountValidation.riskLevel,
|
|
121
|
+
estimatedMemoryMB: finalTaskCountValidation.estimatedMemoryMB
|
|
122
|
+
};
|
|
123
|
+
},
|
|
124
|
+
/**
|
|
125
|
+
* Validates task listing arguments
|
|
126
|
+
*/
|
|
127
|
+
validateTaskListingArgs(args) {
|
|
128
|
+
const errors = [];
|
|
129
|
+
// Validate numeric parameters
|
|
130
|
+
if (args.page !== undefined && (args.page < 1 || !Number.isInteger(args.page))) {
|
|
131
|
+
errors.push('Page number must be a positive integer');
|
|
132
|
+
}
|
|
133
|
+
if (args.perPage !== undefined && (args.perPage < 1 || !Number.isInteger(args.perPage))) {
|
|
134
|
+
errors.push('Per page count must be a positive integer');
|
|
135
|
+
}
|
|
136
|
+
if (args.projectId !== undefined && (args.projectId < 1 || !Number.isInteger(args.projectId))) {
|
|
137
|
+
errors.push('Project ID must be a positive integer');
|
|
138
|
+
}
|
|
139
|
+
// Validate boolean parameters
|
|
140
|
+
if (args.done !== undefined && typeof args.done !== 'boolean') {
|
|
141
|
+
errors.push('Done parameter must be a boolean value');
|
|
142
|
+
}
|
|
143
|
+
// Validate string parameters
|
|
144
|
+
if (args.search !== undefined && typeof args.search !== 'string') {
|
|
145
|
+
errors.push('Search parameter must be a string');
|
|
146
|
+
}
|
|
147
|
+
if (args.sort !== undefined && typeof args.sort !== 'string') {
|
|
148
|
+
errors.push('Sort parameter must be a string');
|
|
149
|
+
}
|
|
150
|
+
if (args.filter !== undefined && typeof args.filter !== 'string') {
|
|
151
|
+
errors.push('Filter parameter must be a string');
|
|
152
|
+
}
|
|
153
|
+
if (args.filterId !== undefined && typeof args.filterId !== 'string') {
|
|
154
|
+
errors.push('Filter ID parameter must be a string');
|
|
155
|
+
}
|
|
156
|
+
return errors;
|
|
157
|
+
},
|
|
158
|
+
/**
|
|
159
|
+
* Performs comprehensive validation of task filtering parameters
|
|
160
|
+
*/
|
|
161
|
+
async validateTaskFiltering(args, storage, _config = {}) {
|
|
162
|
+
const allWarnings = [];
|
|
163
|
+
// Validate basic arguments
|
|
164
|
+
const argValidationErrors = this.validateTaskListingArgs(args);
|
|
165
|
+
if (argValidationErrors.length > 0) {
|
|
166
|
+
throw new types_1.MCPError(types_1.ErrorCode.VALIDATION_ERROR, `Invalid task listing arguments: ${argValidationErrors.join(', ')}`);
|
|
167
|
+
}
|
|
168
|
+
// Validate and parse filter
|
|
169
|
+
const filterValidation = await this.validateAndParseFilter(args, storage);
|
|
170
|
+
allWarnings.push(...filterValidation.validationWarnings);
|
|
171
|
+
// Validate memory constraints
|
|
172
|
+
const pageSize = args.perPage || 1000; // Default pagination
|
|
173
|
+
const memoryValidation = this.validateMemoryConstraints(args, pageSize);
|
|
174
|
+
allWarnings.push(...memoryValidation.warnings);
|
|
175
|
+
return {
|
|
176
|
+
filterExpression: filterValidation.filterExpression,
|
|
177
|
+
filterString: filterValidation.filterString,
|
|
178
|
+
validationWarnings: allWarnings,
|
|
179
|
+
memoryValidation
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
//# sourceMappingURL=FilterValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterValidator.js","sourceRoot":"","sources":["../../../src/storage/filtering/FilterValidator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAKH,uCAAkD;AAClD,iDAAwD;AACxD,+CAA4D;AAC5D,+CAA4C;AAK5C;;GAEG;AACU,QAAA,eAAe,GAAG;IAC7B;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAC1B,IAAqB,EACrB,OAA0B;QAM1B,IAAI,gBAAgB,GAA4B,IAAI,CAAC;QACrD,IAAI,YAAgC,CAAC;QACrC,MAAM,kBAAkB,GAAa,EAAE,CAAC;QAExC,IAAI,CAAC;YACH,iEAAiE;YACjE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,kBAAkB,IAAI,CAAC,QAAQ,YAAY,CAC5C,CAAC;gBACJ,CAAC;gBACD,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;YACpC,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACrC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;YAC7B,CAAC;YAED,oDAAoD;YACpD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,WAAW,GAAgB,IAAA,2BAAiB,EAAC,YAAY,CAAC,CAAC;gBACjE,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;oBACtB,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,0BAA0B,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1H,CAAC;gBACJ,CAAC;gBACD,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC;gBAE1C,uDAAuD;gBACvD,eAAM,CAAC,IAAI,CAAC,yEAAyE,EAAE;oBACrF,MAAM,EAAE,YAAY;iBACrB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,gBAAQ,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,yBAAyB,CACvB,IAAqB,EACrB,iBAAyB;QAMzB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,0EAA0E;QAC1E,MAAM,mBAAmB,GAAG,IAAA,+BAAsB,EAChD,iBAAiB,EACjB,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACZ,gBAAgB,EAAE,IAAI,CAAC,MAAM;YAC7B,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC,CAAC,SAAS,CACd,CAAC;QAEF,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,yCAAyC,iBAAiB,kBAAkB,mBAAmB,CAAC,UAAU,IAAI;gBAC9G,2BAA2B,mBAAmB,CAAC,iBAAiB,aAAa,mBAAmB,CAAC,SAAS,KAAK;gBAC/G,uGAAuG,CACxG,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,IAAI,iBAAiB,GAAG,GAAG,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,oBAAoB,iBAAiB,kFAAkF,CAAC,CAAC;QACzI,CAAC;QAED,8CAA8C;QAC9C,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,UAAU,EAAE,mBAAmB,CAAC,UAAU;SAO3C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,eAAuB,EAAE,UAAiB;QAO5D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,wBAAwB,GAAG,IAAA,+BAAsB,EAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAErF,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,CAAC;YACtC,4DAA4D;YAC5D,eAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;gBAC1D,WAAW,EAAE,eAAe;gBAC5B,cAAc,EAAE,wBAAwB,CAAC,UAAU;gBACnD,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB;gBAC7D,SAAS,EAAE,wBAAwB,CAAC,SAAS;aAC9C,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CACX,UAAU,eAAe,8CAA8C,wBAAwB,CAAC,UAAU,IAAI;gBAC9G,2BAA2B,wBAAwB,CAAC,iBAAiB,aAAa,wBAAwB,CAAC,SAAS,IAAI,CACzH,CAAC;YAEF,0DAA0D;YAC1D,IAAI,eAAe,GAAG,wBAAwB,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAChE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ;oBACR,WAAW,EAAE,IAAI;oBACjB,SAAS,EAAE,wBAAwB,CAAC,SAAS;oBAC7C,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB;iBAC9D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,IAAI,wBAAwB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,wBAAwB,CAAC,SAAS;YAC7C,iBAAiB,EAAE,wBAAwB,CAAC,iBAAiB;SAC9D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,IAAqB;QAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,8BAA8B;QAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/E,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACxF,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC9F,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;QAED,6BAA6B;QAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrE,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CACzB,IAAqB,EACrB,OAA0B,EAC1B,UAAsC,EAAE;QAWxC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,2BAA2B;QAC3B,MAAM,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,gBAAQ,CAChB,iBAAS,CAAC,gBAAgB,EAC1B,mCAAmC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpE,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1E,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QAEzD,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,qBAAqB;QAC5D,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxE,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE/C,OAAO;YACL,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB;YACnD,YAAY,EAAE,gBAAgB,CAAC,YAAY;YAC3C,kBAAkB,EAAE,WAAW;YAC/B,gBAAgB;SACjB,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simplified storage module - eliminates over-engineering
|
|
3
|
+
*
|
|
4
|
+
* Replaces 33 files and 9,803 lines with essential functionality:
|
|
5
|
+
* - Session-isolated filter storage
|
|
6
|
+
* - Thread-safe operations with mutex
|
|
7
|
+
* - Same external API as before
|
|
8
|
+
*/
|
|
9
|
+
import { SimpleFilterStorage, storageManager, FilterStorageManager } from './SimpleFilterStorage';
|
|
10
|
+
import type { FilterStorage, SavedFilter } from '../types/filters';
|
|
11
|
+
import { StorageDataError } from '../utils/storage-errors';
|
|
12
|
+
export { SimpleFilterStorage, storageManager, FilterStorageManager };
|
|
13
|
+
export type { FilterStorage, SavedFilter };
|
|
14
|
+
export { resolveTemplatesPersistPath, loadTemplatesFile, writeTemplatesFileAtomic, } from './templateFileStore';
|
|
15
|
+
export type { PersistedTemplateRecord } from './templateFileStore';
|
|
16
|
+
export { StorageDataError };
|
|
17
|
+
/**
|
|
18
|
+
* Factory function to create filter storage instance
|
|
19
|
+
* (Maintains API compatibility with previous code)
|
|
20
|
+
*/
|
|
21
|
+
export declare function createFilterStorage(sessionId: string, userId?: string, apiUrl?: string, _forcePersistent?: boolean): Promise<FilterStorage>;
|
|
22
|
+
/**
|
|
23
|
+
* Get storage statistics for all active sessions
|
|
24
|
+
*/
|
|
25
|
+
export declare function getAllStorageStats(): Promise<{
|
|
26
|
+
persistentSessions: Array<Record<string, never>>;
|
|
27
|
+
memorySessions: Array<{
|
|
28
|
+
sessionId: string;
|
|
29
|
+
filterCount: number;
|
|
30
|
+
createdAt: Date;
|
|
31
|
+
lastAccessAt: Date;
|
|
32
|
+
memoryUsageKb: number;
|
|
33
|
+
}>;
|
|
34
|
+
totalSessions: number;
|
|
35
|
+
totalFilters: number;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Perform health check on storage system
|
|
39
|
+
*/
|
|
40
|
+
export declare function healthCheckAllStorage(): Promise<{
|
|
41
|
+
overall: 'healthy' | 'degraded' | 'unhealthy';
|
|
42
|
+
persistent: {
|
|
43
|
+
healthy: boolean;
|
|
44
|
+
sessions: Array<Record<string, never>>;
|
|
45
|
+
};
|
|
46
|
+
memory: {
|
|
47
|
+
healthy: boolean;
|
|
48
|
+
sessionCount: number;
|
|
49
|
+
};
|
|
50
|
+
details?: Record<string, unknown>;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Migration utility (no-op in simplified version)
|
|
54
|
+
*/
|
|
55
|
+
export declare function migrateMemoryToPersistent(): {
|
|
56
|
+
success: boolean;
|
|
57
|
+
migratedSessions: number;
|
|
58
|
+
migratedFilters: number;
|
|
59
|
+
errors: string[];
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC;AAGrE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AAK3C,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,gBAAgB,UAAQ,GACvB,OAAO,CAAC,aAAa,CAAC,CASxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACjD,cAAc,EAAE,KAAK,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,IAAI,CAAC;QAChB,YAAY,EAAE,IAAI,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAwBD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,OAAO,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC9C,UAAU,EAAE;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;KACxC,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC,CAwCD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAQA"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Simplified storage module - eliminates over-engineering
|
|
4
|
+
*
|
|
5
|
+
* Replaces 33 files and 9,803 lines with essential functionality:
|
|
6
|
+
* - Session-isolated filter storage
|
|
7
|
+
* - Thread-safe operations with mutex
|
|
8
|
+
* - Same external API as before
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.StorageDataError = exports.writeTemplatesFileAtomic = exports.loadTemplatesFile = exports.resolveTemplatesPersistPath = exports.FilterStorageManager = exports.storageManager = exports.SimpleFilterStorage = void 0;
|
|
12
|
+
exports.createFilterStorage = createFilterStorage;
|
|
13
|
+
exports.getAllStorageStats = getAllStorageStats;
|
|
14
|
+
exports.healthCheckAllStorage = healthCheckAllStorage;
|
|
15
|
+
exports.migrateMemoryToPersistent = migrateMemoryToPersistent;
|
|
16
|
+
const logger_1 = require("../utils/logger");
|
|
17
|
+
const SimpleFilterStorage_1 = require("./SimpleFilterStorage");
|
|
18
|
+
Object.defineProperty(exports, "SimpleFilterStorage", { enumerable: true, get: function () { return SimpleFilterStorage_1.SimpleFilterStorage; } });
|
|
19
|
+
Object.defineProperty(exports, "storageManager", { enumerable: true, get: function () { return SimpleFilterStorage_1.storageManager; } });
|
|
20
|
+
Object.defineProperty(exports, "FilterStorageManager", { enumerable: true, get: function () { return SimpleFilterStorage_1.FilterStorageManager; } });
|
|
21
|
+
const storage_errors_1 = require("../utils/storage-errors");
|
|
22
|
+
Object.defineProperty(exports, "StorageDataError", { enumerable: true, get: function () { return storage_errors_1.StorageDataError; } });
|
|
23
|
+
// Opt-in file-backed persistence for templates (templates.ts is the only
|
|
24
|
+
// consumer — see templateFileStore.ts's header for why this isn't a general
|
|
25
|
+
// SimpleFilterStorage adapter).
|
|
26
|
+
var templateFileStore_1 = require("./templateFileStore");
|
|
27
|
+
Object.defineProperty(exports, "resolveTemplatesPersistPath", { enumerable: true, get: function () { return templateFileStore_1.resolveTemplatesPersistPath; } });
|
|
28
|
+
Object.defineProperty(exports, "loadTemplatesFile", { enumerable: true, get: function () { return templateFileStore_1.loadTemplatesFile; } });
|
|
29
|
+
Object.defineProperty(exports, "writeTemplatesFileAtomic", { enumerable: true, get: function () { return templateFileStore_1.writeTemplatesFileAtomic; } });
|
|
30
|
+
/**
|
|
31
|
+
* Factory function to create filter storage instance
|
|
32
|
+
* (Maintains API compatibility with previous code)
|
|
33
|
+
*/
|
|
34
|
+
async function createFilterStorage(sessionId, userId, apiUrl, _forcePersistent = false) {
|
|
35
|
+
// Ignore forcePersistent - always use simple in-memory storage
|
|
36
|
+
logger_1.logger.debug('Creating simple filter storage', {
|
|
37
|
+
sessionId,
|
|
38
|
+
userId,
|
|
39
|
+
apiUrl,
|
|
40
|
+
});
|
|
41
|
+
return await SimpleFilterStorage_1.storageManager.getStorage(sessionId, userId, apiUrl);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get storage statistics for all active sessions
|
|
45
|
+
*/
|
|
46
|
+
async function getAllStorageStats() {
|
|
47
|
+
try {
|
|
48
|
+
const memoryStats = await SimpleFilterStorage_1.storageManager.getAllStats();
|
|
49
|
+
const totalSessions = memoryStats.length;
|
|
50
|
+
const totalFilters = memoryStats.reduce((sum, s) => sum + s.filterCount, 0);
|
|
51
|
+
return {
|
|
52
|
+
persistentSessions: [], // No persistent storage in simplified version
|
|
53
|
+
memorySessions: memoryStats,
|
|
54
|
+
totalSessions,
|
|
55
|
+
totalFilters,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
logger_1.logger.error('Failed to get storage statistics', {
|
|
60
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
persistentSessions: [],
|
|
64
|
+
memorySessions: [],
|
|
65
|
+
totalSessions: 0,
|
|
66
|
+
totalFilters: 0,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Perform health check on storage system
|
|
72
|
+
*/
|
|
73
|
+
async function healthCheckAllStorage() {
|
|
74
|
+
try {
|
|
75
|
+
const memoryStats = await SimpleFilterStorage_1.storageManager.getAllStats();
|
|
76
|
+
return {
|
|
77
|
+
overall: 'healthy',
|
|
78
|
+
persistent: {
|
|
79
|
+
healthy: true, // Not applicable in simplified version
|
|
80
|
+
sessions: [],
|
|
81
|
+
},
|
|
82
|
+
memory: {
|
|
83
|
+
healthy: true,
|
|
84
|
+
sessionCount: memoryStats.length,
|
|
85
|
+
},
|
|
86
|
+
details: {
|
|
87
|
+
timestamp: new Date().toISOString(),
|
|
88
|
+
storageType: 'memory',
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
logger_1.logger.error('Failed to perform storage health check', {
|
|
94
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
95
|
+
});
|
|
96
|
+
return {
|
|
97
|
+
overall: 'unhealthy',
|
|
98
|
+
persistent: {
|
|
99
|
+
healthy: true,
|
|
100
|
+
sessions: [],
|
|
101
|
+
},
|
|
102
|
+
memory: {
|
|
103
|
+
healthy: false,
|
|
104
|
+
sessionCount: 0,
|
|
105
|
+
},
|
|
106
|
+
details: {
|
|
107
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
108
|
+
timestamp: new Date().toISOString(),
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Migration utility (no-op in simplified version)
|
|
115
|
+
*/
|
|
116
|
+
function migrateMemoryToPersistent() {
|
|
117
|
+
logger_1.logger.info('Migration not needed - using simplified storage');
|
|
118
|
+
return {
|
|
119
|
+
success: true,
|
|
120
|
+
migratedSessions: 0,
|
|
121
|
+
migratedFilters: 0,
|
|
122
|
+
errors: [],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opt-in file-backed persistence for templates.
|
|
3
|
+
*
|
|
4
|
+
* Templates are in-memory only by default (backed by `SimpleFilterStorage`,
|
|
5
|
+
* session-scoped, lost on process restart — see docs/STORAGE.md). When a
|
|
6
|
+
* persist path is configured (`templates.persistPath` config key, or the
|
|
7
|
+
* `VIKUNJA_MCP_TEMPLATES_FILE` env var, which wins — see
|
|
8
|
+
* docs/CONFIGURATION.md), `src/tools/templates.ts` write-throughs the full
|
|
9
|
+
* template set to that file on every mutation and reloads it the first time
|
|
10
|
+
* templates storage is touched in a process.
|
|
11
|
+
*
|
|
12
|
+
* This is intentionally *not* a general-purpose persistence adapter bolted
|
|
13
|
+
* onto `SimpleFilterStorage`: templates.ts is the only consumer of
|
|
14
|
+
* durability today (owner decision, see the N3-templates-persistence work
|
|
15
|
+
* item), so this module stays scoped to templates rather than growing into a
|
|
16
|
+
* second storage backend for saved filters. SQLite was evaluated for this
|
|
17
|
+
* and parked — native-dep cost outweighs the need for a single opt-in JSON
|
|
18
|
+
* file (see docs/ROADMAP.md).
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* A single persisted template entry. `data` is an opaque JSON-serialized
|
|
22
|
+
* blob (the `TemplateData` shape from templates.ts) — this module doesn't
|
|
23
|
+
* need to know its internal fields, only that it round-trips.
|
|
24
|
+
*/
|
|
25
|
+
export interface PersistedTemplateRecord {
|
|
26
|
+
/** The template's own id (`template_<timestamp>`), used for lookups. */
|
|
27
|
+
id: string;
|
|
28
|
+
/** Same as `id` today — kept distinct for forward-compatibility with the
|
|
29
|
+
* underlying SavedFilter-shaped storage record. */
|
|
30
|
+
name: string;
|
|
31
|
+
data: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the effective templates persistence path.
|
|
35
|
+
*
|
|
36
|
+
* `VIKUNJA_MCP_TEMPLATES_FILE` env var wins over the `templates.persistPath`
|
|
37
|
+
* config value when both are set, matching ConfigurationManager's general
|
|
38
|
+
* env-over-config-file precedence (see docs/CONFIGURATION.md). Returns
|
|
39
|
+
* `undefined` when neither is set — persistence stays opt-in, and the
|
|
40
|
+
* in-memory-only default is byte-identical to pre-persistence behavior.
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveTemplatesPersistPath(configuredPath: string | undefined): string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Load persisted templates from disk.
|
|
45
|
+
*
|
|
46
|
+
* Never throws: a missing file (first run / fresh volume) or a corrupt /
|
|
47
|
+
* malformed file both fall back to an empty template set, logging a warning
|
|
48
|
+
* for the latter so operators can tell "opted out" from "data got mangled".
|
|
49
|
+
*/
|
|
50
|
+
export declare function loadTemplatesFile(filePath: string): PersistedTemplateRecord[];
|
|
51
|
+
/**
|
|
52
|
+
* Write the full template set to `filePath` atomically: write to a temp
|
|
53
|
+
* file in the same directory, then rename it over the target path. Rename
|
|
54
|
+
* is atomic on the same filesystem (POSIX and Windows both guarantee this),
|
|
55
|
+
* so a reader never observes a partially-written file, and a crash mid-write
|
|
56
|
+
* leaves the previous good file intact.
|
|
57
|
+
*
|
|
58
|
+
* Creates the parent directory if it doesn't exist yet, so a fresh Docker
|
|
59
|
+
* volume mount works without a separate provisioning step.
|
|
60
|
+
*/
|
|
61
|
+
export declare function writeTemplatesFileAtomic(filePath: string, records: PersistedTemplateRecord[]): void;
|
|
62
|
+
//# sourceMappingURL=templateFileStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateFileStore.d.ts","sourceRoot":"","sources":["../../src/storage/templateFileStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX;wDACoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAYD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CASlG;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,uBAAuB,EAAE,CA2C7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAMnG"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Opt-in file-backed persistence for templates.
|
|
4
|
+
*
|
|
5
|
+
* Templates are in-memory only by default (backed by `SimpleFilterStorage`,
|
|
6
|
+
* session-scoped, lost on process restart — see docs/STORAGE.md). When a
|
|
7
|
+
* persist path is configured (`templates.persistPath` config key, or the
|
|
8
|
+
* `VIKUNJA_MCP_TEMPLATES_FILE` env var, which wins — see
|
|
9
|
+
* docs/CONFIGURATION.md), `src/tools/templates.ts` write-throughs the full
|
|
10
|
+
* template set to that file on every mutation and reloads it the first time
|
|
11
|
+
* templates storage is touched in a process.
|
|
12
|
+
*
|
|
13
|
+
* This is intentionally *not* a general-purpose persistence adapter bolted
|
|
14
|
+
* onto `SimpleFilterStorage`: templates.ts is the only consumer of
|
|
15
|
+
* durability today (owner decision, see the N3-templates-persistence work
|
|
16
|
+
* item), so this module stays scoped to templates rather than growing into a
|
|
17
|
+
* second storage backend for saved filters. SQLite was evaluated for this
|
|
18
|
+
* and parked — native-dep cost outweighs the need for a single opt-in JSON
|
|
19
|
+
* file (see docs/ROADMAP.md).
|
|
20
|
+
*/
|
|
21
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
24
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
25
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
26
|
+
}
|
|
27
|
+
Object.defineProperty(o, k2, desc);
|
|
28
|
+
}) : (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
o[k2] = m[k];
|
|
31
|
+
}));
|
|
32
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
33
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
34
|
+
}) : function(o, v) {
|
|
35
|
+
o["default"] = v;
|
|
36
|
+
});
|
|
37
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
38
|
+
var ownKeys = function(o) {
|
|
39
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
40
|
+
var ar = [];
|
|
41
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
42
|
+
return ar;
|
|
43
|
+
};
|
|
44
|
+
return ownKeys(o);
|
|
45
|
+
};
|
|
46
|
+
return function (mod) {
|
|
47
|
+
if (mod && mod.__esModule) return mod;
|
|
48
|
+
var result = {};
|
|
49
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
50
|
+
__setModuleDefault(result, mod);
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
})();
|
|
54
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
+
exports.resolveTemplatesPersistPath = resolveTemplatesPersistPath;
|
|
56
|
+
exports.loadTemplatesFile = loadTemplatesFile;
|
|
57
|
+
exports.writeTemplatesFileAtomic = writeTemplatesFileAtomic;
|
|
58
|
+
const fs = __importStar(require("fs"));
|
|
59
|
+
const path = __importStar(require("path"));
|
|
60
|
+
const logger_1 = require("../utils/logger");
|
|
61
|
+
function isPersistedTemplateRecord(value) {
|
|
62
|
+
if (typeof value !== 'object' || value === null) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
const record = value;
|
|
66
|
+
return (typeof record.id === 'string' && typeof record.name === 'string' && typeof record.data === 'string');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolve the effective templates persistence path.
|
|
70
|
+
*
|
|
71
|
+
* `VIKUNJA_MCP_TEMPLATES_FILE` env var wins over the `templates.persistPath`
|
|
72
|
+
* config value when both are set, matching ConfigurationManager's general
|
|
73
|
+
* env-over-config-file precedence (see docs/CONFIGURATION.md). Returns
|
|
74
|
+
* `undefined` when neither is set — persistence stays opt-in, and the
|
|
75
|
+
* in-memory-only default is byte-identical to pre-persistence behavior.
|
|
76
|
+
*/
|
|
77
|
+
function resolveTemplatesPersistPath(configuredPath) {
|
|
78
|
+
const envPath = process.env.VIKUNJA_MCP_TEMPLATES_FILE;
|
|
79
|
+
if (envPath !== undefined && envPath.trim().length > 0) {
|
|
80
|
+
return envPath;
|
|
81
|
+
}
|
|
82
|
+
if (configuredPath !== undefined && configuredPath.trim().length > 0) {
|
|
83
|
+
return configuredPath;
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Load persisted templates from disk.
|
|
89
|
+
*
|
|
90
|
+
* Never throws: a missing file (first run / fresh volume) or a corrupt /
|
|
91
|
+
* malformed file both fall back to an empty template set, logging a warning
|
|
92
|
+
* for the latter so operators can tell "opted out" from "data got mangled".
|
|
93
|
+
*/
|
|
94
|
+
function loadTemplatesFile(filePath) {
|
|
95
|
+
let raw;
|
|
96
|
+
try {
|
|
97
|
+
raw = fs.readFileSync(filePath, 'utf-8');
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
const code = error.code;
|
|
101
|
+
if (code !== 'ENOENT') {
|
|
102
|
+
logger_1.logger.warn('Failed to read templates persistence file, starting with an empty template set', {
|
|
103
|
+
filePath,
|
|
104
|
+
error: error instanceof Error ? error.message : String(error),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
let parsed;
|
|
110
|
+
try {
|
|
111
|
+
parsed = JSON.parse(raw);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
logger_1.logger.warn('Templates persistence file is not valid JSON, starting with an empty template set', {
|
|
115
|
+
filePath,
|
|
116
|
+
error: error instanceof Error ? error.message : String(error),
|
|
117
|
+
});
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
if (!Array.isArray(parsed)) {
|
|
121
|
+
logger_1.logger.warn('Templates persistence file did not contain a JSON array, starting with an empty template set', { filePath });
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const records = parsed.filter(isPersistedTemplateRecord);
|
|
125
|
+
if (records.length !== parsed.length) {
|
|
126
|
+
logger_1.logger.warn('Templates persistence file contained malformed entries, dropping them', {
|
|
127
|
+
filePath,
|
|
128
|
+
totalEntries: parsed.length,
|
|
129
|
+
validEntries: records.length,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return records;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Write the full template set to `filePath` atomically: write to a temp
|
|
136
|
+
* file in the same directory, then rename it over the target path. Rename
|
|
137
|
+
* is atomic on the same filesystem (POSIX and Windows both guarantee this),
|
|
138
|
+
* so a reader never observes a partially-written file, and a crash mid-write
|
|
139
|
+
* leaves the previous good file intact.
|
|
140
|
+
*
|
|
141
|
+
* Creates the parent directory if it doesn't exist yet, so a fresh Docker
|
|
142
|
+
* volume mount works without a separate provisioning step.
|
|
143
|
+
*/
|
|
144
|
+
function writeTemplatesFileAtomic(filePath, records) {
|
|
145
|
+
const dir = path.dirname(filePath);
|
|
146
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
147
|
+
const tmpPath = path.join(dir, `.${path.basename(filePath)}.${process.pid}.${Date.now()}.tmp`);
|
|
148
|
+
fs.writeFileSync(tmpPath, JSON.stringify(records, null, 2), 'utf-8');
|
|
149
|
+
fs.renameSync(tmpPath, filePath);
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=templateFileStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateFileStore.js","sourceRoot":"","sources":["../../src/storage/templateFileStore.ts"],"names":[],"mappings":"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"}
|