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.
Files changed (426) hide show
  1. package/LICENSE +21 -0
  2. package/Program/package.json +6 -0
  3. package/README.md +365 -0
  4. package/api/AdminApi/package.json +6 -0
  5. package/api/ApiErrors/package.json +6 -0
  6. package/api/ApiSchemas/package.json +6 -0
  7. package/api/Conversions/package.json +6 -0
  8. package/api/ImpostersGroup/package.json +6 -0
  9. package/api/ImpostersHandlers/package.json +6 -0
  10. package/api/SystemGroup/package.json +6 -0
  11. package/api/SystemHandlers/package.json +6 -0
  12. package/bin/imposters +47 -0
  13. package/cli/Commands/package.json +6 -0
  14. package/cli/ConfigLoader/package.json +6 -0
  15. package/client/HandlerHttpClient/package.json +6 -0
  16. package/client/ImpostersClient/package.json +6 -0
  17. package/client/testing/package.json +6 -0
  18. package/dist/cjs/Program.js +4 -0
  19. package/dist/cjs/Program.js.map +1 -0
  20. package/dist/cjs/api/AdminApi.js +11 -0
  21. package/dist/cjs/api/AdminApi.js.map +1 -0
  22. package/dist/cjs/api/ApiErrors.js +30 -0
  23. package/dist/cjs/api/ApiErrors.js.map +1 -0
  24. package/dist/cjs/api/ApiSchemas.js +36 -0
  25. package/dist/cjs/api/ApiSchemas.js.map +1 -0
  26. package/dist/cjs/api/Conversions.js +41 -0
  27. package/dist/cjs/api/Conversions.js.map +1 -0
  28. package/dist/cjs/api/ImpostersGroup.js +37 -0
  29. package/dist/cjs/api/ImpostersGroup.js.map +1 -0
  30. package/dist/cjs/api/ImpostersHandlers.js +361 -0
  31. package/dist/cjs/api/ImpostersHandlers.js.map +1 -0
  32. package/dist/cjs/api/SystemGroup.js +12 -0
  33. package/dist/cjs/api/SystemGroup.js.map +1 -0
  34. package/dist/cjs/api/SystemHandlers.js +74 -0
  35. package/dist/cjs/api/SystemHandlers.js.map +1 -0
  36. package/dist/cjs/cli/Commands.js +104 -0
  37. package/dist/cjs/cli/Commands.js.map +1 -0
  38. package/dist/cjs/cli/ConfigLoader.js +34 -0
  39. package/dist/cjs/cli/ConfigLoader.js.map +1 -0
  40. package/dist/cjs/client/HandlerHttpClient.js +50 -0
  41. package/dist/cjs/client/HandlerHttpClient.js.map +1 -0
  42. package/dist/cjs/client/ImpostersClient.js +20 -0
  43. package/dist/cjs/client/ImpostersClient.js.map +1 -0
  44. package/dist/cjs/client/index.js +57 -0
  45. package/dist/cjs/client/index.js.map +1 -0
  46. package/dist/cjs/client/testing.js +94 -0
  47. package/dist/cjs/client/testing.js.map +1 -0
  48. package/dist/cjs/domain/imposter.js +125 -0
  49. package/dist/cjs/domain/imposter.js.map +1 -0
  50. package/dist/cjs/domain/route.js +185 -0
  51. package/dist/cjs/domain/route.js.map +1 -0
  52. package/dist/cjs/index.js +106 -0
  53. package/dist/cjs/index.js.map +1 -0
  54. package/dist/cjs/layers/ApiLayer.js +18 -0
  55. package/dist/cjs/layers/ApiLayer.js.map +1 -0
  56. package/dist/cjs/layers/MainLayer.js +27 -0
  57. package/dist/cjs/layers/MainLayer.js.map +1 -0
  58. package/dist/cjs/matching/ExpressionEvaluator.js +103 -0
  59. package/dist/cjs/matching/ExpressionEvaluator.js.map +1 -0
  60. package/dist/cjs/matching/RequestMatcher.js +145 -0
  61. package/dist/cjs/matching/RequestMatcher.js.map +1 -0
  62. package/dist/cjs/matching/ResponseGenerator.js +80 -0
  63. package/dist/cjs/matching/ResponseGenerator.js.map +1 -0
  64. package/dist/cjs/matching/TemplateEngine.js +55 -0
  65. package/dist/cjs/matching/TemplateEngine.js.map +1 -0
  66. package/dist/cjs/repositories/ImposterRepository.js +118 -0
  67. package/dist/cjs/repositories/ImposterRepository.js.map +1 -0
  68. package/dist/cjs/schemas/ConfigFileSchema.js +44 -0
  69. package/dist/cjs/schemas/ConfigFileSchema.js.map +1 -0
  70. package/dist/cjs/schemas/ImposterSchema.js +202 -0
  71. package/dist/cjs/schemas/ImposterSchema.js.map +1 -0
  72. package/dist/cjs/schemas/RequestLogSchema.js +51 -0
  73. package/dist/cjs/schemas/RequestLogSchema.js.map +1 -0
  74. package/dist/cjs/schemas/StubSchema.js +84 -0
  75. package/dist/cjs/schemas/StubSchema.js.map +1 -0
  76. package/dist/cjs/schemas/common.js +67 -0
  77. package/dist/cjs/schemas/common.js.map +1 -0
  78. package/dist/cjs/server/AdminServer.js +36 -0
  79. package/dist/cjs/server/AdminServer.js.map +1 -0
  80. package/dist/cjs/server/BunServer.js +13 -0
  81. package/dist/cjs/server/BunServer.js.map +1 -0
  82. package/dist/cjs/server/FiberManager.js +21 -0
  83. package/dist/cjs/server/FiberManager.js.map +1 -0
  84. package/dist/cjs/server/ImposterServer.js +234 -0
  85. package/dist/cjs/server/ImposterServer.js.map +1 -0
  86. package/dist/cjs/services/AppConfig.js +18 -0
  87. package/dist/cjs/services/AppConfig.js.map +1 -0
  88. package/dist/cjs/services/MetricsService.js +113 -0
  89. package/dist/cjs/services/MetricsService.js.map +1 -0
  90. package/dist/cjs/services/PortAllocator.js +50 -0
  91. package/dist/cjs/services/PortAllocator.js.map +1 -0
  92. package/dist/cjs/services/ProxyService.js +109 -0
  93. package/dist/cjs/services/ProxyService.js.map +1 -0
  94. package/dist/cjs/services/RequestLogger.js +60 -0
  95. package/dist/cjs/services/RequestLogger.js.map +1 -0
  96. package/dist/cjs/services/Uuid.js +10 -0
  97. package/dist/cjs/services/Uuid.js.map +1 -0
  98. package/dist/cjs/services/UuidLive.js +16 -0
  99. package/dist/cjs/services/UuidLive.js.map +1 -0
  100. package/dist/cjs/ui/UiRouter.js +242 -0
  101. package/dist/cjs/ui/UiRouter.js.map +1 -0
  102. package/dist/cjs/ui/admin/AdminLayout.js +36 -0
  103. package/dist/cjs/ui/admin/AdminLayout.js.map +1 -0
  104. package/dist/cjs/ui/admin/AdminUiRouter.js +155 -0
  105. package/dist/cjs/ui/admin/AdminUiRouter.js.map +1 -0
  106. package/dist/cjs/ui/admin/pages/AdminDashboard.js +55 -0
  107. package/dist/cjs/ui/admin/pages/AdminDashboard.js.map +1 -0
  108. package/dist/cjs/ui/admin/partials.js +64 -0
  109. package/dist/cjs/ui/admin/partials.js.map +1 -0
  110. package/dist/cjs/ui/html.js +42 -0
  111. package/dist/cjs/ui/html.js.map +1 -0
  112. package/dist/cjs/ui/layout.js +39 -0
  113. package/dist/cjs/ui/layout.js.map +1 -0
  114. package/dist/cjs/ui/pages/dashboard.js +51 -0
  115. package/dist/cjs/ui/pages/dashboard.js.map +1 -0
  116. package/dist/cjs/ui/pages/request-detail.js +119 -0
  117. package/dist/cjs/ui/pages/request-detail.js.map +1 -0
  118. package/dist/cjs/ui/pages/requests.js +120 -0
  119. package/dist/cjs/ui/pages/requests.js.map +1 -0
  120. package/dist/cjs/ui/pages/stubs.js +46 -0
  121. package/dist/cjs/ui/pages/stubs.js.map +1 -0
  122. package/dist/cjs/ui/partials.js +104 -0
  123. package/dist/cjs/ui/partials.js.map +1 -0
  124. package/dist/dts/Program.d.ts +2 -0
  125. package/dist/dts/Program.d.ts.map +1 -0
  126. package/dist/dts/api/AdminApi.d.ts +490 -0
  127. package/dist/dts/api/AdminApi.d.ts.map +1 -0
  128. package/dist/dts/api/ApiErrors.d.ts +26 -0
  129. package/dist/dts/api/ApiErrors.d.ts.map +1 -0
  130. package/dist/dts/api/ApiSchemas.d.ts +36 -0
  131. package/dist/dts/api/ApiSchemas.d.ts.map +1 -0
  132. package/dist/dts/api/Conversions.d.ts +7 -0
  133. package/dist/dts/api/Conversions.d.ts.map +1 -0
  134. package/dist/dts/api/ImpostersGroup.d.ts +448 -0
  135. package/dist/dts/api/ImpostersGroup.d.ts.map +1 -0
  136. package/dist/dts/api/ImpostersHandlers.d.ts +9 -0
  137. package/dist/dts/api/ImpostersHandlers.d.ts.map +1 -0
  138. package/dist/dts/api/SystemGroup.d.ts +46 -0
  139. package/dist/dts/api/SystemGroup.d.ts.map +1 -0
  140. package/dist/dts/api/SystemHandlers.d.ts +4 -0
  141. package/dist/dts/api/SystemHandlers.d.ts.map +1 -0
  142. package/dist/dts/cli/Commands.d.ts +4 -0
  143. package/dist/dts/cli/Commands.d.ts.map +1 -0
  144. package/dist/dts/cli/ConfigLoader.d.ts +13 -0
  145. package/dist/dts/cli/ConfigLoader.d.ts.map +1 -0
  146. package/dist/dts/client/HandlerHttpClient.d.ts +5 -0
  147. package/dist/dts/client/HandlerHttpClient.d.ts.map +1 -0
  148. package/dist/dts/client/ImpostersClient.d.ts +1868 -0
  149. package/dist/dts/client/ImpostersClient.d.ts.map +1 -0
  150. package/dist/dts/client/index.d.ts +6 -0
  151. package/dist/dts/client/index.d.ts.map +1 -0
  152. package/dist/dts/client/testing.d.ts +35 -0
  153. package/dist/dts/client/testing.d.ts.map +1 -0
  154. package/dist/dts/domain/imposter.d.ts +123 -0
  155. package/dist/dts/domain/imposter.d.ts.map +1 -0
  156. package/dist/dts/domain/route.d.ts +128 -0
  157. package/dist/dts/domain/route.d.ts.map +1 -0
  158. package/dist/dts/index.d.ts +60 -0
  159. package/dist/dts/index.d.ts.map +1 -0
  160. package/dist/dts/layers/ApiLayer.d.ts +3 -0
  161. package/dist/dts/layers/ApiLayer.d.ts.map +1 -0
  162. package/dist/dts/layers/MainLayer.d.ts +3 -0
  163. package/dist/dts/layers/MainLayer.d.ts.map +1 -0
  164. package/dist/dts/matching/ExpressionEvaluator.d.ts +11 -0
  165. package/dist/dts/matching/ExpressionEvaluator.d.ts.map +1 -0
  166. package/dist/dts/matching/RequestMatcher.d.ts +13 -0
  167. package/dist/dts/matching/RequestMatcher.d.ts.map +1 -0
  168. package/dist/dts/matching/ResponseGenerator.d.ts +9 -0
  169. package/dist/dts/matching/ResponseGenerator.d.ts.map +1 -0
  170. package/dist/dts/matching/TemplateEngine.d.ts +4 -0
  171. package/dist/dts/matching/TemplateEngine.d.ts.map +1 -0
  172. package/dist/dts/repositories/ImposterRepository.d.ts +33 -0
  173. package/dist/dts/repositories/ImposterRepository.d.ts.map +1 -0
  174. package/dist/dts/schemas/ConfigFileSchema.d.ts +142 -0
  175. package/dist/dts/schemas/ConfigFileSchema.d.ts.map +1 -0
  176. package/dist/dts/schemas/ImposterSchema.d.ts +368 -0
  177. package/dist/dts/schemas/ImposterSchema.d.ts.map +1 -0
  178. package/dist/dts/schemas/RequestLogSchema.d.ts +36 -0
  179. package/dist/dts/schemas/RequestLogSchema.d.ts.map +1 -0
  180. package/dist/dts/schemas/StubSchema.d.ts +112 -0
  181. package/dist/dts/schemas/StubSchema.d.ts.map +1 -0
  182. package/dist/dts/schemas/common.d.ts +56 -0
  183. package/dist/dts/schemas/common.d.ts.map +1 -0
  184. package/dist/dts/server/AdminServer.d.ts +11 -0
  185. package/dist/dts/server/AdminServer.d.ts.map +1 -0
  186. package/dist/dts/server/BunServer.d.ts +17 -0
  187. package/dist/dts/server/BunServer.d.ts.map +1 -0
  188. package/dist/dts/server/FiberManager.d.ts +12 -0
  189. package/dist/dts/server/FiberManager.d.ts.map +1 -0
  190. package/dist/dts/server/ImposterServer.d.ts +29 -0
  191. package/dist/dts/server/ImposterServer.d.ts.map +1 -0
  192. package/dist/dts/services/AppConfig.d.ts +14 -0
  193. package/dist/dts/services/AppConfig.d.ts.map +1 -0
  194. package/dist/dts/services/MetricsService.d.ts +26 -0
  195. package/dist/dts/services/MetricsService.d.ts.map +1 -0
  196. package/dist/dts/services/PortAllocator.d.ts +29 -0
  197. package/dist/dts/services/PortAllocator.d.ts.map +1 -0
  198. package/dist/dts/services/ProxyService.d.ts +24 -0
  199. package/dist/dts/services/ProxyService.d.ts.map +1 -0
  200. package/dist/dts/services/RequestLogger.d.ts +23 -0
  201. package/dist/dts/services/RequestLogger.d.ts.map +1 -0
  202. package/dist/dts/services/Uuid.d.ts +9 -0
  203. package/dist/dts/services/Uuid.d.ts.map +1 -0
  204. package/dist/dts/services/UuidLive.d.ts +4 -0
  205. package/dist/dts/services/UuidLive.d.ts.map +1 -0
  206. package/dist/dts/ui/UiRouter.d.ts +15 -0
  207. package/dist/dts/ui/UiRouter.d.ts.map +1 -0
  208. package/dist/dts/ui/admin/AdminLayout.d.ts +7 -0
  209. package/dist/dts/ui/admin/AdminLayout.d.ts.map +1 -0
  210. package/dist/dts/ui/admin/AdminUiRouter.d.ts +6 -0
  211. package/dist/dts/ui/admin/AdminUiRouter.d.ts.map +1 -0
  212. package/dist/dts/ui/admin/pages/AdminDashboard.d.ts +7 -0
  213. package/dist/dts/ui/admin/pages/AdminDashboard.d.ts.map +1 -0
  214. package/dist/dts/ui/admin/partials.d.ts +14 -0
  215. package/dist/dts/ui/admin/partials.d.ts.map +1 -0
  216. package/dist/dts/ui/html.d.ts +12 -0
  217. package/dist/dts/ui/html.d.ts.map +1 -0
  218. package/dist/dts/ui/layout.d.ts +9 -0
  219. package/dist/dts/ui/layout.d.ts.map +1 -0
  220. package/dist/dts/ui/pages/dashboard.d.ts +10 -0
  221. package/dist/dts/ui/pages/dashboard.d.ts.map +1 -0
  222. package/dist/dts/ui/pages/request-detail.d.ts +11 -0
  223. package/dist/dts/ui/pages/request-detail.d.ts.map +1 -0
  224. package/dist/dts/ui/pages/requests.d.ts +15 -0
  225. package/dist/dts/ui/pages/requests.d.ts.map +1 -0
  226. package/dist/dts/ui/pages/stubs.d.ts +8 -0
  227. package/dist/dts/ui/pages/stubs.d.ts.map +1 -0
  228. package/dist/dts/ui/partials.d.ts +13 -0
  229. package/dist/dts/ui/partials.d.ts.map +1 -0
  230. package/dist/esm/Program.js +2 -0
  231. package/dist/esm/Program.js.map +1 -0
  232. package/dist/esm/api/AdminApi.js +5 -0
  233. package/dist/esm/api/AdminApi.js.map +1 -0
  234. package/dist/esm/api/ApiErrors.js +20 -0
  235. package/dist/esm/api/ApiErrors.js.map +1 -0
  236. package/dist/esm/api/ApiSchemas.js +29 -0
  237. package/dist/esm/api/ApiSchemas.js.map +1 -0
  238. package/dist/esm/api/Conversions.js +32 -0
  239. package/dist/esm/api/Conversions.js.map +1 -0
  240. package/dist/esm/api/ImpostersGroup.js +30 -0
  241. package/dist/esm/api/ImpostersGroup.js.map +1 -0
  242. package/dist/esm/api/ImpostersHandlers.js +354 -0
  243. package/dist/esm/api/ImpostersHandlers.js.map +1 -0
  244. package/dist/esm/api/SystemGroup.js +6 -0
  245. package/dist/esm/api/SystemGroup.js.map +1 -0
  246. package/dist/esm/api/SystemHandlers.js +67 -0
  247. package/dist/esm/api/SystemHandlers.js.map +1 -0
  248. package/dist/esm/cli/Commands.js +98 -0
  249. package/dist/esm/cli/Commands.js.map +1 -0
  250. package/dist/esm/cli/ConfigLoader.js +25 -0
  251. package/dist/esm/cli/ConfigLoader.js.map +1 -0
  252. package/dist/esm/client/HandlerHttpClient.js +42 -0
  253. package/dist/esm/client/HandlerHttpClient.js.map +1 -0
  254. package/dist/esm/client/ImpostersClient.js +10 -0
  255. package/dist/esm/client/ImpostersClient.js.map +1 -0
  256. package/dist/esm/client/index.js +4 -0
  257. package/dist/esm/client/index.js.map +1 -0
  258. package/dist/esm/client/testing.js +86 -0
  259. package/dist/esm/client/testing.js.map +1 -0
  260. package/dist/esm/domain/imposter.js +103 -0
  261. package/dist/esm/domain/imposter.js.map +1 -0
  262. package/dist/esm/domain/route.js +164 -0
  263. package/dist/esm/domain/route.js.map +1 -0
  264. package/dist/esm/index.js +60 -0
  265. package/dist/esm/index.js.map +1 -0
  266. package/dist/esm/layers/ApiLayer.js +11 -0
  267. package/dist/esm/layers/ApiLayer.js.map +1 -0
  268. package/dist/esm/layers/MainLayer.js +20 -0
  269. package/dist/esm/layers/MainLayer.js.map +1 -0
  270. package/dist/esm/matching/ExpressionEvaluator.js +94 -0
  271. package/dist/esm/matching/ExpressionEvaluator.js.map +1 -0
  272. package/dist/esm/matching/RequestMatcher.js +135 -0
  273. package/dist/esm/matching/RequestMatcher.js.map +1 -0
  274. package/dist/esm/matching/ResponseGenerator.js +71 -0
  275. package/dist/esm/matching/ResponseGenerator.js.map +1 -0
  276. package/dist/esm/matching/TemplateEngine.js +47 -0
  277. package/dist/esm/matching/TemplateEngine.js.map +1 -0
  278. package/dist/esm/package.json +4 -0
  279. package/dist/esm/repositories/ImposterRepository.js +110 -0
  280. package/dist/esm/repositories/ImposterRepository.js.map +1 -0
  281. package/dist/esm/schemas/ConfigFileSchema.js +37 -0
  282. package/dist/esm/schemas/ConfigFileSchema.js.map +1 -0
  283. package/dist/esm/schemas/ImposterSchema.js +195 -0
  284. package/dist/esm/schemas/ImposterSchema.js.map +1 -0
  285. package/dist/esm/schemas/RequestLogSchema.js +44 -0
  286. package/dist/esm/schemas/RequestLogSchema.js.map +1 -0
  287. package/dist/esm/schemas/StubSchema.js +77 -0
  288. package/dist/esm/schemas/StubSchema.js.map +1 -0
  289. package/dist/esm/schemas/common.js +59 -0
  290. package/dist/esm/schemas/common.js.map +1 -0
  291. package/dist/esm/server/AdminServer.js +27 -0
  292. package/dist/esm/server/AdminServer.js.map +1 -0
  293. package/dist/esm/server/BunServer.js +6 -0
  294. package/dist/esm/server/BunServer.js.map +1 -0
  295. package/dist/esm/server/FiberManager.js +14 -0
  296. package/dist/esm/server/FiberManager.js.map +1 -0
  297. package/dist/esm/server/ImposterServer.js +225 -0
  298. package/dist/esm/server/ImposterServer.js.map +1 -0
  299. package/dist/esm/services/AppConfig.js +11 -0
  300. package/dist/esm/services/AppConfig.js.map +1 -0
  301. package/dist/esm/services/MetricsService.js +105 -0
  302. package/dist/esm/services/MetricsService.js.map +1 -0
  303. package/dist/esm/services/PortAllocator.js +41 -0
  304. package/dist/esm/services/PortAllocator.js.map +1 -0
  305. package/dist/esm/services/ProxyService.js +101 -0
  306. package/dist/esm/services/ProxyService.js.map +1 -0
  307. package/dist/esm/services/RequestLogger.js +53 -0
  308. package/dist/esm/services/RequestLogger.js.map +1 -0
  309. package/dist/esm/services/Uuid.js +3 -0
  310. package/dist/esm/services/Uuid.js.map +1 -0
  311. package/dist/esm/services/UuidLive.js +9 -0
  312. package/dist/esm/services/UuidLive.js.map +1 -0
  313. package/dist/esm/ui/UiRouter.js +235 -0
  314. package/dist/esm/ui/UiRouter.js.map +1 -0
  315. package/dist/esm/ui/admin/AdminLayout.js +29 -0
  316. package/dist/esm/ui/admin/AdminLayout.js.map +1 -0
  317. package/dist/esm/ui/admin/AdminUiRouter.js +148 -0
  318. package/dist/esm/ui/admin/AdminUiRouter.js.map +1 -0
  319. package/dist/esm/ui/admin/pages/AdminDashboard.js +48 -0
  320. package/dist/esm/ui/admin/pages/AdminDashboard.js.map +1 -0
  321. package/dist/esm/ui/admin/partials.js +54 -0
  322. package/dist/esm/ui/admin/partials.js.map +1 -0
  323. package/dist/esm/ui/html.js +32 -0
  324. package/dist/esm/ui/html.js.map +1 -0
  325. package/dist/esm/ui/layout.js +32 -0
  326. package/dist/esm/ui/layout.js.map +1 -0
  327. package/dist/esm/ui/pages/dashboard.js +44 -0
  328. package/dist/esm/ui/pages/dashboard.js.map +1 -0
  329. package/dist/esm/ui/pages/request-detail.js +112 -0
  330. package/dist/esm/ui/pages/request-detail.js.map +1 -0
  331. package/dist/esm/ui/pages/requests.js +112 -0
  332. package/dist/esm/ui/pages/requests.js.map +1 -0
  333. package/dist/esm/ui/pages/stubs.js +39 -0
  334. package/dist/esm/ui/pages/stubs.js.map +1 -0
  335. package/dist/esm/ui/partials.js +91 -0
  336. package/dist/esm/ui/partials.js.map +1 -0
  337. package/domain/imposter/package.json +6 -0
  338. package/domain/route/package.json +6 -0
  339. package/layers/ApiLayer/package.json +6 -0
  340. package/layers/MainLayer/package.json +6 -0
  341. package/matching/ExpressionEvaluator/package.json +6 -0
  342. package/matching/RequestMatcher/package.json +6 -0
  343. package/matching/ResponseGenerator/package.json +6 -0
  344. package/matching/TemplateEngine/package.json +6 -0
  345. package/package.json +435 -0
  346. package/repositories/ImposterRepository/package.json +6 -0
  347. package/schemas/ConfigFileSchema/package.json +6 -0
  348. package/schemas/ImposterSchema/package.json +6 -0
  349. package/schemas/RequestLogSchema/package.json +6 -0
  350. package/schemas/StubSchema/package.json +6 -0
  351. package/schemas/common/package.json +6 -0
  352. package/server/AdminServer/package.json +6 -0
  353. package/server/BunServer/package.json +6 -0
  354. package/server/FiberManager/package.json +6 -0
  355. package/server/ImposterServer/package.json +6 -0
  356. package/services/AppConfig/package.json +6 -0
  357. package/services/MetricsService/package.json +6 -0
  358. package/services/PortAllocator/package.json +6 -0
  359. package/services/ProxyService/package.json +6 -0
  360. package/services/RequestLogger/package.json +6 -0
  361. package/services/Uuid/package.json +6 -0
  362. package/services/UuidLive/package.json +6 -0
  363. package/src/Program.ts +1 -0
  364. package/src/api/AdminApi.ts +7 -0
  365. package/src/api/ApiErrors.ts +20 -0
  366. package/src/api/ApiSchemas.ts +36 -0
  367. package/src/api/Conversions.ts +34 -0
  368. package/src/api/ImpostersGroup.ts +103 -0
  369. package/src/api/ImpostersHandlers.ts +387 -0
  370. package/src/api/SystemGroup.ts +12 -0
  371. package/src/api/SystemHandlers.ts +76 -0
  372. package/src/cli/Commands.ts +119 -0
  373. package/src/cli/ConfigLoader.ts +41 -0
  374. package/src/client/HandlerHttpClient.ts +50 -0
  375. package/src/client/ImpostersClient.ts +21 -0
  376. package/src/client/index.ts +9 -0
  377. package/src/client/testing.ts +105 -0
  378. package/src/domain/imposter.ts +186 -0
  379. package/src/domain/route.ts +255 -0
  380. package/src/index.ts +153 -0
  381. package/src/layers/ApiLayer.ts +21 -0
  382. package/src/layers/MainLayer.ts +43 -0
  383. package/src/matching/ExpressionEvaluator.ts +102 -0
  384. package/src/matching/RequestMatcher.ts +162 -0
  385. package/src/matching/ResponseGenerator.ts +86 -0
  386. package/src/matching/TemplateEngine.ts +54 -0
  387. package/src/repositories/ImposterRepository.ts +145 -0
  388. package/src/schemas/ConfigFileSchema.ts +32 -0
  389. package/src/schemas/ImposterSchema.ts +232 -0
  390. package/src/schemas/RequestLogSchema.ts +38 -0
  391. package/src/schemas/StubSchema.ts +90 -0
  392. package/src/schemas/common.ts +95 -0
  393. package/src/server/AdminServer.ts +22 -0
  394. package/src/server/BunServer.ts +19 -0
  395. package/src/server/FiberManager.ts +25 -0
  396. package/src/server/ImposterServer.ts +244 -0
  397. package/src/services/AppConfig.ts +22 -0
  398. package/src/services/MetricsService.ts +157 -0
  399. package/src/services/PortAllocator.ts +68 -0
  400. package/src/services/ProxyService.ts +139 -0
  401. package/src/services/RequestLogger.ts +87 -0
  402. package/src/services/Uuid.ts +9 -0
  403. package/src/services/UuidLive.ts +9 -0
  404. package/src/types/bun.d.ts +6 -0
  405. package/src/ui/UiRouter.ts +278 -0
  406. package/src/ui/admin/AdminLayout.ts +36 -0
  407. package/src/ui/admin/AdminUiRouter.ts +170 -0
  408. package/src/ui/admin/pages/AdminDashboard.ts +54 -0
  409. package/src/ui/admin/partials.ts +83 -0
  410. package/src/ui/html.ts +37 -0
  411. package/src/ui/layout.ts +44 -0
  412. package/src/ui/pages/dashboard.ts +64 -0
  413. package/src/ui/pages/request-detail.ts +142 -0
  414. package/src/ui/pages/requests.ts +141 -0
  415. package/src/ui/pages/stubs.ts +52 -0
  416. package/src/ui/partials.ts +133 -0
  417. package/ui/UiRouter/package.json +6 -0
  418. package/ui/admin/AdminLayout/package.json +6 -0
  419. package/ui/admin/AdminUiRouter/package.json +6 -0
  420. package/ui/admin/pages/AdminDashboard/package.json +6 -0
  421. package/ui/admin/partials/package.json +6 -0
  422. package/ui/html/package.json +6 -0
  423. package/ui/layout/package.json +6 -0
  424. package/ui/pages/dashboard/package.json +6 -0
  425. package/ui/pages/requests/package.json +6 -0
  426. package/ui/pages/stubs/package.json +6 -0
@@ -0,0 +1,112 @@
1
+ import * as Schema from "effect/Schema";
2
+ export declare const ProxyMode: Schema.Literal<["passthrough", "record"]>;
3
+ export type ProxyMode = Schema.Schema.Type<typeof ProxyMode>;
4
+ export declare const ProxyConfig: Schema.Struct<{
5
+ targetUrl: Schema.filter<typeof Schema.String>;
6
+ mode: Schema.optionalWith<Schema.Literal<["passthrough", "record"]>, {
7
+ default: () => "passthrough";
8
+ }>;
9
+ addHeaders: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.String>>;
10
+ removeHeaders: Schema.optionalWith<Schema.Array$<typeof Schema.String>, {
11
+ default: () => readonly [];
12
+ }>;
13
+ followRedirects: Schema.optionalWith<typeof Schema.Boolean, {
14
+ default: () => true;
15
+ }>;
16
+ timeout: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
17
+ default: () => number;
18
+ }>;
19
+ }>;
20
+ export type ProxyConfig = Schema.Schema.Type<typeof ProxyConfig>;
21
+ export declare const PredicateOperator: Schema.Literal<["equals", "contains", "startsWith", "matches", "exists"]>;
22
+ export type PredicateOperator = Schema.Schema.Type<typeof PredicateOperator>;
23
+ export declare const PredicateField: Schema.Literal<["method", "path", "headers", "query", "body"]>;
24
+ export type PredicateField = Schema.Schema.Type<typeof PredicateField>;
25
+ export declare const Predicate: Schema.Struct<{
26
+ field: Schema.Literal<["method", "path", "headers", "query", "body"]>;
27
+ operator: Schema.Literal<["equals", "contains", "startsWith", "matches", "exists"]>;
28
+ value: typeof Schema.Unknown;
29
+ caseSensitive: Schema.optionalWith<typeof Schema.Boolean, {
30
+ default: () => true;
31
+ }>;
32
+ }>;
33
+ export type Predicate = Schema.Schema.Type<typeof Predicate>;
34
+ export declare const ResponseMode: Schema.Literal<["sequential", "random", "repeat"]>;
35
+ export type ResponseMode = Schema.Schema.Type<typeof ResponseMode>;
36
+ export declare const ResponseConfig: Schema.Struct<{
37
+ status: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
38
+ default: () => number;
39
+ }>;
40
+ headers: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.String>>;
41
+ body: Schema.optional<typeof Schema.Unknown>;
42
+ delay: Schema.optional<Schema.filter<Schema.filter<typeof Schema.Number>>>;
43
+ }>;
44
+ export type ResponseConfig = Schema.Schema.Type<typeof ResponseConfig>;
45
+ export declare const Stub: Schema.Struct<{
46
+ id: Schema.brand<Schema.filter<typeof Schema.String>, "NonEmptyString">;
47
+ predicates: Schema.Array$<Schema.Struct<{
48
+ field: Schema.Literal<["method", "path", "headers", "query", "body"]>;
49
+ operator: Schema.Literal<["equals", "contains", "startsWith", "matches", "exists"]>;
50
+ value: typeof Schema.Unknown;
51
+ caseSensitive: Schema.optionalWith<typeof Schema.Boolean, {
52
+ default: () => true;
53
+ }>;
54
+ }>>;
55
+ responses: Schema.NonEmptyArray<Schema.Struct<{
56
+ status: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
57
+ default: () => number;
58
+ }>;
59
+ headers: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.String>>;
60
+ body: Schema.optional<typeof Schema.Unknown>;
61
+ delay: Schema.optional<Schema.filter<Schema.filter<typeof Schema.Number>>>;
62
+ }>>;
63
+ responseMode: Schema.optionalWith<Schema.Literal<["sequential", "random", "repeat"]>, {
64
+ default: () => "sequential";
65
+ }>;
66
+ }>;
67
+ export type Stub = Schema.Schema.Type<typeof Stub>;
68
+ export declare const CreateStubRequest: Schema.Struct<{
69
+ predicates: Schema.optionalWith<Schema.Array$<Schema.Struct<{
70
+ field: Schema.Literal<["method", "path", "headers", "query", "body"]>;
71
+ operator: Schema.Literal<["equals", "contains", "startsWith", "matches", "exists"]>;
72
+ value: typeof Schema.Unknown;
73
+ caseSensitive: Schema.optionalWith<typeof Schema.Boolean, {
74
+ default: () => true;
75
+ }>;
76
+ }>>, {
77
+ default: () => readonly [];
78
+ }>;
79
+ responses: Schema.NonEmptyArray<Schema.Struct<{
80
+ status: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
81
+ default: () => number;
82
+ }>;
83
+ headers: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.String>>;
84
+ body: Schema.optional<typeof Schema.Unknown>;
85
+ delay: Schema.optional<Schema.filter<Schema.filter<typeof Schema.Number>>>;
86
+ }>>;
87
+ responseMode: Schema.optionalWith<Schema.Literal<["sequential", "random", "repeat"]>, {
88
+ default: () => "sequential";
89
+ }>;
90
+ }>;
91
+ export type CreateStubRequest = Schema.Schema.Type<typeof CreateStubRequest>;
92
+ export declare const UpdateStubRequest: Schema.Struct<{
93
+ predicates: Schema.optional<Schema.Array$<Schema.Struct<{
94
+ field: Schema.Literal<["method", "path", "headers", "query", "body"]>;
95
+ operator: Schema.Literal<["equals", "contains", "startsWith", "matches", "exists"]>;
96
+ value: typeof Schema.Unknown;
97
+ caseSensitive: Schema.optionalWith<typeof Schema.Boolean, {
98
+ default: () => true;
99
+ }>;
100
+ }>>>;
101
+ responses: Schema.optional<Schema.NonEmptyArray<Schema.Struct<{
102
+ status: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
103
+ default: () => number;
104
+ }>;
105
+ headers: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.String>>;
106
+ body: Schema.optional<typeof Schema.Unknown>;
107
+ delay: Schema.optional<Schema.filter<Schema.filter<typeof Schema.Number>>>;
108
+ }>>>;
109
+ responseMode: Schema.optional<Schema.Literal<["sequential", "random", "repeat"]>>;
110
+ }>;
111
+ export type UpdateStubRequest = Schema.Schema.Type<typeof UpdateStubRequest>;
112
+ //# sourceMappingURL=StubSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StubSchema.d.ts","sourceRoot":"","sources":["../../../src/schemas/StubSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,eAAO,MAAM,SAAS,2CAA0C,CAAA;AAChE,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAA;AAG5D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;EAUtB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,CAAA;AAGhE,eAAO,MAAM,iBAAiB,2EAM7B,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAG5E,eAAO,MAAM,cAAc,gEAM1B,CAAA;AACD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC,CAAA;AAGtE,eAAO,MAAM,SAAS;;;;;;;EAKpB,CAAA;AACF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAA;AAG5D,eAAO,MAAM,YAAY,oDAAmD,CAAA;AAC5E,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,CAAA;AAGlE,eAAO,MAAM,cAAc;;;;;;;EAQzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC,CAAA;AAGtE,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;EAKf,CAAA;AACF,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;AAGlD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;EAI5B,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAG5E,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;EAI5B,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { DateTime, Effect } from "effect";
2
+ import * as Duration from "effect/Duration";
3
+ import * as Schema from "effect/Schema";
4
+ export declare const ImposterStatus: Schema.Literal<["running", "stopped", "starting", "stopping"]>;
5
+ export type ImposterStatus = Schema.Schema.Type<typeof ImposterStatus>;
6
+ export declare const Protocol: Schema.Literal<["HTTP"]>;
7
+ export type Protocol = Schema.Schema.Type<typeof Protocol>;
8
+ export declare const PositiveInteger: Schema.brand<Schema.filter<Schema.filter<typeof Schema.Number>>, "PositiveInteger">;
9
+ export type PositiveInteger = Schema.Schema.Type<typeof PositiveInteger>;
10
+ export declare const NonEmptyString: Schema.brand<Schema.filter<typeof Schema.String>, "NonEmptyString">;
11
+ export type NonEmptyString = Schema.Schema.Type<typeof NonEmptyString>;
12
+ export declare const PortNumber: Schema.brand<Schema.filter<Schema.filter<typeof Schema.Number>>, "PortNumber">;
13
+ export type PortNumber = Schema.Schema.Type<typeof PortNumber>;
14
+ export declare const PaginationQuery: Schema.Struct<{
15
+ limit: Schema.optionalWith<Schema.brand<Schema.filter<Schema.filter<typeof Schema.Number>>, "PositiveInteger">, {
16
+ default: () => number & import("effect/Brand").Brand<"PositiveInteger">;
17
+ }>;
18
+ offset: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
19
+ default: () => number;
20
+ }>;
21
+ }>;
22
+ export type PaginationQuery = Schema.Schema.Type<typeof PaginationQuery>;
23
+ export declare const PaginationMeta: Schema.Struct<{
24
+ total: Schema.filter<Schema.filter<typeof Schema.Number>>;
25
+ limit: Schema.brand<Schema.filter<Schema.filter<typeof Schema.Number>>, "PositiveInteger">;
26
+ offset: Schema.filter<Schema.filter<typeof Schema.Number>>;
27
+ hasMore: typeof Schema.Boolean;
28
+ }>;
29
+ export type PaginationMeta = Schema.Schema.Type<typeof PaginationMeta>;
30
+ export declare const ErrorCode: Schema.Union<[Schema.Literal<["VALIDATION_ERROR"]>, Schema.Literal<["INVALID_ENDPOINT"]>, Schema.Literal<["IMPOSTER_NOT_FOUND"]>, Schema.Literal<["PORT_IN_USE"]>, Schema.Literal<["IMPOSTER_BUSY"]>, Schema.Literal<["SYSTEM_ERROR"]>, Schema.Literal<["CONFIRMATION_REQUIRED"]>, Schema.Literal<["ENDPOINT_CONFLICT"]>]>;
31
+ export type ErrorCode = Schema.Schema.Type<typeof ErrorCode>;
32
+ export declare const ErrorDetails: Schema.Struct<{
33
+ code: Schema.Union<[Schema.Literal<["VALIDATION_ERROR"]>, Schema.Literal<["INVALID_ENDPOINT"]>, Schema.Literal<["IMPOSTER_NOT_FOUND"]>, Schema.Literal<["PORT_IN_USE"]>, Schema.Literal<["IMPOSTER_BUSY"]>, Schema.Literal<["SYSTEM_ERROR"]>, Schema.Literal<["CONFIRMATION_REQUIRED"]>, Schema.Literal<["ENDPOINT_CONFLICT"]>]>;
34
+ message: Schema.brand<Schema.filter<typeof Schema.String>, "NonEmptyString">;
35
+ field: Schema.optional<typeof Schema.String>;
36
+ value: Schema.optional<typeof Schema.Unknown>;
37
+ details: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
38
+ }>;
39
+ export type ErrorDetails = Schema.Schema.Type<typeof ErrorDetails>;
40
+ export declare const ErrorResponse: Schema.Struct<{
41
+ error: Schema.Struct<{
42
+ code: Schema.Union<[Schema.Literal<["VALIDATION_ERROR"]>, Schema.Literal<["INVALID_ENDPOINT"]>, Schema.Literal<["IMPOSTER_NOT_FOUND"]>, Schema.Literal<["PORT_IN_USE"]>, Schema.Literal<["IMPOSTER_BUSY"]>, Schema.Literal<["SYSTEM_ERROR"]>, Schema.Literal<["CONFIRMATION_REQUIRED"]>, Schema.Literal<["ENDPOINT_CONFLICT"]>]>;
43
+ message: Schema.brand<Schema.filter<typeof Schema.String>, "NonEmptyString">;
44
+ field: Schema.optional<typeof Schema.String>;
45
+ value: Schema.optional<typeof Schema.Unknown>;
46
+ details: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.Unknown>>;
47
+ }>;
48
+ }>;
49
+ export type ErrorResponse = Schema.Schema.Type<typeof ErrorResponse>;
50
+ export declare const StatusFilter: Schema.optional<Schema.Literal<["running", "stopped", "starting", "stopping"]>>;
51
+ export declare const ProtocolFilter: Schema.optional<Schema.Literal<["HTTP"]>>;
52
+ export declare const DateTimeSchema: typeof Schema.DateTimeUtc;
53
+ export type DateTimeSchema = Schema.Schema.Type<typeof DateTimeSchema>;
54
+ export declare const currentDateTime: Effect.Effect<DateTime.Utc, never, never>;
55
+ export declare const formatDurationAsUptime: (duration: Duration.Duration) => string;
56
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/schemas/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,eAAO,MAAM,cAAc,gEAA+D,CAAA;AAC1F,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC,CAAA;AAEtE,eAAO,MAAM,QAAQ,0BAAyB,CAAA;AAC9C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAA;AAG1D,eAAO,MAAM,eAAe,qFAI3B,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,CAAA;AAExE,eAAO,MAAM,cAAc,qEAG1B,CAAA;AACD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC,CAAA;AAEtE,eAAO,MAAM,UAAU,gFAItB,CAAA;AACD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,CAAA;AAE9D,eAAO,MAAM,eAAe;;;;;;;EAO1B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,CAAA;AAExE,eAAO,MAAM,cAAc;;;;;EAKzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC,CAAA;AAEtE,eAAO,MAAM,SAAS,4TAarB,CAAA;AACD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAA;AAE5D,eAAO,MAAM,YAAY;;;;;;EAMvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,CAAA;AAElE,eAAO,MAAM,aAAa;;;;;;;;EAExB,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,aAAa,CAAC,CAAA;AAGpE,eAAO,MAAM,YAAY,iFAAkC,CAAA;AAC3D,eAAO,MAAM,cAAc,2CAA4B,CAAA;AAGvD,eAAO,MAAM,cAAc,2BAAqB,CAAA;AAChD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC,CAAA;AAGtE,eAAO,MAAM,eAAe,2CAAuE,CAAA;AAGnG,eAAO,MAAM,sBAAsB,GAAI,UAAU,QAAQ,CAAC,QAAQ,KAAG,MAEpE,CAAA"}
@@ -0,0 +1,11 @@
1
+ import * as Layer from "effect/Layer";
2
+ export declare const FullLayer: Layer.Layer<import("@effect/platform/HttpPlatform").HttpPlatform | import("@effect/platform/Etag").Generator | import("@effect/platform/FileSystem").FileSystem | import("@effect/platform/Path").Path | import("@effect/platform/HttpApi").Api, import("effect/ConfigError").ConfigError, never>;
3
+ export declare const makeWebHandler: () => {
4
+ readonly handler: (request: Request, context?: import("effect/Context").Context<never> | undefined) => Promise<Response>;
5
+ readonly dispose: () => Promise<void>;
6
+ };
7
+ export declare const makeCompositeHandler: (adminPort: number) => {
8
+ handler: (request: Request) => Promise<Response>;
9
+ dispose: () => Promise<void>;
10
+ };
11
+ //# sourceMappingURL=AdminServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminServer.d.ts","sourceRoot":"","sources":["../../../src/server/AdminServer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAKrC,eAAO,MAAM,SAAS,mSAA0C,CAAA;AAEhE,eAAO,MAAM,cAAc;gDAc69F,CAAC;;CAd/6F,CAAA;AAE1E,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM;uBAIpB,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC;;CAO5D,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { Context, Layer } from "effect";
2
+ export interface ServerInstance {
3
+ readonly port: number;
4
+ readonly stop: (closeActive: boolean) => void;
5
+ }
6
+ export interface ServerFactoryShape {
7
+ readonly create: (options: {
8
+ readonly port: number;
9
+ readonly fetch: (request: Request) => Promise<Response>;
10
+ }) => ServerInstance;
11
+ }
12
+ declare const ServerFactory_base: Context.TagClass<ServerFactory, "ServerFactory", ServerFactoryShape>;
13
+ export declare class ServerFactory extends ServerFactory_base {
14
+ }
15
+ export declare const BunServerFactoryLive: Layer.Layer<ServerFactory, never, never>;
16
+ export {};
17
+ //# sourceMappingURL=BunServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunServer.d.ts","sourceRoot":"","sources":["../../../src/server/BunServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAA;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;KACxD,KAAK,cAAc,CAAA;CACrB;;AAED,qBAAa,aAAc,SAAQ,kBAAiE;CAAG;AAEvG,eAAO,MAAM,oBAAoB,0CAE/B,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ export interface FiberManagerShape {
3
+ readonly start: (id: string, effect: Effect.Effect<never, unknown>) => Effect.Effect<void>;
4
+ readonly stop: (id: string) => Effect.Effect<void>;
5
+ readonly isRunning: (id: string) => Effect.Effect<boolean>;
6
+ }
7
+ declare const FiberManager_base: Context.TagClass<FiberManager, "FiberManager", FiberManagerShape>;
8
+ export declare class FiberManager extends FiberManager_base {
9
+ }
10
+ export declare const FiberManagerLive: Layer.Layer<FiberManager, never, never>;
11
+ export {};
12
+ //# sourceMappingURL=FiberManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FiberManager.d.ts","sourceRoot":"","sources":["../../../src/server/FiberManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAY,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEzD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1F,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClD,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;CAC3D;;AAED,qBAAa,YAAa,SAAQ,iBAA8D;CAAG;AAEnG,eAAO,MAAM,gBAAgB,yCAc5B,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { type ImposterNotFoundError } from "../domain/imposter";
3
+ import { ImposterRepository } from "../repositories/ImposterRepository";
4
+ import { MetricsService } from "../services/MetricsService";
5
+ import { ProxyService } from "../services/ProxyService";
6
+ import { RequestLogger } from "../services/RequestLogger";
7
+ import { ServerFactory } from "./BunServer";
8
+ import { FiberManager } from "./FiberManager";
9
+ declare const ImposterServerError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
10
+ readonly _tag: "ImposterServerError";
11
+ } & Readonly<A>;
12
+ export declare class ImposterServerError extends ImposterServerError_base<{
13
+ readonly imposterId: string;
14
+ readonly reason: string;
15
+ }> {
16
+ }
17
+ export interface ImposterServerShape {
18
+ readonly start: (id: string) => Effect.Effect<void, ImposterServerError | ImposterNotFoundError>;
19
+ readonly stop: (id: string) => Effect.Effect<void>;
20
+ readonly updateStubs: (id: string) => Effect.Effect<void>;
21
+ readonly updateProxyConfig: (id: string) => Effect.Effect<void>;
22
+ readonly isRunning: (id: string) => Effect.Effect<boolean>;
23
+ }
24
+ declare const ImposterServer_base: Context.TagClass<ImposterServer, "ImposterServer", ImposterServerShape>;
25
+ export declare class ImposterServer extends ImposterServer_base {
26
+ }
27
+ export declare const ImposterServerLive: Layer.Layer<ImposterServer, never, ImposterRepository | MetricsService | ProxyService | RequestLogger | ServerFactory | FiberManager>;
28
+ export {};
29
+ //# sourceMappingURL=ImposterServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImposterServer.d.ts","sourceRoot":"","sources":["../../../src/server/ImposterServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAW,KAAK,EAAgB,MAAM,QAAQ,CAAA;AAE5E,OAAO,EAAkB,KAAK,qBAAqB,EAA0B,MAAM,oBAAoB,CAAA;AAGvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAIvE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;;;;AAE7C,qBAAa,mBAAoB,SAAQ,yBAAwC;IAC/E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,CAAC;CAAG;AAEL,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,qBAAqB,CAAC,CAAA;IAChG,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClD,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzD,QAAQ,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;CAC3D;;AAED,qBAAa,cAAe,SAAQ,mBAAoE;CAAG;AAO3G,eAAO,MAAM,kBAAkB,uIA+M9B,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { Context, Layer } from "effect";
2
+ export interface AppConfigShape {
3
+ readonly adminPort: number;
4
+ readonly portRangeMin: number;
5
+ readonly portRangeMax: number;
6
+ readonly maxImposters: number;
7
+ readonly logLevel: "debug" | "info" | "warn" | "error";
8
+ }
9
+ declare const AppConfig_base: Context.TagClass<AppConfig, "AppConfig", AppConfigShape>;
10
+ export declare class AppConfig extends AppConfig_base {
11
+ }
12
+ export declare const AppConfigLive: Layer.Layer<AppConfig, import("effect/ConfigError").ConfigError, never>;
13
+ export {};
14
+ //# sourceMappingURL=AppConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppConfig.d.ts","sourceRoot":"","sources":["../../../src/services/AppConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE/C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CACvD;;AAED,qBAAa,SAAU,SAAQ,cAAqD;CAAG;AAWvF,eAAO,MAAM,aAAa,yEAAkC,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import * as DateTime from "effect/DateTime";
3
+ import type { RequestLogEntry } from "../schemas/RequestLogSchema";
4
+ export interface Statistics {
5
+ readonly totalRequests: number;
6
+ readonly requestsPerMinute: number;
7
+ readonly averageResponseTime: number;
8
+ readonly errorRate: number;
9
+ readonly requestsByMethod: Record<string, number>;
10
+ readonly requestsByStatusCode: Record<string, number>;
11
+ readonly lastRequestAt?: DateTime.Utc;
12
+ readonly p50ResponseTime?: number;
13
+ readonly p95ResponseTime?: number;
14
+ readonly p99ResponseTime?: number;
15
+ }
16
+ export interface MetricsServiceShape {
17
+ readonly recordRequest: (entry: RequestLogEntry) => Effect.Effect<void>;
18
+ readonly getStats: (imposterId: string) => Effect.Effect<Statistics>;
19
+ readonly resetStats: (imposterId: string) => Effect.Effect<void>;
20
+ }
21
+ declare const MetricsService_base: Context.TagClass<MetricsService, "MetricsService", MetricsServiceShape>;
22
+ export declare class MetricsService extends MetricsService_base {
23
+ }
24
+ export declare const MetricsServiceLive: Layer.Layer<MetricsService, never, never>;
25
+ export {};
26
+ //# sourceMappingURL=MetricsService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsService.d.ts","sourceRoot":"","sources":["../../../src/services/MetricsService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAW,KAAK,EAAO,MAAM,QAAQ,CAAA;AAC7D,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAgBlE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjD,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrD,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAA;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AA6DD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvE,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACpE,QAAQ,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACjE;;AAED,qBAAa,cAAe,SAAQ,mBAAoE;CAAG;AAE3G,eAAO,MAAM,kBAAkB,2CA0D9B,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { AppConfig } from "./AppConfig";
3
+ declare const PortAllocatorError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
4
+ readonly _tag: "PortAllocatorError";
5
+ } & Readonly<A>;
6
+ export declare class PortAllocatorError extends PortAllocatorError_base<{
7
+ readonly reason: string;
8
+ readonly port?: number;
9
+ }> {
10
+ }
11
+ declare const PortExhaustedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
12
+ readonly _tag: "PortExhaustedError";
13
+ } & Readonly<A>;
14
+ export declare class PortExhaustedError extends PortExhaustedError_base<{
15
+ readonly rangeMin: number;
16
+ readonly rangeMax: number;
17
+ }> {
18
+ }
19
+ export interface PortAllocatorShape {
20
+ readonly allocate: (preferred?: number) => Effect.Effect<number, PortAllocatorError | PortExhaustedError>;
21
+ readonly release: (port: number) => Effect.Effect<void>;
22
+ readonly isAvailable: (port: number) => Effect.Effect<boolean>;
23
+ }
24
+ declare const PortAllocator_base: Context.TagClass<PortAllocator, "PortAllocator", PortAllocatorShape>;
25
+ export declare class PortAllocator extends PortAllocator_base {
26
+ }
27
+ export declare const PortAllocatorLive: Layer.Layer<PortAllocator, never, AppConfig>;
28
+ export {};
29
+ //# sourceMappingURL=PortAllocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PortAllocator.d.ts","sourceRoot":"","sources":["../../../src/services/PortAllocator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAW,KAAK,EAAO,MAAM,QAAQ,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;;;;AAEvC,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB,CAAC;CAAG;;;;AAEL,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,CAAC;CAAG;AAEL,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,CAAC,CAAA;IACzG,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvD,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;CAC/D;;AAED,qBAAa,aAAc,SAAQ,kBAAiE;CAAG;AAEvG,eAAO,MAAM,iBAAiB,8CA8C7B,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import type { ProxyConfigDomain } from "../domain/imposter";
3
+ import type { RequestContext } from "../matching/RequestMatcher";
4
+ import type { Stub } from "../schemas/StubSchema";
5
+ import { Uuid } from "./Uuid";
6
+ declare const ProxyError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
7
+ readonly _tag: "ProxyError";
8
+ } & Readonly<A>;
9
+ export declare class ProxyError extends ProxyError_base<{
10
+ readonly targetUrl: string;
11
+ readonly reason: string;
12
+ readonly cause?: unknown;
13
+ }> {
14
+ }
15
+ export interface ProxyServiceShape {
16
+ readonly forward: (ctx: RequestContext, config: ProxyConfigDomain, originalUrl: URL) => Effect.Effect<Response, ProxyError>;
17
+ readonly recordAsStub: (request: RequestContext, response: Response) => Effect.Effect<Stub>;
18
+ }
19
+ declare const ProxyService_base: Context.TagClass<ProxyService, "ProxyService", ProxyServiceShape>;
20
+ export declare class ProxyService extends ProxyService_base {
21
+ }
22
+ export declare const ProxyServiceLive: Layer.Layer<ProxyService, never, Uuid>;
23
+ export {};
24
+ //# sourceMappingURL=ProxyService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProxyService.d.ts","sourceRoot":"","sources":["../../../src/services/ProxyService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;;;;AAE7B,qBAAa,UAAW,SAAQ,gBAA+B;IAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB,CAAC;CAAG;AAcL,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,CAChB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,GAAG,KACb,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IACxC,QAAQ,CAAC,YAAY,EAAE,CACrB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,QAAQ,KACf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACzB;;AAED,qBAAa,YAAa,SAAQ,iBAA8D;CAAG;AAEnG,eAAO,MAAM,gBAAgB,wCAmG5B,CAAA"}
@@ -0,0 +1,23 @@
1
+ import type { Queue, Scope } from "effect";
2
+ import { Context, Effect, Layer } from "effect";
3
+ import type { RequestLogEntry } from "../schemas/RequestLogSchema";
4
+ export interface RequestLoggerShape {
5
+ readonly log: (entry: RequestLogEntry) => Effect.Effect<void>;
6
+ readonly getEntries: (imposterId: string, opts?: {
7
+ limit?: number;
8
+ method?: string;
9
+ path?: string;
10
+ status?: number;
11
+ }) => Effect.Effect<ReadonlyArray<RequestLogEntry>>;
12
+ readonly getCount: (imposterId: string) => Effect.Effect<number>;
13
+ readonly clear: (imposterId: string) => Effect.Effect<void>;
14
+ readonly subscribe: Effect.Effect<Queue.Dequeue<RequestLogEntry>, never, Scope.Scope>;
15
+ readonly getEntryById: (imposterId: string, entryId: string) => Effect.Effect<RequestLogEntry | null>;
16
+ readonly removeImposter: (imposterId: string) => Effect.Effect<void>;
17
+ }
18
+ declare const RequestLogger_base: Context.TagClass<RequestLogger, "RequestLogger", RequestLoggerShape>;
19
+ export declare class RequestLogger extends RequestLogger_base {
20
+ }
21
+ export declare const RequestLoggerLive: Layer.Layer<RequestLogger, never, never>;
22
+ export {};
23
+ //# sourceMappingURL=RequestLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestLogger.d.ts","sourceRoot":"","sources":["../../../src/services/RequestLogger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAW,KAAK,EAAe,MAAM,QAAQ,CAAA;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAIlE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7D,QAAQ,CAAC,UAAU,EAAE,CACnB,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KACvE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAChE,QAAQ,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACrF,QAAQ,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,CAAA;IACrG,QAAQ,CAAC,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACrE;;AAED,qBAAa,aAAc,SAAQ,kBAAiE;CAAG;AAEvG,eAAO,MAAM,iBAAiB,0CAiE7B,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { Context, type Effect } from "effect";
2
+ declare const Uuid_base: Context.TagClass<Uuid, "UuidService", {
3
+ readonly generate: Effect.Effect<string>;
4
+ readonly generateShort: Effect.Effect<string>;
5
+ }>;
6
+ export declare class Uuid extends Uuid_base {
7
+ }
8
+ export {};
9
+ //# sourceMappingURL=Uuid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Uuid.d.ts","sourceRoot":"","sources":["../../../src/services/Uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;;uBAKtB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;4BAChB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;;AAJjD,qBAAa,IAAK,SAAQ,SAMvB;CAAG"}
@@ -0,0 +1,4 @@
1
+ import * as Layer from "effect/Layer";
2
+ import { Uuid } from "./Uuid";
3
+ export declare const UuidLive: Layer.Layer<Uuid, never, never>;
4
+ //# sourceMappingURL=UuidLive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UuidLive.d.ts","sourceRoot":"","sources":["../../../src/services/UuidLive.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,eAAO,MAAM,QAAQ,iCAGnB,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { Effect, Ref } from "effect";
2
+ import type { ImposterConfig } from "../domain/imposter";
3
+ import type { ImposterRepositoryShape } from "../repositories/ImposterRepository";
4
+ import type { Stub } from "../schemas/StubSchema";
5
+ import type { RequestLoggerShape } from "../services/RequestLogger";
6
+ export interface UiDeps {
7
+ readonly id: string;
8
+ readonly config: ImposterConfig;
9
+ readonly stubsRef: Ref.Ref<ReadonlyArray<Stub>>;
10
+ readonly repo: ImposterRepositoryShape;
11
+ readonly requestLogger: RequestLoggerShape;
12
+ readonly runPromise: <A>(effect: Effect.Effect<A>) => Promise<A>;
13
+ }
14
+ export declare const makeUiRouter: (deps: UiDeps) => (request: Request) => Promise<Response | null>;
15
+ //# sourceMappingURL=UiRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UiRouter.d.ts","sourceRoot":"","sources":["../../../src/ui/UiRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAA;AAEjF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAOnE,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/C,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAA;IACtC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAA;IAC1C,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;CACjE;AAaD,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,MAAY,SAAS,OAAO,KAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAqP9F,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { SafeHtml } from "../html";
2
+ export interface AdminLayoutOpts {
3
+ readonly title: string;
4
+ readonly activeTab?: "dashboard";
5
+ }
6
+ export declare const adminLayout: (opts: AdminLayoutOpts, content: SafeHtml) => SafeHtml;
7
+ //# sourceMappingURL=AdminLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminLayout.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/AdminLayout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAA;CACjC;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,eAAe,EAAE,SAAS,QAAQ,KAAG,QA2B/D,CAAA"}
@@ -0,0 +1,6 @@
1
+ export interface AdminUiDeps {
2
+ readonly apiHandler: (request: Request) => Promise<Response>;
3
+ readonly adminPort: number;
4
+ }
5
+ export declare const makeAdminUiRouter: (deps: AdminUiDeps) => (request: Request) => Promise<Response | null>;
6
+ //# sourceMappingURL=AdminUiRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminUiRouter.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/AdminUiRouter.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC5D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAmCD,eAAO,MAAM,iBAAiB,GAAI,MAAM,WAAW,MAAY,SAAS,OAAO,KAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CA+HxG,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { SafeHtml } from "../../html";
2
+ import type { AdminImposterData } from "../partials";
3
+ export interface AdminDashboardData {
4
+ readonly imposters: ReadonlyArray<AdminImposterData>;
5
+ }
6
+ export declare const adminDashboardPage: (data: AdminDashboardData) => SafeHtml;
7
+ //# sourceMappingURL=AdminDashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminDashboard.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/AdminDashboard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGpD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAA;CACrD;AAsBD,eAAO,MAAM,kBAAkB,GAAI,MAAM,kBAAkB,KAAG,QAuB7D,CAAA"}
@@ -0,0 +1,14 @@
1
+ import type { SafeHtml } from "../html";
2
+ export interface AdminImposterData {
3
+ readonly id: string;
4
+ readonly name: string;
5
+ readonly port: number;
6
+ readonly status: string;
7
+ readonly protocol: string;
8
+ readonly stubCount: number;
9
+ }
10
+ export declare const imposterRowPartial: (imp: AdminImposterData) => SafeHtml;
11
+ export declare const imposterListPartial: (imposters: ReadonlyArray<AdminImposterData>) => SafeHtml;
12
+ export declare const createFormPartial: (error?: string) => SafeHtml;
13
+ export declare const adminErrorPartial: (message: string) => SafeHtml;
14
+ //# sourceMappingURL=partials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partials.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/partials.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAYD,eAAO,MAAM,kBAAkB,GAAI,KAAK,iBAAiB,KAAG,QA0B3D,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,WAAW,aAAa,CAAC,iBAAiB,CAAC,KAAG,QAQjF,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,QAmB1C,CAAA;AAET,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,KAAG,QAC+C,CAAA"}
@@ -0,0 +1,12 @@
1
+ /** Escapes &, <, >, ", ' → HTML entities */
2
+ export declare const escapeHtml: (s: string) => string;
3
+ /** Marker class for pre-escaped HTML */
4
+ export declare class SafeHtml {
5
+ readonly value: string;
6
+ constructor(value: string);
7
+ }
8
+ /** Wrap a raw HTML string to skip auto-escaping */
9
+ export declare const raw: (s: string) => SafeHtml;
10
+ /** Tagged template: auto-escapes interpolations, passes SafeHtml through */
11
+ export declare const html: (strings: TemplateStringsArray, ...values: Array<unknown>) => SafeHtml;
12
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../src/ui/html.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,KAAG,MAMV,CAAA;AAE7B,wCAAwC;AACxC,qBAAa,QAAQ;IACP,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;CACnC;AAED,mDAAmD;AACnD,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,KAAG,QAA2B,CAAA;AAE3D,4EAA4E;AAC5E,eAAO,MAAM,IAAI,GAAI,SAAS,oBAAoB,EAAE,GAAG,QAAQ,KAAK,CAAC,OAAO,CAAC,KAAG,QAkB/E,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { type SafeHtml } from "./html";
2
+ export interface LayoutOpts {
3
+ readonly title: string;
4
+ readonly imposterName: string;
5
+ readonly port: number;
6
+ readonly activeTab: "dashboard" | "stubs" | "requests";
7
+ }
8
+ export declare const layout: (opts: LayoutOpts, content: SafeHtml) => SafeHtml;
9
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/ui/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,GAAG,UAAU,CAAA;CACvD;AAOD,eAAO,MAAM,MAAM,GAAI,MAAM,UAAU,EAAE,SAAS,QAAQ,KAAG,QA6BrD,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { ImposterConfig } from "../../domain/imposter";
2
+ import type { RequestLogEntry } from "../../schemas/RequestLogSchema";
3
+ export interface DashboardData {
4
+ readonly config: ImposterConfig;
5
+ readonly stubCount: number;
6
+ readonly requestCount: number;
7
+ readonly recentRequests: ReadonlyArray<RequestLogEntry>;
8
+ }
9
+ export declare const dashboardPage: (data: DashboardData) => import("../html").SafeHtml;
10
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../../src/ui/pages/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAKrE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,eAAe,CAAC,CAAA;CACxD;AAQD,eAAO,MAAM,aAAa,GAAI,MAAM,aAAa,+BA4ChD,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { ImposterConfig } from "../../domain/imposter";
2
+ import type { RequestLogEntry } from "../../schemas/RequestLogSchema";
3
+ import type { Stub } from "../../schemas/StubSchema";
4
+ import type { SafeHtml } from "../html";
5
+ export interface RequestDetailData {
6
+ readonly config: ImposterConfig;
7
+ readonly entry: RequestLogEntry;
8
+ readonly matchedStub: Stub | null;
9
+ }
10
+ export declare const requestDetailPage: (data: RequestDetailData) => SafeHtml;
11
+ //# sourceMappingURL=request-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-detail.d.ts","sourceRoot":"","sources":["../../../../src/ui/pages/request-detail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,CAAA;CAClC;AA2CD,eAAO,MAAM,iBAAiB,GAAI,MAAM,iBAAiB,KAAG,QAsF3D,CAAA"}
@@ -0,0 +1,15 @@
1
+ import type { ImposterConfig } from "../../domain/imposter";
2
+ import type { RequestLogEntry } from "../../schemas/RequestLogSchema";
3
+ import type { SafeHtml } from "../html";
4
+ export interface RequestsPageData {
5
+ readonly config: ImposterConfig;
6
+ readonly entries: ReadonlyArray<RequestLogEntry>;
7
+ }
8
+ export declare const requestsPage: (data: RequestsPageData) => SafeHtml;
9
+ export declare const testResultPartial: (result: {
10
+ status: number;
11
+ headers: Record<string, string>;
12
+ body: string;
13
+ duration: number;
14
+ }) => SafeHtml;
15
+ //# sourceMappingURL=requests.d.ts.map