@geekmidas/constructs 10.0.0-alpha.11 → 10.0.0-alpha.111

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 (438) hide show
  1. package/README.md +222 -158
  2. package/dist/Construct-BQALFCh2.d.cts +230 -0
  3. package/dist/Construct-BQALFCh2.d.cts.map +1 -0
  4. package/dist/{Construct-BD5neF7w.mjs → Construct-CKUA-CTA.mjs} +35 -35
  5. package/dist/Construct-CKUA-CTA.mjs.map +1 -0
  6. package/dist/{Construct-CyS3RpTL.cjs → Construct-DEOVauyA.cjs} +55 -49
  7. package/dist/Construct-DEOVauyA.cjs.map +1 -0
  8. package/dist/Construct-QXnl3VqT.d.mts +230 -0
  9. package/dist/Construct-QXnl3VqT.d.mts.map +1 -0
  10. package/dist/{Cron-DmQ8vQ4b.d.cts → Cron-CQJqqkhY.d.mts} +17 -11
  11. package/dist/Cron-CQJqqkhY.d.mts.map +1 -0
  12. package/dist/{Cron-dh4rUgib.d.mts → Cron-DI3nKoic.d.cts} +17 -11
  13. package/dist/Cron-DI3nKoic.d.cts.map +1 -0
  14. package/dist/{CronBuilder-Da0C0edR.cjs → CronBuilder-BXTG10u5.cjs} +47 -31
  15. package/dist/CronBuilder-BXTG10u5.cjs.map +1 -0
  16. package/dist/{CronBuilder-CYKT5RiO.mjs → CronBuilder-D3sF9tS_.mjs} +37 -21
  17. package/dist/CronBuilder-D3sF9tS_.mjs.map +1 -0
  18. package/dist/CronBuilder-Xx_zakuc.d.mts +47 -0
  19. package/dist/CronBuilder-Xx_zakuc.d.mts.map +1 -0
  20. package/dist/CronBuilder-g1lZLWyG.d.cts +47 -0
  21. package/dist/CronBuilder-g1lZLWyG.d.cts.map +1 -0
  22. package/dist/{Endpoint-BjWKinFA.d.mts → Endpoint-BWyKCa2x.d.cts} +130 -100
  23. package/dist/Endpoint-BWyKCa2x.d.cts.map +1 -0
  24. package/dist/{Endpoint-dav89W6-.d.cts → Endpoint-CrE9Ppdk.d.mts} +130 -100
  25. package/dist/Endpoint-CrE9Ppdk.d.mts.map +1 -0
  26. package/dist/{Endpoint-DCQPMdUX.mjs → Endpoint-gPXhHKhJ.mjs} +208 -100
  27. package/dist/Endpoint-gPXhHKhJ.mjs.map +1 -0
  28. package/dist/{Endpoint-DcWXE-SZ.cjs → Endpoint-yhR2T2Wt.cjs} +248 -122
  29. package/dist/Endpoint-yhR2T2Wt.cjs.map +1 -0
  30. package/dist/{index-lAO9egTb.d.mts → EndpointFactory-BV-nfnaP.d.mts} +85 -136
  31. package/dist/EndpointFactory-BV-nfnaP.d.mts.map +1 -0
  32. package/dist/{EndpointFactory-CdWB7wPw.cjs → EndpointFactory-BVv6EIDu.cjs} +98 -112
  33. package/dist/EndpointFactory-BVv6EIDu.cjs.map +1 -0
  34. package/dist/{index-Bd5FqCoe.d.cts → EndpointFactory-C1-IBwm4.d.cts} +84 -135
  35. package/dist/EndpointFactory-C1-IBwm4.d.cts.map +1 -0
  36. package/dist/{EndpointFactory-CjV8F_lJ.mjs → EndpointFactory-Cs8IHvwF.mjs} +62 -76
  37. package/dist/EndpointFactory-Cs8IHvwF.mjs.map +1 -0
  38. package/dist/Function-DuqGcbOI.d.mts +76 -0
  39. package/dist/Function-DuqGcbOI.d.mts.map +1 -0
  40. package/dist/Function-Pu-1kKZz.d.cts +76 -0
  41. package/dist/Function-Pu-1kKZz.d.cts.map +1 -0
  42. package/dist/{HonoEndpointAdaptor-DtL9j19R.cjs → HonoEndpointAdaptor-CN1jjUBJ.cjs} +115 -71
  43. package/dist/HonoEndpointAdaptor-CN1jjUBJ.cjs.map +1 -0
  44. package/dist/{HonoEndpointAdaptor-P1ahhZHu.mjs → HonoEndpointAdaptor-euH1oSdY.mjs} +105 -64
  45. package/dist/HonoEndpointAdaptor-euH1oSdY.mjs.map +1 -0
  46. package/dist/Queue-BhuofM3k.cjs +109 -0
  47. package/dist/Queue-BhuofM3k.cjs.map +1 -0
  48. package/dist/{Queue-D7ZuwBhy.d.cts → Queue-DlsHRzUp.d.mts} +48 -48
  49. package/dist/Queue-DlsHRzUp.d.mts.map +1 -0
  50. package/dist/{Queue-gVGfi2Yk.d.mts → Queue-HPyi0e1i.d.cts} +49 -49
  51. package/dist/Queue-HPyi0e1i.d.cts.map +1 -0
  52. package/dist/Queue-cmhqEBOB.mjs +104 -0
  53. package/dist/Queue-cmhqEBOB.mjs.map +1 -0
  54. package/dist/QueueBuilder-Cx9lKC5d.d.mts +75 -0
  55. package/dist/QueueBuilder-Cx9lKC5d.d.mts.map +1 -0
  56. package/dist/QueueBuilder-DXu1qxT1.mjs +118 -0
  57. package/dist/QueueBuilder-DXu1qxT1.mjs.map +1 -0
  58. package/dist/QueueBuilder-DdU2klPu.cjs +135 -0
  59. package/dist/QueueBuilder-DdU2klPu.cjs.map +1 -0
  60. package/dist/QueueBuilder-OSi6LkV9.d.cts +75 -0
  61. package/dist/QueueBuilder-OSi6LkV9.d.cts.map +1 -0
  62. package/dist/{Subscriber-2mEi0ImH.d.cts → Subscriber-Bpp02cGr.d.cts} +29 -20
  63. package/dist/Subscriber-Bpp02cGr.d.cts.map +1 -0
  64. package/dist/{Subscriber-xTJ9ayPN.d.mts → Subscriber-CtN9R48-.d.mts} +29 -20
  65. package/dist/Subscriber-CtN9R48-.d.mts.map +1 -0
  66. package/dist/SubscriberBuilder-4DWe9feX.d.mts +67 -0
  67. package/dist/SubscriberBuilder-4DWe9feX.d.mts.map +1 -0
  68. package/dist/{SubscriberBuilder-BjkbeT9l.mjs → SubscriberBuilder-DRXfxWn_.mjs} +50 -24
  69. package/dist/SubscriberBuilder-DRXfxWn_.mjs.map +1 -0
  70. package/dist/{SubscriberBuilder-4OPehf2R.cjs → SubscriberBuilder-M2EAgQhC.cjs} +61 -36
  71. package/dist/SubscriberBuilder-M2EAgQhC.cjs.map +1 -0
  72. package/dist/SubscriberBuilder-g3fAVWgs.d.cts +67 -0
  73. package/dist/SubscriberBuilder-g3fAVWgs.d.cts.map +1 -0
  74. package/dist/Topic-D2R0r24C.mjs +99 -0
  75. package/dist/Topic-D2R0r24C.mjs.map +1 -0
  76. package/dist/Topic-DwS3QO0m.cjs +104 -0
  77. package/dist/Topic-DwS3QO0m.cjs.map +1 -0
  78. package/dist/adaptors/aws.cjs +200 -246
  79. package/dist/adaptors/aws.cjs.map +1 -1
  80. package/dist/adaptors/aws.d.cts +58 -62
  81. package/dist/adaptors/aws.d.cts.map +1 -1
  82. package/dist/adaptors/aws.d.mts +59 -63
  83. package/dist/adaptors/aws.d.mts.map +1 -1
  84. package/dist/adaptors/aws.mjs +171 -219
  85. package/dist/adaptors/aws.mjs.map +1 -1
  86. package/dist/adaptors/hono.cjs +3 -10
  87. package/dist/adaptors/hono.d.cts +7 -16
  88. package/dist/adaptors/hono.d.cts.map +1 -1
  89. package/dist/adaptors/hono.d.mts +9 -18
  90. package/dist/adaptors/hono.d.mts.map +1 -1
  91. package/dist/adaptors/hono.mjs +2 -10
  92. package/dist/adaptors/testing.cjs +765 -99
  93. package/dist/adaptors/testing.cjs.map +1 -1
  94. package/dist/adaptors/testing.d.cts +351 -54
  95. package/dist/adaptors/testing.d.cts.map +1 -1
  96. package/dist/adaptors/testing.d.mts +351 -54
  97. package/dist/adaptors/testing.d.mts.map +1 -1
  98. package/dist/adaptors/testing.mjs +726 -78
  99. package/dist/adaptors/testing.mjs.map +1 -1
  100. package/dist/auth-BMCJN30Y.d.cts +268 -0
  101. package/dist/auth-BMCJN30Y.d.cts.map +1 -0
  102. package/dist/auth-D_0788uW.d.mts +268 -0
  103. package/dist/auth-D_0788uW.d.mts.map +1 -0
  104. package/dist/auth.cjs +301 -33
  105. package/dist/auth.cjs.map +1 -1
  106. package/dist/auth.d.cts +2 -108
  107. package/dist/auth.d.mts +2 -108
  108. package/dist/auth.mjs +289 -27
  109. package/dist/auth.mjs.map +1 -1
  110. package/dist/{cache-BrRz3fEB.d.mts → cache-5QZzh5Er.d.mts} +3 -6
  111. package/dist/cache-5QZzh5Er.d.mts.map +1 -0
  112. package/dist/{cache-BtZY_tHe.d.cts → cache-DnGDGly3.d.cts} +3 -6
  113. package/dist/cache-DnGDGly3.d.cts.map +1 -0
  114. package/dist/cache.cjs +68 -2
  115. package/dist/cache.cjs.map +1 -0
  116. package/dist/cache.d.cts +1 -2
  117. package/dist/cache.d.mts +1 -2
  118. package/dist/cache.mjs +67 -2
  119. package/dist/cache.mjs.map +1 -0
  120. package/dist/cipher-C1lEFX63.mjs +225 -0
  121. package/dist/cipher-C1lEFX63.mjs.map +1 -0
  122. package/dist/cipher-CVxfwLjk.cjs +332 -0
  123. package/dist/cipher-CVxfwLjk.cjs.map +1 -0
  124. package/dist/{clone-DblgEZZa.mjs → clone-EKNovYHu.mjs} +3 -3
  125. package/dist/clone-EKNovYHu.mjs.map +1 -0
  126. package/dist/{clone-Dy0cR2SZ.cjs → clone-UGJpvQnL.cjs} +7 -8
  127. package/dist/clone-UGJpvQnL.cjs.map +1 -0
  128. package/dist/{construct-interface-D9d4Gm4p.d.cts → construct-interface-B1AfqRl4.d.cts} +42 -11
  129. package/dist/construct-interface-B1AfqRl4.d.cts.map +1 -0
  130. package/dist/{construct-interface-g5GM5pwR.d.mts → construct-interface-ZvYQbivO.d.mts} +42 -11
  131. package/dist/construct-interface-ZvYQbivO.d.mts.map +1 -0
  132. package/dist/construct-interface.cjs +113 -7
  133. package/dist/construct-interface.cjs.map +1 -0
  134. package/dist/construct-interface.d.cts +2 -2
  135. package/dist/construct-interface.d.mts +2 -2
  136. package/dist/construct-interface.mjs +106 -2
  137. package/dist/construct-interface.mjs.map +1 -0
  138. package/dist/credential-DYymbp_7.cjs +257 -0
  139. package/dist/credential-DYymbp_7.cjs.map +1 -0
  140. package/dist/credential-DfSAOOdY.mjs +222 -0
  141. package/dist/credential-DfSAOOdY.mjs.map +1 -0
  142. package/dist/credential.cjs +8 -96
  143. package/dist/credential.d.cts +2 -61
  144. package/dist/credential.d.mts +2 -61
  145. package/dist/credential.mjs +2 -94
  146. package/dist/crons/index.cjs +129 -7
  147. package/dist/crons/index.cjs.map +1 -1
  148. package/dist/crons/index.d.cts +45 -11
  149. package/dist/crons/index.d.cts.map +1 -1
  150. package/dist/crons/index.d.mts +45 -11
  151. package/dist/crons/index.d.mts.map +1 -1
  152. package/dist/crons/index.mjs +127 -8
  153. package/dist/crons/index.mjs.map +1 -1
  154. package/dist/database/kysely.cjs +4 -181
  155. package/dist/database/kysely.d.cts +2 -152
  156. package/dist/database/kysely.d.mts +2 -152
  157. package/dist/database/kysely.mjs +2 -180
  158. package/dist/email.cjs +25 -12
  159. package/dist/email.cjs.map +1 -1
  160. package/dist/email.d.cts +3 -7
  161. package/dist/email.d.cts.map +1 -1
  162. package/dist/email.d.mts +4 -8
  163. package/dist/email.d.mts.map +1 -1
  164. package/dist/email.mjs +16 -3
  165. package/dist/email.mjs.map +1 -1
  166. package/dist/encryption.cjs +96 -0
  167. package/dist/encryption.cjs.map +1 -0
  168. package/dist/encryption.d.cts +117 -0
  169. package/dist/encryption.d.cts.map +1 -0
  170. package/dist/encryption.d.mts +117 -0
  171. package/dist/encryption.d.mts.map +1 -0
  172. package/dist/encryption.mjs +83 -0
  173. package/dist/encryption.mjs.map +1 -0
  174. package/dist/endpoints/index.cjs +20 -16
  175. package/dist/endpoints/index.d.cts +105 -7
  176. package/dist/endpoints/index.d.cts.map +1 -0
  177. package/dist/endpoints/index.d.mts +105 -7
  178. package/dist/endpoints/index.d.mts.map +1 -0
  179. package/dist/endpoints/index.mjs +6 -10
  180. package/dist/external-api.cjs +106 -0
  181. package/dist/external-api.cjs.map +1 -0
  182. package/dist/external-api.d.cts +2 -0
  183. package/dist/external-api.d.mts +2 -0
  184. package/dist/external-api.mjs +103 -0
  185. package/dist/external-api.mjs.map +1 -0
  186. package/dist/fake-DqKo8INJ.d.mts +201 -0
  187. package/dist/fake-DqKo8INJ.d.mts.map +1 -0
  188. package/dist/fake-Dvion_Fh.d.cts +201 -0
  189. package/dist/fake-Dvion_Fh.d.cts.map +1 -0
  190. package/dist/file-server.cjs +42 -10
  191. package/dist/file-server.cjs.map +1 -1
  192. package/dist/file-server.d.cts +6 -10
  193. package/dist/file-server.d.cts.map +1 -1
  194. package/dist/file-server.d.mts +6 -10
  195. package/dist/file-server.d.mts.map +1 -1
  196. package/dist/file-server.mjs +34 -2
  197. package/dist/file-server.mjs.map +1 -1
  198. package/dist/functions/index.cjs +3 -6
  199. package/dist/functions/index.d.cts +3 -4
  200. package/dist/functions/index.d.mts +3 -4
  201. package/dist/functions/index.mjs +2 -6
  202. package/dist/{functions-14lpEFL4.mjs → functions-CTI-hDem.mjs} +376 -238
  203. package/dist/{functions-14lpEFL4.mjs.map → functions-CTI-hDem.mjs.map} +1 -1
  204. package/dist/{functions-i_la-N5r.cjs → functions-D7O5SGVc.cjs} +414 -264
  205. package/dist/functions-D7O5SGVc.cjs.map +1 -0
  206. package/dist/index-B13kQB_U.d.mts +115 -0
  207. package/dist/index-B13kQB_U.d.mts.map +1 -0
  208. package/dist/index-BuzRvKOQ.d.cts +115 -0
  209. package/dist/index-BuzRvKOQ.d.cts.map +1 -0
  210. package/dist/index-CeEtxDmK.d.cts +79 -0
  211. package/dist/index-CeEtxDmK.d.cts.map +1 -0
  212. package/dist/index-CeEtxDmK.d.mts +79 -0
  213. package/dist/index-CeEtxDmK.d.mts.map +1 -0
  214. package/dist/index.cjs +6 -3
  215. package/dist/index.d.cts +27 -4
  216. package/dist/index.d.cts.map +1 -0
  217. package/dist/index.d.mts +27 -4
  218. package/dist/index.d.mts.map +1 -0
  219. package/dist/index.mjs +3 -3
  220. package/dist/kms-B-Hm3d5r.cjs +85 -0
  221. package/dist/kms-B-Hm3d5r.cjs.map +1 -0
  222. package/dist/kms-BdUlMJEZ.mjs +85 -0
  223. package/dist/kms-BdUlMJEZ.mjs.map +1 -0
  224. package/dist/kysely-B3zfg9ti.cjs +383 -0
  225. package/dist/kysely-B3zfg9ti.cjs.map +1 -0
  226. package/dist/kysely-B_0BAr0T.mjs +370 -0
  227. package/dist/kysely-B_0BAr0T.mjs.map +1 -0
  228. package/dist/kysely-D0bpzgPs.d.cts +175 -0
  229. package/dist/kysely-D0bpzgPs.d.cts.map +1 -0
  230. package/dist/kysely-DKwnl0nf.d.mts +175 -0
  231. package/dist/kysely-DKwnl0nf.d.mts.map +1 -0
  232. package/dist/{telemetry-C3L0iS28.d.cts → lambdaTelemetry-8vnmVZQ5.d.cts} +3 -6
  233. package/dist/lambdaTelemetry-8vnmVZQ5.d.cts.map +1 -0
  234. package/dist/{telemetry-D7bVFLGi.d.mts → lambdaTelemetry-8vnmVZQ5.d.mts} +3 -6
  235. package/dist/lambdaTelemetry-8vnmVZQ5.d.mts.map +1 -0
  236. package/dist/mobile-app.cjs +74 -0
  237. package/dist/mobile-app.cjs.map +1 -0
  238. package/dist/mobile-app.d.cts +73 -0
  239. package/dist/mobile-app.d.cts.map +1 -0
  240. package/dist/mobile-app.d.mts +73 -0
  241. package/dist/mobile-app.d.mts.map +1 -0
  242. package/dist/mobile-app.mjs +73 -0
  243. package/dist/mobile-app.mjs.map +1 -0
  244. package/dist/object-storage.cjs +18 -10
  245. package/dist/object-storage.cjs.map +1 -1
  246. package/dist/object-storage.d.cts +3 -7
  247. package/dist/object-storage.d.cts.map +1 -1
  248. package/dist/object-storage.d.mts +3 -7
  249. package/dist/object-storage.d.mts.map +1 -1
  250. package/dist/object-storage.mjs +11 -3
  251. package/dist/object-storage.mjs.map +1 -1
  252. package/dist/queue/index.cjs +6 -189
  253. package/dist/queue/index.d.cts +3 -60
  254. package/dist/queue/index.d.mts +3 -60
  255. package/dist/queue/index.mjs +3 -186
  256. package/dist/random-password.cjs +86 -0
  257. package/dist/random-password.cjs.map +1 -0
  258. package/dist/random-password.d.cts +30 -0
  259. package/dist/random-password.d.cts.map +1 -0
  260. package/dist/random-password.d.mts +30 -0
  261. package/dist/random-password.d.mts.map +1 -0
  262. package/dist/random-password.mjs +84 -0
  263. package/dist/random-password.mjs.map +1 -0
  264. package/dist/{lazyAccessors-BoJN3SMd.mjs → readRequestBody-BTIl3k-D.mjs} +117 -60
  265. package/dist/readRequestBody-BTIl3k-D.mjs.map +1 -0
  266. package/dist/readRequestBody-Dej_L3c4.cjs +342 -0
  267. package/dist/readRequestBody-Dej_L3c4.cjs.map +1 -0
  268. package/dist/requestLogger-BZcXwdBs.cjs +207 -0
  269. package/dist/requestLogger-BZcXwdBs.cjs.map +1 -0
  270. package/dist/requestLogger-pA4gi3E1.mjs +178 -0
  271. package/dist/requestLogger-pA4gi3E1.mjs.map +1 -0
  272. package/dist/rest-api.cjs +90 -59
  273. package/dist/rest-api.cjs.map +1 -1
  274. package/dist/rest-api.d.cts +70 -42
  275. package/dist/rest-api.d.cts.map +1 -1
  276. package/dist/rest-api.d.mts +70 -42
  277. package/dist/rest-api.d.mts.map +1 -1
  278. package/dist/rest-api.mjs +82 -51
  279. package/dist/rest-api.mjs.map +1 -1
  280. package/dist/{chunk-DWy1uDak.cjs → rolldown-runtime-y5ARvAq5.cjs} +14 -18
  281. package/dist/runSubscriber-BHvJ8POr.mjs +109 -0
  282. package/dist/runSubscriber-BHvJ8POr.mjs.map +1 -0
  283. package/dist/runSubscriber-D8nLXIv1.cjs +126 -0
  284. package/dist/runSubscriber-D8nLXIv1.cjs.map +1 -0
  285. package/dist/shutdown-BMJmAhSt.cjs +38 -0
  286. package/dist/shutdown-BMJmAhSt.cjs.map +1 -0
  287. package/dist/shutdown-C7xa8x9S.mjs +27 -0
  288. package/dist/shutdown-C7xa8x9S.mjs.map +1 -0
  289. package/dist/site.cjs +33 -7
  290. package/dist/site.cjs.map +1 -1
  291. package/dist/site.d.cts +17 -7
  292. package/dist/site.d.cts.map +1 -1
  293. package/dist/site.d.mts +17 -7
  294. package/dist/site.d.mts.map +1 -1
  295. package/dist/site.mjs +29 -3
  296. package/dist/site.mjs.map +1 -1
  297. package/dist/stages-BSCF19o2.d.cts +56 -0
  298. package/dist/stages-BSCF19o2.d.cts.map +1 -0
  299. package/dist/stages-BSCF19o2.d.mts +56 -0
  300. package/dist/stages-BSCF19o2.d.mts.map +1 -0
  301. package/dist/subscribers/index.cjs +118 -6
  302. package/dist/subscribers/index.cjs.map +1 -0
  303. package/dist/subscribers/index.d.cts +51 -6
  304. package/dist/subscribers/index.d.cts.map +1 -0
  305. package/dist/subscribers/index.d.mts +51 -6
  306. package/dist/subscribers/index.d.mts.map +1 -0
  307. package/dist/subscribers/index.mjs +115 -5
  308. package/dist/subscribers/index.mjs.map +1 -0
  309. package/dist/surfaceEnv-CNimK76p.cjs +56 -0
  310. package/dist/surfaceEnv-CNimK76p.cjs.map +1 -0
  311. package/dist/surfaceEnv-wMT5QzgZ.mjs +45 -0
  312. package/dist/surfaceEnv-wMT5QzgZ.mjs.map +1 -0
  313. package/dist/telemetry-B48RLjyk.d.cts +40 -0
  314. package/dist/telemetry-B48RLjyk.d.cts.map +1 -0
  315. package/dist/telemetry-BEoBn6GO.d.mts +40 -0
  316. package/dist/telemetry-BEoBn6GO.d.mts.map +1 -0
  317. package/dist/telemetry.cjs +56 -0
  318. package/dist/telemetry.cjs.map +1 -0
  319. package/dist/telemetry.d.cts +2 -0
  320. package/dist/telemetry.d.mts +2 -0
  321. package/dist/telemetry.mjs +55 -0
  322. package/dist/telemetry.mjs.map +1 -0
  323. package/dist/topic/index.cjs +3 -137
  324. package/dist/topic/index.d.cts +2 -4
  325. package/dist/topic/index.d.mts +2 -4
  326. package/dist/topic/index.mjs +2 -134
  327. package/dist/tracing-Bbj1uoFJ.mjs +127 -0
  328. package/dist/tracing-Bbj1uoFJ.mjs.map +1 -0
  329. package/dist/tracing-C0ooU0V2.cjs +150 -0
  330. package/dist/tracing-C0ooU0V2.cjs.map +1 -0
  331. package/dist/{types-BlAkSuGI.d.cts → types-DMuSQeLL.d.cts} +3 -5
  332. package/dist/types-DMuSQeLL.d.cts.map +1 -0
  333. package/dist/{types-aKksMEWL.d.mts → types-DMuSQeLL.d.mts} +3 -5
  334. package/dist/types-DMuSQeLL.d.mts.map +1 -0
  335. package/dist/types.d.cts +1 -1
  336. package/dist/types.d.mts +1 -1
  337. package/dist/types.mjs +1 -0
  338. package/dist/worker.cjs +59 -34
  339. package/dist/worker.cjs.map +1 -1
  340. package/dist/worker.d.cts +70 -45
  341. package/dist/worker.d.cts.map +1 -1
  342. package/dist/worker.d.mts +71 -46
  343. package/dist/worker.d.mts.map +1 -1
  344. package/dist/worker.mjs +54 -29
  345. package/dist/worker.mjs.map +1 -1
  346. package/package.json +106 -42
  347. package/dist/Construct-BD5neF7w.mjs.map +0 -1
  348. package/dist/Construct-C0ijr2qp.d.cts +0 -117
  349. package/dist/Construct-C0ijr2qp.d.cts.map +0 -1
  350. package/dist/Construct-Ct8nalEi.d.mts +0 -117
  351. package/dist/Construct-Ct8nalEi.d.mts.map +0 -1
  352. package/dist/Construct-CyS3RpTL.cjs.map +0 -1
  353. package/dist/Cron-DmQ8vQ4b.d.cts.map +0 -1
  354. package/dist/Cron-dh4rUgib.d.mts.map +0 -1
  355. package/dist/CronBuilder-BquXDbDI.d.cts +0 -44
  356. package/dist/CronBuilder-BquXDbDI.d.cts.map +0 -1
  357. package/dist/CronBuilder-CGgY2080.d.mts +0 -44
  358. package/dist/CronBuilder-CGgY2080.d.mts.map +0 -1
  359. package/dist/CronBuilder-CYKT5RiO.mjs.map +0 -1
  360. package/dist/CronBuilder-Da0C0edR.cjs.map +0 -1
  361. package/dist/Endpoint-BjWKinFA.d.mts.map +0 -1
  362. package/dist/Endpoint-DCQPMdUX.mjs.map +0 -1
  363. package/dist/Endpoint-DcWXE-SZ.cjs.map +0 -1
  364. package/dist/Endpoint-dav89W6-.d.cts.map +0 -1
  365. package/dist/EndpointFactory-CdWB7wPw.cjs.map +0 -1
  366. package/dist/EndpointFactory-CjV8F_lJ.mjs.map +0 -1
  367. package/dist/HonoEndpointAdaptor-DtL9j19R.cjs.map +0 -1
  368. package/dist/HonoEndpointAdaptor-P1ahhZHu.mjs.map +0 -1
  369. package/dist/Queue-D7ZuwBhy.d.cts.map +0 -1
  370. package/dist/Queue-gVGfi2Yk.d.mts.map +0 -1
  371. package/dist/Subscriber-2mEi0ImH.d.cts.map +0 -1
  372. package/dist/Subscriber-xTJ9ayPN.d.mts.map +0 -1
  373. package/dist/SubscriberBuilder-4OPehf2R.cjs.map +0 -1
  374. package/dist/SubscriberBuilder-BjkbeT9l.mjs.map +0 -1
  375. package/dist/SubscriberBuilder-Dptmo-1A.d.mts +0 -62
  376. package/dist/SubscriberBuilder-Dptmo-1A.d.mts.map +0 -1
  377. package/dist/SubscriberBuilder-waNhzjSM.d.cts +0 -62
  378. package/dist/SubscriberBuilder-waNhzjSM.d.cts.map +0 -1
  379. package/dist/Topic-19QeHBIR.d.cts +0 -91
  380. package/dist/Topic-19QeHBIR.d.cts.map +0 -1
  381. package/dist/Topic-DuFeqkBh.d.mts +0 -91
  382. package/dist/Topic-DuFeqkBh.d.mts.map +0 -1
  383. package/dist/auth.d.cts.map +0 -1
  384. package/dist/auth.d.mts.map +0 -1
  385. package/dist/cache-0ANvRQnD.mjs +0 -51
  386. package/dist/cache-0ANvRQnD.mjs.map +0 -1
  387. package/dist/cache-3WSvAulx.cjs +0 -57
  388. package/dist/cache-3WSvAulx.cjs.map +0 -1
  389. package/dist/cache-BrRz3fEB.d.mts.map +0 -1
  390. package/dist/cache-BtZY_tHe.d.cts.map +0 -1
  391. package/dist/clone-DblgEZZa.mjs.map +0 -1
  392. package/dist/clone-Dy0cR2SZ.cjs.map +0 -1
  393. package/dist/construct-interface-BfjcOD_E.cjs +0 -117
  394. package/dist/construct-interface-BfjcOD_E.cjs.map +0 -1
  395. package/dist/construct-interface-D9d4Gm4p.d.cts.map +0 -1
  396. package/dist/construct-interface-Z4CpS8tK.mjs +0 -81
  397. package/dist/construct-interface-Z4CpS8tK.mjs.map +0 -1
  398. package/dist/construct-interface-g5GM5pwR.d.mts.map +0 -1
  399. package/dist/credential.cjs.map +0 -1
  400. package/dist/credential.d.cts.map +0 -1
  401. package/dist/credential.d.mts.map +0 -1
  402. package/dist/credential.mjs.map +0 -1
  403. package/dist/database/kysely.cjs.map +0 -1
  404. package/dist/database/kysely.d.cts.map +0 -1
  405. package/dist/database/kysely.d.mts.map +0 -1
  406. package/dist/database/kysely.mjs.map +0 -1
  407. package/dist/functions-i_la-N5r.cjs.map +0 -1
  408. package/dist/index-Bd5FqCoe.d.cts.map +0 -1
  409. package/dist/index-BknhM6Ux.d.mts +0 -31
  410. package/dist/index-BknhM6Ux.d.mts.map +0 -1
  411. package/dist/index-CBSfrowv.d.cts +0 -31
  412. package/dist/index-CBSfrowv.d.cts.map +0 -1
  413. package/dist/index-D24Xm79M.d.cts +0 -171
  414. package/dist/index-D24Xm79M.d.cts.map +0 -1
  415. package/dist/index-_ajboYxK.d.mts +0 -171
  416. package/dist/index-_ajboYxK.d.mts.map +0 -1
  417. package/dist/index-lAO9egTb.d.mts.map +0 -1
  418. package/dist/lazyAccessors-BoJN3SMd.mjs.map +0 -1
  419. package/dist/lazyAccessors-e3j2oE2m.cjs +0 -274
  420. package/dist/lazyAccessors-e3j2oE2m.cjs.map +0 -1
  421. package/dist/processAudits-CGqttuXm.cjs +0 -92
  422. package/dist/processAudits-CGqttuXm.cjs.map +0 -1
  423. package/dist/processAudits-Dmts9H_b.mjs +0 -80
  424. package/dist/processAudits-Dmts9H_b.mjs.map +0 -1
  425. package/dist/queue/index.cjs.map +0 -1
  426. package/dist/queue/index.d.cts.map +0 -1
  427. package/dist/queue/index.d.mts.map +0 -1
  428. package/dist/queue/index.mjs.map +0 -1
  429. package/dist/surfaceEnv-BFXEms2f.cjs +0 -39
  430. package/dist/surfaceEnv-BFXEms2f.cjs.map +0 -1
  431. package/dist/surfaceEnv-C3Ktahea.mjs +0 -27
  432. package/dist/surfaceEnv-C3Ktahea.mjs.map +0 -1
  433. package/dist/telemetry-C3L0iS28.d.cts.map +0 -1
  434. package/dist/telemetry-D7bVFLGi.d.mts.map +0 -1
  435. package/dist/topic/index.cjs.map +0 -1
  436. package/dist/topic/index.mjs.map +0 -1
  437. package/dist/types-BlAkSuGI.d.cts.map +0 -1
  438. package/dist/types-aKksMEWL.d.mts.map +0 -1
@@ -1,21 +1,23 @@
1
- import { __toESM } from "../Construct-BD5neF7w.mjs";
2
- import "../construct-interface-Z4CpS8tK.mjs";
3
- import { FunctionBuilder } from "../functions-14lpEFL4.mjs";
4
- import "../clone-DblgEZZa.mjs";
5
- import { Endpoint, ResponseBuilder, require_lodash } from "../Endpoint-DCQPMdUX.mjs";
6
- import { envParserFor } from "../surfaceEnv-C3Ktahea.mjs";
7
- import { createApiGatewayCookies, publishConstructEvents, publishEvents } from "../lazyAccessors-BoJN3SMd.mjs";
8
- import { createAuditContext, executeWithAuditTransaction } from "../processAudits-Dmts9H_b.mjs";
1
+ import { o as __toESM } from "../Construct-CKUA-CTA.mjs";
2
+ import { r as recordCarrier } from "../tracing-Bbj1uoFJ.mjs";
3
+ import { a as publishEvents, i as publishConstructEvents, t as FunctionBuilder } from "../functions-CTI-hDem.mjs";
4
+ import { o as require_lodash_set, r as ResponseBuilder, t as Endpoint } from "../Endpoint-gPXhHKhJ.mjs";
5
+ import { n as envParserFor } from "../surfaceEnv-wMT5QzgZ.mjs";
6
+ import { a as createApiGatewayCookies, i as readRequestBody } from "../readRequestBody-BTIl3k-D.mjs";
7
+ import { n as subscribedEvents, r as subscriberContext, t as runSubscriber } from "../runSubscriber-BHvJ8POr.mjs";
8
+ import { i as executeWithAuditTransaction, n as enforceRateLimit, r as createAuditContext, t as requestLogger } from "../requestLogger-pA4gi3E1.mjs";
9
+ import { consumeBatchTraced } from "@geekmidas/events";
10
+ import { ServiceDiscovery, currentRequestContext, runWithRequestContext } from "@geekmidas/services";
9
11
  import { ForbiddenError, UnprocessableEntityError, wrapError } from "@geekmidas/errors";
10
- import { ServiceDiscovery, runWithRequestContext } from "@geekmidas/services";
12
+ import qs from "qs";
11
13
  import middy from "@middy/core";
12
14
  import { DefaultAuditor } from "@geekmidas/audit";
13
15
  import { withAuditableTransaction } from "@geekmidas/audit/kysely";
14
16
  import { withRlsContext } from "@geekmidas/db/rls";
15
- import qs from "qs";
16
-
17
17
  //#region src/functions/FunctionExecutionWrapper.ts
18
18
  var FunctionExecutionWrapper = class {
19
+ envParser;
20
+ fn;
19
21
  constructor(envParser, fn) {
20
22
  this.envParser = envParser;
21
23
  this.fn = fn;
@@ -25,25 +27,22 @@ var FunctionExecutionWrapper = class {
25
27
  return this._logger || this.fn.logger;
26
28
  }
27
29
  get serviceDiscovery() {
28
- const serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);
29
- return serviceDiscovery;
30
+ return ServiceDiscovery.getInstance(this.envParser);
30
31
  }
31
32
  getServices() {
32
33
  return this.serviceDiscovery.register(this.fn.services);
33
34
  }
34
35
  async getDatabase() {
35
- if (!this.fn.databaseService) return void 0;
36
- const services = await this.serviceDiscovery.register([this.fn.databaseService]);
37
- return services[this.fn.databaseService.serviceName];
36
+ if (!this.fn.databaseService) return;
37
+ return (await this.serviceDiscovery.register([this.fn.databaseService]))[this.fn.databaseService.serviceName];
38
38
  }
39
39
  /**
40
40
  * Get the audit storage service if configured.
41
41
  * Returns undefined if no auditor storage is configured.
42
42
  */
43
43
  async getAuditStorage() {
44
- if (!this.fn.auditorStorageService) return void 0;
45
- const services = await this.serviceDiscovery.register([this.fn.auditorStorageService]);
46
- return services[this.fn.auditorStorageService.serviceName];
44
+ if (!this.fn.auditorStorageService) return;
45
+ return (await this.serviceDiscovery.register([this.fn.auditorStorageService]))[this.fn.auditorStorageService.serviceName];
47
46
  }
48
47
  /**
49
48
  * Create an auditor instance for the function.
@@ -51,7 +50,7 @@ var FunctionExecutionWrapper = class {
51
50
  */
52
51
  async createAuditor() {
53
52
  const storage = await this.getAuditStorage();
54
- if (!storage) return void 0;
53
+ if (!storage) return;
55
54
  return new DefaultAuditor({
56
55
  actor: {
57
56
  id: "system",
@@ -72,51 +71,44 @@ var FunctionExecutionWrapper = class {
72
71
  async executeWithAudit(handler) {
73
72
  const auditor = await this.createAuditor();
74
73
  const storage = await this.getAuditStorage();
75
- if (!auditor || !storage) {
76
- const db$1 = await this.getDatabase();
77
- return handler({ db: db$1 });
78
- }
74
+ if (!auditor || !storage) return handler({ db: await this.getDatabase() });
79
75
  const storageDb = storage.getDatabase?.();
80
76
  const databaseServiceName = this.fn.databaseService?.serviceName;
81
77
  const auditDbServiceName = this.fn.auditorStorageService?.serviceName;
82
78
  if (storageDb && databaseServiceName && auditDbServiceName) return withAuditableTransaction(storageDb, auditor, async (trx) => {
83
- const response$1 = await handler({
79
+ return await handler({
84
80
  auditor,
85
81
  db: trx
86
82
  });
87
- return response$1;
88
83
  });
89
- const db = await this.getDatabase();
90
84
  const response = await handler({
91
85
  auditor,
92
- db
86
+ db: await this.getDatabase()
93
87
  });
94
88
  await auditor.flush();
95
89
  return response;
96
90
  }
97
91
  async getFunctionInput(event) {
98
- const parsedInput = await FunctionBuilder.parseComposableStandardSchema(event, this.fn.input);
99
- return parsedInput;
92
+ return await FunctionBuilder.parseComposableStandardSchema(event, this.fn.input);
100
93
  }
101
94
  async publishEvents(response) {
102
- await publishEvents(this.logger, this.serviceDiscovery, this.fn.events, response, this.fn.publisherService);
95
+ await publishEvents(this.logger, this.serviceDiscovery, this.fn.events, response);
103
96
  }
104
97
  async parseComposableStandardSchema(data, schema) {
105
98
  return FunctionBuilder.parseComposableStandardSchema(data, schema);
106
99
  }
107
100
  };
108
-
109
101
  //#endregion
110
102
  //#region src/functions/AWSLambdaFunction.ts
111
103
  var AWSLambdaFunction = class extends FunctionExecutionWrapper {
104
+ fn;
112
105
  constructor(envParser, fn) {
113
106
  super(envParser, fn);
114
107
  this.fn = fn;
115
108
  }
116
109
  error() {
117
110
  return { onError: (req) => {
118
- const logger = req.event?.logger || this.fn.logger;
119
- logger.error(req.error || {}, "Error processing function");
111
+ (req.event?.logger || this.fn.logger).error(req.error || {}, "Error processing function");
120
112
  throw wrapError(req.error);
121
113
  } };
122
114
  }
@@ -132,7 +124,7 @@ var AWSLambdaFunction = class extends FunctionExecutionWrapper {
132
124
  } else req.event.parsedInput = req.event;
133
125
  } catch (error) {
134
126
  this.logger.error({
135
- error,
127
+ err: error,
136
128
  event: req.event
137
129
  }, "Failed to parse input");
138
130
  throw error;
@@ -192,8 +184,7 @@ var AWSLambdaFunction = class extends FunctionExecutionWrapper {
192
184
  db: event.db,
193
185
  auditor: event.auditor
194
186
  });
195
- const output = await this.fn.parseOutput(result);
196
- return output;
187
+ return await this.fn.parseOutput(result);
197
188
  }
198
189
  get handler() {
199
190
  const handler = this._handler.bind(this);
@@ -205,13 +196,13 @@ var AWSLambdaFunction = class extends FunctionExecutionWrapper {
205
196
  return runWithRequestContext({
206
197
  logger,
207
198
  requestId,
208
- startTime
199
+ startTime,
200
+ operation: context.functionName
209
201
  }, () => chain(event, context));
210
202
  };
211
203
  return wrappedHandler;
212
204
  }
213
205
  };
214
-
215
206
  //#endregion
216
207
  //#region src/crons/AWSScheduledFunction.ts
217
208
  /**
@@ -245,11 +236,11 @@ var AWSScheduledFunction = class extends AWSLambdaFunction {
245
236
  super(envParser, cron);
246
237
  }
247
238
  };
248
-
249
239
  //#endregion
250
240
  //#region src/endpoints/AmazonApiGatewayEndpointAdaptor.ts
251
- var import_lodash = __toESM(require_lodash(), 1);
252
- var AmazonApiGatewayEndpoint = class {
241
+ var import_lodash_set = /* @__PURE__ */ __toESM(require_lodash_set(), 1);
242
+ var AmazonApiGatewayEndpoint = class AmazonApiGatewayEndpoint {
243
+ endpoint;
253
244
  options;
254
245
  /**
255
246
  * The parser this adaptor discovers services with.
@@ -272,24 +263,36 @@ var AmazonApiGatewayEndpoint = class {
272
263
  const wrappedError = wrapError(req.error);
273
264
  req.response = {
274
265
  statusCode: wrappedError.statusCode,
275
- body: wrappedError.body
266
+ body: wrappedError.body,
267
+ ...wrappedError.headers ? { headers: { ...wrappedError.headers } } : {}
276
268
  };
277
269
  } };
278
270
  }
279
271
  /**
280
- * Decodes the raw body from an API Gateway event.
281
- * Uses Content-Type to decide parsing strategy (like Express/Fastify/Hono):
282
- * - `application/json` (or missing) → JSON.parse the decoded string
283
- * - Anything else → return decoded string as-is, let the schema handle it
272
+ * Decodes the raw body from an API Gateway event — base64 when API
273
+ * Gateway says so — and reads it by its Content-Type, as every adaptor
274
+ * does (see {@link readRequestBody}): JSON, an HTML form's fields, or text.
284
275
  *
285
- * Defaults to JSON when no Content-Type is provided for backwards compatibility.
276
+ * A body with no Content-Type is read as JSON, as it always has been here.
286
277
  */
287
- static decodeBody(body, isBase64Encoded, contentType) {
278
+ static async decodeBody(body, isBase64Encoded, contentType) {
288
279
  if (!body) return void 0;
289
- const raw = isBase64Encoded ? Buffer.from(body, "base64").toString("utf-8") : body;
290
- const isJson = !contentType || contentType.toLowerCase().includes("application/json");
291
- if (isJson) return JSON.parse(raw);
292
- return raw;
280
+ const bytes = Buffer.from(body, isBase64Encoded ? "base64" : "utf-8");
281
+ const request = new Request("http://api-gateway.invalid/", {
282
+ method: "POST",
283
+ headers: contentType ? { "content-type": contentType } : {},
284
+ body: bytes
285
+ });
286
+ return readRequestBody(request, contentType, { untyped: "json" });
287
+ }
288
+ /**
289
+ * The event's body, read only for an endpoint with a `.body()` schema —
290
+ * one without is handed no body, and is not refused a content type it
291
+ * never reads.
292
+ */
293
+ readBody(body, isBase64Encoded, contentType) {
294
+ if (!this.endpoint.input?.body) return Promise.resolve(void 0);
295
+ return AmazonApiGatewayEndpoint.decodeBody(body, isBase64Encoded, contentType);
293
296
  }
294
297
  getCookies(e) {
295
298
  const headers = e.headers;
@@ -298,36 +301,38 @@ var AmazonApiGatewayEndpoint = class {
298
301
  input() {
299
302
  return { before: async (req) => {
300
303
  try {
301
- const { body, query, params } = this.getInput(req.event);
304
+ const { body, query, params } = await this.getInput(req.event);
302
305
  const headers = req.event.headers;
303
306
  const header = Endpoint.createHeaders(headers);
304
307
  const cookie = this.getCookies(req.event);
305
- (0, import_lodash.default)(req.event, "body", await this.endpoint.parseInput(body, "body"));
306
- (0, import_lodash.default)(req.event, "query", await this.endpoint.parseInput(query, "query"));
307
- (0, import_lodash.default)(req.event, "params", await this.endpoint.parseInput(params, "params"));
308
- (0, import_lodash.default)(req.event, "header", header);
309
- (0, import_lodash.default)(req.event, "cookie", cookie);
308
+ (0, import_lodash_set.default)(req.event, "body", await this.endpoint.parseInput(body, "body"));
309
+ (0, import_lodash_set.default)(req.event, "query", await this.endpoint.parseInput(query, "query"));
310
+ (0, import_lodash_set.default)(req.event, "params", await this.endpoint.parseInput(params, "params"));
311
+ (0, import_lodash_set.default)(req.event, "header", header);
312
+ (0, import_lodash_set.default)(req.event, "cookie", cookie);
310
313
  } catch (error) {
311
314
  if (error && typeof error === "object" && Array.isArray(error)) throw new UnprocessableEntityError("Validation failed", error);
312
315
  throw error;
313
316
  }
314
317
  } };
315
318
  }
319
+ /** This request's logger: see {@link requestLogger}. */
320
+ requestLogger(event, context) {
321
+ return requestLogger(this.endpoint, {
322
+ requestId: context.awsRequestId,
323
+ host: event.headers?.host,
324
+ ...this.getLoggerContext(event, context)
325
+ });
326
+ }
316
327
  logger() {
317
328
  return { before: (req) => {
318
- req.event.logger = this.endpoint.logger.child({
319
- route: this.endpoint.route,
320
- host: req.event.headers?.host,
321
- method: this.endpoint.method,
322
- ...this.getLoggerContext(req.event, req.context)
323
- });
329
+ req.event.logger = currentRequestContext()?.logger ?? this.requestLogger(req.event, req.context);
324
330
  } };
325
331
  }
326
332
  services() {
327
333
  return { before: async (req) => {
328
- const _logger = req.event.logger;
329
- const serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);
330
- const services = await serviceDiscovery.register(this.endpoint.services);
334
+ req.event.logger;
335
+ const services = await ServiceDiscovery.getInstance(this.envParser).register(this.endpoint.services);
331
336
  req.event.services = services;
332
337
  } };
333
338
  }
@@ -338,7 +343,7 @@ var AmazonApiGatewayEndpoint = class {
338
343
  const header = req.event.header;
339
344
  const cookie = req.event.cookie;
340
345
  const session = req.event.session;
341
- const isAuthorized = await this.endpoint.authorize({
346
+ if (!await this.endpoint.authorize({
342
347
  header,
343
348
  cookie,
344
349
  services,
@@ -348,19 +353,39 @@ var AmazonApiGatewayEndpoint = class {
348
353
  body: req.event.body,
349
354
  query: req.event.query,
350
355
  params: req.event.params
351
- });
352
- if (!isAuthorized) {
356
+ })) {
353
357
  logger.warn("Forbidden access attempt");
354
358
  throw new ForbiddenError("Forbidden access to the endpoint", "You do not have permission to access this resource.");
355
359
  }
356
360
  } };
357
361
  }
362
+ /**
363
+ * The endpoint's `.rateLimit()`, after authorization as on every adaptor:
364
+ * over the limit it throws a 429, which `error()` answers with its
365
+ * headers; under it, the `X-RateLimit-*` headers go on the response.
366
+ */
367
+ rateLimit() {
368
+ return { before: async (req) => {
369
+ if (!this.endpoint.rateLimit) return;
370
+ req.event.rateLimitHeaders = await enforceRateLimit(this.endpoint.rateLimit, {
371
+ header: req.event.header,
372
+ services: req.event.services,
373
+ logger: req.event.logger,
374
+ session: req.event.session,
375
+ path: this.requestPath(req.event),
376
+ method: this.endpoint.method
377
+ });
378
+ } };
379
+ }
380
+ /** The path the request was made to, as the limiter keys a client by. */
381
+ requestPath(event) {
382
+ return event.path ?? event.rawPath ?? this.endpoint.route;
383
+ }
358
384
  database() {
359
385
  return { before: async (req) => {
360
386
  if (!this.endpoint.databaseService) return;
361
- const _logger = req.event.logger;
362
- const serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);
363
- const db = await serviceDiscovery.register([this.endpoint.databaseService]).then((s) => s[this.endpoint.databaseService?.serviceName]);
387
+ req.event.logger;
388
+ const db = await ServiceDiscovery.getInstance(this.envParser).register([this.endpoint.databaseService]).then((s) => s[this.endpoint.databaseService?.serviceName]);
364
389
  req.event.db = db;
365
390
  } };
366
391
  }
@@ -376,6 +401,7 @@ var AmazonApiGatewayEndpoint = class {
376
401
  cookie: req.event.cookie,
377
402
  ...db !== void 0 && { db }
378
403
  });
404
+ req.event.logger = currentRequestContext()?.logger ?? req.event.logger;
379
405
  } };
380
406
  }
381
407
  events() {
@@ -411,9 +437,8 @@ var AmazonApiGatewayEndpoint = class {
411
437
  cookie: event.cookie,
412
438
  logger
413
439
  }) : void 0;
414
- const result = await executeWithAuditTransaction(auditContext, async (auditor) => {
415
- const sameDatabase = auditContext?.storage?.databaseServiceName && auditContext.storage.databaseServiceName === this.endpoint.databaseService?.serviceName;
416
- const baseDb = sameDatabase ? auditor?.getTransaction?.() ?? rawDb : rawDb;
440
+ const { output, metadata } = await executeWithAuditTransaction(auditContext, async (auditor) => {
441
+ const baseDb = auditContext?.storage?.databaseServiceName && auditContext.storage.databaseServiceName === this.endpoint.databaseService?.serviceName ? auditor?.getTransaction?.() ?? rawDb : rawDb;
417
442
  const executeHandler = async (db) => {
418
443
  const responseBuilder = new ResponseBuilder();
419
444
  const response = await this.endpoint.handler({
@@ -427,33 +452,33 @@ var AmazonApiGatewayEndpoint = class {
427
452
  ...input
428
453
  }, responseBuilder);
429
454
  let data = response;
430
- let metadata$1 = responseBuilder.getMetadata();
455
+ let metadata = responseBuilder.getMetadata();
431
456
  if (Endpoint.hasMetadata(response)) {
432
457
  data = response.data;
433
- metadata$1 = response.metadata;
458
+ metadata = response.metadata;
434
459
  }
435
- const output$1 = this.endpoint.outputSchema ? await this.endpoint.parseOutput(data) : void 0;
460
+ const redirect = Endpoint.isRedirectStatus(metadata.status ?? this.endpoint.status);
436
461
  return {
437
- output: output$1,
438
- metadata: metadata$1,
439
- responseBuilder
462
+ output: this.endpoint.outputSchema && !redirect ? await this.endpoint.parseOutput(data) : void 0,
463
+ metadata,
464
+ responseBuilder,
465
+ redirect
440
466
  };
441
467
  };
442
468
  if (rlsActive && rlsContext && baseDb) return withRlsContext(baseDb, rlsContext, async (trx) => executeHandler(trx), { prefix: this.endpoint.rlsConfig?.prefix });
443
469
  return executeHandler(baseDb);
444
- }, async (result$1, auditor) => {
445
- if (!audits?.length) return;
470
+ }, async (result, auditor) => {
471
+ if (!audits?.length || result.redirect) return;
446
472
  for (const audit of audits) {
447
- if (audit.when && !audit.when(result$1.output)) continue;
448
- const payload = audit.payload(result$1.output);
449
- const entityId = audit.entityId?.(result$1.output);
473
+ if (audit.when && !audit.when(result.output)) continue;
474
+ const payload = audit.payload(result.output);
475
+ const entityId = audit.entityId?.(result.output);
450
476
  auditor.audit(audit.type, payload, {
451
477
  table: audit.table,
452
478
  entityId
453
479
  });
454
480
  }
455
481
  }, { db: rawDb });
456
- const { output, metadata } = result;
457
482
  const isJsonResponse = this.endpoint.responseType === "application/json";
458
483
  const body = output === void 0 ? void 0 : isJsonResponse ? JSON.stringify(output) : typeof output === "string" ? output : String(output);
459
484
  event.__response = output;
@@ -462,8 +487,10 @@ var AmazonApiGatewayEndpoint = class {
462
487
  body
463
488
  };
464
489
  const baseHeaders = isJsonResponse ? void 0 : { "content-type": this.endpoint.responseType };
465
- if (baseHeaders || metadata.headers && Object.keys(metadata.headers).length > 0) lambdaResponse.headers = {
490
+ const rateLimitHeaders = event.rateLimitHeaders;
491
+ if (baseHeaders || rateLimitHeaders || metadata.headers && Object.keys(metadata.headers).length > 0) lambdaResponse.headers = {
466
492
  ...baseHeaders ?? {},
493
+ ...rateLimitHeaders ?? {},
467
494
  ...metadata.headers ?? {}
468
495
  };
469
496
  if (metadata.cookies && metadata.cookies.size > 0) {
@@ -504,24 +531,25 @@ var AmazonApiGatewayEndpoint = class {
504
531
  }
505
532
  get handler() {
506
533
  const handler = this._handler.bind(this);
507
- let chain = middy(handler).use(this.logger()).use(this.error()).use(this.services()).use(this.input()).use(this.database()).use(this.session()).use(this.authorize()).use(this.events());
534
+ let chain = middy(handler).use(this.logger()).use(this.error()).use(this.services()).use(this.input()).use(this.database()).use(this.session()).use(this.authorize()).use(this.rateLimit()).use(this.events());
508
535
  const telemetryMiddleware = this.telemetry();
509
536
  if (telemetryMiddleware) chain = chain.use(telemetryMiddleware);
510
537
  if (this.options.telescope?.middleware) chain = chain.use(this.options.telescope.middleware);
511
538
  const wrappedHandler = async (event, context) => {
512
539
  const startTime = Date.now();
513
540
  const requestId = context.awsRequestId;
514
- const logger = this.endpoint.logger.child({ requestId });
541
+ const logger = this.requestLogger(event, context);
542
+ const operation = `${this.endpoint.method} ${this.endpoint.route}`;
515
543
  return runWithRequestContext({
516
544
  logger,
517
545
  requestId,
518
- startTime
546
+ startTime,
547
+ operation
519
548
  }, () => chain(event, context));
520
549
  };
521
550
  return wrappedHandler;
522
551
  }
523
552
  };
524
-
525
553
  //#endregion
526
554
  //#region src/endpoints/parseQueryParams.ts
527
555
  /**
@@ -542,18 +570,18 @@ function parseQueryParams(queryParams) {
542
570
  }
543
571
  return qs.parse(parts.join("&"));
544
572
  }
545
-
546
573
  //#endregion
547
574
  //#region src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts
548
575
  var AmazonApiGatewayV1Endpoint = class extends AmazonApiGatewayEndpoint {
549
- getInput(e) {
576
+ endpoint;
577
+ async getInput(e) {
550
578
  const multiValueParams = e.multiValueQueryStringParameters || {};
551
579
  const singleValueParams = e.queryStringParameters || {};
552
580
  const mergedParams = {};
553
581
  for (const [key, value] of Object.entries(singleValueParams)) if (value !== void 0) mergedParams[key] = value;
554
582
  for (const [key, values] of Object.entries(multiValueParams)) if (values && values.length > 1) mergedParams[key] = values;
555
583
  return {
556
- body: AmazonApiGatewayEndpoint.decodeBody(e.body, e.isBase64Encoded, e.headers?.["Content-Type"] ?? e.headers?.["content-type"]),
584
+ body: await this.readBody(e.body, e.isBase64Encoded, e.headers?.["Content-Type"] ?? e.headers?.["content-type"]),
557
585
  query: parseQueryParams(mergedParams),
558
586
  params: e.pathParameters || {}
559
587
  };
@@ -578,17 +606,16 @@ var AmazonApiGatewayV1Endpoint = class extends AmazonApiGatewayEndpoint {
578
606
  this.endpoint = endpoint;
579
607
  }
580
608
  };
581
-
582
609
  //#endregion
583
610
  //#region src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts
584
611
  var AmazonApiGatewayV2Endpoint = class extends AmazonApiGatewayEndpoint {
612
+ endpoint;
585
613
  getCookies(e) {
586
614
  return createApiGatewayCookies(e.cookies, e.headers?.cookie);
587
615
  }
588
- getInput(e) {
589
- const raw = AmazonApiGatewayEndpoint.decodeBody(e.body, e.isBase64Encoded, e.headers?.["content-type"]);
616
+ async getInput(e) {
590
617
  return {
591
- body: raw,
618
+ body: await this.readBody(e.body, e.isBase64Encoded, e.headers?.["content-type"]),
592
619
  query: qs.parse(e.rawQueryString),
593
620
  params: e.pathParameters || {}
594
621
  };
@@ -613,7 +640,6 @@ var AmazonApiGatewayV2Endpoint = class extends AmazonApiGatewayEndpoint {
613
640
  this.endpoint = endpoint;
614
641
  }
615
642
  };
616
-
617
643
  //#endregion
618
644
  //#region src/queue/AWSLambdaQueueAdaptor.ts
619
645
  /**
@@ -628,6 +654,8 @@ var AmazonApiGatewayV2Endpoint = class extends AmazonApiGatewayEndpoint {
628
654
  * retries only those records.
629
655
  */
630
656
  var AWSLambdaQueue = class {
657
+ envParser;
658
+ queue;
631
659
  _services;
632
660
  constructor(envParser, queue) {
633
661
  this.envParser = envParser;
@@ -642,6 +670,12 @@ var AWSLambdaQueue = class {
642
670
  this._services = this.queue.services.length > 0 ? await serviceDiscovery.register(this.queue.services) : {};
643
671
  return this._services;
644
672
  }
673
+ /** The queue's database, registered as functions register theirs. */
674
+ async getDatabase() {
675
+ const service = this.queue.databaseService;
676
+ if (!service) return void 0;
677
+ return (await ServiceDiscovery.getInstance(this.envParser).register([service]))[service.serviceName];
678
+ }
645
679
  safeJsonParse(value) {
646
680
  try {
647
681
  return JSON.parse(value);
@@ -667,6 +701,7 @@ var AWSLambdaQueue = class {
667
701
  req: { id: context.awsRequestId }
668
702
  });
669
703
  const services = await this.getServices();
704
+ const db = await this.getDatabase();
670
705
  const schema = this.queue.messageSchema;
671
706
  const batchItemFailures = [];
672
707
  const messages = [];
@@ -684,7 +719,7 @@ var AWSLambdaQueue = class {
684
719
  messages.push(validation.value);
685
720
  } catch (error) {
686
721
  logger.error({
687
- error,
722
+ err: error,
688
723
  messageId: record.messageId
689
724
  }, "Failed to parse SQS record");
690
725
  batchItemFailures.push({ itemIdentifier: record.messageId });
@@ -694,7 +729,8 @@ var AWSLambdaQueue = class {
694
729
  await this.queue.handler({
695
730
  messages,
696
731
  services,
697
- logger
732
+ logger,
733
+ db
698
734
  });
699
735
  } catch (error) {
700
736
  logger.error(wrapError(error), "Queue handler failed; retrying batch");
@@ -704,24 +740,28 @@ var AWSLambdaQueue = class {
704
740
  }
705
741
  get handler() {
706
742
  const handler = this._handler.bind(this);
707
- return async (event, context) => {
743
+ return (async (event, context) => {
708
744
  const startTime = Date.now();
709
745
  const requestId = context.awsRequestId;
710
746
  const logger = this.queue.logger.child({ requestId });
711
747
  return runWithRequestContext({
712
748
  logger,
713
749
  requestId,
714
- startTime
715
- }, () => handler(event, context));
716
- };
750
+ startTime,
751
+ operation: `queue ${this.queue.name}`
752
+ }, () => consumeBatchTraced({
753
+ system: "aws_sqs",
754
+ destination: this.queue.name
755
+ }, event.Records.map(recordCarrier), () => handler(event, context)));
756
+ });
717
757
  }
718
758
  };
719
-
720
759
  //#endregion
721
760
  //#region src/subscribers/AWSLambdaSubscriberAdaptor.ts
722
761
  var AWSLambdaSubscriber = class {
762
+ envParser;
763
+ subscriber;
723
764
  _logger;
724
- _services;
725
765
  constructor(envParser, subscriber) {
726
766
  this.envParser = envParser;
727
767
  this.subscriber = subscriber;
@@ -730,19 +770,9 @@ var AWSLambdaSubscriber = class {
730
770
  get logger() {
731
771
  return this._logger;
732
772
  }
733
- async getServices() {
734
- if (this._services) return this._services;
735
- const serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);
736
- if (this.subscriber.services.length > 0) {
737
- const registered = await serviceDiscovery.register(this.subscriber.services);
738
- this._services = registered;
739
- } else this._services = {};
740
- return this._services;
741
- }
742
773
  error() {
743
774
  return { onError: (req) => {
744
- const logger = req.event?.logger || this.subscriber.logger;
745
- logger.error(req.error || {}, "Error processing subscriber");
775
+ (req.event?.logger || this.subscriber.logger).error(req.error || {}, "Error processing subscriber");
746
776
  throw wrapError(req.error);
747
777
  } };
748
778
  }
@@ -761,110 +791,26 @@ var AWSLambdaSubscriber = class {
761
791
  }
762
792
  services() {
763
793
  return { before: async (req) => {
764
- req.event.services = await this.getServices();
794
+ const { services, db } = await subscriberContext(this.subscriber, this.envParser);
795
+ req.event.services = services;
796
+ req.event.db = db;
765
797
  } };
766
798
  }
767
799
  parseEvents() {
768
800
  return { before: async (req) => {
769
- const { logger,...e } = req.event;
770
- const rawEvent = e;
801
+ const { logger, ...rawEvent } = req.event;
771
802
  logger.info({ rawEvent });
772
- const events = [];
773
- if ("Records" in rawEvent) {
774
- if (this.isSQSEvent(rawEvent)) for (const record of rawEvent.Records) try {
775
- const event = this.parseSQSRecord(record);
776
- if (this.shouldIncludeEvent(event)) events.push(event);
777
- } catch (error) {
778
- this.logger.error({
779
- error,
780
- record
781
- }, "Failed to parse SQS record");
782
- }
783
- else if (this.isSNSEvent(rawEvent)) for (const record of rawEvent.Records) try {
784
- const event = this.parseSNSRecord(record);
785
- if (this.shouldIncludeEvent(event)) events.push(event);
786
- } catch (error) {
787
- this.logger.error({
788
- error,
789
- record
790
- }, "Failed to parse SNS record");
791
- }
792
- }
793
- req.event.events = events;
803
+ req.event.events = subscribedEvents(this.subscriber, rawEvent, this.logger);
794
804
  } };
795
805
  }
796
- isSQSEvent(event) {
797
- const firstRecord = event.Records[0];
798
- return "Records" in event && event.Records.length > 0 && firstRecord !== void 0 && "eventSource" in firstRecord && firstRecord.eventSource === "aws:sqs";
799
- }
800
- isSNSEvent(event) {
801
- const firstRecord = event.Records[0];
802
- return "Records" in event && event.Records.length > 0 && firstRecord !== void 0 && "EventSource" in firstRecord && firstRecord.EventSource === "aws:sns";
803
- }
804
- parseSNSRecord(record) {
805
- const message = this.safeJsonParse(record.Sns.Message);
806
- const messageType = record.Sns.MessageAttributes?.type?.Value;
807
- if (message === null) return messageType ? {
808
- type: messageType,
809
- payload: record.Sns.Message
810
- } : record.Sns.Message;
811
- const resolvedType = messageType ?? message.type;
812
- if (message.type) return message;
813
- return resolvedType ? {
814
- type: resolvedType,
815
- payload: message
816
- } : message;
817
- }
818
- parseSQSRecord(record) {
819
- const body = this.safeJsonParse(record.body);
820
- if (body === null) return record.body;
821
- if (body.Type === "Notification" && body.Message) {
822
- const snsMessage = this.safeJsonParse(body.Message);
823
- const messageType = body.MessageAttributes?.type?.Value;
824
- if (snsMessage === null) return messageType ? {
825
- type: messageType,
826
- payload: body.Message
827
- } : body.Message;
828
- if (snsMessage.type) return snsMessage;
829
- const resolvedType = messageType ?? snsMessage.type;
830
- return resolvedType ? {
831
- type: resolvedType,
832
- payload: snsMessage
833
- } : snsMessage;
834
- }
835
- return body;
836
- }
837
- safeJsonParse(value) {
838
- try {
839
- return JSON.parse(value);
840
- } catch {
841
- return null;
842
- }
843
- }
844
- shouldIncludeEvent(event) {
845
- if (typeof event !== "object" || !event?.type) return true;
846
- if (!this.subscriber.subscribedEvents) return true;
847
- return this.subscriber.subscribedEvents.includes(event.type);
848
- }
849
806
  async _handler(event) {
850
- if (event.events.length === 0) {
851
- this.logger.info("No subscribed events to process");
852
- return { batchItemFailures: [] };
853
- }
854
- const result = await this.subscriber.handler({
855
- events: event.events,
856
- services: event.services,
857
- logger: event.logger
807
+ const { events, services, logger, db } = event;
808
+ return runSubscriber(this.subscriber, {
809
+ events,
810
+ services,
811
+ logger,
812
+ db
858
813
  });
859
- if (this.subscriber.outputSchema && result) {
860
- const validationResult = await this.subscriber.outputSchema["~standard"].validate(result);
861
- if (validationResult.issues) {
862
- this.logger.error({ issues: validationResult.issues }, "Subscriber output validation failed");
863
- throw new Error("Subscriber output validation failed");
864
- }
865
- return validationResult.value;
866
- }
867
- return result;
868
814
  }
869
815
  get handler() {
870
816
  const handler = this._handler.bind(this);
@@ -873,16 +819,22 @@ var AWSLambdaSubscriber = class {
873
819
  const startTime = Date.now();
874
820
  const requestId = context.awsRequestId;
875
821
  const logger = this.subscriber.logger.child({ requestId });
822
+ const operation = `subscriber ${this.subscriber.topicName ?? context.functionName}`;
823
+ const records = event?.Records ?? [];
876
824
  return runWithRequestContext({
877
825
  logger,
878
826
  requestId,
879
- startTime
880
- }, () => chain(event, context));
827
+ startTime,
828
+ operation
829
+ }, () => consumeBatchTraced({
830
+ system: records[0]?.Sns ? "aws_sns" : "aws_sqs",
831
+ destination: this.subscriber.topicName ?? context.functionName
832
+ }, records.map(recordCarrier), () => chain(event, context)));
881
833
  };
882
834
  return wrappedHandler;
883
835
  }
884
836
  };
885
-
886
837
  //#endregion
887
838
  export { AWSLambdaFunction, AWSLambdaQueue, AWSLambdaSubscriber, AWSScheduledFunction, AmazonApiGatewayV1Endpoint, AmazonApiGatewayV2Endpoint };
839
+
888
840
  //# sourceMappingURL=aws.mjs.map