imposters 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/Program/package.json +6 -0
- package/README.md +365 -0
- package/api/AdminApi/package.json +6 -0
- package/api/ApiErrors/package.json +6 -0
- package/api/ApiSchemas/package.json +6 -0
- package/api/Conversions/package.json +6 -0
- package/api/ImpostersGroup/package.json +6 -0
- package/api/ImpostersHandlers/package.json +6 -0
- package/api/SystemGroup/package.json +6 -0
- package/api/SystemHandlers/package.json +6 -0
- package/bin/imposters +47 -0
- package/cli/Commands/package.json +6 -0
- package/cli/ConfigLoader/package.json +6 -0
- package/client/HandlerHttpClient/package.json +6 -0
- package/client/ImpostersClient/package.json +6 -0
- package/client/testing/package.json +6 -0
- package/dist/cjs/Program.js +4 -0
- package/dist/cjs/Program.js.map +1 -0
- package/dist/cjs/api/AdminApi.js +11 -0
- package/dist/cjs/api/AdminApi.js.map +1 -0
- package/dist/cjs/api/ApiErrors.js +30 -0
- package/dist/cjs/api/ApiErrors.js.map +1 -0
- package/dist/cjs/api/ApiSchemas.js +36 -0
- package/dist/cjs/api/ApiSchemas.js.map +1 -0
- package/dist/cjs/api/Conversions.js +41 -0
- package/dist/cjs/api/Conversions.js.map +1 -0
- package/dist/cjs/api/ImpostersGroup.js +37 -0
- package/dist/cjs/api/ImpostersGroup.js.map +1 -0
- package/dist/cjs/api/ImpostersHandlers.js +361 -0
- package/dist/cjs/api/ImpostersHandlers.js.map +1 -0
- package/dist/cjs/api/SystemGroup.js +12 -0
- package/dist/cjs/api/SystemGroup.js.map +1 -0
- package/dist/cjs/api/SystemHandlers.js +74 -0
- package/dist/cjs/api/SystemHandlers.js.map +1 -0
- package/dist/cjs/cli/Commands.js +104 -0
- package/dist/cjs/cli/Commands.js.map +1 -0
- package/dist/cjs/cli/ConfigLoader.js +34 -0
- package/dist/cjs/cli/ConfigLoader.js.map +1 -0
- package/dist/cjs/client/HandlerHttpClient.js +50 -0
- package/dist/cjs/client/HandlerHttpClient.js.map +1 -0
- package/dist/cjs/client/ImpostersClient.js +20 -0
- package/dist/cjs/client/ImpostersClient.js.map +1 -0
- package/dist/cjs/client/index.js +57 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/client/testing.js +94 -0
- package/dist/cjs/client/testing.js.map +1 -0
- package/dist/cjs/domain/imposter.js +125 -0
- package/dist/cjs/domain/imposter.js.map +1 -0
- package/dist/cjs/domain/route.js +185 -0
- package/dist/cjs/domain/route.js.map +1 -0
- package/dist/cjs/index.js +106 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/layers/ApiLayer.js +18 -0
- package/dist/cjs/layers/ApiLayer.js.map +1 -0
- package/dist/cjs/layers/MainLayer.js +27 -0
- package/dist/cjs/layers/MainLayer.js.map +1 -0
- package/dist/cjs/matching/ExpressionEvaluator.js +103 -0
- package/dist/cjs/matching/ExpressionEvaluator.js.map +1 -0
- package/dist/cjs/matching/RequestMatcher.js +145 -0
- package/dist/cjs/matching/RequestMatcher.js.map +1 -0
- package/dist/cjs/matching/ResponseGenerator.js +80 -0
- package/dist/cjs/matching/ResponseGenerator.js.map +1 -0
- package/dist/cjs/matching/TemplateEngine.js +55 -0
- package/dist/cjs/matching/TemplateEngine.js.map +1 -0
- package/dist/cjs/repositories/ImposterRepository.js +118 -0
- package/dist/cjs/repositories/ImposterRepository.js.map +1 -0
- package/dist/cjs/schemas/ConfigFileSchema.js +44 -0
- package/dist/cjs/schemas/ConfigFileSchema.js.map +1 -0
- package/dist/cjs/schemas/ImposterSchema.js +202 -0
- package/dist/cjs/schemas/ImposterSchema.js.map +1 -0
- package/dist/cjs/schemas/RequestLogSchema.js +51 -0
- package/dist/cjs/schemas/RequestLogSchema.js.map +1 -0
- package/dist/cjs/schemas/StubSchema.js +84 -0
- package/dist/cjs/schemas/StubSchema.js.map +1 -0
- package/dist/cjs/schemas/common.js +67 -0
- package/dist/cjs/schemas/common.js.map +1 -0
- package/dist/cjs/server/AdminServer.js +36 -0
- package/dist/cjs/server/AdminServer.js.map +1 -0
- package/dist/cjs/server/BunServer.js +13 -0
- package/dist/cjs/server/BunServer.js.map +1 -0
- package/dist/cjs/server/FiberManager.js +21 -0
- package/dist/cjs/server/FiberManager.js.map +1 -0
- package/dist/cjs/server/ImposterServer.js +234 -0
- package/dist/cjs/server/ImposterServer.js.map +1 -0
- package/dist/cjs/services/AppConfig.js +18 -0
- package/dist/cjs/services/AppConfig.js.map +1 -0
- package/dist/cjs/services/MetricsService.js +113 -0
- package/dist/cjs/services/MetricsService.js.map +1 -0
- package/dist/cjs/services/PortAllocator.js +50 -0
- package/dist/cjs/services/PortAllocator.js.map +1 -0
- package/dist/cjs/services/ProxyService.js +109 -0
- package/dist/cjs/services/ProxyService.js.map +1 -0
- package/dist/cjs/services/RequestLogger.js +60 -0
- package/dist/cjs/services/RequestLogger.js.map +1 -0
- package/dist/cjs/services/Uuid.js +10 -0
- package/dist/cjs/services/Uuid.js.map +1 -0
- package/dist/cjs/services/UuidLive.js +16 -0
- package/dist/cjs/services/UuidLive.js.map +1 -0
- package/dist/cjs/ui/UiRouter.js +242 -0
- package/dist/cjs/ui/UiRouter.js.map +1 -0
- package/dist/cjs/ui/admin/AdminLayout.js +36 -0
- package/dist/cjs/ui/admin/AdminLayout.js.map +1 -0
- package/dist/cjs/ui/admin/AdminUiRouter.js +155 -0
- package/dist/cjs/ui/admin/AdminUiRouter.js.map +1 -0
- package/dist/cjs/ui/admin/pages/AdminDashboard.js +55 -0
- package/dist/cjs/ui/admin/pages/AdminDashboard.js.map +1 -0
- package/dist/cjs/ui/admin/partials.js +64 -0
- package/dist/cjs/ui/admin/partials.js.map +1 -0
- package/dist/cjs/ui/html.js +42 -0
- package/dist/cjs/ui/html.js.map +1 -0
- package/dist/cjs/ui/layout.js +39 -0
- package/dist/cjs/ui/layout.js.map +1 -0
- package/dist/cjs/ui/pages/dashboard.js +51 -0
- package/dist/cjs/ui/pages/dashboard.js.map +1 -0
- package/dist/cjs/ui/pages/request-detail.js +119 -0
- package/dist/cjs/ui/pages/request-detail.js.map +1 -0
- package/dist/cjs/ui/pages/requests.js +120 -0
- package/dist/cjs/ui/pages/requests.js.map +1 -0
- package/dist/cjs/ui/pages/stubs.js +46 -0
- package/dist/cjs/ui/pages/stubs.js.map +1 -0
- package/dist/cjs/ui/partials.js +104 -0
- package/dist/cjs/ui/partials.js.map +1 -0
- package/dist/dts/Program.d.ts +2 -0
- package/dist/dts/Program.d.ts.map +1 -0
- package/dist/dts/api/AdminApi.d.ts +490 -0
- package/dist/dts/api/AdminApi.d.ts.map +1 -0
- package/dist/dts/api/ApiErrors.d.ts +26 -0
- package/dist/dts/api/ApiErrors.d.ts.map +1 -0
- package/dist/dts/api/ApiSchemas.d.ts +36 -0
- package/dist/dts/api/ApiSchemas.d.ts.map +1 -0
- package/dist/dts/api/Conversions.d.ts +7 -0
- package/dist/dts/api/Conversions.d.ts.map +1 -0
- package/dist/dts/api/ImpostersGroup.d.ts +448 -0
- package/dist/dts/api/ImpostersGroup.d.ts.map +1 -0
- package/dist/dts/api/ImpostersHandlers.d.ts +9 -0
- package/dist/dts/api/ImpostersHandlers.d.ts.map +1 -0
- package/dist/dts/api/SystemGroup.d.ts +46 -0
- package/dist/dts/api/SystemGroup.d.ts.map +1 -0
- package/dist/dts/api/SystemHandlers.d.ts +4 -0
- package/dist/dts/api/SystemHandlers.d.ts.map +1 -0
- package/dist/dts/cli/Commands.d.ts +4 -0
- package/dist/dts/cli/Commands.d.ts.map +1 -0
- package/dist/dts/cli/ConfigLoader.d.ts +13 -0
- package/dist/dts/cli/ConfigLoader.d.ts.map +1 -0
- package/dist/dts/client/HandlerHttpClient.d.ts +5 -0
- package/dist/dts/client/HandlerHttpClient.d.ts.map +1 -0
- package/dist/dts/client/ImpostersClient.d.ts +1868 -0
- package/dist/dts/client/ImpostersClient.d.ts.map +1 -0
- package/dist/dts/client/index.d.ts +6 -0
- package/dist/dts/client/index.d.ts.map +1 -0
- package/dist/dts/client/testing.d.ts +35 -0
- package/dist/dts/client/testing.d.ts.map +1 -0
- package/dist/dts/domain/imposter.d.ts +123 -0
- package/dist/dts/domain/imposter.d.ts.map +1 -0
- package/dist/dts/domain/route.d.ts +128 -0
- package/dist/dts/domain/route.d.ts.map +1 -0
- package/dist/dts/index.d.ts +60 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/layers/ApiLayer.d.ts +3 -0
- package/dist/dts/layers/ApiLayer.d.ts.map +1 -0
- package/dist/dts/layers/MainLayer.d.ts +3 -0
- package/dist/dts/layers/MainLayer.d.ts.map +1 -0
- package/dist/dts/matching/ExpressionEvaluator.d.ts +11 -0
- package/dist/dts/matching/ExpressionEvaluator.d.ts.map +1 -0
- package/dist/dts/matching/RequestMatcher.d.ts +13 -0
- package/dist/dts/matching/RequestMatcher.d.ts.map +1 -0
- package/dist/dts/matching/ResponseGenerator.d.ts +9 -0
- package/dist/dts/matching/ResponseGenerator.d.ts.map +1 -0
- package/dist/dts/matching/TemplateEngine.d.ts +4 -0
- package/dist/dts/matching/TemplateEngine.d.ts.map +1 -0
- package/dist/dts/repositories/ImposterRepository.d.ts +33 -0
- package/dist/dts/repositories/ImposterRepository.d.ts.map +1 -0
- package/dist/dts/schemas/ConfigFileSchema.d.ts +142 -0
- package/dist/dts/schemas/ConfigFileSchema.d.ts.map +1 -0
- package/dist/dts/schemas/ImposterSchema.d.ts +368 -0
- package/dist/dts/schemas/ImposterSchema.d.ts.map +1 -0
- package/dist/dts/schemas/RequestLogSchema.d.ts +36 -0
- package/dist/dts/schemas/RequestLogSchema.d.ts.map +1 -0
- package/dist/dts/schemas/StubSchema.d.ts +112 -0
- package/dist/dts/schemas/StubSchema.d.ts.map +1 -0
- package/dist/dts/schemas/common.d.ts +56 -0
- package/dist/dts/schemas/common.d.ts.map +1 -0
- package/dist/dts/server/AdminServer.d.ts +11 -0
- package/dist/dts/server/AdminServer.d.ts.map +1 -0
- package/dist/dts/server/BunServer.d.ts +17 -0
- package/dist/dts/server/BunServer.d.ts.map +1 -0
- package/dist/dts/server/FiberManager.d.ts +12 -0
- package/dist/dts/server/FiberManager.d.ts.map +1 -0
- package/dist/dts/server/ImposterServer.d.ts +29 -0
- package/dist/dts/server/ImposterServer.d.ts.map +1 -0
- package/dist/dts/services/AppConfig.d.ts +14 -0
- package/dist/dts/services/AppConfig.d.ts.map +1 -0
- package/dist/dts/services/MetricsService.d.ts +26 -0
- package/dist/dts/services/MetricsService.d.ts.map +1 -0
- package/dist/dts/services/PortAllocator.d.ts +29 -0
- package/dist/dts/services/PortAllocator.d.ts.map +1 -0
- package/dist/dts/services/ProxyService.d.ts +24 -0
- package/dist/dts/services/ProxyService.d.ts.map +1 -0
- package/dist/dts/services/RequestLogger.d.ts +23 -0
- package/dist/dts/services/RequestLogger.d.ts.map +1 -0
- package/dist/dts/services/Uuid.d.ts +9 -0
- package/dist/dts/services/Uuid.d.ts.map +1 -0
- package/dist/dts/services/UuidLive.d.ts +4 -0
- package/dist/dts/services/UuidLive.d.ts.map +1 -0
- package/dist/dts/ui/UiRouter.d.ts +15 -0
- package/dist/dts/ui/UiRouter.d.ts.map +1 -0
- package/dist/dts/ui/admin/AdminLayout.d.ts +7 -0
- package/dist/dts/ui/admin/AdminLayout.d.ts.map +1 -0
- package/dist/dts/ui/admin/AdminUiRouter.d.ts +6 -0
- package/dist/dts/ui/admin/AdminUiRouter.d.ts.map +1 -0
- package/dist/dts/ui/admin/pages/AdminDashboard.d.ts +7 -0
- package/dist/dts/ui/admin/pages/AdminDashboard.d.ts.map +1 -0
- package/dist/dts/ui/admin/partials.d.ts +14 -0
- package/dist/dts/ui/admin/partials.d.ts.map +1 -0
- package/dist/dts/ui/html.d.ts +12 -0
- package/dist/dts/ui/html.d.ts.map +1 -0
- package/dist/dts/ui/layout.d.ts +9 -0
- package/dist/dts/ui/layout.d.ts.map +1 -0
- package/dist/dts/ui/pages/dashboard.d.ts +10 -0
- package/dist/dts/ui/pages/dashboard.d.ts.map +1 -0
- package/dist/dts/ui/pages/request-detail.d.ts +11 -0
- package/dist/dts/ui/pages/request-detail.d.ts.map +1 -0
- package/dist/dts/ui/pages/requests.d.ts +15 -0
- package/dist/dts/ui/pages/requests.d.ts.map +1 -0
- package/dist/dts/ui/pages/stubs.d.ts +8 -0
- package/dist/dts/ui/pages/stubs.d.ts.map +1 -0
- package/dist/dts/ui/partials.d.ts +13 -0
- package/dist/dts/ui/partials.d.ts.map +1 -0
- package/dist/esm/Program.js +2 -0
- package/dist/esm/Program.js.map +1 -0
- package/dist/esm/api/AdminApi.js +5 -0
- package/dist/esm/api/AdminApi.js.map +1 -0
- package/dist/esm/api/ApiErrors.js +20 -0
- package/dist/esm/api/ApiErrors.js.map +1 -0
- package/dist/esm/api/ApiSchemas.js +29 -0
- package/dist/esm/api/ApiSchemas.js.map +1 -0
- package/dist/esm/api/Conversions.js +32 -0
- package/dist/esm/api/Conversions.js.map +1 -0
- package/dist/esm/api/ImpostersGroup.js +30 -0
- package/dist/esm/api/ImpostersGroup.js.map +1 -0
- package/dist/esm/api/ImpostersHandlers.js +354 -0
- package/dist/esm/api/ImpostersHandlers.js.map +1 -0
- package/dist/esm/api/SystemGroup.js +6 -0
- package/dist/esm/api/SystemGroup.js.map +1 -0
- package/dist/esm/api/SystemHandlers.js +67 -0
- package/dist/esm/api/SystemHandlers.js.map +1 -0
- package/dist/esm/cli/Commands.js +98 -0
- package/dist/esm/cli/Commands.js.map +1 -0
- package/dist/esm/cli/ConfigLoader.js +25 -0
- package/dist/esm/cli/ConfigLoader.js.map +1 -0
- package/dist/esm/client/HandlerHttpClient.js +42 -0
- package/dist/esm/client/HandlerHttpClient.js.map +1 -0
- package/dist/esm/client/ImpostersClient.js +10 -0
- package/dist/esm/client/ImpostersClient.js.map +1 -0
- package/dist/esm/client/index.js +4 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/client/testing.js +86 -0
- package/dist/esm/client/testing.js.map +1 -0
- package/dist/esm/domain/imposter.js +103 -0
- package/dist/esm/domain/imposter.js.map +1 -0
- package/dist/esm/domain/route.js +164 -0
- package/dist/esm/domain/route.js.map +1 -0
- package/dist/esm/index.js +60 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/layers/ApiLayer.js +11 -0
- package/dist/esm/layers/ApiLayer.js.map +1 -0
- package/dist/esm/layers/MainLayer.js +20 -0
- package/dist/esm/layers/MainLayer.js.map +1 -0
- package/dist/esm/matching/ExpressionEvaluator.js +94 -0
- package/dist/esm/matching/ExpressionEvaluator.js.map +1 -0
- package/dist/esm/matching/RequestMatcher.js +135 -0
- package/dist/esm/matching/RequestMatcher.js.map +1 -0
- package/dist/esm/matching/ResponseGenerator.js +71 -0
- package/dist/esm/matching/ResponseGenerator.js.map +1 -0
- package/dist/esm/matching/TemplateEngine.js +47 -0
- package/dist/esm/matching/TemplateEngine.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/dist/esm/repositories/ImposterRepository.js +110 -0
- package/dist/esm/repositories/ImposterRepository.js.map +1 -0
- package/dist/esm/schemas/ConfigFileSchema.js +37 -0
- package/dist/esm/schemas/ConfigFileSchema.js.map +1 -0
- package/dist/esm/schemas/ImposterSchema.js +195 -0
- package/dist/esm/schemas/ImposterSchema.js.map +1 -0
- package/dist/esm/schemas/RequestLogSchema.js +44 -0
- package/dist/esm/schemas/RequestLogSchema.js.map +1 -0
- package/dist/esm/schemas/StubSchema.js +77 -0
- package/dist/esm/schemas/StubSchema.js.map +1 -0
- package/dist/esm/schemas/common.js +59 -0
- package/dist/esm/schemas/common.js.map +1 -0
- package/dist/esm/server/AdminServer.js +27 -0
- package/dist/esm/server/AdminServer.js.map +1 -0
- package/dist/esm/server/BunServer.js +6 -0
- package/dist/esm/server/BunServer.js.map +1 -0
- package/dist/esm/server/FiberManager.js +14 -0
- package/dist/esm/server/FiberManager.js.map +1 -0
- package/dist/esm/server/ImposterServer.js +225 -0
- package/dist/esm/server/ImposterServer.js.map +1 -0
- package/dist/esm/services/AppConfig.js +11 -0
- package/dist/esm/services/AppConfig.js.map +1 -0
- package/dist/esm/services/MetricsService.js +105 -0
- package/dist/esm/services/MetricsService.js.map +1 -0
- package/dist/esm/services/PortAllocator.js +41 -0
- package/dist/esm/services/PortAllocator.js.map +1 -0
- package/dist/esm/services/ProxyService.js +101 -0
- package/dist/esm/services/ProxyService.js.map +1 -0
- package/dist/esm/services/RequestLogger.js +53 -0
- package/dist/esm/services/RequestLogger.js.map +1 -0
- package/dist/esm/services/Uuid.js +3 -0
- package/dist/esm/services/Uuid.js.map +1 -0
- package/dist/esm/services/UuidLive.js +9 -0
- package/dist/esm/services/UuidLive.js.map +1 -0
- package/dist/esm/ui/UiRouter.js +235 -0
- package/dist/esm/ui/UiRouter.js.map +1 -0
- package/dist/esm/ui/admin/AdminLayout.js +29 -0
- package/dist/esm/ui/admin/AdminLayout.js.map +1 -0
- package/dist/esm/ui/admin/AdminUiRouter.js +148 -0
- package/dist/esm/ui/admin/AdminUiRouter.js.map +1 -0
- package/dist/esm/ui/admin/pages/AdminDashboard.js +48 -0
- package/dist/esm/ui/admin/pages/AdminDashboard.js.map +1 -0
- package/dist/esm/ui/admin/partials.js +54 -0
- package/dist/esm/ui/admin/partials.js.map +1 -0
- package/dist/esm/ui/html.js +32 -0
- package/dist/esm/ui/html.js.map +1 -0
- package/dist/esm/ui/layout.js +32 -0
- package/dist/esm/ui/layout.js.map +1 -0
- package/dist/esm/ui/pages/dashboard.js +44 -0
- package/dist/esm/ui/pages/dashboard.js.map +1 -0
- package/dist/esm/ui/pages/request-detail.js +112 -0
- package/dist/esm/ui/pages/request-detail.js.map +1 -0
- package/dist/esm/ui/pages/requests.js +112 -0
- package/dist/esm/ui/pages/requests.js.map +1 -0
- package/dist/esm/ui/pages/stubs.js +39 -0
- package/dist/esm/ui/pages/stubs.js.map +1 -0
- package/dist/esm/ui/partials.js +91 -0
- package/dist/esm/ui/partials.js.map +1 -0
- package/domain/imposter/package.json +6 -0
- package/domain/route/package.json +6 -0
- package/layers/ApiLayer/package.json +6 -0
- package/layers/MainLayer/package.json +6 -0
- package/matching/ExpressionEvaluator/package.json +6 -0
- package/matching/RequestMatcher/package.json +6 -0
- package/matching/ResponseGenerator/package.json +6 -0
- package/matching/TemplateEngine/package.json +6 -0
- package/package.json +435 -0
- package/repositories/ImposterRepository/package.json +6 -0
- package/schemas/ConfigFileSchema/package.json +6 -0
- package/schemas/ImposterSchema/package.json +6 -0
- package/schemas/RequestLogSchema/package.json +6 -0
- package/schemas/StubSchema/package.json +6 -0
- package/schemas/common/package.json +6 -0
- package/server/AdminServer/package.json +6 -0
- package/server/BunServer/package.json +6 -0
- package/server/FiberManager/package.json +6 -0
- package/server/ImposterServer/package.json +6 -0
- package/services/AppConfig/package.json +6 -0
- package/services/MetricsService/package.json +6 -0
- package/services/PortAllocator/package.json +6 -0
- package/services/ProxyService/package.json +6 -0
- package/services/RequestLogger/package.json +6 -0
- package/services/Uuid/package.json +6 -0
- package/services/UuidLive/package.json +6 -0
- package/src/Program.ts +1 -0
- package/src/api/AdminApi.ts +7 -0
- package/src/api/ApiErrors.ts +20 -0
- package/src/api/ApiSchemas.ts +36 -0
- package/src/api/Conversions.ts +34 -0
- package/src/api/ImpostersGroup.ts +103 -0
- package/src/api/ImpostersHandlers.ts +387 -0
- package/src/api/SystemGroup.ts +12 -0
- package/src/api/SystemHandlers.ts +76 -0
- package/src/cli/Commands.ts +119 -0
- package/src/cli/ConfigLoader.ts +41 -0
- package/src/client/HandlerHttpClient.ts +50 -0
- package/src/client/ImpostersClient.ts +21 -0
- package/src/client/index.ts +9 -0
- package/src/client/testing.ts +105 -0
- package/src/domain/imposter.ts +186 -0
- package/src/domain/route.ts +255 -0
- package/src/index.ts +153 -0
- package/src/layers/ApiLayer.ts +21 -0
- package/src/layers/MainLayer.ts +43 -0
- package/src/matching/ExpressionEvaluator.ts +102 -0
- package/src/matching/RequestMatcher.ts +162 -0
- package/src/matching/ResponseGenerator.ts +86 -0
- package/src/matching/TemplateEngine.ts +54 -0
- package/src/repositories/ImposterRepository.ts +145 -0
- package/src/schemas/ConfigFileSchema.ts +32 -0
- package/src/schemas/ImposterSchema.ts +232 -0
- package/src/schemas/RequestLogSchema.ts +38 -0
- package/src/schemas/StubSchema.ts +90 -0
- package/src/schemas/common.ts +95 -0
- package/src/server/AdminServer.ts +22 -0
- package/src/server/BunServer.ts +19 -0
- package/src/server/FiberManager.ts +25 -0
- package/src/server/ImposterServer.ts +244 -0
- package/src/services/AppConfig.ts +22 -0
- package/src/services/MetricsService.ts +157 -0
- package/src/services/PortAllocator.ts +68 -0
- package/src/services/ProxyService.ts +139 -0
- package/src/services/RequestLogger.ts +87 -0
- package/src/services/Uuid.ts +9 -0
- package/src/services/UuidLive.ts +9 -0
- package/src/types/bun.d.ts +6 -0
- package/src/ui/UiRouter.ts +278 -0
- package/src/ui/admin/AdminLayout.ts +36 -0
- package/src/ui/admin/AdminUiRouter.ts +170 -0
- package/src/ui/admin/pages/AdminDashboard.ts +54 -0
- package/src/ui/admin/partials.ts +83 -0
- package/src/ui/html.ts +37 -0
- package/src/ui/layout.ts +44 -0
- package/src/ui/pages/dashboard.ts +64 -0
- package/src/ui/pages/request-detail.ts +142 -0
- package/src/ui/pages/requests.ts +141 -0
- package/src/ui/pages/stubs.ts +52 -0
- package/src/ui/partials.ts +133 -0
- package/ui/UiRouter/package.json +6 -0
- package/ui/admin/AdminLayout/package.json +6 -0
- package/ui/admin/AdminUiRouter/package.json +6 -0
- package/ui/admin/pages/AdminDashboard/package.json +6 -0
- package/ui/admin/partials/package.json +6 -0
- package/ui/html/package.json +6 -0
- package/ui/layout/package.json +6 -0
- package/ui/pages/dashboard/package.json +6 -0
- package/ui/pages/requests/package.json +6 -0
- package/ui/pages/stubs/package.json +6 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-present <PLACEHOLDER>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
# Imposters
|
|
2
|
+
|
|
3
|
+
A modern service virtualization tool built with TypeScript and [Effect](https://effect.website). Create mock HTTP services for testing and development — a lightweight, programmable alternative to [Mountebank](http://www.mbtest.org/).
|
|
4
|
+
|
|
5
|
+
## What is Imposters?
|
|
6
|
+
|
|
7
|
+
Imposters lets you spin up fake HTTP servers ("imposters") that respond to requests based on configurable stubs. Each imposter listens on its own port and matches incoming requests against predicates, returning templated responses. Use it to isolate services in integration tests, prototype APIs, or simulate third-party dependencies.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- **Stub matching** — Match requests by method, path, headers, query params, or body using operators like `equals`, `contains`, `startsWith`, `matches`, and `exists`
|
|
12
|
+
- **Response templates** — Use `{{key}}` for simple substitution or `${expr}` for JSONata expressions that reference the incoming request
|
|
13
|
+
- **Multiple responses** — Cycle through responses sequentially, randomly, or repeat the last one
|
|
14
|
+
- **Proxy mode** — Passthrough to a real service or record responses as stubs
|
|
15
|
+
- **Per-imposter admin UI** — HTMX-powered UI at each imposter's `/_admin` path
|
|
16
|
+
- **Admin dashboard** — Global dashboard at `/_ui` on the admin port
|
|
17
|
+
- **Config file support** — Declare imposters and stubs in a JSON file for repeatable setups
|
|
18
|
+
- **TypeScript client** — Programmatic client and test helpers built on `@effect/platform`
|
|
19
|
+
- **Request logging** — Inspect captured requests per imposter with stats and percentile metrics
|
|
20
|
+
- **Built on Effect** — Fiber-based concurrency, typed errors, and composable services
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Install dependencies
|
|
26
|
+
bun install
|
|
27
|
+
|
|
28
|
+
# Start the admin server on the default port (2525)
|
|
29
|
+
bun tsx src/Program.ts start
|
|
30
|
+
|
|
31
|
+
# Create an imposter
|
|
32
|
+
curl -X POST http://localhost:2525/imposters \
|
|
33
|
+
-H "Content-Type: application/json" \
|
|
34
|
+
-d '{"name": "users-api", "port": 3000}'
|
|
35
|
+
|
|
36
|
+
# Add a stub
|
|
37
|
+
curl -X POST http://localhost:2525/imposters/<id>/stubs \
|
|
38
|
+
-H "Content-Type: application/json" \
|
|
39
|
+
-d '{
|
|
40
|
+
"predicates": [
|
|
41
|
+
{ "field": "method", "operator": "equals", "value": "GET" },
|
|
42
|
+
{ "field": "path", "operator": "equals", "value": "/users/1" }
|
|
43
|
+
],
|
|
44
|
+
"responses": [{
|
|
45
|
+
"status": 200,
|
|
46
|
+
"headers": { "content-type": "application/json" },
|
|
47
|
+
"body": { "id": 1, "name": "Alice" }
|
|
48
|
+
}]
|
|
49
|
+
}'
|
|
50
|
+
|
|
51
|
+
# Start the imposter
|
|
52
|
+
curl -X PATCH http://localhost:2525/imposters/<id> \
|
|
53
|
+
-H "Content-Type: application/json" \
|
|
54
|
+
-d '{"status": "running"}'
|
|
55
|
+
|
|
56
|
+
# Hit your mock
|
|
57
|
+
curl http://localhost:3000/users/1
|
|
58
|
+
# => {"id":1,"name":"Alice"}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## CLI Usage
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
imposters start [options]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
| Option | Alias | Description |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| `--port <number>` | `-p` | Admin server port (default: `2525`, or `ADMIN_PORT` env var) |
|
|
70
|
+
| `--config <path>` | `-c` | Path to a JSON config file |
|
|
71
|
+
|
|
72
|
+
## Config File
|
|
73
|
+
|
|
74
|
+
Declare imposters and stubs declaratively. Pass the file with `--config`:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"admin": {
|
|
79
|
+
"port": 2525,
|
|
80
|
+
"portRangeMin": 3000,
|
|
81
|
+
"portRangeMax": 4000,
|
|
82
|
+
"maxImposters": 100,
|
|
83
|
+
"logLevel": "info"
|
|
84
|
+
},
|
|
85
|
+
"imposters": [
|
|
86
|
+
{
|
|
87
|
+
"name": "users-api",
|
|
88
|
+
"port": 3000,
|
|
89
|
+
"stubs": [
|
|
90
|
+
{
|
|
91
|
+
"predicates": [
|
|
92
|
+
{ "field": "path", "operator": "equals", "value": "/health" }
|
|
93
|
+
],
|
|
94
|
+
"responses": [
|
|
95
|
+
{ "status": 200, "body": { "status": "ok" } }
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## API Reference
|
|
105
|
+
|
|
106
|
+
### System
|
|
107
|
+
|
|
108
|
+
| Method | Path | Description |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| `GET` | `/health` | Health check with system info |
|
|
111
|
+
| `GET` | `/info` | Server info, configuration, and feature flags |
|
|
112
|
+
|
|
113
|
+
### Imposters
|
|
114
|
+
|
|
115
|
+
| Method | Path | Description |
|
|
116
|
+
|---|---|---|
|
|
117
|
+
| `POST` | `/imposters` | Create an imposter |
|
|
118
|
+
| `GET` | `/imposters` | List imposters (supports `status` and `protocol` filters) |
|
|
119
|
+
| `GET` | `/imposters/:id` | Get imposter details |
|
|
120
|
+
| `PATCH` | `/imposters/:id` | Update imposter (name, status, port, proxy) |
|
|
121
|
+
| `DELETE` | `/imposters/:id` | Delete imposter (`?force=true` to skip confirmation) |
|
|
122
|
+
|
|
123
|
+
### Stubs
|
|
124
|
+
|
|
125
|
+
| Method | Path | Description |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| `POST` | `/imposters/:id/stubs` | Add a stub |
|
|
128
|
+
| `GET` | `/imposters/:id/stubs` | List stubs |
|
|
129
|
+
| `PUT` | `/imposters/:id/stubs/:stubId` | Update a stub |
|
|
130
|
+
| `DELETE` | `/imposters/:id/stubs/:stubId` | Delete a stub |
|
|
131
|
+
|
|
132
|
+
### Requests & Stats
|
|
133
|
+
|
|
134
|
+
| Method | Path | Description |
|
|
135
|
+
|---|---|---|
|
|
136
|
+
| `GET` | `/imposters/:id/requests` | List captured requests |
|
|
137
|
+
| `DELETE` | `/imposters/:id/requests` | Clear captured requests |
|
|
138
|
+
| `GET` | `/imposters/:id/stats` | Get imposter statistics |
|
|
139
|
+
| `DELETE` | `/imposters/:id/stats` | Reset imposter statistics |
|
|
140
|
+
|
|
141
|
+
## Stub Matching
|
|
142
|
+
|
|
143
|
+
Each stub has an array of **predicates** that are AND-combined. A request matches a stub when all predicates pass. Stubs are evaluated in order — the first match wins.
|
|
144
|
+
|
|
145
|
+
### Predicate fields
|
|
146
|
+
|
|
147
|
+
`method` | `path` | `headers` | `query` | `body`
|
|
148
|
+
|
|
149
|
+
### Operators
|
|
150
|
+
|
|
151
|
+
| Operator | Description |
|
|
152
|
+
|---|---|
|
|
153
|
+
| `equals` | Exact match (deep subset match for objects/body) |
|
|
154
|
+
| `contains` | Substring match |
|
|
155
|
+
| `startsWith` | Prefix match |
|
|
156
|
+
| `matches` | Regular expression match |
|
|
157
|
+
| `exists` | Field is present (ignores `value`) |
|
|
158
|
+
|
|
159
|
+
All operators support `caseSensitive` (default: `true`).
|
|
160
|
+
|
|
161
|
+
### Examples
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
// Match GET requests to any path starting with /api/
|
|
165
|
+
{
|
|
166
|
+
"predicates": [
|
|
167
|
+
{ "field": "method", "operator": "equals", "value": "GET" },
|
|
168
|
+
{ "field": "path", "operator": "startsWith", "value": "/api/" }
|
|
169
|
+
],
|
|
170
|
+
"responses": [{ "status": 200, "body": { "ok": true } }]
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```json
|
|
175
|
+
// Match requests with a specific header
|
|
176
|
+
{
|
|
177
|
+
"predicates": [
|
|
178
|
+
{ "field": "headers", "operator": "exists", "value": { "authorization": "" } }
|
|
179
|
+
],
|
|
180
|
+
"responses": [{ "status": 200 }]
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
```json
|
|
185
|
+
// Match POST with a JSON body subset
|
|
186
|
+
{
|
|
187
|
+
"predicates": [
|
|
188
|
+
{ "field": "method", "operator": "equals", "value": "POST" },
|
|
189
|
+
{ "field": "body", "operator": "equals", "value": { "action": "create" } }
|
|
190
|
+
],
|
|
191
|
+
"responses": [{ "status": 201 }]
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Response Templates
|
|
196
|
+
|
|
197
|
+
Response bodies support two kinds of dynamic substitution:
|
|
198
|
+
|
|
199
|
+
### `{{key}}` — Simple substitution
|
|
200
|
+
|
|
201
|
+
Reference flattened request context values:
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"responses": [{
|
|
206
|
+
"body": {
|
|
207
|
+
"echo": "You requested {{request.path}} with method {{request.method}}",
|
|
208
|
+
"token": "{{request.headers.authorization}}",
|
|
209
|
+
"search": "{{request.query.q}}"
|
|
210
|
+
}
|
|
211
|
+
}]
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Available keys follow the pattern `request.method`, `request.path`, `request.headers.<name>`, `request.query.<name>`, and `request.body.<path>` for nested body fields.
|
|
216
|
+
|
|
217
|
+
### `${expr}` — JSONata expressions
|
|
218
|
+
|
|
219
|
+
Use [JSONata](https://jsonata.org/) for computed values. The expression context is `{ request: { method, path, headers, query, body } }`.
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"responses": [{
|
|
224
|
+
"body": {
|
|
225
|
+
"greeting": "${\"Hello, \" & request.query.name}",
|
|
226
|
+
"itemCount": "${$count(request.body.items)}",
|
|
227
|
+
"uppercasePath": "${$uppercase(request.path)}"
|
|
228
|
+
}
|
|
229
|
+
}]
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
If an entire string is a single `${...}` expression, the raw result type is preserved (number, object, etc.). When mixed with other text, results are concatenated as strings.
|
|
234
|
+
|
|
235
|
+
## Proxy Mode
|
|
236
|
+
|
|
237
|
+
Configure an imposter to forward unmatched requests to a real backend.
|
|
238
|
+
|
|
239
|
+
```json
|
|
240
|
+
{
|
|
241
|
+
"name": "proxied-api",
|
|
242
|
+
"port": 3000,
|
|
243
|
+
"proxy": {
|
|
244
|
+
"targetUrl": "https://api.example.com",
|
|
245
|
+
"mode": "passthrough"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Modes
|
|
251
|
+
|
|
252
|
+
| Mode | Description |
|
|
253
|
+
|---|---|
|
|
254
|
+
| `passthrough` | Forward requests to the target and return the response as-is |
|
|
255
|
+
| `record` | Forward requests and automatically save responses as new stubs |
|
|
256
|
+
|
|
257
|
+
### Proxy options
|
|
258
|
+
|
|
259
|
+
| Option | Default | Description |
|
|
260
|
+
|---|---|---|
|
|
261
|
+
| `targetUrl` | *(required)* | Target base URL |
|
|
262
|
+
| `mode` | `passthrough` | `passthrough` or `record` |
|
|
263
|
+
| `addHeaders` | — | Headers to add to proxied requests |
|
|
264
|
+
| `removeHeaders` | `[]` | Headers to strip before proxying |
|
|
265
|
+
| `followRedirects` | `true` | Follow HTTP redirects |
|
|
266
|
+
| `timeout` | `10000` | Request timeout in milliseconds (100–60000) |
|
|
267
|
+
|
|
268
|
+
## Programmatic Usage
|
|
269
|
+
|
|
270
|
+
### TypeScript client
|
|
271
|
+
|
|
272
|
+
```typescript
|
|
273
|
+
import { ImpostersClientFetchLive, ImpostersClient } from "imposters/client"
|
|
274
|
+
import { Effect } from "effect"
|
|
275
|
+
|
|
276
|
+
const program = Effect.gen(function*() {
|
|
277
|
+
const client = yield* ImpostersClient
|
|
278
|
+
|
|
279
|
+
const imposter = yield* client.imposters.createImposter({
|
|
280
|
+
payload: { name: "my-api", port: 4000, protocol: "HTTP", adminPath: "/_admin" }
|
|
281
|
+
})
|
|
282
|
+
|
|
283
|
+
yield* client.imposters.addStub({
|
|
284
|
+
path: { imposterId: imposter.id },
|
|
285
|
+
payload: {
|
|
286
|
+
responses: [{ status: 200, body: { hello: "world" } }]
|
|
287
|
+
}
|
|
288
|
+
})
|
|
289
|
+
|
|
290
|
+
yield* client.imposters.updateImposter({
|
|
291
|
+
path: { id: imposter.id },
|
|
292
|
+
payload: { status: "running" }
|
|
293
|
+
})
|
|
294
|
+
})
|
|
295
|
+
|
|
296
|
+
program.pipe(
|
|
297
|
+
Effect.provide(ImpostersClientFetchLive("http://localhost:2525")),
|
|
298
|
+
Effect.runPromise
|
|
299
|
+
)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Test helpers
|
|
303
|
+
|
|
304
|
+
The `withImposter` helper manages the lifecycle of a test imposter — create, configure stubs, start, run your test, then clean up:
|
|
305
|
+
|
|
306
|
+
```typescript
|
|
307
|
+
import { withImposter, makeTestServer } from "imposters/client"
|
|
308
|
+
import { Effect } from "effect"
|
|
309
|
+
|
|
310
|
+
const { clientLayer } = makeTestServer(FullLayer)
|
|
311
|
+
|
|
312
|
+
const test = withImposter(
|
|
313
|
+
{
|
|
314
|
+
port: 4001,
|
|
315
|
+
name: "test-api",
|
|
316
|
+
stubs: [{
|
|
317
|
+
predicates: [
|
|
318
|
+
{ field: "path", operator: "equals", value: "/greet" }
|
|
319
|
+
],
|
|
320
|
+
responses: [{ status: 200, body: { message: "hi" } }]
|
|
321
|
+
}]
|
|
322
|
+
},
|
|
323
|
+
(ctx) =>
|
|
324
|
+
Effect.gen(function*() {
|
|
325
|
+
const res = yield* Effect.promise(() =>
|
|
326
|
+
fetch(`http://localhost:${ctx.port}/greet`)
|
|
327
|
+
)
|
|
328
|
+
// assert on res...
|
|
329
|
+
})
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
Effect.provide(test, clientLayer).pipe(Effect.runPromise)
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
## Admin UI
|
|
336
|
+
|
|
337
|
+
- **`/_ui`** on the admin port — Global dashboard showing all imposters
|
|
338
|
+
- **`/_admin`** on each imposter port — Per-imposter UI with stubs, captured requests, and stats
|
|
339
|
+
|
|
340
|
+
Both UIs are HTMX-powered and require no additional setup.
|
|
341
|
+
|
|
342
|
+
## Development
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
bun check # Type check
|
|
346
|
+
bun run test # Run tests (vitest)
|
|
347
|
+
bun lint # Lint
|
|
348
|
+
bun lint-fix # Lint with auto-fix
|
|
349
|
+
bun coverage # Test coverage
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## Architecture
|
|
353
|
+
|
|
354
|
+
Imposters is built entirely on [Effect](https://effect.website):
|
|
355
|
+
|
|
356
|
+
- **Effect services** — All components (`ImposterRepository`, `PortAllocator`, `ProxyService`, `MetricsService`, `RequestLogger`, `FiberManager`) are Effect services composed via layers
|
|
357
|
+
- **Fiber concurrency** — Each running imposter is managed as an Effect Fiber via `FiberMap`, allowing independent start/stop lifecycle
|
|
358
|
+
- **`@effect/platform` HTTP API** — Admin API is defined declaratively with `HttpApi`, `HttpApiGroup`, and `HttpApiEndpoint`, with schema-derived request validation and typed error handling
|
|
359
|
+
- **`@effect/cli`** — CLI commands and option parsing
|
|
360
|
+
- **Bun.serve()** — HTTP server runtime
|
|
361
|
+
- **JSONata** — Expression evaluation in response templates
|
|
362
|
+
|
|
363
|
+
## License
|
|
364
|
+
|
|
365
|
+
MIT
|
package/bin/imposters
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const os = require("os");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const { execFileSync } = require("child_process");
|
|
6
|
+
|
|
7
|
+
const platform = os.platform();
|
|
8
|
+
const arch = os.arch();
|
|
9
|
+
|
|
10
|
+
const PLATFORMS = {
|
|
11
|
+
"linux-x64": "@imposters/linux-x64",
|
|
12
|
+
"linux-arm64": "@imposters/linux-arm64",
|
|
13
|
+
"darwin-x64": "@imposters/darwin-x64",
|
|
14
|
+
"darwin-arm64": "@imposters/darwin-arm64",
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const key = `${platform}-${arch}`;
|
|
18
|
+
const pkg = PLATFORMS[key];
|
|
19
|
+
|
|
20
|
+
if (!pkg) {
|
|
21
|
+
console.error(
|
|
22
|
+
`Unsupported platform: ${platform}-${arch}\n` +
|
|
23
|
+
`Imposters supports: ${Object.keys(PLATFORMS).join(", ")}`
|
|
24
|
+
);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
let binPath;
|
|
29
|
+
try {
|
|
30
|
+
binPath = require.resolve(`${pkg}/bin/imposters`);
|
|
31
|
+
} catch {
|
|
32
|
+
console.error(
|
|
33
|
+
`Could not find the Imposters binary for ${platform}-${arch}.\n` +
|
|
34
|
+
`The platform package "${pkg}" does not appear to be installed.\n\n` +
|
|
35
|
+
`Try reinstalling: npm install -g imposters`
|
|
36
|
+
);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
execFileSync(binPath, process.argv.slice(2), { stdio: "inherit" });
|
|
42
|
+
} catch (e) {
|
|
43
|
+
if (e.status !== null) {
|
|
44
|
+
process.exit(e.status);
|
|
45
|
+
}
|
|
46
|
+
throw e;
|
|
47
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Program.js","names":["require"],"sources":["../../src/Program.ts"],"sourcesContent":[null],"mappings":";;AAAAA,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AdminApi = void 0;
|
|
7
|
+
var _platform = require("@effect/platform");
|
|
8
|
+
var _ImpostersGroup = require("./ImpostersGroup");
|
|
9
|
+
var _SystemGroup = require("./SystemGroup");
|
|
10
|
+
const AdminApi = exports.AdminApi = /*#__PURE__*/_platform.HttpApi.make("admin").add(_ImpostersGroup.ImpostersGroup).add(_SystemGroup.SystemGroup);
|
|
11
|
+
//# sourceMappingURL=AdminApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminApi.js","names":["_platform","require","_ImpostersGroup","_SystemGroup","AdminApi","exports","HttpApi","make","add","ImpostersGroup","SystemGroup"],"sources":["../../../src/api/AdminApi.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAEO,MAAMG,QAAQ,GAAAC,OAAA,CAAAD,QAAA,gBAAGE,iBAAO,CAACC,IAAI,CAAC,OAAO,CAAC,CAC1CC,GAAG,CAACC,8BAAc,CAAC,CACnBD,GAAG,CAACE,wBAAW,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ApiServiceError = exports.ApiNotFoundError = exports.ApiConflictError = void 0;
|
|
7
|
+
var _platform = require("@effect/platform");
|
|
8
|
+
var Schema = _interopRequireWildcard(require("effect/Schema"));
|
|
9
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
10
|
+
class ApiNotFoundError extends Schema.TaggedError()("ApiNotFoundError", {
|
|
11
|
+
message: Schema.String,
|
|
12
|
+
resourceType: Schema.String,
|
|
13
|
+
resourceId: Schema.String
|
|
14
|
+
}, _platform.HttpApiSchema.annotations({
|
|
15
|
+
status: 404
|
|
16
|
+
})) {}
|
|
17
|
+
exports.ApiNotFoundError = ApiNotFoundError;
|
|
18
|
+
class ApiConflictError extends Schema.TaggedError()("ApiConflictError", {
|
|
19
|
+
message: Schema.String
|
|
20
|
+
}, _platform.HttpApiSchema.annotations({
|
|
21
|
+
status: 409
|
|
22
|
+
})) {}
|
|
23
|
+
exports.ApiConflictError = ApiConflictError;
|
|
24
|
+
class ApiServiceError extends Schema.TaggedError()("ApiServiceError", {
|
|
25
|
+
message: Schema.String
|
|
26
|
+
}, _platform.HttpApiSchema.annotations({
|
|
27
|
+
status: 503
|
|
28
|
+
})) {}
|
|
29
|
+
exports.ApiServiceError = ApiServiceError;
|
|
30
|
+
//# sourceMappingURL=ApiErrors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiErrors.js","names":["_platform","require","Schema","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ApiNotFoundError","TaggedError","message","String","resourceType","resourceId","HttpApiSchema","annotations","status","exports","ApiConflictError","ApiServiceError"],"sources":["../../../src/api/ApiErrors.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,uBAAA,CAAAF,OAAA;AAAuC,SAAAE,wBAAAC,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAH,uBAAA,YAAAA,CAAAC,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAEjC,MAAOkB,gBAAiB,SAAQrB,MAAM,CAACsB,WAAW,EAAoB,CAC1E,kBAAkB,EAClB;EAAEC,OAAO,EAAEvB,MAAM,CAACwB,MAAM;EAAEC,YAAY,EAAEzB,MAAM,CAACwB,MAAM;EAAEE,UAAU,EAAE1B,MAAM,CAACwB;AAAM,CAAE,EAClFG,uBAAa,CAACC,WAAW,CAAC;EAAEC,MAAM,EAAE;AAAG,CAAE,CAAC,CAC3C;AAAAC,OAAA,CAAAT,gBAAA,GAAAA,gBAAA;AAEK,MAAOU,gBAAiB,SAAQ/B,MAAM,CAACsB,WAAW,EAAoB,CAC1E,kBAAkB,EAClB;EAAEC,OAAO,EAAEvB,MAAM,CAACwB;AAAM,CAAE,EAC1BG,uBAAa,CAACC,WAAW,CAAC;EAAEC,MAAM,EAAE;AAAG,CAAE,CAAC,CAC3C;AAAAC,OAAA,CAAAC,gBAAA,GAAAA,gBAAA;AAEK,MAAOC,eAAgB,SAAQhC,MAAM,CAACsB,WAAW,EAAmB,CACxE,iBAAiB,EACjB;EAAEC,OAAO,EAAEvB,MAAM,CAACwB;AAAM,CAAE,EAC1BG,uBAAa,CAACC,WAAW,CAAC;EAAEC,MAAM,EAAE;AAAG,CAAE,CAAC,CAC3C;AAAAC,OAAA,CAAAE,eAAA,GAAAA,eAAA","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PaginationUrlParams = exports.ListRequestsUrlParams = exports.ListImpostersUrlParams = exports.DeleteImposterUrlParams = void 0;
|
|
7
|
+
var Schema = _interopRequireWildcard(require("effect/Schema"));
|
|
8
|
+
var _common = require("../schemas/common");
|
|
9
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
10
|
+
const PaginationUrlParams = exports.PaginationUrlParams = /*#__PURE__*/Schema.Struct({
|
|
11
|
+
limit: /*#__PURE__*/Schema.optionalWith(/*#__PURE__*/Schema.NumberFromString.pipe(/*#__PURE__*/Schema.int(), /*#__PURE__*/Schema.positive()), {
|
|
12
|
+
default: () => 50
|
|
13
|
+
}),
|
|
14
|
+
offset: /*#__PURE__*/Schema.optionalWith(/*#__PURE__*/Schema.NumberFromString.pipe(/*#__PURE__*/Schema.int(), /*#__PURE__*/Schema.nonNegative()), {
|
|
15
|
+
default: () => 0
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
const ListImpostersUrlParams = exports.ListImpostersUrlParams = /*#__PURE__*/Schema.Struct({
|
|
19
|
+
...PaginationUrlParams.fields,
|
|
20
|
+
status: /*#__PURE__*/Schema.optional(_common.ImposterStatus),
|
|
21
|
+
protocol: /*#__PURE__*/Schema.optional(_common.Protocol)
|
|
22
|
+
});
|
|
23
|
+
const DeleteImposterUrlParams = exports.DeleteImposterUrlParams = /*#__PURE__*/Schema.Struct({
|
|
24
|
+
force: /*#__PURE__*/Schema.optionalWith(Schema.BooleanFromString, {
|
|
25
|
+
default: () => false
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
const ListRequestsUrlParams = exports.ListRequestsUrlParams = /*#__PURE__*/Schema.Struct({
|
|
29
|
+
limit: /*#__PURE__*/Schema.optionalWith(/*#__PURE__*/Schema.NumberFromString.pipe(/*#__PURE__*/Schema.int(), /*#__PURE__*/Schema.positive()), {
|
|
30
|
+
default: () => 50
|
|
31
|
+
}),
|
|
32
|
+
method: /*#__PURE__*/Schema.optional(Schema.String),
|
|
33
|
+
path: /*#__PURE__*/Schema.optional(Schema.String),
|
|
34
|
+
status: /*#__PURE__*/Schema.optional(Schema.NumberFromString)
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=ApiSchemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiSchemas.js","names":["Schema","_interopRequireWildcard","require","_common","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","PaginationUrlParams","exports","Struct","limit","optionalWith","NumberFromString","pipe","int","positive","offset","nonNegative","ListImpostersUrlParams","fields","status","optional","ImposterStatus","protocol","Protocol","DeleteImposterUrlParams","force","BooleanFromString","ListRequestsUrlParams","method","String","path"],"sources":["../../../src/api/ApiSchemas.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|