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
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported init systems
|
|
3
|
+
*/
|
|
4
|
+
export type InitSystem = "systemd" | "openrc" | "sysv" | "upstart" | "unknown";
|
|
5
|
+
/**
|
|
6
|
+
* Command structure for listing services
|
|
7
|
+
*/
|
|
8
|
+
export interface ServiceListCommand {
|
|
9
|
+
command: string;
|
|
10
|
+
args: string[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Detect the init system from command output.
|
|
14
|
+
* Typically called with output from: ps -p 1 -o comm= or readlink /proc/1/exe
|
|
15
|
+
*
|
|
16
|
+
* @param output - Command output to analyze
|
|
17
|
+
* @returns Detected init system type
|
|
18
|
+
*/
|
|
19
|
+
export declare function detectInitSystem(output: string): InitSystem;
|
|
20
|
+
/**
|
|
21
|
+
* Get the appropriate command to list services for a given init system.
|
|
22
|
+
*
|
|
23
|
+
* @param initSystem - The detected init system
|
|
24
|
+
* @param state - Optional state filter (only works with systemd)
|
|
25
|
+
* @param service - Optional service name filter (only works with systemd)
|
|
26
|
+
* @returns Command and arguments to list services
|
|
27
|
+
*/
|
|
28
|
+
export declare function getServiceListCommand(initSystem: InitSystem, state?: string, service?: string): ServiceListCommand;
|
|
29
|
+
/**
|
|
30
|
+
* Format the output title based on the init system.
|
|
31
|
+
*
|
|
32
|
+
* @param initSystem - The detected init system
|
|
33
|
+
* @returns Human-readable title for the service list
|
|
34
|
+
*/
|
|
35
|
+
export declare function getServiceListTitle(initSystem: InitSystem): string;
|
|
36
|
+
//# sourceMappingURL=init-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-detection.d.ts","sourceRoot":"","sources":["../../src/utils/init-detection.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAqB3D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,kBAAkB,CA8BpB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAclE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// src/utils/init-detection.ts
|
|
2
|
+
/**
|
|
3
|
+
* Detect the init system from command output.
|
|
4
|
+
* Typically called with output from: ps -p 1 -o comm= or readlink /proc/1/exe
|
|
5
|
+
*
|
|
6
|
+
* @param output - Command output to analyze
|
|
7
|
+
* @returns Detected init system type
|
|
8
|
+
*/
|
|
9
|
+
export function detectInitSystem(output) {
|
|
10
|
+
const normalized = output.toLowerCase().trim();
|
|
11
|
+
if (normalized.includes("systemd")) {
|
|
12
|
+
return "systemd";
|
|
13
|
+
}
|
|
14
|
+
if (normalized.includes("openrc")) {
|
|
15
|
+
return "openrc";
|
|
16
|
+
}
|
|
17
|
+
// SysV init often shows as 'init' in process list
|
|
18
|
+
if (normalized.includes("init") && !normalized.includes("upstart")) {
|
|
19
|
+
return "sysv";
|
|
20
|
+
}
|
|
21
|
+
if (normalized.includes("upstart")) {
|
|
22
|
+
return "upstart";
|
|
23
|
+
}
|
|
24
|
+
return "unknown";
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get the appropriate command to list services for a given init system.
|
|
28
|
+
*
|
|
29
|
+
* @param initSystem - The detected init system
|
|
30
|
+
* @param state - Optional state filter (only works with systemd)
|
|
31
|
+
* @param service - Optional service name filter (only works with systemd)
|
|
32
|
+
* @returns Command and arguments to list services
|
|
33
|
+
*/
|
|
34
|
+
export function getServiceListCommand(initSystem, state, service) {
|
|
35
|
+
switch (initSystem) {
|
|
36
|
+
case "systemd": {
|
|
37
|
+
const args = ["list-units", "--type=service", "--no-pager"];
|
|
38
|
+
if (state && state !== "all") {
|
|
39
|
+
args.push(`--state=${state}`);
|
|
40
|
+
}
|
|
41
|
+
if (service) {
|
|
42
|
+
args.push(service);
|
|
43
|
+
}
|
|
44
|
+
return { command: "systemctl", args };
|
|
45
|
+
}
|
|
46
|
+
case "openrc":
|
|
47
|
+
return { command: "rc-status", args: ["--servicelist"] };
|
|
48
|
+
case "sysv":
|
|
49
|
+
return { command: "service", args: ["--status-all"] };
|
|
50
|
+
case "upstart":
|
|
51
|
+
return { command: "initctl", args: ["list"] };
|
|
52
|
+
case "unknown":
|
|
53
|
+
default:
|
|
54
|
+
// Fallback to showing all processes
|
|
55
|
+
return { command: "ps", args: ["aux"] };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Format the output title based on the init system.
|
|
60
|
+
*
|
|
61
|
+
* @param initSystem - The detected init system
|
|
62
|
+
* @returns Human-readable title for the service list
|
|
63
|
+
*/
|
|
64
|
+
export function getServiceListTitle(initSystem) {
|
|
65
|
+
switch (initSystem) {
|
|
66
|
+
case "systemd":
|
|
67
|
+
return "Systemd Services";
|
|
68
|
+
case "openrc":
|
|
69
|
+
return "OpenRC Services";
|
|
70
|
+
case "sysv":
|
|
71
|
+
return "SysV Init Services";
|
|
72
|
+
case "upstart":
|
|
73
|
+
return "Upstart Services";
|
|
74
|
+
case "unknown":
|
|
75
|
+
default:
|
|
76
|
+
return "Running Processes (init system unknown)";
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=init-detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-detection.js","sourceRoot":"","sources":["../../src/utils/init-detection.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAe9B;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAE/C,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,kDAAkD;IAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAsB,EACtB,KAAc,EACd,OAAgB;IAEhB,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,CAAC,YAAY,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;YAE5D,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACxC,CAAC;QAED,KAAK,QAAQ;YACX,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAE3D,KAAK,MAAM;YACT,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;QAExD,KAAK,SAAS;YACZ,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QAEhD,KAAK,SAAS,CAAC;QACf;YACE,oCAAoC;YACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAsB;IACxD,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,kBAAkB,CAAC;QAC5B,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC;QAC3B,KAAK,MAAM;YACT,OAAO,oBAAoB,CAAC;QAC9B,KAAK,SAAS;YACZ,OAAO,kBAAkB,CAAC;QAC5B,KAAK,SAAS,CAAC;QACf;YACE,OAAO,yCAAyC,CAAC;IACrD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import pino from "pino";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a structured logger instance with Pino
|
|
4
|
+
* Uses stderr (process.stderr.fd = 2) to keep stdout clean for MCP protocol
|
|
5
|
+
*/
|
|
6
|
+
export declare const logger: pino.Logger<never, boolean>;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a child logger with additional context
|
|
9
|
+
*/
|
|
10
|
+
export declare function createLogger(context: Record<string, unknown>): pino.Logger;
|
|
11
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,MAAM,6BAsBlB,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAE1E"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import pino from "pino";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a structured logger instance with Pino
|
|
4
|
+
* Uses stderr (process.stderr.fd = 2) to keep stdout clean for MCP protocol
|
|
5
|
+
*/
|
|
6
|
+
export const logger = pino({
|
|
7
|
+
level: process.env.LOG_LEVEL || "info",
|
|
8
|
+
transport: process.env.NODE_ENV !== "production"
|
|
9
|
+
? {
|
|
10
|
+
target: "pino-pretty",
|
|
11
|
+
options: {
|
|
12
|
+
colorize: true,
|
|
13
|
+
translateTime: "HH:MM:ss | mm/dd/yyyy",
|
|
14
|
+
ignore: "pid,hostname"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
: undefined,
|
|
18
|
+
formatters: {
|
|
19
|
+
level: (label) => {
|
|
20
|
+
return { level: label.toUpperCase() };
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
timestamp: () => `,"time":"${new Date().toISOString()}"`
|
|
24
|
+
}, pino.destination({ dest: 2, sync: false }) // Use stderr (fd 2) instead of stdout (fd 1)
|
|
25
|
+
);
|
|
26
|
+
/**
|
|
27
|
+
* Creates a child logger with additional context
|
|
28
|
+
*/
|
|
29
|
+
export function createLogger(context) {
|
|
30
|
+
return logger.child(context);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CACxB;IACE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACtC,SAAS,EACP,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QACnC,CAAC,CAAC;YACE,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,uBAAuB;gBACtC,MAAM,EAAE,cAAc;aACvB;SACF;QACH,CAAC,CAAC,SAAS;IACf,UAAU,EAAE;QACV,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;YACf,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACxC,CAAC;KACF;IACD,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG;CACzD,EACD,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,6CAA6C;CACzF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgC;IAC3D,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply pagination to an array of items.
|
|
3
|
+
*
|
|
4
|
+
* @param items - Array of items to paginate
|
|
5
|
+
* @param offset - Number of items to skip (default: 0)
|
|
6
|
+
* @param limit - Maximum number of items to return (default: undefined, returns all)
|
|
7
|
+
* @returns Paginated slice of the input array
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
12
|
+
*
|
|
13
|
+
* applyPagination(items, 0, 5); // [1, 2, 3, 4, 5]
|
|
14
|
+
* applyPagination(items, 5, 5); // [6, 7, 8, 9, 10]
|
|
15
|
+
* applyPagination(items, 5); // [6, 7, 8, 9, 10]
|
|
16
|
+
* applyPagination(items, 100, 5); // []
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function applyPagination<T>(items: T[], offset?: number, limit?: number): T[];
|
|
20
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAYnF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apply pagination to an array of items.
|
|
3
|
+
*
|
|
4
|
+
* @param items - Array of items to paginate
|
|
5
|
+
* @param offset - Number of items to skip (default: 0)
|
|
6
|
+
* @param limit - Maximum number of items to return (default: undefined, returns all)
|
|
7
|
+
* @returns Paginated slice of the input array
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
12
|
+
*
|
|
13
|
+
* applyPagination(items, 0, 5); // [1, 2, 3, 4, 5]
|
|
14
|
+
* applyPagination(items, 5, 5); // [6, 7, 8, 9, 10]
|
|
15
|
+
* applyPagination(items, 5); // [6, 7, 8, 9, 10]
|
|
16
|
+
* applyPagination(items, 100, 5); // []
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function applyPagination(items, offset, limit) {
|
|
20
|
+
const start = offset ?? 0;
|
|
21
|
+
// No pagination needed
|
|
22
|
+
if (start === 0 && limit === undefined) {
|
|
23
|
+
return items;
|
|
24
|
+
}
|
|
25
|
+
// Calculate end index
|
|
26
|
+
const end = limit !== undefined ? start + limit : undefined;
|
|
27
|
+
return items.slice(start, end);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAAI,KAAU,EAAE,MAAe,EAAE,KAAc;IAC5E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC;IAE1B,uBAAuB;IACvB,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sBAAsB;IACtB,MAAM,GAAG,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5D,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -26,39 +26,153 @@ export declare class HostSecurityError extends Error {
|
|
|
26
26
|
constructor(message: string, host: string);
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
29
|
+
* Pattern for valid systemd service names
|
|
30
|
+
* Allows alphanumeric characters plus @ . _ -
|
|
31
|
+
*/
|
|
32
|
+
export declare const SYSTEMD_SERVICE_NAME_PATTERN: RegExp;
|
|
33
|
+
/**
|
|
34
|
+
* Validates hostname format to prevent command injection.
|
|
35
|
+
*
|
|
36
|
+
* Security: Prevents CWE-78 (OS Command Injection) by rejecting shell metacharacters
|
|
37
|
+
* that could be used to inject arbitrary commands when hostname is used in SSH commands.
|
|
38
|
+
* @see https://cwe.mitre.org/data/definitions/78.html
|
|
30
39
|
*
|
|
31
|
-
* @param
|
|
32
|
-
* @throws HostSecurityError
|
|
40
|
+
* @param hostname - Hostname to validate (must match pattern: alphanumeric, dots, hyphens, underscores)
|
|
41
|
+
* @throws {HostSecurityError} If hostname is empty, contains dangerous characters, or has invalid format
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* validateHostname("proxy.example.com"); // valid
|
|
45
|
+
* validateHostname("host-01"); // valid
|
|
46
|
+
* validateHostname("bad;rm -rf /"); // throws HostSecurityError
|
|
47
|
+
* ```
|
|
33
48
|
*/
|
|
34
|
-
export declare function
|
|
49
|
+
export declare function validateHostname(hostname: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Security error for SSH argument validation
|
|
52
|
+
*/
|
|
53
|
+
export declare class SSHArgSecurityError extends Error {
|
|
54
|
+
readonly arg: string;
|
|
55
|
+
readonly paramName: string;
|
|
56
|
+
constructor(message: string, arg: string, paramName: string);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Validates SSH command argument to prevent command injection.
|
|
60
|
+
*
|
|
61
|
+
* Security: Prevents CWE-77 (Command Injection) and CWE-78 (OS Command Injection)
|
|
62
|
+
* by rejecting shell metacharacters. The SSH service joins args with spaces and executes
|
|
63
|
+
* as a shell command, so an attacker could inject arbitrary commands (e.g., "running; rm -rf /").
|
|
64
|
+
* @see https://cwe.mitre.org/data/definitions/77.html
|
|
65
|
+
* @see https://cwe.mitre.org/data/definitions/78.html
|
|
66
|
+
*
|
|
67
|
+
* @param arg - Argument value to validate (max 500 characters, no shell metacharacters)
|
|
68
|
+
* @param paramName - Name of the parameter (used in error messages for context)
|
|
69
|
+
* @throws {SSHArgSecurityError} If arg is empty, contains shell metacharacters, or exceeds 500 characters
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* validateSSHArg("running", "status"); // valid
|
|
73
|
+
* validateSSHArg("docker-compose.yml", "file"); // valid
|
|
74
|
+
* validateSSHArg("arg; rm -rf /", "input"); // throws SSHArgSecurityError
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function validateSSHArg(arg: string, paramName: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* @deprecated Use validateServiceName from validation.ts instead
|
|
80
|
+
* Re-exported for backwards compatibility
|
|
81
|
+
*/
|
|
82
|
+
export { validateServiceName as validateSystemdServiceName } from "./validation.js";
|
|
35
83
|
/**
|
|
36
84
|
* Escapes a string for safe use as a shell argument.
|
|
37
|
-
* Uses single quotes with proper escaping for embedded single quotes.
|
|
38
85
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
86
|
+
* Security: Prevents CWE-78 (OS Command Injection) by wrapping argument in single quotes
|
|
87
|
+
* and properly escaping any embedded single quotes using the '\'' sequence.
|
|
88
|
+
* @see https://cwe.mitre.org/data/definitions/78.html
|
|
89
|
+
*
|
|
90
|
+
* @param arg - String to escape for shell usage
|
|
91
|
+
* @returns Safely quoted string suitable for shell command construction
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* escapeShellArg("hello world"); // returns: 'hello world'
|
|
95
|
+
* escapeShellArg("it's a test"); // returns: 'it'\''s a test'
|
|
96
|
+
* escapeShellArg("$(rm -rf /)"); // returns: '$(rm -rf /)' (neutered)
|
|
97
|
+
* ```
|
|
41
98
|
*/
|
|
42
99
|
export declare function escapeShellArg(arg: string): string;
|
|
43
100
|
/**
|
|
44
|
-
* Checks if a path is a system path that should be protected
|
|
101
|
+
* Checks if a path is a system path that should be protected from modification.
|
|
45
102
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
103
|
+
* Identifies paths in critical system directories (/etc, /bin, /sbin, /usr/bin, /usr/sbin,
|
|
104
|
+
* /lib, /lib64, /boot, /root) that typically require elevated privileges and should
|
|
105
|
+
* trigger warnings when used as transfer targets.
|
|
106
|
+
*
|
|
107
|
+
* @param path - Absolute path to check against system directory prefixes
|
|
108
|
+
* @returns true if path is in a system directory, false otherwise
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* isSystemPath("/etc/nginx/nginx.conf"); // true
|
|
112
|
+
* isSystemPath("/home/user/file.txt"); // false
|
|
113
|
+
* isSystemPath("/usr/bin/curl"); // true
|
|
114
|
+
* ```
|
|
48
115
|
*/
|
|
49
116
|
export declare function isSystemPath(path: string): boolean;
|
|
50
117
|
/**
|
|
51
|
-
* Validates that a file path is safe from directory traversal attacks
|
|
118
|
+
* Validates that a file path is safe from directory traversal attacks.
|
|
119
|
+
*
|
|
120
|
+
* Security: Prevents CWE-22 (Path Traversal) by enforcing strict path validation rules
|
|
121
|
+
* to prevent attackers from accessing files outside intended directories.
|
|
122
|
+
* @see https://cwe.mitre.org/data/definitions/22.html
|
|
52
123
|
*
|
|
53
|
-
*
|
|
124
|
+
* SECURITY (S-M5, CWE-22): Character Set Restrictions
|
|
125
|
+
* ----------------------------------------------------
|
|
126
|
+
* This function deliberately uses a conservative character whitelist to prioritize
|
|
127
|
+
* security over flexibility. The allowed character set is: [a-zA-Z0-9._\-/]
|
|
128
|
+
*
|
|
129
|
+
* **Allowed:**
|
|
130
|
+
* - Alphanumeric: a-z, A-Z, 0-9
|
|
131
|
+
* - Separators: forward slash (/)
|
|
132
|
+
* - Safe punctuation: dot (.), hyphen (-), underscore (_)
|
|
133
|
+
*
|
|
134
|
+
* **Explicitly Rejected:**
|
|
135
|
+
* - Spaces: Rejected to prevent parsing ambiguity in shell contexts and URL encoding issues
|
|
136
|
+
* - Colons: Rejected to prevent NTFS alternate data stream access (Windows) and URL scheme confusion
|
|
137
|
+
* - Backslashes: Rejected to prevent Windows path traversal and escape sequence injection
|
|
138
|
+
* - Shell metacharacters: &, |, ;, $, `, <, >, (, ), {, }, [, ], *, ?, ~, !, #, @
|
|
139
|
+
*
|
|
140
|
+
* **Design Rationale:**
|
|
141
|
+
* While spaces and colons are technically valid in POSIX paths, they create security risks:
|
|
142
|
+
* 1. Spaces require proper quoting in shell contexts (SSH commands, Docker exec)
|
|
143
|
+
* 2. Colons enable Windows alternate data streams (file.txt:hidden) and path separator confusion
|
|
144
|
+
* 3. Conservative whitelist prevents future attack vectors as new exploits are discovered
|
|
145
|
+
*
|
|
146
|
+
* **If you need paths with spaces or colons:**
|
|
147
|
+
* Use escapeShellArg() for shell command construction, but understand this function
|
|
148
|
+
* deliberately rejects them at the validation layer as a defense-in-depth measure.
|
|
149
|
+
* The security review (02-security-performance.md, S-M5) concluded: "Security over flexibility."
|
|
150
|
+
*
|
|
151
|
+
* Validation rules:
|
|
54
152
|
* 1. Must be absolute path (starts with /)
|
|
55
|
-
* 2. Cannot contain .. (parent directory)
|
|
56
|
-
* 3. Cannot contain . as a
|
|
57
|
-
* 4. Must contain only
|
|
153
|
+
* 2. Cannot contain .. (parent directory traversal)
|
|
154
|
+
* 3. Cannot contain . as a standalone component (current directory)
|
|
155
|
+
* 4. Must contain only safe characters: a-zA-Z0-9._-/
|
|
156
|
+
* 5. Path resolution must not result in traversal
|
|
157
|
+
*
|
|
158
|
+
* @param path - The file path to validate (must be absolute)
|
|
159
|
+
* @param paramName - Name of the parameter (used in error messages for context)
|
|
160
|
+
* @throws {Error} If path is empty, contains traversal sequences, has invalid characters, or is not absolute
|
|
161
|
+
* @example
|
|
162
|
+
* ```typescript
|
|
163
|
+
* // Valid paths
|
|
164
|
+
* validateSecurePath("/data/files/doc.txt", "file"); // OK
|
|
165
|
+
* validateSecurePath("/app/config.json", "config"); // OK
|
|
166
|
+
* validateSecurePath("/srv/docker-compose.yml", "file"); // OK (hyphens allowed)
|
|
167
|
+
* validateSecurePath("/home/user_name/file.tar.gz", "archive"); // OK (underscores, dots allowed)
|
|
58
168
|
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
169
|
+
* // Rejected for security
|
|
170
|
+
* validateSecurePath("../../../etc/passwd", "file"); // throws: relative path with traversal
|
|
171
|
+
* validateSecurePath("/valid/../../../etc/passwd", "file"); // throws: traversal sequence
|
|
172
|
+
* validateSecurePath("/path with spaces/file.txt", "file"); // throws: spaces not allowed
|
|
173
|
+
* validateSecurePath("/path:alternate/file", "file"); // throws: colons not allowed
|
|
174
|
+
* validateSecurePath("/path/$(rm -rf /)", "file"); // throws: shell metacharacters not allowed
|
|
175
|
+
* ```
|
|
62
176
|
*/
|
|
63
177
|
export declare function validateSecurePath(path: string, paramName: string): void;
|
|
64
178
|
//# sourceMappingURL=path-security.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-security.d.ts","sourceRoot":"","sources":["../../src/utils/path-security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"path-security.d.ts","sourceRoot":"","sources":["../../src/utils/path-security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAK/B;AAcD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,QAAuB,CAAC;AAEjE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAevD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,GAAG,EAAE,MAAM;aACX,SAAS,EAAE,MAAM;gBAFjC,OAAO,EAAE,MAAM,EACC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM;CAKpC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAqBnE;AAED;;;GAGG;AACH,OAAO,EAAE,mBAAmB,IAAI,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAEpF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIlD;AAiBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAoCxE"}
|