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
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MetricsServiceLive = exports.MetricsService = void 0;
|
|
7
|
+
var _effect = require("effect");
|
|
8
|
+
var DateTime = _interopRequireWildcard(require("effect/DateTime"));
|
|
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 BUFFER_SIZE = 1000;
|
|
11
|
+
const makeEmptyMetrics = now => ({
|
|
12
|
+
totalRequests: 0,
|
|
13
|
+
requestsByMethod: {},
|
|
14
|
+
requestsByStatusCode: {},
|
|
15
|
+
responseTimes: new Float64Array(BUFFER_SIZE),
|
|
16
|
+
responseTimeIndex: 0,
|
|
17
|
+
responseTimeCount: 0,
|
|
18
|
+
firstRequestAt: now,
|
|
19
|
+
lastRequestAt: now,
|
|
20
|
+
errorCount: 0
|
|
21
|
+
});
|
|
22
|
+
const computePercentile = (sorted, p) => {
|
|
23
|
+
if (sorted.length === 0) return 0;
|
|
24
|
+
const index = Math.ceil(p / 100 * sorted.length) - 1;
|
|
25
|
+
return sorted[Math.max(0, index)];
|
|
26
|
+
};
|
|
27
|
+
const computeStats = metrics => {
|
|
28
|
+
const count = metrics.responseTimeCount;
|
|
29
|
+
const total = metrics.totalRequests;
|
|
30
|
+
// Compute average response time
|
|
31
|
+
let sumRT = 0;
|
|
32
|
+
for (let i = 0; i < Math.min(count, BUFFER_SIZE); i++) {
|
|
33
|
+
sumRT += metrics.responseTimes[i];
|
|
34
|
+
}
|
|
35
|
+
const avgRT = count > 0 ? sumRT / Math.min(count, BUFFER_SIZE) : 0;
|
|
36
|
+
// Compute requests per minute
|
|
37
|
+
const elapsedMs = DateTime.toEpochMillis(metrics.lastRequestAt) - DateTime.toEpochMillis(metrics.firstRequestAt);
|
|
38
|
+
const elapsedMinutes = elapsedMs / 60000;
|
|
39
|
+
const rpm = elapsedMinutes > 0 ? total / elapsedMinutes : total;
|
|
40
|
+
// Compute error rate
|
|
41
|
+
const errorRate = total > 0 ? metrics.errorCount / total : 0;
|
|
42
|
+
// Compute percentiles
|
|
43
|
+
const bufferLen = Math.min(count, BUFFER_SIZE);
|
|
44
|
+
const sorted = Array.from(metrics.responseTimes.subarray(0, bufferLen)).sort((a, b) => a - b);
|
|
45
|
+
return {
|
|
46
|
+
totalRequests: total,
|
|
47
|
+
requestsPerMinute: Math.round(rpm * 100) / 100,
|
|
48
|
+
averageResponseTime: Math.round(avgRT * 100) / 100,
|
|
49
|
+
errorRate: Math.round(errorRate * 10000) / 10000,
|
|
50
|
+
requestsByMethod: {
|
|
51
|
+
...metrics.requestsByMethod
|
|
52
|
+
},
|
|
53
|
+
requestsByStatusCode: {
|
|
54
|
+
...metrics.requestsByStatusCode
|
|
55
|
+
},
|
|
56
|
+
...(total > 0 ? {
|
|
57
|
+
lastRequestAt: metrics.lastRequestAt
|
|
58
|
+
} : {}),
|
|
59
|
+
...(bufferLen > 0 ? {
|
|
60
|
+
p50ResponseTime: computePercentile(sorted, 50),
|
|
61
|
+
p95ResponseTime: computePercentile(sorted, 95),
|
|
62
|
+
p99ResponseTime: computePercentile(sorted, 99)
|
|
63
|
+
} : {})
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
class MetricsService extends _effect.Context.Tag("MetricsService")() {}
|
|
67
|
+
exports.MetricsService = MetricsService;
|
|
68
|
+
const MetricsServiceLive = exports.MetricsServiceLive = /*#__PURE__*/_effect.Layer.effect(MetricsService, /*#__PURE__*/_effect.Effect.gen(function* () {
|
|
69
|
+
const storeRef = yield* _effect.Ref.make(_effect.HashMap.empty());
|
|
70
|
+
const recordRequest = entry => _effect.Ref.update(storeRef, store => {
|
|
71
|
+
const existing = _effect.HashMap.get(store, entry.imposterId);
|
|
72
|
+
const now = entry.timestamp;
|
|
73
|
+
const metrics = existing._tag === "Some" ? existing.value : makeEmptyMetrics(now);
|
|
74
|
+
metrics.totalRequests += 1;
|
|
75
|
+
// Method counts
|
|
76
|
+
const method = entry.request.method.toUpperCase();
|
|
77
|
+
metrics.requestsByMethod[method] = (metrics.requestsByMethod[method] ?? 0) + 1;
|
|
78
|
+
// Status code counts
|
|
79
|
+
const statusKey = String(entry.response.status);
|
|
80
|
+
metrics.requestsByStatusCode[statusKey] = (metrics.requestsByStatusCode[statusKey] ?? 0) + 1;
|
|
81
|
+
// Response time circular buffer
|
|
82
|
+
metrics.responseTimes[metrics.responseTimeIndex % BUFFER_SIZE] = entry.duration;
|
|
83
|
+
metrics.responseTimeIndex = (metrics.responseTimeIndex + 1) % BUFFER_SIZE;
|
|
84
|
+
metrics.responseTimeCount += 1;
|
|
85
|
+
// Error tracking (4xx + 5xx)
|
|
86
|
+
if (entry.response.status >= 400) {
|
|
87
|
+
metrics.errorCount += 1;
|
|
88
|
+
}
|
|
89
|
+
metrics.lastRequestAt = now;
|
|
90
|
+
return _effect.HashMap.set(store, entry.imposterId, metrics);
|
|
91
|
+
});
|
|
92
|
+
const getStats = imposterId => _effect.Ref.get(storeRef).pipe(_effect.Effect.map(store => {
|
|
93
|
+
const existing = _effect.HashMap.get(store, imposterId);
|
|
94
|
+
if (existing._tag === "None") {
|
|
95
|
+
return {
|
|
96
|
+
totalRequests: 0,
|
|
97
|
+
requestsPerMinute: 0,
|
|
98
|
+
averageResponseTime: 0,
|
|
99
|
+
errorRate: 0,
|
|
100
|
+
requestsByMethod: {},
|
|
101
|
+
requestsByStatusCode: {}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return computeStats(existing.value);
|
|
105
|
+
}));
|
|
106
|
+
const resetStats = imposterId => _effect.Ref.update(storeRef, _effect.HashMap.remove(imposterId));
|
|
107
|
+
return {
|
|
108
|
+
recordRequest,
|
|
109
|
+
getStats,
|
|
110
|
+
resetStats
|
|
111
|
+
};
|
|
112
|
+
}));
|
|
113
|
+
//# sourceMappingURL=MetricsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricsService.js","names":["_effect","require","DateTime","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","BUFFER_SIZE","makeEmptyMetrics","now","totalRequests","requestsByMethod","requestsByStatusCode","responseTimes","Float64Array","responseTimeIndex","responseTimeCount","firstRequestAt","lastRequestAt","errorCount","computePercentile","sorted","p","length","index","Math","ceil","max","computeStats","metrics","count","total","sumRT","min","avgRT","elapsedMs","toEpochMillis","elapsedMinutes","rpm","errorRate","bufferLen","Array","from","subarray","sort","a","b","requestsPerMinute","round","averageResponseTime","p50ResponseTime","p95ResponseTime","p99ResponseTime","MetricsService","Context","Tag","exports","MetricsServiceLive","Layer","effect","Effect","gen","storeRef","Ref","make","HashMap","empty","recordRequest","entry","update","store","existing","imposterId","timestamp","_tag","value","method","request","toUpperCase","statusKey","String","response","status","duration","getStats","pipe","map","resetStats","remove"],"sources":["../../../src/services/MetricsService.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PortExhaustedError = exports.PortAllocatorLive = exports.PortAllocatorError = exports.PortAllocator = void 0;
|
|
7
|
+
var _effect = require("effect");
|
|
8
|
+
var _AppConfig = require("./AppConfig");
|
|
9
|
+
class PortAllocatorError extends _effect.Data.TaggedError("PortAllocatorError") {}
|
|
10
|
+
exports.PortAllocatorError = PortAllocatorError;
|
|
11
|
+
class PortExhaustedError extends _effect.Data.TaggedError("PortExhaustedError") {}
|
|
12
|
+
exports.PortExhaustedError = PortExhaustedError;
|
|
13
|
+
class PortAllocator extends _effect.Context.Tag("PortAllocator")() {}
|
|
14
|
+
exports.PortAllocator = PortAllocator;
|
|
15
|
+
const PortAllocatorLive = exports.PortAllocatorLive = /*#__PURE__*/_effect.Layer.effect(PortAllocator, /*#__PURE__*/_effect.Effect.gen(function* () {
|
|
16
|
+
const config = yield* _AppConfig.AppConfig;
|
|
17
|
+
const portsRef = yield* _effect.Ref.make(_effect.HashSet.empty());
|
|
18
|
+
const allocate = preferred => {
|
|
19
|
+
if (preferred !== undefined) {
|
|
20
|
+
return _effect.Ref.modify(portsRef, ports => {
|
|
21
|
+
if (_effect.HashSet.has(ports, preferred)) {
|
|
22
|
+
return [_effect.Effect.fail(new PortAllocatorError({
|
|
23
|
+
reason: `Port ${preferred} is already allocated`,
|
|
24
|
+
port: preferred
|
|
25
|
+
})), ports];
|
|
26
|
+
}
|
|
27
|
+
return [_effect.Effect.succeed(preferred), _effect.HashSet.add(ports, preferred)];
|
|
28
|
+
}).pipe(_effect.Effect.flatten);
|
|
29
|
+
}
|
|
30
|
+
return _effect.Ref.modify(portsRef, ports => {
|
|
31
|
+
for (let port = config.portRangeMin; port <= config.portRangeMax; port++) {
|
|
32
|
+
if (!_effect.HashSet.has(ports, port)) {
|
|
33
|
+
return [_effect.Effect.succeed(port), _effect.HashSet.add(ports, port)];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return [_effect.Effect.fail(new PortExhaustedError({
|
|
37
|
+
rangeMin: config.portRangeMin,
|
|
38
|
+
rangeMax: config.portRangeMax
|
|
39
|
+
})), ports];
|
|
40
|
+
}).pipe(_effect.Effect.flatten);
|
|
41
|
+
};
|
|
42
|
+
const release = port => _effect.Ref.update(portsRef, _effect.HashSet.remove(port));
|
|
43
|
+
const isAvailable = port => _effect.Ref.get(portsRef).pipe(_effect.Effect.map(ports => !_effect.HashSet.has(ports, port)));
|
|
44
|
+
return {
|
|
45
|
+
allocate,
|
|
46
|
+
release,
|
|
47
|
+
isAvailable
|
|
48
|
+
};
|
|
49
|
+
}));
|
|
50
|
+
//# sourceMappingURL=PortAllocator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortAllocator.js","names":["_effect","require","_AppConfig","PortAllocatorError","Data","TaggedError","exports","PortExhaustedError","PortAllocator","Context","Tag","PortAllocatorLive","Layer","effect","Effect","gen","config","AppConfig","portsRef","Ref","make","HashSet","empty","allocate","preferred","undefined","modify","ports","has","fail","reason","port","succeed","add","pipe","flatten","portRangeMin","portRangeMax","rangeMin","rangeMax","release","update","remove","isAvailable","get","map"],"sources":["../../../src/services/PortAllocator.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEM,MAAOE,kBAAmB,SAAQC,YAAI,CAACC,WAAW,CAAC,oBAAoB,CAG3E;AAAAC,OAAA,CAAAH,kBAAA,GAAAA,kBAAA;AAEI,MAAOI,kBAAmB,SAAQH,YAAI,CAACC,WAAW,CAAC,oBAAoB,CAG3E;AAAAC,OAAA,CAAAC,kBAAA,GAAAA,kBAAA;AAQI,MAAOC,aAAc,SAAQC,eAAO,CAACC,GAAG,CAAC,eAAe,CAAC,EAAqC;AAAAJ,OAAA,CAAAE,aAAA,GAAAA,aAAA;AAE7F,MAAMG,iBAAiB,GAAAL,OAAA,CAAAK,iBAAA,gBAAGC,aAAK,CAACC,MAAM,CAC3CL,aAAa,eACbM,cAAM,CAACC,GAAG,CAAC,aAAS;EAClB,MAAMC,MAAM,GAAG,OAAOC,oBAAS;EAC/B,MAAMC,QAAQ,GAAG,OAAOC,WAAG,CAACC,IAAI,CAACC,eAAO,CAACC,KAAK,EAAU,CAAC;EAOzD,MAAMC,QAAQ,GAAIC,SAAkB,IAAoE;IACtG,IAAIA,SAAS,KAAKC,SAAS,EAAE;MAC3B,OAAON,WAAG,CAACO,MAAM,CAACR,QAAQ,EAAGS,KAAK,IAAoB;QACpD,IAAIN,eAAO,CAACO,GAAG,CAACD,KAAK,EAAEH,SAAS,CAAC,EAAE;UACjC,OAAO,CACLV,cAAM,CAACe,IAAI,CACT,IAAI1B,kBAAkB,CAAC;YAAE2B,MAAM,EAAE,QAAQN,SAAS,uBAAuB;YAAEO,IAAI,EAAEP;UAAS,CAAE,CAAC,CAC9F,EACDG,KAAK,CACN;QACH;QACA,OAAO,CAACb,cAAM,CAACkB,OAAO,CAACR,SAAS,CAAC,EAAEH,eAAO,CAACY,GAAG,CAACN,KAAK,EAAEH,SAAS,CAAC,CAAC;MACnE,CAAC,CAAC,CAACU,IAAI,CAACpB,cAAM,CAACqB,OAAO,CAAC;IACzB;IAEA,OAAOhB,WAAG,CAACO,MAAM,CAACR,QAAQ,EAAGS,KAAK,IAAoB;MACpD,KAAK,IAAII,IAAI,GAAGf,MAAM,CAACoB,YAAY,EAAEL,IAAI,IAAIf,MAAM,CAACqB,YAAY,EAAEN,IAAI,EAAE,EAAE;QACxE,IAAI,CAACV,eAAO,CAACO,GAAG,CAACD,KAAK,EAAEI,IAAI,CAAC,EAAE;UAC7B,OAAO,CAACjB,cAAM,CAACkB,OAAO,CAACD,IAAI,CAAC,EAAEV,eAAO,CAACY,GAAG,CAACN,KAAK,EAAEI,IAAI,CAAC,CAAC;QACzD;MACF;MACA,OAAO,CACLjB,cAAM,CAACe,IAAI,CAAC,IAAItB,kBAAkB,CAAC;QAAE+B,QAAQ,EAAEtB,MAAM,CAACoB,YAAY;QAAEG,QAAQ,EAAEvB,MAAM,CAACqB;MAAY,CAAE,CAAC,CAAC,EACrGV,KAAK,CACN;IACH,CAAC,CAAC,CAACO,IAAI,CAACpB,cAAM,CAACqB,OAAO,CAAC;EACzB,CAAC;EAED,MAAMK,OAAO,GAAIT,IAAY,IAA0BZ,WAAG,CAACsB,MAAM,CAACvB,QAAQ,EAAEG,eAAO,CAACqB,MAAM,CAACX,IAAI,CAAC,CAAC;EAEjG,MAAMY,WAAW,GAAIZ,IAAY,IAC/BZ,WAAG,CAACyB,GAAG,CAAC1B,QAAQ,CAAC,CAACgB,IAAI,CAACpB,cAAM,CAAC+B,GAAG,CAAElB,KAAK,IAAK,CAACN,eAAO,CAACO,GAAG,CAACD,KAAK,EAAEI,IAAI,CAAC,CAAC,CAAC;EAE1E,OAAO;IAAER,QAAQ;IAAEiB,OAAO;IAAEG;EAAW,CAAE;AAC3C,CAAC,CAAC,CACH","ignoreList":[]}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ProxyServiceLive = exports.ProxyService = exports.ProxyError = void 0;
|
|
7
|
+
var _effect = require("effect");
|
|
8
|
+
var _common = require("../schemas/common");
|
|
9
|
+
var _Uuid = require("./Uuid");
|
|
10
|
+
class ProxyError extends _effect.Data.TaggedError("ProxyError") {}
|
|
11
|
+
exports.ProxyError = ProxyError;
|
|
12
|
+
const HOP_BY_HOP_HEADERS = /*#__PURE__*/new Set(["host", "connection", "keep-alive", "transfer-encoding", "upgrade", "proxy-authenticate", "proxy-authorization", "te", "trailers"]);
|
|
13
|
+
class ProxyService extends _effect.Context.Tag("ProxyService")() {}
|
|
14
|
+
exports.ProxyService = ProxyService;
|
|
15
|
+
const ProxyServiceLive = exports.ProxyServiceLive = /*#__PURE__*/_effect.Layer.effect(ProxyService, /*#__PURE__*/_effect.Effect.gen(function* () {
|
|
16
|
+
const uuid = yield* _Uuid.Uuid;
|
|
17
|
+
const forward = (ctx, config, originalUrl) => _effect.Effect.gen(function* () {
|
|
18
|
+
// Build target URL preserving path and query
|
|
19
|
+
const targetBase = config.targetUrl.replace(/\/$/, "");
|
|
20
|
+
const targetUrl = `${targetBase}${originalUrl.pathname}${originalUrl.search}`;
|
|
21
|
+
// Build headers
|
|
22
|
+
const headers = new Headers();
|
|
23
|
+
for (const [key, val] of Object.entries(ctx.headers)) {
|
|
24
|
+
if (!HOP_BY_HOP_HEADERS.has(key.toLowerCase())) {
|
|
25
|
+
headers.set(key, val);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Remove headers specified in config
|
|
29
|
+
for (const h of config.removeHeaders) {
|
|
30
|
+
headers.delete(h);
|
|
31
|
+
}
|
|
32
|
+
// Add headers specified in config
|
|
33
|
+
if (config.addHeaders) {
|
|
34
|
+
for (const [key, val] of Object.entries(config.addHeaders)) {
|
|
35
|
+
headers.set(key, val);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Build body
|
|
39
|
+
let body;
|
|
40
|
+
if (ctx.body !== undefined && ctx.body !== null) {
|
|
41
|
+
body = typeof ctx.body === "string" ? ctx.body : JSON.stringify(ctx.body);
|
|
42
|
+
}
|
|
43
|
+
const response = yield* _effect.Effect.tryPromise({
|
|
44
|
+
try: signal => fetch(targetUrl, {
|
|
45
|
+
method: ctx.method,
|
|
46
|
+
headers,
|
|
47
|
+
...(body !== undefined && ctx.method !== "GET" && ctx.method !== "HEAD" ? {
|
|
48
|
+
body
|
|
49
|
+
} : {}),
|
|
50
|
+
redirect: config.followRedirects ? "follow" : "manual",
|
|
51
|
+
signal
|
|
52
|
+
}),
|
|
53
|
+
catch: err => new ProxyError({
|
|
54
|
+
targetUrl,
|
|
55
|
+
reason: `Failed to reach target: ${err}`,
|
|
56
|
+
cause: err
|
|
57
|
+
})
|
|
58
|
+
}).pipe(_effect.Effect.timeoutFail({
|
|
59
|
+
duration: `${config.timeout} millis`,
|
|
60
|
+
onTimeout: () => new ProxyError({
|
|
61
|
+
targetUrl,
|
|
62
|
+
reason: `Request timed out after ${config.timeout}ms`
|
|
63
|
+
})
|
|
64
|
+
}));
|
|
65
|
+
return response;
|
|
66
|
+
});
|
|
67
|
+
const recordAsStub = (request, response) => _effect.Effect.gen(function* () {
|
|
68
|
+
const id = yield* uuid.generateShort;
|
|
69
|
+
const respHeaders = {};
|
|
70
|
+
response.headers.forEach((val, key) => {
|
|
71
|
+
respHeaders[key] = val;
|
|
72
|
+
});
|
|
73
|
+
const respText = yield* _effect.Effect.promise(() => response.text());
|
|
74
|
+
let respBody = respText;
|
|
75
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
76
|
+
if (contentType.includes("application/json") && respText) {
|
|
77
|
+
try {
|
|
78
|
+
respBody = JSON.parse(respText);
|
|
79
|
+
} catch {
|
|
80
|
+
// keep as string
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
id: _common.NonEmptyString.make(id),
|
|
85
|
+
predicates: [{
|
|
86
|
+
field: "method",
|
|
87
|
+
operator: "equals",
|
|
88
|
+
value: request.method,
|
|
89
|
+
caseSensitive: true
|
|
90
|
+
}, {
|
|
91
|
+
field: "path",
|
|
92
|
+
operator: "equals",
|
|
93
|
+
value: request.path,
|
|
94
|
+
caseSensitive: true
|
|
95
|
+
}],
|
|
96
|
+
responses: [{
|
|
97
|
+
status: response.status,
|
|
98
|
+
headers: respHeaders,
|
|
99
|
+
body: respBody
|
|
100
|
+
}],
|
|
101
|
+
responseMode: "sequential"
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
forward,
|
|
106
|
+
recordAsStub
|
|
107
|
+
};
|
|
108
|
+
}));
|
|
109
|
+
//# sourceMappingURL=ProxyService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProxyService.js","names":["_effect","require","_common","_Uuid","ProxyError","Data","TaggedError","exports","HOP_BY_HOP_HEADERS","Set","ProxyService","Context","Tag","ProxyServiceLive","Layer","effect","Effect","gen","uuid","Uuid","forward","ctx","config","originalUrl","targetBase","targetUrl","replace","pathname","search","headers","Headers","key","val","Object","entries","has","toLowerCase","set","h","removeHeaders","delete","addHeaders","body","undefined","JSON","stringify","response","tryPromise","try","signal","fetch","method","redirect","followRedirects","catch","err","reason","cause","pipe","timeoutFail","duration","timeout","onTimeout","recordAsStub","request","id","generateShort","respHeaders","forEach","respText","promise","text","respBody","contentType","get","includes","parse","NonEmptyString","make","predicates","field","operator","value","caseSensitive","path","responses","status","responseMode"],"sources":["../../../src/services/ProxyService.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RequestLoggerLive = exports.RequestLogger = void 0;
|
|
7
|
+
var _effect = require("effect");
|
|
8
|
+
const MAX_ENTRIES = 100;
|
|
9
|
+
class RequestLogger extends _effect.Context.Tag("RequestLogger")() {}
|
|
10
|
+
exports.RequestLogger = RequestLogger;
|
|
11
|
+
const RequestLoggerLive = exports.RequestLoggerLive = /*#__PURE__*/_effect.Layer.scoped(RequestLogger, /*#__PURE__*/_effect.Effect.gen(function* () {
|
|
12
|
+
const storeRef = yield* _effect.Ref.make(_effect.HashMap.empty());
|
|
13
|
+
const pubsub = yield* _effect.PubSub.sliding(256);
|
|
14
|
+
const log = entry => _effect.Effect.gen(function* () {
|
|
15
|
+
yield* _effect.Ref.update(storeRef, store => {
|
|
16
|
+
const existing = _effect.HashMap.get(store, entry.imposterId);
|
|
17
|
+
const entries = existing._tag === "Some" ? existing.value : [];
|
|
18
|
+
const updated = [...entries, entry].slice(-MAX_ENTRIES);
|
|
19
|
+
return _effect.HashMap.set(store, entry.imposterId, updated);
|
|
20
|
+
});
|
|
21
|
+
yield* _effect.PubSub.publish(pubsub, entry);
|
|
22
|
+
});
|
|
23
|
+
const getEntries = (imposterId, opts) => _effect.Ref.get(storeRef).pipe(_effect.Effect.map(store => {
|
|
24
|
+
const existing = _effect.HashMap.get(store, imposterId);
|
|
25
|
+
let entries = existing._tag === "Some" ? existing.value : [];
|
|
26
|
+
if (opts?.method !== undefined) {
|
|
27
|
+
entries = entries.filter(e => e.request.method.toUpperCase() === opts.method.toUpperCase());
|
|
28
|
+
}
|
|
29
|
+
if (opts?.path !== undefined) {
|
|
30
|
+
entries = entries.filter(e => e.request.path === opts.path);
|
|
31
|
+
}
|
|
32
|
+
if (opts?.status !== undefined) {
|
|
33
|
+
entries = entries.filter(e => e.response.status === opts.status);
|
|
34
|
+
}
|
|
35
|
+
const limit = opts?.limit ?? 50;
|
|
36
|
+
return entries.slice(-limit);
|
|
37
|
+
}));
|
|
38
|
+
const getCount = imposterId => _effect.Ref.get(storeRef).pipe(_effect.Effect.map(store => {
|
|
39
|
+
const existing = _effect.HashMap.get(store, imposterId);
|
|
40
|
+
return existing._tag === "Some" ? existing.value.length : 0;
|
|
41
|
+
}));
|
|
42
|
+
const clear = imposterId => _effect.Ref.update(storeRef, store => _effect.HashMap.set(store, imposterId, []));
|
|
43
|
+
const subscribe = _effect.PubSub.subscribe(pubsub);
|
|
44
|
+
const getEntryById = (imposterId, entryId) => _effect.Ref.get(storeRef).pipe(_effect.Effect.map(store => {
|
|
45
|
+
const existing = _effect.HashMap.get(store, imposterId);
|
|
46
|
+
if (existing._tag === "None") return null;
|
|
47
|
+
return existing.value.find(e => e.id === entryId) ?? null;
|
|
48
|
+
}));
|
|
49
|
+
const removeImposter = imposterId => _effect.Ref.update(storeRef, _effect.HashMap.remove(imposterId));
|
|
50
|
+
return {
|
|
51
|
+
log,
|
|
52
|
+
getEntries,
|
|
53
|
+
getCount,
|
|
54
|
+
clear,
|
|
55
|
+
subscribe,
|
|
56
|
+
getEntryById,
|
|
57
|
+
removeImposter
|
|
58
|
+
};
|
|
59
|
+
}));
|
|
60
|
+
//# sourceMappingURL=RequestLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestLogger.js","names":["_effect","require","MAX_ENTRIES","RequestLogger","Context","Tag","exports","RequestLoggerLive","Layer","scoped","Effect","gen","storeRef","Ref","make","HashMap","empty","pubsub","PubSub","sliding","log","entry","update","store","existing","get","imposterId","entries","_tag","value","updated","slice","set","publish","getEntries","opts","pipe","map","method","undefined","filter","e","request","toUpperCase","path","status","response","limit","getCount","length","clear","subscribe","getEntryById","entryId","find","id","removeImposter","remove"],"sources":["../../../src/services/RequestLogger.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Uuid = void 0;
|
|
7
|
+
var _effect = require("effect");
|
|
8
|
+
class Uuid extends _effect.Context.Tag("UuidService")() {}
|
|
9
|
+
exports.Uuid = Uuid;
|
|
10
|
+
//# sourceMappingURL=Uuid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Uuid.js","names":["_effect","require","Uuid","Context","Tag","exports"],"sources":["../../../src/services/Uuid.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEM,MAAOC,IAAK,SAAQC,eAAO,CAACC,GAAG,CAAC,aAAa,CAAC,EAMjD;AAAAC,OAAA,CAAAH,IAAA,GAAAA,IAAA","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.UuidLive = void 0;
|
|
7
|
+
var Effect = _interopRequireWildcard(require("effect/Effect"));
|
|
8
|
+
var Layer = _interopRequireWildcard(require("effect/Layer"));
|
|
9
|
+
var _uuid = require("uuid");
|
|
10
|
+
var _Uuid = require("./Uuid");
|
|
11
|
+
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); }
|
|
12
|
+
const UuidLive = exports.UuidLive = /*#__PURE__*/Layer.succeed(_Uuid.Uuid, {
|
|
13
|
+
generate: /*#__PURE__*/Effect.sync(() => (0, _uuid.v4)()),
|
|
14
|
+
generateShort: /*#__PURE__*/Effect.sync(() => (0, _uuid.v4)().substring(0, 8))
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=UuidLive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UuidLive.js","names":["Effect","_interopRequireWildcard","require","Layer","_uuid","_Uuid","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","UuidLive","exports","succeed","Uuid","generate","sync","v4","generateShort","substring"],"sources":["../../../src/services/UuidLive.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,uBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAA6B,SAAAD,wBAAAK,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAP,uBAAA,YAAAA,CAAAK,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;AAEtB,MAAMkB,QAAQ,GAAAC,OAAA,CAAAD,QAAA,gBAAGtB,KAAK,CAACwB,OAAO,CAACC,UAAI,EAAE;EAC1CC,QAAQ,eAAE7B,MAAM,CAAC8B,IAAI,CAAC,MAAM,IAAAC,QAAE,GAAE,CAAC;EACjCC,aAAa,eAAEhC,MAAM,CAAC8B,IAAI,CAAC,MAAM,IAAAC,QAAE,GAAE,CAACE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;CACtD,CAAC","ignoreList":[]}
|