synapse-mcp 1.0.0 → 1.0.2
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/README.md +1820 -147
- package/dist/constants.d.ts +10 -4
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +18 -8
- package/dist/constants.js.map +1 -1
- package/dist/events/emitter.d.ts +63 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/emitter.js +112 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +3 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +51 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +3 -0
- package/dist/events/types.js.map +1 -0
- package/dist/formatters/compose.d.ts +185 -0
- package/dist/formatters/compose.d.ts.map +1 -0
- package/dist/formatters/compose.js +397 -0
- package/dist/formatters/compose.js.map +1 -0
- package/dist/formatters/container.d.ts +84 -0
- package/dist/formatters/container.d.ts.map +1 -0
- package/dist/formatters/container.js +323 -0
- package/dist/formatters/container.js.map +1 -0
- package/dist/formatters/diagnostics.d.ts +20 -0
- package/dist/formatters/diagnostics.d.ts.map +1 -0
- package/dist/formatters/diagnostics.js +73 -0
- package/dist/formatters/diagnostics.js.map +1 -0
- package/dist/formatters/docker.d.ts +139 -0
- package/dist/formatters/docker.d.ts.map +1 -0
- package/dist/formatters/docker.js +216 -0
- package/dist/formatters/docker.js.map +1 -0
- package/dist/formatters/host.d.ts +137 -0
- package/dist/formatters/host.d.ts.map +1 -0
- package/dist/formatters/host.js +198 -0
- package/dist/formatters/host.js.map +1 -0
- package/dist/formatters/index.d.ts +17 -270
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +21 -456
- package/dist/formatters/index.js.map +1 -1
- package/dist/formatters/scout.d.ts +424 -0
- package/dist/formatters/scout.d.ts.map +1 -0
- package/dist/formatters/scout.js +687 -0
- package/dist/formatters/scout.js.map +1 -0
- package/dist/formatters/strategy.d.ts +105 -0
- package/dist/formatters/strategy.d.ts.map +1 -0
- package/dist/formatters/strategy.js +120 -0
- package/dist/formatters/strategy.js.map +1 -0
- package/dist/formatters/utils.d.ts +84 -0
- package/dist/formatters/utils.d.ts.map +1 -0
- package/dist/formatters/utils.js +129 -0
- package/dist/formatters/utils.js.map +1 -0
- package/dist/health-rate-limiter.d.ts +59 -0
- package/dist/health-rate-limiter.d.ts.map +1 -0
- package/dist/health-rate-limiter.js +159 -0
- package/dist/health-rate-limiter.js.map +1 -0
- package/dist/index.js +61 -100
- package/dist/index.js.map +1 -1
- package/dist/middleware/async-handler.d.ts +62 -0
- package/dist/middleware/async-handler.d.ts.map +1 -0
- package/dist/middleware/async-handler.js +58 -0
- package/dist/middleware/async-handler.js.map +1 -0
- package/dist/middleware/auth.d.ts +32 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +63 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/csrf-protection.d.ts +58 -0
- package/dist/middleware/csrf-protection.d.ts.map +1 -0
- package/dist/middleware/csrf-protection.js +123 -0
- package/dist/middleware/csrf-protection.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +49 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +90 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/error-mapper.d.ts +44 -0
- package/dist/middleware/error-mapper.d.ts.map +1 -0
- package/dist/middleware/error-mapper.js +127 -0
- package/dist/middleware/error-mapper.js.map +1 -0
- package/dist/middleware/index.d.ts +13 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +13 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/request-id.d.ts +22 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +31 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/middleware/types.d.ts +33 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +2 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/schemas/common.d.ts +205 -8
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/common.js +290 -17
- package/dist/schemas/common.js.map +1 -1
- package/dist/schemas/flux/compose.d.ts +307 -44
- package/dist/schemas/flux/compose.d.ts.map +1 -1
- package/dist/schemas/flux/compose.js +74 -48
- package/dist/schemas/flux/compose.js.map +1 -1
- package/dist/schemas/flux/container.d.ts +423 -56
- package/dist/schemas/flux/container.d.ts.map +1 -1
- package/dist/schemas/flux/container.js +83 -61
- package/dist/schemas/flux/container.js.map +1 -1
- package/dist/schemas/flux/docker.d.ts +254 -37
- package/dist/schemas/flux/docker.d.ts.map +1 -1
- package/dist/schemas/flux/docker.js +69 -39
- package/dist/schemas/flux/docker.js.map +1 -1
- package/dist/schemas/flux/host.d.ts +312 -29
- package/dist/schemas/flux/host.d.ts.map +1 -1
- package/dist/schemas/flux/host.js +74 -31
- package/dist/schemas/flux/host.js.map +1 -1
- package/dist/schemas/flux/index.d.ts +503 -11
- package/dist/schemas/flux/index.d.ts.map +1 -1
- package/dist/schemas/flux/index.js +34 -70
- package/dist/schemas/flux/index.js.map +1 -1
- package/dist/schemas/host-config.d.ts +76 -0
- package/dist/schemas/host-config.d.ts.map +1 -0
- package/dist/schemas/host-config.js +105 -0
- package/dist/schemas/host-config.js.map +1 -0
- package/dist/schemas/scout/index.d.ts +80 -23
- package/dist/schemas/scout/index.d.ts.map +1 -1
- package/dist/schemas/scout/index.js +26 -11
- package/dist/schemas/scout/index.js.map +1 -1
- package/dist/schemas/scout/logs.d.ts +17 -5
- package/dist/schemas/scout/logs.d.ts.map +1 -1
- package/dist/schemas/scout/logs.js +41 -31
- package/dist/schemas/scout/logs.js.map +1 -1
- package/dist/schemas/scout/simple.d.ts +126 -11
- package/dist/schemas/scout/simple.d.ts.map +1 -1
- package/dist/schemas/scout/simple.js +112 -57
- package/dist/schemas/scout/simple.js.map +1 -1
- package/dist/schemas/scout/zfs.d.ts +17 -5
- package/dist/schemas/scout/zfs.d.ts.map +1 -1
- package/dist/schemas/scout/zfs.js +34 -25
- package/dist/schemas/scout/zfs.js.map +1 -1
- package/dist/services/cache-layer.d.ts +160 -0
- package/dist/services/cache-layer.d.ts.map +1 -0
- package/dist/services/cache-layer.js +138 -0
- package/dist/services/cache-layer.js.map +1 -0
- package/dist/services/compose-cache.d.ts +75 -0
- package/dist/services/compose-cache.d.ts.map +1 -0
- package/dist/services/compose-cache.js +178 -0
- package/dist/services/compose-cache.js.map +1 -0
- package/dist/services/compose-discovery.d.ts +46 -0
- package/dist/services/compose-discovery.d.ts.map +1 -0
- package/dist/services/compose-discovery.js +219 -0
- package/dist/services/compose-discovery.js.map +1 -0
- package/dist/services/compose-project-lister.d.ts +27 -0
- package/dist/services/compose-project-lister.d.ts.map +1 -0
- package/dist/services/compose-project-lister.js +71 -0
- package/dist/services/compose-project-lister.js.map +1 -0
- package/dist/services/compose-scanner.d.ts +63 -0
- package/dist/services/compose-scanner.d.ts.map +1 -0
- package/dist/services/compose-scanner.js +253 -0
- package/dist/services/compose-scanner.js.map +1 -0
- package/dist/services/compose.d.ts +64 -28
- package/dist/services/compose.d.ts.map +1 -1
- package/dist/services/compose.js +220 -98
- package/dist/services/compose.js.map +1 -1
- package/dist/services/config-loader.d.ts +23 -0
- package/dist/services/config-loader.d.ts.map +1 -0
- package/dist/services/config-loader.js +124 -0
- package/dist/services/config-loader.js.map +1 -0
- package/dist/services/config-service.d.ts +38 -0
- package/dist/services/config-service.d.ts.map +1 -0
- package/dist/services/config-service.js +225 -0
- package/dist/services/config-service.js.map +1 -0
- package/dist/services/container-host-map-cache.d.ts +121 -0
- package/dist/services/container-host-map-cache.d.ts.map +1 -0
- package/dist/services/container-host-map-cache.js +188 -0
- package/dist/services/container-host-map-cache.js.map +1 -0
- package/dist/services/container.d.ts +194 -6
- package/dist/services/container.d.ts.map +1 -1
- package/dist/services/container.js +386 -11
- package/dist/services/container.js.map +1 -1
- package/dist/services/diagnostics.d.ts +57 -0
- package/dist/services/diagnostics.d.ts.map +1 -0
- package/dist/services/diagnostics.js +271 -0
- package/dist/services/diagnostics.js.map +1 -0
- package/dist/services/docker/container-service.d.ts +123 -0
- package/dist/services/docker/container-service.d.ts.map +1 -0
- package/dist/services/docker/container-service.js +347 -0
- package/dist/services/docker/container-service.js.map +1 -0
- package/dist/services/docker/image-service.d.ts +82 -0
- package/dist/services/docker/image-service.d.ts.map +1 -0
- package/dist/services/docker/image-service.js +193 -0
- package/dist/services/docker/image-service.js.map +1 -0
- package/dist/services/docker/index.d.ts +80 -0
- package/dist/services/docker/index.d.ts.map +1 -0
- package/dist/services/docker/index.js +103 -0
- package/dist/services/docker/index.js.map +1 -0
- package/dist/services/docker/network-service.d.ts +22 -0
- package/dist/services/docker/network-service.d.ts.map +1 -0
- package/dist/services/docker/network-service.js +43 -0
- package/dist/services/docker/network-service.js.map +1 -0
- package/dist/services/docker/system-service.d.ts +49 -0
- package/dist/services/docker/system-service.d.ts.map +1 -0
- package/dist/services/docker/system-service.js +215 -0
- package/dist/services/docker/system-service.js.map +1 -0
- package/dist/services/docker/utils/client-factory.d.ts +56 -0
- package/dist/services/docker/utils/client-factory.d.ts.map +1 -0
- package/dist/services/docker/utils/client-factory.js +139 -0
- package/dist/services/docker/utils/client-factory.js.map +1 -0
- package/dist/services/docker/utils/client-manager.d.ts +88 -0
- package/dist/services/docker/utils/client-manager.d.ts.map +1 -0
- package/dist/services/docker/utils/client-manager.js +124 -0
- package/dist/services/docker/utils/client-manager.js.map +1 -0
- package/dist/services/docker/utils/exec-handler.d.ts +94 -0
- package/dist/services/docker/utils/exec-handler.d.ts.map +1 -0
- package/dist/services/docker/utils/exec-handler.js +197 -0
- package/dist/services/docker/utils/exec-handler.js.map +1 -0
- package/dist/services/docker/utils/formatters.d.ts +13 -0
- package/dist/services/docker/utils/formatters.d.ts.map +1 -0
- package/dist/services/docker/utils/formatters.js +33 -0
- package/dist/services/docker/utils/formatters.js.map +1 -0
- package/dist/services/docker/utils/log-parser.d.ts +10 -0
- package/dist/services/docker/utils/log-parser.d.ts.map +1 -0
- package/dist/services/docker/utils/log-parser.js +48 -0
- package/dist/services/docker/utils/log-parser.js.map +1 -0
- package/dist/services/docker/utils/stats-calculator.d.ts +68 -0
- package/dist/services/docker/utils/stats-calculator.d.ts.map +1 -0
- package/dist/services/docker/utils/stats-calculator.js +61 -0
- package/dist/services/docker/utils/stats-calculator.js.map +1 -0
- package/dist/services/docker/volume-service.d.ts +22 -0
- package/dist/services/docker/volume-service.d.ts.map +1 -0
- package/dist/services/docker/volume-service.js +48 -0
- package/dist/services/docker/volume-service.js.map +1 -0
- package/dist/services/docker-interfaces.d.ts +283 -0
- package/dist/services/docker-interfaces.d.ts.map +1 -0
- package/dist/services/docker-interfaces.js +13 -0
- package/dist/services/docker-interfaces.js.map +1 -0
- package/dist/services/docker.d.ts +42 -5
- package/dist/services/docker.d.ts.map +1 -1
- package/dist/services/docker.js +335 -127
- package/dist/services/docker.js.map +1 -1
- package/dist/services/file-service.d.ts +6 -2
- package/dist/services/file-service.d.ts.map +1 -1
- package/dist/services/file-service.js +156 -52
- package/dist/services/file-service.js.map +1 -1
- package/dist/services/host-config-repository.d.ts +133 -0
- package/dist/services/host-config-repository.d.ts.map +1 -0
- package/dist/services/host-config-repository.js +323 -0
- package/dist/services/host-config-repository.js.map +1 -0
- package/dist/services/host-resolver.d.ts +49 -0
- package/dist/services/host-resolver.d.ts.map +1 -0
- package/dist/services/host-resolver.js +176 -0
- package/dist/services/host-resolver.js.map +1 -0
- package/dist/services/interfaces.d.ts +61 -194
- package/dist/services/interfaces.d.ts.map +1 -1
- package/dist/services/local-executor.d.ts +31 -0
- package/dist/services/local-executor.d.ts.map +1 -0
- package/dist/services/local-executor.js +71 -0
- package/dist/services/local-executor.js.map +1 -0
- package/dist/services/ssh-config-loader.d.ts +35 -0
- package/dist/services/ssh-config-loader.d.ts.map +1 -0
- package/dist/services/ssh-config-loader.js +218 -0
- package/dist/services/ssh-config-loader.js.map +1 -0
- package/dist/services/ssh-pool.d.ts +26 -1
- package/dist/services/ssh-pool.d.ts.map +1 -1
- package/dist/services/ssh-pool.js +166 -25
- package/dist/services/ssh-pool.js.map +1 -1
- package/dist/services/ssh-service.d.ts +3 -0
- package/dist/services/ssh-service.d.ts.map +1 -1
- package/dist/services/ssh-service.js +53 -31
- package/dist/services/ssh-service.js.map +1 -1
- package/dist/services/ssh.d.ts +2 -6
- package/dist/services/ssh.d.ts.map +1 -1
- package/dist/services/ssh.js +9 -40
- package/dist/services/ssh.js.map +1 -1
- package/dist/tools/definitions/flux.d.ts +13 -0
- package/dist/tools/definitions/flux.d.ts.map +1 -0
- package/dist/tools/definitions/flux.js +101 -0
- package/dist/tools/definitions/flux.js.map +1 -0
- package/dist/tools/definitions/index.d.ts +8 -0
- package/dist/tools/definitions/index.d.ts.map +1 -0
- package/dist/tools/definitions/index.js +8 -0
- package/dist/tools/definitions/index.js.map +1 -0
- package/dist/tools/definitions/scout.d.ts +13 -0
- package/dist/tools/definitions/scout.d.ts.map +1 -0
- package/dist/tools/definitions/scout.js +78 -0
- package/dist/tools/definitions/scout.js.map +1 -0
- package/dist/tools/flux.d.ts +16 -8
- package/dist/tools/flux.d.ts.map +1 -1
- package/dist/tools/flux.js +27 -66
- package/dist/tools/flux.js.map +1 -1
- package/dist/tools/handlers/base-handler.d.ts +172 -0
- package/dist/tools/handlers/base-handler.d.ts.map +1 -0
- package/dist/tools/handlers/base-handler.js +234 -0
- package/dist/tools/handlers/base-handler.js.map +1 -0
- package/dist/tools/handlers/compose-handlers.d.ts +108 -0
- package/dist/tools/handlers/compose-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/compose-handlers.js +293 -0
- package/dist/tools/handlers/compose-handlers.js.map +1 -0
- package/dist/tools/handlers/compose-utils.d.ts +35 -0
- package/dist/tools/handlers/compose-utils.d.ts.map +1 -0
- package/dist/tools/handlers/compose-utils.js +76 -0
- package/dist/tools/handlers/compose-utils.js.map +1 -0
- package/dist/tools/handlers/compose.d.ts +23 -0
- package/dist/tools/handlers/compose.d.ts.map +1 -0
- package/dist/tools/handlers/compose.js +125 -0
- package/dist/tools/handlers/compose.js.map +1 -0
- package/dist/tools/handlers/container.d.ts +23 -0
- package/dist/tools/handlers/container.d.ts.map +1 -0
- package/dist/tools/handlers/container.js +333 -0
- package/dist/tools/handlers/container.js.map +1 -0
- package/dist/tools/handlers/docker.d.ts +24 -0
- package/dist/tools/handlers/docker.d.ts.map +1 -0
- package/dist/tools/handlers/docker.js +155 -0
- package/dist/tools/handlers/docker.js.map +1 -0
- package/dist/tools/handlers/host.d.ts +23 -0
- package/dist/tools/handlers/host.d.ts.map +1 -0
- package/dist/tools/handlers/host.js +196 -0
- package/dist/tools/handlers/host.js.map +1 -0
- package/dist/tools/handlers/scout-logs.d.ts +24 -0
- package/dist/tools/handlers/scout-logs.d.ts.map +1 -0
- package/dist/tools/handlers/scout-logs.js +119 -0
- package/dist/tools/handlers/scout-logs.js.map +1 -0
- package/dist/tools/handlers/scout-simple.d.ts +23 -0
- package/dist/tools/handlers/scout-simple.d.ts.map +1 -0
- package/dist/tools/handlers/scout-simple.js +286 -0
- package/dist/tools/handlers/scout-simple.js.map +1 -0
- package/dist/tools/handlers/scout-zfs.d.ts +23 -0
- package/dist/tools/handlers/scout-zfs.d.ts.map +1 -0
- package/dist/tools/handlers/scout-zfs.js +82 -0
- package/dist/tools/handlers/scout-zfs.js.map +1 -0
- package/dist/tools/index.d.ts +32 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +41 -35
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/registry.d.ts +135 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +151 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/scout.d.ts +16 -8
- package/dist/tools/scout.d.ts.map +1 -1
- package/dist/tools/scout.js +36 -78
- package/dist/tools/scout.js.map +1 -1
- package/dist/types.d.ts +629 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/command-security.d.ts +82 -0
- package/dist/utils/command-security.d.ts.map +1 -0
- package/dist/utils/command-security.js +122 -0
- package/dist/utils/command-security.js.map +1 -0
- package/dist/utils/error-sanitization.d.ts +77 -0
- package/dist/utils/error-sanitization.d.ts.map +1 -0
- package/dist/utils/error-sanitization.js +107 -0
- package/dist/utils/error-sanitization.js.map +1 -0
- package/dist/utils/errors.d.ts +30 -6
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +91 -12
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/help-handler.d.ts +23 -0
- package/dist/utils/help-handler.d.ts.map +1 -0
- package/dist/utils/help-handler.js +21 -0
- package/dist/utils/help-handler.js.map +1 -0
- package/dist/utils/help.d.ts +1 -1
- package/dist/utils/help.d.ts.map +1 -1
- package/dist/utils/help.js +57 -16
- package/dist/utils/help.js.map +1 -1
- package/dist/utils/host-utils.d.ts +31 -0
- package/dist/utils/host-utils.d.ts.map +1 -0
- package/dist/utils/host-utils.js +80 -0
- package/dist/utils/host-utils.js.map +1 -0
- package/dist/utils/index.d.ts +8 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +8 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/init-detection.d.ts +36 -0
- package/dist/utils/init-detection.d.ts.map +1 -0
- package/dist/utils/init-detection.js +79 -0
- package/dist/utils/init-detection.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +32 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pagination.d.ts +20 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +29 -0
- package/dist/utils/pagination.js.map +1 -0
- package/dist/utils/path-security.d.ts +132 -18
- package/dist/utils/path-security.d.ts.map +1 -1
- package/dist/utils/path-security.js +164 -35
- package/dist/utils/path-security.js.map +1 -1
- package/dist/utils/sorting.d.ts +33 -0
- package/dist/utils/sorting.d.ts.map +1 -0
- package/dist/utils/sorting.js +57 -0
- package/dist/utils/sorting.js.map +1 -0
- package/dist/utils/text-filters.d.ts +13 -0
- package/dist/utils/text-filters.d.ts.map +1 -0
- package/dist/utils/text-filters.js +18 -0
- package/dist/utils/text-filters.js.map +1 -0
- package/dist/utils/time.d.ts +11 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +13 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/validation.d.ts +25 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +56 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +45 -19
- package/dist/schemas/discriminator.d.ts +0 -20
- package/dist/schemas/discriminator.d.ts.map +0 -1
- package/dist/schemas/discriminator.js +0 -25
- package/dist/schemas/discriminator.js.map +0 -1
- package/dist/schemas/unified.d.ts +0 -674
- package/dist/schemas/unified.d.ts.map +0 -1
- package/dist/schemas/unified.js +0 -453
- package/dist/schemas/unified.js.map +0 -1
- package/dist/tools/unified.d.ts +0 -7
- package/dist/tools/unified.d.ts.map +0 -1
- package/dist/tools/unified.js +0 -827
- package/dist/tools/unified.js.map +0 -1
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA4PA,uBAAuB;AACvB,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,uCAAqB,CAAA;AACvB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses a command string into parts for allowlist validation.
|
|
3
|
+
*
|
|
4
|
+
* IMPORTANT LIMITATION: This function does NOT handle shell-quoted arguments.
|
|
5
|
+
* It splits purely on whitespace, meaning commands like:
|
|
6
|
+
* `grep "hello world" file.txt`
|
|
7
|
+
* Will be parsed as: `["grep", '"hello', 'world"', "file.txt"]`
|
|
8
|
+
*
|
|
9
|
+
* This is acceptable for our use case because:
|
|
10
|
+
* 1. Arguments are escaped via escapeShellArg() in buildSafeShellCommand()
|
|
11
|
+
* 2. Callers should pass arguments as separate array elements when possible
|
|
12
|
+
* 3. This function is primarily for allowlist validation, not shell execution
|
|
13
|
+
*
|
|
14
|
+
* If you need quoted argument handling, pass arguments separately to the
|
|
15
|
+
* underlying service functions rather than as a single command string.
|
|
16
|
+
*
|
|
17
|
+
* @param command - Command string to parse (whitespace-delimited)
|
|
18
|
+
* @returns Array of command parts, with empty parts filtered out
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* parseCommandParts("docker ps -a"); // ["docker", "ps", "-a"]
|
|
22
|
+
* parseCommandParts(" systemctl status "); // ["systemctl", "status"]
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseCommandParts(command: string): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Validates a command against the allowlist and returns the parsed parts.
|
|
28
|
+
*
|
|
29
|
+
* Security: Prevents CWE-78 (OS Command Injection) by restricting commands to a
|
|
30
|
+
* predefined allowlist. No bypass mechanism is provided - use test mocks for testing.
|
|
31
|
+
* @see https://cwe.mitre.org/data/definitions/78.html
|
|
32
|
+
*
|
|
33
|
+
* @param command - Command string to validate (e.g., "docker ps -a")
|
|
34
|
+
* @returns Array of parsed command parts [baseCommand, ...args]
|
|
35
|
+
* @throws {Error} If command is empty or base command not in allowlist
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* validateCommandAllowlist("docker ps"); // ["docker", "ps"] (if docker is allowed)
|
|
39
|
+
* validateCommandAllowlist("rm -rf /"); // throws Error (rm not in allowlist)
|
|
40
|
+
* validateCommandAllowlist(""); // throws Error (empty command)
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function validateCommandAllowlist(command: string): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Validates that the base command contains only safe characters.
|
|
46
|
+
*
|
|
47
|
+
* Security: Prevents CWE-78 (OS Command Injection) via command names.
|
|
48
|
+
* Only alphanumeric, underscore, hyphen, and forward slash (for paths like
|
|
49
|
+
* /usr/bin/grep) are permitted. This validation happens before allowlist checking.
|
|
50
|
+
* @see https://cwe.mitre.org/data/definitions/78.html
|
|
51
|
+
*
|
|
52
|
+
* @param baseCommand - The base command to validate (first part of command string)
|
|
53
|
+
* @throws {Error} If command contains unsafe characters (e.g., shell metacharacters)
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* validateBaseCommand("docker"); // valid
|
|
57
|
+
* validateBaseCommand("/usr/bin/grep"); // valid
|
|
58
|
+
* validateBaseCommand("rm;ls"); // throws Error (contains semicolon)
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function validateBaseCommand(baseCommand: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* Validates command against allowlist and escapes arguments for safe shell usage.
|
|
64
|
+
*
|
|
65
|
+
* Security: Prevents CWE-78 (OS Command Injection) through multiple layers:
|
|
66
|
+
* 1. Command is validated against allowlist (no bypass mechanism)
|
|
67
|
+
* 2. Base command is validated against safe character pattern
|
|
68
|
+
* 3. All arguments are escaped via escapeShellArg() to neutralize metacharacters
|
|
69
|
+
* @see https://cwe.mitre.org/data/definitions/78.html
|
|
70
|
+
*
|
|
71
|
+
* @param command - Command string to validate and escape (e.g., "docker ps -a")
|
|
72
|
+
* @returns Safely escaped shell command string ready for execution
|
|
73
|
+
* @throws {Error} If command validation fails (empty, not in allowlist, or unsafe characters)
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* buildSafeShellCommand("docker ps"); // "docker 'ps'" (if allowed)
|
|
77
|
+
* buildSafeShellCommand("grep hello world.txt"); // "grep 'hello' 'world.txt'"
|
|
78
|
+
* buildSafeShellCommand("rm -rf /"); // throws Error (not in allowlist)
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function buildSafeShellCommand(command: string): string;
|
|
82
|
+
//# sourceMappingURL=command-security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-security.d.ts","sourceRoot":"","sources":["../../src/utils/command-security.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAwBlE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAM7D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW7D"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { ALLOWED_COMMANDS } from "../constants.js";
|
|
2
|
+
import { escapeShellArg } from "./path-security.js";
|
|
3
|
+
/**
|
|
4
|
+
* Safe command character pattern.
|
|
5
|
+
* Allows alphanumeric, underscore, hyphen, and forward slash (for paths like /usr/bin/grep).
|
|
6
|
+
*/
|
|
7
|
+
const SAFE_COMMAND_PATTERN = /^[a-zA-Z0-9_\-/]+$/;
|
|
8
|
+
/**
|
|
9
|
+
* Parses a command string into parts for allowlist validation.
|
|
10
|
+
*
|
|
11
|
+
* IMPORTANT LIMITATION: This function does NOT handle shell-quoted arguments.
|
|
12
|
+
* It splits purely on whitespace, meaning commands like:
|
|
13
|
+
* `grep "hello world" file.txt`
|
|
14
|
+
* Will be parsed as: `["grep", '"hello', 'world"', "file.txt"]`
|
|
15
|
+
*
|
|
16
|
+
* This is acceptable for our use case because:
|
|
17
|
+
* 1. Arguments are escaped via escapeShellArg() in buildSafeShellCommand()
|
|
18
|
+
* 2. Callers should pass arguments as separate array elements when possible
|
|
19
|
+
* 3. This function is primarily for allowlist validation, not shell execution
|
|
20
|
+
*
|
|
21
|
+
* If you need quoted argument handling, pass arguments separately to the
|
|
22
|
+
* underlying service functions rather than as a single command string.
|
|
23
|
+
*
|
|
24
|
+
* @param command - Command string to parse (whitespace-delimited)
|
|
25
|
+
* @returns Array of command parts, with empty parts filtered out
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* parseCommandParts("docker ps -a"); // ["docker", "ps", "-a"]
|
|
29
|
+
* parseCommandParts(" systemctl status "); // ["systemctl", "status"]
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export function parseCommandParts(command) {
|
|
33
|
+
return command
|
|
34
|
+
.trim()
|
|
35
|
+
.split(/\s+/)
|
|
36
|
+
.filter((part) => part.length > 0);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Validates a command against the allowlist and returns the parsed parts.
|
|
40
|
+
*
|
|
41
|
+
* Security: Prevents CWE-78 (OS Command Injection) by restricting commands to a
|
|
42
|
+
* predefined allowlist. No bypass mechanism is provided - use test mocks for testing.
|
|
43
|
+
* @see https://cwe.mitre.org/data/definitions/78.html
|
|
44
|
+
*
|
|
45
|
+
* @param command - Command string to validate (e.g., "docker ps -a")
|
|
46
|
+
* @returns Array of parsed command parts [baseCommand, ...args]
|
|
47
|
+
* @throws {Error} If command is empty or base command not in allowlist
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* validateCommandAllowlist("docker ps"); // ["docker", "ps"] (if docker is allowed)
|
|
51
|
+
* validateCommandAllowlist("rm -rf /"); // throws Error (rm not in allowlist)
|
|
52
|
+
* validateCommandAllowlist(""); // throws Error (empty command)
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export function validateCommandAllowlist(command) {
|
|
56
|
+
const parts = parseCommandParts(command);
|
|
57
|
+
if (parts.length === 0) {
|
|
58
|
+
throw new Error("Command cannot be empty");
|
|
59
|
+
}
|
|
60
|
+
const baseCommand = parts[0];
|
|
61
|
+
// CRITICAL SECURITY: Validate characters to prevent injection attacks via shell metacharacters
|
|
62
|
+
if (!SAFE_COMMAND_PATTERN.test(baseCommand)) {
|
|
63
|
+
throw new Error(`Base command '${baseCommand}' contains unsafe characters. Only alphanumeric, underscore, hyphen, and forward slash are allowed.`);
|
|
64
|
+
}
|
|
65
|
+
// Enforce allowlist - no bypass mechanism for security
|
|
66
|
+
if (!ALLOWED_COMMANDS.has(baseCommand)) {
|
|
67
|
+
throw new Error(`Command '${baseCommand}' not in allowed list. Use test mocks for testing with disallowed commands.`);
|
|
68
|
+
}
|
|
69
|
+
return parts;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Validates that the base command contains only safe characters.
|
|
73
|
+
*
|
|
74
|
+
* Security: Prevents CWE-78 (OS Command Injection) via command names.
|
|
75
|
+
* Only alphanumeric, underscore, hyphen, and forward slash (for paths like
|
|
76
|
+
* /usr/bin/grep) are permitted. This validation happens before allowlist checking.
|
|
77
|
+
* @see https://cwe.mitre.org/data/definitions/78.html
|
|
78
|
+
*
|
|
79
|
+
* @param baseCommand - The base command to validate (first part of command string)
|
|
80
|
+
* @throws {Error} If command contains unsafe characters (e.g., shell metacharacters)
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* validateBaseCommand("docker"); // valid
|
|
84
|
+
* validateBaseCommand("/usr/bin/grep"); // valid
|
|
85
|
+
* validateBaseCommand("rm;ls"); // throws Error (contains semicolon)
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export function validateBaseCommand(baseCommand) {
|
|
89
|
+
if (!SAFE_COMMAND_PATTERN.test(baseCommand)) {
|
|
90
|
+
throw new Error(`Base command '${baseCommand}' contains unsafe characters. Only alphanumeric, underscore, hyphen, and forward slash are allowed.`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Validates command against allowlist and escapes arguments for safe shell usage.
|
|
95
|
+
*
|
|
96
|
+
* Security: Prevents CWE-78 (OS Command Injection) through multiple layers:
|
|
97
|
+
* 1. Command is validated against allowlist (no bypass mechanism)
|
|
98
|
+
* 2. Base command is validated against safe character pattern
|
|
99
|
+
* 3. All arguments are escaped via escapeShellArg() to neutralize metacharacters
|
|
100
|
+
* @see https://cwe.mitre.org/data/definitions/78.html
|
|
101
|
+
*
|
|
102
|
+
* @param command - Command string to validate and escape (e.g., "docker ps -a")
|
|
103
|
+
* @returns Safely escaped shell command string ready for execution
|
|
104
|
+
* @throws {Error} If command validation fails (empty, not in allowlist, or unsafe characters)
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* buildSafeShellCommand("docker ps"); // "docker 'ps'" (if allowed)
|
|
108
|
+
* buildSafeShellCommand("grep hello world.txt"); // "grep 'hello' 'world.txt'"
|
|
109
|
+
* buildSafeShellCommand("rm -rf /"); // throws Error (not in allowlist)
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export function buildSafeShellCommand(command) {
|
|
113
|
+
// validateCommandAllowlist now handles both character validation and allowlist checks
|
|
114
|
+
const parts = validateCommandAllowlist(command);
|
|
115
|
+
const baseCommand = parts[0];
|
|
116
|
+
if (parts.length === 1) {
|
|
117
|
+
return baseCommand;
|
|
118
|
+
}
|
|
119
|
+
const escapedArgs = parts.slice(1).map((arg) => escapeShellArg(arg));
|
|
120
|
+
return `${baseCommand} ${escapedArgs.join(" ")}`;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=command-security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-security.js","sourceRoot":"","sources":["../../src/utils/command-security.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;GAGG;AACH,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,OAAO;SACX,IAAI,EAAE;SACN,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7B,+FAA+F;IAC/F,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,iBAAiB,WAAW,qGAAqG,CAClI,CAAC;IACJ,CAAC;IAED,uDAAuD;IACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,YAAY,WAAW,6EAA6E,CACrG,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,iBAAiB,WAAW,qGAAqG,CAClI,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,sFAAsF;IACtF,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,OAAO,GAAG,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error message sanitization utilities
|
|
3
|
+
*
|
|
4
|
+
* Security: Prevents CWE-209 (Generation of Error Message Containing Sensitive Information)
|
|
5
|
+
* by redacting sensitive details like file paths, commands, and infrastructure information
|
|
6
|
+
* from error messages in production mode.
|
|
7
|
+
*
|
|
8
|
+
* @see https://cwe.mitre.org/data/definitions/209.html
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Sanitizes error messages based on environment.
|
|
12
|
+
*
|
|
13
|
+
* In production: Returns generic message without sensitive details
|
|
14
|
+
* In development: Returns detailed message for debugging
|
|
15
|
+
*
|
|
16
|
+
* Security: CWE-209 prevention - avoid leaking infrastructure details
|
|
17
|
+
*
|
|
18
|
+
* @param detailedMessage - Detailed error message (may contain sensitive info)
|
|
19
|
+
* @param genericMessage - Generic safe error message
|
|
20
|
+
* @returns Sanitized error message appropriate for current environment
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const msg = sanitizeErrorMessage(
|
|
24
|
+
* "Failed to read SSH key at /home/user/.ssh/id_rsa",
|
|
25
|
+
* "SSH authentication failed"
|
|
26
|
+
* );
|
|
27
|
+
* // Production: "SSH authentication failed"
|
|
28
|
+
* // Development: "Failed to read SSH key at /home/user/.ssh/id_rsa"
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function sanitizeErrorMessage(detailedMessage: string, genericMessage: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Redacts file paths from error messages
|
|
34
|
+
*
|
|
35
|
+
* @param _path - File path to redact (unused, returns constant)
|
|
36
|
+
* @returns Redacted path placeholder
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* sanitizePath("/home/user/.ssh/id_rsa"); // "[REDACTED_PATH]"
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function sanitizePath(_path: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Redacts command strings from error messages
|
|
45
|
+
*
|
|
46
|
+
* @param _command - Command string to redact (unused, returns constant)
|
|
47
|
+
* @returns Redacted command placeholder
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* sanitizeCommand("rm -rf /"); // "[REDACTED_COMMAND]"
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function sanitizeCommand(_command: string): string;
|
|
54
|
+
/**
|
|
55
|
+
* Sanitizes an error object for safe logging/display
|
|
56
|
+
*
|
|
57
|
+
* In production: Removes stack traces and sensitive details
|
|
58
|
+
* In development: Preserves all information for debugging
|
|
59
|
+
*
|
|
60
|
+
* @param error - Error object to sanitize
|
|
61
|
+
* @param genericMessage - Generic message to use in production
|
|
62
|
+
* @returns Sanitized error object
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* try {
|
|
66
|
+
* await readKey("/home/user/.ssh/id_rsa");
|
|
67
|
+
* } catch (err) {
|
|
68
|
+
* const safe = sanitizeError(err, "Key read failed");
|
|
69
|
+
* console.error(safe); // Safe for production logs
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare function sanitizeError(error: unknown, genericMessage: string): {
|
|
74
|
+
message: string;
|
|
75
|
+
stack?: string;
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=error-sanitization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-sanitization.d.ts","sourceRoot":"","sources":["../../src/utils/error-sanitization.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAK5F;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,MAAM,GACrB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAkBrC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error message sanitization utilities
|
|
3
|
+
*
|
|
4
|
+
* Security: Prevents CWE-209 (Generation of Error Message Containing Sensitive Information)
|
|
5
|
+
* by redacting sensitive details like file paths, commands, and infrastructure information
|
|
6
|
+
* from error messages in production mode.
|
|
7
|
+
*
|
|
8
|
+
* @see https://cwe.mitre.org/data/definitions/209.html
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Check if running in development mode
|
|
12
|
+
* Defaults to production (safe) if NODE_ENV is not set
|
|
13
|
+
*/
|
|
14
|
+
function isDevelopment() {
|
|
15
|
+
return process.env.NODE_ENV === "development";
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Sanitizes error messages based on environment.
|
|
19
|
+
*
|
|
20
|
+
* In production: Returns generic message without sensitive details
|
|
21
|
+
* In development: Returns detailed message for debugging
|
|
22
|
+
*
|
|
23
|
+
* Security: CWE-209 prevention - avoid leaking infrastructure details
|
|
24
|
+
*
|
|
25
|
+
* @param detailedMessage - Detailed error message (may contain sensitive info)
|
|
26
|
+
* @param genericMessage - Generic safe error message
|
|
27
|
+
* @returns Sanitized error message appropriate for current environment
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const msg = sanitizeErrorMessage(
|
|
31
|
+
* "Failed to read SSH key at /home/user/.ssh/id_rsa",
|
|
32
|
+
* "SSH authentication failed"
|
|
33
|
+
* );
|
|
34
|
+
* // Production: "SSH authentication failed"
|
|
35
|
+
* // Development: "Failed to read SSH key at /home/user/.ssh/id_rsa"
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export function sanitizeErrorMessage(detailedMessage, genericMessage) {
|
|
39
|
+
if (isDevelopment()) {
|
|
40
|
+
return detailedMessage;
|
|
41
|
+
}
|
|
42
|
+
return genericMessage;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Redacts file paths from error messages
|
|
46
|
+
*
|
|
47
|
+
* @param _path - File path to redact (unused, returns constant)
|
|
48
|
+
* @returns Redacted path placeholder
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* sanitizePath("/home/user/.ssh/id_rsa"); // "[REDACTED_PATH]"
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export function sanitizePath(_path) {
|
|
55
|
+
return "[REDACTED_PATH]";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Redacts command strings from error messages
|
|
59
|
+
*
|
|
60
|
+
* @param _command - Command string to redact (unused, returns constant)
|
|
61
|
+
* @returns Redacted command placeholder
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* sanitizeCommand("rm -rf /"); // "[REDACTED_COMMAND]"
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export function sanitizeCommand(_command) {
|
|
68
|
+
return "[REDACTED_COMMAND]";
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Sanitizes an error object for safe logging/display
|
|
72
|
+
*
|
|
73
|
+
* In production: Removes stack traces and sensitive details
|
|
74
|
+
* In development: Preserves all information for debugging
|
|
75
|
+
*
|
|
76
|
+
* @param error - Error object to sanitize
|
|
77
|
+
* @param genericMessage - Generic message to use in production
|
|
78
|
+
* @returns Sanitized error object
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* try {
|
|
82
|
+
* await readKey("/home/user/.ssh/id_rsa");
|
|
83
|
+
* } catch (err) {
|
|
84
|
+
* const safe = sanitizeError(err, "Key read failed");
|
|
85
|
+
* console.error(safe); // Safe for production logs
|
|
86
|
+
* }
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export function sanitizeError(error, genericMessage) {
|
|
90
|
+
if (isDevelopment()) {
|
|
91
|
+
// Development: preserve all error details
|
|
92
|
+
if (error instanceof Error) {
|
|
93
|
+
return {
|
|
94
|
+
message: error.message,
|
|
95
|
+
stack: error.stack,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
message: String(error),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Production: generic message only, no stack trace
|
|
103
|
+
return {
|
|
104
|
+
message: genericMessage,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=error-sanitization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-sanitization.js","sourceRoot":"","sources":["../../src/utils/error-sanitization.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,oBAAoB,CAAC,eAAuB,EAAE,cAAsB;IAClF,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAc,EACd,cAAsB;IAEtB,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,0CAA0C;QAC1C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;SACvB,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,OAAO;QACL,OAAO,EAAE,cAAc;KACxB,CAAC;AACJ,CAAC"}
|
package/dist/utils/errors.d.ts
CHANGED
|
@@ -13,8 +13,7 @@
|
|
|
13
13
|
export declare class HostOperationError extends Error {
|
|
14
14
|
readonly hostName: string;
|
|
15
15
|
readonly operation: string;
|
|
16
|
-
|
|
17
|
-
constructor(message: string, hostName: string, operation: string, cause?: unknown | undefined);
|
|
16
|
+
constructor(message: string, hostName: string, operation: string, cause?: unknown);
|
|
18
17
|
}
|
|
19
18
|
/**
|
|
20
19
|
* SSH command execution error with full context
|
|
@@ -25,8 +24,7 @@ export declare class SSHCommandError extends Error {
|
|
|
25
24
|
readonly exitCode?: number | undefined;
|
|
26
25
|
readonly stderr?: string | undefined;
|
|
27
26
|
readonly stdout?: string | undefined;
|
|
28
|
-
|
|
29
|
-
constructor(message: string, hostName: string, command: string, exitCode?: number | undefined, stderr?: string | undefined, stdout?: string | undefined, cause?: unknown | undefined);
|
|
27
|
+
constructor(message: string, hostName: string, command: string, exitCode?: number | undefined, stderr?: string | undefined, stdout?: string | undefined, cause?: unknown);
|
|
30
28
|
}
|
|
31
29
|
/**
|
|
32
30
|
* Docker Compose operation error
|
|
@@ -35,8 +33,15 @@ export declare class ComposeOperationError extends Error {
|
|
|
35
33
|
readonly hostName: string;
|
|
36
34
|
readonly project: string;
|
|
37
35
|
readonly action: string;
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
constructor(message: string, hostName: string, project: string, action: string, cause?: unknown);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Validation error for input schema failures
|
|
40
|
+
*/
|
|
41
|
+
export declare class ValidationError extends Error {
|
|
42
|
+
readonly handlerName: string;
|
|
43
|
+
readonly issues: string[];
|
|
44
|
+
constructor(message: string, handlerName: string, issues: string[], cause?: unknown);
|
|
40
45
|
}
|
|
41
46
|
/**
|
|
42
47
|
* Additional context for error logging
|
|
@@ -47,6 +52,25 @@ export interface ErrorContext {
|
|
|
47
52
|
operation?: string;
|
|
48
53
|
metadata?: Record<string, unknown>;
|
|
49
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Sanitize params for safe logging by redacting potentially sensitive fields
|
|
57
|
+
*
|
|
58
|
+
* Preserves safe operational fields (action, subaction, host, response_format, etc.)
|
|
59
|
+
* while redacting fields that may contain sensitive data (paths, commands, filters).
|
|
60
|
+
*
|
|
61
|
+
* @param params - Parameters to sanitize
|
|
62
|
+
* @returns Sanitized copy of params with sensitive fields redacted
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* sanitizeParams({
|
|
66
|
+
* action: 'scout',
|
|
67
|
+
* command: 'cat /etc/passwd',
|
|
68
|
+
* host: 'web-01',
|
|
69
|
+
* path: '/etc/secrets'
|
|
70
|
+
* })
|
|
71
|
+
* // Returns: { action: 'scout', command: '[REDACTED]', host: 'web-01', path: '[REDACTED]' }
|
|
72
|
+
*/
|
|
73
|
+
export declare function sanitizeParams(params: unknown): unknown;
|
|
50
74
|
/**
|
|
51
75
|
* Log error with structured context
|
|
52
76
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,QAAQ,EAAE,MAAM;aAChB,SAAS,EAAE,MAAM;gBAFjC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjC,KAAK,CAAC,EAAE,OAAO;CAWlB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,QAAQ,EAAE,MAAM;aAChB,OAAO,EAAE,MAAM;aACf,QAAQ,CAAC,EAAE,MAAM;aACjB,MAAM,CAAC,EAAE,MAAM;aACf,MAAM,CAAC,EAAE,MAAM;gBAL/B,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,MAAM,CAAC,EAAE,MAAM,YAAA,EAC/B,KAAK,CAAC,EAAE,OAAO;CAkBlB;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;aAG5B,QAAQ,EAAE,MAAM;aAChB,OAAO,EAAE,MAAM;aACf,MAAM,EAAE,MAAM;gBAH9B,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAC9B,KAAK,CAAC,EAAE,OAAO;CAUlB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,WAAW,EAAE,MAAM;aACnB,MAAM,EAAE,MAAM,EAAE;gBAFhC,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EAAE,EAChC,KAAK,CAAC,EAAE,OAAO;CASlB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AA8BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAyBvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAyCrE"}
|