@geekmidas/constructs 10.0.0-alpha.2 → 10.0.0-alpha.21

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 (333) hide show
  1. package/README.md +46 -3
  2. package/dist/{Construct-Ct8nalEi.d.mts → Construct-DTqYvkPG.d.cts} +11 -13
  3. package/dist/Construct-DTqYvkPG.d.cts.map +1 -0
  4. package/dist/{Construct-BD5neF7w.mjs → Construct-Detz65RA.mjs} +31 -29
  5. package/dist/Construct-Detz65RA.mjs.map +1 -0
  6. package/dist/{Construct-C0ijr2qp.d.cts → Construct-pVadmURD.d.mts} +10 -12
  7. package/dist/Construct-pVadmURD.d.mts.map +1 -0
  8. package/dist/{Construct-CyS3RpTL.cjs → Construct-yG9Sw-5p.cjs} +51 -43
  9. package/dist/Construct-yG9Sw-5p.cjs.map +1 -0
  10. package/dist/{Cron-ByxdOfpE.d.mts → Cron-AYpQq725.d.mts} +13 -6
  11. package/dist/Cron-AYpQq725.d.mts.map +1 -0
  12. package/dist/{Cron-Wqh464aO.d.cts → Cron-Bdcg9OAL.d.cts} +12 -5
  13. package/dist/Cron-Bdcg9OAL.d.cts.map +1 -0
  14. package/dist/{CronBuilder-BL0AP6fs.d.mts → CronBuilder-DR21m9h2.d.cts} +7 -10
  15. package/dist/CronBuilder-DR21m9h2.d.cts.map +1 -0
  16. package/dist/{CronBuilder-BqpEzMPQ.d.cts → CronBuilder-DeBnPVIT.d.mts} +7 -10
  17. package/dist/CronBuilder-DeBnPVIT.d.mts.map +1 -0
  18. package/dist/{CronBuilder-BmABazzH.mjs → CronBuilder-vkjuo1UP.mjs} +23 -15
  19. package/dist/CronBuilder-vkjuo1UP.mjs.map +1 -0
  20. package/dist/{CronBuilder-CkXPJiGO.cjs → CronBuilder-zdTdaT-e.cjs} +33 -25
  21. package/dist/CronBuilder-zdTdaT-e.cjs.map +1 -0
  22. package/dist/{Endpoint-2Wg7T7Cq.d.mts → Endpoint-BxkRWQ8G.d.mts} +63 -84
  23. package/dist/Endpoint-BxkRWQ8G.d.mts.map +1 -0
  24. package/dist/{Endpoint-BiaaMEn_.cjs → Endpoint-CtiPUpRX.cjs} +145 -131
  25. package/dist/Endpoint-CtiPUpRX.cjs.map +1 -0
  26. package/dist/{Endpoint-VIOpSo0S.mjs → Endpoint-DCr5tlbJ.mjs} +117 -109
  27. package/dist/Endpoint-DCr5tlbJ.mjs.map +1 -0
  28. package/dist/{Endpoint-CH9Fn1AD.d.cts → Endpoint-DbYQJgb-.d.cts} +61 -82
  29. package/dist/Endpoint-DbYQJgb-.d.cts.map +1 -0
  30. package/dist/{EndpointFactory-DTTCkGEL.mjs → EndpointFactory-Bs8pu-yY.mjs} +20 -29
  31. package/dist/EndpointFactory-Bs8pu-yY.mjs.map +1 -0
  32. package/dist/{index-BxHDdy6a.d.mts → EndpointFactory-DE6nKtFZ.d.cts} +12 -92
  33. package/dist/EndpointFactory-DE6nKtFZ.d.cts.map +1 -0
  34. package/dist/{index-V2nksZIJ.d.cts → EndpointFactory-T06kTFHg.d.mts} +12 -92
  35. package/dist/EndpointFactory-T06kTFHg.d.mts.map +1 -0
  36. package/dist/{EndpointFactory-ChxLZllA.cjs → EndpointFactory-vE2C1NG1.cjs} +57 -66
  37. package/dist/EndpointFactory-vE2C1NG1.cjs.map +1 -0
  38. package/dist/{HonoEndpointAdaptor-NKQQQbBY.mjs → HonoEndpointAdaptor-Be6UdK0r.mjs} +40 -47
  39. package/dist/{HonoEndpointAdaptor-D233Jvpk.cjs.map → HonoEndpointAdaptor-Be6UdK0r.mjs.map} +1 -1
  40. package/dist/{HonoEndpointAdaptor-D233Jvpk.cjs → HonoEndpointAdaptor-C9aivwKl.cjs} +48 -52
  41. package/dist/HonoEndpointAdaptor-C9aivwKl.cjs.map +1 -0
  42. package/dist/{Queue-D7ZuwBhy.d.cts → Queue-Bhzi2WQC.d.cts} +8 -9
  43. package/dist/Queue-Bhzi2WQC.d.cts.map +1 -0
  44. package/dist/{Queue-gVGfi2Yk.d.mts → Queue-BoUA-e83.d.mts} +9 -10
  45. package/dist/Queue-BoUA-e83.d.mts.map +1 -0
  46. package/dist/{Subscriber-2mEi0ImH.d.cts → Subscriber-CIO3pwji.d.mts} +7 -8
  47. package/dist/Subscriber-CIO3pwji.d.mts.map +1 -0
  48. package/dist/{Subscriber-xTJ9ayPN.d.mts → Subscriber-DQCaiOXF.d.cts} +7 -8
  49. package/dist/Subscriber-DQCaiOXF.d.cts.map +1 -0
  50. package/dist/{SubscriberBuilder-BjkbeT9l.mjs → SubscriberBuilder-B4YRTBng.mjs} +16 -10
  51. package/dist/SubscriberBuilder-B4YRTBng.mjs.map +1 -0
  52. package/dist/{SubscriberBuilder-4OPehf2R.cjs → SubscriberBuilder-C2bCOuPT.cjs} +28 -23
  53. package/dist/SubscriberBuilder-C2bCOuPT.cjs.map +1 -0
  54. package/dist/{SubscriberBuilder-Dptmo-1A.d.mts → SubscriberBuilder-ChX5v948.d.cts} +8 -11
  55. package/dist/SubscriberBuilder-ChX5v948.d.cts.map +1 -0
  56. package/dist/{SubscriberBuilder-waNhzjSM.d.cts → SubscriberBuilder-Dbiaskfi.d.mts} +8 -11
  57. package/dist/SubscriberBuilder-Dbiaskfi.d.mts.map +1 -0
  58. package/dist/{Topic-19QeHBIR.d.cts → Topic-D6blllEn.d.cts} +5 -7
  59. package/dist/Topic-D6blllEn.d.cts.map +1 -0
  60. package/dist/{Topic-DuFeqkBh.d.mts → Topic-DVvheJ_-.d.mts} +6 -8
  61. package/dist/Topic-DVvheJ_-.d.mts.map +1 -0
  62. package/dist/adaptors/aws.cjs +87 -106
  63. package/dist/adaptors/aws.cjs.map +1 -1
  64. package/dist/adaptors/aws.d.cts +14 -27
  65. package/dist/adaptors/aws.d.cts.map +1 -1
  66. package/dist/adaptors/aws.d.mts +16 -29
  67. package/dist/adaptors/aws.d.mts.map +1 -1
  68. package/dist/adaptors/aws.mjs +60 -81
  69. package/dist/adaptors/aws.mjs.map +1 -1
  70. package/dist/adaptors/hono.cjs +3 -10
  71. package/dist/adaptors/hono.d.cts +5 -13
  72. package/dist/adaptors/hono.d.cts.map +1 -1
  73. package/dist/adaptors/hono.d.mts +7 -15
  74. package/dist/adaptors/hono.d.mts.map +1 -1
  75. package/dist/adaptors/hono.mjs +2 -10
  76. package/dist/adaptors/testing.cjs +271 -82
  77. package/dist/adaptors/testing.cjs.map +1 -1
  78. package/dist/adaptors/testing.d.cts +62 -33
  79. package/dist/adaptors/testing.d.cts.map +1 -1
  80. package/dist/adaptors/testing.d.mts +63 -34
  81. package/dist/adaptors/testing.d.mts.map +1 -1
  82. package/dist/adaptors/testing.mjs +249 -63
  83. package/dist/adaptors/testing.mjs.map +1 -1
  84. package/dist/auth-BlO8MUkR.d.cts +123 -0
  85. package/dist/auth-BlO8MUkR.d.cts.map +1 -0
  86. package/dist/auth-CHWIdcQO.d.mts +123 -0
  87. package/dist/auth-CHWIdcQO.d.mts.map +1 -0
  88. package/dist/auth.cjs +41 -16
  89. package/dist/auth.cjs.map +1 -1
  90. package/dist/auth.d.cts +2 -108
  91. package/dist/auth.d.mts +2 -108
  92. package/dist/auth.mjs +32 -8
  93. package/dist/auth.mjs.map +1 -1
  94. package/dist/{cache-BrRz3fEB.d.mts → cache-AgQUMma6.d.mts} +3 -6
  95. package/dist/cache-AgQUMma6.d.mts.map +1 -0
  96. package/dist/{cache-BtZY_tHe.d.cts → cache-obq0fOIM.d.cts} +3 -6
  97. package/dist/cache-obq0fOIM.d.cts.map +1 -0
  98. package/dist/cache.cjs +68 -2
  99. package/dist/cache.cjs.map +1 -0
  100. package/dist/cache.d.cts +1 -2
  101. package/dist/cache.d.mts +1 -2
  102. package/dist/cache.mjs +67 -2
  103. package/dist/cache.mjs.map +1 -0
  104. package/dist/{clone-DblgEZZa.mjs → clone-EKNovYHu.mjs} +3 -3
  105. package/dist/clone-EKNovYHu.mjs.map +1 -0
  106. package/dist/{clone-Dy0cR2SZ.cjs → clone-UGJpvQnL.cjs} +7 -8
  107. package/dist/clone-UGJpvQnL.cjs.map +1 -0
  108. package/dist/{construct-interface-g5GM5pwR.d.mts → construct-interface-Clz7_BwB.d.mts} +15 -6
  109. package/dist/construct-interface-Clz7_BwB.d.mts.map +1 -0
  110. package/dist/{construct-interface-D9d4Gm4p.d.cts → construct-interface-DIaTNKax.d.cts} +15 -6
  111. package/dist/construct-interface-DIaTNKax.d.cts.map +1 -0
  112. package/dist/construct-interface.cjs +87 -7
  113. package/dist/construct-interface.cjs.map +1 -0
  114. package/dist/construct-interface.d.cts +2 -2
  115. package/dist/construct-interface.d.mts +2 -2
  116. package/dist/construct-interface.mjs +81 -2
  117. package/dist/construct-interface.mjs.map +1 -0
  118. package/dist/credential.cjs +43 -9
  119. package/dist/credential.cjs.map +1 -1
  120. package/dist/credential.d.cts +5 -8
  121. package/dist/credential.d.cts.map +1 -1
  122. package/dist/credential.d.mts +5 -8
  123. package/dist/credential.d.mts.map +1 -1
  124. package/dist/credential.mjs +36 -2
  125. package/dist/credential.mjs.map +1 -1
  126. package/dist/crons/index.cjs +68 -10
  127. package/dist/crons/index.cjs.map +1 -1
  128. package/dist/crons/index.d.cts +32 -14
  129. package/dist/crons/index.d.cts.map +1 -1
  130. package/dist/crons/index.d.mts +32 -14
  131. package/dist/crons/index.d.mts.map +1 -1
  132. package/dist/crons/index.mjs +66 -10
  133. package/dist/crons/index.mjs.map +1 -1
  134. package/dist/database/kysely.cjs +28 -14
  135. package/dist/database/kysely.cjs.map +1 -1
  136. package/dist/database/kysely.d.cts +2 -152
  137. package/dist/database/kysely.d.mts +2 -152
  138. package/dist/database/kysely.mjs +16 -4
  139. package/dist/database/kysely.mjs.map +1 -1
  140. package/dist/email.cjs +25 -12
  141. package/dist/email.cjs.map +1 -1
  142. package/dist/email.d.cts +3 -7
  143. package/dist/email.d.cts.map +1 -1
  144. package/dist/email.d.mts +3 -7
  145. package/dist/email.d.mts.map +1 -1
  146. package/dist/email.mjs +16 -3
  147. package/dist/email.mjs.map +1 -1
  148. package/dist/endpoints/index.cjs +7 -10
  149. package/dist/endpoints/index.d.cts +60 -7
  150. package/dist/endpoints/index.d.cts.map +1 -0
  151. package/dist/endpoints/index.d.mts +60 -7
  152. package/dist/endpoints/index.d.mts.map +1 -0
  153. package/dist/endpoints/index.mjs +5 -10
  154. package/dist/file-server.cjs +42 -10
  155. package/dist/file-server.cjs.map +1 -1
  156. package/dist/file-server.d.cts +6 -10
  157. package/dist/file-server.d.cts.map +1 -1
  158. package/dist/file-server.d.mts +6 -10
  159. package/dist/file-server.d.mts.map +1 -1
  160. package/dist/file-server.mjs +34 -2
  161. package/dist/file-server.mjs.map +1 -1
  162. package/dist/functions/index.cjs +2 -6
  163. package/dist/functions/index.d.cts +2 -4
  164. package/dist/functions/index.d.mts +2 -4
  165. package/dist/functions/index.mjs +2 -6
  166. package/dist/{functions-Bd3TPxid.cjs → functions-VnOTEp74.cjs} +309 -264
  167. package/dist/functions-VnOTEp74.cjs.map +1 -0
  168. package/dist/{functions-Cxbo-pEd.mjs → functions-faoJOUmr.mjs} +282 -234
  169. package/dist/functions-faoJOUmr.mjs.map +1 -0
  170. package/dist/index-CeEtxDmK.d.cts +79 -0
  171. package/dist/index-CeEtxDmK.d.cts.map +1 -0
  172. package/dist/index-CeEtxDmK.d.mts +79 -0
  173. package/dist/index-CeEtxDmK.d.mts.map +1 -0
  174. package/dist/{index-JSf9xNIJ.d.cts → index-DU3Twmwh.d.mts} +19 -24
  175. package/dist/index-DU3Twmwh.d.mts.map +1 -0
  176. package/dist/index-fnpjXiA-.d.mts +26 -0
  177. package/dist/index-fnpjXiA-.d.mts.map +1 -0
  178. package/dist/{index-CubPzHd9.d.mts → index-nBQT1tAh.d.cts} +19 -24
  179. package/dist/index-nBQT1tAh.d.cts.map +1 -0
  180. package/dist/index-tE_119SX.d.cts +26 -0
  181. package/dist/index-tE_119SX.d.cts.map +1 -0
  182. package/dist/index.cjs +3 -3
  183. package/dist/index.d.cts +4 -4
  184. package/dist/index.d.mts +4 -4
  185. package/dist/index.mjs +2 -3
  186. package/dist/kysely-CXi49zc2.d.cts +150 -0
  187. package/dist/kysely-CXi49zc2.d.cts.map +1 -0
  188. package/dist/kysely-D3-G5b0j.d.mts +150 -0
  189. package/dist/kysely-D3-G5b0j.d.mts.map +1 -0
  190. package/dist/{lazyAccessors-BoJN3SMd.mjs → lazyAccessors-BHtcqgz2.mjs} +22 -25
  191. package/dist/lazyAccessors-BHtcqgz2.mjs.map +1 -0
  192. package/dist/{lazyAccessors-e3j2oE2m.cjs → lazyAccessors-Dx9NLwJZ.cjs} +72 -76
  193. package/dist/lazyAccessors-Dx9NLwJZ.cjs.map +1 -0
  194. package/dist/object-storage.cjs +18 -10
  195. package/dist/object-storage.cjs.map +1 -1
  196. package/dist/object-storage.d.cts +3 -7
  197. package/dist/object-storage.d.cts.map +1 -1
  198. package/dist/object-storage.d.mts +3 -7
  199. package/dist/object-storage.d.mts.map +1 -1
  200. package/dist/object-storage.mjs +11 -3
  201. package/dist/object-storage.mjs.map +1 -1
  202. package/dist/{processAudits-Dmts9H_b.mjs → processAudits-BpRlPQMW.mjs} +16 -19
  203. package/dist/processAudits-BpRlPQMW.mjs.map +1 -0
  204. package/dist/{processAudits-CGqttuXm.cjs → processAudits-D_2W5x8k.cjs} +26 -30
  205. package/dist/processAudits-D_2W5x8k.cjs.map +1 -0
  206. package/dist/queue/index.cjs +25 -21
  207. package/dist/queue/index.cjs.map +1 -1
  208. package/dist/queue/index.d.cts +8 -15
  209. package/dist/queue/index.d.cts.map +1 -1
  210. package/dist/queue/index.d.mts +8 -15
  211. package/dist/queue/index.d.mts.map +1 -1
  212. package/dist/queue/index.mjs +15 -11
  213. package/dist/queue/index.mjs.map +1 -1
  214. package/dist/rest-api.cjs +88 -62
  215. package/dist/rest-api.cjs.map +1 -1
  216. package/dist/rest-api.d.cts +62 -60
  217. package/dist/rest-api.d.cts.map +1 -1
  218. package/dist/rest-api.d.mts +62 -60
  219. package/dist/rest-api.d.mts.map +1 -1
  220. package/dist/rest-api.mjs +80 -54
  221. package/dist/rest-api.mjs.map +1 -1
  222. package/dist/{chunk-DWy1uDak.cjs → rolldown-runtime-y5ARvAq5.cjs} +14 -18
  223. package/dist/site.cjs +33 -9
  224. package/dist/site.cjs.map +1 -1
  225. package/dist/site.d.cts +11 -22
  226. package/dist/site.d.cts.map +1 -1
  227. package/dist/site.d.mts +11 -22
  228. package/dist/site.d.mts.map +1 -1
  229. package/dist/site.mjs +29 -5
  230. package/dist/site.mjs.map +1 -1
  231. package/dist/subscribers/index.cjs +2 -11
  232. package/dist/subscribers/index.d.cts +3 -14
  233. package/dist/subscribers/index.d.mts +3 -14
  234. package/dist/subscribers/index.mjs +2 -11
  235. package/dist/surfaceEnv-CNimK76p.cjs +56 -0
  236. package/dist/surfaceEnv-CNimK76p.cjs.map +1 -0
  237. package/dist/surfaceEnv-wMT5QzgZ.mjs +45 -0
  238. package/dist/surfaceEnv-wMT5QzgZ.mjs.map +1 -0
  239. package/dist/{telemetry-C3L0iS28.d.cts → telemetry-DGcFlVpB.d.cts} +2 -5
  240. package/dist/telemetry-DGcFlVpB.d.cts.map +1 -0
  241. package/dist/{telemetry-D7bVFLGi.d.mts → telemetry-DGcFlVpB.d.mts} +2 -5
  242. package/dist/telemetry-DGcFlVpB.d.mts.map +1 -0
  243. package/dist/topic/index.cjs +18 -20
  244. package/dist/topic/index.cjs.map +1 -1
  245. package/dist/topic/index.d.cts +3 -32
  246. package/dist/topic/index.d.mts +3 -32
  247. package/dist/topic/index.mjs +8 -10
  248. package/dist/topic/index.mjs.map +1 -1
  249. package/dist/{types-BlAkSuGI.d.cts → types-DMuSQeLL.d.cts} +3 -5
  250. package/dist/types-DMuSQeLL.d.cts.map +1 -0
  251. package/dist/{types-aKksMEWL.d.mts → types-DMuSQeLL.d.mts} +3 -5
  252. package/dist/types-DMuSQeLL.d.mts.map +1 -0
  253. package/dist/types.d.cts +1 -1
  254. package/dist/types.d.mts +1 -1
  255. package/dist/types.mjs +1 -0
  256. package/dist/worker.cjs +109 -35
  257. package/dist/worker.cjs.map +1 -1
  258. package/dist/worker.d.cts +87 -42
  259. package/dist/worker.d.cts.map +1 -1
  260. package/dist/worker.d.mts +87 -42
  261. package/dist/worker.d.mts.map +1 -1
  262. package/dist/worker.mjs +104 -30
  263. package/dist/worker.mjs.map +1 -1
  264. package/package.json +59 -55
  265. package/dist/Construct-BD5neF7w.mjs.map +0 -1
  266. package/dist/Construct-C0ijr2qp.d.cts.map +0 -1
  267. package/dist/Construct-Ct8nalEi.d.mts.map +0 -1
  268. package/dist/Construct-CyS3RpTL.cjs.map +0 -1
  269. package/dist/Cron-ByxdOfpE.d.mts.map +0 -1
  270. package/dist/Cron-Wqh464aO.d.cts.map +0 -1
  271. package/dist/CronBuilder-BL0AP6fs.d.mts.map +0 -1
  272. package/dist/CronBuilder-BmABazzH.mjs.map +0 -1
  273. package/dist/CronBuilder-BqpEzMPQ.d.cts.map +0 -1
  274. package/dist/CronBuilder-CkXPJiGO.cjs.map +0 -1
  275. package/dist/Endpoint-2Wg7T7Cq.d.mts.map +0 -1
  276. package/dist/Endpoint-BiaaMEn_.cjs.map +0 -1
  277. package/dist/Endpoint-CH9Fn1AD.d.cts.map +0 -1
  278. package/dist/Endpoint-VIOpSo0S.mjs.map +0 -1
  279. package/dist/EndpointFactory-ChxLZllA.cjs.map +0 -1
  280. package/dist/EndpointFactory-DTTCkGEL.mjs.map +0 -1
  281. package/dist/HonoEndpointAdaptor-NKQQQbBY.mjs.map +0 -1
  282. package/dist/Queue-D7ZuwBhy.d.cts.map +0 -1
  283. package/dist/Queue-gVGfi2Yk.d.mts.map +0 -1
  284. package/dist/Subscriber-2mEi0ImH.d.cts.map +0 -1
  285. package/dist/Subscriber-xTJ9ayPN.d.mts.map +0 -1
  286. package/dist/SubscriberBuilder-4OPehf2R.cjs.map +0 -1
  287. package/dist/SubscriberBuilder-BjkbeT9l.mjs.map +0 -1
  288. package/dist/SubscriberBuilder-Dptmo-1A.d.mts.map +0 -1
  289. package/dist/SubscriberBuilder-waNhzjSM.d.cts.map +0 -1
  290. package/dist/Topic-19QeHBIR.d.cts.map +0 -1
  291. package/dist/Topic-DuFeqkBh.d.mts.map +0 -1
  292. package/dist/auth.d.cts.map +0 -1
  293. package/dist/auth.d.mts.map +0 -1
  294. package/dist/cache-0ANvRQnD.mjs +0 -51
  295. package/dist/cache-0ANvRQnD.mjs.map +0 -1
  296. package/dist/cache-3WSvAulx.cjs +0 -57
  297. package/dist/cache-3WSvAulx.cjs.map +0 -1
  298. package/dist/cache-BrRz3fEB.d.mts.map +0 -1
  299. package/dist/cache-BtZY_tHe.d.cts.map +0 -1
  300. package/dist/clone-DblgEZZa.mjs.map +0 -1
  301. package/dist/clone-Dy0cR2SZ.cjs.map +0 -1
  302. package/dist/construct-interface-BfjcOD_E.cjs +0 -117
  303. package/dist/construct-interface-BfjcOD_E.cjs.map +0 -1
  304. package/dist/construct-interface-D9d4Gm4p.d.cts.map +0 -1
  305. package/dist/construct-interface-Z4CpS8tK.mjs +0 -81
  306. package/dist/construct-interface-Z4CpS8tK.mjs.map +0 -1
  307. package/dist/construct-interface-g5GM5pwR.d.mts.map +0 -1
  308. package/dist/database/kysely.d.cts.map +0 -1
  309. package/dist/database/kysely.d.mts.map +0 -1
  310. package/dist/functions-Bd3TPxid.cjs.map +0 -1
  311. package/dist/functions-Cxbo-pEd.mjs.map +0 -1
  312. package/dist/index-BxHDdy6a.d.mts.map +0 -1
  313. package/dist/index-CubPzHd9.d.mts.map +0 -1
  314. package/dist/index-JSf9xNIJ.d.cts.map +0 -1
  315. package/dist/index-V2nksZIJ.d.cts.map +0 -1
  316. package/dist/lazyAccessors-BoJN3SMd.mjs.map +0 -1
  317. package/dist/lazyAccessors-e3j2oE2m.cjs.map +0 -1
  318. package/dist/processAudits-CGqttuXm.cjs.map +0 -1
  319. package/dist/processAudits-Dmts9H_b.mjs.map +0 -1
  320. package/dist/subscribers/index.cjs.map +0 -1
  321. package/dist/subscribers/index.d.cts.map +0 -1
  322. package/dist/subscribers/index.d.mts.map +0 -1
  323. package/dist/subscribers/index.mjs.map +0 -1
  324. package/dist/surfaceEnv-BFXEms2f.cjs +0 -39
  325. package/dist/surfaceEnv-BFXEms2f.cjs.map +0 -1
  326. package/dist/surfaceEnv-C3Ktahea.mjs +0 -27
  327. package/dist/surfaceEnv-C3Ktahea.mjs.map +0 -1
  328. package/dist/telemetry-C3L0iS28.d.cts.map +0 -1
  329. package/dist/telemetry-D7bVFLGi.d.mts.map +0 -1
  330. package/dist/topic/index.d.cts.map +0 -1
  331. package/dist/topic/index.d.mts.map +0 -1
  332. package/dist/types-BlAkSuGI.d.cts.map +0 -1
  333. package/dist/types-aKksMEWL.d.mts.map +0 -1
@@ -1,26 +1,27 @@
1
- const require_chunk = require('../chunk-DWy1uDak.cjs');
2
- require('../construct-interface-BfjcOD_E.cjs');
3
- require('../Construct-CyS3RpTL.cjs');
4
- const require_functions = require('../functions-Bd3TPxid.cjs');
5
- require('../clone-Dy0cR2SZ.cjs');
6
- const require_Endpoint = require('../Endpoint-BiaaMEn_.cjs');
7
- const require_lazyAccessors = require('../lazyAccessors-e3j2oE2m.cjs');
8
- const require_processAudits = require('../processAudits-CGqttuXm.cjs');
9
- const require_HonoEndpointAdaptor = require('../HonoEndpointAdaptor-D233Jvpk.cjs');
10
- const __geekmidas_errors = require_chunk.__toESM(require("@geekmidas/errors"));
11
- const __geekmidas_envkit = require_chunk.__toESM(require("@geekmidas/envkit"));
12
- const __geekmidas_services = require_chunk.__toESM(require("@geekmidas/services"));
13
- const __geekmidas_audit = require_chunk.__toESM(require("@geekmidas/audit"));
14
- const hono = require_chunk.__toESM(require("hono"));
15
- const msw = require_chunk.__toESM(require("msw"));
16
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_auth = require("../auth.cjs");
3
+ const require_functions = require("../functions-VnOTEp74.cjs");
4
+ const require_Endpoint = require("../Endpoint-CtiPUpRX.cjs");
5
+ const require_email = require("../email.cjs");
6
+ const require_database_kysely = require("../database/kysely.cjs");
7
+ const require_lazyAccessors = require("../lazyAccessors-Dx9NLwJZ.cjs");
8
+ const require_HonoEndpointAdaptor = require("../HonoEndpointAdaptor-C9aivwKl.cjs");
9
+ const require_processAudits = require("../processAudits-D_2W5x8k.cjs");
10
+ let _geekmidas_manifest = require("@geekmidas/manifest");
11
+ let _geekmidas_errors = require("@geekmidas/errors");
12
+ let _geekmidas_envkit = require("@geekmidas/envkit");
13
+ let _geekmidas_services = require("@geekmidas/services");
14
+ let hono = require("hono");
15
+ let _geekmidas_audit = require("@geekmidas/audit");
16
+ let _geekmidas_testkit_context = require("@geekmidas/testkit/context");
17
+ let msw = require("msw");
18
+ let node_crypto = require("node:crypto");
19
+ let _geekmidas_testkit_browser = require("@geekmidas/testkit/browser");
20
+ let _geekmidas_testkit_mailbox = require("@geekmidas/testkit/mailbox");
21
+ let _geekmidas_testkit_transactions = require("@geekmidas/testkit/transactions");
22
+ let msw_node = require("msw/node");
23
+ let vitest = require("vitest");
17
24
  //#region src/endpoints/MswEndpointAdaptor.ts
18
- /**
19
- * Header used to identify which test context a request belongs to.
20
- * Each concurrent test registers its own context (services, db transaction, etc.)
21
- * and the MSW handler looks it up by this header value.
22
- */
23
- const TEST_CONTEXT_HEADER = "x-test-context-id";
24
25
  const MSW_HTTP_METHODS = [
25
26
  "get",
26
27
  "post",
@@ -52,8 +53,8 @@ function createMswHandlers(endpoints, options) {
52
53
  * Creates a fresh ServiceDiscovery and pre-registers all provided services.
53
54
  */
54
55
  function registerContext(id, ctxOptions) {
55
- const envParser = new __geekmidas_envkit.EnvironmentParser({});
56
- const serviceDiscovery = new __geekmidas_services.ServiceDiscovery(envParser);
56
+ const envParser = new _geekmidas_envkit.EnvironmentParser({});
57
+ const serviceDiscovery = new _geekmidas_services.ServiceDiscovery(envParser);
57
58
  const serviceDefs = [];
58
59
  if (ctxOptions.services) for (const [name, instance] of Object.entries(ctxOptions.services)) serviceDefs.push({
59
60
  serviceName: name,
@@ -88,11 +89,11 @@ function createMswHandlers(endpoints, options) {
88
89
  const mswUrl = `${baseURL}${endpoint.route}`;
89
90
  const mswMethod = msw.http[method];
90
91
  handlers.push(mswMethod(mswUrl, async ({ request }) => {
91
- const contextId = request.headers.get(TEST_CONTEXT_HEADER);
92
+ const contextId = request.headers.get(_geekmidas_testkit_context.TEST_CONTEXT_HEADER);
92
93
  const ctx = contextId ? contexts.get(contextId) : void 0;
93
94
  if (!ctx) return new Response(JSON.stringify({
94
95
  error: "Missing or unknown test context ID",
95
- hint: `Set the '${TEST_CONTEXT_HEADER}' header to a registered context ID`
96
+ hint: `Set the '${_geekmidas_testkit_context.TEST_CONTEXT_HEADER}' header to a registered context ID`
96
97
  }), {
97
98
  status: 500,
98
99
  headers: { "content-type": "application/json" }
@@ -112,7 +113,6 @@ function createMswHandlers(endpoints, options) {
112
113
  registerContext
113
114
  };
114
115
  }
115
-
116
116
  //#endregion
117
117
  //#region src/endpoints/TestEndpointAdaptor.ts
118
118
  /**
@@ -132,8 +132,10 @@ function serializeCookie(name, value, options) {
132
132
  return cookieString;
133
133
  }
134
134
  var TestEndpointAdaptor = class TestEndpointAdaptor {
135
+ endpoint;
136
+ serviceDiscovery;
135
137
  static getDefaultServiceDiscover(_endpoint) {
136
- return __geekmidas_services.ServiceDiscovery.getInstance(new __geekmidas_envkit.EnvironmentParser({}));
138
+ return _geekmidas_services.ServiceDiscovery.getInstance(new _geekmidas_envkit.EnvironmentParser({}));
137
139
  }
138
140
  constructor(endpoint, serviceDiscovery = TestEndpointAdaptor.getDefaultServiceDiscover(endpoint)) {
139
141
  this.endpoint = endpoint;
@@ -154,7 +156,7 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
154
156
  method: this.endpoint.method
155
157
  });
156
158
  const rawDb = ctx.database;
157
- return (0, __geekmidas_services.runWithRequestContext)({
159
+ return (0, _geekmidas_services.runWithRequestContext)({
158
160
  logger,
159
161
  requestId,
160
162
  startTime
@@ -166,7 +168,7 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
166
168
  cookie,
167
169
  ...rawDb !== void 0 && { db: rawDb }
168
170
  });
169
- const isAuthorized = await this.endpoint.authorize({
171
+ if (!await this.endpoint.authorize({
170
172
  header,
171
173
  cookie,
172
174
  services: ctx.services,
@@ -176,10 +178,9 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
176
178
  body,
177
179
  query,
178
180
  params
179
- });
180
- if (!isAuthorized) {
181
+ })) {
181
182
  logger.warn("Forbidden access attempt");
182
- throw new __geekmidas_errors.ForbiddenError("Forbidden access to the endpoint", "You do not have permission to access this resource.");
183
+ throw new _geekmidas_errors.ForbiddenError("Forbidden access to the endpoint", "You do not have permission to access this resource.");
183
184
  }
184
185
  const auditorStorage = ctx.auditorStorage;
185
186
  let auditContext;
@@ -199,24 +200,22 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
199
200
  } catch (error) {
200
201
  logger.error(error, "Failed to extract actor for audits");
201
202
  }
202
- const auditor = new __geekmidas_audit.DefaultAuditor({
203
- actor,
204
- storage: auditorStorage,
205
- metadata: {
206
- endpoint: this.endpoint.route,
207
- method: this.endpoint.method
208
- }
209
- });
210
203
  auditContext = {
211
- auditor,
204
+ auditor: new _geekmidas_audit.DefaultAuditor({
205
+ actor,
206
+ storage: auditorStorage,
207
+ metadata: {
208
+ endpoint: this.endpoint.route,
209
+ method: this.endpoint.method
210
+ }
211
+ }),
212
212
  storage: auditorStorage
213
213
  };
214
214
  }
215
215
  const audits = this.endpoint.audits;
216
216
  if (!auditContext && audits?.length) logger.warn("No auditor storage service available");
217
- const result = await require_processAudits.executeWithAuditTransaction(auditContext, async (auditor) => {
218
- const trx = auditor?.getTransaction?.();
219
- const db = trx ?? rawDb;
217
+ const { output, metadata } = await require_processAudits.executeWithAuditTransaction(auditContext, async (auditor) => {
218
+ const db = auditor?.getTransaction?.() ?? rawDb;
220
219
  const responseBuilder = new require_Endpoint.ResponseBuilder();
221
220
  const response = await this.endpoint.handler({
222
221
  body,
@@ -231,36 +230,34 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
231
230
  db
232
231
  }, responseBuilder);
233
232
  let data = response;
234
- let metadata$1 = responseBuilder.getMetadata();
233
+ let metadata = responseBuilder.getMetadata();
235
234
  if (require_Endpoint.Endpoint.hasMetadata(response)) {
236
235
  data = response.data;
237
- metadata$1 = response.metadata;
236
+ metadata = response.metadata;
238
237
  }
239
- const output$1 = await this.endpoint.parseOutput(data);
240
238
  return {
241
- output: output$1,
242
- metadata: metadata$1,
239
+ output: await this.endpoint.parseOutput(data),
240
+ metadata,
243
241
  responseBuilder
244
242
  };
245
- }, async (result$1, auditor) => {
243
+ }, async (result, auditor) => {
246
244
  if (!audits?.length) return;
247
245
  for (const audit of audits) {
248
- if (audit.when && !audit.when(result$1.output)) continue;
249
- const payload = audit.payload(result$1.output);
250
- const entityId = audit.entityId?.(result$1.output);
246
+ if (audit.when && !audit.when(result.output)) continue;
247
+ const payload = audit.payload(result.output);
248
+ const entityId = audit.entityId?.(result.output);
251
249
  auditor.audit(audit.type, payload, {
252
250
  table: audit.table,
253
251
  entityId
254
252
  });
255
253
  }
256
254
  }, { db: rawDb });
257
- const { output, metadata } = result;
258
255
  ctx.publisher && await this.serviceDiscovery.register([ctx.publisher]);
259
256
  await require_lazyAccessors.publishConstructEvents(this.endpoint, output, this.serviceDiscovery);
260
257
  const headers = { ...metadata.headers || {} };
261
258
  if (metadata.cookies && metadata.cookies.size > 0) {
262
259
  const setCookieValues = [];
263
- for (const [name, cookie$1] of metadata.cookies.entries()) setCookieValues.push(serializeCookie(name, cookie$1.value, cookie$1.options));
260
+ for (const [name, cookie] of metadata.cookies.entries()) setCookieValues.push(serializeCookie(name, cookie.value, cookie.options));
264
261
  headers["set-cookie"] = setCookieValues;
265
262
  }
266
263
  return {
@@ -271,16 +268,16 @@ var TestEndpointAdaptor = class TestEndpointAdaptor {
271
268
  });
272
269
  }
273
270
  async request(ctx) {
274
- const response = await this.fullRequest(ctx);
275
- return response.body;
271
+ return (await this.fullRequest(ctx)).body;
276
272
  }
277
273
  };
278
-
279
274
  //#endregion
280
275
  //#region src/functions/TestFunctionAdaptor.ts
281
276
  var TestFunctionAdaptor = class TestFunctionAdaptor {
277
+ fn;
278
+ serviceDiscovery;
282
279
  static getDefaultServiceDiscovery(_fn) {
283
- return __geekmidas_services.ServiceDiscovery.getInstance(new __geekmidas_envkit.EnvironmentParser({}));
280
+ return _geekmidas_services.ServiceDiscovery.getInstance(new _geekmidas_envkit.EnvironmentParser({}));
284
281
  }
285
282
  constructor(fn, serviceDiscovery = TestFunctionAdaptor.getDefaultServiceDiscovery(fn)) {
286
283
  this.fn = fn;
@@ -294,16 +291,12 @@ var TestFunctionAdaptor = class TestFunctionAdaptor {
294
291
  else services = await this.serviceDiscovery.register(this.fn.services);
295
292
  let db;
296
293
  if ("db" in ctx && ctx.db !== void 0) db = ctx.db;
297
- else if (this.fn.databaseService) {
298
- const dbServices = await this.serviceDiscovery.register([this.fn.databaseService]);
299
- db = dbServices[this.fn.databaseService.serviceName];
300
- }
294
+ else if (this.fn.databaseService) db = (await this.serviceDiscovery.register([this.fn.databaseService]))[this.fn.databaseService.serviceName];
301
295
  let auditor;
302
296
  if ("auditor" in ctx && ctx.auditor !== void 0) auditor = ctx.auditor;
303
297
  else if (this.fn.auditorStorageService) {
304
- const auditServices = await this.serviceDiscovery.register([this.fn.auditorStorageService]);
305
- const storage = auditServices[this.fn.auditorStorageService.serviceName];
306
- auditor = new __geekmidas_audit.DefaultAuditor({
298
+ const storage = (await this.serviceDiscovery.register([this.fn.auditorStorageService]))[this.fn.auditorStorageService.serviceName];
299
+ auditor = new _geekmidas_audit.DefaultAuditor({
307
300
  actor: {
308
301
  id: "system",
309
302
  type: "system"
@@ -316,11 +309,10 @@ var TestFunctionAdaptor = class TestFunctionAdaptor {
316
309
  });
317
310
  }
318
311
  const requestId = `test-${Date.now()}`;
319
- const startTime = Date.now();
320
- return (0, __geekmidas_services.runWithRequestContext)({
312
+ return (0, _geekmidas_services.runWithRequestContext)({
321
313
  logger,
322
314
  requestId,
323
- startTime
315
+ startTime: Date.now()
324
316
  }, async () => {
325
317
  const response = await this.fn.fn({
326
318
  input: parsedInput,
@@ -342,7 +334,6 @@ var TestFunctionAdaptor = class TestFunctionAdaptor {
342
334
  });
343
335
  }
344
336
  };
345
-
346
337
  //#endregion
347
338
  //#region src/queue/TestQueueAdaptor.ts
348
339
  /**
@@ -355,8 +346,10 @@ var TestFunctionAdaptor = class TestFunctionAdaptor {
355
346
  * await adapter.invoke({ messages: [{ orderId: '123' }] });
356
347
  */
357
348
  var TestQueueAdaptor = class TestQueueAdaptor {
349
+ queue;
350
+ serviceDiscovery;
358
351
  static getDefaultServiceDiscovery() {
359
- return __geekmidas_services.ServiceDiscovery.getInstance(new __geekmidas_envkit.EnvironmentParser({}));
352
+ return _geekmidas_services.ServiceDiscovery.getInstance(new _geekmidas_envkit.EnvironmentParser({}));
360
353
  }
361
354
  constructor(queue, serviceDiscovery = TestQueueAdaptor.getDefaultServiceDiscovery()) {
362
355
  this.queue = queue;
@@ -366,11 +359,10 @@ var TestQueueAdaptor = class TestQueueAdaptor {
366
359
  const logger = this.queue.logger.child({ test: true });
367
360
  const services = request.services ?? await this.serviceDiscovery.register(this.queue.services);
368
361
  const requestId = `test-${Date.now()}`;
369
- const startTime = Date.now();
370
- return (0, __geekmidas_services.runWithRequestContext)({
362
+ return (0, _geekmidas_services.runWithRequestContext)({
371
363
  logger,
372
364
  requestId,
373
- startTime
365
+ startTime: Date.now()
374
366
  }, () => this.queue.handler({
375
367
  messages: request.messages,
376
368
  services,
@@ -378,12 +370,13 @@ var TestQueueAdaptor = class TestQueueAdaptor {
378
370
  }));
379
371
  }
380
372
  };
381
-
382
373
  //#endregion
383
374
  //#region src/subscribers/TestSubscriberAdaptor.ts
384
375
  var TestSubscriberAdaptor = class TestSubscriberAdaptor {
376
+ subscriber;
377
+ serviceDiscovery;
385
378
  static getDefaultServiceDiscovery() {
386
- return __geekmidas_services.ServiceDiscovery.getInstance(new __geekmidas_envkit.EnvironmentParser({}));
379
+ return _geekmidas_services.ServiceDiscovery.getInstance(new _geekmidas_envkit.EnvironmentParser({}));
387
380
  }
388
381
  constructor(subscriber, serviceDiscovery = TestSubscriberAdaptor.getDefaultServiceDiscovery()) {
389
382
  this.subscriber = subscriber;
@@ -397,11 +390,10 @@ var TestSubscriberAdaptor = class TestSubscriberAdaptor {
397
390
  const filteredEvents = this.filterEvents(request.events);
398
391
  if (filteredEvents.length === 0) return { batchItemFailures: [] };
399
392
  const requestId = `test-${Date.now()}`;
400
- const startTime = Date.now();
401
- return (0, __geekmidas_services.runWithRequestContext)({
393
+ return (0, _geekmidas_services.runWithRequestContext)({
402
394
  logger,
403
395
  requestId,
404
- startTime
396
+ startTime: Date.now()
405
397
  }, async () => {
406
398
  const result = await this.subscriber.handler({
407
399
  events: filteredEvents,
@@ -423,12 +415,209 @@ var TestSubscriberAdaptor = class TestSubscriberAdaptor {
423
415
  return events.filter((event) => this.subscriber.subscribedEvents.includes(event.type));
424
416
  }
425
417
  };
426
-
427
418
  //#endregion
428
- exports.TEST_CONTEXT_HEADER = TEST_CONTEXT_HEADER;
419
+ //#region src/testing/featureTest.ts
420
+ /**
421
+ * `featureTest`: an app, driven the way it runs deployed.
422
+ *
423
+ * A browser signs in and calls the API; the API calls the auth server; each
424
+ * over its URL, each database in its own transaction. Nothing runs as a server:
425
+ * every URL an app's constructs answer on is served in-process through MSW,
426
+ * from the real handler, for the test that made the request. Everything else
427
+ * with a real local equivalent — Postgres, Mailpit, MinIO — is used directly.
428
+ *
429
+ * ```ts
430
+ * // test/config.ts
431
+ * export const it = featureTest({
432
+ * modules: import.meta.glob(['../../constructs/*.ts', '../src/endpoints/**\/*.ts'], { eager: true }),
433
+ * database,
434
+ * browser: Browser,
435
+ * });
436
+ *
437
+ * // a test
438
+ * it('shows the signed-in user their profile', async ({ browser, mailbox }) => {
439
+ * await browser.auth.signIn.magicLink({ email: 'ada@shop.test' });
440
+ * await browser.visit((await mailbox('ada@shop.test').last()).link!);
441
+ * expect(await browser.api.get('/profile')).toMatchObject({ email: 'ada@shop.test' });
442
+ * });
443
+ * ```
444
+ */
445
+ /** Every test in flight in this process, by id. */
446
+ const contexts = /* @__PURE__ */ new Map();
447
+ /** Databases already resolving to test transactions — patched once each. */
448
+ const bound = /* @__PURE__ */ new WeakSet();
449
+ function featureTest(options) {
450
+ const env = options.env ?? process.env;
451
+ const envParser = new _geekmidas_envkit.EnvironmentParser({ ...env });
452
+ const found = discover(options.modules);
453
+ const BrowserClass = options.browser ?? _geekmidas_testkit_browser.Browser;
454
+ for (const database of found.databases) bindToTests(database);
455
+ const network = (0, msw_node.setupServer)(...surfaceHandlers(found.endpoints, env), ...found.auths.map((auth) => authHandler(auth, env, envParser)));
456
+ const inbox = found.emails.map((email) => env[(0, _geekmidas_manifest.provideKey)(email.id, "inboxUrl")]).find(Boolean);
457
+ const readMail = inbox ? (0, _geekmidas_testkit_mailbox.createMailbox)({ inbox }) : void 0;
458
+ let restoreFetch = () => {};
459
+ (0, vitest.beforeAll)(() => {
460
+ network.listen({ onUnhandledRequest(request, print) {
461
+ if (isLocal(new URL(request.url))) return;
462
+ print.error();
463
+ } });
464
+ restoreFetch = (0, _geekmidas_testkit_context.installContextFetch)();
465
+ });
466
+ (0, vitest.afterAll)(() => {
467
+ restoreFetch();
468
+ network.close();
469
+ });
470
+ const run = (fn) => async () => {
471
+ const id = (0, node_crypto.randomUUID)();
472
+ const state = {
473
+ transactions: new _geekmidas_testkit_transactions.TransactionRegistry(),
474
+ discovery: new _geekmidas_services.ServiceDiscovery(envParser),
475
+ surfaces: /* @__PURE__ */ new Map(),
476
+ auth: /* @__PURE__ */ new Map(),
477
+ addresses: /* @__PURE__ */ new Set()
478
+ };
479
+ contexts.set(id, state);
480
+ try {
481
+ await (0, _geekmidas_testkit_context.runInTestContext)(id, async () => {
482
+ const browser = new BrowserClass();
483
+ const restore = browser.install();
484
+ try {
485
+ await fn({
486
+ browser,
487
+ db: options.database ? await state.transactions.get(options.database.id, urlOf(options.database, envParser)) : void 0,
488
+ mailbox: (address) => {
489
+ if (!readMail) throw new NoInbox();
490
+ state.addresses.add(address);
491
+ return readMail(address);
492
+ }
493
+ });
494
+ } finally {
495
+ restore();
496
+ }
497
+ });
498
+ } finally {
499
+ contexts.delete(id);
500
+ await Promise.all([state.transactions.rollbackAll(), ...[...state.addresses].map((address) => readMail?.(address).clear())]);
501
+ }
502
+ };
503
+ const it = ((name, fn, timeout) => (0, vitest.test)(name, run(fn), timeout));
504
+ it.only = (name, fn, timeout) => vitest.test.only(name, run(fn), timeout);
505
+ it.skip = (name, fn, timeout) => vitest.test.skip(name, run(fn), timeout);
506
+ return it;
507
+ }
508
+ /** What an app's modules export, sorted by what a test does with it. */
509
+ function discover(modules) {
510
+ const values = (Array.isArray(modules) ? modules : Object.values(modules)).flatMap((module) => module && typeof module === "object" ? Object.values(module) : []);
511
+ return {
512
+ endpoints: values.filter((value) => require_Endpoint.Endpoint.isEndpoint(value)),
513
+ databases: values.filter((value) => value instanceof require_database_kysely.KyselyDatabase),
514
+ auths: values.filter((value) => value instanceof require_auth.BetterAuth),
515
+ emails: values.filter((value) => value instanceof require_email.Email)
516
+ };
517
+ }
518
+ /**
519
+ * Make a database resolve, inside a test, to that test's transaction.
520
+ *
521
+ * Everything reaches a database through its service — an endpoint through
522
+ * service discovery, the auth server through its tenant directly — so this is
523
+ * the one place a test's connection can be handed over. Outside a test it is
524
+ * the database it always was.
525
+ */
526
+ function bindToTests(database) {
527
+ if (bound.has(database)) return;
528
+ bound.add(database);
529
+ const service = database.service;
530
+ const register = service.register;
531
+ service.register = (options) => {
532
+ const context = (0, _geekmidas_testkit_context.currentTestContext)();
533
+ const state = context && contexts.get(context.id);
534
+ if (!state) return register(options);
535
+ return state.transactions.get(database.id, urlOf(database, options.envParser));
536
+ };
537
+ }
538
+ function urlOf(database, envParser) {
539
+ return envParser.create((get) => ({ url: get((0, _geekmidas_manifest.provideKey)(database.id, "url")).string() })).parse().url;
540
+ }
541
+ /** Each surface's endpoints, served at its URL for the test that asked. */
542
+ function surfaceHandlers(endpoints, env) {
543
+ const bySurface = /* @__PURE__ */ new Map();
544
+ for (const endpoint of endpoints) {
545
+ const surface = endpoint.surface?.id;
546
+ if (!surface) continue;
547
+ bySurface.set(surface, [...bySurface.get(surface) ?? [], endpoint]);
548
+ }
549
+ return [...bySurface].flatMap(([surface, served]) => {
550
+ const base = env[(0, _geekmidas_manifest.provideKey)(surface, "url")];
551
+ if (!base) return [];
552
+ return msw.http.all(`${trim(base)}/*`, ({ request }) => serve(request, async (state) => {
553
+ let app = state.surfaces.get(surface);
554
+ if (!app) {
555
+ app = Promise.resolve().then(() => {
556
+ const hono$1 = new hono.Hono();
557
+ require_HonoEndpointAdaptor.HonoEndpoint.addRoutes(served, state.discovery, hono$1);
558
+ return hono$1;
559
+ });
560
+ state.surfaces.set(surface, app);
561
+ }
562
+ return (await app).fetch(request);
563
+ }));
564
+ });
565
+ }
566
+ /** An auth server, served at its URL, on the transaction of the test that asked. */
567
+ function authHandler(auth, env, envParser) {
568
+ const base = trim(env[(0, _geekmidas_manifest.provideKey)(auth.id, "url")] ?? "");
569
+ return msw.http.all(`${base}${auth.basePath}/*`, ({ request }) => serve(request, async (state) => {
570
+ let app = state.auth.get(auth);
571
+ if (!app) {
572
+ app = auth.server({
573
+ envParser,
574
+ context: _geekmidas_services.serviceContext
575
+ }).then(({ app }) => app);
576
+ state.auth.set(auth, app);
577
+ }
578
+ return (await app).fetch(request);
579
+ }));
580
+ }
581
+ /** Handle a request as the server side of the test it was made for. */
582
+ async function serve(request, handle) {
583
+ const id = (0, _geekmidas_testkit_context.testContextOf)(request);
584
+ const state = id ? contexts.get(id) : void 0;
585
+ if (!id || !state) throw new UnknownTestContext(request.url, id);
586
+ return (0, _geekmidas_testkit_context.runAsServer)(id, () => handle(state));
587
+ }
588
+ function trim(url) {
589
+ return url.replace(/\/$/, "");
590
+ }
591
+ function isLocal(url) {
592
+ return url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname.endsWith(".localhost");
593
+ }
594
+ /** A request reached an in-process server without a test to belong to. */
595
+ var UnknownTestContext = class extends Error {
596
+ url;
597
+ id;
598
+ constructor(url, id) {
599
+ super(id ? `${url} was requested for test ${id}, which is not running. A request that outlives its test — an un-awaited call — lands here.` : `${url} was requested outside any test. Make the request inside a featureTest, so it reaches that test's transactions.`);
600
+ this.url = url;
601
+ this.id = id;
602
+ this.name = "UnknownTestContext";
603
+ }
604
+ };
605
+ /** `mailbox` was used in an app that declares no Email construct. */
606
+ var NoInbox = class extends Error {
607
+ constructor() {
608
+ super("mailbox() reads the inbox of the app's Email construct, and none was found in featureTest's modules — or `gkm test` did not inject its <ID>_INBOX_URL.");
609
+ this.name = "NoInbox";
610
+ }
611
+ };
612
+ //#endregion
613
+ exports.NoInbox = NoInbox;
614
+ exports.TEST_CONTEXT_HEADER = _geekmidas_testkit_context.TEST_CONTEXT_HEADER;
429
615
  exports.TestEndpointAdaptor = TestEndpointAdaptor;
430
616
  exports.TestFunctionAdaptor = TestFunctionAdaptor;
431
617
  exports.TestQueueAdaptor = TestQueueAdaptor;
432
618
  exports.TestSubscriberAdaptor = TestSubscriberAdaptor;
619
+ exports.UnknownTestContext = UnknownTestContext;
433
620
  exports.createMswHandlers = createMswHandlers;
621
+ exports.featureTest = featureTest;
622
+
434
623
  //# sourceMappingURL=testing.cjs.map