@geekmidas/constructs 3.0.7 → 3.0.9

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 (467) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/{Construct-BXG8cFSm.cjs → Construct-B14miJ6P.cjs} +95 -10
  3. package/dist/Construct-B14miJ6P.cjs.map +1 -0
  4. package/dist/{Construct-BjpXFNxy.d.mts → Construct-CXqvzglu.d.cts} +11 -6
  5. package/dist/{Construct-BjpXFNxy.d.mts.map → Construct-CXqvzglu.d.cts.map} +1 -1
  6. package/dist/{Construct-CQ9zV58W.mjs → Construct-CdJY2DJS.mjs} +83 -9
  7. package/dist/Construct-CdJY2DJS.mjs.map +1 -0
  8. package/dist/{Construct-CX7HyFfT.d.cts → Construct-D0n7QTaI.d.mts} +13 -8
  9. package/dist/Construct-D0n7QTaI.d.mts.map +1 -0
  10. package/dist/{Endpoint-CGdCGJkC.d.cts → Endpoint-CE7qHX5S.d.cts} +143 -28
  11. package/dist/Endpoint-CE7qHX5S.d.cts.map +1 -0
  12. package/dist/{Endpoint-BET0JSZK.d.mts → Endpoint-NvjIednd.d.mts} +143 -28
  13. package/dist/Endpoint-NvjIednd.d.mts.map +1 -0
  14. package/dist/{HonoEndpointAdaptor-B5fKdLi7.cjs → HonoEndpointAdaptor-Dl8BW_9u.cjs} +91 -25
  15. package/dist/HonoEndpointAdaptor-Dl8BW_9u.cjs.map +1 -0
  16. package/dist/{HonoEndpointAdaptor-DOUODM7n.mjs → HonoEndpointAdaptor-nHYMdbBi.mjs} +74 -8
  17. package/dist/HonoEndpointAdaptor-nHYMdbBi.mjs.map +1 -0
  18. package/dist/{Subscriber-1rDE7HuM.d.cts → Subscriber-D8WkA8np.d.cts} +3 -3
  19. package/dist/{Subscriber-1rDE7HuM.d.cts.map → Subscriber-D8WkA8np.d.cts.map} +1 -1
  20. package/dist/{Subscriber-9ObcUdcC.d.mts → Subscriber-Tft61-YG.d.mts} +5 -5
  21. package/dist/Subscriber-Tft61-YG.d.mts.map +1 -0
  22. package/dist/adaptors/aws.cjs +742 -21
  23. package/dist/adaptors/aws.cjs.map +1 -0
  24. package/dist/adaptors/aws.d.cts +221 -17
  25. package/dist/adaptors/aws.d.cts.map +1 -0
  26. package/dist/adaptors/aws.d.mts +221 -17
  27. package/dist/adaptors/aws.d.mts.map +1 -0
  28. package/dist/adaptors/aws.mjs +739 -18
  29. package/dist/adaptors/aws.mjs.map +1 -0
  30. package/dist/adaptors/hono.cjs +5 -12
  31. package/dist/adaptors/hono.d.cts +52 -10
  32. package/dist/adaptors/hono.d.cts.map +1 -0
  33. package/dist/adaptors/hono.d.mts +52 -10
  34. package/dist/adaptors/hono.d.mts.map +1 -0
  35. package/dist/adaptors/hono.mjs +5 -12
  36. package/dist/adaptors/testing.cjs +392 -21
  37. package/dist/adaptors/testing.cjs.map +1 -0
  38. package/dist/adaptors/testing.d.cts +177 -14
  39. package/dist/adaptors/testing.d.cts.map +1 -0
  40. package/dist/adaptors/testing.d.mts +177 -14
  41. package/dist/adaptors/testing.d.mts.map +1 -0
  42. package/dist/adaptors/testing.mjs +388 -17
  43. package/dist/adaptors/testing.mjs.map +1 -0
  44. package/dist/crons/index.cjs +82 -10
  45. package/dist/crons/index.cjs.map +1 -1
  46. package/dist/crons/index.d.cts +44 -7
  47. package/dist/crons/index.d.cts.map +1 -1
  48. package/dist/crons/index.d.mts +45 -11
  49. package/dist/crons/index.d.mts.map +1 -1
  50. package/dist/crons/index.mjs +79 -7
  51. package/dist/crons/index.mjs.map +1 -1
  52. package/dist/endpoints/index.cjs +741 -23
  53. package/dist/endpoints/index.cjs.map +1 -1
  54. package/dist/endpoints/index.d.cts +336 -14
  55. package/dist/endpoints/index.d.cts.map +1 -1
  56. package/dist/endpoints/index.d.mts +335 -14
  57. package/dist/endpoints/index.d.mts.map +1 -1
  58. package/dist/endpoints/index.mjs +730 -12
  59. package/dist/endpoints/index.mjs.map +1 -1
  60. package/dist/functions/index.cjs +5 -8
  61. package/dist/functions/index.d.cts +2 -5
  62. package/dist/functions/index.d.mts +2 -5
  63. package/dist/functions/index.mjs +2 -5
  64. package/dist/functions-DiaRAdfp.cjs +2893 -0
  65. package/dist/functions-DiaRAdfp.cjs.map +1 -0
  66. package/dist/functions-GmSHFbpr.mjs +2864 -0
  67. package/dist/functions-GmSHFbpr.mjs.map +1 -0
  68. package/dist/index-Cq4fz8uM.d.mts +132 -0
  69. package/dist/index-Cq4fz8uM.d.mts.map +1 -0
  70. package/dist/index-CzIMpK-e.d.cts +135 -0
  71. package/dist/index-CzIMpK-e.d.cts.map +1 -0
  72. package/dist/index.cjs +1 -1
  73. package/dist/index.d.cts +3 -3
  74. package/dist/index.d.mts +3 -3
  75. package/dist/index.mjs +1 -1
  76. package/dist/lazyAccessors-5h-aWohM.mjs +1894 -0
  77. package/dist/lazyAccessors-5h-aWohM.mjs.map +1 -0
  78. package/dist/lazyAccessors-Bc1u42WC.cjs +1971 -0
  79. package/dist/lazyAccessors-Bc1u42WC.cjs.map +1 -0
  80. package/dist/processAudits-B0PbJf1Z.mjs +80 -0
  81. package/dist/processAudits-B0PbJf1Z.mjs.map +1 -0
  82. package/dist/processAudits-CUko08pi.cjs +92 -0
  83. package/dist/processAudits-CUko08pi.cjs.map +1 -0
  84. package/dist/subscribers/index.cjs +77 -6
  85. package/dist/subscribers/index.cjs.map +1 -1
  86. package/dist/subscribers/index.d.cts +27 -5
  87. package/dist/subscribers/index.d.cts.map +1 -1
  88. package/dist/subscribers/index.d.mts +26 -5
  89. package/dist/subscribers/index.d.mts.map +1 -1
  90. package/dist/subscribers/index.mjs +74 -3
  91. package/dist/subscribers/index.mjs.map +1 -1
  92. package/dist/{telemetry-BTaiRqPo.d.cts → telemetry-Bt0vK4ma.d.cts} +1 -1
  93. package/dist/{telemetry-BJo1gcV1.d.mts.map → telemetry-Bt0vK4ma.d.cts.map} +1 -1
  94. package/dist/{telemetry-BJo1gcV1.d.mts → telemetry-COvVBKBM.d.mts} +1 -1
  95. package/dist/{telemetry-BTaiRqPo.d.cts.map → telemetry-COvVBKBM.d.mts.map} +1 -1
  96. package/dist/{types-B5H3piDg.d.cts → types-B8YlI4cx.d.cts} +1 -1
  97. package/dist/{types-B5H3piDg.d.cts.map → types-B8YlI4cx.d.cts.map} +1 -1
  98. package/dist/{types-BqPOdHEm.d.mts → types-BA3eK4xj.d.mts} +1 -1
  99. package/dist/{types-BqPOdHEm.d.mts.map → types-BA3eK4xj.d.mts.map} +1 -1
  100. package/dist/types.d.cts +1 -1
  101. package/dist/types.d.mts +1 -1
  102. package/package.json +12 -12
  103. package/src/Construct.ts +26 -8
  104. package/src/__tests__/Construct.environment.spec.ts +123 -0
  105. package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +23 -4
  106. package/src/endpoints/Endpoint.ts +14 -1
  107. package/src/endpoints/EndpointBuilder.ts +25 -0
  108. package/src/endpoints/HonoEndpointAdaptor.ts +24 -1
  109. package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.responseType.spec.ts +111 -0
  110. package/src/endpoints/__tests__/Endpoint.spec.ts +29 -0
  111. package/src/endpoints/__tests__/EndpointBuilder.responseType.spec.ts +47 -0
  112. package/src/endpoints/__tests__/HonoEndpointAdaptor.responseType.spec.ts +128 -0
  113. package/src/endpoints/__tests__/MswEndpointAdaptor.spec.ts +1 -9
  114. package/tsdown.config.ts +30 -1
  115. package/dist/AWSLambdaFunction-CC8gMZhz.d.mts +0 -32
  116. package/dist/AWSLambdaFunction-CC8gMZhz.d.mts.map +0 -1
  117. package/dist/AWSLambdaFunction-CPEAl5nZ.cjs +0 -120
  118. package/dist/AWSLambdaFunction-CPEAl5nZ.cjs.map +0 -1
  119. package/dist/AWSLambdaFunction-DJiCAPAf.mjs +0 -114
  120. package/dist/AWSLambdaFunction-DJiCAPAf.mjs.map +0 -1
  121. package/dist/AWSLambdaFunction-tzqv5XU6.d.cts +0 -32
  122. package/dist/AWSLambdaFunction-tzqv5XU6.d.cts.map +0 -1
  123. package/dist/AWSLambdaSubscriberAdaptor-Cj1wjkUP.d.cts +0 -36
  124. package/dist/AWSLambdaSubscriberAdaptor-Cj1wjkUP.d.cts.map +0 -1
  125. package/dist/AWSLambdaSubscriberAdaptor-Cmx9OQGG.d.mts +0 -36
  126. package/dist/AWSLambdaSubscriberAdaptor-Cmx9OQGG.d.mts.map +0 -1
  127. package/dist/AWSLambdaSubscriberAdaptor-RKwKYLl1.mjs +0 -172
  128. package/dist/AWSLambdaSubscriberAdaptor-RKwKYLl1.mjs.map +0 -1
  129. package/dist/AWSLambdaSubscriberAdaptor-eZ3qoKvK.cjs +0 -178
  130. package/dist/AWSLambdaSubscriberAdaptor-eZ3qoKvK.cjs.map +0 -1
  131. package/dist/AmazonApiGatewayEndpointAdaptor-BIltcbAc.cjs +0 -277
  132. package/dist/AmazonApiGatewayEndpointAdaptor-BIltcbAc.cjs.map +0 -1
  133. package/dist/AmazonApiGatewayEndpointAdaptor-BpYtYCeW.mjs +0 -271
  134. package/dist/AmazonApiGatewayEndpointAdaptor-BpYtYCeW.mjs.map +0 -1
  135. package/dist/AmazonApiGatewayEndpointAdaptor-DA0rS_1Y.d.mts +0 -124
  136. package/dist/AmazonApiGatewayEndpointAdaptor-DA0rS_1Y.d.mts.map +0 -1
  137. package/dist/AmazonApiGatewayEndpointAdaptor-DqNcQGMf.d.cts +0 -124
  138. package/dist/AmazonApiGatewayEndpointAdaptor-DqNcQGMf.d.cts.map +0 -1
  139. package/dist/AmazonApiGatewayV1EndpointAdaptor-C7rJzNvG.d.mts +0 -23
  140. package/dist/AmazonApiGatewayV1EndpointAdaptor-C7rJzNvG.d.mts.map +0 -1
  141. package/dist/AmazonApiGatewayV1EndpointAdaptor-CRwyWT6t.mjs +0 -42
  142. package/dist/AmazonApiGatewayV1EndpointAdaptor-CRwyWT6t.mjs.map +0 -1
  143. package/dist/AmazonApiGatewayV1EndpointAdaptor-DEETT6Wj.cjs +0 -47
  144. package/dist/AmazonApiGatewayV1EndpointAdaptor-DEETT6Wj.cjs.map +0 -1
  145. package/dist/AmazonApiGatewayV1EndpointAdaptor-DcN2fYsv.d.cts +0 -23
  146. package/dist/AmazonApiGatewayV1EndpointAdaptor-DcN2fYsv.d.cts.map +0 -1
  147. package/dist/AmazonApiGatewayV2EndpointAdaptor-C2qO8FN6.cjs +0 -48
  148. package/dist/AmazonApiGatewayV2EndpointAdaptor-C2qO8FN6.cjs.map +0 -1
  149. package/dist/AmazonApiGatewayV2EndpointAdaptor-Cn9UoRgB.d.cts +0 -22
  150. package/dist/AmazonApiGatewayV2EndpointAdaptor-Cn9UoRgB.d.cts.map +0 -1
  151. package/dist/AmazonApiGatewayV2EndpointAdaptor-d7NP-bZX.d.mts +0 -22
  152. package/dist/AmazonApiGatewayV2EndpointAdaptor-d7NP-bZX.d.mts.map +0 -1
  153. package/dist/AmazonApiGatewayV2EndpointAdaptor-m9YKI294.mjs +0 -42
  154. package/dist/AmazonApiGatewayV2EndpointAdaptor-m9YKI294.mjs.map +0 -1
  155. package/dist/Authorizer-BZ1LcZFt.cjs +0 -92
  156. package/dist/Authorizer-BZ1LcZFt.cjs.map +0 -1
  157. package/dist/Authorizer-C5_FC_Rq.d.mts +0 -126
  158. package/dist/Authorizer-C5_FC_Rq.d.mts.map +0 -1
  159. package/dist/Authorizer-CZpg1Jqk.mjs +0 -68
  160. package/dist/Authorizer-CZpg1Jqk.mjs.map +0 -1
  161. package/dist/Authorizer-DWtwC8we.d.cts +0 -126
  162. package/dist/Authorizer-DWtwC8we.d.cts.map +0 -1
  163. package/dist/BaseFunctionBuilder-C-4hYTfj.d.cts +0 -42
  164. package/dist/BaseFunctionBuilder-C-4hYTfj.d.cts.map +0 -1
  165. package/dist/BaseFunctionBuilder-C3rQMoWb.mjs +0 -70
  166. package/dist/BaseFunctionBuilder-C3rQMoWb.mjs.map +0 -1
  167. package/dist/BaseFunctionBuilder-DXf6HK-N.cjs +0 -76
  168. package/dist/BaseFunctionBuilder-DXf6HK-N.cjs.map +0 -1
  169. package/dist/BaseFunctionBuilder-Q5qIlF-F.d.mts +0 -42
  170. package/dist/BaseFunctionBuilder-Q5qIlF-F.d.mts.map +0 -1
  171. package/dist/Construct-BXG8cFSm.cjs.map +0 -1
  172. package/dist/Construct-CQ9zV58W.mjs.map +0 -1
  173. package/dist/Construct-CX7HyFfT.d.cts.map +0 -1
  174. package/dist/Construct.cjs +0 -6
  175. package/dist/Construct.d.cts +0 -2
  176. package/dist/Construct.d.mts +0 -2
  177. package/dist/Construct.mjs +0 -3
  178. package/dist/Cron-BljK1gsV.d.mts +0 -26
  179. package/dist/Cron-BljK1gsV.d.mts.map +0 -1
  180. package/dist/Cron-C1vyfJ8B.cjs +0 -25
  181. package/dist/Cron-C1vyfJ8B.cjs.map +0 -1
  182. package/dist/Cron-CjWQEad0.mjs +0 -20
  183. package/dist/Cron-CjWQEad0.mjs.map +0 -1
  184. package/dist/Cron-CllHkk3z.d.cts +0 -26
  185. package/dist/Cron-CllHkk3z.d.cts.map +0 -1
  186. package/dist/CronBuilder-CAJFtnmZ.mjs +0 -68
  187. package/dist/CronBuilder-CAJFtnmZ.mjs.map +0 -1
  188. package/dist/CronBuilder-CG54f9LM.d.mts +0 -32
  189. package/dist/CronBuilder-CG54f9LM.d.mts.map +0 -1
  190. package/dist/CronBuilder-CSMd02lu.cjs +0 -74
  191. package/dist/CronBuilder-CSMd02lu.cjs.map +0 -1
  192. package/dist/CronBuilder-i23l40xs.d.cts +0 -32
  193. package/dist/CronBuilder-i23l40xs.d.cts.map +0 -1
  194. package/dist/Endpoint-BET0JSZK.d.mts.map +0 -1
  195. package/dist/Endpoint-BcxvF4F3.cjs +0 -440
  196. package/dist/Endpoint-BcxvF4F3.cjs.map +0 -1
  197. package/dist/Endpoint-CGdCGJkC.d.cts.map +0 -1
  198. package/dist/Endpoint-DvY3aqAy.mjs +0 -422
  199. package/dist/Endpoint-DvY3aqAy.mjs.map +0 -1
  200. package/dist/EndpointBuilder-6kdrQyIh.d.mts +0 -146
  201. package/dist/EndpointBuilder-6kdrQyIh.d.mts.map +0 -1
  202. package/dist/EndpointBuilder-CSwIguiR.d.cts +0 -146
  203. package/dist/EndpointBuilder-CSwIguiR.d.cts.map +0 -1
  204. package/dist/EndpointBuilder-EptJojG9.cjs +0 -268
  205. package/dist/EndpointBuilder-EptJojG9.cjs.map +0 -1
  206. package/dist/EndpointBuilder-iDpnACRb.mjs +0 -262
  207. package/dist/EndpointBuilder-iDpnACRb.mjs.map +0 -1
  208. package/dist/EndpointFactory-CBagQW5j.d.mts +0 -142
  209. package/dist/EndpointFactory-CBagQW5j.d.mts.map +0 -1
  210. package/dist/EndpointFactory-D2QxeaAh.cjs +0 -393
  211. package/dist/EndpointFactory-D2QxeaAh.cjs.map +0 -1
  212. package/dist/EndpointFactory-DQYSH8XK.d.cts +0 -142
  213. package/dist/EndpointFactory-DQYSH8XK.d.cts.map +0 -1
  214. package/dist/EndpointFactory-wgcqWod-.mjs +0 -381
  215. package/dist/EndpointFactory-wgcqWod-.mjs.map +0 -1
  216. package/dist/Function-CwlB89lS.d.cts +0 -76
  217. package/dist/Function-CwlB89lS.d.cts.map +0 -1
  218. package/dist/Function-D74HrBnX.d.mts +0 -76
  219. package/dist/Function-D74HrBnX.d.mts.map +0 -1
  220. package/dist/Function-DgQ_no6B.cjs +0 -84
  221. package/dist/Function-DgQ_no6B.cjs.map +0 -1
  222. package/dist/Function-xfQbftdE.mjs +0 -72
  223. package/dist/Function-xfQbftdE.mjs.map +0 -1
  224. package/dist/FunctionBuilder-CBeqX18X.mjs +0 -80
  225. package/dist/FunctionBuilder-CBeqX18X.mjs.map +0 -1
  226. package/dist/FunctionBuilder-C_qPxC8g.d.mts +0 -40
  227. package/dist/FunctionBuilder-C_qPxC8g.d.mts.map +0 -1
  228. package/dist/FunctionBuilder-C_xG9As7.cjs +0 -86
  229. package/dist/FunctionBuilder-C_xG9As7.cjs.map +0 -1
  230. package/dist/FunctionBuilder-D_7f5MfS.d.cts +0 -40
  231. package/dist/FunctionBuilder-D_7f5MfS.d.cts.map +0 -1
  232. package/dist/FunctionExecutionWrapper-B0ZAssiy.mjs +0 -101
  233. package/dist/FunctionExecutionWrapper-B0ZAssiy.mjs.map +0 -1
  234. package/dist/FunctionExecutionWrapper-Cg8HjuHL.d.cts +0 -50
  235. package/dist/FunctionExecutionWrapper-Cg8HjuHL.d.cts.map +0 -1
  236. package/dist/FunctionExecutionWrapper-KKHP6fDY.cjs +0 -107
  237. package/dist/FunctionExecutionWrapper-KKHP6fDY.cjs.map +0 -1
  238. package/dist/FunctionExecutionWrapper-xbTmBARx.d.mts +0 -50
  239. package/dist/FunctionExecutionWrapper-xbTmBARx.d.mts.map +0 -1
  240. package/dist/HonoEndpointAdaptor-B5fKdLi7.cjs.map +0 -1
  241. package/dist/HonoEndpointAdaptor-C2deTEwW.d.mts +0 -50
  242. package/dist/HonoEndpointAdaptor-C2deTEwW.d.mts.map +0 -1
  243. package/dist/HonoEndpointAdaptor-D3IgM-0B.d.cts +0 -50
  244. package/dist/HonoEndpointAdaptor-D3IgM-0B.d.cts.map +0 -1
  245. package/dist/HonoEndpointAdaptor-DOUODM7n.mjs.map +0 -1
  246. package/dist/MswEndpointAdaptor-B41INCc7.mjs +0 -108
  247. package/dist/MswEndpointAdaptor-B41INCc7.mjs.map +0 -1
  248. package/dist/MswEndpointAdaptor-CA_fu6Wx.cjs +0 -120
  249. package/dist/MswEndpointAdaptor-CA_fu6Wx.cjs.map +0 -1
  250. package/dist/MswEndpointAdaptor-CXgYbOxw.d.mts +0 -101
  251. package/dist/MswEndpointAdaptor-CXgYbOxw.d.mts.map +0 -1
  252. package/dist/MswEndpointAdaptor-CsYvrQeB.d.cts +0 -101
  253. package/dist/MswEndpointAdaptor-CsYvrQeB.d.cts.map +0 -1
  254. package/dist/Subscriber-9ObcUdcC.d.mts.map +0 -1
  255. package/dist/Subscriber-BH76wgkL.mjs +0 -28
  256. package/dist/Subscriber-BH76wgkL.mjs.map +0 -1
  257. package/dist/Subscriber-BgspJeS4.cjs +0 -34
  258. package/dist/Subscriber-BgspJeS4.cjs.map +0 -1
  259. package/dist/SubscriberBuilder-B4md5wzs.mjs +0 -54
  260. package/dist/SubscriberBuilder-B4md5wzs.mjs.map +0 -1
  261. package/dist/SubscriberBuilder-Be7WBbCL.d.cts +0 -28
  262. package/dist/SubscriberBuilder-Be7WBbCL.d.cts.map +0 -1
  263. package/dist/SubscriberBuilder-BtL22ZJ9.cjs +0 -60
  264. package/dist/SubscriberBuilder-BtL22ZJ9.cjs.map +0 -1
  265. package/dist/SubscriberBuilder-DsfIkgTF.d.mts +0 -28
  266. package/dist/SubscriberBuilder-DsfIkgTF.d.mts.map +0 -1
  267. package/dist/TestEndpointAdaptor-BFmgf7Fn.mjs +0 -174
  268. package/dist/TestEndpointAdaptor-BFmgf7Fn.mjs.map +0 -1
  269. package/dist/TestEndpointAdaptor-C79Z-QS4.d.mts +0 -45
  270. package/dist/TestEndpointAdaptor-C79Z-QS4.d.mts.map +0 -1
  271. package/dist/TestEndpointAdaptor-DYLDyAAC.cjs +0 -180
  272. package/dist/TestEndpointAdaptor-DYLDyAAC.cjs.map +0 -1
  273. package/dist/TestEndpointAdaptor-pM8yskbb.d.cts +0 -45
  274. package/dist/TestEndpointAdaptor-pM8yskbb.d.cts.map +0 -1
  275. package/dist/TestFunctionAdaptor-B859kIeb.cjs +0 -81
  276. package/dist/TestFunctionAdaptor-B859kIeb.cjs.map +0 -1
  277. package/dist/TestFunctionAdaptor-C0A-VqnM.d.mts +0 -30
  278. package/dist/TestFunctionAdaptor-C0A-VqnM.d.mts.map +0 -1
  279. package/dist/TestFunctionAdaptor-CqdSlhx1.mjs +0 -75
  280. package/dist/TestFunctionAdaptor-CqdSlhx1.mjs.map +0 -1
  281. package/dist/TestFunctionAdaptor-Dbq55dKP.d.cts +0 -30
  282. package/dist/TestFunctionAdaptor-Dbq55dKP.d.cts.map +0 -1
  283. package/dist/TestSubscriberAdaptor-BEyCFP9G.d.mts +0 -26
  284. package/dist/TestSubscriberAdaptor-BEyCFP9G.d.mts.map +0 -1
  285. package/dist/TestSubscriberAdaptor-BknOLRQw.d.cts +0 -26
  286. package/dist/TestSubscriberAdaptor-BknOLRQw.d.cts.map +0 -1
  287. package/dist/TestSubscriberAdaptor-CCcviuKa.mjs +0 -51
  288. package/dist/TestSubscriberAdaptor-CCcviuKa.mjs.map +0 -1
  289. package/dist/TestSubscriberAdaptor-_69o1d0f.cjs +0 -57
  290. package/dist/TestSubscriberAdaptor-_69o1d0f.cjs.map +0 -1
  291. package/dist/chunk-CUT6urMc.cjs +0 -30
  292. package/dist/crons/Cron.cjs +0 -8
  293. package/dist/crons/Cron.d.cts +0 -7
  294. package/dist/crons/Cron.d.mts +0 -7
  295. package/dist/crons/Cron.mjs +0 -8
  296. package/dist/crons/CronBuilder.cjs +0 -9
  297. package/dist/crons/CronBuilder.d.cts +0 -8
  298. package/dist/crons/CronBuilder.d.mts +0 -8
  299. package/dist/crons/CronBuilder.mjs +0 -9
  300. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +0 -11
  301. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +0 -11
  302. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +0 -11
  303. package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +0 -11
  304. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +0 -13
  305. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +0 -12
  306. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +0 -12
  307. package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +0 -13
  308. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +0 -13
  309. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +0 -12
  310. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +0 -12
  311. package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +0 -13
  312. package/dist/endpoints/Authorizer.cjs +0 -6
  313. package/dist/endpoints/Authorizer.d.cts +0 -2
  314. package/dist/endpoints/Authorizer.d.mts +0 -2
  315. package/dist/endpoints/Authorizer.mjs +0 -3
  316. package/dist/endpoints/Endpoint.cjs +0 -10
  317. package/dist/endpoints/Endpoint.d.cts +0 -9
  318. package/dist/endpoints/Endpoint.d.mts +0 -9
  319. package/dist/endpoints/Endpoint.mjs +0 -8
  320. package/dist/endpoints/EndpointBuilder.cjs +0 -11
  321. package/dist/endpoints/EndpointBuilder.d.cts +0 -10
  322. package/dist/endpoints/EndpointBuilder.d.mts +0 -10
  323. package/dist/endpoints/EndpointBuilder.mjs +0 -11
  324. package/dist/endpoints/EndpointFactory.cjs +0 -13
  325. package/dist/endpoints/EndpointFactory.d.cts +0 -11
  326. package/dist/endpoints/EndpointFactory.d.mts +0 -11
  327. package/dist/endpoints/EndpointFactory.mjs +0 -12
  328. package/dist/endpoints/HonoEndpointAdaptor.cjs +0 -14
  329. package/dist/endpoints/HonoEndpointAdaptor.d.cts +0 -10
  330. package/dist/endpoints/HonoEndpointAdaptor.d.mts +0 -10
  331. package/dist/endpoints/HonoEndpointAdaptor.mjs +0 -14
  332. package/dist/endpoints/MswEndpointAdaptor.cjs +0 -16
  333. package/dist/endpoints/MswEndpointAdaptor.d.cts +0 -10
  334. package/dist/endpoints/MswEndpointAdaptor.d.mts +0 -10
  335. package/dist/endpoints/MswEndpointAdaptor.mjs +0 -15
  336. package/dist/endpoints/TestEndpointAdaptor.cjs +0 -12
  337. package/dist/endpoints/TestEndpointAdaptor.d.cts +0 -10
  338. package/dist/endpoints/TestEndpointAdaptor.d.mts +0 -10
  339. package/dist/endpoints/TestEndpointAdaptor.mjs +0 -12
  340. package/dist/endpoints/audit.cjs +0 -0
  341. package/dist/endpoints/audit.d.cts +0 -9
  342. package/dist/endpoints/audit.d.mts +0 -9
  343. package/dist/endpoints/audit.mjs +0 -0
  344. package/dist/endpoints/helpers.cjs +0 -10
  345. package/dist/endpoints/helpers.d.cts +0 -60
  346. package/dist/endpoints/helpers.d.cts.map +0 -1
  347. package/dist/endpoints/helpers.d.mts +0 -60
  348. package/dist/endpoints/helpers.d.mts.map +0 -1
  349. package/dist/endpoints/helpers.mjs +0 -9
  350. package/dist/endpoints/lazyAccessors.cjs +0 -10
  351. package/dist/endpoints/lazyAccessors.d.cts +0 -10
  352. package/dist/endpoints/lazyAccessors.d.mts +0 -10
  353. package/dist/endpoints/lazyAccessors.mjs +0 -3
  354. package/dist/endpoints/parseHonoQuery.cjs +0 -3
  355. package/dist/endpoints/parseHonoQuery.d.cts +0 -14
  356. package/dist/endpoints/parseHonoQuery.d.cts.map +0 -1
  357. package/dist/endpoints/parseHonoQuery.d.mts +0 -14
  358. package/dist/endpoints/parseHonoQuery.d.mts.map +0 -1
  359. package/dist/endpoints/parseHonoQuery.mjs +0 -3
  360. package/dist/endpoints/parseQueryParams.cjs +0 -3
  361. package/dist/endpoints/parseQueryParams.d.cts +0 -14
  362. package/dist/endpoints/parseQueryParams.d.cts.map +0 -1
  363. package/dist/endpoints/parseQueryParams.d.mts +0 -14
  364. package/dist/endpoints/parseQueryParams.d.mts.map +0 -1
  365. package/dist/endpoints/parseQueryParams.mjs +0 -3
  366. package/dist/endpoints/processAudits.cjs +0 -5
  367. package/dist/endpoints/processAudits.d.cts +0 -95
  368. package/dist/endpoints/processAudits.d.cts.map +0 -1
  369. package/dist/endpoints/processAudits.d.mts +0 -95
  370. package/dist/endpoints/processAudits.d.mts.map +0 -1
  371. package/dist/endpoints/processAudits.mjs +0 -3
  372. package/dist/endpoints/rls.cjs +0 -3
  373. package/dist/endpoints/rls.d.cts +0 -9
  374. package/dist/endpoints/rls.d.mts +0 -9
  375. package/dist/endpoints/rls.mjs +0 -3
  376. package/dist/functions/AWSLambdaFunction.cjs +0 -9
  377. package/dist/functions/AWSLambdaFunction.d.cts +0 -5
  378. package/dist/functions/AWSLambdaFunction.d.mts +0 -5
  379. package/dist/functions/AWSLambdaFunction.mjs +0 -9
  380. package/dist/functions/BaseFunctionBuilder.cjs +0 -4
  381. package/dist/functions/BaseFunctionBuilder.d.cts +0 -3
  382. package/dist/functions/BaseFunctionBuilder.d.mts +0 -3
  383. package/dist/functions/BaseFunctionBuilder.mjs +0 -4
  384. package/dist/functions/Function.cjs +0 -5
  385. package/dist/functions/Function.d.cts +0 -3
  386. package/dist/functions/Function.d.mts +0 -3
  387. package/dist/functions/Function.mjs +0 -4
  388. package/dist/functions/FunctionBuilder.cjs +0 -6
  389. package/dist/functions/FunctionBuilder.d.cts +0 -5
  390. package/dist/functions/FunctionBuilder.d.mts +0 -5
  391. package/dist/functions/FunctionBuilder.mjs +0 -6
  392. package/dist/functions/FunctionExecutionWrapper.cjs +0 -8
  393. package/dist/functions/FunctionExecutionWrapper.d.cts +0 -4
  394. package/dist/functions/FunctionExecutionWrapper.d.mts +0 -4
  395. package/dist/functions/FunctionExecutionWrapper.mjs +0 -8
  396. package/dist/functions/TestFunctionAdaptor.cjs +0 -8
  397. package/dist/functions/TestFunctionAdaptor.d.cts +0 -4
  398. package/dist/functions/TestFunctionAdaptor.d.mts +0 -4
  399. package/dist/functions/TestFunctionAdaptor.mjs +0 -8
  400. package/dist/functions-B1mrMoUH.mjs +0 -8
  401. package/dist/functions-B1mrMoUH.mjs.map +0 -1
  402. package/dist/functions-rOD3pXQd.cjs +0 -13
  403. package/dist/functions-rOD3pXQd.cjs.map +0 -1
  404. package/dist/helpers-BYyX0qTA.cjs +0 -95
  405. package/dist/helpers-BYyX0qTA.cjs.map +0 -1
  406. package/dist/helpers-BtwC2IW8.mjs +0 -83
  407. package/dist/helpers-BtwC2IW8.mjs.map +0 -1
  408. package/dist/index-BfeupgMl.d.cts +0 -12
  409. package/dist/index-BfeupgMl.d.cts.map +0 -1
  410. package/dist/index-Cg2UDz1r.d.mts +0 -12
  411. package/dist/index-Cg2UDz1r.d.mts.map +0 -1
  412. package/dist/lazyAccessors-BVEtB9lU.cjs +0 -223
  413. package/dist/lazyAccessors-BVEtB9lU.cjs.map +0 -1
  414. package/dist/lazyAccessors-Bxy5DBp4.d.cts +0 -49
  415. package/dist/lazyAccessors-Bxy5DBp4.d.cts.map +0 -1
  416. package/dist/lazyAccessors-CWFdtzSR.d.mts +0 -49
  417. package/dist/lazyAccessors-CWFdtzSR.d.mts.map +0 -1
  418. package/dist/lazyAccessors-DM6HcXQk.mjs +0 -175
  419. package/dist/lazyAccessors-DM6HcXQk.mjs.map +0 -1
  420. package/dist/parseHonoQuery-BBs8CX-H.cjs +0 -24
  421. package/dist/parseHonoQuery-BBs8CX-H.cjs.map +0 -1
  422. package/dist/parseHonoQuery-Cp8CII0P.mjs +0 -18
  423. package/dist/parseHonoQuery-Cp8CII0P.mjs.map +0 -1
  424. package/dist/parseQueryParams-B4RK1za3.cjs +0 -31
  425. package/dist/parseQueryParams-B4RK1za3.cjs.map +0 -1
  426. package/dist/parseQueryParams-DS3Qmrbd.mjs +0 -25
  427. package/dist/parseQueryParams-DS3Qmrbd.mjs.map +0 -1
  428. package/dist/processAudits-CzHkPokQ.cjs +0 -180
  429. package/dist/processAudits-CzHkPokQ.cjs.map +0 -1
  430. package/dist/processAudits-Dj8UGqcW.mjs +0 -162
  431. package/dist/processAudits-Dj8UGqcW.mjs.map +0 -1
  432. package/dist/publisher-BUDHcaz3.d.cts +0 -16
  433. package/dist/publisher-BUDHcaz3.d.cts.map +0 -1
  434. package/dist/publisher-Bw4770Hi.mjs +0 -41
  435. package/dist/publisher-Bw4770Hi.mjs.map +0 -1
  436. package/dist/publisher-DXglijK_.d.mts +0 -16
  437. package/dist/publisher-DXglijK_.d.mts.map +0 -1
  438. package/dist/publisher-lFQleddL.cjs +0 -53
  439. package/dist/publisher-lFQleddL.cjs.map +0 -1
  440. package/dist/publisher.cjs +0 -4
  441. package/dist/publisher.d.cts +0 -3
  442. package/dist/publisher.d.mts +0 -3
  443. package/dist/publisher.mjs +0 -3
  444. package/dist/rls-C0r4UKVm.mjs +0 -9
  445. package/dist/rls-C0r4UKVm.mjs.map +0 -1
  446. package/dist/rls-Cfb6w-tQ.cjs +0 -15
  447. package/dist/rls-Cfb6w-tQ.cjs.map +0 -1
  448. package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +0 -3
  449. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.cts +0 -4
  450. package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +0 -4
  451. package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +0 -3
  452. package/dist/subscribers/Subscriber.cjs +0 -4
  453. package/dist/subscribers/Subscriber.d.cts +0 -3
  454. package/dist/subscribers/Subscriber.d.mts +0 -3
  455. package/dist/subscribers/Subscriber.mjs +0 -4
  456. package/dist/subscribers/SubscriberBuilder.cjs +0 -5
  457. package/dist/subscribers/SubscriberBuilder.d.cts +0 -4
  458. package/dist/subscribers/SubscriberBuilder.d.mts +0 -4
  459. package/dist/subscribers/SubscriberBuilder.mjs +0 -5
  460. package/dist/subscribers/TestSubscriberAdaptor.cjs +0 -4
  461. package/dist/subscribers/TestSubscriberAdaptor.d.cts +0 -4
  462. package/dist/subscribers/TestSubscriberAdaptor.d.mts +0 -4
  463. package/dist/subscribers/TestSubscriberAdaptor.mjs +0 -4
  464. package/dist/telemetry.cjs +0 -0
  465. package/dist/telemetry.d.cts +0 -2
  466. package/dist/telemetry.d.mts +0 -2
  467. package/dist/telemetry.mjs +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"AWSLambdaSubscriberAdaptor-eZ3qoKvK.cjs","names":["envParser: EnvironmentParser<{}>","subscriber: Subscriber<\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTSubscribedEvents\n\t\t>","events: any[]","event: SQSEvent | SNSEvent","record: SNSEventRecord","record: SQSRecord","value: string","event: any","event: SubscriberEvent<TServices, TLogger>","event: unknown","context: Context"],"sources":["../src/subscribers/AWSLambdaSubscriberAdaptor.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport { wrapError } from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { InferStandardSchema } from '@geekmidas/schema';\nimport type { Service, ServiceRecord } from '@geekmidas/services';\nimport { runWithRequestContext, ServiceDiscovery } from '@geekmidas/services';\nimport middy, { type MiddlewareObj } from '@middy/core';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tContext,\n\tHandler,\n\tSNSEvent,\n\tSNSEventRecord,\n\tSQSEvent,\n\tSQSRecord,\n} from 'aws-lambda';\nimport type { Subscriber } from './Subscriber';\n\nexport type AWSLambdaHandler<TEvent = any, TResult = any> = Handler<\n\tTEvent,\n\tTResult\n>;\n\ntype SubscriberEvent<TServices extends Service[], TLogger extends Logger> = {\n\tevents: any[];\n\tservices: ServiceRecord<TServices>;\n\tlogger: TLogger;\n};\n\ntype Middleware<\n\tTServices extends Service[],\n\tTLogger extends Logger,\n\tTOutSchema extends StandardSchemaV1 | undefined,\n> = MiddlewareObj<\n\tSubscriberEvent<TServices, TLogger>,\n\tInferStandardSchema<TOutSchema>,\n\tError,\n\tContext\n>;\n\nexport class AWSLambdaSubscriber<\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\n\tTSubscribedEvents extends any[] = [],\n> {\n\tprivate _logger!: TLogger;\n\tprivate _services!: ServiceRecord<TServices>;\n\n\tconstructor(\n\t\tprivate envParser: EnvironmentParser<{}>,\n\t\treadonly subscriber: Subscriber<\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tOutSchema,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTSubscribedEvents\n\t\t>,\n\t) {\n\t\tthis._logger = subscriber.logger;\n\t}\n\n\tget logger(): TLogger {\n\t\treturn this._logger;\n\t}\n\n\tprivate async getServices(): Promise<ServiceRecord<TServices>> {\n\t\tif (this._services) {\n\t\t\treturn this._services;\n\t\t}\n\n\t\tconst serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);\n\n\t\tif (this.subscriber.services.length > 0) {\n\t\t\tconst registered = await serviceDiscovery.register(\n\t\t\t\tthis.subscriber.services,\n\t\t\t);\n\t\t\tthis._services = registered as ServiceRecord<TServices>;\n\t\t} else {\n\t\t\tthis._services = {} as ServiceRecord<TServices>;\n\t\t}\n\n\t\treturn this._services;\n\t}\n\n\tprivate error(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tonError: (req) => {\n\t\t\t\tconst logger = req.event?.logger || this.subscriber.logger;\n\t\t\t\tlogger.error(req.error || {}, 'Error processing subscriber');\n\n\t\t\t\t// Re-throw the wrapped error to let Lambda handle it\n\t\t\t\tthrow wrapError(req.error);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate loggerMiddleware(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tbefore: (req) => {\n\t\t\t\tthis._logger = this.subscriber.logger.child({\n\t\t\t\t\tsubscriber: {\n\t\t\t\t\t\tname: req.context.functionName,\n\t\t\t\t\t\tversion: req.context.functionVersion,\n\t\t\t\t\t\tmemory: req.context.memoryLimitInMB,\n\t\t\t\t\t},\n\t\t\t\t\treq: {\n\t\t\t\t\t\tid: req.context.awsRequestId,\n\t\t\t\t\t},\n\t\t\t\t}) as TLogger;\n\n\t\t\t\treq.event.logger = this._logger;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate services(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\treq.event.services = await this.getServices();\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate parseEvents(): Middleware<TServices, TLogger, OutSchema> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\tconst { logger, ...e } = req.event;\n\t\t\t\tconst rawEvent = e as any as SQSEvent | SNSEvent;\n\n\t\t\t\tlogger.info({\n\t\t\t\t\trawEvent,\n\t\t\t\t});\n\n\t\t\t\t// Parse events based on the event type\n\t\t\t\tconst events: any[] = [];\n\n\t\t\t\tif ('Records' in rawEvent) {\n\t\t\t\t\tif (this.isSQSEvent(rawEvent)) {\n\t\t\t\t\t\t// SQS Event\n\t\t\t\t\t\tfor (const record of rawEvent.Records) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst event = this.parseSQSRecord(record);\n\t\t\t\t\t\t\t\tif (this.shouldIncludeEvent(event)) {\n\t\t\t\t\t\t\t\t\tevents.push(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tthis.logger.error(\n\t\t\t\t\t\t\t\t\t{ error, record },\n\t\t\t\t\t\t\t\t\t'Failed to parse SQS record',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (this.isSNSEvent(rawEvent)) {\n\t\t\t\t\t\t// SNS Event\n\t\t\t\t\t\tfor (const record of rawEvent.Records) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst event = this.parseSNSRecord(record);\n\t\t\t\t\t\t\t\tif (this.shouldIncludeEvent(event)) {\n\t\t\t\t\t\t\t\t\tevents.push(event);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tthis.logger.error(\n\t\t\t\t\t\t\t\t\t{ error, record },\n\t\t\t\t\t\t\t\t\t'Failed to parse SNS record',\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t(req.event as any).events = events;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate isSQSEvent(event: SQSEvent | SNSEvent): event is SQSEvent {\n\t\tconst firstRecord = event.Records[0];\n\t\treturn (\n\t\t\t'Records' in event &&\n\t\t\tevent.Records.length > 0 &&\n\t\t\tfirstRecord !== undefined &&\n\t\t\t'eventSource' in firstRecord &&\n\t\t\tfirstRecord.eventSource === 'aws:sqs'\n\t\t);\n\t}\n\n\tprivate isSNSEvent(event: SQSEvent | SNSEvent): event is SNSEvent {\n\t\tconst firstRecord = event.Records[0];\n\t\treturn (\n\t\t\t'Records' in event &&\n\t\t\tevent.Records.length > 0 &&\n\t\t\tfirstRecord !== undefined &&\n\t\t\t'EventSource' in firstRecord &&\n\t\t\tfirstRecord.EventSource === 'aws:sns'\n\t\t);\n\t}\n\n\tprivate parseSNSRecord(record: SNSEventRecord): any {\n\t\tconst message = this.safeJsonParse(record.Sns.Message);\n\t\tconst messageType = record.Sns.MessageAttributes?.type?.Value;\n\n\t\t// Not JSON — wrap raw string with type from MessageAttributes if available\n\t\tif (message === null) {\n\t\t\treturn messageType\n\t\t\t\t? { type: messageType, payload: record.Sns.Message }\n\t\t\t\t: record.Sns.Message;\n\t\t}\n\n\t\t// Resolve type from MessageAttributes (preferred) or message body\n\t\tconst resolvedType = messageType ?? message.type;\n\n\t\tif (message.type) {\n\t\t\treturn message; // Full event format: { type, payload }\n\t\t}\n\n\t\t// Payload-only format: type is in MessageAttributes\n\t\treturn resolvedType ? { type: resolvedType, payload: message } : message;\n\t}\n\n\tprivate parseSQSRecord(record: SQSRecord): any {\n\t\tconst body = this.safeJsonParse(record.body);\n\n\t\t// Not JSON — return raw body as-is\n\t\tif (body === null) {\n\t\t\treturn record.body;\n\t\t}\n\n\t\t// Check if this is an SNS message wrapped in SQS\n\t\tif (body.Type === 'Notification' && body.Message) {\n\t\t\tconst snsMessage = this.safeJsonParse(body.Message);\n\t\t\tconst messageType = body.MessageAttributes?.type?.Value;\n\n\t\t\t// SNS Message not JSON — wrap with type from MessageAttributes if available\n\t\t\tif (snsMessage === null) {\n\t\t\t\treturn messageType\n\t\t\t\t\t? { type: messageType, payload: body.Message }\n\t\t\t\t\t: body.Message;\n\t\t\t}\n\n\t\t\tif (snsMessage.type) {\n\t\t\t\treturn snsMessage; // Full event format: { type, payload }\n\t\t\t}\n\n\t\t\t// Payload-only format: type is in MessageAttributes\n\t\t\tconst resolvedType = messageType ?? snsMessage.type;\n\t\t\treturn resolvedType\n\t\t\t\t? { type: resolvedType, payload: snsMessage }\n\t\t\t\t: snsMessage;\n\t\t}\n\n\t\t// Direct SQS message\n\t\treturn body;\n\t}\n\n\tprivate safeJsonParse(value: string): any | null {\n\t\ttry {\n\t\t\treturn JSON.parse(value);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate shouldIncludeEvent(event: any): boolean {\n\t\t// No event type (raw string/non-object) — always include\n\t\tif (typeof event !== 'object' || !event?.type) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// No filter configured — accept all\n\t\tif (!this.subscriber.subscribedEvents) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.subscriber.subscribedEvents.includes(event.type as any);\n\t}\n\n\tprivate async _handler(event: SubscriberEvent<TServices, TLogger>) {\n\t\t// If no events after filtering, return early\n\t\tif (event.events.length === 0) {\n\t\t\tthis.logger.info('No subscribed events to process');\n\t\t\treturn {\n\t\t\t\tbatchItemFailures: [],\n\t\t\t};\n\t\t}\n\n\t\t// Execute the subscriber with the parsed context\n\t\tconst result = await this.subscriber.handler({\n\t\t\tevents: event.events,\n\t\t\tservices: event.services,\n\t\t\tlogger: event.logger,\n\t\t});\n\n\t\t// Parse output if schema is provided\n\t\tif (this.subscriber.outputSchema && result) {\n\t\t\tconst validationResult =\n\t\t\t\tawait this.subscriber.outputSchema['~standard'].validate(result);\n\n\t\t\tif (validationResult.issues) {\n\t\t\t\tthis.logger.error(\n\t\t\t\t\t{ issues: validationResult.issues },\n\t\t\t\t\t'Subscriber output validation failed',\n\t\t\t\t);\n\t\t\t\tthrow new Error('Subscriber output validation failed');\n\t\t\t}\n\n\t\t\treturn validationResult.value;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tget handler(): AWSLambdaHandler {\n\t\tconst handler = this._handler.bind(this);\n\n\t\t// Apply middleware in order\n\t\tconst chain = middy(handler)\n\t\t\t.use(this.loggerMiddleware())\n\t\t\t.use(this.parseEvents())\n\t\t\t.use(this.error())\n\t\t\t.use(this.services());\n\n\t\t// Wrap entire Middy chain in request context for service access\n\t\tconst wrappedHandler = async (event: unknown, context: Context) => {\n\t\t\tconst startTime = Date.now();\n\t\t\tconst requestId = context.awsRequestId;\n\t\t\tconst logger = this.subscriber.logger.child({\n\t\t\t\trequestId,\n\t\t\t}) as TLogger;\n\n\t\t\treturn runWithRequestContext({ logger, requestId, startTime }, () =>\n\t\t\t\tchain(event as Parameters<typeof chain>[0], context),\n\t\t\t);\n\t\t};\n\n\t\treturn wrappedHandler as unknown as AWSLambdaHandler;\n\t}\n}\n"],"mappings":"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"}
@@ -1,277 +0,0 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_publisher = require('./publisher-lFQleddL.cjs');
3
- const require_Endpoint = require('./Endpoint-BcxvF4F3.cjs');
4
- const require_processAudits = require('./processAudits-CzHkPokQ.cjs');
5
- const __geekmidas_db_rls = require_chunk.__toESM(require("@geekmidas/db/rls"));
6
- const __middy_core = require_chunk.__toESM(require("@middy/core"));
7
- const lodash_set = require_chunk.__toESM(require("lodash.set"));
8
- const __geekmidas_errors = require_chunk.__toESM(require("@geekmidas/errors"));
9
- const __geekmidas_services = require_chunk.__toESM(require("@geekmidas/services"));
10
-
11
- //#region src/endpoints/AmazonApiGatewayEndpointAdaptor.ts
12
- var AmazonApiGatewayEndpoint = class {
13
- options;
14
- constructor(envParser, endpoint, options = {}) {
15
- this.envParser = envParser;
16
- this.endpoint = endpoint;
17
- this.options = options;
18
- }
19
- error() {
20
- return { onError: (req) => {
21
- (req.event.logger || this.endpoint.logger).error(req.error || {}, "Error processing request");
22
- const wrappedError = (0, __geekmidas_errors.wrapError)(req.error);
23
- req.response = {
24
- statusCode: wrappedError.statusCode,
25
- body: wrappedError.body
26
- };
27
- } };
28
- }
29
- /**
30
- * Decodes the raw body from an API Gateway event.
31
- * Uses Content-Type to decide parsing strategy (like Express/Fastify/Hono):
32
- * - `application/json` (or missing) → JSON.parse the decoded string
33
- * - Anything else → return decoded string as-is, let the schema handle it
34
- *
35
- * Defaults to JSON when no Content-Type is provided for backwards compatibility.
36
- */
37
- static decodeBody(body, isBase64Encoded, contentType) {
38
- if (!body) return void 0;
39
- const raw = isBase64Encoded ? Buffer.from(body, "base64").toString("utf-8") : body;
40
- const isJson = !contentType || contentType.toLowerCase().includes("application/json");
41
- if (isJson) return JSON.parse(raw);
42
- return raw;
43
- }
44
- getCookies(e) {
45
- const headers = e.headers;
46
- return require_Endpoint.Endpoint.createCookies(headers?.cookie);
47
- }
48
- input() {
49
- return { before: async (req) => {
50
- try {
51
- const { body, query, params } = this.getInput(req.event);
52
- const headers = req.event.headers;
53
- const header = require_Endpoint.Endpoint.createHeaders(headers);
54
- const cookie = this.getCookies(req.event);
55
- (0, lodash_set.default)(req.event, "body", await this.endpoint.parseInput(body, "body"));
56
- (0, lodash_set.default)(req.event, "query", await this.endpoint.parseInput(query, "query"));
57
- (0, lodash_set.default)(req.event, "params", await this.endpoint.parseInput(params, "params"));
58
- (0, lodash_set.default)(req.event, "header", header);
59
- (0, lodash_set.default)(req.event, "cookie", cookie);
60
- } catch (error) {
61
- if (error && typeof error === "object" && Array.isArray(error)) throw new __geekmidas_errors.UnprocessableEntityError("Validation failed", error);
62
- throw error;
63
- }
64
- } };
65
- }
66
- logger() {
67
- return { before: (req) => {
68
- req.event.logger = this.endpoint.logger.child({
69
- route: this.endpoint.route,
70
- host: req.event.headers?.host,
71
- method: this.endpoint.method,
72
- ...this.getLoggerContext(req.event, req.context)
73
- });
74
- } };
75
- }
76
- services() {
77
- return { before: async (req) => {
78
- const _logger = req.event.logger;
79
- const serviceDiscovery = __geekmidas_services.ServiceDiscovery.getInstance(this.envParser);
80
- const services = await serviceDiscovery.register(this.endpoint.services);
81
- req.event.services = services;
82
- } };
83
- }
84
- authorize() {
85
- return { before: async (req) => {
86
- const logger = req.event.logger;
87
- const services = req.event.services;
88
- const header = req.event.header;
89
- const cookie = req.event.cookie;
90
- const session = req.event.session;
91
- const isAuthorized = await this.endpoint.authorize({
92
- header,
93
- cookie,
94
- services,
95
- logger,
96
- session,
97
- ...req.event.db !== void 0 && { db: req.event.db },
98
- body: req.event.body,
99
- query: req.event.query,
100
- params: req.event.params
101
- });
102
- if (!isAuthorized) {
103
- logger.warn("Unauthorized access attempt");
104
- throw new __geekmidas_errors.UnauthorizedError("Unauthorized access to the endpoint", "You do not have permission to access this resource.");
105
- }
106
- } };
107
- }
108
- database() {
109
- return { before: async (req) => {
110
- if (!this.endpoint.databaseService) return;
111
- const _logger = req.event.logger;
112
- const serviceDiscovery = __geekmidas_services.ServiceDiscovery.getInstance(this.envParser);
113
- const db = await serviceDiscovery.register([this.endpoint.databaseService]).then((s) => s[this.endpoint.databaseService?.serviceName]);
114
- req.event.db = db;
115
- } };
116
- }
117
- session() {
118
- return { before: async (req) => {
119
- const logger = req.event.logger;
120
- const services = req.event.services;
121
- const db = req.event.db;
122
- req.event.session = await this.endpoint.getSession({
123
- logger,
124
- services,
125
- header: req.event.header,
126
- cookie: req.event.cookie,
127
- ...db !== void 0 && { db }
128
- });
129
- } };
130
- }
131
- events() {
132
- return { after: async (req) => {
133
- const event = req.event;
134
- const response = event.__response;
135
- const statusCode = req.response?.statusCode ?? this.endpoint.status;
136
- if (require_Endpoint.Endpoint.isSuccessStatus(statusCode)) {
137
- const logger = event.logger;
138
- const serviceDiscovery = __geekmidas_services.ServiceDiscovery.getInstance(this.envParser);
139
- await require_publisher.publishConstructEvents(this.endpoint, response, serviceDiscovery, logger);
140
- }
141
- } };
142
- }
143
- async _handler(event) {
144
- const input = this.endpoint.refineInput(event);
145
- const logger = event.logger;
146
- const serviceDiscovery = __geekmidas_services.ServiceDiscovery.getInstance(this.envParser);
147
- const auditContext = await require_processAudits.createAuditContext(this.endpoint, serviceDiscovery, logger, {
148
- session: event.session,
149
- header: event.header,
150
- cookie: event.cookie,
151
- services: event.services
152
- });
153
- const audits = this.endpoint.audits;
154
- if (!auditContext && audits?.length) logger.warn("No auditor storage service available");
155
- const rawDb = event.db;
156
- const rlsActive = this.endpoint.rlsConfig && !this.endpoint.rlsBypass && rawDb !== void 0;
157
- const rlsContext = rlsActive ? await this.endpoint.rlsConfig?.extractor({
158
- services: event.services,
159
- session: event.session,
160
- header: event.header,
161
- cookie: event.cookie,
162
- logger
163
- }) : void 0;
164
- const result = await require_processAudits.executeWithAuditTransaction(auditContext, async (auditor) => {
165
- const sameDatabase = auditContext?.storage?.databaseServiceName && auditContext.storage.databaseServiceName === this.endpoint.databaseService?.serviceName;
166
- const baseDb = sameDatabase ? auditor?.getTransaction?.() ?? rawDb : rawDb;
167
- const executeHandler = async (db) => {
168
- const responseBuilder = new require_Endpoint.ResponseBuilder();
169
- const response = await this.endpoint.handler({
170
- header: event.header,
171
- cookie: event.cookie,
172
- logger: event.logger,
173
- services: event.services,
174
- session: event.session,
175
- auditor,
176
- db,
177
- ...input
178
- }, responseBuilder);
179
- let data = response;
180
- let metadata$1 = responseBuilder.getMetadata();
181
- if (require_Endpoint.Endpoint.hasMetadata(response)) {
182
- data = response.data;
183
- metadata$1 = response.metadata;
184
- }
185
- const output$1 = this.endpoint.outputSchema ? await this.endpoint.parseOutput(data) : void 0;
186
- return {
187
- output: output$1,
188
- metadata: metadata$1,
189
- responseBuilder
190
- };
191
- };
192
- if (rlsActive && rlsContext && baseDb) return (0, __geekmidas_db_rls.withRlsContext)(baseDb, rlsContext, async (trx) => executeHandler(trx), { prefix: this.endpoint.rlsConfig?.prefix });
193
- return executeHandler(baseDb);
194
- }, async (result$1, auditor) => {
195
- if (!audits?.length) return;
196
- for (const audit of audits) {
197
- if (audit.when && !audit.when(result$1.output)) continue;
198
- const payload = audit.payload(result$1.output);
199
- const entityId = audit.entityId?.(result$1.output);
200
- auditor.audit(audit.type, payload, {
201
- table: audit.table,
202
- entityId
203
- });
204
- }
205
- }, { db: rawDb });
206
- const { output, metadata } = result;
207
- const body = output !== void 0 ? JSON.stringify(output) : void 0;
208
- event.__response = output;
209
- const lambdaResponse = {
210
- statusCode: metadata.status ?? this.endpoint.status,
211
- body
212
- };
213
- if (metadata.headers && Object.keys(metadata.headers).length > 0) lambdaResponse.headers = { ...metadata.headers };
214
- if (metadata.cookies && metadata.cookies.size > 0) {
215
- const setCookieHeaders = [];
216
- for (const [name, { value, options }] of metadata.cookies) setCookieHeaders.push(require_Endpoint.Endpoint.formatCookieHeader(name, value, options));
217
- if (setCookieHeaders.length > 0) lambdaResponse.multiValueHeaders = {
218
- ...lambdaResponse.multiValueHeaders,
219
- "Set-Cookie": setCookieHeaders
220
- };
221
- }
222
- return lambdaResponse;
223
- }
224
- /**
225
- * Convert Telemetry interface to Middy middleware
226
- */
227
- telemetry() {
228
- if (!this.options.telemetry) return null;
229
- const telemetry = this.options.telemetry;
230
- let ctx;
231
- return {
232
- before: (request) => {
233
- ctx = telemetry.onRequestStart({
234
- event: request.event,
235
- context: request.context
236
- });
237
- },
238
- after: (request) => {
239
- if (ctx) telemetry.onRequestEnd(ctx, {
240
- statusCode: request.response?.statusCode ?? 200,
241
- body: request.response?.body,
242
- headers: request.response?.headers
243
- });
244
- },
245
- onError: (request) => {
246
- if (ctx && request.error) telemetry.onRequestError(ctx, request.error instanceof Error ? request.error : new Error(String(request.error)));
247
- }
248
- };
249
- }
250
- get handler() {
251
- const handler = this._handler.bind(this);
252
- let chain = (0, __middy_core.default)(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());
253
- const telemetryMiddleware = this.telemetry();
254
- if (telemetryMiddleware) chain = chain.use(telemetryMiddleware);
255
- if (this.options.telescope?.middleware) chain = chain.use(this.options.telescope.middleware);
256
- const wrappedHandler = async (event, context) => {
257
- const startTime = Date.now();
258
- const requestId = context.awsRequestId;
259
- const logger = this.endpoint.logger.child({ requestId });
260
- return (0, __geekmidas_services.runWithRequestContext)({
261
- logger,
262
- requestId,
263
- startTime
264
- }, () => chain(event, context));
265
- };
266
- return wrappedHandler;
267
- }
268
- };
269
-
270
- //#endregion
271
- Object.defineProperty(exports, 'AmazonApiGatewayEndpoint', {
272
- enumerable: true,
273
- get: function () {
274
- return AmazonApiGatewayEndpoint;
275
- }
276
- });
277
- //# sourceMappingURL=AmazonApiGatewayEndpointAdaptor-BIltcbAc.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AmazonApiGatewayEndpointAdaptor-BIltcbAc.cjs","names":["envParser: EnvironmentParser<{}>","endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction\n\t\t>","options: AmazonApiGatewayEndpointOptions","body: string | undefined | null","isBase64Encoded: boolean | undefined","contentType: string | undefined","e: TEvent","UnprocessableEntityError","UnauthorizedError","event: Event<TEvent, TInput, TServices, TLogger, TSession>","db: any","ResponseBuilder","metadata","output","trx: any","result","lambdaResponse: AmazonApiGatewayEndpointHandlerResponse","setCookieHeaders: string[]","ctx: any","event: TEvent","context: Context"],"sources":["../src/endpoints/AmazonApiGatewayEndpointAdaptor.ts"],"sourcesContent":["import type { AuditableAction, AuditStorage } from '@geekmidas/audit';\nimport { withRlsContext } from '@geekmidas/db/rls';\nimport type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { Logger } from '@geekmidas/logger';\nimport middy, { type MiddlewareObj } from '@middy/core';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport type {\n\tAPIGatewayProxyEvent,\n\tAPIGatewayProxyEventV2,\n\tContext,\n} from 'aws-lambda';\nimport set from 'lodash.set';\nimport type { Telemetry } from '../telemetry';\nimport type { HttpMethod } from '../types';\nimport { Endpoint, type EndpointSchemas, ResponseBuilder } from './Endpoint';\n\n/**\n * Telescope integration for request recording.\n * Uses Middy middleware pattern for compatibility with existing telescope package.\n */\nexport interface TelescopeIntegration {\n\tmiddleware: MiddlewareObj<any, any, Error, Context>;\n}\n\nimport {\n\tUnauthorizedError,\n\tUnprocessableEntityError,\n\twrapError,\n} from '@geekmidas/errors';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type {\n\tInferComposableStandardSchema,\n\tInferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n\trunWithRequestContext,\n\ttype Service,\n\tServiceDiscovery,\n\ttype ServiceRecord,\n} from '@geekmidas/services';\nimport { publishConstructEvents } from '../publisher';\nimport type { MappedAudit } from './audit';\nimport type { CookieFn, HeaderFn } from './Endpoint';\nimport {\n\tcreateAuditContext,\n\texecuteWithAuditTransaction,\n} from './processAudits';\n\n// Helper function to publish events\n\n/**\n * Options for Amazon API Gateway endpoint adaptors\n */\nexport interface AmazonApiGatewayEndpointOptions {\n\t/**\n\t * Telescope integration for request recording and monitoring.\n\t *\n\t * @example\n\t * ```typescript\n\t * import { telescopeMiddleware } from '@geekmidas/telescope/lambda';\n\t *\n\t * const adaptor = new AmazonApiGatewayV2Endpoint(envParser, endpoint, {\n\t * telescope: { middleware: telescopeMiddleware(telescope) },\n\t * });\n\t * ```\n\t */\n\ttelescope?: TelescopeIntegration;\n\n\t/**\n\t * Telemetry integration for distributed tracing.\n\t * Works with any OpenTelemetry-compatible backend.\n\t *\n\t * @example\n\t * ```typescript\n\t * import { OTelTelemetry } from '@geekmidas/telescope/instrumentation';\n\t *\n\t * const adaptor = new AmazonApiGatewayV2Endpoint(envParser, endpoint, {\n\t * telemetry: new OTelTelemetry(),\n\t * });\n\t * ```\n\t */\n\ttelemetry?: Telemetry;\n}\n\nexport abstract class AmazonApiGatewayEndpoint<\n\tTHandler extends\n\t\t| AmazonApiGatewayV1EndpointHandler\n\t\t| AmazonApiGatewayV2EndpointHandler,\n\tTEvent extends HandlerEvent<THandler>,\n\tTRoute extends string,\n\tTMethod extends HttpMethod,\n\tTInput extends EndpointSchemas = {},\n\tTOutSchema extends StandardSchemaV1 | undefined = undefined,\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n\tTEventPublisher extends EventPublisher<any> | undefined = undefined,\n\tTEventPublisherServiceName extends string = string,\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\tprotected options: AmazonApiGatewayEndpointOptions;\n\n\tconstructor(\n\t\tprotected envParser: EnvironmentParser<{}>,\n\t\tprotected readonly endpoint: Endpoint<\n\t\t\tTRoute,\n\t\t\tTMethod,\n\t\t\tTInput,\n\t\t\tTOutSchema,\n\t\t\tTServices,\n\t\t\tTLogger,\n\t\t\tTSession,\n\t\t\tTEventPublisher,\n\t\t\tTEventPublisherServiceName,\n\t\t\tTAuditStorage,\n\t\t\tTAuditStorageServiceName,\n\t\t\tTAuditAction\n\t\t>,\n\t\toptions: AmazonApiGatewayEndpointOptions = {},\n\t) {\n\t\tthis.options = options;\n\t}\n\n\tprivate error(): Middleware<TEvent, TInput, TServices, TLogger> {\n\t\treturn {\n\t\t\tonError: (req) => {\n\t\t\t\t(req.event.logger || this.endpoint.logger).error(\n\t\t\t\t\treq.error || {},\n\t\t\t\t\t'Error processing request',\n\t\t\t\t);\n\t\t\t\tconst wrappedError = wrapError(req.error);\n\n\t\t\t\t// Set the response with the proper status code from the HttpError\n\t\t\t\treq.response = {\n\t\t\t\t\tstatusCode: wrappedError.statusCode,\n\t\t\t\t\tbody: wrappedError.body,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t}\n\tabstract getInput(e: TEvent): GetInputResponse;\n\n\t/**\n\t * Decodes the raw body from an API Gateway event.\n\t * Uses Content-Type to decide parsing strategy (like Express/Fastify/Hono):\n\t * - `application/json` (or missing) → JSON.parse the decoded string\n\t * - Anything else → return decoded string as-is, let the schema handle it\n\t *\n\t * Defaults to JSON when no Content-Type is provided for backwards compatibility.\n\t */\n\tstatic decodeBody(\n\t\tbody: string | undefined | null,\n\t\tisBase64Encoded: boolean | undefined,\n\t\tcontentType: string | undefined,\n\t): any {\n\t\tif (!body) return undefined;\n\n\t\tconst raw = isBase64Encoded\n\t\t\t? Buffer.from(body, 'base64').toString('utf-8')\n\t\t\t: body;\n\n\t\tconst isJson =\n\t\t\t!contentType || contentType.toLowerCase().includes('application/json');\n\t\tif (isJson) {\n\t\t\treturn JSON.parse(raw);\n\t\t}\n\n\t\treturn raw;\n\t}\n\n\tprotected getCookies(e: TEvent): CookieFn {\n\t\tconst headers = e.headers as Record<string, string>;\n\t\treturn Endpoint.createCookies(headers?.cookie);\n\t}\n\n\tprivate input(): Middleware<TEvent, TInput, TServices, TLogger> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { body, query, params } = this.getInput(req.event);\n\t\t\t\t\tconst headers = req.event.headers as Record<string, string>;\n\t\t\t\t\tconst header = Endpoint.createHeaders(headers);\n\t\t\t\t\tconst cookie = this.getCookies(req.event);\n\n\t\t\t\t\tset(req.event, 'body', await this.endpoint.parseInput(body, 'body'));\n\n\t\t\t\t\tset(\n\t\t\t\t\t\treq.event,\n\t\t\t\t\t\t'query',\n\t\t\t\t\t\tawait this.endpoint.parseInput(query, 'query'),\n\t\t\t\t\t);\n\t\t\t\t\tset(\n\t\t\t\t\t\treq.event,\n\t\t\t\t\t\t'params',\n\t\t\t\t\t\tawait this.endpoint.parseInput(params, 'params'),\n\t\t\t\t\t);\n\t\t\t\t\tset(req.event, 'header', header);\n\t\t\t\t\tset(req.event, 'cookie', cookie);\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// Convert validation errors to 422 Unprocessable Entity\n\t\t\t\t\tif (error && typeof error === 'object' && Array.isArray(error)) {\n\t\t\t\t\t\tthrow new UnprocessableEntityError('Validation failed', error);\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tabstract getLoggerContext(data: TEvent, context: Context): LoggerContext;\n\n\tprivate logger(): Middleware<TEvent, TInput, TServices, TLogger> {\n\t\treturn {\n\t\t\tbefore: (req) => {\n\t\t\t\treq.event.logger = this.endpoint.logger.child({\n\t\t\t\t\troute: this.endpoint.route,\n\t\t\t\t\thost: req.event.headers?.host,\n\t\t\t\t\tmethod: this.endpoint.method,\n\t\t\t\t\t...this.getLoggerContext(req.event, req.context),\n\t\t\t\t}) as TLogger;\n\t\t\t},\n\t\t};\n\t}\n\tprivate services(): Middleware<TEvent, TInput, TServices, TLogger> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\tconst _logger = req.event.logger as TLogger;\n\t\t\t\tconst serviceDiscovery = ServiceDiscovery.getInstance<\n\t\t\t\t\tServiceRecord<TServices>\n\t\t\t\t>(this.envParser);\n\n\t\t\t\tconst services = await serviceDiscovery.register(\n\t\t\t\t\tthis.endpoint.services,\n\t\t\t\t);\n\n\t\t\t\treq.event.services = services;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate authorize(): Middleware<TEvent, TInput, TServices, TLogger> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\tconst logger = req.event.logger as TLogger;\n\t\t\t\tconst services = req.event.services;\n\t\t\t\tconst header = req.event.header;\n\t\t\t\tconst cookie = req.event.cookie;\n\t\t\t\tconst session = req.event.session as TSession;\n\n\t\t\t\tconst isAuthorized = await this.endpoint.authorize({\n\t\t\t\t\theader,\n\t\t\t\t\tcookie,\n\t\t\t\t\tservices,\n\t\t\t\t\tlogger,\n\t\t\t\t\tsession,\n\t\t\t\t\t...((req.event as any).db !== undefined && {\n\t\t\t\t\t\tdb: (req.event as any).db,\n\t\t\t\t\t}),\n\t\t\t\t\tbody: (req.event as any).body,\n\t\t\t\t\tquery: (req.event as any).query,\n\t\t\t\t\tparams: (req.event as any).params,\n\t\t\t\t} as any);\n\n\t\t\t\tif (!isAuthorized) {\n\t\t\t\t\tlogger.warn('Unauthorized access attempt');\n\t\t\t\t\tthrow new UnauthorizedError(\n\t\t\t\t\t\t'Unauthorized access to the endpoint',\n\t\t\t\t\t\t'You do not have permission to access this resource.',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate database(): Middleware<TEvent, TInput, TServices, TLogger> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\tif (!this.endpoint.databaseService) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst _logger = req.event.logger as TLogger;\n\t\t\t\tconst serviceDiscovery = ServiceDiscovery.getInstance<\n\t\t\t\t\tServiceRecord<TServices>\n\t\t\t\t>(this.envParser);\n\n\t\t\t\tconst db = await serviceDiscovery\n\t\t\t\t\t.register([this.endpoint.databaseService])\n\t\t\t\t\t.then(\n\t\t\t\t\t\t(s) =>\n\t\t\t\t\t\t\ts[this.endpoint.databaseService?.serviceName as keyof typeof s],\n\t\t\t\t\t);\n\n\t\t\t\t(req.event as any).db = db;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate session(): Middleware<TEvent, TInput, TServices, TLogger> {\n\t\treturn {\n\t\t\tbefore: async (req) => {\n\t\t\t\tconst logger = req.event.logger as TLogger;\n\t\t\t\tconst services = req.event.services;\n\t\t\t\tconst db = (req.event as any).db;\n\t\t\t\treq.event.session = (await this.endpoint.getSession({\n\t\t\t\t\tlogger,\n\t\t\t\t\tservices,\n\t\t\t\t\theader: req.event.header,\n\t\t\t\t\tcookie: req.event.cookie,\n\t\t\t\t\t...(db !== undefined && { db }),\n\t\t\t\t} as any)) as TSession;\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate events(): Middleware<TEvent, TInput, TServices, TLogger> {\n\t\treturn {\n\t\t\tafter: async (req) => {\n\t\t\t\tconst event = req.event;\n\t\t\t\tconst response = (event as any)\n\t\t\t\t\t.__response as InferStandardSchema<TOutSchema>;\n\t\t\t\tconst statusCode = req.response?.statusCode ?? this.endpoint.status;\n\n\t\t\t\t// Only publish events on successful responses (2xx status codes)\n\t\t\t\t// Note: Audits are processed inside the handler's transaction\n\t\t\t\tif (Endpoint.isSuccessStatus(statusCode)) {\n\t\t\t\t\tconst logger = event.logger as TLogger;\n\t\t\t\t\tconst serviceDiscovery = ServiceDiscovery.getInstance<\n\t\t\t\t\t\tServiceRecord<TServices>\n\t\t\t\t\t>(this.envParser);\n\n\t\t\t\t\t// Publish events\n\t\t\t\t\tawait publishConstructEvents(\n\t\t\t\t\t\tthis.endpoint,\n\t\t\t\t\t\tresponse,\n\t\t\t\t\t\tserviceDiscovery,\n\t\t\t\t\t\tlogger,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async _handler(\n\t\tevent: Event<TEvent, TInput, TServices, TLogger, TSession>,\n\t) {\n\t\tconst input = this.endpoint.refineInput(event);\n\t\tconst logger = event.logger as TLogger;\n\t\tconst serviceDiscovery = ServiceDiscovery.getInstance<\n\t\t\tServiceRecord<TServices>\n\t\t>(this.envParser);\n\n\t\t// Create audit context if audit storage is configured\n\t\tconst auditContext = await createAuditContext(\n\t\t\tthis.endpoint,\n\t\t\tserviceDiscovery,\n\t\t\tlogger,\n\t\t\t{\n\t\t\t\tsession: event.session,\n\t\t\t\theader: event.header,\n\t\t\t\tcookie: event.cookie,\n\t\t\t\tservices: event.services as Record<string, unknown>,\n\t\t\t},\n\t\t);\n\n\t\t// Warn if declarative audits are configured but no audit storage\n\t\tconst audits = this.endpoint.audits as MappedAudit<\n\t\t\tTAuditAction,\n\t\t\tTOutSchema\n\t\t>[];\n\t\tif (!auditContext && audits?.length) {\n\t\t\tlogger.warn('No auditor storage service available');\n\t\t}\n\n\t\t// Get pre-resolved database from middleware\n\t\tconst rawDb = (event as any).db;\n\n\t\t// Extract RLS context if configured and not bypassed\n\t\tconst rlsActive =\n\t\t\tthis.endpoint.rlsConfig &&\n\t\t\t!this.endpoint.rlsBypass &&\n\t\t\trawDb !== undefined;\n\t\tconst rlsContext = rlsActive\n\t\t\t? await this.endpoint.rlsConfig?.extractor({\n\t\t\t\t\tservices: event.services as ServiceRecord<TServices>,\n\t\t\t\t\tsession: event.session,\n\t\t\t\t\theader: event.header,\n\t\t\t\t\tcookie: event.cookie,\n\t\t\t\t\tlogger,\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t\t// Execute handler with automatic audit transaction support\n\t\tconst result = await executeWithAuditTransaction(\n\t\t\tauditContext,\n\t\t\tasync (auditor) => {\n\t\t\t\t// Use audit transaction as db only if the storage uses the same database service\n\t\t\t\tconst sameDatabase =\n\t\t\t\t\tauditContext?.storage?.databaseServiceName &&\n\t\t\t\t\tauditContext.storage.databaseServiceName ===\n\t\t\t\t\t\tthis.endpoint.databaseService?.serviceName;\n\t\t\t\tconst baseDb = sameDatabase\n\t\t\t\t\t? (auditor?.getTransaction?.() ?? rawDb)\n\t\t\t\t\t: rawDb;\n\n\t\t\t\t// Helper to execute handler with given db\n\t\t\t\tconst executeHandler = async (db: any) => {\n\t\t\t\t\tconst responseBuilder = new ResponseBuilder();\n\t\t\t\t\tconst response = await this.endpoint.handler(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\theader: event.header,\n\t\t\t\t\t\t\tcookie: event.cookie,\n\t\t\t\t\t\t\tlogger: event.logger,\n\t\t\t\t\t\t\tservices: event.services,\n\t\t\t\t\t\t\tsession: event.session,\n\t\t\t\t\t\t\tauditor,\n\t\t\t\t\t\t\tdb,\n\t\t\t\t\t\t\t...input,\n\t\t\t\t\t\t} as any,\n\t\t\t\t\t\tresponseBuilder,\n\t\t\t\t\t);\n\n\t\t\t\t\t// Check if response has metadata\n\t\t\t\t\tlet data = response;\n\t\t\t\t\tlet metadata = responseBuilder.getMetadata();\n\n\t\t\t\t\tif (Endpoint.hasMetadata(response)) {\n\t\t\t\t\t\tdata = response.data;\n\t\t\t\t\t\tmetadata = response.metadata;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst output = this.endpoint.outputSchema\n\t\t\t\t\t\t? await this.endpoint.parseOutput(data)\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\treturn { output, metadata, responseBuilder };\n\t\t\t\t};\n\n\t\t\t\t// If RLS is active, wrap handler with RLS context\n\t\t\t\tif (rlsActive && rlsContext && baseDb) {\n\t\t\t\t\treturn withRlsContext(\n\t\t\t\t\t\tbaseDb,\n\t\t\t\t\t\trlsContext,\n\t\t\t\t\t\tasync (trx: any) => executeHandler(trx),\n\t\t\t\t\t\t{ prefix: this.endpoint.rlsConfig?.prefix },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn executeHandler(baseDb);\n\t\t\t},\n\t\t\t// Process declarative audits after handler (inside transaction)\n\t\t\tasync (result, auditor) => {\n\t\t\t\tif (!audits?.length) return;\n\n\t\t\t\tfor (const audit of audits) {\n\t\t\t\t\tif (audit.when && !audit.when(result.output as any)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst payload = audit.payload(result.output as any);\n\t\t\t\t\tconst entityId = audit.entityId?.(result.output as any);\n\t\t\t\t\tauditor.audit(audit.type as any, payload as any, {\n\t\t\t\t\t\ttable: audit.table,\n\t\t\t\t\t\tentityId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Pass rawDb so storage can reuse existing transactions\n\t\t\t{ db: rawDb },\n\t\t);\n\n\t\tconst { output, metadata } = result;\n\t\tconst body = output !== undefined ? JSON.stringify(output) : undefined;\n\n\t\t// Store response for middleware access\n\t\t(event as any).__response = output;\n\n\t\t// Build response with metadata\n\t\tconst lambdaResponse: AmazonApiGatewayEndpointHandlerResponse = {\n\t\t\tstatusCode: metadata.status ?? this.endpoint.status,\n\t\t\tbody,\n\t\t};\n\n\t\t// Add custom headers\n\t\tif (metadata.headers && Object.keys(metadata.headers).length > 0) {\n\t\t\tlambdaResponse.headers = { ...metadata.headers };\n\t\t}\n\n\t\t// Format cookies as Set-Cookie headers\n\t\tif (metadata.cookies && metadata.cookies.size > 0) {\n\t\t\tconst setCookieHeaders: string[] = [];\n\t\t\tfor (const [name, { value, options }] of metadata.cookies) {\n\t\t\t\tsetCookieHeaders.push(\n\t\t\t\t\tEndpoint.formatCookieHeader(name, value, options),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (setCookieHeaders.length > 0) {\n\t\t\t\tlambdaResponse.multiValueHeaders = {\n\t\t\t\t\t...lambdaResponse.multiValueHeaders,\n\t\t\t\t\t'Set-Cookie': setCookieHeaders,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn lambdaResponse;\n\t}\n\n\t/**\n\t * Convert Telemetry interface to Middy middleware\n\t */\n\tprivate telemetry(): Middleware<TEvent, TInput, TServices, TLogger> | null {\n\t\tif (!this.options.telemetry) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst telemetry = this.options.telemetry;\n\t\tlet ctx: any;\n\n\t\treturn {\n\t\t\tbefore: (request) => {\n\t\t\t\tctx = telemetry.onRequestStart({\n\t\t\t\t\tevent: request.event,\n\t\t\t\t\tcontext: request.context,\n\t\t\t\t});\n\t\t\t},\n\t\t\tafter: (request) => {\n\t\t\t\tif (ctx) {\n\t\t\t\t\ttelemetry.onRequestEnd(ctx, {\n\t\t\t\t\t\tstatusCode: request.response?.statusCode ?? 200,\n\t\t\t\t\t\tbody: request.response?.body,\n\t\t\t\t\t\theaders: request.response?.headers,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (request) => {\n\t\t\t\tif (ctx && request.error) {\n\t\t\t\t\ttelemetry.onRequestError(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\trequest.error instanceof Error\n\t\t\t\t\t\t\t? request.error\n\t\t\t\t\t\t\t: new Error(String(request.error)),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tget handler() {\n\t\tconst handler = this._handler.bind(this);\n\t\tlet chain = middy(handler)\n\t\t\t.use(this.logger())\n\t\t\t.use(this.error())\n\t\t\t.use(this.services())\n\t\t\t.use(this.input())\n\t\t\t.use(this.database())\n\t\t\t.use(this.session())\n\t\t\t.use(this.authorize())\n\t\t\t.use(this.events());\n\n\t\t// Add telemetry middleware if configured (runs early for span creation)\n\t\tconst telemetryMiddleware = this.telemetry();\n\t\tif (telemetryMiddleware) {\n\t\t\tchain = chain.use(telemetryMiddleware);\n\t\t}\n\n\t\t// Add Telescope middleware if configured (runs first/last in chain)\n\t\tif (this.options.telescope?.middleware) {\n\t\t\tchain = chain.use(this.options.telescope.middleware);\n\t\t}\n\n\t\t// Wrap entire Middy chain in request context for service access\n\t\tconst wrappedHandler = async (event: TEvent, context: Context) => {\n\t\t\tconst startTime = Date.now();\n\t\t\tconst requestId = context.awsRequestId;\n\t\t\tconst logger = this.endpoint.logger.child({ requestId }) as TLogger;\n\n\t\t\t// Cast event to any since Middy middlewares enrich the event with\n\t\t\t// services, logger, session, etc. during the middleware chain execution\n\t\t\treturn runWithRequestContext({ logger, requestId, startTime }, () =>\n\t\t\t\tchain(event as unknown as Parameters<typeof chain>[0], context),\n\t\t\t);\n\t\t};\n\n\t\treturn wrappedHandler as unknown as THandler;\n\t}\n}\n\nexport type Event<\n\tTEvent extends APIGatewayProxyEvent | APIGatewayProxyEventV2,\n\tTInput extends EndpointSchemas = {},\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n> = {\n\tservices: ServiceRecord<TServices>;\n\tlogger: TLogger;\n\theader: HeaderFn;\n\tcookie: CookieFn;\n\tsession: TSession;\n} & TEvent &\n\tInferComposableStandardSchema<TInput>;\n\ntype Middleware<\n\tTEvent extends APIGatewayProxyEvent | APIGatewayProxyEventV2,\n\tTInput extends EndpointSchemas = {},\n\tTServices extends Service[] = [],\n\tTLogger extends Logger = Logger,\n\tTSession = unknown,\n> = MiddlewareObj<Event<TEvent, TInput, TServices, TLogger, TSession>>;\n\nexport type AmazonApiGatewayEndpointHandlerResponse = {\n\tstatusCode: number;\n\tbody: string | undefined;\n\theaders?: Record<string, string>;\n\tmultiValueHeaders?: Record<string, string[]>;\n};\n\nexport type LoggerContext = {\n\tfn: {\n\t\tname: string;\n\t\tversion: string;\n\t};\n\treq: {\n\t\tid: string | undefined;\n\t\tawsRequestId: string;\n\t\tpath: string;\n\t\tip: string | undefined;\n\t\tuserAgent: string | undefined;\n\t};\n};\n\nexport type GetInputResponse = {\n\tbody: any;\n\tquery: any;\n\tparams: any;\n};\n\nexport type AmazonApiGatewayV1EndpointHandler = (\n\tevent: APIGatewayProxyEvent,\n\tcontext: Context,\n) => Promise<AmazonApiGatewayEndpointHandlerResponse>;\n\nexport type AmazonApiGatewayV2EndpointHandler = (\n\tevent: APIGatewayProxyEventV2,\n\tcontext: Context,\n) => Promise<AmazonApiGatewayEndpointHandlerResponse>;\n\nexport type HandlerEvent<T extends Function> = T extends (\n\tevent: infer E,\n\tcontext: Context,\n) => any\n\t? E\n\t: never;\n"],"mappings":"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"}
@@ -1,271 +0,0 @@
1
- import { publishConstructEvents } from "./publisher-Bw4770Hi.mjs";
2
- import { Endpoint, ResponseBuilder } from "./Endpoint-DvY3aqAy.mjs";
3
- import { createAuditContext, executeWithAuditTransaction } from "./processAudits-Dj8UGqcW.mjs";
4
- import { withRlsContext } from "@geekmidas/db/rls";
5
- import middy from "@middy/core";
6
- import set from "lodash.set";
7
- import { UnauthorizedError, UnprocessableEntityError, wrapError } from "@geekmidas/errors";
8
- import { ServiceDiscovery, runWithRequestContext } from "@geekmidas/services";
9
-
10
- //#region src/endpoints/AmazonApiGatewayEndpointAdaptor.ts
11
- var AmazonApiGatewayEndpoint = class {
12
- options;
13
- constructor(envParser, endpoint, options = {}) {
14
- this.envParser = envParser;
15
- this.endpoint = endpoint;
16
- this.options = options;
17
- }
18
- error() {
19
- return { onError: (req) => {
20
- (req.event.logger || this.endpoint.logger).error(req.error || {}, "Error processing request");
21
- const wrappedError = wrapError(req.error);
22
- req.response = {
23
- statusCode: wrappedError.statusCode,
24
- body: wrappedError.body
25
- };
26
- } };
27
- }
28
- /**
29
- * Decodes the raw body from an API Gateway event.
30
- * Uses Content-Type to decide parsing strategy (like Express/Fastify/Hono):
31
- * - `application/json` (or missing) → JSON.parse the decoded string
32
- * - Anything else → return decoded string as-is, let the schema handle it
33
- *
34
- * Defaults to JSON when no Content-Type is provided for backwards compatibility.
35
- */
36
- static decodeBody(body, isBase64Encoded, contentType) {
37
- if (!body) return void 0;
38
- const raw = isBase64Encoded ? Buffer.from(body, "base64").toString("utf-8") : body;
39
- const isJson = !contentType || contentType.toLowerCase().includes("application/json");
40
- if (isJson) return JSON.parse(raw);
41
- return raw;
42
- }
43
- getCookies(e) {
44
- const headers = e.headers;
45
- return Endpoint.createCookies(headers?.cookie);
46
- }
47
- input() {
48
- return { before: async (req) => {
49
- try {
50
- const { body, query, params } = this.getInput(req.event);
51
- const headers = req.event.headers;
52
- const header = Endpoint.createHeaders(headers);
53
- const cookie = this.getCookies(req.event);
54
- set(req.event, "body", await this.endpoint.parseInput(body, "body"));
55
- set(req.event, "query", await this.endpoint.parseInput(query, "query"));
56
- set(req.event, "params", await this.endpoint.parseInput(params, "params"));
57
- set(req.event, "header", header);
58
- set(req.event, "cookie", cookie);
59
- } catch (error) {
60
- if (error && typeof error === "object" && Array.isArray(error)) throw new UnprocessableEntityError("Validation failed", error);
61
- throw error;
62
- }
63
- } };
64
- }
65
- logger() {
66
- return { before: (req) => {
67
- req.event.logger = this.endpoint.logger.child({
68
- route: this.endpoint.route,
69
- host: req.event.headers?.host,
70
- method: this.endpoint.method,
71
- ...this.getLoggerContext(req.event, req.context)
72
- });
73
- } };
74
- }
75
- services() {
76
- return { before: async (req) => {
77
- const _logger = req.event.logger;
78
- const serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);
79
- const services = await serviceDiscovery.register(this.endpoint.services);
80
- req.event.services = services;
81
- } };
82
- }
83
- authorize() {
84
- return { before: async (req) => {
85
- const logger = req.event.logger;
86
- const services = req.event.services;
87
- const header = req.event.header;
88
- const cookie = req.event.cookie;
89
- const session = req.event.session;
90
- const isAuthorized = await this.endpoint.authorize({
91
- header,
92
- cookie,
93
- services,
94
- logger,
95
- session,
96
- ...req.event.db !== void 0 && { db: req.event.db },
97
- body: req.event.body,
98
- query: req.event.query,
99
- params: req.event.params
100
- });
101
- if (!isAuthorized) {
102
- logger.warn("Unauthorized access attempt");
103
- throw new UnauthorizedError("Unauthorized access to the endpoint", "You do not have permission to access this resource.");
104
- }
105
- } };
106
- }
107
- database() {
108
- return { before: async (req) => {
109
- if (!this.endpoint.databaseService) return;
110
- const _logger = req.event.logger;
111
- const serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);
112
- const db = await serviceDiscovery.register([this.endpoint.databaseService]).then((s) => s[this.endpoint.databaseService?.serviceName]);
113
- req.event.db = db;
114
- } };
115
- }
116
- session() {
117
- return { before: async (req) => {
118
- const logger = req.event.logger;
119
- const services = req.event.services;
120
- const db = req.event.db;
121
- req.event.session = await this.endpoint.getSession({
122
- logger,
123
- services,
124
- header: req.event.header,
125
- cookie: req.event.cookie,
126
- ...db !== void 0 && { db }
127
- });
128
- } };
129
- }
130
- events() {
131
- return { after: async (req) => {
132
- const event = req.event;
133
- const response = event.__response;
134
- const statusCode = req.response?.statusCode ?? this.endpoint.status;
135
- if (Endpoint.isSuccessStatus(statusCode)) {
136
- const logger = event.logger;
137
- const serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);
138
- await publishConstructEvents(this.endpoint, response, serviceDiscovery, logger);
139
- }
140
- } };
141
- }
142
- async _handler(event) {
143
- const input = this.endpoint.refineInput(event);
144
- const logger = event.logger;
145
- const serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);
146
- const auditContext = await createAuditContext(this.endpoint, serviceDiscovery, logger, {
147
- session: event.session,
148
- header: event.header,
149
- cookie: event.cookie,
150
- services: event.services
151
- });
152
- const audits = this.endpoint.audits;
153
- if (!auditContext && audits?.length) logger.warn("No auditor storage service available");
154
- const rawDb = event.db;
155
- const rlsActive = this.endpoint.rlsConfig && !this.endpoint.rlsBypass && rawDb !== void 0;
156
- const rlsContext = rlsActive ? await this.endpoint.rlsConfig?.extractor({
157
- services: event.services,
158
- session: event.session,
159
- header: event.header,
160
- cookie: event.cookie,
161
- logger
162
- }) : void 0;
163
- const result = await executeWithAuditTransaction(auditContext, async (auditor) => {
164
- const sameDatabase = auditContext?.storage?.databaseServiceName && auditContext.storage.databaseServiceName === this.endpoint.databaseService?.serviceName;
165
- const baseDb = sameDatabase ? auditor?.getTransaction?.() ?? rawDb : rawDb;
166
- const executeHandler = async (db) => {
167
- const responseBuilder = new ResponseBuilder();
168
- const response = await this.endpoint.handler({
169
- header: event.header,
170
- cookie: event.cookie,
171
- logger: event.logger,
172
- services: event.services,
173
- session: event.session,
174
- auditor,
175
- db,
176
- ...input
177
- }, responseBuilder);
178
- let data = response;
179
- let metadata$1 = responseBuilder.getMetadata();
180
- if (Endpoint.hasMetadata(response)) {
181
- data = response.data;
182
- metadata$1 = response.metadata;
183
- }
184
- const output$1 = this.endpoint.outputSchema ? await this.endpoint.parseOutput(data) : void 0;
185
- return {
186
- output: output$1,
187
- metadata: metadata$1,
188
- responseBuilder
189
- };
190
- };
191
- if (rlsActive && rlsContext && baseDb) return withRlsContext(baseDb, rlsContext, async (trx) => executeHandler(trx), { prefix: this.endpoint.rlsConfig?.prefix });
192
- return executeHandler(baseDb);
193
- }, async (result$1, auditor) => {
194
- if (!audits?.length) return;
195
- for (const audit of audits) {
196
- if (audit.when && !audit.when(result$1.output)) continue;
197
- const payload = audit.payload(result$1.output);
198
- const entityId = audit.entityId?.(result$1.output);
199
- auditor.audit(audit.type, payload, {
200
- table: audit.table,
201
- entityId
202
- });
203
- }
204
- }, { db: rawDb });
205
- const { output, metadata } = result;
206
- const body = output !== void 0 ? JSON.stringify(output) : void 0;
207
- event.__response = output;
208
- const lambdaResponse = {
209
- statusCode: metadata.status ?? this.endpoint.status,
210
- body
211
- };
212
- if (metadata.headers && Object.keys(metadata.headers).length > 0) lambdaResponse.headers = { ...metadata.headers };
213
- if (metadata.cookies && metadata.cookies.size > 0) {
214
- const setCookieHeaders = [];
215
- for (const [name, { value, options }] of metadata.cookies) setCookieHeaders.push(Endpoint.formatCookieHeader(name, value, options));
216
- if (setCookieHeaders.length > 0) lambdaResponse.multiValueHeaders = {
217
- ...lambdaResponse.multiValueHeaders,
218
- "Set-Cookie": setCookieHeaders
219
- };
220
- }
221
- return lambdaResponse;
222
- }
223
- /**
224
- * Convert Telemetry interface to Middy middleware
225
- */
226
- telemetry() {
227
- if (!this.options.telemetry) return null;
228
- const telemetry = this.options.telemetry;
229
- let ctx;
230
- return {
231
- before: (request) => {
232
- ctx = telemetry.onRequestStart({
233
- event: request.event,
234
- context: request.context
235
- });
236
- },
237
- after: (request) => {
238
- if (ctx) telemetry.onRequestEnd(ctx, {
239
- statusCode: request.response?.statusCode ?? 200,
240
- body: request.response?.body,
241
- headers: request.response?.headers
242
- });
243
- },
244
- onError: (request) => {
245
- if (ctx && request.error) telemetry.onRequestError(ctx, request.error instanceof Error ? request.error : new Error(String(request.error)));
246
- }
247
- };
248
- }
249
- get handler() {
250
- const handler = this._handler.bind(this);
251
- 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());
252
- const telemetryMiddleware = this.telemetry();
253
- if (telemetryMiddleware) chain = chain.use(telemetryMiddleware);
254
- if (this.options.telescope?.middleware) chain = chain.use(this.options.telescope.middleware);
255
- const wrappedHandler = async (event, context) => {
256
- const startTime = Date.now();
257
- const requestId = context.awsRequestId;
258
- const logger = this.endpoint.logger.child({ requestId });
259
- return runWithRequestContext({
260
- logger,
261
- requestId,
262
- startTime
263
- }, () => chain(event, context));
264
- };
265
- return wrappedHandler;
266
- }
267
- };
268
-
269
- //#endregion
270
- export { AmazonApiGatewayEndpoint };
271
- //# sourceMappingURL=AmazonApiGatewayEndpointAdaptor-BpYtYCeW.mjs.map