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

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 (329) hide show
  1. package/README.md +4 -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 +60 -73
  77. package/dist/adaptors/testing.cjs.map +1 -1
  78. package/dist/adaptors/testing.d.cts +17 -28
  79. package/dist/adaptors/testing.d.cts.map +1 -1
  80. package/dist/adaptors/testing.d.mts +18 -29
  81. package/dist/adaptors/testing.d.mts.map +1 -1
  82. package/dist/adaptors/testing.mjs +42 -55
  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.cjs +68 -2
  95. package/dist/cache.cjs.map +1 -0
  96. package/dist/cache.d.cts +43 -3
  97. package/dist/cache.d.cts.map +1 -0
  98. package/dist/cache.d.mts +43 -3
  99. package/dist/cache.d.mts.map +1 -0
  100. package/dist/cache.mjs +67 -2
  101. package/dist/cache.mjs.map +1 -0
  102. package/dist/{clone-DblgEZZa.mjs → clone-EKNovYHu.mjs} +3 -3
  103. package/dist/clone-EKNovYHu.mjs.map +1 -0
  104. package/dist/{clone-Dy0cR2SZ.cjs → clone-UGJpvQnL.cjs} +7 -8
  105. package/dist/clone-UGJpvQnL.cjs.map +1 -0
  106. package/dist/{construct-interface-g5GM5pwR.d.mts → construct-interface-Clz7_BwB.d.mts} +15 -6
  107. package/dist/construct-interface-Clz7_BwB.d.mts.map +1 -0
  108. package/dist/{construct-interface-D9d4Gm4p.d.cts → construct-interface-DIaTNKax.d.cts} +15 -6
  109. package/dist/construct-interface-DIaTNKax.d.cts.map +1 -0
  110. package/dist/construct-interface.cjs +87 -7
  111. package/dist/construct-interface.cjs.map +1 -0
  112. package/dist/construct-interface.d.cts +2 -2
  113. package/dist/construct-interface.d.mts +2 -2
  114. package/dist/construct-interface.mjs +81 -2
  115. package/dist/construct-interface.mjs.map +1 -0
  116. package/dist/credential.cjs +43 -9
  117. package/dist/credential.cjs.map +1 -1
  118. package/dist/credential.d.cts +5 -8
  119. package/dist/credential.d.cts.map +1 -1
  120. package/dist/credential.d.mts +5 -8
  121. package/dist/credential.d.mts.map +1 -1
  122. package/dist/credential.mjs +36 -2
  123. package/dist/credential.mjs.map +1 -1
  124. package/dist/crons/index.cjs +68 -10
  125. package/dist/crons/index.cjs.map +1 -1
  126. package/dist/crons/index.d.cts +32 -14
  127. package/dist/crons/index.d.cts.map +1 -1
  128. package/dist/crons/index.d.mts +32 -14
  129. package/dist/crons/index.d.mts.map +1 -1
  130. package/dist/crons/index.mjs +66 -10
  131. package/dist/crons/index.mjs.map +1 -1
  132. package/dist/database/kysely.cjs +28 -14
  133. package/dist/database/kysely.cjs.map +1 -1
  134. package/dist/database/kysely.d.cts +5 -8
  135. package/dist/database/kysely.d.cts.map +1 -1
  136. package/dist/database/kysely.d.mts +6 -9
  137. package/dist/database/kysely.d.mts.map +1 -1
  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/{lazyAccessors-BoJN3SMd.mjs → lazyAccessors-BHtcqgz2.mjs} +22 -25
  187. package/dist/lazyAccessors-BHtcqgz2.mjs.map +1 -0
  188. package/dist/{lazyAccessors-e3j2oE2m.cjs → lazyAccessors-Dx9NLwJZ.cjs} +72 -76
  189. package/dist/lazyAccessors-Dx9NLwJZ.cjs.map +1 -0
  190. package/dist/object-storage.cjs +18 -10
  191. package/dist/object-storage.cjs.map +1 -1
  192. package/dist/object-storage.d.cts +3 -7
  193. package/dist/object-storage.d.cts.map +1 -1
  194. package/dist/object-storage.d.mts +3 -7
  195. package/dist/object-storage.d.mts.map +1 -1
  196. package/dist/object-storage.mjs +11 -3
  197. package/dist/object-storage.mjs.map +1 -1
  198. package/dist/{processAudits-Dmts9H_b.mjs → processAudits-BpRlPQMW.mjs} +16 -19
  199. package/dist/processAudits-BpRlPQMW.mjs.map +1 -0
  200. package/dist/{processAudits-CGqttuXm.cjs → processAudits-D_2W5x8k.cjs} +26 -30
  201. package/dist/processAudits-D_2W5x8k.cjs.map +1 -0
  202. package/dist/queue/index.cjs +25 -21
  203. package/dist/queue/index.cjs.map +1 -1
  204. package/dist/queue/index.d.cts +8 -15
  205. package/dist/queue/index.d.cts.map +1 -1
  206. package/dist/queue/index.d.mts +8 -15
  207. package/dist/queue/index.d.mts.map +1 -1
  208. package/dist/queue/index.mjs +15 -11
  209. package/dist/queue/index.mjs.map +1 -1
  210. package/dist/rest-api.cjs +88 -62
  211. package/dist/rest-api.cjs.map +1 -1
  212. package/dist/rest-api.d.cts +62 -60
  213. package/dist/rest-api.d.cts.map +1 -1
  214. package/dist/rest-api.d.mts +62 -60
  215. package/dist/rest-api.d.mts.map +1 -1
  216. package/dist/rest-api.mjs +80 -54
  217. package/dist/rest-api.mjs.map +1 -1
  218. package/dist/{chunk-DWy1uDak.cjs → rolldown-runtime-y5ARvAq5.cjs} +14 -18
  219. package/dist/site.cjs +33 -9
  220. package/dist/site.cjs.map +1 -1
  221. package/dist/site.d.cts +11 -22
  222. package/dist/site.d.cts.map +1 -1
  223. package/dist/site.d.mts +11 -22
  224. package/dist/site.d.mts.map +1 -1
  225. package/dist/site.mjs +29 -5
  226. package/dist/site.mjs.map +1 -1
  227. package/dist/subscribers/index.cjs +2 -11
  228. package/dist/subscribers/index.d.cts +3 -14
  229. package/dist/subscribers/index.d.mts +3 -14
  230. package/dist/subscribers/index.mjs +2 -11
  231. package/dist/surfaceEnv-CNimK76p.cjs +56 -0
  232. package/dist/surfaceEnv-CNimK76p.cjs.map +1 -0
  233. package/dist/surfaceEnv-wMT5QzgZ.mjs +45 -0
  234. package/dist/surfaceEnv-wMT5QzgZ.mjs.map +1 -0
  235. package/dist/{telemetry-C3L0iS28.d.cts → telemetry-DGcFlVpB.d.cts} +2 -5
  236. package/dist/telemetry-DGcFlVpB.d.cts.map +1 -0
  237. package/dist/{telemetry-D7bVFLGi.d.mts → telemetry-DGcFlVpB.d.mts} +2 -5
  238. package/dist/telemetry-DGcFlVpB.d.mts.map +1 -0
  239. package/dist/topic/index.cjs +18 -20
  240. package/dist/topic/index.cjs.map +1 -1
  241. package/dist/topic/index.d.cts +3 -32
  242. package/dist/topic/index.d.mts +3 -32
  243. package/dist/topic/index.mjs +8 -10
  244. package/dist/topic/index.mjs.map +1 -1
  245. package/dist/{types-BlAkSuGI.d.cts → types-DMuSQeLL.d.cts} +3 -5
  246. package/dist/types-DMuSQeLL.d.cts.map +1 -0
  247. package/dist/{types-aKksMEWL.d.mts → types-DMuSQeLL.d.mts} +3 -5
  248. package/dist/types-DMuSQeLL.d.mts.map +1 -0
  249. package/dist/types.d.cts +1 -1
  250. package/dist/types.d.mts +1 -1
  251. package/dist/types.mjs +1 -0
  252. package/dist/worker.cjs +109 -35
  253. package/dist/worker.cjs.map +1 -1
  254. package/dist/worker.d.cts +87 -42
  255. package/dist/worker.d.cts.map +1 -1
  256. package/dist/worker.d.mts +87 -42
  257. package/dist/worker.d.mts.map +1 -1
  258. package/dist/worker.mjs +104 -30
  259. package/dist/worker.mjs.map +1 -1
  260. package/package.json +45 -45
  261. package/dist/Construct-BD5neF7w.mjs.map +0 -1
  262. package/dist/Construct-C0ijr2qp.d.cts.map +0 -1
  263. package/dist/Construct-Ct8nalEi.d.mts.map +0 -1
  264. package/dist/Construct-CyS3RpTL.cjs.map +0 -1
  265. package/dist/Cron-ByxdOfpE.d.mts.map +0 -1
  266. package/dist/Cron-Wqh464aO.d.cts.map +0 -1
  267. package/dist/CronBuilder-BL0AP6fs.d.mts.map +0 -1
  268. package/dist/CronBuilder-BmABazzH.mjs.map +0 -1
  269. package/dist/CronBuilder-BqpEzMPQ.d.cts.map +0 -1
  270. package/dist/CronBuilder-CkXPJiGO.cjs.map +0 -1
  271. package/dist/Endpoint-2Wg7T7Cq.d.mts.map +0 -1
  272. package/dist/Endpoint-BiaaMEn_.cjs.map +0 -1
  273. package/dist/Endpoint-CH9Fn1AD.d.cts.map +0 -1
  274. package/dist/Endpoint-VIOpSo0S.mjs.map +0 -1
  275. package/dist/EndpointFactory-ChxLZllA.cjs.map +0 -1
  276. package/dist/EndpointFactory-DTTCkGEL.mjs.map +0 -1
  277. package/dist/HonoEndpointAdaptor-NKQQQbBY.mjs.map +0 -1
  278. package/dist/Queue-D7ZuwBhy.d.cts.map +0 -1
  279. package/dist/Queue-gVGfi2Yk.d.mts.map +0 -1
  280. package/dist/Subscriber-2mEi0ImH.d.cts.map +0 -1
  281. package/dist/Subscriber-xTJ9ayPN.d.mts.map +0 -1
  282. package/dist/SubscriberBuilder-4OPehf2R.cjs.map +0 -1
  283. package/dist/SubscriberBuilder-BjkbeT9l.mjs.map +0 -1
  284. package/dist/SubscriberBuilder-Dptmo-1A.d.mts.map +0 -1
  285. package/dist/SubscriberBuilder-waNhzjSM.d.cts.map +0 -1
  286. package/dist/Topic-19QeHBIR.d.cts.map +0 -1
  287. package/dist/Topic-DuFeqkBh.d.mts.map +0 -1
  288. package/dist/auth.d.cts.map +0 -1
  289. package/dist/auth.d.mts.map +0 -1
  290. package/dist/cache-0ANvRQnD.mjs +0 -51
  291. package/dist/cache-0ANvRQnD.mjs.map +0 -1
  292. package/dist/cache-3WSvAulx.cjs +0 -57
  293. package/dist/cache-3WSvAulx.cjs.map +0 -1
  294. package/dist/cache-BrRz3fEB.d.mts +0 -47
  295. package/dist/cache-BrRz3fEB.d.mts.map +0 -1
  296. package/dist/cache-BtZY_tHe.d.cts +0 -47
  297. package/dist/cache-BtZY_tHe.d.cts.map +0 -1
  298. package/dist/clone-DblgEZZa.mjs.map +0 -1
  299. package/dist/clone-Dy0cR2SZ.cjs.map +0 -1
  300. package/dist/construct-interface-BfjcOD_E.cjs +0 -117
  301. package/dist/construct-interface-BfjcOD_E.cjs.map +0 -1
  302. package/dist/construct-interface-D9d4Gm4p.d.cts.map +0 -1
  303. package/dist/construct-interface-Z4CpS8tK.mjs +0 -81
  304. package/dist/construct-interface-Z4CpS8tK.mjs.map +0 -1
  305. package/dist/construct-interface-g5GM5pwR.d.mts.map +0 -1
  306. package/dist/functions-Bd3TPxid.cjs.map +0 -1
  307. package/dist/functions-Cxbo-pEd.mjs.map +0 -1
  308. package/dist/index-BxHDdy6a.d.mts.map +0 -1
  309. package/dist/index-CubPzHd9.d.mts.map +0 -1
  310. package/dist/index-JSf9xNIJ.d.cts.map +0 -1
  311. package/dist/index-V2nksZIJ.d.cts.map +0 -1
  312. package/dist/lazyAccessors-BoJN3SMd.mjs.map +0 -1
  313. package/dist/lazyAccessors-e3j2oE2m.cjs.map +0 -1
  314. package/dist/processAudits-CGqttuXm.cjs.map +0 -1
  315. package/dist/processAudits-Dmts9H_b.mjs.map +0 -1
  316. package/dist/subscribers/index.cjs.map +0 -1
  317. package/dist/subscribers/index.d.cts.map +0 -1
  318. package/dist/subscribers/index.d.mts.map +0 -1
  319. package/dist/subscribers/index.mjs.map +0 -1
  320. package/dist/surfaceEnv-BFXEms2f.cjs +0 -39
  321. package/dist/surfaceEnv-BFXEms2f.cjs.map +0 -1
  322. package/dist/surfaceEnv-C3Ktahea.mjs +0 -27
  323. package/dist/surfaceEnv-C3Ktahea.mjs.map +0 -1
  324. package/dist/telemetry-C3L0iS28.d.cts.map +0 -1
  325. package/dist/telemetry-D7bVFLGi.d.mts.map +0 -1
  326. package/dist/topic/index.d.cts.map +0 -1
  327. package/dist/topic/index.d.mts.map +0 -1
  328. package/dist/types-BlAkSuGI.d.cts.map +0 -1
  329. package/dist/types-aKksMEWL.d.mts.map +0 -1
@@ -1,6 +1,4 @@
1
- const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- const hono_cookie = require_chunk.__toESM(require("hono/cookie"));
3
-
1
+ let hono_cookie = require("hono/cookie");
4
2
  //#region src/publisher.ts
5
3
  async function publishEvents(logger, serviceDiscovery, ev = [], response, publisherService) {
6
4
  try {
@@ -12,10 +10,9 @@ async function publishEvents(logger, serviceDiscovery, ev = [], response, publis
12
10
  logger.warn("No publisher service available");
13
11
  return;
14
12
  }
15
- const services = await serviceDiscovery.register([publisherService]);
16
- const publisher = services[publisherService.serviceName];
13
+ const publisher = (await serviceDiscovery.register([publisherService]))[publisherService.serviceName];
17
14
  const events = [];
18
- for (const { when, payload, type,...e } of ev) {
15
+ for (const { when, payload, type, ...e } of ev) {
19
16
  logger.debug({ event: type }, "Processing event");
20
17
  const resolvedPayload = await payload(response);
21
18
  const event = {
@@ -38,7 +35,6 @@ async function publishEvents(logger, serviceDiscovery, ev = [], response, publis
38
35
  async function publishConstructEvents(construct, response, serviceDiscovery, logger = construct.logger) {
39
36
  return publishEvents(logger, serviceDiscovery, construct.events, response, construct.publisherService);
40
37
  }
41
-
42
38
  //#endregion
43
39
  //#region src/endpoints/lazyAccessors.ts
44
40
  /**
@@ -48,11 +44,11 @@ async function publishConstructEvents(construct, response, serviceDiscovery, log
48
44
  */
49
45
  function createHonoHeaders(c) {
50
46
  let allHeaders = null;
51
- return (key) => {
47
+ return ((key) => {
52
48
  if (key !== void 0) return c.req.header(key);
53
49
  if (!allHeaders) allHeaders = c.req.header();
54
50
  return allHeaders;
55
- };
51
+ });
56
52
  }
57
53
  /**
58
54
  * Create a lazy cookie accessor for Hono.
@@ -61,7 +57,7 @@ function createHonoHeaders(c) {
61
57
  */
62
58
  function createHonoCookies(c) {
63
59
  let allCookies = null;
64
- return (name) => {
60
+ return ((name) => {
65
61
  if (name !== void 0) return (0, hono_cookie.getCookie)(c, name);
66
62
  if (!allCookies) {
67
63
  allCookies = {};
@@ -77,7 +73,7 @@ function createHonoCookies(c) {
77
73
  }
78
74
  }
79
75
  return allCookies;
80
- };
76
+ });
81
77
  }
82
78
  /**
83
79
  * Create a lazy header accessor for API Gateway events.
@@ -94,17 +90,17 @@ function createApiGatewayHeaders(headers) {
94
90
  }
95
91
  return normalizedHeaders;
96
92
  };
97
- return (key) => {
93
+ return ((key) => {
98
94
  if (key !== void 0) {
99
95
  if (headers) {
100
96
  const direct = headers[key] ?? headers[key.toLowerCase()];
101
97
  if (direct !== void 0) return direct;
102
98
  return normalize()[key.toLowerCase()];
103
99
  }
104
- return void 0;
100
+ return;
105
101
  }
106
102
  return normalize();
107
- };
103
+ });
108
104
  }
109
105
  /**
110
106
  * Create a lazy cookie accessor for API Gateway events.
@@ -135,10 +131,10 @@ function createApiGatewayCookies(cookies, cookieHeader) {
135
131
  }
136
132
  return parsed;
137
133
  };
138
- return (name) => {
134
+ return ((name) => {
139
135
  if (name !== void 0) return parse()[name];
140
136
  return parse();
141
- };
137
+ });
142
138
  }
143
139
  /**
144
140
  * Create a lazy header accessor for plain object headers (test adaptor, etc).
@@ -146,7 +142,7 @@ function createApiGatewayCookies(cookies, cookieHeader) {
146
142
  */
147
143
  function createObjectHeaders(headers) {
148
144
  let normalized = null;
149
- return (key) => {
145
+ return ((key) => {
150
146
  if (key !== void 0) {
151
147
  if (headers) {
152
148
  const direct = headers[key] ?? headers[key.toLowerCase()];
@@ -163,7 +159,7 @@ function createObjectHeaders(headers) {
163
159
  for (const [k, v] of Object.entries(headers)) normalized[k.toLowerCase()] = v;
164
160
  }
165
161
  return normalized ?? {};
166
- };
162
+ });
167
163
  }
168
164
  /**
169
165
  * Create a lazy cookie accessor from a cookie header string.
@@ -186,89 +182,89 @@ function createCookieHeaderAccessor(cookieHeader) {
186
182
  }
187
183
  return parsed;
188
184
  };
189
- return (name) => {
185
+ return ((name) => {
190
186
  if (name !== void 0) return parse()[name];
191
187
  return parse();
192
- };
188
+ });
193
189
  }
194
190
  /**
195
191
  * Create a no-op header accessor (for minimal endpoints that don't use headers).
196
192
  */
197
193
  function createNoopHeaders() {
198
- return (key) => {
194
+ return ((key) => {
199
195
  if (key !== void 0) return void 0;
200
196
  return {};
201
- };
197
+ });
202
198
  }
203
199
  /**
204
200
  * Create a no-op cookie accessor (for minimal endpoints that don't use cookies).
205
201
  */
206
202
  function createNoopCookies() {
207
- return (name) => {
203
+ return ((name) => {
208
204
  if (name !== void 0) return void 0;
209
205
  return {};
210
- };
206
+ });
211
207
  }
212
-
213
208
  //#endregion
214
- Object.defineProperty(exports, 'createApiGatewayCookies', {
215
- enumerable: true,
216
- get: function () {
217
- return createApiGatewayCookies;
218
- }
209
+ Object.defineProperty(exports, "createApiGatewayCookies", {
210
+ enumerable: true,
211
+ get: function() {
212
+ return createApiGatewayCookies;
213
+ }
219
214
  });
220
- Object.defineProperty(exports, 'createApiGatewayHeaders', {
221
- enumerable: true,
222
- get: function () {
223
- return createApiGatewayHeaders;
224
- }
215
+ Object.defineProperty(exports, "createApiGatewayHeaders", {
216
+ enumerable: true,
217
+ get: function() {
218
+ return createApiGatewayHeaders;
219
+ }
225
220
  });
226
- Object.defineProperty(exports, 'createCookieHeaderAccessor', {
227
- enumerable: true,
228
- get: function () {
229
- return createCookieHeaderAccessor;
230
- }
221
+ Object.defineProperty(exports, "createCookieHeaderAccessor", {
222
+ enumerable: true,
223
+ get: function() {
224
+ return createCookieHeaderAccessor;
225
+ }
231
226
  });
232
- Object.defineProperty(exports, 'createHonoCookies', {
233
- enumerable: true,
234
- get: function () {
235
- return createHonoCookies;
236
- }
227
+ Object.defineProperty(exports, "createHonoCookies", {
228
+ enumerable: true,
229
+ get: function() {
230
+ return createHonoCookies;
231
+ }
237
232
  });
238
- Object.defineProperty(exports, 'createHonoHeaders', {
239
- enumerable: true,
240
- get: function () {
241
- return createHonoHeaders;
242
- }
233
+ Object.defineProperty(exports, "createHonoHeaders", {
234
+ enumerable: true,
235
+ get: function() {
236
+ return createHonoHeaders;
237
+ }
243
238
  });
244
- Object.defineProperty(exports, 'createNoopCookies', {
245
- enumerable: true,
246
- get: function () {
247
- return createNoopCookies;
248
- }
239
+ Object.defineProperty(exports, "createNoopCookies", {
240
+ enumerable: true,
241
+ get: function() {
242
+ return createNoopCookies;
243
+ }
249
244
  });
250
- Object.defineProperty(exports, 'createNoopHeaders', {
251
- enumerable: true,
252
- get: function () {
253
- return createNoopHeaders;
254
- }
245
+ Object.defineProperty(exports, "createNoopHeaders", {
246
+ enumerable: true,
247
+ get: function() {
248
+ return createNoopHeaders;
249
+ }
255
250
  });
256
- Object.defineProperty(exports, 'createObjectHeaders', {
257
- enumerable: true,
258
- get: function () {
259
- return createObjectHeaders;
260
- }
251
+ Object.defineProperty(exports, "createObjectHeaders", {
252
+ enumerable: true,
253
+ get: function() {
254
+ return createObjectHeaders;
255
+ }
261
256
  });
262
- Object.defineProperty(exports, 'publishConstructEvents', {
263
- enumerable: true,
264
- get: function () {
265
- return publishConstructEvents;
266
- }
257
+ Object.defineProperty(exports, "publishConstructEvents", {
258
+ enumerable: true,
259
+ get: function() {
260
+ return publishConstructEvents;
261
+ }
267
262
  });
268
- Object.defineProperty(exports, 'publishEvents', {
269
- enumerable: true,
270
- get: function () {
271
- return publishEvents;
272
- }
263
+ Object.defineProperty(exports, "publishEvents", {
264
+ enumerable: true,
265
+ get: function() {
266
+ return publishEvents;
267
+ }
273
268
  });
274
- //# sourceMappingURL=lazyAccessors-e3j2oE2m.cjs.map
269
+
270
+ //# sourceMappingURL=lazyAccessors-Dx9NLwJZ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazyAccessors-Dx9NLwJZ.cjs","names":["getCookie"],"sources":["../src/publisher.ts","../src/endpoints/lazyAccessors.ts"],"sourcesContent":["import type { AuditStorage } from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { InferStandardSchema } from '@geekmidas/schema';\nimport type { Service, ServiceDiscovery } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { Construct } from './Construct';\n\nexport async function publishEvents<\n\tT extends EventPublisher<any> | undefined,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServiceName extends string = string,\n\tTPublisherService extends Service<TServiceName, T> | undefined = undefined,\n>(\n\tlogger: Logger,\n\tserviceDiscovery: ServiceDiscovery<any>,\n\tev: MappedEvent<T, OutSchema>[] = [],\n\tresponse: InferStandardSchema<OutSchema>,\n\tpublisherService: TPublisherService,\n) {\n\ttry {\n\t\tif (!ev?.length) {\n\t\t\tlogger.debug('No events to publish');\n\t\t\treturn;\n\t\t}\n\t\tif (!publisherService) {\n\t\t\tlogger.warn('No publisher service available');\n\t\t\treturn;\n\t\t}\n\n\t\tconst services = await serviceDiscovery.register([publisherService]);\n\n\t\tconst publisher = services[\n\t\t\tpublisherService.serviceName\n\t\t] as EventPublisher<any>;\n\n\t\tconst events: MappedEvent<T, OutSchema>[] = [];\n\n\t\tfor (const { when, payload, type, ...e } of ev) {\n\t\t\tlogger.debug({ event: type }, 'Processing event');\n\t\t\tconst resolvedPayload = await payload(response);\n\t\t\tconst event = {\n\t\t\t\t...e,\n\t\t\t\ttype,\n\t\t\t\tpayload: resolvedPayload,\n\t\t\t};\n\n\t\t\tif (!when || when(response as any)) {\n\t\t\t\tevents.push(event);\n\t\t\t}\n\t\t}\n\n\t\tif (events.length) {\n\t\t\tlogger.debug({ eventCount: ev.length }, 'Publishing events');\n\n\t\t\tawait publisher.publish(events).catch((err) => {\n\t\t\t\tlogger.error(err, 'Failed to publish events');\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\tlogger.error(error as any, 'Something went wrong publishing events');\n\t}\n}\n\nexport async function publishConstructEvents<\n\tT extends EventPublisher<any> | undefined,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServiceName extends string = string,\n\tTServices extends Service[] = [],\n\tTAuditStorageServiceName extends string = string,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n>(\n\tconstruct: Construct<\n\t\tLogger,\n\t\tTServiceName,\n\t\tT,\n\t\tOutSchema,\n\t\tTServices,\n\t\tTAuditStorageServiceName,\n\t\tTAuditStorage\n\t>,\n\tresponse: InferStandardSchema<OutSchema>,\n\tserviceDiscovery: ServiceDiscovery<any>,\n\tlogger: Logger = construct.logger,\n) {\n\treturn publishEvents(\n\t\tlogger,\n\t\tserviceDiscovery,\n\t\tconstruct.events,\n\t\tresponse,\n\t\tconstruct.publisherService,\n\t);\n}\n","/**\n * Lazy header and cookie accessors for different adaptors.\n *\n * Instead of parsing all headers/cookies upfront, these accessors\n * use native adaptor methods for single lookups and only parse\n * everything when `header()` or `cookie()` is called without arguments.\n */\nimport type { Context } from 'hono';\nimport { getCookie } from 'hono/cookie';\nimport type { CookieFn, HeaderFn } from './Endpoint';\n\n/**\n * Create a lazy header accessor for Hono.\n * Uses `c.req.header(name)` for single lookups (native, case-insensitive).\n * Only calls `c.req.header()` to get all headers when needed.\n */\nexport function createHonoHeaders(c: Context): HeaderFn {\n\tlet allHeaders: Record<string, string> | null = null;\n\n\treturn ((key?: string) => {\n\t\tif (key !== undefined) {\n\t\t\t// Single header lookup - use native Hono method (case-insensitive)\n\t\t\treturn c.req.header(key);\n\t\t}\n\t\t// Get all headers - cache the result\n\t\tif (!allHeaders) {\n\t\t\tallHeaders = c.req.header();\n\t\t}\n\t\treturn allHeaders;\n\t}) as HeaderFn;\n}\n\n/**\n * Create a lazy cookie accessor for Hono.\n * Uses `getCookie(c, name)` for single lookups (native).\n * Only parses the cookie header when all cookies are requested.\n */\nexport function createHonoCookies(c: Context): CookieFn {\n\tlet allCookies: Record<string, string> | null = null;\n\n\treturn ((name?: string) => {\n\t\tif (name !== undefined) {\n\t\t\t// Single cookie lookup - use native Hono method\n\t\t\treturn getCookie(c, name);\n\t\t}\n\t\t// Get all cookies - parse and cache\n\t\tif (!allCookies) {\n\t\t\tallCookies = {};\n\t\t\tconst cookieHeader = c.req.header('cookie');\n\t\t\tif (cookieHeader) {\n\t\t\t\tfor (const part of cookieHeader.split(';')) {\n\t\t\t\t\tconst trimmed = part.trim();\n\t\t\t\t\tconst eqIndex = trimmed.indexOf('=');\n\t\t\t\t\tif (eqIndex > 0) {\n\t\t\t\t\t\tconst key = trimmed.slice(0, eqIndex);\n\t\t\t\t\t\tconst value = trimmed.slice(eqIndex + 1);\n\t\t\t\t\t\tallCookies[key] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn allCookies;\n\t}) as CookieFn;\n}\n\n/**\n * Create a lazy header accessor for API Gateway events.\n * Handles case-insensitive lookups.\n */\nexport function createApiGatewayHeaders(\n\theaders: Record<string, string | undefined> | null | undefined,\n): HeaderFn {\n\tlet normalizedHeaders: Record<string, string> | null = null;\n\n\tconst normalize = () => {\n\t\tif (!normalizedHeaders) {\n\t\t\tnormalizedHeaders = {};\n\t\t\tif (headers) {\n\t\t\t\tfor (const [k, v] of Object.entries(headers)) {\n\t\t\t\t\tif (v !== undefined) {\n\t\t\t\t\t\tnormalizedHeaders[k.toLowerCase()] = v;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn normalizedHeaders;\n\t};\n\n\treturn ((key?: string) => {\n\t\tif (key !== undefined) {\n\t\t\t// Try direct lookup first (common case: headers already lowercase)\n\t\t\tif (headers) {\n\t\t\t\tconst direct = headers[key] ?? headers[key.toLowerCase()];\n\t\t\t\tif (direct !== undefined) return direct;\n\t\t\t\t// Fall back to normalized lookup\n\t\t\t\treturn normalize()[key.toLowerCase()];\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\t\treturn normalize();\n\t}) as HeaderFn;\n}\n\n/**\n * Create a lazy cookie accessor for API Gateway events.\n * Decodes URL-encoded values to match browser behavior.\n */\nexport function createApiGatewayCookies(\n\tcookies: string[] | undefined,\n\tcookieHeader: string | undefined,\n): CookieFn {\n\tlet parsed: Record<string, string> | null = null;\n\n\tconst parse = () => {\n\t\tif (!parsed) {\n\t\t\tparsed = {};\n\t\t\t// API Gateway v2 provides cookies as array\n\t\t\tif (cookies) {\n\t\t\t\tfor (const cookie of cookies) {\n\t\t\t\t\tconst eqIndex = cookie.indexOf('=');\n\t\t\t\t\tif (eqIndex > 0) {\n\t\t\t\t\t\tconst key = cookie.slice(0, eqIndex);\n\t\t\t\t\t\tconst value = cookie.slice(eqIndex + 1);\n\t\t\t\t\t\tparsed[key] = decodeURIComponent(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (cookieHeader) {\n\t\t\t\t// Fall back to parsing cookie header\n\t\t\t\tfor (const part of cookieHeader.split(';')) {\n\t\t\t\t\tconst trimmed = part.trim();\n\t\t\t\t\tconst eqIndex = trimmed.indexOf('=');\n\t\t\t\t\tif (eqIndex > 0) {\n\t\t\t\t\t\tconst key = trimmed.slice(0, eqIndex);\n\t\t\t\t\t\tconst value = trimmed.slice(eqIndex + 1);\n\t\t\t\t\t\tparsed[key] = decodeURIComponent(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn parsed;\n\t};\n\n\treturn ((name?: string) => {\n\t\tif (name !== undefined) {\n\t\t\treturn parse()[name];\n\t\t}\n\t\treturn parse();\n\t}) as CookieFn;\n}\n\n/**\n * Create a lazy header accessor for plain object headers (test adaptor, etc).\n * Headers are already available as an object, just provide lazy access.\n */\nexport function createObjectHeaders(\n\theaders: Record<string, string> | undefined,\n): HeaderFn {\n\tlet normalized: Record<string, string> | null = null;\n\n\treturn ((key?: string) => {\n\t\tif (key !== undefined) {\n\t\t\t// Try direct lookup first (common case)\n\t\t\tif (headers) {\n\t\t\t\tconst direct = headers[key] ?? headers[key.toLowerCase()];\n\t\t\t\tif (direct !== undefined) return direct;\n\t\t\t}\n\t\t\t// Fall back to normalized lookup for case-insensitivity\n\t\t\tif (!normalized && headers) {\n\t\t\t\tnormalized = {};\n\t\t\t\tfor (const [k, v] of Object.entries(headers)) {\n\t\t\t\t\tnormalized[k.toLowerCase()] = v;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn normalized?.[key.toLowerCase()];\n\t\t}\n\t\t// Return all headers\n\t\tif (!normalized && headers) {\n\t\t\tnormalized = {};\n\t\t\tfor (const [k, v] of Object.entries(headers)) {\n\t\t\t\tnormalized[k.toLowerCase()] = v;\n\t\t\t}\n\t\t}\n\t\treturn normalized ?? {};\n\t}) as HeaderFn;\n}\n\n/**\n * Create a lazy cookie accessor from a cookie header string.\n * Decodes URL-encoded values to match browser behavior.\n */\nexport function createCookieHeaderAccessor(\n\tcookieHeader: string | undefined,\n): CookieFn {\n\tlet parsed: Record<string, string> | null = null;\n\n\tconst parse = () => {\n\t\tif (!parsed) {\n\t\t\tparsed = {};\n\t\t\tif (cookieHeader) {\n\t\t\t\tfor (const part of cookieHeader.split(';')) {\n\t\t\t\t\tconst trimmed = part.trim();\n\t\t\t\t\tconst eqIndex = trimmed.indexOf('=');\n\t\t\t\t\tif (eqIndex > 0) {\n\t\t\t\t\t\tconst key = trimmed.slice(0, eqIndex);\n\t\t\t\t\t\tconst value = trimmed.slice(eqIndex + 1);\n\t\t\t\t\t\t// Decode URL-encoded values to match Endpoint.createCookies behavior\n\t\t\t\t\t\tparsed[key] = decodeURIComponent(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn parsed;\n\t};\n\n\treturn ((name?: string) => {\n\t\tif (name !== undefined) {\n\t\t\treturn parse()[name];\n\t\t}\n\t\treturn parse();\n\t}) as CookieFn;\n}\n\n/**\n * Create a no-op header accessor (for minimal endpoints that don't use headers).\n */\nexport function createNoopHeaders(): HeaderFn {\n\treturn ((key?: string) => {\n\t\tif (key !== undefined) return undefined;\n\t\treturn {};\n\t}) as HeaderFn;\n}\n\n/**\n * Create a no-op cookie accessor (for minimal endpoints that don't use cookies).\n */\nexport function createNoopCookies(): CookieFn {\n\treturn ((name?: string) => {\n\t\tif (name !== undefined) return undefined;\n\t\treturn {};\n\t}) as CookieFn;\n}\n"],"mappings":"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"}
@@ -1,9 +1,17 @@
1
- const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- const __geekmidas_manifest = require_chunk.__toESM(require("@geekmidas/manifest"));
3
- const __geekmidas_storage = require_chunk.__toESM(require("@geekmidas/storage"));
4
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let _geekmidas_manifest = require("@geekmidas/manifest");
3
+ let _geekmidas_storage = require("@geekmidas/storage");
5
4
  //#region src/object-storage.ts
5
+ /**
6
+ * `ObjectStorage` — a declared bucket.
7
+ *
8
+ * Where the three packages meet: it implements the construct contract, derives
9
+ * its env key through `@geekmidas/manifest`, and hands back a
10
+ * `@geekmidas/storage` client. It names no cloud — `--target=aws` fills the
11
+ * injected URL with S3's values, local dev with MinIO's.
12
+ */
6
13
  var ObjectStorage = class {
14
+ options;
7
15
  id;
8
16
  service;
9
17
  /**
@@ -14,12 +22,12 @@ var ObjectStorage = class {
14
22
  keys;
15
23
  constructor(id, options = {}) {
16
24
  this.options = options;
17
- const canonical = (0, __geekmidas_manifest.canonicalId)(id);
25
+ const canonical = (0, _geekmidas_manifest.canonicalId)(id);
18
26
  this.id = canonical;
19
- this.keys = { url: (0, __geekmidas_manifest.provideKey)(canonical, "url") };
27
+ this.keys = { url: (0, _geekmidas_manifest.provideKey)(canonical, "url") };
20
28
  this.service = {
21
- serviceName: (0, __geekmidas_manifest.serviceKey)(canonical),
22
- register: (options$1) => this.connect(options$1)
29
+ serviceName: (0, _geekmidas_manifest.serviceKey)(canonical),
30
+ register: (options) => this.connect(options)
23
31
  };
24
32
  }
25
33
  declare() {
@@ -39,10 +47,10 @@ var ObjectStorage = class {
39
47
  */
40
48
  async connect({ envParser }) {
41
49
  const { url } = envParser.create((get) => ({ url: get(this.keys.url).string() })).parse();
42
- return (0, __geekmidas_storage.createStorageClient)(url);
50
+ return (0, _geekmidas_storage.createStorageClient)(url);
43
51
  }
44
52
  };
45
-
46
53
  //#endregion
47
54
  exports.ObjectStorage = ObjectStorage;
55
+
48
56
  //# sourceMappingURL=object-storage.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"object-storage.cjs","names":["id: ConstructName<TName>","options: ObjectStorageOptions","options"],"sources":["../src/object-storage.ts"],"sourcesContent":["/**\n * `ObjectStorage` — a declared bucket.\n *\n * Where the three packages meet: it implements the construct contract, derives\n * its env key through `@geekmidas/manifest`, and hands back a\n * `@geekmidas/storage` client. It names no cloud — `--target=aws` fills the\n * injected URL with S3's values, local dev with MinIO's.\n */\n\nimport {\n\ttype ConstructName,\n\tcanonicalId,\n\ttype Declaration,\n\tprovideKey,\n\tserviceKey,\n} from '@geekmidas/manifest';\nimport type { Service, ServiceRegisterOptions } from '@geekmidas/services';\nimport { createStorageClient, type StorageClient } from '@geekmidas/storage';\nimport type { Construct } from './construct-interface';\n\nexport interface ObjectStorageOptions {\n\t/** Keep previous versions of an object. */\n\tversioned?: boolean;\n}\n\nexport class ObjectStorage<TName extends string = string>\n\timplements Construct<TName, StorageClient>\n{\n\treadonly id: TName;\n\treadonly service: Service<Uncapitalize<TName>, StorageClient>;\n\n\t/**\n\t * Declared once and read by both `declare()` and `connect()`, so the key the\n\t * build publishes and the key the client reads cannot drift — the whole point\n\t * of the construct owning both faces.\n\t */\n\tprivate readonly keys: { url: string };\n\n\tconstructor(\n\t\tid: ConstructName<TName>,\n\t\tprivate readonly options: ObjectStorageOptions = {},\n\t) {\n\t\t// Canonicalises, so `uploads` and `Uploads` are one construct rather than\n\t\t// two that collide. Throws on anything that cannot become a valid id.\n\t\tconst canonical = canonicalId(id as string);\n\n\t\tthis.id = canonical as TName;\n\t\tthis.keys = { url: provideKey(canonical, 'url') };\n\n\t\t// A field, not a getter: consumers cache services by object identity.\n\t\tthis.service = {\n\t\t\tserviceName: serviceKey(canonical) as Uncapitalize<TName>,\n\t\t\tregister: (options) => this.connect(options),\n\t\t};\n\t}\n\n\tdeclare(): Declaration[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tkind: 'objects',\n\t\t\t\tid: this.id,\n\t\t\t\tprovides: [this.keys.url],\n\t\t\t\t...(this.options.versioned ? { versioned: true } : {}),\n\t\t\t},\n\t\t];\n\t}\n\n\t/**\n\t * Builds the client from the single URL the adapter supplied.\n\t *\n\t * The URL's scheme selects the driver, so this construct imports no provider\n\t * and an app that never touches S3 never resolves the AWS SDK. Whoever\n\t * assembles the application registers the drivers its target needs.\n\t */\n\tprivate async connect({\n\t\tenvParser,\n\t}: ServiceRegisterOptions): Promise<StorageClient> {\n\t\tconst { url } = envParser\n\t\t\t.create((get) => ({ url: get(this.keys.url).string() }))\n\t\t\t.parse();\n\n\t\treturn createStorageClient(url);\n\t}\n}\n"],"mappings":";;;;;AAyBA,IAAa,gBAAb,MAEA;CACC,AAAS;CACT,AAAS;;;;;;CAOT,AAAiB;CAEjB,YACCA,IACiBC,UAAgC,CAAE,GAClD;EADgB;EAIjB,MAAM,YAAY,sCAAY,GAAa;AAE3C,OAAK,KAAK;AACV,OAAK,OAAO,EAAE,KAAK,qCAAW,WAAW,MAAM,CAAE;AAGjD,OAAK,UAAU;GACd,aAAa,qCAAW,UAAU;GAClC,UAAU,CAACC,cAAY,KAAK,QAAQA,UAAQ;EAC5C;CACD;CAED,UAAyB;AACxB,SAAO,CACN;GACC,MAAM;GACN,IAAI,KAAK;GACT,UAAU,CAAC,KAAK,KAAK,GAAI;GACzB,GAAI,KAAK,QAAQ,YAAY,EAAE,WAAW,KAAM,IAAG,CAAE;EACrD,CACD;CACD;;;;;;;;CASD,MAAc,QAAQ,EACrB,WACwB,EAA0B;EAClD,MAAM,EAAE,KAAK,GAAG,UACd,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAE,GAAE,CACvD,OAAO;AAET,SAAO,6CAAoB,IAAI;CAC/B;AACD"}
1
+ {"version":3,"file":"object-storage.cjs","names":["canonicalId","provideKey","serviceKey","createStorageClient"],"sources":["../src/object-storage.ts"],"sourcesContent":["/**\n * `ObjectStorage` — a declared bucket.\n *\n * Where the three packages meet: it implements the construct contract, derives\n * its env key through `@geekmidas/manifest`, and hands back a\n * `@geekmidas/storage` client. It names no cloud — `--target=aws` fills the\n * injected URL with S3's values, local dev with MinIO's.\n */\n\nimport {\n\ttype ConstructName,\n\tcanonicalId,\n\ttype Declaration,\n\tprovideKey,\n\tserviceKey,\n} from '@geekmidas/manifest';\nimport type { Service, ServiceRegisterOptions } from '@geekmidas/services';\nimport { createStorageClient, type StorageClient } from '@geekmidas/storage';\nimport type { Construct } from './construct-interface';\n\nexport interface ObjectStorageOptions {\n\t/** Keep previous versions of an object. */\n\tversioned?: boolean;\n}\n\nexport class ObjectStorage<TName extends string = string>\n\timplements Construct<TName, StorageClient>\n{\n\treadonly id: TName;\n\treadonly service: Service<Uncapitalize<TName>, StorageClient>;\n\n\t/**\n\t * Declared once and read by both `declare()` and `connect()`, so the key the\n\t * build publishes and the key the client reads cannot drift — the whole point\n\t * of the construct owning both faces.\n\t */\n\tprivate readonly keys: { url: string };\n\n\tconstructor(\n\t\tid: ConstructName<TName>,\n\t\tprivate readonly options: ObjectStorageOptions = {},\n\t) {\n\t\t// Canonicalises, so `uploads` and `Uploads` are one construct rather than\n\t\t// two that collide. Throws on anything that cannot become a valid id.\n\t\tconst canonical = canonicalId(id as string);\n\n\t\tthis.id = canonical as TName;\n\t\tthis.keys = { url: provideKey(canonical, 'url') };\n\n\t\t// A field, not a getter: consumers cache services by object identity.\n\t\tthis.service = {\n\t\t\tserviceName: serviceKey(canonical) as Uncapitalize<TName>,\n\t\t\tregister: (options) => this.connect(options),\n\t\t};\n\t}\n\n\tdeclare(): Declaration[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tkind: 'objects',\n\t\t\t\tid: this.id,\n\t\t\t\tprovides: [this.keys.url],\n\t\t\t\t...(this.options.versioned ? { versioned: true } : {}),\n\t\t\t},\n\t\t];\n\t}\n\n\t/**\n\t * Builds the client from the single URL the adapter supplied.\n\t *\n\t * The URL's scheme selects the driver, so this construct imports no provider\n\t * and an app that never touches S3 never resolves the AWS SDK. Whoever\n\t * assembles the application registers the drivers its target needs.\n\t */\n\tprivate async connect({\n\t\tenvParser,\n\t}: ServiceRegisterOptions): Promise<StorageClient> {\n\t\tconst { url } = envParser\n\t\t\t.create((get) => ({ url: get(this.keys.url).string() }))\n\t\t\t.parse();\n\n\t\treturn createStorageClient(url);\n\t}\n}\n"],"mappings":";;;;;;;;;;;;AAyBA,IAAa,gBAAb,MAEA;CAamB;CAZlB;CACA;;;;;;CAOA;CAEA,YACC,IACA,UAAiD,CAAC,GACjD;EADgB,KAAA,UAAA;EAIjB,MAAM,aAAA,GAAYA,oBAAAA,YAAAA,CAAY,EAAY;EAE1C,KAAK,KAAK;EACV,KAAK,OAAO,EAAE,MAAA,GAAKC,oBAAAA,WAAAA,CAAW,WAAW,KAAK,EAAE;EAGhD,KAAK,UAAU;GACd,cAAA,GAAaC,oBAAAA,WAAAA,CAAW,SAAS;GACjC,WAAW,YAAY,KAAK,QAAQ,OAAO;EAC5C;CACD;CAEA,UAAyB;EACxB,OAAO,CACN;GACC,MAAM;GACN,IAAI,KAAK;GACT,UAAU,CAAC,KAAK,KAAK,GAAG;GACxB,GAAI,KAAK,QAAQ,YAAY,EAAE,WAAW,KAAK,IAAI,CAAC;EACrD,CACD;CACD;;;;;;;;CASA,MAAc,QAAQ,EACrB,aACkD;EAClD,MAAM,EAAE,QAAQ,UACd,QAAQ,SAAS,EAAE,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACvD,MAAM;EAER,QAAA,GAAOC,mBAAAA,oBAAAA,CAAoB,GAAG;CAC/B;AACD"}
@@ -1,15 +1,13 @@
1
- import { Construct } from "./construct-interface-D9d4Gm4p.cjs";
1
+ import { n as Construct } from "./construct-interface-DIaTNKax.cjs";
2
2
  import { Service } from "@geekmidas/services";
3
3
  import { ConstructName, Declaration } from "@geekmidas/manifest";
4
4
  import { StorageClient } from "@geekmidas/storage";
5
-
6
5
  //#region src/object-storage.d.ts
7
-
8
- interface ObjectStorageOptions {
6
+ export interface ObjectStorageOptions {
9
7
  /** Keep previous versions of an object. */
10
8
  versioned?: boolean;
11
9
  }
12
- declare class ObjectStorage<TName extends string = string> implements Construct<TName, StorageClient> {
10
+ export declare class ObjectStorage<TName extends string = string> implements Construct<TName, StorageClient> {
13
11
  private readonly options;
14
12
  readonly id: TName;
15
13
  readonly service: Service<Uncapitalize<TName>, StorageClient>;
@@ -30,7 +28,5 @@ declare class ObjectStorage<TName extends string = string> implements Construct<
30
28
  */
31
29
  private connect;
32
30
  }
33
- //# sourceMappingURL=object-storage.d.ts.map
34
31
  //#endregion
35
- export { ObjectStorage, ObjectStorageOptions };
36
32
  //# sourceMappingURL=object-storage.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"object-storage.d.cts","names":[],"sources":["../src/object-storage.ts"],"sourcesContent":[],"mappings":";;;;;;;AA6BwC,UATvB,oBAAA,CASuB;EAAK;EAAN,SAAS,CAAA,EAAA,OAAA;;AAU5B,cAdP,aAcO,CAAA,cAAA,MAAA,GAAA,MAAA,CAAA,YAbR,SAaQ,CAbE,KAaF,EAbS,aAaT,CAAA,CAAA;EAAK,iBAAnB,OAAA;EAAa,SACS,EAAA,EAZd,KAYc;EAAyB,SAgBzC,OAAA,EA3BO,OA2BP,CA3Be,YA2Bf,CA3B4B,KA2B5B,CAAA,EA3BoC,aA2BpC,CAAA;EAAW;AA9BF;;;;;kBAaf,cAAc,kBACQ;aAgBhB"}
1
+ {"version":3,"file":"object-storage.d.cts","names":[],"sources":["../src/object-storage.ts"],"mappings":";;;;;iBAoBiB;;EAEhB;;qBAGY,cAAc,0CACf,UAAU,OAAO;mBAcV;WAZT,IAAI;WACJ,SAAS,QAAQ,aAAa,QAAQ;;;;;;mBAO9B;EAEjB,YACC,IAAI,cAAc,QACD,UAAS;EAgB3B,WAAW;;;;;;;;UAkBG"}
@@ -1,15 +1,13 @@
1
- import { Construct } from "./construct-interface-g5GM5pwR.mjs";
1
+ import { n as Construct } from "./construct-interface-Clz7_BwB.mjs";
2
2
  import { ConstructName, Declaration } from "@geekmidas/manifest";
3
3
  import { StorageClient } from "@geekmidas/storage";
4
4
  import { Service } from "@geekmidas/services";
5
-
6
5
  //#region src/object-storage.d.ts
7
-
8
- interface ObjectStorageOptions {
6
+ export interface ObjectStorageOptions {
9
7
  /** Keep previous versions of an object. */
10
8
  versioned?: boolean;
11
9
  }
12
- declare class ObjectStorage<TName extends string = string> implements Construct<TName, StorageClient> {
10
+ export declare class ObjectStorage<TName extends string = string> implements Construct<TName, StorageClient> {
13
11
  private readonly options;
14
12
  readonly id: TName;
15
13
  readonly service: Service<Uncapitalize<TName>, StorageClient>;
@@ -30,7 +28,5 @@ declare class ObjectStorage<TName extends string = string> implements Construct<
30
28
  */
31
29
  private connect;
32
30
  }
33
- //# sourceMappingURL=object-storage.d.ts.map
34
31
  //#endregion
35
- export { ObjectStorage, ObjectStorageOptions };
36
32
  //# sourceMappingURL=object-storage.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"object-storage.d.mts","names":[],"sources":["../src/object-storage.ts"],"sourcesContent":[],"mappings":";;;;;;;AA6BwC,UATvB,oBAAA,CASuB;EAAK;EAAN,SAAS,CAAA,EAAA,OAAA;;AAU5B,cAdP,aAcO,CAAA,cAAA,MAAA,GAAA,MAAA,CAAA,YAbR,SAaQ,CAbE,KAaF,EAbS,aAaT,CAAA,CAAA;EAAK,iBAAnB,OAAA;EAAa,SACS,EAAA,EAZd,KAYc;EAAyB,SAgBzC,OAAA,EA3BO,OA2BP,CA3Be,YA2Bf,CA3B4B,KA2B5B,CAAA,EA3BoC,aA2BpC,CAAA;EAAW;AA9BF;;;;;kBAaf,cAAc,kBACQ;aAgBhB"}
1
+ {"version":3,"file":"object-storage.d.mts","names":[],"sources":["../src/object-storage.ts"],"mappings":";;;;;iBAoBiB;;EAEhB;;qBAGY,cAAc,0CACf,UAAU,OAAO;mBAcV;WAZT,IAAI;WACJ,SAAS,QAAQ,aAAa,QAAQ;;;;;;mBAO9B;EAEjB,YACC,IAAI,cAAc,QACD,UAAS;EAgB3B,WAAW;;;;;;;;UAkBG"}
@@ -1,8 +1,16 @@
1
1
  import { canonicalId, provideKey, serviceKey } from "@geekmidas/manifest";
2
2
  import { createStorageClient } from "@geekmidas/storage";
3
-
4
3
  //#region src/object-storage.ts
4
+ /**
5
+ * `ObjectStorage` — a declared bucket.
6
+ *
7
+ * Where the three packages meet: it implements the construct contract, derives
8
+ * its env key through `@geekmidas/manifest`, and hands back a
9
+ * `@geekmidas/storage` client. It names no cloud — `--target=aws` fills the
10
+ * injected URL with S3's values, local dev with MinIO's.
11
+ */
5
12
  var ObjectStorage = class {
13
+ options;
6
14
  id;
7
15
  service;
8
16
  /**
@@ -18,7 +26,7 @@ var ObjectStorage = class {
18
26
  this.keys = { url: provideKey(canonical, "url") };
19
27
  this.service = {
20
28
  serviceName: serviceKey(canonical),
21
- register: (options$1) => this.connect(options$1)
29
+ register: (options) => this.connect(options)
22
30
  };
23
31
  }
24
32
  declare() {
@@ -41,7 +49,7 @@ var ObjectStorage = class {
41
49
  return createStorageClient(url);
42
50
  }
43
51
  };
44
-
45
52
  //#endregion
46
53
  export { ObjectStorage };
54
+
47
55
  //# sourceMappingURL=object-storage.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"object-storage.mjs","names":["id: ConstructName<TName>","options: ObjectStorageOptions","options"],"sources":["../src/object-storage.ts"],"sourcesContent":["/**\n * `ObjectStorage` — a declared bucket.\n *\n * Where the three packages meet: it implements the construct contract, derives\n * its env key through `@geekmidas/manifest`, and hands back a\n * `@geekmidas/storage` client. It names no cloud — `--target=aws` fills the\n * injected URL with S3's values, local dev with MinIO's.\n */\n\nimport {\n\ttype ConstructName,\n\tcanonicalId,\n\ttype Declaration,\n\tprovideKey,\n\tserviceKey,\n} from '@geekmidas/manifest';\nimport type { Service, ServiceRegisterOptions } from '@geekmidas/services';\nimport { createStorageClient, type StorageClient } from '@geekmidas/storage';\nimport type { Construct } from './construct-interface';\n\nexport interface ObjectStorageOptions {\n\t/** Keep previous versions of an object. */\n\tversioned?: boolean;\n}\n\nexport class ObjectStorage<TName extends string = string>\n\timplements Construct<TName, StorageClient>\n{\n\treadonly id: TName;\n\treadonly service: Service<Uncapitalize<TName>, StorageClient>;\n\n\t/**\n\t * Declared once and read by both `declare()` and `connect()`, so the key the\n\t * build publishes and the key the client reads cannot drift — the whole point\n\t * of the construct owning both faces.\n\t */\n\tprivate readonly keys: { url: string };\n\n\tconstructor(\n\t\tid: ConstructName<TName>,\n\t\tprivate readonly options: ObjectStorageOptions = {},\n\t) {\n\t\t// Canonicalises, so `uploads` and `Uploads` are one construct rather than\n\t\t// two that collide. Throws on anything that cannot become a valid id.\n\t\tconst canonical = canonicalId(id as string);\n\n\t\tthis.id = canonical as TName;\n\t\tthis.keys = { url: provideKey(canonical, 'url') };\n\n\t\t// A field, not a getter: consumers cache services by object identity.\n\t\tthis.service = {\n\t\t\tserviceName: serviceKey(canonical) as Uncapitalize<TName>,\n\t\t\tregister: (options) => this.connect(options),\n\t\t};\n\t}\n\n\tdeclare(): Declaration[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tkind: 'objects',\n\t\t\t\tid: this.id,\n\t\t\t\tprovides: [this.keys.url],\n\t\t\t\t...(this.options.versioned ? { versioned: true } : {}),\n\t\t\t},\n\t\t];\n\t}\n\n\t/**\n\t * Builds the client from the single URL the adapter supplied.\n\t *\n\t * The URL's scheme selects the driver, so this construct imports no provider\n\t * and an app that never touches S3 never resolves the AWS SDK. Whoever\n\t * assembles the application registers the drivers its target needs.\n\t */\n\tprivate async connect({\n\t\tenvParser,\n\t}: ServiceRegisterOptions): Promise<StorageClient> {\n\t\tconst { url } = envParser\n\t\t\t.create((get) => ({ url: get(this.keys.url).string() }))\n\t\t\t.parse();\n\n\t\treturn createStorageClient(url);\n\t}\n}\n"],"mappings":";;;;AAyBA,IAAa,gBAAb,MAEA;CACC,AAAS;CACT,AAAS;;;;;;CAOT,AAAiB;CAEjB,YACCA,IACiBC,UAAgC,CAAE,GAClD;EADgB;EAIjB,MAAM,YAAY,YAAY,GAAa;AAE3C,OAAK,KAAK;AACV,OAAK,OAAO,EAAE,KAAK,WAAW,WAAW,MAAM,CAAE;AAGjD,OAAK,UAAU;GACd,aAAa,WAAW,UAAU;GAClC,UAAU,CAACC,cAAY,KAAK,QAAQA,UAAQ;EAC5C;CACD;CAED,UAAyB;AACxB,SAAO,CACN;GACC,MAAM;GACN,IAAI,KAAK;GACT,UAAU,CAAC,KAAK,KAAK,GAAI;GACzB,GAAI,KAAK,QAAQ,YAAY,EAAE,WAAW,KAAM,IAAG,CAAE;EACrD,CACD;CACD;;;;;;;;CASD,MAAc,QAAQ,EACrB,WACwB,EAA0B;EAClD,MAAM,EAAE,KAAK,GAAG,UACd,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAE,GAAE,CACvD,OAAO;AAET,SAAO,oBAAoB,IAAI;CAC/B;AACD"}
1
+ {"version":3,"file":"object-storage.mjs","names":[],"sources":["../src/object-storage.ts"],"sourcesContent":["/**\n * `ObjectStorage` — a declared bucket.\n *\n * Where the three packages meet: it implements the construct contract, derives\n * its env key through `@geekmidas/manifest`, and hands back a\n * `@geekmidas/storage` client. It names no cloud — `--target=aws` fills the\n * injected URL with S3's values, local dev with MinIO's.\n */\n\nimport {\n\ttype ConstructName,\n\tcanonicalId,\n\ttype Declaration,\n\tprovideKey,\n\tserviceKey,\n} from '@geekmidas/manifest';\nimport type { Service, ServiceRegisterOptions } from '@geekmidas/services';\nimport { createStorageClient, type StorageClient } from '@geekmidas/storage';\nimport type { Construct } from './construct-interface';\n\nexport interface ObjectStorageOptions {\n\t/** Keep previous versions of an object. */\n\tversioned?: boolean;\n}\n\nexport class ObjectStorage<TName extends string = string>\n\timplements Construct<TName, StorageClient>\n{\n\treadonly id: TName;\n\treadonly service: Service<Uncapitalize<TName>, StorageClient>;\n\n\t/**\n\t * Declared once and read by both `declare()` and `connect()`, so the key the\n\t * build publishes and the key the client reads cannot drift — the whole point\n\t * of the construct owning both faces.\n\t */\n\tprivate readonly keys: { url: string };\n\n\tconstructor(\n\t\tid: ConstructName<TName>,\n\t\tprivate readonly options: ObjectStorageOptions = {},\n\t) {\n\t\t// Canonicalises, so `uploads` and `Uploads` are one construct rather than\n\t\t// two that collide. Throws on anything that cannot become a valid id.\n\t\tconst canonical = canonicalId(id as string);\n\n\t\tthis.id = canonical as TName;\n\t\tthis.keys = { url: provideKey(canonical, 'url') };\n\n\t\t// A field, not a getter: consumers cache services by object identity.\n\t\tthis.service = {\n\t\t\tserviceName: serviceKey(canonical) as Uncapitalize<TName>,\n\t\t\tregister: (options) => this.connect(options),\n\t\t};\n\t}\n\n\tdeclare(): Declaration[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tkind: 'objects',\n\t\t\t\tid: this.id,\n\t\t\t\tprovides: [this.keys.url],\n\t\t\t\t...(this.options.versioned ? { versioned: true } : {}),\n\t\t\t},\n\t\t];\n\t}\n\n\t/**\n\t * Builds the client from the single URL the adapter supplied.\n\t *\n\t * The URL's scheme selects the driver, so this construct imports no provider\n\t * and an app that never touches S3 never resolves the AWS SDK. Whoever\n\t * assembles the application registers the drivers its target needs.\n\t */\n\tprivate async connect({\n\t\tenvParser,\n\t}: ServiceRegisterOptions): Promise<StorageClient> {\n\t\tconst { url } = envParser\n\t\t\t.create((get) => ({ url: get(this.keys.url).string() }))\n\t\t\t.parse();\n\n\t\treturn createStorageClient(url);\n\t}\n}\n"],"mappings":";;;;;;;;;;;AAyBA,IAAa,gBAAb,MAEA;CAamB;CAZlB;CACA;;;;;;CAOA;CAEA,YACC,IACA,UAAiD,CAAC,GACjD;EADgB,KAAA,UAAA;EAIjB,MAAM,YAAY,YAAY,EAAY;EAE1C,KAAK,KAAK;EACV,KAAK,OAAO,EAAE,KAAK,WAAW,WAAW,KAAK,EAAE;EAGhD,KAAK,UAAU;GACd,aAAa,WAAW,SAAS;GACjC,WAAW,YAAY,KAAK,QAAQ,OAAO;EAC5C;CACD;CAEA,UAAyB;EACxB,OAAO,CACN;GACC,MAAM;GACN,IAAI,KAAK;GACT,UAAU,CAAC,KAAK,KAAK,GAAG;GACxB,GAAI,KAAK,QAAQ,YAAY,EAAE,WAAW,KAAK,IAAI,CAAC;EACrD,CACD;CACD;;;;;;;;CASA,MAAc,QAAQ,EACrB,aACkD;EAClD,MAAM,EAAE,QAAQ,UACd,QAAQ,SAAS,EAAE,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACvD,MAAM;EAER,OAAO,oBAAoB,GAAG;CAC/B;AACD"}
@@ -1,5 +1,4 @@
1
1
  import { DefaultAuditor } from "@geekmidas/audit";
2
-
3
2
  //#region src/endpoints/processAudits.ts
4
3
  /**
5
4
  * Create audit context for handler execution.
@@ -12,9 +11,8 @@ import { DefaultAuditor } from "@geekmidas/audit";
12
11
  * @returns Audit context with auditor and storage, or undefined if not configured
13
12
  */
14
13
  async function createAuditContext(endpoint, serviceDiscovery, logger, ctx) {
15
- if (!endpoint.auditorStorageService) return void 0;
16
- const services = await serviceDiscovery.register([endpoint.auditorStorageService]);
17
- const storage = services[endpoint.auditorStorageService.serviceName];
14
+ if (!endpoint.auditorStorageService) return;
15
+ const storage = (await serviceDiscovery.register([endpoint.auditorStorageService]))[endpoint.auditorStorageService.serviceName];
18
16
  let actor = {
19
17
  id: "system",
20
18
  type: "system"
@@ -30,16 +28,15 @@ async function createAuditContext(endpoint, serviceDiscovery, logger, ctx) {
30
28
  } catch (error) {
31
29
  logger.error(error, "Failed to extract actor for audits");
32
30
  }
33
- const auditor = new DefaultAuditor({
34
- actor,
35
- storage,
36
- metadata: {
37
- endpoint: endpoint.route,
38
- method: endpoint.method
39
- }
40
- });
41
31
  return {
42
- auditor,
32
+ auditor: new DefaultAuditor({
33
+ actor,
34
+ storage,
35
+ metadata: {
36
+ endpoint: endpoint.route,
37
+ method: endpoint.method
38
+ }
39
+ }),
43
40
  storage
44
41
  };
45
42
  }
@@ -65,16 +62,16 @@ async function executeWithAuditTransaction(auditContext, handler, onComplete, op
65
62
  if (!auditContext) return handler(void 0);
66
63
  const { auditor, storage } = auditContext;
67
64
  if (storage.withTransaction) return storage.withTransaction(auditor, async () => {
68
- const response$1 = await handler(auditor);
69
- if (onComplete) await onComplete(response$1, auditor);
70
- return response$1;
65
+ const response = await handler(auditor);
66
+ if (onComplete) await onComplete(response, auditor);
67
+ return response;
71
68
  }, options?.db);
72
69
  const response = await handler(auditor);
73
70
  if (onComplete) await onComplete(response, auditor);
74
71
  await auditor.flush();
75
72
  return response;
76
73
  }
77
-
78
74
  //#endregion
79
- export { createAuditContext, executeWithAuditTransaction };
80
- //# sourceMappingURL=processAudits-Dmts9H_b.mjs.map
75
+ export { executeWithAuditTransaction as n, createAuditContext as t };
76
+
77
+ //# sourceMappingURL=processAudits-BpRlPQMW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processAudits-BpRlPQMW.mjs","names":[],"sources":["../src/endpoints/processAudits.ts"],"sourcesContent":["import type {\n\tAuditActor,\n\tAuditableAction,\n\tAuditor,\n\tAuditStorage,\n} from '@geekmidas/audit';\nimport { DefaultAuditor } from '@geekmidas/audit';\nimport type { Logger } from '@geekmidas/logger';\nimport type { InferStandardSchema } from '@geekmidas/schema';\nimport type { Service, ServiceDiscovery } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type { ActorExtractor, MappedAudit } from './audit';\nimport type { CookieFn, Endpoint, HeaderFn } from './Endpoint';\n\n/**\n * Process declarative audit definitions after successful endpoint execution.\n * Similar to publishConstructEvents for events.\n *\n * @param endpoint - The endpoint with audit configuration\n * @param response - The handler response to generate audit payloads from\n * @param serviceDiscovery - Service discovery for registering audit storage\n * @param logger - Logger for debug/error messages\n * @param ctx - Request context (session, headers, cookies, services)\n * @param existingAuditor - Optional existing auditor instance (e.g., from handler context).\n * If provided, uses this auditor (with its stored transaction).\n * If not provided, creates a new auditor.\n */\nexport async function processEndpointAudits<\n\tTServices extends Service[] = [],\n\tTSession = unknown,\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n>(\n\tendpoint: Endpoint<\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tOutSchema,\n\t\tTServices,\n\t\tTLogger,\n\t\tTSession,\n\t\tany,\n\t\tany,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction\n\t>,\n\tresponse: InferStandardSchema<OutSchema>,\n\tserviceDiscovery: ServiceDiscovery<any>,\n\tlogger: TLogger,\n\tctx: {\n\t\tsession: TSession;\n\t\theader: HeaderFn;\n\t\tcookie: CookieFn;\n\t\tservices: Record<string, unknown>;\n\t},\n\texistingAuditor?: Auditor<TAuditAction>,\n): Promise<void> {\n\ttry {\n\t\tconst audits = endpoint.audits as MappedAudit<TAuditAction, OutSchema>[];\n\n\t\t// If we have an existing auditor (from handler context), we need to flush\n\t\t// any manual audits it collected, even if there are no declarative audits\n\t\tconst hasExistingRecords =\n\t\t\texistingAuditor && existingAuditor.getRecords().length > 0;\n\n\t\t// Skip if no declarative audits and no existing records to flush\n\t\tif (!audits?.length && !hasExistingRecords) {\n\t\t\tlogger.debug('No audits to process');\n\t\t\treturn;\n\t\t}\n\n\t\t// If no auditor storage service and we have things to process, warn\n\t\tif (!endpoint.auditorStorageService) {\n\t\t\tif (hasExistingRecords || audits?.length) {\n\t\t\t\tlogger.warn('No auditor storage service available');\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Get or create auditor\n\t\tlet auditor: Auditor<TAuditAction>;\n\n\t\tif (existingAuditor) {\n\t\t\t// Use existing auditor (preserves stored transaction and manual audits)\n\t\t\tauditor = existingAuditor;\n\t\t\tlogger.debug('Using existing auditor from handler context');\n\t\t} else {\n\t\t\t// Create new auditor (backward compatibility)\n\t\t\tconst services = await serviceDiscovery.register([\n\t\t\t\tendpoint.auditorStorageService,\n\t\t\t]);\n\t\t\tconst storage = services[\n\t\t\t\tendpoint.auditorStorageService.serviceName\n\t\t\t] as AuditStorage;\n\n\t\t\t// Extract actor if configured\n\t\t\tlet actor: AuditActor = { id: 'system', type: 'system' };\n\t\t\tif (endpoint.actorExtractor) {\n\t\t\t\ttry {\n\t\t\t\t\tactor = await (\n\t\t\t\t\t\tendpoint.actorExtractor as ActorExtractor<\n\t\t\t\t\t\t\tTServices,\n\t\t\t\t\t\t\tTSession,\n\t\t\t\t\t\t\tTLogger\n\t\t\t\t\t\t>\n\t\t\t\t\t)({\n\t\t\t\t\t\tservices: ctx.services as any,\n\t\t\t\t\t\tsession: ctx.session,\n\t\t\t\t\t\theader: ctx.header,\n\t\t\t\t\t\tcookie: ctx.cookie,\n\t\t\t\t\t\tlogger,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(error as Error, 'Failed to extract actor for audits');\n\t\t\t\t\t// Continue with system actor\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tauditor = new DefaultAuditor<TAuditAction>({\n\t\t\t\tactor,\n\t\t\t\tstorage,\n\t\t\t\tmetadata: {\n\t\t\t\t\tendpoint: endpoint.route,\n\t\t\t\t\tmethod: endpoint.method,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\t// Process each declarative audit\n\t\tif (audits?.length) {\n\t\t\tfor (const audit of audits) {\n\t\t\t\tlogger.debug({ audit: audit.type }, 'Processing declarative audit');\n\n\t\t\t\t// Check when condition\n\t\t\t\tif (audit.when && !audit.when(response as any)) {\n\t\t\t\t\tlogger.debug(\n\t\t\t\t\t\t{ audit: audit.type },\n\t\t\t\t\t\t'Audit skipped due to when condition',\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Extract payload\n\t\t\t\tconst payload = audit.payload(response as any);\n\n\t\t\t\t// Extract entityId if configured\n\t\t\t\tconst entityId = audit.entityId?.(response as any);\n\n\t\t\t\t// Record the audit\n\t\t\t\tauditor.audit(audit.type as any, payload as any, {\n\t\t\t\t\ttable: audit.table,\n\t\t\t\t\tentityId,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Flush audits to storage\n\t\t// Note: If existingAuditor has a stored transaction (via setTransaction),\n\t\t// flush() will use it automatically\n\t\tconst recordCount = auditor.getRecords().length;\n\t\tif (recordCount > 0) {\n\t\t\t// Check if auditor has a stored transaction (for logging purposes)\n\t\t\tconst trx =\n\t\t\t\t'getTransaction' in auditor\n\t\t\t\t\t? (auditor as { getTransaction(): unknown }).getTransaction()\n\t\t\t\t\t: undefined;\n\t\t\tlogger.debug(\n\t\t\t\t{ auditCount: recordCount, hasTransaction: !!trx },\n\t\t\t\t'Flushing audits',\n\t\t\t);\n\t\t\tawait auditor.flush();\n\t\t}\n\t} catch (error) {\n\t\tlogger.error(error as Error, 'Failed to process audits');\n\t\t// Don't rethrow - audit failures shouldn't fail the request\n\t}\n}\n\n/**\n * Context for audit-aware handler execution.\n */\nexport interface AuditExecutionContext<\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n> {\n\t/** The auditor instance for recording audits */\n\tauditor: Auditor<TAuditAction>;\n\t/** The audit storage instance */\n\tstorage: AuditStorage;\n}\n\n/**\n * Create audit context for handler execution.\n * Returns the auditor and storage for use in the handler.\n *\n * @param endpoint - The endpoint with audit configuration\n * @param serviceDiscovery - Service discovery for getting audit storage\n * @param logger - Logger for debug/error messages\n * @param ctx - Request context for actor extraction\n * @returns Audit context with auditor and storage, or undefined if not configured\n */\nexport async function createAuditContext<\n\tTServices extends Service[] = [],\n\tTSession = unknown,\n\tTLogger extends Logger = Logger,\n\tTAuditStorage extends AuditStorage | undefined = undefined,\n\tTAuditStorageServiceName extends string = string,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n\tTDatabase = undefined,\n\tTDatabaseServiceName extends string = string,\n>(\n\tendpoint: Endpoint<\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tany,\n\t\tTServices,\n\t\tTLogger,\n\t\tTSession,\n\t\tany,\n\t\tany,\n\t\tTAuditStorage,\n\t\tTAuditStorageServiceName,\n\t\tTAuditAction,\n\t\tTDatabase,\n\t\tTDatabaseServiceName\n\t>,\n\tserviceDiscovery: ServiceDiscovery<any>,\n\tlogger: TLogger,\n\tctx: {\n\t\tsession: TSession;\n\t\theader: HeaderFn;\n\t\tcookie: CookieFn;\n\t\tservices: Record<string, unknown>;\n\t},\n): Promise<AuditExecutionContext<TAuditAction> | undefined> {\n\tif (!endpoint.auditorStorageService) {\n\t\treturn undefined;\n\t}\n\n\tconst services = await serviceDiscovery.register([\n\t\tendpoint.auditorStorageService,\n\t]);\n\tconst storage = services[\n\t\tendpoint.auditorStorageService.serviceName\n\t] as AuditStorage;\n\n\t// Extract actor if configured\n\tlet actor: AuditActor = { id: 'system', type: 'system' };\n\tif (endpoint.actorExtractor) {\n\t\ttry {\n\t\t\tactor = await (\n\t\t\t\tendpoint.actorExtractor as ActorExtractor<TServices, TSession, TLogger>\n\t\t\t)({\n\t\t\t\tservices: ctx.services as any,\n\t\t\t\tsession: ctx.session,\n\t\t\t\theader: ctx.header,\n\t\t\t\tcookie: ctx.cookie,\n\t\t\t\tlogger,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tlogger.error(error as Error, 'Failed to extract actor for audits');\n\t\t}\n\t}\n\n\tconst auditor = new DefaultAuditor<TAuditAction>({\n\t\tactor,\n\t\tstorage,\n\t\tmetadata: {\n\t\t\tendpoint: endpoint.route,\n\t\t\tmethod: endpoint.method,\n\t\t},\n\t});\n\n\treturn { auditor, storage };\n}\n\n/**\n * Options for executeWithAuditTransaction.\n */\nexport interface ExecuteWithAuditTransactionOptions {\n\t/**\n\t * Database connection to use for the transaction.\n\t * If this is already a transaction, it will be reused instead of creating a nested one.\n\t * If not provided, the storage's internal database is used.\n\t */\n\tdb?: unknown;\n}\n\n/**\n * Execute a handler with automatic audit transaction support.\n * If the audit storage provides a withTransaction method, wraps execution\n * in a transaction so audits are atomic with handler's database operations.\n *\n * This is database-agnostic - each storage implementation provides its own\n * transaction handling based on the underlying database (Kysely, Drizzle, etc.).\n *\n * If the db parameter is provided and is already a transaction, the storage\n * will reuse it instead of creating a nested transaction (similar to\n * packages/db/src/kysely.ts#withTransaction).\n *\n * @param auditContext - The audit context from createAuditContext\n * @param handler - The handler function to execute (receives auditor)\n * @param onComplete - Called after handler with response, to process declarative audits\n * @param options - Optional configuration including database connection\n * @returns The handler result\n */\nexport async function executeWithAuditTransaction<\n\tT,\n\tTAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n\t\tstring,\n\t\tunknown\n\t>,\n>(\n\tauditContext: AuditExecutionContext<TAuditAction> | undefined,\n\thandler: (auditor?: Auditor<TAuditAction>) => Promise<T>,\n\tonComplete?: (response: T, auditor: Auditor<TAuditAction>) => Promise<void>,\n\toptions?: ExecuteWithAuditTransactionOptions,\n): Promise<T> {\n\t// No audit context - just run handler\n\tif (!auditContext) {\n\t\treturn handler(undefined);\n\t}\n\n\tconst { auditor, storage } = auditContext;\n\n\t// Check if storage provides a transaction wrapper\n\tif (storage.withTransaction) {\n\t\t// Wrap in transaction - audits are atomic with handler operations\n\t\t// The storage's withTransaction handles setTransaction and flush\n\t\t// Pass db so existing transactions are reused\n\t\treturn storage.withTransaction(\n\t\t\tauditor,\n\t\t\tasync () => {\n\t\t\t\tconst response = await handler(auditor);\n\n\t\t\t\t// Process declarative audits within the transaction\n\t\t\t\tif (onComplete) {\n\t\t\t\t\tawait onComplete(response, auditor);\n\t\t\t\t}\n\n\t\t\t\treturn response;\n\t\t\t},\n\t\t\toptions?.db,\n\t\t);\n\t}\n\n\t// No transaction support - run handler and flush audits after\n\tconst response = await handler(auditor);\n\n\tif (onComplete) {\n\t\tawait onComplete(response, auditor);\n\t}\n\n\t// Flush audits (no transaction)\n\tawait auditor.flush();\n\n\treturn response;\n}\n"],"mappings":";;;;;;;;;;;;AAkNA,eAAsB,mBAarB,UAgBA,kBACA,QACA,KAM2D;CAC3D,IAAI,CAAC,SAAS,uBACb;CAMD,MAAM,WAAU,MAHO,iBAAiB,SAAS,CAChD,SAAS,qBACV,CAAC,EAAA,CAEA,SAAS,sBAAsB;CAIhC,IAAI,QAAoB;EAAE,IAAI;EAAU,MAAM;CAAS;CACvD,IAAI,SAAS,gBACZ,IAAI;EACH,QAAQ,MACP,SAAS,eACR;GACD,UAAU,IAAI;GACd,SAAS,IAAI;GACb,QAAQ,IAAI;GACZ,QAAQ,IAAI;GACZ;EACD,CAAC;CACF,SAAS,OAAO;EACf,OAAO,MAAM,OAAgB,oCAAoC;CAClE;CAYD,OAAO;EAAE,SAAA,IATW,eAA6B;GAChD;GACA;GACA,UAAU;IACT,UAAU,SAAS;IACnB,QAAQ,SAAS;GAClB;EACD,CAEe;EAAG;CAAQ;AAC3B;;;;;;;;;;;;;;;;;;;AAgCA,eAAsB,4BAOrB,cACA,SACA,YACA,SACa;CAEb,IAAI,CAAC,cACJ,OAAO,QAAQ,KAAA,CAAS;CAGzB,MAAM,EAAE,SAAS,YAAY;CAG7B,IAAI,QAAQ,iBAIX,OAAO,QAAQ,gBACd,SACA,YAAY;EACX,MAAM,WAAW,MAAM,QAAQ,OAAO;EAGtC,IAAI,YACH,MAAM,WAAW,UAAU,OAAO;EAGnC,OAAO;CACR,GACA,SAAS,EACV;CAID,MAAM,WAAW,MAAM,QAAQ,OAAO;CAEtC,IAAI,YACH,MAAM,WAAW,UAAU,OAAO;CAInC,MAAM,QAAQ,MAAM;CAEpB,OAAO;AACR"}