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 @@
1
+ {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../../../src/ui/pages/requests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAA;CACjD;AAyED,eAAO,MAAM,YAAY,GAAI,MAAM,gBAAgB,KAAG,QAgCrD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,QAAQ;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,KAC1F,QAqBF,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { ImposterConfig } from "../../domain/imposter";
2
+ import type { Stub } from "../../schemas/StubSchema";
3
+ export interface StubsPageData {
4
+ readonly config: ImposterConfig;
5
+ readonly stubs: ReadonlyArray<Stub>;
6
+ }
7
+ export declare const stubsPage: (data: StubsPageData) => import("../html").SafeHtml;
8
+ //# sourceMappingURL=stubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../../../../src/ui/pages/stubs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAKpD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CACpC;AA0BD,eAAO,MAAM,SAAS,GAAI,MAAM,aAAa,+BAgB5C,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { RequestLogEntry } from "../schemas/RequestLogSchema";
2
+ import type { Stub } from "../schemas/StubSchema";
3
+ import type { SafeHtml } from "./html";
4
+ export declare const stubCardPartial: (stub: Stub) => SafeHtml;
5
+ export declare const stubListPartial: (stubs: ReadonlyArray<Stub>) => SafeHtml;
6
+ export declare const emptyStubMessage: () => SafeHtml;
7
+ export declare const errorPartial: (message: string) => SafeHtml;
8
+ export declare const methodBadge: (method: string) => SafeHtml;
9
+ export declare const statusBadge: (status: number) => SafeHtml;
10
+ export declare const requestTablePartial: (entries: ReadonlyArray<RequestLogEntry>, opts?: {
11
+ linkToDetail?: boolean;
12
+ }) => SafeHtml;
13
+ //# sourceMappingURL=partials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partials.d.ts","sourceRoot":"","sources":["../../../src/ui/partials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAkB,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAiCtC,eAAO,MAAM,eAAe,GAAI,MAAM,IAAI,KAAG,QA2B5C,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,aAAa,CAAC,IAAI,CAAC,KAAG,QAQ5D,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,QACqD,CAAA;AAEzF,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,QACoD,CAAA;AAEnG,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG,QAY5C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG,QAO5C,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,SAAS,aAAa,CAAC,eAAe,CAAC,EACvC,OAAO;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,QAyBF,CAAA"}
@@ -0,0 +1,2 @@
1
+ import "./cli/Commands.js";
2
+ //# sourceMappingURL=Program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Program.js","names":[],"sources":["../../src/Program.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,mBAAmB","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { HttpApi } from "@effect/platform";
2
+ import { ImpostersGroup } from "./ImpostersGroup";
3
+ import { SystemGroup } from "./SystemGroup";
4
+ export const AdminApi = /*#__PURE__*/HttpApi.make("admin").add(ImpostersGroup).add(SystemGroup);
5
+ //# sourceMappingURL=AdminApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminApi.js","names":["HttpApi","ImpostersGroup","SystemGroup","AdminApi","make","add"],"sources":["../../../src/api/AdminApi.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAO,QAAQ,kBAAkB;AAC1C,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,WAAW,QAAQ,eAAe;AAE3C,OAAO,MAAMC,QAAQ,gBAAGH,OAAO,CAACI,IAAI,CAAC,OAAO,CAAC,CAC1CC,GAAG,CAACJ,cAAc,CAAC,CACnBI,GAAG,CAACH,WAAW,CAAC","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ import { HttpApiSchema } from "@effect/platform";
2
+ import * as Schema from "effect/Schema";
3
+ export class ApiNotFoundError extends Schema.TaggedError()("ApiNotFoundError", {
4
+ message: Schema.String,
5
+ resourceType: Schema.String,
6
+ resourceId: Schema.String
7
+ }, HttpApiSchema.annotations({
8
+ status: 404
9
+ })) {}
10
+ export class ApiConflictError extends Schema.TaggedError()("ApiConflictError", {
11
+ message: Schema.String
12
+ }, HttpApiSchema.annotations({
13
+ status: 409
14
+ })) {}
15
+ export class ApiServiceError extends Schema.TaggedError()("ApiServiceError", {
16
+ message: Schema.String
17
+ }, HttpApiSchema.annotations({
18
+ status: 503
19
+ })) {}
20
+ //# sourceMappingURL=ApiErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiErrors.js","names":["HttpApiSchema","Schema","ApiNotFoundError","TaggedError","message","String","resourceType","resourceId","annotations","status","ApiConflictError","ApiServiceError"],"sources":["../../../src/api/ApiErrors.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,aAAa,QAAQ,kBAAkB;AAChD,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,OAAM,MAAOC,gBAAiB,SAAQD,MAAM,CAACE,WAAW,EAAoB,CAC1E,kBAAkB,EAClB;EAAEC,OAAO,EAAEH,MAAM,CAACI,MAAM;EAAEC,YAAY,EAAEL,MAAM,CAACI,MAAM;EAAEE,UAAU,EAAEN,MAAM,CAACI;AAAM,CAAE,EAClFL,aAAa,CAACQ,WAAW,CAAC;EAAEC,MAAM,EAAE;AAAG,CAAE,CAAC,CAC3C;AAED,OAAM,MAAOC,gBAAiB,SAAQT,MAAM,CAACE,WAAW,EAAoB,CAC1E,kBAAkB,EAClB;EAAEC,OAAO,EAAEH,MAAM,CAACI;AAAM,CAAE,EAC1BL,aAAa,CAACQ,WAAW,CAAC;EAAEC,MAAM,EAAE;AAAG,CAAE,CAAC,CAC3C;AAED,OAAM,MAAOE,eAAgB,SAAQV,MAAM,CAACE,WAAW,EAAmB,CACxE,iBAAiB,EACjB;EAAEC,OAAO,EAAEH,MAAM,CAACI;AAAM,CAAE,EAC1BL,aAAa,CAACQ,WAAW,CAAC;EAAEC,MAAM,EAAE;AAAG,CAAE,CAAC,CAC3C","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ import * as Schema from "effect/Schema";
2
+ import { ImposterStatus, Protocol } from "../schemas/common";
3
+ export const PaginationUrlParams = /*#__PURE__*/Schema.Struct({
4
+ limit: /*#__PURE__*/Schema.optionalWith(/*#__PURE__*/Schema.NumberFromString.pipe(/*#__PURE__*/Schema.int(), /*#__PURE__*/Schema.positive()), {
5
+ default: () => 50
6
+ }),
7
+ offset: /*#__PURE__*/Schema.optionalWith(/*#__PURE__*/Schema.NumberFromString.pipe(/*#__PURE__*/Schema.int(), /*#__PURE__*/Schema.nonNegative()), {
8
+ default: () => 0
9
+ })
10
+ });
11
+ export const ListImpostersUrlParams = /*#__PURE__*/Schema.Struct({
12
+ ...PaginationUrlParams.fields,
13
+ status: /*#__PURE__*/Schema.optional(ImposterStatus),
14
+ protocol: /*#__PURE__*/Schema.optional(Protocol)
15
+ });
16
+ export const DeleteImposterUrlParams = /*#__PURE__*/Schema.Struct({
17
+ force: /*#__PURE__*/Schema.optionalWith(Schema.BooleanFromString, {
18
+ default: () => false
19
+ })
20
+ });
21
+ export const ListRequestsUrlParams = /*#__PURE__*/Schema.Struct({
22
+ limit: /*#__PURE__*/Schema.optionalWith(/*#__PURE__*/Schema.NumberFromString.pipe(/*#__PURE__*/Schema.int(), /*#__PURE__*/Schema.positive()), {
23
+ default: () => 50
24
+ }),
25
+ method: /*#__PURE__*/Schema.optional(Schema.String),
26
+ path: /*#__PURE__*/Schema.optional(Schema.String),
27
+ status: /*#__PURE__*/Schema.optional(Schema.NumberFromString)
28
+ });
29
+ //# sourceMappingURL=ApiSchemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiSchemas.js","names":["Schema","ImposterStatus","Protocol","PaginationUrlParams","Struct","limit","optionalWith","NumberFromString","pipe","int","positive","default","offset","nonNegative","ListImpostersUrlParams","fields","status","optional","protocol","DeleteImposterUrlParams","force","BooleanFromString","ListRequestsUrlParams","method","String","path"],"sources":["../../../src/api/ApiSchemas.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,SAASC,cAAc,EAAEC,QAAQ,QAAQ,mBAAmB;AAE5D,OAAO,MAAMC,mBAAmB,gBAAGH,MAAM,CAACI,MAAM,CAAC;EAC/CC,KAAK,eAAEL,MAAM,CAACM,YAAY,cACxBN,MAAM,CAACO,gBAAgB,CAACC,IAAI,cAACR,MAAM,CAACS,GAAG,EAAE,eAAET,MAAM,CAACU,QAAQ,EAAE,CAAC,EAC7D;IAAEC,OAAO,EAAEA,CAAA,KAAM;EAAE,CAAE,CACtB;EACDC,MAAM,eAAEZ,MAAM,CAACM,YAAY,cACzBN,MAAM,CAACO,gBAAgB,CAACC,IAAI,cAACR,MAAM,CAACS,GAAG,EAAE,eAAET,MAAM,CAACa,WAAW,EAAE,CAAC,EAChE;IAAEF,OAAO,EAAEA,CAAA,KAAM;EAAC,CAAE;CAEvB,CAAC;AAEF,OAAO,MAAMG,sBAAsB,gBAAGd,MAAM,CAACI,MAAM,CAAC;EAClD,GAAGD,mBAAmB,CAACY,MAAM;EAC7BC,MAAM,eAAEhB,MAAM,CAACiB,QAAQ,CAAChB,cAAc,CAAC;EACvCiB,QAAQ,eAAElB,MAAM,CAACiB,QAAQ,CAACf,QAAQ;CACnC,CAAC;AAGF,OAAO,MAAMiB,uBAAuB,gBAAGnB,MAAM,CAACI,MAAM,CAAC;EACnDgB,KAAK,eAAEpB,MAAM,CAACM,YAAY,CAACN,MAAM,CAACqB,iBAAiB,EAAE;IAAEV,OAAO,EAAEA,CAAA,KAAM;EAAK,CAAE;CAC9E,CAAC;AAGF,OAAO,MAAMW,qBAAqB,gBAAGtB,MAAM,CAACI,MAAM,CAAC;EACjDC,KAAK,eAAEL,MAAM,CAACM,YAAY,cACxBN,MAAM,CAACO,gBAAgB,CAACC,IAAI,cAACR,MAAM,CAACS,GAAG,EAAE,eAAET,MAAM,CAACU,QAAQ,EAAE,CAAC,EAC7D;IAAEC,OAAO,EAAEA,CAAA,KAAM;EAAE,CAAE,CACtB;EACDY,MAAM,eAAEvB,MAAM,CAACiB,QAAQ,CAACjB,MAAM,CAACwB,MAAM,CAAC;EACtCC,IAAI,eAAEzB,MAAM,CAACiB,QAAQ,CAACjB,MAAM,CAACwB,MAAM,CAAC;EACpCR,MAAM,eAAEhB,MAAM,CAACiB,QAAQ,CAACjB,MAAM,CAACO,gBAAgB;CAChD,CAAC","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ import * as Clock from "effect/Clock";
2
+ import * as DateTime from "effect/DateTime";
3
+ import * as Duration from "effect/Duration";
4
+ import * as Effect from "effect/Effect";
5
+ import { NonEmptyString, PortNumber, PositiveInteger } from "../schemas/common";
6
+ export const toImposterResponse = record => Effect.gen(function* () {
7
+ const config = record.config;
8
+ const now = yield* Clock.currentTimeMillis;
9
+ const uptime = Duration.millis(now - DateTime.toEpochMillis(config.createdAt));
10
+ return {
11
+ id: NonEmptyString.make(config.id),
12
+ name: NonEmptyString.make(config.name),
13
+ port: PortNumber.make(config.port),
14
+ protocol: "HTTP",
15
+ status: config.status,
16
+ endpointCount: record.stubs.length,
17
+ createdAt: config.createdAt,
18
+ adminUrl: NonEmptyString.make(`http://localhost:${config.port}`),
19
+ adminPath: NonEmptyString.make("/_admin"),
20
+ uptime: Duration.format(uptime),
21
+ ...(config.proxy !== undefined ? {
22
+ proxy: config.proxy
23
+ } : {})
24
+ };
25
+ });
26
+ export const buildPaginationMeta = (total, limit, offset) => ({
27
+ total,
28
+ limit: PositiveInteger.make(limit),
29
+ offset,
30
+ hasMore: offset + limit < total
31
+ });
32
+ //# sourceMappingURL=Conversions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Conversions.js","names":["Clock","DateTime","Duration","Effect","NonEmptyString","PortNumber","PositiveInteger","toImposterResponse","record","gen","config","now","currentTimeMillis","uptime","millis","toEpochMillis","createdAt","id","make","name","port","protocol","status","endpointCount","stubs","length","adminUrl","adminPath","format","proxy","undefined","buildPaginationMeta","total","limit","offset","hasMore"],"sources":["../../../src/api/Conversions.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,SAASC,cAAc,EAAuBC,UAAU,EAAEC,eAAe,QAAQ,mBAAmB;AAGpG,OAAO,MAAMC,kBAAkB,GAAIC,MAAsB,IACvDL,MAAM,CAACM,GAAG,CAAC,aAAS;EAClB,MAAMC,MAAM,GAAGF,MAAM,CAACE,MAAM;EAC5B,MAAMC,GAAG,GAAG,OAAOX,KAAK,CAACY,iBAAiB;EAC1C,MAAMC,MAAM,GAAGX,QAAQ,CAACY,MAAM,CAACH,GAAG,GAAGV,QAAQ,CAACc,aAAa,CAACL,MAAM,CAACM,SAAS,CAAC,CAAC;EAC9E,OAAO;IACLC,EAAE,EAAEb,cAAc,CAACc,IAAI,CAACR,MAAM,CAACO,EAAE,CAAC;IAClCE,IAAI,EAAEf,cAAc,CAACc,IAAI,CAACR,MAAM,CAACS,IAAI,CAAC;IACtCC,IAAI,EAAEf,UAAU,CAACa,IAAI,CAACR,MAAM,CAACU,IAAI,CAAC;IAClCC,QAAQ,EAAE,MAAe;IACzBC,MAAM,EAAEZ,MAAM,CAACY,MAAM;IACrBC,aAAa,EAAEf,MAAM,CAACgB,KAAK,CAACC,MAAM;IAClCT,SAAS,EAAEN,MAAM,CAACM,SAAS;IAC3BU,QAAQ,EAAEtB,cAAc,CAACc,IAAI,CAAC,oBAAoBR,MAAM,CAACU,IAAI,EAAE,CAAC;IAChEO,SAAS,EAAEvB,cAAc,CAACc,IAAI,CAAC,SAAS,CAAC;IACzCL,MAAM,EAAEX,QAAQ,CAAC0B,MAAM,CAACf,MAAM,CAAC;IAC/B,IAAIH,MAAM,CAACmB,KAAK,KAAKC,SAAS,GAAG;MAAED,KAAK,EAAEnB,MAAM,CAACmB;IAAK,CAAE,GAAG,EAAE;GAC9D;AACH,CAAC,CAAC;AAEJ,OAAO,MAAME,mBAAmB,GAAGA,CAACC,KAAa,EAAEC,KAAa,EAAEC,MAAc,MAAsB;EACpGF,KAAK;EACLC,KAAK,EAAE3B,eAAe,CAACY,IAAI,CAACe,KAAK,CAAC;EAClCC,MAAM;EACNC,OAAO,EAAED,MAAM,GAAGD,KAAK,GAAGD;CAC3B,CAAC","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from "@effect/platform";
2
+ import * as Schema from "effect/Schema";
3
+ import { CreateImposterRequest, DeleteImposterResponse, ImposterResponse, ListImpostersResponse, Statistics, UpdateImposterRequest } from "../schemas/ImposterSchema";
4
+ import { RequestLogEntry } from "../schemas/RequestLogSchema";
5
+ import { CreateStubRequest, Stub, UpdateStubRequest } from "../schemas/StubSchema";
6
+ import { ApiConflictError, ApiNotFoundError, ApiServiceError } from "./ApiErrors";
7
+ import { DeleteImposterUrlParams, ListImpostersUrlParams, ListRequestsUrlParams } from "./ApiSchemas";
8
+ const createImposter = /*#__PURE__*/HttpApiEndpoint.post("createImposter", "/imposters").setPayload(CreateImposterRequest).addSuccess(ImposterResponse, {
9
+ status: 201
10
+ }).addError(ApiConflictError).addError(ApiServiceError);
11
+ const listImposters = /*#__PURE__*/HttpApiEndpoint.get("listImposters", "/imposters").setUrlParams(ListImpostersUrlParams).addSuccess(ListImpostersResponse);
12
+ const getImposter = /*#__PURE__*/HttpApiEndpoint.get("getImposter")`/imposters/${HttpApiSchema.param("id", Schema.String)}`.addSuccess(ImposterResponse).addError(ApiNotFoundError);
13
+ const updateImposter = /*#__PURE__*/HttpApiEndpoint.patch("updateImposter")`/imposters/${HttpApiSchema.param("id", Schema.String)}`.setPayload(UpdateImposterRequest).addSuccess(ImposterResponse).addError(ApiNotFoundError).addError(ApiConflictError).addError(ApiServiceError);
14
+ const deleteImposter = /*#__PURE__*/HttpApiEndpoint.del("deleteImposter")`/imposters/${HttpApiSchema.param("id", Schema.String)}`.setUrlParams(DeleteImposterUrlParams).addSuccess(DeleteImposterResponse).addError(ApiNotFoundError).addError(ApiConflictError);
15
+ const addStub = /*#__PURE__*/HttpApiEndpoint.post("addStub")`/imposters/${HttpApiSchema.param("imposterId", Schema.String)}/stubs`.setPayload(CreateStubRequest).addSuccess(Stub, {
16
+ status: 201
17
+ }).addError(ApiNotFoundError);
18
+ const listStubs = /*#__PURE__*/HttpApiEndpoint.get("listStubs")`/imposters/${HttpApiSchema.param("imposterId", Schema.String)}/stubs`.addSuccess(Schema.Array(Stub)).addError(ApiNotFoundError);
19
+ const updateStub = /*#__PURE__*/HttpApiEndpoint.put("updateStub")`/imposters/${HttpApiSchema.param("imposterId", Schema.String)}/stubs/${HttpApiSchema.param("stubId", Schema.String)}`.setPayload(UpdateStubRequest).addSuccess(Stub).addError(ApiNotFoundError);
20
+ const deleteStub = /*#__PURE__*/HttpApiEndpoint.del("deleteStub")`/imposters/${HttpApiSchema.param("imposterId", Schema.String)}/stubs/${HttpApiSchema.param("stubId", Schema.String)}`.addSuccess(Stub).addError(ApiNotFoundError);
21
+ const listRequests = /*#__PURE__*/HttpApiEndpoint.get("listRequests")`/imposters/${HttpApiSchema.param("id", Schema.String)}/requests`.setUrlParams(ListRequestsUrlParams).addSuccess(Schema.Array(RequestLogEntry)).addError(ApiNotFoundError);
22
+ const clearRequests = /*#__PURE__*/HttpApiEndpoint.del("clearRequests")`/imposters/${HttpApiSchema.param("id", Schema.String)}/requests`.addSuccess(Schema.Struct({
23
+ message: Schema.String
24
+ })).addError(ApiNotFoundError);
25
+ const getImposterStats = /*#__PURE__*/HttpApiEndpoint.get("getImposterStats")`/imposters/${HttpApiSchema.param("id", Schema.String)}/stats`.addSuccess(Statistics).addError(ApiNotFoundError);
26
+ const resetImposterStats = /*#__PURE__*/HttpApiEndpoint.del("resetImposterStats")`/imposters/${HttpApiSchema.param("id", Schema.String)}/stats`.addSuccess(Schema.Struct({
27
+ message: Schema.String
28
+ })).addError(ApiNotFoundError);
29
+ export const ImpostersGroup = /*#__PURE__*/HttpApiGroup.make("imposters").add(createImposter).add(listImposters).add(getImposter).add(updateImposter).add(deleteImposter).add(addStub).add(listStubs).add(updateStub).add(deleteStub).add(listRequests).add(clearRequests).add(getImposterStats).add(resetImposterStats);
30
+ //# sourceMappingURL=ImpostersGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImpostersGroup.js","names":["HttpApiEndpoint","HttpApiGroup","HttpApiSchema","Schema","CreateImposterRequest","DeleteImposterResponse","ImposterResponse","ListImpostersResponse","Statistics","UpdateImposterRequest","RequestLogEntry","CreateStubRequest","Stub","UpdateStubRequest","ApiConflictError","ApiNotFoundError","ApiServiceError","DeleteImposterUrlParams","ListImpostersUrlParams","ListRequestsUrlParams","createImposter","post","setPayload","addSuccess","status","addError","listImposters","get","setUrlParams","getImposter","param","String","updateImposter","patch","deleteImposter","del","addStub","listStubs","Array","updateStub","put","deleteStub","listRequests","clearRequests","Struct","message","getImposterStats","resetImposterStats","ImpostersGroup","make","add"],"sources":["../../../src/api/ImpostersGroup.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,eAAe,EAAEC,YAAY,EAAEC,aAAa,QAAQ,kBAAkB;AAC/E,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SACEC,qBAAqB,EACrBC,sBAAsB,EACtBC,gBAAgB,EAChBC,qBAAqB,EACrBC,UAAU,EACVC,qBAAqB,QAChB,2BAA2B;AAClC,SAASC,eAAe,QAAQ,6BAA6B;AAC7D,SAASC,iBAAiB,EAAEC,IAAI,EAAEC,iBAAiB,QAAQ,uBAAuB;AAClF,SAASC,gBAAgB,EAAEC,gBAAgB,EAAEC,eAAe,QAAQ,aAAa;AACjF,SAASC,uBAAuB,EAAEC,sBAAsB,EAAEC,qBAAqB,QAAQ,cAAc;AAErG,MAAMC,cAAc,gBAAGpB,eAAe,CAACqB,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CACxEC,UAAU,CAAClB,qBAAqB,CAAC,CACjCmB,UAAU,CAACjB,gBAAgB,EAAE;EAAEkB,MAAM,EAAE;AAAG,CAAE,CAAC,CAC7CC,QAAQ,CAACX,gBAAgB,CAAC,CAC1BW,QAAQ,CAACT,eAAe,CAAC;AAE5B,MAAMU,aAAa,gBAAG1B,eAAe,CAAC2B,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CACrEC,YAAY,CAACV,sBAAsB,CAAC,CACpCK,UAAU,CAAChB,qBAAqB,CAAC;AAEpC,MAAMsB,WAAW,gBAAG7B,eAAe,CAAC2B,GAAG,CAAC,aAAa,CAAC,cAAczB,aAAa,CAAC4B,KAAK,CAAC,IAAI,EAAE3B,MAAM,CAAC4B,MAAM,CAAC,EAAE,CAC3GR,UAAU,CAACjB,gBAAgB,CAAC,CAC5BmB,QAAQ,CAACV,gBAAgB,CAAC;AAE7B,MAAMiB,cAAc,gBAAGhC,eAAe,CAACiC,KAAK,CAAC,gBAAgB,CAAC,cAAc/B,aAAa,CAAC4B,KAAK,CAAC,IAAI,EAAE3B,MAAM,CAAC4B,MAAM,CAAC,EAAE,CACnHT,UAAU,CAACb,qBAAqB,CAAC,CACjCc,UAAU,CAACjB,gBAAgB,CAAC,CAC5BmB,QAAQ,CAACV,gBAAgB,CAAC,CAC1BU,QAAQ,CAACX,gBAAgB,CAAC,CAC1BW,QAAQ,CAACT,eAAe,CAAC;AAE5B,MAAMkB,cAAc,gBAAGlC,eAAe,CAACmC,GAAG,CAAC,gBAAgB,CAAC,cAAcjC,aAAa,CAAC4B,KAAK,CAAC,IAAI,EAAE3B,MAAM,CAAC4B,MAAM,CAAC,EAAE,CACjHH,YAAY,CAACX,uBAAuB,CAAC,CACrCM,UAAU,CAAClB,sBAAsB,CAAC,CAClCoB,QAAQ,CAACV,gBAAgB,CAAC,CAC1BU,QAAQ,CAACX,gBAAgB,CAAC;AAE7B,MAAMsB,OAAO,gBAAGpC,eAAe,CAACqB,IAAI,CAAC,SAAS,CAAC,cAAcnB,aAAa,CAAC4B,KAAK,CAAC,YAAY,EAAE3B,MAAM,CAAC4B,MAAM,CAAC,QAAQ,CAClHT,UAAU,CAACX,iBAAiB,CAAC,CAC7BY,UAAU,CAACX,IAAI,EAAE;EAAEY,MAAM,EAAE;AAAG,CAAE,CAAC,CACjCC,QAAQ,CAACV,gBAAgB,CAAC;AAE7B,MAAMsB,SAAS,gBAAGrC,eAAe,CAAC2B,GAAG,CAAC,WAAW,CAAC,cAAczB,aAAa,CAAC4B,KAAK,CAAC,YAAY,EAAE3B,MAAM,CAAC4B,MAAM,CAAC,QAAQ,CACrHR,UAAU,CAACpB,MAAM,CAACmC,KAAK,CAAC1B,IAAI,CAAC,CAAC,CAC9Ba,QAAQ,CAACV,gBAAgB,CAAC;AAE7B,MAAMwB,UAAU,gBAAGvC,eAAe,CAACwC,GAAG,CAAC,YAAY,CAAC,cAClDtC,aAAa,CAAC4B,KAAK,CAAC,YAAY,EAAE3B,MAAM,CAAC4B,MAAM,CACjD,UAAU7B,aAAa,CAAC4B,KAAK,CAAC,QAAQ,EAAE3B,MAAM,CAAC4B,MAAM,CAAC,EAAE,CACrDT,UAAU,CAACT,iBAAiB,CAAC,CAC7BU,UAAU,CAACX,IAAI,CAAC,CAChBa,QAAQ,CAACV,gBAAgB,CAAC;AAE7B,MAAM0B,UAAU,gBAAGzC,eAAe,CAACmC,GAAG,CAAC,YAAY,CAAC,cAClDjC,aAAa,CAAC4B,KAAK,CAAC,YAAY,EAAE3B,MAAM,CAAC4B,MAAM,CACjD,UAAU7B,aAAa,CAAC4B,KAAK,CAAC,QAAQ,EAAE3B,MAAM,CAAC4B,MAAM,CAAC,EAAE,CACrDR,UAAU,CAACX,IAAI,CAAC,CAChBa,QAAQ,CAACV,gBAAgB,CAAC;AAE7B,MAAM2B,YAAY,gBAAG1C,eAAe,CAAC2B,GAAG,CAAC,cAAc,CAAC,cACtDzB,aAAa,CAAC4B,KAAK,CAAC,IAAI,EAAE3B,MAAM,CAAC4B,MAAM,CACzC,WAAW,CACRH,YAAY,CAACT,qBAAqB,CAAC,CACnCI,UAAU,CAACpB,MAAM,CAACmC,KAAK,CAAC5B,eAAe,CAAC,CAAC,CACzCe,QAAQ,CAACV,gBAAgB,CAAC;AAE7B,MAAM4B,aAAa,gBAAG3C,eAAe,CAACmC,GAAG,CAAC,eAAe,CAAC,cACxDjC,aAAa,CAAC4B,KAAK,CAAC,IAAI,EAAE3B,MAAM,CAAC4B,MAAM,CACzC,WAAW,CACRR,UAAU,CAACpB,MAAM,CAACyC,MAAM,CAAC;EAAEC,OAAO,EAAE1C,MAAM,CAAC4B;AAAM,CAAE,CAAC,CAAC,CACrDN,QAAQ,CAACV,gBAAgB,CAAC;AAE7B,MAAM+B,gBAAgB,gBAAG9C,eAAe,CAAC2B,GAAG,CAAC,kBAAkB,CAAC,cAC9DzB,aAAa,CAAC4B,KAAK,CAAC,IAAI,EAAE3B,MAAM,CAAC4B,MAAM,CACzC,QAAQ,CACLR,UAAU,CAACf,UAAU,CAAC,CACtBiB,QAAQ,CAACV,gBAAgB,CAAC;AAE7B,MAAMgC,kBAAkB,gBAAG/C,eAAe,CAACmC,GAAG,CAAC,oBAAoB,CAAC,cAClEjC,aAAa,CAAC4B,KAAK,CAAC,IAAI,EAAE3B,MAAM,CAAC4B,MAAM,CACzC,QAAQ,CACLR,UAAU,CAACpB,MAAM,CAACyC,MAAM,CAAC;EAAEC,OAAO,EAAE1C,MAAM,CAAC4B;AAAM,CAAE,CAAC,CAAC,CACrDN,QAAQ,CAACV,gBAAgB,CAAC;AAE7B,OAAO,MAAMiC,cAAc,gBAAG/C,YAAY,CAACgD,IAAI,CAAC,WAAW,CAAC,CACzDC,GAAG,CAAC9B,cAAc,CAAC,CACnB8B,GAAG,CAACxB,aAAa,CAAC,CAClBwB,GAAG,CAACrB,WAAW,CAAC,CAChBqB,GAAG,CAAClB,cAAc,CAAC,CACnBkB,GAAG,CAAChB,cAAc,CAAC,CACnBgB,GAAG,CAACd,OAAO,CAAC,CACZc,GAAG,CAACb,SAAS,CAAC,CACda,GAAG,CAACX,UAAU,CAAC,CACfW,GAAG,CAACT,UAAU,CAAC,CACfS,GAAG,CAACR,YAAY,CAAC,CACjBQ,GAAG,CAACP,aAAa,CAAC,CAClBO,GAAG,CAACJ,gBAAgB,CAAC,CACrBI,GAAG,CAACH,kBAAkB,CAAC","ignoreList":[]}
@@ -0,0 +1,354 @@
1
+ import { HttpApiBuilder } from "@effect/platform";
2
+ import * as Clock from "effect/Clock";
3
+ import * as DateTime from "effect/DateTime";
4
+ import * as Effect from "effect/Effect";
5
+ import { ImposterConfig } from "../domain/imposter";
6
+ import { ImposterRepository } from "../repositories/ImposterRepository";
7
+ import { NonEmptyString } from "../schemas/common";
8
+ import { ImposterServer } from "../server/ImposterServer";
9
+ import { AppConfig } from "../services/AppConfig";
10
+ import { MetricsService } from "../services/MetricsService";
11
+ import { PortAllocator } from "../services/PortAllocator";
12
+ import { RequestLogger } from "../services/RequestLogger";
13
+ import { Uuid } from "../services/Uuid";
14
+ import { AdminApi } from "./AdminApi";
15
+ import { ApiConflictError, ApiNotFoundError, ApiServiceError } from "./ApiErrors";
16
+ import { buildPaginationMeta, toImposterResponse } from "./Conversions";
17
+ export const ImpostersHandlersLive = /*#__PURE__*/HttpApiBuilder.group(AdminApi, "imposters", handlers => handlers.handle("createImposter", ({
18
+ payload
19
+ }) => Effect.gen(function* () {
20
+ const repo = yield* ImposterRepository;
21
+ const uuid = yield* Uuid;
22
+ const allocator = yield* PortAllocator;
23
+ const config = yield* AppConfig;
24
+ const all = yield* repo.getAll;
25
+ if (all.length >= config.maxImposters) {
26
+ return yield* Effect.fail(new ApiServiceError({
27
+ message: `Maximum number of imposters (${config.maxImposters}) reached`
28
+ }));
29
+ }
30
+ const id = yield* uuid.generateShort;
31
+ const name = payload.name ?? NonEmptyString.make(id);
32
+ const port = yield* allocator.allocate(payload.port).pipe(Effect.catchTags({
33
+ PortAllocatorError: e => Effect.fail(new ApiConflictError({
34
+ message: e.reason
35
+ })),
36
+ PortExhaustedError: e => Effect.fail(new ApiServiceError({
37
+ message: `No available ports in range ${e.rangeMin}-${e.rangeMax}`
38
+ }))
39
+ }));
40
+ const imposterConfig = ImposterConfig({
41
+ id,
42
+ name,
43
+ port,
44
+ status: "stopped",
45
+ createdAt: DateTime.unsafeNow(),
46
+ ...(payload.proxy !== undefined ? {
47
+ proxy: payload.proxy
48
+ } : {})
49
+ });
50
+ const record = yield* repo.create(imposterConfig);
51
+ return yield* toImposterResponse(record);
52
+ })).handle("listImposters", ({
53
+ urlParams
54
+ }) => Effect.gen(function* () {
55
+ const repo = yield* ImposterRepository;
56
+ const all = yield* repo.getAll;
57
+ // All imposters are HTTP in Phase 2; protocol filter is for forward compatibility
58
+ const filtered = all.filter(r => urlParams.status === undefined || r.config.status === urlParams.status).filter(() => urlParams.protocol === undefined || urlParams.protocol === "HTTP");
59
+ filtered.sort((a, b) => DateTime.toEpochMillis(a.config.createdAt) - DateTime.toEpochMillis(b.config.createdAt));
60
+ const total = filtered.length;
61
+ const paged = filtered.slice(urlParams.offset, urlParams.offset + urlParams.limit);
62
+ const imposters = yield* Effect.all(paged.map(toImposterResponse));
63
+ return {
64
+ imposters,
65
+ pagination: buildPaginationMeta(total, urlParams.limit, urlParams.offset)
66
+ };
67
+ })).handle("getImposter", ({
68
+ path
69
+ }) => Effect.gen(function* () {
70
+ const repo = yield* ImposterRepository;
71
+ const record = yield* repo.get(path.id).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
72
+ message: "Imposter not found",
73
+ resourceType: "imposter",
74
+ resourceId: e.id
75
+ }))));
76
+ return yield* toImposterResponse(record);
77
+ })).handle("updateImposter", ({
78
+ path,
79
+ payload
80
+ }) => Effect.gen(function* () {
81
+ const repo = yield* ImposterRepository;
82
+ const allocator = yield* PortAllocator;
83
+ const imposterServer = yield* ImposterServer;
84
+ const existing = yield* repo.get(path.id).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
85
+ message: "Imposter not found",
86
+ resourceType: "imposter",
87
+ resourceId: e.id
88
+ }))));
89
+ const wasRunning = yield* imposterServer.isRunning(path.id);
90
+ const wantsRunning = payload.status === "running";
91
+ const wantsStopped = payload.status === "stopped";
92
+ const portChanging = payload.port !== undefined && payload.port !== existing.config.port;
93
+ // If port is changing while running, stop first
94
+ if (portChanging && wasRunning) {
95
+ yield* imposterServer.stop(path.id);
96
+ }
97
+ let newPort;
98
+ if (portChanging) {
99
+ newPort = yield* allocator.allocate(payload.port).pipe(Effect.catchTags({
100
+ PortAllocatorError: e => Effect.fail(new ApiConflictError({
101
+ message: e.reason
102
+ })),
103
+ PortExhaustedError: e => Effect.fail(new ApiServiceError({
104
+ message: `No available ports in range ${e.rangeMin}-${e.rangeMax}`
105
+ }))
106
+ }));
107
+ }
108
+ // Compute proxy update: undefined = no change, null = remove, object = set
109
+ const proxyUpdate = payload.proxy === undefined ? {} : payload.proxy === null ? {
110
+ proxy: undefined
111
+ } : {
112
+ proxy: payload.proxy
113
+ };
114
+ yield* repo.update(path.id, r => ({
115
+ ...r,
116
+ config: ImposterConfig({
117
+ ...r.config,
118
+ ...(payload.name !== undefined ? {
119
+ name: payload.name
120
+ } : {}),
121
+ ...(payload.status !== undefined ? {
122
+ status: payload.status
123
+ } : {}),
124
+ ...(newPort !== undefined ? {
125
+ port: newPort
126
+ } : {}),
127
+ ...proxyUpdate
128
+ })
129
+ })).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
130
+ message: "Imposter not found",
131
+ resourceType: "imposter",
132
+ resourceId: e.id
133
+ }))), Effect.tapError(() => newPort !== undefined ? allocator.release(newPort) : Effect.void));
134
+ if (newPort !== undefined) {
135
+ yield* allocator.release(existing.config.port);
136
+ }
137
+ // Hot-reload proxy config if it changed
138
+ if (payload.proxy !== undefined) {
139
+ yield* imposterServer.updateProxyConfig(path.id);
140
+ }
141
+ // Handle start/stop transitions
142
+ if (wantsRunning && !wasRunning) {
143
+ yield* imposterServer.start(path.id).pipe(Effect.catchTag("ImposterServerError", e => Effect.fail(new ApiServiceError({
144
+ message: e.reason
145
+ }))), Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
146
+ message: "Imposter not found",
147
+ resourceType: "imposter",
148
+ resourceId: e.id
149
+ }))));
150
+ } else if (wantsStopped && wasRunning && !portChanging) {
151
+ yield* imposterServer.stop(path.id);
152
+ } else if (portChanging && wasRunning) {
153
+ // Port changed while running — restart
154
+ yield* imposterServer.start(path.id).pipe(Effect.catchTag("ImposterServerError", e => Effect.fail(new ApiServiceError({
155
+ message: e.reason
156
+ }))), Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
157
+ message: "Imposter not found",
158
+ resourceType: "imposter",
159
+ resourceId: e.id
160
+ }))));
161
+ }
162
+ // Re-read to get final status
163
+ const final = yield* repo.get(path.id).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
164
+ message: "Imposter not found",
165
+ resourceType: "imposter",
166
+ resourceId: e.id
167
+ }))));
168
+ return yield* toImposterResponse(final);
169
+ })).handle("deleteImposter", ({
170
+ path,
171
+ urlParams
172
+ }) => Effect.gen(function* () {
173
+ const repo = yield* ImposterRepository;
174
+ const allocator = yield* PortAllocator;
175
+ const imposterServer = yield* ImposterServer;
176
+ const metricsService = yield* MetricsService;
177
+ const existing = yield* repo.get(path.id).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
178
+ message: "Imposter not found",
179
+ resourceType: "imposter",
180
+ resourceId: e.id
181
+ }))));
182
+ if (!urlParams.force && existing.config.status !== "stopped") {
183
+ return yield* Effect.fail(new ApiConflictError({
184
+ message: `Imposter is ${existing.config.status}, use force=true to delete`
185
+ }));
186
+ }
187
+ // Stop if running
188
+ const running = yield* imposterServer.isRunning(path.id);
189
+ if (running) {
190
+ yield* imposterServer.stop(path.id);
191
+ }
192
+ yield* repo.remove(path.id).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
193
+ message: "Imposter not found",
194
+ resourceType: "imposter",
195
+ resourceId: e.id
196
+ }))));
197
+ yield* allocator.release(existing.config.port);
198
+ yield* metricsService.resetStats(path.id);
199
+ const now = yield* Effect.map(Clock.currentTimeMillis, ms => DateTime.unsafeMake(ms));
200
+ return {
201
+ message: NonEmptyString.make(`Imposter ${path.id} deleted`),
202
+ id: NonEmptyString.make(path.id),
203
+ deletedAt: now
204
+ };
205
+ })).handle("addStub", ({
206
+ path,
207
+ payload
208
+ }) => Effect.gen(function* () {
209
+ const repo = yield* ImposterRepository;
210
+ const uuid = yield* Uuid;
211
+ const imposterServer = yield* ImposterServer;
212
+ const id = yield* uuid.generateShort;
213
+ const stub = {
214
+ id: NonEmptyString.make(id),
215
+ predicates: payload.predicates,
216
+ responses: payload.responses,
217
+ responseMode: payload.responseMode
218
+ };
219
+ const result = yield* repo.addStub(path.imposterId, stub).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
220
+ message: "Imposter not found",
221
+ resourceType: "imposter",
222
+ resourceId: e.id
223
+ }))));
224
+ // Hot-reload if running
225
+ const running = yield* imposterServer.isRunning(path.imposterId);
226
+ if (running) {
227
+ yield* imposterServer.updateStubs(path.imposterId);
228
+ }
229
+ return result;
230
+ })).handle("listStubs", ({
231
+ path
232
+ }) => Effect.gen(function* () {
233
+ const repo = yield* ImposterRepository;
234
+ return yield* repo.getStubs(path.imposterId).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
235
+ message: "Imposter not found",
236
+ resourceType: "imposter",
237
+ resourceId: e.id
238
+ }))));
239
+ })).handle("updateStub", ({
240
+ path,
241
+ payload
242
+ }) => Effect.gen(function* () {
243
+ const repo = yield* ImposterRepository;
244
+ const imposterServer = yield* ImposterServer;
245
+ const result = yield* repo.updateStub(path.imposterId, path.stubId, s => ({
246
+ ...s,
247
+ ...(payload.predicates !== undefined ? {
248
+ predicates: payload.predicates
249
+ } : {}),
250
+ ...(payload.responses !== undefined ? {
251
+ responses: payload.responses
252
+ } : {}),
253
+ ...(payload.responseMode !== undefined ? {
254
+ responseMode: payload.responseMode
255
+ } : {})
256
+ })).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
257
+ message: "Imposter not found",
258
+ resourceType: "imposter",
259
+ resourceId: e.id
260
+ }))), Effect.catchTag("StubNotFoundError", e => Effect.fail(new ApiNotFoundError({
261
+ message: "Stub not found",
262
+ resourceType: "stub",
263
+ resourceId: e.stubId
264
+ }))));
265
+ // Hot-reload if running
266
+ const running = yield* imposterServer.isRunning(path.imposterId);
267
+ if (running) {
268
+ yield* imposterServer.updateStubs(path.imposterId);
269
+ }
270
+ return result;
271
+ })).handle("deleteStub", ({
272
+ path
273
+ }) => Effect.gen(function* () {
274
+ const repo = yield* ImposterRepository;
275
+ const imposterServer = yield* ImposterServer;
276
+ const result = yield* repo.removeStub(path.imposterId, path.stubId).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
277
+ message: "Imposter not found",
278
+ resourceType: "imposter",
279
+ resourceId: e.id
280
+ }))), Effect.catchTag("StubNotFoundError", e => Effect.fail(new ApiNotFoundError({
281
+ message: "Stub not found",
282
+ resourceType: "stub",
283
+ resourceId: e.stubId
284
+ }))));
285
+ // Hot-reload if running
286
+ const running = yield* imposterServer.isRunning(path.imposterId);
287
+ if (running) {
288
+ yield* imposterServer.updateStubs(path.imposterId);
289
+ }
290
+ return result;
291
+ })).handle("listRequests", ({
292
+ path,
293
+ urlParams
294
+ }) => Effect.gen(function* () {
295
+ const repo = yield* ImposterRepository;
296
+ const requestLogger = yield* RequestLogger;
297
+ yield* repo.get(path.id).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
298
+ message: "Imposter not found",
299
+ resourceType: "imposter",
300
+ resourceId: e.id
301
+ }))));
302
+ return yield* requestLogger.getEntries(path.id, {
303
+ limit: urlParams.limit,
304
+ ...(urlParams.method !== undefined ? {
305
+ method: urlParams.method
306
+ } : {}),
307
+ ...(urlParams.path !== undefined ? {
308
+ path: urlParams.path
309
+ } : {}),
310
+ ...(urlParams.status !== undefined ? {
311
+ status: urlParams.status
312
+ } : {})
313
+ });
314
+ })).handle("clearRequests", ({
315
+ path
316
+ }) => Effect.gen(function* () {
317
+ const repo = yield* ImposterRepository;
318
+ const requestLogger = yield* RequestLogger;
319
+ yield* repo.get(path.id).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
320
+ message: "Imposter not found",
321
+ resourceType: "imposter",
322
+ resourceId: e.id
323
+ }))));
324
+ yield* requestLogger.clear(path.id);
325
+ return {
326
+ message: `Request log cleared for imposter ${path.id}`
327
+ };
328
+ })).handle("getImposterStats", ({
329
+ path
330
+ }) => Effect.gen(function* () {
331
+ const repo = yield* ImposterRepository;
332
+ const metricsService = yield* MetricsService;
333
+ yield* repo.get(path.id).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
334
+ message: "Imposter not found",
335
+ resourceType: "imposter",
336
+ resourceId: e.id
337
+ }))));
338
+ return yield* metricsService.getStats(path.id);
339
+ })).handle("resetImposterStats", ({
340
+ path
341
+ }) => Effect.gen(function* () {
342
+ const repo = yield* ImposterRepository;
343
+ const metricsService = yield* MetricsService;
344
+ yield* repo.get(path.id).pipe(Effect.catchTag("ImposterNotFoundError", e => Effect.fail(new ApiNotFoundError({
345
+ message: "Imposter not found",
346
+ resourceType: "imposter",
347
+ resourceId: e.id
348
+ }))));
349
+ yield* metricsService.resetStats(path.id);
350
+ return {
351
+ message: `Statistics reset for imposter ${path.id}`
352
+ };
353
+ })));
354
+ //# sourceMappingURL=ImpostersHandlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImpostersHandlers.js","names":["HttpApiBuilder","Clock","DateTime","Effect","ImposterConfig","ImposterRepository","NonEmptyString","ImposterServer","AppConfig","MetricsService","PortAllocator","RequestLogger","Uuid","AdminApi","ApiConflictError","ApiNotFoundError","ApiServiceError","buildPaginationMeta","toImposterResponse","ImpostersHandlersLive","group","handlers","handle","payload","gen","repo","uuid","allocator","config","all","getAll","length","maxImposters","fail","message","id","generateShort","name","make","port","allocate","pipe","catchTags","PortAllocatorError","e","reason","PortExhaustedError","rangeMin","rangeMax","imposterConfig","status","createdAt","unsafeNow","proxy","undefined","record","create","urlParams","filtered","filter","r","protocol","sort","a","b","toEpochMillis","total","paged","slice","offset","limit","imposters","map","pagination","path","get","catchTag","resourceType","resourceId","imposterServer","existing","wasRunning","isRunning","wantsRunning","wantsStopped","portChanging","stop","newPort","proxyUpdate","update","tapError","release","void","updateProxyConfig","start","final","metricsService","force","running","remove","resetStats","now","currentTimeMillis","ms","unsafeMake","deletedAt","stub","predicates","responses","responseMode","result","addStub","imposterId","updateStubs","getStubs","updateStub","stubId","s","removeStub","requestLogger","getEntries","method","clear","getStats"],"sources":["../../../src/api/ImpostersHandlers.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import { HttpApiEndpoint, HttpApiGroup } from "@effect/platform";
2
+ import { HealthResponse, ServerInfoResponse } from "../schemas/ImposterSchema";
3
+ export const SystemGroup = /*#__PURE__*/HttpApiGroup.make("system", {
4
+ topLevel: true
5
+ }).add(HttpApiEndpoint.get("healthCheck", "/health").addSuccess(HealthResponse)).add(/*#__PURE__*/HttpApiEndpoint.get("serverInfo", "/info").addSuccess(ServerInfoResponse));
6
+ //# sourceMappingURL=SystemGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemGroup.js","names":["HttpApiEndpoint","HttpApiGroup","HealthResponse","ServerInfoResponse","SystemGroup","make","topLevel","add","get","addSuccess"],"sources":["../../../src/api/SystemGroup.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,eAAe,EAAEC,YAAY,QAAQ,kBAAkB;AAChE,SAASC,cAAc,EAAEC,kBAAkB,QAAQ,2BAA2B;AAE9E,OAAO,MAAMC,WAAW,gBAAGH,YAAY,CAACI,IAAI,CAAC,QAAQ,EAAE;EAAEC,QAAQ,EAAE;AAAI,CAAE,CAAC,CACvEC,GAAG,CACFP,eAAe,CAACQ,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAC1CC,UAAU,CAACP,cAAc,CAAC,CAC9B,CACAK,GAAG,cACFP,eAAe,CAACQ,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CACvCC,UAAU,CAACN,kBAAkB,CAAC,CAClC","ignoreList":[]}