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":"ImpostersClient.d.ts","sourceRoot":"","sources":["../../../src/client/ImpostersClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { HandlerHttpClientLive, makeHandlerHttpClient } from "./HandlerHttpClient";
2
+ export { ImpostersClient, ImpostersClientFetchLive, ImpostersClientLive, makeImpostersClient } from "./ImpostersClient";
3
+ export type { ImpostersClientShape } from "./ImpostersClient";
4
+ export { makeTestServer, withImposter } from "./testing";
5
+ export type { ImposterTestContext, StubConfig, WithImposterConfig } from "./testing";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAElF,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAEvH,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExD,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { Effect, Layer } from "effect";
2
+ import { ImpostersClient } from "./ImpostersClient";
3
+ export interface StubConfig {
4
+ readonly predicates?: ReadonlyArray<{
5
+ readonly field: "method" | "path" | "headers" | "query" | "body";
6
+ readonly operator: "equals" | "contains" | "startsWith" | "matches" | "exists";
7
+ readonly value: unknown;
8
+ readonly caseSensitive?: boolean;
9
+ }>;
10
+ readonly responses: readonly [ResponseConfigInput, ...ReadonlyArray<ResponseConfigInput>];
11
+ readonly responseMode?: "sequential" | "random" | "repeat";
12
+ }
13
+ interface ResponseConfigInput {
14
+ readonly status?: number;
15
+ readonly headers?: Record<string, string>;
16
+ readonly body?: unknown;
17
+ readonly delay?: number;
18
+ }
19
+ export interface WithImposterConfig {
20
+ readonly port?: number;
21
+ readonly name?: string;
22
+ readonly stubs?: ReadonlyArray<StubConfig>;
23
+ }
24
+ export interface ImposterTestContext {
25
+ readonly id: string;
26
+ readonly port: number;
27
+ }
28
+ export declare const withImposter: <A, E>(config: WithImposterConfig, testFn: (ctx: ImposterTestContext) => Effect.Effect<A, E, ImpostersClient>) => Effect.Effect<A, E | Error, ImpostersClient>;
29
+ export declare const makeTestServer: (fullLayer: Layer.Layer<any, any, never>) => {
30
+ handler: (request: Request, context?: import("effect/Context").Context<never> | undefined) => Promise<Response>;
31
+ dispose: () => Promise<void>;
32
+ clientLayer: Layer.Layer<ImpostersClient, never, never>;
33
+ };
34
+ export {};
35
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/client/testing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAItC,OAAO,EAAE,eAAe,EAAuB,MAAM,mBAAmB,CAAA;AAExE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;QAClC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;QAChE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAA;QAC9E,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;QACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KACjC,CAAC,CAAA;IACF,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,mBAAmB,EAAE,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAA;IACzF,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAC3D;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAqBD,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAC/B,QAAQ,kBAAkB,EAC1B,QAAQ,CAAC,GAAG,EAAE,mBAAmB,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,KACzE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,eAAe,CAsC3C,CAAA;AAEH,eAAO,MAAM,cAAc,GAAI,WAAW,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;;;;CAMrE,CAAA"}
@@ -0,0 +1,123 @@
1
+ import * as Data from "effect/Data";
2
+ import * as DateTime from "effect/DateTime";
3
+ import * as Duration from "effect/Duration";
4
+ import * as Effect from "effect/Effect";
5
+ import type * as ParseResult from "effect/ParseResult";
6
+ import * as Schema from "effect/Schema";
7
+ import { Uuid } from "../services/Uuid";
8
+ type ImposterStatus = "running" | "stopped" | "starting" | "stopping";
9
+ declare const CreateImposterRequestSchema: Schema.Struct<{
10
+ name: Schema.optional<Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>>;
11
+ port: Schema.optional<Schema.filter<Schema.filter<typeof Schema.Number>>>;
12
+ }>;
13
+ export interface ProxyConfigDomain {
14
+ readonly targetUrl: string;
15
+ readonly mode: "passthrough" | "record";
16
+ readonly addHeaders?: Record<string, string> | undefined;
17
+ readonly removeHeaders: ReadonlyArray<string>;
18
+ readonly followRedirects: boolean;
19
+ readonly timeout: number;
20
+ }
21
+ export interface ImposterConfig {
22
+ readonly _tag: "ImposterConfig";
23
+ readonly id: string;
24
+ readonly name: string;
25
+ readonly port: number;
26
+ readonly status: ImposterStatus;
27
+ readonly createdAt: DateTime.Utc;
28
+ readonly proxy?: ProxyConfigDomain | undefined;
29
+ }
30
+ export declare const ImposterConfig: Data.Case.Constructor<ImposterConfig, "_tag">;
31
+ export interface CreateImposterRequest {
32
+ readonly _tag: "CreateImposterRequest";
33
+ readonly name?: string;
34
+ readonly port?: number;
35
+ }
36
+ export declare const CreateImposterRequest: Data.Case.Constructor<CreateImposterRequest, "_tag">;
37
+ export interface ImposterRef {
38
+ readonly _tag: "ImposterRef";
39
+ readonly config: ImposterConfig;
40
+ readonly startTime: DateTime.Utc;
41
+ readonly endpointCount: number;
42
+ }
43
+ export declare const ImposterRef: Data.Case.Constructor<ImposterRef, "_tag">;
44
+ declare const ImposterError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
45
+ readonly _tag: "ImposterError";
46
+ } & Readonly<A>;
47
+ export declare class ImposterError extends ImposterError_base<{
48
+ readonly reason: string;
49
+ readonly cause?: unknown;
50
+ }> {
51
+ }
52
+ declare const PortInUseError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
53
+ readonly _tag: "PortInUseError";
54
+ } & Readonly<A>;
55
+ export declare class PortInUseError extends PortInUseError_base<{
56
+ readonly port: number;
57
+ }> {
58
+ }
59
+ declare const ImposterNotFoundError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
60
+ readonly _tag: "ImposterNotFoundError";
61
+ } & Readonly<A>;
62
+ export declare class ImposterNotFoundError extends ImposterNotFoundError_base<{
63
+ readonly id: string;
64
+ }> {
65
+ }
66
+ /**
67
+ * Parses and validates imposter creation request
68
+ */
69
+ export declare const parseCreateImposterRequest: (input: unknown) => Effect.Effect<typeof CreateImposterRequestSchema.Type, ParseResult.ParseError>;
70
+ /**
71
+ * Creates a new imposter configuration from validated input
72
+ */
73
+ export declare const createImposterConfig: (validatedInput: typeof CreateImposterRequestSchema.Type) => Effect.Effect<ImposterConfig, never, Uuid>;
74
+ /**
75
+ * Creates a new imposter from raw input (parse + create)
76
+ */
77
+ export declare const newImposterConfig: (input: unknown) => Effect.Effect<ImposterConfig, ParseResult.ParseError, Uuid>;
78
+ /**
79
+ * Updates imposter status
80
+ */
81
+ export declare const updateImposterStatus: (status: ImposterStatus) => (config: ImposterConfig) => ImposterConfig;
82
+ /**
83
+ * Updates imposter port
84
+ */
85
+ export declare const updateImposterPort: (port: number) => (config: ImposterConfig) => ImposterConfig;
86
+ /**
87
+ * Calculates imposter uptime using Effect's Duration
88
+ */
89
+ export declare const calculateUptime: (startTime: DateTime.Utc) => Effect.Effect<Duration.Duration, never, never>;
90
+ /**
91
+ * Creates an ImposterRef from config and runtime info
92
+ */
93
+ export declare const createImposterRef: (startTime: DateTime.Utc) => (endpointCount: number) => (config: ImposterConfig) => ImposterRef;
94
+ /**
95
+ * Extracts imposter summary for API responses
96
+ */
97
+ export declare const toImposterSummary: (ref: ImposterRef) => Effect.Effect<{
98
+ id: string;
99
+ name: string;
100
+ port: number;
101
+ status: ImposterStatus;
102
+ endpointCount: number;
103
+ createdAt: string;
104
+ uptime: string;
105
+ }, never, never>;
106
+ /**
107
+ * Gets uptime in human readable format
108
+ */
109
+ export declare const getUptimeFormatted: (ref: ImposterRef) => Effect.Effect<string, never, never>;
110
+ /**
111
+ * Checks if imposter is running
112
+ */
113
+ export declare const isRunning: (config: ImposterConfig) => boolean;
114
+ /**
115
+ * Checks if imposter can be started
116
+ */
117
+ export declare const canStart: (config: ImposterConfig) => boolean;
118
+ /**
119
+ * Checks if imposter can be stopped
120
+ */
121
+ export declare const canStop: (config: ImposterConfig) => boolean;
122
+ export {};
123
+ //# sourceMappingURL=imposter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imposter.d.ts","sourceRoot":"","sources":["../../../src/domain/imposter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import * as Data from "effect/Data";
2
+ import * as DateTime from "effect/DateTime";
3
+ import * as Duration from "effect/Duration";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Option from "effect/Option";
6
+ import type * as ParseResult from "effect/ParseResult";
7
+ import * as Schema from "effect/Schema";
8
+ import { Uuid } from "../services/Uuid";
9
+ declare const HttpMethodSchema: Schema.Literal<["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"]>;
10
+ declare const CreateRouteRequestSchema: Schema.Struct<{
11
+ id: Schema.optional<typeof Schema.String>;
12
+ path: Schema.filter<Schema.filter<typeof Schema.String>>;
13
+ method: Schema.optionalWith<Schema.Literal<["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"]>, {
14
+ default: () => "GET";
15
+ }>;
16
+ response: Schema.Struct<{
17
+ status: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
18
+ default: () => number;
19
+ }>;
20
+ headers: Schema.optional<Schema.Record$<typeof Schema.String, typeof Schema.String>>;
21
+ body: typeof Schema.Unknown;
22
+ }>;
23
+ delay: Schema.optional<Schema.filter<Schema.filter<typeof Schema.Number>>>;
24
+ }>;
25
+ export interface Route {
26
+ readonly _tag: "Route";
27
+ readonly id: string;
28
+ readonly path: string;
29
+ readonly method: typeof HttpMethodSchema.Type;
30
+ readonly response: Response;
31
+ readonly delay: Option.Option<Duration.Duration>;
32
+ readonly createdAt: DateTime.Utc;
33
+ }
34
+ export declare const Route: Data.Case.Constructor<Route, "_tag">;
35
+ export interface Response {
36
+ readonly _tag: "Response";
37
+ readonly status: number;
38
+ readonly headers: Option.Option<Record<string, string>>;
39
+ readonly body: unknown;
40
+ }
41
+ export declare const Response: Data.Case.Constructor<Response, "_tag">;
42
+ export interface CreateRouteRequest {
43
+ readonly _tag: "CreateRouteRequest";
44
+ readonly id?: string;
45
+ readonly path: string;
46
+ readonly method?: string;
47
+ readonly response: {
48
+ readonly status?: number;
49
+ readonly headers?: Record<string, string>;
50
+ readonly body: unknown;
51
+ };
52
+ readonly delay?: number;
53
+ }
54
+ export declare const CreateRouteRequest: Data.Case.Constructor<CreateRouteRequest, "_tag">;
55
+ declare const RouteError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
56
+ readonly _tag: "RouteError";
57
+ } & Readonly<A>;
58
+ export declare class RouteError extends RouteError_base<{
59
+ readonly reason: string;
60
+ readonly field?: string;
61
+ readonly value?: unknown;
62
+ }> {
63
+ }
64
+ declare const RouteNotFoundError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
65
+ readonly _tag: "RouteNotFoundError";
66
+ } & Readonly<A>;
67
+ export declare class RouteNotFoundError extends RouteNotFoundError_base<{
68
+ readonly id: string;
69
+ }> {
70
+ }
71
+ /**
72
+ * Parses and validates route creation request
73
+ */
74
+ export declare const parseCreateRouteRequest: (input: unknown) => Effect.Effect<typeof CreateRouteRequestSchema.Type, ParseResult.ParseError>;
75
+ /**
76
+ * Creates a new route from validated input
77
+ */
78
+ export declare const createRoute: (validatedInput: typeof CreateRouteRequestSchema.Type) => Effect.Effect<Route, never, Uuid>;
79
+ /**
80
+ * Creates a new route from raw input (parse + create)
81
+ */
82
+ export declare const newRoute: (input: unknown) => Effect.Effect<Route, ParseResult.ParseError, Uuid>;
83
+ /**
84
+ * Updates a route preserving creation time and ID
85
+ */
86
+ export declare const updateRoute: (updates: Partial<typeof CreateRouteRequestSchema.Type>) => (existingRoute: Route) => Effect.Effect<Route, never, Uuid>;
87
+ /**
88
+ * Recursively substitutes parameters in unknown data structure
89
+ */
90
+ export declare const substituteParams: (params: Record<string, string>) => (body: unknown) => unknown;
91
+ /**
92
+ * Creates a response with substituted parameters
93
+ */
94
+ export declare const createResponseWithParams: (params: Record<string, string>) => (response: Response) => Response;
95
+ /**
96
+ * Extracts route summary for API responses
97
+ */
98
+ export declare const toRouteSummary: (route: Route) => {
99
+ id: string;
100
+ path: string;
101
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS";
102
+ status: number;
103
+ hasDelay: boolean;
104
+ delayMs: number | undefined;
105
+ createdAt: string;
106
+ };
107
+ /**
108
+ * Gets delay in milliseconds for compatibility
109
+ */
110
+ export declare const getDelayMillis: (route: Route) => Option.Option<number>;
111
+ /**
112
+ * Checks if route has custom headers
113
+ */
114
+ export declare const hasCustomHeaders: (route: Route) => boolean;
115
+ /**
116
+ * Gets headers as record or empty object
117
+ */
118
+ export declare const getHeaders: (route: Route) => Record<string, string>;
119
+ /**
120
+ * Checks if route has delay configured
121
+ */
122
+ export declare const hasDelay: (route: Route) => boolean;
123
+ /**
124
+ * Creates a minimal route for testing
125
+ */
126
+ export declare const createMinimalRoute: (path: string) => (method?: typeof HttpMethodSchema.Type) => Effect.Effect<Route, never, Uuid>;
127
+ export {};
128
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/domain/route.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ export * as Program from "./Program.js";
2
+ export * as AdminApi from "./api/AdminApi.js";
3
+ export * as ApiErrors from "./api/ApiErrors.js";
4
+ export * as ApiSchemas from "./api/ApiSchemas.js";
5
+ export * as Conversions from "./api/Conversions.js";
6
+ export * as ImpostersGroup from "./api/ImpostersGroup.js";
7
+ export * as ImpostersHandlers from "./api/ImpostersHandlers.js";
8
+ export * as SystemGroup from "./api/SystemGroup.js";
9
+ export * as SystemHandlers from "./api/SystemHandlers.js";
10
+ export * as Commands from "./cli/Commands.js";
11
+ export * as ConfigLoader from "./cli/ConfigLoader.js";
12
+ export * as HandlerHttpClient from "./client/HandlerHttpClient.js";
13
+ export * as ImpostersClient from "./client/ImpostersClient.js";
14
+ export * as testing from "./client/testing.js";
15
+ /**
16
+ * Parses and validates imposter creation request
17
+ */
18
+ export * as imposter from "./domain/imposter.js";
19
+ /**
20
+ * Parses and validates route creation request
21
+ */
22
+ export * as route from "./domain/route.js";
23
+ export * as ApiLayer from "./layers/ApiLayer.js";
24
+ export * as MainLayer from "./layers/MainLayer.js";
25
+ /**
26
+ * Extract expression content from a ${...} pattern using brace-depth counting.
27
+ * Returns [expressionContent, endIndex] or null if no valid expression found.
28
+ */
29
+ export * as ExpressionEvaluator from "./matching/ExpressionEvaluator.js";
30
+ export * as RequestMatcher from "./matching/RequestMatcher.js";
31
+ export * as ResponseGenerator from "./matching/ResponseGenerator.js";
32
+ export * as TemplateEngine from "./matching/TemplateEngine.js";
33
+ export * as ImposterRepository from "./repositories/ImposterRepository.js";
34
+ export * as ConfigFileSchema from "./schemas/ConfigFileSchema.js";
35
+ export * as ImposterSchema from "./schemas/ImposterSchema.js";
36
+ export * as RequestLogSchema from "./schemas/RequestLogSchema.js";
37
+ export * as StubSchema from "./schemas/StubSchema.js";
38
+ export * as common from "./schemas/common.js";
39
+ export * as AdminServer from "./server/AdminServer.js";
40
+ export * as BunServer from "./server/BunServer.js";
41
+ export * as FiberManager from "./server/FiberManager.js";
42
+ export * as ImposterServer from "./server/ImposterServer.js";
43
+ export * as AppConfig from "./services/AppConfig.js";
44
+ export * as MetricsService from "./services/MetricsService.js";
45
+ export * as PortAllocator from "./services/PortAllocator.js";
46
+ export * as ProxyService from "./services/ProxyService.js";
47
+ export * as RequestLogger from "./services/RequestLogger.js";
48
+ export * as Uuid from "./services/Uuid.js";
49
+ export * as UuidLive from "./services/UuidLive.js";
50
+ export * as UiRouter from "./ui/UiRouter.js";
51
+ export * as AdminLayout from "./ui/admin/AdminLayout.js";
52
+ export * as AdminUiRouter from "./ui/admin/AdminUiRouter.js";
53
+ export * as AdminDashboard from "./ui/admin/pages/AdminDashboard.js";
54
+ export * as partials from "./ui/admin/partials.js";
55
+ export * as html from "./ui/html.js";
56
+ export * as layout from "./ui/layout.js";
57
+ export * as dashboard from "./ui/pages/dashboard.js";
58
+ export * as requests from "./ui/pages/requests.js";
59
+ export * as stubs from "./ui/pages/stubs.js";
60
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAGvC,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAG7C,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAG/C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAA;AAGjD,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AAGzD,OAAO,KAAK,iBAAiB,MAAM,4BAA4B,CAAA;AAG/D,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,cAAc,MAAM,yBAAyB,CAAA;AAGzD,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAG7C,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAA;AAGrD,OAAO,KAAK,iBAAiB,MAAM,+BAA+B,CAAA;AAGlE,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAA;AAG9D,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAA;AAE9C;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAEhD;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAG1C,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAGhD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAElD;;;GAGG;AACH,OAAO,KAAK,mBAAmB,MAAM,mCAAmC,CAAA;AAGxE,OAAO,KAAK,cAAc,MAAM,8BAA8B,CAAA;AAG9D,OAAO,KAAK,iBAAiB,MAAM,iCAAiC,CAAA;AAGpE,OAAO,KAAK,cAAc,MAAM,8BAA8B,CAAA;AAG9D,OAAO,KAAK,kBAAkB,MAAM,sCAAsC,CAAA;AAG1E,OAAO,KAAK,gBAAgB,MAAM,+BAA+B,CAAA;AAGjE,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAG7D,OAAO,KAAK,gBAAgB,MAAM,+BAA+B,CAAA;AAGjE,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAA;AAGrD,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAG7C,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAA;AAGtD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAGlD,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAA;AAGxD,OAAO,KAAK,cAAc,MAAM,4BAA4B,CAAA;AAG5D,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAA;AAGpD,OAAO,KAAK,cAAc,MAAM,8BAA8B,CAAA;AAG9D,OAAO,KAAK,aAAa,MAAM,6BAA6B,CAAA;AAG5D,OAAO,KAAK,YAAY,MAAM,4BAA4B,CAAA;AAG1D,OAAO,KAAK,aAAa,MAAM,6BAA6B,CAAA;AAG5D,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAG1C,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAGlD,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAA;AAG5C,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAA;AAGxD,OAAO,KAAK,aAAa,MAAM,6BAA6B,CAAA;AAG5D,OAAO,KAAK,cAAc,MAAM,oCAAoC,CAAA;AAGpE,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAGlD,OAAO,KAAK,IAAI,MAAM,cAAc,CAAA;AAGpC,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAGxC,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAA;AAGpD,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAGlD,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import * as Layer from "effect/Layer";
2
+ export declare const ApiLayer: Layer.Layer<import("@effect/platform/HttpPlatform").HttpPlatform | import("@effect/platform/Etag").Generator | import("@effect/platform/FileSystem").FileSystem | import("@effect/platform/Path").Path | import("@effect/platform/HttpApi").Api, never, import("../services/Uuid").Uuid | import("../repositories/ImposterRepository").ImposterRepository | import("../services/MetricsService").MetricsService | import("../services/RequestLogger").RequestLogger | import("../server/ImposterServer").ImposterServer | import("../services/AppConfig").AppConfig | import("../services/PortAllocator").PortAllocator>;
3
+ //# sourceMappingURL=ApiLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiLayer.d.ts","sourceRoot":"","sources":["../../../src/layers/ApiLayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAerC,eAAO,MAAM,QAAQ,0lBAIpB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import * as Layer from "effect/Layer";
2
+ export declare const MainLayer: Layer.Layer<import("../services/Uuid").Uuid | import("../repositories/ImposterRepository").ImposterRepository | import("../services/MetricsService").MetricsService | import("../services/RequestLogger").RequestLogger | import("../server/FiberManager").FiberManager | import("../server/ImposterServer").ImposterServer | import("../services/AppConfig").AppConfig | import("../services/PortAllocator").PortAllocator, import("effect/ConfigError").ConfigError, never>;
3
+ //# sourceMappingURL=MainLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MainLayer.d.ts","sourceRoot":"","sources":["../../../src/layers/MainLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAiCrC,eAAO,MAAM,SAAS,+cASrB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { RequestContext } from "./RequestMatcher";
2
+ /**
3
+ * Evaluate a single JSONata expression against the request context.
4
+ * Returns the result or undefined on error.
5
+ */
6
+ export declare const evaluateExpression: (expr: string, ctx: RequestContext) => Promise<unknown>;
7
+ /**
8
+ * Recursively walk data structures, processing ${...} expressions in strings.
9
+ */
10
+ export declare const processExpressions: (ctx: RequestContext, data: unknown) => Promise<unknown>;
11
+ //# sourceMappingURL=ExpressionEvaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpressionEvaluator.d.ts","sourceRoot":"","sources":["../../../src/matching/ExpressionEvaluator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAuBtD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAU,MAAM,MAAM,EAAE,KAAK,cAAc,KAAG,OAAO,CAAC,OAAO,CAQ3F,CAAA;AAgDD;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAU,KAAK,cAAc,EAAE,MAAM,OAAO,KAAG,OAAO,CAAC,OAAO,CAc5F,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { Predicate, Stub } from "../schemas/StubSchema";
2
+ export interface RequestContext {
3
+ readonly method: string;
4
+ readonly path: string;
5
+ readonly headers: Record<string, string>;
6
+ readonly query: Record<string, string>;
7
+ readonly body: unknown;
8
+ }
9
+ export declare const extractRequestContext: (request: Request) => Promise<RequestContext>;
10
+ export declare const evaluatePredicate: (ctx: RequestContext, predicate: Predicate) => boolean;
11
+ export declare const evaluatePredicates: (ctx: RequestContext, predicates: ReadonlyArray<Predicate>) => boolean;
12
+ export declare const findMatchingStub: (ctx: RequestContext, stubs: ReadonlyArray<Stub>) => Stub | undefined;
13
+ //# sourceMappingURL=RequestMatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestMatcher.d.ts","sourceRoot":"","sources":["../../../src/matching/RequestMatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAE5D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CACvB;AAED,eAAO,MAAM,qBAAqB,GAAU,SAAS,OAAO,KAAG,OAAO,CAAC,cAAc,CA+BpF,CAAA;AAoGD,eAAO,MAAM,iBAAiB,GAAI,KAAK,cAAc,EAAE,WAAW,SAAS,KAAG,OAc7E,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,KAAK,cAAc,EAAE,YAAY,aAAa,CAAC,SAAS,CAAC,KAAG,OAChB,CAAA;AAE/E,eAAO,MAAM,gBAAgB,GAAI,KAAK,cAAc,EAAE,OAAO,aAAa,CAAC,IAAI,CAAC,KAAG,IAAI,GAAG,SAC1B,CAAA"}
@@ -0,0 +1,9 @@
1
+ import * as Effect from "effect/Effect";
2
+ import type { ResponseConfig, ResponseMode } from "../schemas/StubSchema";
3
+ import type { RequestContext } from "./RequestMatcher";
4
+ export declare const makeResponseState: () => Effect.Effect<{
5
+ getNextIndex: (imposterId: string, stubId: string, count: number, mode: ResponseMode) => Effect.Effect<number>;
6
+ reset: (imposterId: string) => Effect.Effect<void>;
7
+ }, never, never>;
8
+ export declare const buildResponse: (config: ResponseConfig, ctx: RequestContext) => Promise<Response>;
9
+ //# sourceMappingURL=ResponseGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseGenerator.d.ts","sourceRoot":"","sources":["../../../src/matching/ResponseGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMtD,eAAO,MAAM,iBAAiB;+BAKZ,MAAM,UACV,MAAM,SACP,MAAM,QACP,YAAY,KACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;wBAsBG,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBAYvD,CAAA;AAEJ,eAAO,MAAM,aAAa,GAAU,QAAQ,cAAc,EAAE,KAAK,cAAc,KAAG,OAAO,CAAC,QAAQ,CA8BjG,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { RequestContext } from "./RequestMatcher";
2
+ export declare const flattenRequestContext: (ctx: RequestContext) => Record<string, string>;
3
+ export declare const applyTemplates: (ctx: RequestContext, data: unknown) => Promise<unknown>;
4
+ //# sourceMappingURL=TemplateEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../../../src/matching/TemplateEngine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAyBtD,eAAO,MAAM,qBAAqB,GAAI,KAAK,cAAc,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBhF,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,KAAK,cAAc,EAAE,MAAM,OAAO,KAAG,OAAO,CAAC,OAAO,CAKxF,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import type { ImposterConfig } from "../domain/imposter";
3
+ import { ImposterNotFoundError } from "../domain/imposter";
4
+ import type { Stub } from "../schemas/StubSchema";
5
+ declare const StubNotFoundError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
6
+ readonly _tag: "StubNotFoundError";
7
+ } & Readonly<A>;
8
+ export declare class StubNotFoundError extends StubNotFoundError_base<{
9
+ readonly imposterId: string;
10
+ readonly stubId: string;
11
+ }> {
12
+ }
13
+ export interface ImposterRecord {
14
+ readonly config: ImposterConfig;
15
+ readonly stubs: ReadonlyArray<Stub>;
16
+ }
17
+ export interface ImposterRepositoryShape {
18
+ readonly create: (config: ImposterConfig) => Effect.Effect<ImposterRecord>;
19
+ readonly get: (id: string) => Effect.Effect<ImposterRecord, ImposterNotFoundError>;
20
+ readonly getAll: Effect.Effect<ReadonlyArray<ImposterRecord>>;
21
+ readonly update: (id: string, fn: (r: ImposterRecord) => ImposterRecord) => Effect.Effect<ImposterRecord, ImposterNotFoundError>;
22
+ readonly remove: (id: string) => Effect.Effect<ImposterRecord, ImposterNotFoundError>;
23
+ readonly addStub: (imposterId: string, stub: Stub) => Effect.Effect<Stub, ImposterNotFoundError>;
24
+ readonly getStubs: (imposterId: string) => Effect.Effect<ReadonlyArray<Stub>, ImposterNotFoundError>;
25
+ readonly updateStub: (imposterId: string, stubId: string, fn: (s: Stub) => Stub) => Effect.Effect<Stub, ImposterNotFoundError | StubNotFoundError>;
26
+ readonly removeStub: (imposterId: string, stubId: string) => Effect.Effect<Stub, ImposterNotFoundError | StubNotFoundError>;
27
+ }
28
+ declare const ImposterRepository_base: Context.TagClass<ImposterRepository, "ImposterRepository", ImposterRepositoryShape>;
29
+ export declare class ImposterRepository extends ImposterRepository_base {
30
+ }
31
+ export declare const ImposterRepositoryLive: Layer.Layer<ImposterRepository, never, never>;
32
+ export {};
33
+ //# sourceMappingURL=ImposterRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImposterRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/ImposterRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAW,KAAK,EAAO,MAAM,QAAQ,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;;;;AAEjD,qBAAa,iBAAkB,SAAQ,uBAAsC;IAC3E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,CAAC;CAAG;AAEL,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAC1E,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAA;IAClF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAA;IAC7D,QAAQ,CAAC,MAAM,EAAE,CACf,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,cAAc,KACtC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAA;IACzD,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAA;IACrF,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;IAChG,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC,CAAA;IACpG,QAAQ,CAAC,UAAU,EAAE,CACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,KAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CAAC,CAAA;IACnE,QAAQ,CAAC,UAAU,EAAE,CACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CAAC,CAAA;CACpE;;AAED,qBAAa,kBAAmB,SAAQ,uBAGrC;CAAG;AAEN,eAAO,MAAM,sBAAsB,+CAsGlC,CAAA"}