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