@h4ad/serverless-adapter 3.2.0 → 4.0.1

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 (578) hide show
  1. package/lib/adapter.contract-EQE3rlgO.d.ts +278 -0
  2. package/lib/adapter.contract-y5xSjOjo.d.cts +278 -0
  3. package/lib/adapters/apollo-server/index.cjs +4 -0
  4. package/lib/adapters/apollo-server/index.cjs.map +1 -0
  5. package/lib/adapters/apollo-server/{apollo-server-mutation.adapter.d.ts → index.d.cts} +10 -5
  6. package/lib/adapters/apollo-server/index.d.ts +61 -2
  7. package/lib/adapters/apollo-server/index.mjs +2 -0
  8. package/lib/adapters/apollo-server/index.mjs.map +1 -0
  9. package/lib/adapters/aws/index.cjs +4 -0
  10. package/lib/adapters/aws/index.cjs.map +1 -0
  11. package/lib/adapters/aws/index.d.cts +910 -0
  12. package/lib/adapters/aws/index.d.ts +910 -12
  13. package/lib/adapters/aws/index.mjs +2 -0
  14. package/lib/adapters/aws/index.mjs.map +1 -0
  15. package/lib/adapters/azure/index.cjs +4 -0
  16. package/lib/adapters/azure/index.cjs.map +1 -0
  17. package/lib/adapters/azure/{http-trigger-v4.adapter.d.ts → index.d.cts} +11 -6
  18. package/lib/adapters/azure/index.d.ts +86 -2
  19. package/lib/adapters/azure/index.mjs +2 -0
  20. package/lib/adapters/azure/index.mjs.map +1 -0
  21. package/lib/adapters/digital-ocean/index.cjs +4 -0
  22. package/lib/adapters/digital-ocean/index.cjs.map +1 -0
  23. package/lib/adapters/digital-ocean/index.d.cts +126 -0
  24. package/lib/adapters/digital-ocean/index.d.ts +126 -2
  25. package/lib/adapters/digital-ocean/index.mjs +2 -0
  26. package/lib/adapters/digital-ocean/index.mjs.map +1 -0
  27. package/lib/adapters/dummy/index.cjs +4 -0
  28. package/lib/adapters/dummy/index.cjs.map +1 -0
  29. package/lib/adapters/dummy/{dummy.adapter.d.ts → index.d.cts} +10 -4
  30. package/lib/adapters/dummy/index.d.ts +37 -2
  31. package/lib/adapters/dummy/index.mjs +2 -0
  32. package/lib/adapters/dummy/index.mjs.map +1 -0
  33. package/lib/adapters/huawei/index.cjs +4 -0
  34. package/lib/adapters/huawei/index.cjs.map +1 -0
  35. package/lib/adapters/huawei/index.d.cts +365 -0
  36. package/lib/adapters/huawei/index.d.ts +365 -2
  37. package/lib/adapters/huawei/index.mjs +2 -0
  38. package/lib/adapters/huawei/index.mjs.map +1 -0
  39. package/lib/{core/base-handler.d.ts → base-handler-fYEk59Xq.d.ts} +9 -6
  40. package/lib/base-handler-peEBoKtZ.d.cts +35 -0
  41. package/lib/chunk-22SSVZU5.mjs +1 -0
  42. package/lib/chunk-22SSVZU5.mjs.map +1 -0
  43. package/lib/chunk-HU5XBQCP.mjs +10 -0
  44. package/lib/chunk-HU5XBQCP.mjs.map +1 -0
  45. package/lib/chunk-NSO4L3EI.mjs +2 -0
  46. package/lib/chunk-NSO4L3EI.mjs.map +1 -0
  47. package/lib/chunk-OYOJMOFP.mjs +2 -0
  48. package/lib/chunk-OYOJMOFP.mjs.map +1 -0
  49. package/lib/chunk-Y6H576RS.mjs +2 -0
  50. package/lib/chunk-Y6H576RS.mjs.map +1 -0
  51. package/lib/{core/constants.d.ts → constants-0cgQlFSV.d.cts} +6 -5
  52. package/lib/constants-0cgQlFSV.d.ts +32 -0
  53. package/lib/{contracts/framework.contract.d.ts → framework.contract-YnJ-fl1w.d.cts} +4 -3
  54. package/lib/framework.contract-YnJ-fl1w.d.ts +20 -0
  55. package/lib/frameworks/apollo-server/index.cjs +4 -0
  56. package/lib/frameworks/apollo-server/index.cjs.map +1 -0
  57. package/lib/frameworks/apollo-server/{apollo-server.framework.d.ts → index.d.cts} +12 -9
  58. package/lib/frameworks/apollo-server/index.d.ts +72 -2
  59. package/lib/frameworks/apollo-server/index.mjs +2 -0
  60. package/lib/frameworks/apollo-server/index.mjs.map +1 -0
  61. package/lib/frameworks/body-parser/index.cjs +4 -0
  62. package/lib/frameworks/body-parser/index.cjs.map +1 -0
  63. package/lib/frameworks/body-parser/index.d.cts +159 -0
  64. package/lib/frameworks/body-parser/index.d.ts +159 -6
  65. package/lib/frameworks/body-parser/index.mjs +2 -0
  66. package/lib/frameworks/body-parser/index.mjs.map +1 -0
  67. package/lib/frameworks/cors/index.cjs +5 -0
  68. package/lib/frameworks/cors/index.cjs.map +1 -0
  69. package/lib/frameworks/cors/{cors.framework.d.ts → index.d.cts} +6 -5
  70. package/lib/frameworks/cors/index.d.ts +79 -2
  71. package/lib/frameworks/cors/index.mjs +3 -0
  72. package/lib/frameworks/cors/index.mjs.map +1 -0
  73. package/lib/frameworks/deepkit/index.cjs +4 -0
  74. package/lib/frameworks/deepkit/index.cjs.map +1 -0
  75. package/lib/frameworks/deepkit/{http-deepkit.framework.d.ts → index.d.cts} +8 -5
  76. package/lib/frameworks/deepkit/index.d.ts +21 -2
  77. package/lib/frameworks/deepkit/index.mjs +2 -0
  78. package/lib/frameworks/deepkit/index.mjs.map +1 -0
  79. package/lib/frameworks/express/index.cjs +2 -0
  80. package/lib/frameworks/express/index.cjs.map +1 -0
  81. package/lib/frameworks/express/{express.framework.d.ts → index.d.cts} +6 -5
  82. package/lib/frameworks/express/index.d.ts +18 -2
  83. package/lib/frameworks/express/index.mjs +2 -0
  84. package/lib/frameworks/express/index.mjs.map +1 -0
  85. package/lib/frameworks/fastify/index.cjs +2 -0
  86. package/lib/frameworks/fastify/index.cjs.map +1 -0
  87. package/lib/frameworks/fastify/{fastify.framework.d.ts → index.d.cts} +6 -5
  88. package/lib/frameworks/fastify/index.d.ts +18 -2
  89. package/lib/frameworks/fastify/index.mjs +2 -0
  90. package/lib/frameworks/fastify/index.mjs.map +1 -0
  91. package/lib/frameworks/hapi/index.cjs +2 -0
  92. package/lib/frameworks/hapi/index.cjs.map +1 -0
  93. package/lib/frameworks/hapi/{hapi.framework.d.ts → index.d.cts} +6 -5
  94. package/lib/frameworks/hapi/index.d.ts +18 -2
  95. package/lib/frameworks/hapi/index.mjs +2 -0
  96. package/lib/frameworks/hapi/index.mjs.map +1 -0
  97. package/lib/frameworks/koa/index.cjs +2 -0
  98. package/lib/frameworks/koa/index.cjs.map +1 -0
  99. package/lib/frameworks/koa/{koa.framework.d.ts → index.d.cts} +6 -5
  100. package/lib/frameworks/koa/index.d.ts +18 -2
  101. package/lib/frameworks/koa/index.mjs +2 -0
  102. package/lib/frameworks/koa/index.mjs.map +1 -0
  103. package/lib/frameworks/lazy/index.cjs +4 -0
  104. package/lib/frameworks/lazy/index.cjs.map +1 -0
  105. package/lib/frameworks/lazy/{lazy.framework.d.ts → index.d.cts} +7 -6
  106. package/lib/frameworks/lazy/index.d.ts +57 -2
  107. package/lib/frameworks/lazy/index.mjs +2 -0
  108. package/lib/frameworks/lazy/index.mjs.map +1 -0
  109. package/lib/frameworks/trpc/index.cjs +4 -0
  110. package/lib/frameworks/trpc/index.cjs.map +1 -0
  111. package/lib/frameworks/trpc/{trpc.framework.d.ts → index.d.cts} +12 -11
  112. package/lib/frameworks/trpc/index.d.ts +154 -2
  113. package/lib/frameworks/trpc/index.mjs +2 -0
  114. package/lib/frameworks/trpc/index.mjs.map +1 -0
  115. package/lib/handler.contract-8Cb7qLSi.d.ts +66 -0
  116. package/lib/handler.contract-TQk8iM8f.d.cts +66 -0
  117. package/lib/handlers/aws/index.cjs +10 -0
  118. package/lib/handlers/aws/index.cjs.map +1 -0
  119. package/lib/handlers/aws/{aws-stream.handler.d.ts → index.d.cts} +22 -15
  120. package/lib/handlers/aws/index.d.ts +96 -2
  121. package/lib/handlers/aws/index.mjs +2 -0
  122. package/lib/handlers/aws/index.mjs.map +1 -0
  123. package/lib/handlers/azure/index.cjs +4 -0
  124. package/lib/handlers/azure/index.cjs.map +1 -0
  125. package/lib/handlers/azure/{azure.handler.d.ts → index.d.cts} +16 -8
  126. package/lib/handlers/azure/index.d.ts +53 -2
  127. package/lib/handlers/azure/index.mjs +2 -0
  128. package/lib/handlers/azure/index.mjs.map +1 -0
  129. package/lib/handlers/default/index.cjs +4 -0
  130. package/lib/handlers/default/index.cjs.map +1 -0
  131. package/lib/handlers/default/{default.handler.d.ts → index.d.cts} +13 -6
  132. package/lib/handlers/default/index.d.ts +95 -2
  133. package/lib/handlers/default/index.mjs +2 -0
  134. package/lib/handlers/default/index.mjs.map +1 -0
  135. package/lib/handlers/digital-ocean/index.cjs +4 -0
  136. package/lib/handlers/digital-ocean/index.cjs.map +1 -0
  137. package/lib/handlers/digital-ocean/index.d.cts +25 -0
  138. package/lib/handlers/digital-ocean/index.d.ts +25 -2
  139. package/lib/handlers/digital-ocean/index.mjs +2 -0
  140. package/lib/handlers/digital-ocean/index.mjs.map +1 -0
  141. package/lib/handlers/firebase/index.cjs +4 -0
  142. package/lib/handlers/firebase/index.cjs.map +1 -0
  143. package/lib/handlers/firebase/index.d.cts +59 -0
  144. package/lib/handlers/firebase/index.d.ts +59 -3
  145. package/lib/handlers/firebase/index.mjs +2 -0
  146. package/lib/handlers/firebase/index.mjs.map +1 -0
  147. package/lib/handlers/gcp/index.cjs +4 -0
  148. package/lib/handlers/gcp/index.cjs.map +1 -0
  149. package/lib/handlers/gcp/{gcp.handler.d.ts → index.d.cts} +12 -5
  150. package/lib/handlers/gcp/index.d.ts +33 -2
  151. package/lib/handlers/gcp/index.mjs +2 -0
  152. package/lib/handlers/gcp/index.mjs.map +1 -0
  153. package/lib/handlers/huawei/index.cjs +4 -0
  154. package/lib/handlers/huawei/index.cjs.map +1 -0
  155. package/lib/handlers/huawei/{http-huawei.handler.d.ts → index.d.cts} +15 -12
  156. package/lib/handlers/huawei/index.d.ts +62 -2
  157. package/lib/handlers/huawei/index.mjs +2 -0
  158. package/lib/handlers/huawei/index.mjs.map +1 -0
  159. package/lib/{@types/headers.d.ts → headers-K2qbcurv.d.cts} +5 -4
  160. package/lib/headers-K2qbcurv.d.ts +38 -0
  161. package/lib/index.cjs +10 -0
  162. package/lib/index.cjs.map +1 -0
  163. package/lib/index.d.cts +439 -0
  164. package/lib/index.d.ts +439 -6
  165. package/lib/index.mjs +2 -0
  166. package/lib/index.mjs.map +1 -0
  167. package/lib/{core/logger.d.ts → logger-9me5n48P.d.cts} +8 -7
  168. package/lib/logger-9me5n48P.d.ts +65 -0
  169. package/lib/{core/path.d.ts → path-yBwCb8C1.d.cts} +16 -5
  170. package/lib/path-yBwCb8C1.d.ts +64 -0
  171. package/lib/{handlers/base/raw-request.d.ts → raw-request-B2vPjAfE.d.cts} +6 -5
  172. package/lib/raw-request-b6AYnkxd.d.ts +32 -0
  173. package/lib/{network/request.d.ts → request-DNNIV9ub.d.cts} +7 -7
  174. package/lib/request-sVa4pxmx.d.ts +44 -0
  175. package/lib/resolvers/aws-context/index.cjs +2 -0
  176. package/lib/resolvers/aws-context/index.cjs.map +1 -0
  177. package/lib/resolvers/aws-context/{aws-context.resolver.d.ts → index.d.cts} +10 -4
  178. package/lib/resolvers/aws-context/index.d.ts +25 -2
  179. package/lib/resolvers/aws-context/index.mjs +2 -0
  180. package/lib/resolvers/aws-context/index.mjs.map +1 -0
  181. package/lib/resolvers/callback/index.cjs +2 -0
  182. package/lib/resolvers/callback/index.cjs.map +1 -0
  183. package/lib/resolvers/callback/{callback.resolver.d.ts → index.d.cts} +10 -4
  184. package/lib/resolvers/callback/index.d.ts +29 -2
  185. package/lib/resolvers/callback/index.mjs +2 -0
  186. package/lib/resolvers/callback/index.mjs.map +1 -0
  187. package/lib/resolvers/dummy/index.cjs +2 -0
  188. package/lib/resolvers/dummy/index.cjs.map +1 -0
  189. package/lib/resolvers/dummy/index.d.cts +20 -0
  190. package/lib/resolvers/dummy/index.d.ts +20 -2
  191. package/lib/resolvers/dummy/index.mjs +2 -0
  192. package/lib/resolvers/dummy/index.mjs.map +1 -0
  193. package/lib/resolvers/promise/index.cjs +2 -0
  194. package/lib/resolvers/promise/index.cjs.map +1 -0
  195. package/lib/resolvers/promise/index.d.cts +20 -0
  196. package/lib/resolvers/promise/index.d.ts +20 -2
  197. package/lib/resolvers/promise/index.mjs +2 -0
  198. package/lib/resolvers/promise/index.mjs.map +1 -0
  199. package/package.json +565 -7
  200. package/lib/@types/binary-settings.d.ts +0 -41
  201. package/lib/@types/binary-settings.d.ts.map +0 -1
  202. package/lib/@types/binary-settings.js +0 -2
  203. package/lib/@types/binary-settings.js.map +0 -1
  204. package/lib/@types/digital-ocean/digital-ocean-http-event.d.ts +0 -37
  205. package/lib/@types/digital-ocean/digital-ocean-http-event.d.ts.map +0 -1
  206. package/lib/@types/digital-ocean/digital-ocean-http-event.js +0 -2
  207. package/lib/@types/digital-ocean/digital-ocean-http-event.js.map +0 -1
  208. package/lib/@types/digital-ocean/digital-ocean-http-response.d.ts +0 -22
  209. package/lib/@types/digital-ocean/digital-ocean-http-response.d.ts.map +0 -1
  210. package/lib/@types/digital-ocean/digital-ocean-http-response.js +0 -2
  211. package/lib/@types/digital-ocean/digital-ocean-http-response.js.map +0 -1
  212. package/lib/@types/digital-ocean/index.d.ts +0 -2
  213. package/lib/@types/digital-ocean/index.d.ts.map +0 -1
  214. package/lib/@types/digital-ocean/index.js +0 -2
  215. package/lib/@types/digital-ocean/index.js.map +0 -1
  216. package/lib/@types/headers.d.ts.map +0 -1
  217. package/lib/@types/headers.js +0 -2
  218. package/lib/@types/headers.js.map +0 -1
  219. package/lib/@types/helpers.d.ts +0 -10
  220. package/lib/@types/helpers.d.ts.map +0 -1
  221. package/lib/@types/helpers.js +0 -2
  222. package/lib/@types/helpers.js.map +0 -1
  223. package/lib/@types/huawei/huawei-api-gateway-event.d.ts +0 -81
  224. package/lib/@types/huawei/huawei-api-gateway-event.d.ts.map +0 -1
  225. package/lib/@types/huawei/huawei-api-gateway-event.js +0 -2
  226. package/lib/@types/huawei/huawei-api-gateway-event.js.map +0 -1
  227. package/lib/@types/huawei/huawei-api-gateway-response.d.ts +0 -27
  228. package/lib/@types/huawei/huawei-api-gateway-response.d.ts.map +0 -1
  229. package/lib/@types/huawei/huawei-api-gateway-response.js +0 -2
  230. package/lib/@types/huawei/huawei-api-gateway-response.js.map +0 -1
  231. package/lib/@types/huawei/huawei-context.d.ts +0 -188
  232. package/lib/@types/huawei/huawei-context.d.ts.map +0 -1
  233. package/lib/@types/huawei/huawei-context.js +0 -2
  234. package/lib/@types/huawei/huawei-context.js.map +0 -1
  235. package/lib/@types/huawei/index.d.ts +0 -4
  236. package/lib/@types/huawei/index.d.ts.map +0 -1
  237. package/lib/@types/huawei/index.js +0 -2
  238. package/lib/@types/huawei/index.js.map +0 -1
  239. package/lib/@types/index.d.ts +0 -4
  240. package/lib/@types/index.d.ts.map +0 -1
  241. package/lib/@types/index.js +0 -2
  242. package/lib/@types/index.js.map +0 -1
  243. package/lib/adapters/apollo-server/apollo-server-mutation.adapter.d.ts.map +0 -1
  244. package/lib/adapters/apollo-server/apollo-server-mutation.adapter.js +0 -2
  245. package/lib/adapters/apollo-server/apollo-server-mutation.adapter.js.map +0 -1
  246. package/lib/adapters/apollo-server/index.d.ts.map +0 -1
  247. package/lib/adapters/apollo-server/index.js +0 -2
  248. package/lib/adapters/apollo-server/index.js.map +0 -1
  249. package/lib/adapters/aws/alb.adapter.d.ts +0 -71
  250. package/lib/adapters/aws/alb.adapter.d.ts.map +0 -1
  251. package/lib/adapters/aws/alb.adapter.js +0 -2
  252. package/lib/adapters/aws/alb.adapter.js.map +0 -1
  253. package/lib/adapters/aws/api-gateway-v1.adapter.d.ts +0 -76
  254. package/lib/adapters/aws/api-gateway-v1.adapter.d.ts.map +0 -1
  255. package/lib/adapters/aws/api-gateway-v1.adapter.js +0 -2
  256. package/lib/adapters/aws/api-gateway-v1.adapter.js.map +0 -1
  257. package/lib/adapters/aws/api-gateway-v2.adapter.d.ts +0 -75
  258. package/lib/adapters/aws/api-gateway-v2.adapter.d.ts.map +0 -1
  259. package/lib/adapters/aws/api-gateway-v2.adapter.js +0 -2
  260. package/lib/adapters/aws/api-gateway-v2.adapter.js.map +0 -1
  261. package/lib/adapters/aws/base/aws-simple-adapter.d.ts +0 -83
  262. package/lib/adapters/aws/base/aws-simple-adapter.d.ts.map +0 -1
  263. package/lib/adapters/aws/base/aws-simple-adapter.js +0 -2
  264. package/lib/adapters/aws/base/aws-simple-adapter.js.map +0 -1
  265. package/lib/adapters/aws/base/index.d.ts +0 -2
  266. package/lib/adapters/aws/base/index.d.ts.map +0 -1
  267. package/lib/adapters/aws/base/index.js +0 -2
  268. package/lib/adapters/aws/base/index.js.map +0 -1
  269. package/lib/adapters/aws/dynamodb.adapter.d.ts +0 -56
  270. package/lib/adapters/aws/dynamodb.adapter.d.ts.map +0 -1
  271. package/lib/adapters/aws/dynamodb.adapter.js +0 -2
  272. package/lib/adapters/aws/dynamodb.adapter.js.map +0 -1
  273. package/lib/adapters/aws/event-bridge.adapter.d.ts +0 -63
  274. package/lib/adapters/aws/event-bridge.adapter.d.ts.map +0 -1
  275. package/lib/adapters/aws/event-bridge.adapter.js +0 -2
  276. package/lib/adapters/aws/event-bridge.adapter.js.map +0 -1
  277. package/lib/adapters/aws/index.d.ts.map +0 -1
  278. package/lib/adapters/aws/index.js +0 -2
  279. package/lib/adapters/aws/index.js.map +0 -1
  280. package/lib/adapters/aws/lambda-edge.adapter.d.ts +0 -209
  281. package/lib/adapters/aws/lambda-edge.adapter.d.ts.map +0 -1
  282. package/lib/adapters/aws/lambda-edge.adapter.js +0 -2
  283. package/lib/adapters/aws/lambda-edge.adapter.js.map +0 -1
  284. package/lib/adapters/aws/request-lambda-edge.adapter.d.ts +0 -131
  285. package/lib/adapters/aws/request-lambda-edge.adapter.d.ts.map +0 -1
  286. package/lib/adapters/aws/request-lambda-edge.adapter.js +0 -2
  287. package/lib/adapters/aws/request-lambda-edge.adapter.js.map +0 -1
  288. package/lib/adapters/aws/s3.adapter.d.ts +0 -56
  289. package/lib/adapters/aws/s3.adapter.d.ts.map +0 -1
  290. package/lib/adapters/aws/s3.adapter.js +0 -2
  291. package/lib/adapters/aws/s3.adapter.js.map +0 -1
  292. package/lib/adapters/aws/sns.adapter.d.ts +0 -56
  293. package/lib/adapters/aws/sns.adapter.d.ts.map +0 -1
  294. package/lib/adapters/aws/sns.adapter.js +0 -2
  295. package/lib/adapters/aws/sns.adapter.js.map +0 -1
  296. package/lib/adapters/aws/sqs.adapter.d.ts +0 -56
  297. package/lib/adapters/aws/sqs.adapter.d.ts.map +0 -1
  298. package/lib/adapters/aws/sqs.adapter.js +0 -2
  299. package/lib/adapters/aws/sqs.adapter.js.map +0 -1
  300. package/lib/adapters/azure/http-trigger-v4.adapter.d.ts.map +0 -1
  301. package/lib/adapters/azure/http-trigger-v4.adapter.js +0 -2
  302. package/lib/adapters/azure/http-trigger-v4.adapter.js.map +0 -1
  303. package/lib/adapters/azure/index.d.ts.map +0 -1
  304. package/lib/adapters/azure/index.js +0 -2
  305. package/lib/adapters/azure/index.js.map +0 -1
  306. package/lib/adapters/digital-ocean/http-function.adapter.d.ts +0 -65
  307. package/lib/adapters/digital-ocean/http-function.adapter.d.ts.map +0 -1
  308. package/lib/adapters/digital-ocean/http-function.adapter.js +0 -2
  309. package/lib/adapters/digital-ocean/http-function.adapter.js.map +0 -1
  310. package/lib/adapters/digital-ocean/index.d.ts.map +0 -1
  311. package/lib/adapters/digital-ocean/index.js +0 -2
  312. package/lib/adapters/digital-ocean/index.js.map +0 -1
  313. package/lib/adapters/dummy/dummy.adapter.d.ts.map +0 -1
  314. package/lib/adapters/dummy/dummy.adapter.js +0 -2
  315. package/lib/adapters/dummy/dummy.adapter.js.map +0 -1
  316. package/lib/adapters/dummy/index.d.ts.map +0 -1
  317. package/lib/adapters/dummy/index.js +0 -2
  318. package/lib/adapters/dummy/index.js.map +0 -1
  319. package/lib/adapters/huawei/huawei-api-gateway.adapter.d.ts +0 -66
  320. package/lib/adapters/huawei/huawei-api-gateway.adapter.d.ts.map +0 -1
  321. package/lib/adapters/huawei/huawei-api-gateway.adapter.js +0 -2
  322. package/lib/adapters/huawei/huawei-api-gateway.adapter.js.map +0 -1
  323. package/lib/adapters/huawei/index.d.ts.map +0 -1
  324. package/lib/adapters/huawei/index.js +0 -2
  325. package/lib/adapters/huawei/index.js.map +0 -1
  326. package/lib/contracts/adapter.contract.d.ts +0 -152
  327. package/lib/contracts/adapter.contract.d.ts.map +0 -1
  328. package/lib/contracts/adapter.contract.js +0 -2
  329. package/lib/contracts/adapter.contract.js.map +0 -1
  330. package/lib/contracts/framework.contract.d.ts.map +0 -1
  331. package/lib/contracts/framework.contract.js +0 -2
  332. package/lib/contracts/framework.contract.js.map +0 -1
  333. package/lib/contracts/handler.contract.d.ts +0 -25
  334. package/lib/contracts/handler.contract.d.ts.map +0 -1
  335. package/lib/contracts/handler.contract.js +0 -2
  336. package/lib/contracts/handler.contract.js.map +0 -1
  337. package/lib/contracts/index.d.ts +0 -5
  338. package/lib/contracts/index.d.ts.map +0 -1
  339. package/lib/contracts/index.js +0 -2
  340. package/lib/contracts/index.js.map +0 -1
  341. package/lib/contracts/resolver.contract.d.ts +0 -83
  342. package/lib/contracts/resolver.contract.d.ts.map +0 -1
  343. package/lib/contracts/resolver.contract.js +0 -2
  344. package/lib/contracts/resolver.contract.js.map +0 -1
  345. package/lib/core/base-handler.d.ts.map +0 -1
  346. package/lib/core/base-handler.js +0 -2
  347. package/lib/core/base-handler.js.map +0 -1
  348. package/lib/core/constants.d.ts.map +0 -1
  349. package/lib/core/constants.js +0 -2
  350. package/lib/core/constants.js.map +0 -1
  351. package/lib/core/current-invoke.d.ts +0 -48
  352. package/lib/core/current-invoke.d.ts.map +0 -1
  353. package/lib/core/current-invoke.js +0 -2
  354. package/lib/core/current-invoke.js.map +0 -1
  355. package/lib/core/event-body.d.ts +0 -22
  356. package/lib/core/event-body.d.ts.map +0 -1
  357. package/lib/core/event-body.js +0 -2
  358. package/lib/core/event-body.js.map +0 -1
  359. package/lib/core/headers.d.ts +0 -73
  360. package/lib/core/headers.d.ts.map +0 -1
  361. package/lib/core/headers.js +0 -3
  362. package/lib/core/headers.js.map +0 -1
  363. package/lib/core/index.d.ts +0 -12
  364. package/lib/core/index.d.ts.map +0 -1
  365. package/lib/core/index.js +0 -2
  366. package/lib/core/index.js.map +0 -1
  367. package/lib/core/is-binary.d.ts +0 -73
  368. package/lib/core/is-binary.d.ts.map +0 -1
  369. package/lib/core/is-binary.js +0 -2
  370. package/lib/core/is-binary.js.map +0 -1
  371. package/lib/core/logger.d.ts.map +0 -1
  372. package/lib/core/logger.js +0 -2
  373. package/lib/core/logger.js.map +0 -1
  374. package/lib/core/no-op.d.ts +0 -8
  375. package/lib/core/no-op.d.ts.map +0 -1
  376. package/lib/core/no-op.js +0 -2
  377. package/lib/core/no-op.js.map +0 -1
  378. package/lib/core/optional.d.ts +0 -22
  379. package/lib/core/optional.d.ts.map +0 -1
  380. package/lib/core/optional.js +0 -2
  381. package/lib/core/optional.js.map +0 -1
  382. package/lib/core/path.d.ts.map +0 -1
  383. package/lib/core/path.js +0 -2
  384. package/lib/core/path.js.map +0 -1
  385. package/lib/core/stream.d.ts +0 -21
  386. package/lib/core/stream.d.ts.map +0 -1
  387. package/lib/core/stream.js +0 -2
  388. package/lib/core/stream.js.map +0 -1
  389. package/lib/frameworks/apollo-server/apollo-server.framework.d.ts.map +0 -1
  390. package/lib/frameworks/apollo-server/apollo-server.framework.js +0 -2
  391. package/lib/frameworks/apollo-server/apollo-server.framework.js.map +0 -1
  392. package/lib/frameworks/apollo-server/index.d.ts.map +0 -1
  393. package/lib/frameworks/apollo-server/index.js +0 -2
  394. package/lib/frameworks/apollo-server/index.js.map +0 -1
  395. package/lib/frameworks/body-parser/base-body-parser.framework.d.ts +0 -69
  396. package/lib/frameworks/body-parser/base-body-parser.framework.d.ts.map +0 -1
  397. package/lib/frameworks/body-parser/base-body-parser.framework.js +0 -2
  398. package/lib/frameworks/body-parser/base-body-parser.framework.js.map +0 -1
  399. package/lib/frameworks/body-parser/index.d.ts.map +0 -1
  400. package/lib/frameworks/body-parser/index.js +0 -2
  401. package/lib/frameworks/body-parser/index.js.map +0 -1
  402. package/lib/frameworks/body-parser/json-body-parser.framework.d.ts +0 -26
  403. package/lib/frameworks/body-parser/json-body-parser.framework.d.ts.map +0 -1
  404. package/lib/frameworks/body-parser/json-body-parser.framework.js +0 -2
  405. package/lib/frameworks/body-parser/json-body-parser.framework.js.map +0 -1
  406. package/lib/frameworks/body-parser/raw-body-parser.framework.d.ts +0 -26
  407. package/lib/frameworks/body-parser/raw-body-parser.framework.d.ts.map +0 -1
  408. package/lib/frameworks/body-parser/raw-body-parser.framework.js +0 -2
  409. package/lib/frameworks/body-parser/raw-body-parser.framework.js.map +0 -1
  410. package/lib/frameworks/body-parser/text-body-parser.framework.d.ts +0 -26
  411. package/lib/frameworks/body-parser/text-body-parser.framework.d.ts.map +0 -1
  412. package/lib/frameworks/body-parser/text-body-parser.framework.js +0 -2
  413. package/lib/frameworks/body-parser/text-body-parser.framework.js.map +0 -1
  414. package/lib/frameworks/body-parser/urlencoded-body-parser.framework.d.ts +0 -26
  415. package/lib/frameworks/body-parser/urlencoded-body-parser.framework.d.ts.map +0 -1
  416. package/lib/frameworks/body-parser/urlencoded-body-parser.framework.js +0 -2
  417. package/lib/frameworks/body-parser/urlencoded-body-parser.framework.js.map +0 -1
  418. package/lib/frameworks/cors/cors.framework.d.ts.map +0 -1
  419. package/lib/frameworks/cors/cors.framework.js +0 -3
  420. package/lib/frameworks/cors/cors.framework.js.map +0 -1
  421. package/lib/frameworks/cors/index.d.ts.map +0 -1
  422. package/lib/frameworks/cors/index.js +0 -2
  423. package/lib/frameworks/cors/index.js.map +0 -1
  424. package/lib/frameworks/deepkit/http-deepkit.framework.d.ts.map +0 -1
  425. package/lib/frameworks/deepkit/http-deepkit.framework.js +0 -2
  426. package/lib/frameworks/deepkit/http-deepkit.framework.js.map +0 -1
  427. package/lib/frameworks/deepkit/index.d.ts.map +0 -1
  428. package/lib/frameworks/deepkit/index.js +0 -2
  429. package/lib/frameworks/deepkit/index.js.map +0 -1
  430. package/lib/frameworks/express/express.framework.d.ts.map +0 -1
  431. package/lib/frameworks/express/express.framework.js +0 -2
  432. package/lib/frameworks/express/express.framework.js.map +0 -1
  433. package/lib/frameworks/express/index.d.ts.map +0 -1
  434. package/lib/frameworks/express/index.js +0 -2
  435. package/lib/frameworks/express/index.js.map +0 -1
  436. package/lib/frameworks/fastify/fastify.framework.d.ts.map +0 -1
  437. package/lib/frameworks/fastify/fastify.framework.js +0 -2
  438. package/lib/frameworks/fastify/fastify.framework.js.map +0 -1
  439. package/lib/frameworks/fastify/helpers/no-op-content-parser.d.ts +0 -14
  440. package/lib/frameworks/fastify/helpers/no-op-content-parser.d.ts.map +0 -1
  441. package/lib/frameworks/fastify/helpers/no-op-content-parser.js +0 -2
  442. package/lib/frameworks/fastify/helpers/no-op-content-parser.js.map +0 -1
  443. package/lib/frameworks/fastify/index.d.ts.map +0 -1
  444. package/lib/frameworks/fastify/index.js +0 -2
  445. package/lib/frameworks/fastify/index.js.map +0 -1
  446. package/lib/frameworks/hapi/hapi.framework.d.ts.map +0 -1
  447. package/lib/frameworks/hapi/hapi.framework.js +0 -2
  448. package/lib/frameworks/hapi/hapi.framework.js.map +0 -1
  449. package/lib/frameworks/hapi/index.d.ts.map +0 -1
  450. package/lib/frameworks/hapi/index.js +0 -2
  451. package/lib/frameworks/hapi/index.js.map +0 -1
  452. package/lib/frameworks/koa/index.d.ts.map +0 -1
  453. package/lib/frameworks/koa/index.js +0 -2
  454. package/lib/frameworks/koa/index.js.map +0 -1
  455. package/lib/frameworks/koa/koa.framework.d.ts.map +0 -1
  456. package/lib/frameworks/koa/koa.framework.js +0 -2
  457. package/lib/frameworks/koa/koa.framework.js.map +0 -1
  458. package/lib/frameworks/lazy/index.d.ts.map +0 -1
  459. package/lib/frameworks/lazy/index.js +0 -2
  460. package/lib/frameworks/lazy/index.js.map +0 -1
  461. package/lib/frameworks/lazy/lazy.framework.d.ts.map +0 -1
  462. package/lib/frameworks/lazy/lazy.framework.js +0 -2
  463. package/lib/frameworks/lazy/lazy.framework.js.map +0 -1
  464. package/lib/frameworks/trpc/index.d.ts.map +0 -1
  465. package/lib/frameworks/trpc/index.js +0 -2
  466. package/lib/frameworks/trpc/index.js.map +0 -1
  467. package/lib/frameworks/trpc/trpc.framework.d.ts.map +0 -1
  468. package/lib/frameworks/trpc/trpc.framework.js +0 -2
  469. package/lib/frameworks/trpc/trpc.framework.js.map +0 -1
  470. package/lib/handlers/aws/aws-stream.handler.d.ts.map +0 -1
  471. package/lib/handlers/aws/aws-stream.handler.js +0 -2
  472. package/lib/handlers/aws/aws-stream.handler.js.map +0 -1
  473. package/lib/handlers/aws/index.d.ts.map +0 -1
  474. package/lib/handlers/aws/index.js +0 -2
  475. package/lib/handlers/aws/index.js.map +0 -1
  476. package/lib/handlers/azure/azure.handler.d.ts.map +0 -1
  477. package/lib/handlers/azure/azure.handler.js +0 -2
  478. package/lib/handlers/azure/azure.handler.js.map +0 -1
  479. package/lib/handlers/azure/index.d.ts.map +0 -1
  480. package/lib/handlers/azure/index.js +0 -2
  481. package/lib/handlers/azure/index.js.map +0 -1
  482. package/lib/handlers/base/index.d.ts +0 -2
  483. package/lib/handlers/base/index.d.ts.map +0 -1
  484. package/lib/handlers/base/index.js +0 -2
  485. package/lib/handlers/base/index.js.map +0 -1
  486. package/lib/handlers/base/raw-request.d.ts.map +0 -1
  487. package/lib/handlers/base/raw-request.js +0 -2
  488. package/lib/handlers/base/raw-request.js.map +0 -1
  489. package/lib/handlers/default/default.handler.d.ts.map +0 -1
  490. package/lib/handlers/default/default.handler.js +0 -2
  491. package/lib/handlers/default/default.handler.js.map +0 -1
  492. package/lib/handlers/default/index.d.ts.map +0 -1
  493. package/lib/handlers/default/index.js +0 -2
  494. package/lib/handlers/default/index.js.map +0 -1
  495. package/lib/handlers/digital-ocean/digital-ocean.handler.d.ts +0 -17
  496. package/lib/handlers/digital-ocean/digital-ocean.handler.d.ts.map +0 -1
  497. package/lib/handlers/digital-ocean/digital-ocean.handler.js +0 -2
  498. package/lib/handlers/digital-ocean/digital-ocean.handler.js.map +0 -1
  499. package/lib/handlers/digital-ocean/index.d.ts.map +0 -1
  500. package/lib/handlers/digital-ocean/index.js +0 -2
  501. package/lib/handlers/digital-ocean/index.js.map +0 -1
  502. package/lib/handlers/firebase/http-firebase-v2.handler.d.ts +0 -27
  503. package/lib/handlers/firebase/http-firebase-v2.handler.d.ts.map +0 -1
  504. package/lib/handlers/firebase/http-firebase-v2.handler.js +0 -2
  505. package/lib/handlers/firebase/http-firebase-v2.handler.js.map +0 -1
  506. package/lib/handlers/firebase/http-firebase.handler.d.ts +0 -19
  507. package/lib/handlers/firebase/http-firebase.handler.d.ts.map +0 -1
  508. package/lib/handlers/firebase/http-firebase.handler.js +0 -2
  509. package/lib/handlers/firebase/http-firebase.handler.js.map +0 -1
  510. package/lib/handlers/firebase/index.d.ts.map +0 -1
  511. package/lib/handlers/firebase/index.js +0 -2
  512. package/lib/handlers/firebase/index.js.map +0 -1
  513. package/lib/handlers/gcp/gcp.handler.d.ts.map +0 -1
  514. package/lib/handlers/gcp/gcp.handler.js +0 -2
  515. package/lib/handlers/gcp/gcp.handler.js.map +0 -1
  516. package/lib/handlers/gcp/index.d.ts.map +0 -1
  517. package/lib/handlers/gcp/index.js +0 -2
  518. package/lib/handlers/gcp/index.js.map +0 -1
  519. package/lib/handlers/huawei/http-huawei.handler.d.ts.map +0 -1
  520. package/lib/handlers/huawei/http-huawei.handler.js +0 -2
  521. package/lib/handlers/huawei/http-huawei.handler.js.map +0 -1
  522. package/lib/handlers/huawei/index.d.ts.map +0 -1
  523. package/lib/handlers/huawei/index.js +0 -2
  524. package/lib/handlers/huawei/index.js.map +0 -1
  525. package/lib/index.d.ts.map +0 -1
  526. package/lib/index.doc.js +0 -2
  527. package/lib/index.doc.js.map +0 -1
  528. package/lib/index.js +0 -2
  529. package/lib/index.js.map +0 -1
  530. package/lib/network/index.d.ts +0 -5
  531. package/lib/network/index.d.ts.map +0 -1
  532. package/lib/network/index.js +0 -2
  533. package/lib/network/index.js.map +0 -1
  534. package/lib/network/request.d.ts.map +0 -1
  535. package/lib/network/request.js +0 -2
  536. package/lib/network/request.js.map +0 -1
  537. package/lib/network/response-stream.d.ts +0 -41
  538. package/lib/network/response-stream.d.ts.map +0 -1
  539. package/lib/network/response-stream.js +0 -7
  540. package/lib/network/response-stream.js.map +0 -1
  541. package/lib/network/response.d.ts +0 -48
  542. package/lib/network/response.d.ts.map +0 -1
  543. package/lib/network/response.js +0 -4
  544. package/lib/network/response.js.map +0 -1
  545. package/lib/network/utils.d.ts +0 -9
  546. package/lib/network/utils.d.ts.map +0 -1
  547. package/lib/network/utils.js +0 -2
  548. package/lib/network/utils.js.map +0 -1
  549. package/lib/resolvers/aws-context/aws-context.resolver.d.ts.map +0 -1
  550. package/lib/resolvers/aws-context/aws-context.resolver.js +0 -2
  551. package/lib/resolvers/aws-context/aws-context.resolver.js.map +0 -1
  552. package/lib/resolvers/aws-context/index.d.ts.map +0 -1
  553. package/lib/resolvers/aws-context/index.js +0 -2
  554. package/lib/resolvers/aws-context/index.js.map +0 -1
  555. package/lib/resolvers/callback/callback.resolver.d.ts.map +0 -1
  556. package/lib/resolvers/callback/callback.resolver.js +0 -2
  557. package/lib/resolvers/callback/callback.resolver.js.map +0 -1
  558. package/lib/resolvers/callback/index.d.ts.map +0 -1
  559. package/lib/resolvers/callback/index.js +0 -2
  560. package/lib/resolvers/callback/index.js.map +0 -1
  561. package/lib/resolvers/dummy/dummy.resolver.d.ts +0 -14
  562. package/lib/resolvers/dummy/dummy.resolver.d.ts.map +0 -1
  563. package/lib/resolvers/dummy/dummy.resolver.js +0 -2
  564. package/lib/resolvers/dummy/dummy.resolver.js.map +0 -1
  565. package/lib/resolvers/dummy/index.d.ts.map +0 -1
  566. package/lib/resolvers/dummy/index.js +0 -2
  567. package/lib/resolvers/dummy/index.js.map +0 -1
  568. package/lib/resolvers/promise/index.d.ts.map +0 -1
  569. package/lib/resolvers/promise/index.js +0 -2
  570. package/lib/resolvers/promise/index.js.map +0 -1
  571. package/lib/resolvers/promise/promise.resolver.d.ts +0 -14
  572. package/lib/resolvers/promise/promise.resolver.d.ts.map +0 -1
  573. package/lib/resolvers/promise/promise.resolver.js +0 -2
  574. package/lib/resolvers/promise/promise.resolver.js.map +0 -1
  575. package/lib/serverless-adapter.d.ts +0 -119
  576. package/lib/serverless-adapter.d.ts.map +0 -1
  577. package/lib/serverless-adapter.js +0 -2
  578. package/lib/serverless-adapter.js.map +0 -1
@@ -1,27 +1,33 @@
1
- /// <reference types="node" />
2
- import { Writable } from 'stream';
3
- import type { APIGatewayProxyEventV2, Context } from 'aws-lambda';
4
- import type { APIGatewayProxyStructuredResultV2 } from 'aws-lambda/trigger/api-gateway-proxy';
5
- import { BinarySettings } from '../../@types';
6
- import { AdapterContract, AdapterRequest, FrameworkContract, ResolverContract, ServerlessHandler } from '../../contracts';
7
- import { BaseHandler, ILogger } from '../../core';
1
+ import { Writable } from 'node:stream';
2
+ import { Context, APIGatewayProxyEventV2 } from 'aws-lambda';
3
+ import { APIGatewayProxyStructuredResultV2 } from 'aws-lambda/trigger/api-gateway-proxy';
4
+ import { B as BinarySettings, S as ServerlessHandler } from '../../handler.contract-TQk8iM8f.cjs';
5
+ import { A as AdapterContract, R as ResolverContract, a as AdapterRequest } from '../../adapter.contract-y5xSjOjo.cjs';
6
+ import { F as FrameworkContract } from '../../framework.contract-YnJ-fl1w.cjs';
7
+ import { B as BaseHandler } from '../../base-handler-peEBoKtZ.cjs';
8
+ import { I as ILogger } from '../../logger-9me5n48P.cjs';
9
+ import '../../headers-K2qbcurv.cjs';
10
+ import 'http';
11
+ import 'node:http';
12
+ import '../../request-DNNIV9ub.cjs';
13
+
8
14
  /**
9
15
  * @breadcrumb Handlers / AwsStreamHandler
10
16
  * @public
11
17
  */
12
- export type AWSResponseStream = Writable;
18
+ type AWSResponseStream = Writable;
13
19
  /**
14
20
  * @breadcrumb Handlers / AwsStreamHandler
15
21
  * @public
16
22
  */
17
- export type AWSStreamResponseMetadata = Pick<APIGatewayProxyStructuredResultV2, 'statusCode' | 'headers' | 'cookies'>;
23
+ type AWSStreamResponseMetadata = Pick<APIGatewayProxyStructuredResultV2, 'statusCode' | 'headers' | 'cookies'>;
18
24
  /**
19
25
  * The interface that describes the internal context used by the {@link AwsStreamHandler}
20
26
  *
21
27
  * @breadcrumb Handlers / AwsStreamHandler
22
28
  * @public
23
29
  */
24
- export type AWSStreamContext = {
30
+ type AWSStreamContext = {
25
31
  /**
26
32
  * The response stream provided by the serverless
27
33
  */
@@ -37,11 +43,11 @@ export type AWSStreamContext = {
37
43
  * @breadcrumb Handlers / AwsStreamHandler
38
44
  * @public
39
45
  */
40
- export declare class AwsStreamHandler<TApp> extends BaseHandler<TApp, APIGatewayProxyEventV2, AWSStreamContext, void, AWSStreamResponseMetadata, void> {
46
+ declare class AwsStreamHandler<TApp> extends BaseHandler<TApp, APIGatewayProxyEventV2, AWSStreamContext, void, AWSStreamResponseMetadata, void> {
41
47
  /**
42
48
  * {@inheritDoc}
43
49
  */
44
- getHandler(app: TApp, framework: FrameworkContract<TApp>, adapters: AdapterContract<APIGatewayProxyEventV2, AWSStreamContext, AWSStreamResponseMetadata>[], resolverFactory: ResolverContract<unknown, unknown, unknown, unknown, unknown>, binarySettings: BinarySettings, respondWithErrors: boolean, log: ILogger): ServerlessHandler<Promise<void>>;
50
+ getHandler(app: TApp, framework: FrameworkContract<TApp>, adapters: AdapterContract<APIGatewayProxyEventV2, AWSStreamContext, AWSStreamResponseMetadata>[], _resolverFactory: ResolverContract<unknown, unknown, unknown, unknown, unknown>, binarySettings: BinarySettings, respondWithErrors: boolean, log: ILogger): ServerlessHandler<Promise<void>>;
45
51
  /**
46
52
  * The hook executed on receive a request, before the request is being processed
47
53
  *
@@ -81,9 +87,10 @@ export declare class AwsStreamHandler<TApp> extends BaseHandler<TApp, APIGateway
81
87
  * @param event - The event sent by serverless
82
88
  * @param context - The context sent by serverless
83
89
  * @param adapter - The adapter resolved to this event
90
+ * @param _binarySettings - The binary settings
84
91
  * @param log - The instance of logger
85
- * @param binarySettings - The binary settings
86
92
  */
87
- protected forwardRequestToFramework(app: TApp, framework: FrameworkContract<TApp>, event: APIGatewayProxyEventV2, context: AWSStreamContext, adapter: AdapterContract<APIGatewayProxyEventV2, AWSStreamContext, AWSStreamResponseMetadata>, binarySettings: BinarySettings, log: ILogger): Promise<void>;
93
+ protected forwardRequestToFramework(app: TApp, framework: FrameworkContract<TApp>, event: APIGatewayProxyEventV2, context: AWSStreamContext, adapter: AdapterContract<APIGatewayProxyEventV2, AWSStreamContext, AWSStreamResponseMetadata>, _binarySettings: BinarySettings, log: ILogger): Promise<void>;
88
94
  }
89
- //# sourceMappingURL=aws-stream.handler.d.ts.map
95
+
96
+ export { type AWSResponseStream, type AWSStreamContext, type AWSStreamResponseMetadata, AwsStreamHandler };
@@ -1,2 +1,96 @@
1
- export * from './aws-stream.handler';
2
- //# sourceMappingURL=index.d.ts.map
1
+ import { Writable } from 'node:stream';
2
+ import { Context, APIGatewayProxyEventV2 } from 'aws-lambda';
3
+ import { APIGatewayProxyStructuredResultV2 } from 'aws-lambda/trigger/api-gateway-proxy';
4
+ import { B as BinarySettings, S as ServerlessHandler } from '../../handler.contract-8Cb7qLSi.js';
5
+ import { A as AdapterContract, R as ResolverContract, a as AdapterRequest } from '../../adapter.contract-EQE3rlgO.js';
6
+ import { F as FrameworkContract } from '../../framework.contract-YnJ-fl1w.js';
7
+ import { B as BaseHandler } from '../../base-handler-fYEk59Xq.js';
8
+ import { I as ILogger } from '../../logger-9me5n48P.js';
9
+ import '../../headers-K2qbcurv.js';
10
+ import 'http';
11
+ import 'node:http';
12
+ import '../../request-sVa4pxmx.js';
13
+
14
+ /**
15
+ * @breadcrumb Handlers / AwsStreamHandler
16
+ * @public
17
+ */
18
+ type AWSResponseStream = Writable;
19
+ /**
20
+ * @breadcrumb Handlers / AwsStreamHandler
21
+ * @public
22
+ */
23
+ type AWSStreamResponseMetadata = Pick<APIGatewayProxyStructuredResultV2, 'statusCode' | 'headers' | 'cookies'>;
24
+ /**
25
+ * The interface that describes the internal context used by the {@link AwsStreamHandler}
26
+ *
27
+ * @breadcrumb Handlers / AwsStreamHandler
28
+ * @public
29
+ */
30
+ type AWSStreamContext = {
31
+ /**
32
+ * The response stream provided by the serverless
33
+ */
34
+ response: AWSResponseStream;
35
+ /**
36
+ * The context provided by the serverless
37
+ */
38
+ context: Context;
39
+ };
40
+ /**
41
+ * The class that implements a default serverless handler consisting of a function with event, context and callback parameters respectively
42
+ *
43
+ * @breadcrumb Handlers / AwsStreamHandler
44
+ * @public
45
+ */
46
+ declare class AwsStreamHandler<TApp> extends BaseHandler<TApp, APIGatewayProxyEventV2, AWSStreamContext, void, AWSStreamResponseMetadata, void> {
47
+ /**
48
+ * {@inheritDoc}
49
+ */
50
+ getHandler(app: TApp, framework: FrameworkContract<TApp>, adapters: AdapterContract<APIGatewayProxyEventV2, AWSStreamContext, AWSStreamResponseMetadata>[], _resolverFactory: ResolverContract<unknown, unknown, unknown, unknown, unknown>, binarySettings: BinarySettings, respondWithErrors: boolean, log: ILogger): ServerlessHandler<Promise<void>>;
51
+ /**
52
+ * The hook executed on receive a request, before the request is being processed
53
+ *
54
+ * @param log - The instance of logger
55
+ * @param event - The event sent by serverless
56
+ * @param context - The context sent by serverless
57
+ * @param binarySettings - The binary settings
58
+ * @param respondWithErrors - Indicates whether the error stack should be included in the response or not
59
+ */
60
+ protected onReceiveRequest(log: ILogger, event: APIGatewayProxyEventV2, context: AWSStreamContext, binarySettings: BinarySettings, respondWithErrors: boolean): void;
61
+ /**
62
+ * The hook executed after resolve the adapter that will be used to handle the request and response
63
+ *
64
+ * @param log - The instance of logger
65
+ * @param adapter - The adapter resolved
66
+ */
67
+ protected onResolveAdapter(log: ILogger, adapter: AdapterContract<APIGatewayProxyEventV2, AWSStreamContext, AWSStreamResponseMetadata>): void;
68
+ /**
69
+ * The hook executed after resolves the request values that will be sent to the framework
70
+ *
71
+ * @param log - The instance of logger
72
+ * @param requestValues - The request values returned by the adapter
73
+ */
74
+ protected onResolveRequestValues(log: ILogger, requestValues: AdapterRequest): void;
75
+ /**
76
+ * The hook executed before sending response to the serverless with response from adapter
77
+ *
78
+ * @param log - The instance of logger
79
+ * @param successResponse - The success response resolved by the adapter
80
+ */
81
+ protected onForwardResponseAdapterResponse(log: ILogger, successResponse: AWSStreamResponseMetadata): void;
82
+ /**
83
+ * The function to forward the event to the framework
84
+ *
85
+ * @param app - The instance of the app (express, hapi, etc...)
86
+ * @param framework - The framework that will process requests
87
+ * @param event - The event sent by serverless
88
+ * @param context - The context sent by serverless
89
+ * @param adapter - The adapter resolved to this event
90
+ * @param _binarySettings - The binary settings
91
+ * @param log - The instance of logger
92
+ */
93
+ protected forwardRequestToFramework(app: TApp, framework: FrameworkContract<TApp>, event: APIGatewayProxyEventV2, context: AWSStreamContext, adapter: AdapterContract<APIGatewayProxyEventV2, AWSStreamContext, AWSStreamResponseMetadata>, _binarySettings: BinarySettings, log: ILogger): Promise<void>;
94
+ }
95
+
96
+ export { type AWSResponseStream, type AWSStreamContext, type AWSStreamResponseMetadata, AwsStreamHandler };
@@ -0,0 +1,2 @@
1
+ import{B as W,a as u,f as w,h as P,x as l,y as v}from"../../chunk-HU5XBQCP.mjs";import{a as y}from"../../chunk-OYOJMOFP.mjs";import"node:stream";import{inspect as g}from"node:util";var x=class extends u{static{y(this,"AwsStreamHandler")}getHandler(o,t,R,s,n,i,r){return awslambda.streamifyResponse(async(e,A,p)=>{let a={response:A,context:p};this.onReceiveRequest(r,e,a,n,i);let d=this.getAdapterByEventAndContext(e,a,R,r);this.onResolveAdapter(r,d),w({event:e,context:p}),await this.forwardRequestToFramework(o,t,e,a,d,n,r)})}onReceiveRequest(o,t,R,s,n){o.debug("SERVERLESS_ADAPTER:PROXY",()=>({event:t,context:g(R,{depth:null}),binarySettings:s,respondWithErrors:n}))}onResolveAdapter(o,t){o.debug("SERVERLESS_ADAPTER:RESOLVED_ADAPTER_NAME: ",t.getAdapterName())}onResolveRequestValues(o,t){o.debug("SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:REQUEST_VALUES",()=>({requestValues:{...t,body:t.body?.toString()}}))}onForwardResponseAdapterResponse(o,t){o.debug("SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE",{successResponse:t})}async forwardRequestToFramework(o,t,R,s,n,i,r){let e=n.getRequest(R,s,r);this.onResolveRequestValues(r,e);let A=new v({method:e.method,headers:e.headers,body:e.body,remoteAddress:e.remoteAddress,url:e.path}),p=new W({method:e.method,onReceiveHeaders:(a,d)=>{let E=P(d),m={statusCode:a,headers:E},S=d["set-cookie"];S&&(m.cookies=Array.isArray(S)?S:[S],delete d["set-cookie"],delete E["set-cookie"]),this.onForwardResponseAdapterResponse(r,m);let c=awslambda.HttpResponseStream.from(s.response,m),C=a>=100&&a<200,T=a===304||a===204,_=e.method==="HEAD";return(C||T||_)&&(c.write(""),p.end()),c},log:r});t.sendRequest(o,A,p),r.debug("SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:WAITING_STREAM_COMPLETE"),await l(p),r.debug("SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:STREAM_COMPLETE"),s.response.end()}};export{x as AwsStreamHandler};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/handlers/aws/aws-stream.handler.ts"],"sourcesContent":["//#region Imports\n\nimport { Writable } from 'node:stream';\nimport { inspect } from 'node:util';\nimport type { APIGatewayProxyEventV2, Context } from 'aws-lambda';\nimport type { APIGatewayProxyStructuredResultV2 } from 'aws-lambda/trigger/api-gateway-proxy';\nimport type { BinarySettings } from '../../@types';\nimport type {\n AdapterContract,\n AdapterRequest,\n FrameworkContract,\n ResolverContract,\n ServerlessHandler,\n} from '../../contracts';\nimport {\n BaseHandler,\n type ILogger,\n getFlattenedHeadersMap,\n setCurrentInvoke,\n waitForStreamComplete,\n} from '../../core';\nimport { ServerlessRequest, ServerlessStreamResponse } from '../../network';\n\n//#endregion\n\n/**\n * @breadcrumb Handlers / AwsStreamHandler\n * @public\n */\nexport type AWSResponseStream = Writable;\n\n/**\n * @breadcrumb Handlers / AwsStreamHandler\n * @public\n */\nexport type AWSStreamResponseMetadata = Pick<\n APIGatewayProxyStructuredResultV2,\n 'statusCode' | 'headers' | 'cookies'\n>;\n\n/**\n * @breadcrumb Handlers / AwsStreamHandler\n * @public\n */\ndeclare const awslambda: {\n streamifyResponse: (\n handler: (\n event: APIGatewayProxyEventV2,\n response: AWSResponseStream,\n context: Context,\n ) => Promise<void>,\n ) => any;\n HttpResponseStream: {\n from: (\n stream: AWSResponseStream,\n httpResponseMetadata: AWSStreamResponseMetadata,\n ) => AWSResponseStream;\n };\n};\n\n/**\n * The interface that describes the internal context used by the {@link AwsStreamHandler}\n *\n * @breadcrumb Handlers / AwsStreamHandler\n * @public\n */\nexport type AWSStreamContext = {\n /**\n * The response stream provided by the serverless\n */\n response: AWSResponseStream;\n /**\n * The context provided by the serverless\n */\n context: Context;\n};\n\n/**\n * The class that implements a default serverless handler consisting of a function with event, context and callback parameters respectively\n *\n * @breadcrumb Handlers / AwsStreamHandler\n * @public\n */\nexport class AwsStreamHandler<TApp> extends BaseHandler<\n TApp,\n APIGatewayProxyEventV2,\n AWSStreamContext,\n void,\n AWSStreamResponseMetadata,\n void\n> {\n //#region Public Methods\n\n /**\n * {@inheritDoc}\n */\n public getHandler(\n app: TApp,\n framework: FrameworkContract<TApp>,\n adapters: AdapterContract<\n APIGatewayProxyEventV2,\n AWSStreamContext,\n AWSStreamResponseMetadata\n >[],\n _resolverFactory: ResolverContract<\n unknown,\n unknown,\n unknown,\n unknown,\n unknown\n >,\n binarySettings: BinarySettings,\n respondWithErrors: boolean,\n log: ILogger,\n ): ServerlessHandler<Promise<void>> {\n return awslambda.streamifyResponse(async (event, response, context) => {\n const streamContext = { response, context };\n\n this.onReceiveRequest(\n log,\n event,\n streamContext,\n binarySettings,\n respondWithErrors,\n );\n\n const adapter = this.getAdapterByEventAndContext(\n event,\n streamContext,\n adapters,\n log,\n );\n\n this.onResolveAdapter(log, adapter);\n\n setCurrentInvoke({ event, context });\n\n await this.forwardRequestToFramework(\n app,\n framework,\n event,\n streamContext,\n adapter,\n binarySettings,\n log,\n );\n });\n }\n\n //#endregion\n\n //#region Hooks\n\n /**\n * The hook executed on receive a request, before the request is being processed\n *\n * @param log - The instance of logger\n * @param event - The event sent by serverless\n * @param context - The context sent by serverless\n * @param binarySettings - The binary settings\n * @param respondWithErrors - Indicates whether the error stack should be included in the response or not\n */\n protected onReceiveRequest(\n log: ILogger,\n event: APIGatewayProxyEventV2,\n context: AWSStreamContext,\n binarySettings: BinarySettings,\n respondWithErrors: boolean,\n ): void {\n log.debug('SERVERLESS_ADAPTER:PROXY', () => ({\n event,\n context: inspect(context, { depth: null }),\n binarySettings,\n respondWithErrors,\n }));\n }\n\n /**\n * The hook executed after resolve the adapter that will be used to handle the request and response\n *\n * @param log - The instance of logger\n * @param adapter - The adapter resolved\n */\n protected onResolveAdapter(\n log: ILogger,\n adapter: AdapterContract<\n APIGatewayProxyEventV2,\n AWSStreamContext,\n AWSStreamResponseMetadata\n >,\n ): void {\n log.debug(\n 'SERVERLESS_ADAPTER:RESOLVED_ADAPTER_NAME: ',\n adapter.getAdapterName(),\n );\n }\n\n /**\n * The hook executed after resolves the request values that will be sent to the framework\n *\n * @param log - The instance of logger\n * @param requestValues - The request values returned by the adapter\n */\n protected onResolveRequestValues(\n log: ILogger,\n requestValues: AdapterRequest,\n ): void {\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:REQUEST_VALUES',\n () => ({\n requestValues: {\n ...requestValues,\n body: requestValues.body?.toString(),\n },\n }),\n );\n }\n\n /**\n * The hook executed before sending response to the serverless with response from adapter\n *\n * @param log - The instance of logger\n * @param successResponse - The success response resolved by the adapter\n */\n protected onForwardResponseAdapterResponse(\n log: ILogger,\n successResponse: AWSStreamResponseMetadata,\n ) {\n log.debug('SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE', {\n successResponse,\n });\n }\n\n //#endregion\n\n //#region Protected Methods\n\n /**\n * The function to forward the event to the framework\n *\n * @param app - The instance of the app (express, hapi, etc...)\n * @param framework - The framework that will process requests\n * @param event - The event sent by serverless\n * @param context - The context sent by serverless\n * @param adapter - The adapter resolved to this event\n * @param _binarySettings - The binary settings\n * @param log - The instance of logger\n */\n protected async forwardRequestToFramework(\n app: TApp,\n framework: FrameworkContract<TApp>,\n event: APIGatewayProxyEventV2,\n context: AWSStreamContext,\n adapter: AdapterContract<\n APIGatewayProxyEventV2,\n AWSStreamContext,\n AWSStreamResponseMetadata\n >,\n _binarySettings: BinarySettings,\n log: ILogger,\n ): Promise<void> {\n const requestValues = adapter.getRequest(event, context, log);\n\n this.onResolveRequestValues(log, requestValues);\n\n const request = new ServerlessRequest({\n method: requestValues.method,\n headers: requestValues.headers,\n body: requestValues.body,\n remoteAddress: requestValues.remoteAddress,\n url: requestValues.path,\n });\n\n const response = new ServerlessStreamResponse({\n method: requestValues.method,\n onReceiveHeaders: (status, headers) => {\n const flattenedHeaders = getFlattenedHeadersMap(headers);\n const awsMetadata: AWSStreamResponseMetadata = {\n statusCode: status,\n headers: flattenedHeaders,\n };\n\n const cookies = headers['set-cookie'];\n\n if (cookies) {\n awsMetadata.cookies = Array.isArray(cookies) ? cookies : [cookies];\n\n delete headers['set-cookie'];\n delete flattenedHeaders['set-cookie'];\n }\n\n this.onForwardResponseAdapterResponse(log, awsMetadata);\n\n const finalResponse = awslambda.HttpResponseStream.from(\n context.response,\n awsMetadata,\n );\n\n // some status do not return body, and\n // for some unknown reason, we cannot finish the stream without writing at least once\n // so I have this thing just to fix this issue\n // ref: https://stackoverflow.com/a/37303151\n const isHundreadStatus = status >= 100 && status < 200;\n const isNoContentStatus = status === 304 || status === 204;\n const isHeadRequest = requestValues.method === 'HEAD';\n\n if (isHundreadStatus || isNoContentStatus || isHeadRequest) {\n finalResponse.write('');\n // end the response to avoid waiting for nothing\n response.end();\n }\n\n return finalResponse;\n },\n log,\n });\n\n framework.sendRequest(app, request, response);\n\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:WAITING_STREAM_COMPLETE',\n );\n await waitForStreamComplete(response);\n\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:STREAM_COMPLETE',\n );\n context.response.end();\n }\n\n //#endregion\n}\n"],"mappings":"6HAEA,MAAyB,cACzB,OAAS,WAAAA,MAAe,YAgFjB,IAAMC,EAAN,cAAqCC,CAO1C,CA1FF,MA0FE,CAAAC,EAAA,yBAMO,WACLC,EACAC,EACAC,EAKAC,EAOAC,EACAC,EACAC,EACkC,CAClC,OAAO,UAAU,kBAAkB,MAAOC,EAAOC,EAAUC,IAAY,CACrE,IAAMC,EAAgB,CAAE,SAAAF,EAAU,QAAAC,CAAQ,EAE1C,KAAK,iBACHH,EACAC,EACAG,EACAN,EACAC,CACF,EAEA,IAAMM,EAAU,KAAK,4BACnBJ,EACAG,EACAR,EACAI,CACF,EAEA,KAAK,iBAAiBA,EAAKK,CAAO,EAElCC,EAAiB,CAAE,MAAAL,EAAO,QAAAE,CAAQ,CAAC,EAEnC,MAAM,KAAK,0BACTT,EACAC,EACAM,EACAG,EACAC,EACAP,EACAE,CACF,CACF,CAAC,CACH,CAeU,iBACRA,EACAC,EACAE,EACAL,EACAC,EACM,CACNC,EAAI,MAAM,2BAA4B,KAAO,CAC3C,MAAAC,EACA,QAASM,EAAQJ,EAAS,CAAE,MAAO,IAAK,CAAC,EACzC,eAAAL,EACA,kBAAAC,CACF,EAAE,CACJ,CAQU,iBACRC,EACAK,EAKM,CACNL,EAAI,MACF,6CACAK,EAAQ,eAAe,CACzB,CACF,CAQU,uBACRL,EACAQ,EACM,CACNR,EAAI,MACF,iEACA,KAAO,CACL,cAAe,CACb,GAAGQ,EACH,KAAMA,EAAc,MAAM,SAAS,CACrC,CACF,EACF,CACF,CAQU,iCACRR,EACAS,EACA,CACAT,EAAI,MAAM,4DAA6D,CACrE,gBAAAS,CACF,CAAC,CACH,CAiBA,MAAgB,0BACdf,EACAC,EACAM,EACAE,EACAE,EAKAK,EACAV,EACe,CACf,IAAMQ,EAAgBH,EAAQ,WAAWJ,EAAOE,EAASH,CAAG,EAE5D,KAAK,uBAAuBA,EAAKQ,CAAa,EAE9C,IAAMG,EAAU,IAAIC,EAAkB,CACpC,OAAQJ,EAAc,OACtB,QAASA,EAAc,QACvB,KAAMA,EAAc,KACpB,cAAeA,EAAc,cAC7B,IAAKA,EAAc,IACrB,CAAC,EAEKN,EAAW,IAAIW,EAAyB,CAC5C,OAAQL,EAAc,OACtB,iBAAkB,CAACM,EAAQC,IAAY,CACrC,IAAMC,EAAmBC,EAAuBF,CAAO,EACjDG,EAAyC,CAC7C,WAAYJ,EACZ,QAASE,CACX,EAEMG,EAAUJ,EAAQ,YAAY,EAEhCI,IACFD,EAAY,QAAU,MAAM,QAAQC,CAAO,EAAIA,EAAU,CAACA,CAAO,EAEjE,OAAOJ,EAAQ,YAAY,EAC3B,OAAOC,EAAiB,YAAY,GAGtC,KAAK,iCAAiChB,EAAKkB,CAAW,EAEtD,IAAME,EAAgB,UAAU,mBAAmB,KACjDjB,EAAQ,SACRe,CACF,EAMMG,EAAmBP,GAAU,KAAOA,EAAS,IAC7CQ,EAAoBR,IAAW,KAAOA,IAAW,IACjDS,EAAgBf,EAAc,SAAW,OAE/C,OAAIa,GAAoBC,GAAqBC,KAC3CH,EAAc,MAAM,EAAE,EAEtBlB,EAAS,IAAI,GAGRkB,CACT,EACA,IAAApB,CACF,CAAC,EAEDL,EAAU,YAAYD,EAAKiB,EAAST,CAAQ,EAE5CF,EAAI,MACF,yEACF,EACA,MAAMwB,EAAsBtB,CAAQ,EAEpCF,EAAI,MACF,iEACF,EACAG,EAAQ,SAAS,IAAI,CACvB,CAGF","names":["inspect","AwsStreamHandler","BaseHandler","__name","app","framework","adapters","_resolverFactory","binarySettings","respondWithErrors","log","event","response","context","streamContext","adapter","setCurrentInvoke","inspect","requestValues","successResponse","_binarySettings","request","ServerlessRequest","ServerlessStreamResponse","status","headers","flattenedHeaders","getFlattenedHeadersMap","awsMetadata","cookies","finalResponse","isHundreadStatus","isNoContentStatus","isHeadRequest","waitForStreamComplete"]}
@@ -0,0 +1,4 @@
1
+ "use strict";var F=Object.create;var m=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var s=(t,e)=>m(t,"name",{value:e,configurable:!0});var U=(t,e)=>{for(var r in e)m(t,r,{get:e[r],enumerable:!0})},x=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of D(e))!W.call(t,o)&&o!==r&&m(t,o,{get:()=>e[o],enumerable:!(n=V(e,o))||n.enumerable});return t};var q=(t,e,r)=>(r=t!=null?F(N(t)):{},x(e||!t||!t.__esModule?m(r,"default",{value:t,enumerable:!0}):r,t)),M=t=>x(m({},"__esModule",{value:!0}),t);var J={};U(J,{AzureHandler:()=>C});module.exports=M(J);var b=require("http");var j=443,E=class extends b.IncomingMessage{static{s(this,"ServerlessRequest")}constructor({method:e,url:r,headers:n,body:o,remoteAddress:i}){super({encrypted:!0,readable:!1,remoteAddress:i,address:()=>({port:j}),end:c,destroy:c}),this.statusCode=200,this.statusMessage="OK",this.complete=!0,this.httpVersion="1.1",this.httpVersionMajor=1,this.httpVersionMinor=1,this.method=e,this.headers=n,this.body=o,this.url=r,this.ip=i,this._read=()=>{this.push(o),this.push(null)}}ip;body};var k=require("http");function A(t){if(Buffer.isBuffer(t))return t.toString("utf8");if(typeof t=="string")return t;if(t instanceof Uint8Array)return new TextDecoder().decode(t);throw new Error(`response.write() of unexpected type: ${typeof t}`)}s(A,"getString");var w=`\r
2
+ \r
3
+ `,T=Symbol("Response body"),R=Symbol("Response headers");function L(t,e){if(Buffer.isBuffer(e)||typeof e=="string"||e instanceof Uint8Array)t[T].push(Buffer.from(e));else throw new Error(`response.write() of unexpected type: ${typeof e}`)}s(L,"addData");var g=class t extends k.ServerResponse{static{s(this,"ServerlessResponse")}constructor({method:e}){super({method:e}),this[T]=[],this[R]={},this.useChunkedEncodingByDefault=!1,this.chunkedEncoding=!1,this._header="";let r={_writableState:{},writable:!0,on:c,removeListener:c,destroy:c,cork:c,uncork:c,write:(n,o,i)=>{if(typeof o=="function"&&(i=o,o=null),this._header===""||this._wroteHeader)L(this,n);else{let d=A(n),a=d.indexOf(w);if(a!==-1){let p=d.slice(a+w.length);p&&L(this,p),this._wroteHeader=!0}}typeof i=="function"&&i()}};this.assignSocket(r)}_header;_headers;_wroteHeader;[T];[R];get headers(){return this[R]}static from(e){let r=new t({method:e.method});return r.statusCode=e.statusCode||0,r[R]=e.headers,r[T]=e.body?[Buffer.from(e.body)]:[],r.end(),r}static body(e){return Buffer.concat(e[T])}static headers(e){let r=e.getHeaders();return Object.assign(r,e[R])}setHeader(e,r){this._wroteHeader?this[R][e]=r:super.setHeader(e,r)}writeHead(e,r,n){let o=typeof r=="string"?n:r,i=Array.isArray(o)?o:[o||{}];for(let d of i)for(let a in d)if(this.setHeader(a,d[a]),!this._wroteHeader)break;return this.callNativeWriteHead(e,r,n)}callNativeWriteHead(e,r,n){return super.writeHead(e,r,n)}};var $=require("http");var S=class{static{s(this,"BaseHandler")}getAdapterByEventAndContext(e,r,n,o){let i=n.filter(d=>d.canHandle(e,r,o));if(i.length===0)throw new Error("SERVERLESS_ADAPTER: Couldn't find adapter to handle this event.");if(i.length>1)throw new Error(`SERVERLESS_ADAPTER: Two or more adapters was resolved by the event, the adapters are: ${n.map(d=>d.getAdapterName()).join(", ")}.`);return i[0]}getServerlessRequestResponseFromAdapterRequest(e){let r=new E({method:e.method,headers:e.headers,body:e.body,remoteAddress:e.remoteAddress,url:e.path}),n=new g({method:e.method});return[r,n]}};var B={context:null,event:null};function H({event:t,context:e}){B.event=t,B.context=e}s(H,"setCurrentInvoke");function Q(t,e){let r=t["content-encoding"];return r?(Array.isArray(r)||(r=r.split(",")),r.some(n=>e.includes(n.trim()))):!1}s(Q,"isContentEncodingBinary");function Y(t){let e=t["content-type"],r=Array.isArray(e)?e[0]||"":e||"";if(!e)return"";let n=r.indexOf(";");return n===-1?r:r.slice(0,n)}s(Y,"getContentType");function z(t,e){let r=Y(t);return r?e.includes(r.trim()):!1}s(z,"isContentTypeBinary");function O(t,e){return"isBinary"in e?e.isBinary===!1?!1:e.isBinary(t):Q(t,e.contentEncodings)||z(t,e.contentTypes)}s(O,"isBinary");var c=s(()=>{},"NO_OP");var G=Symbol("InternalLogger");function _(t){return!!t[G]}s(_,"isInternalLogger");function I(t,e){return t===void 0?e:t}s(I,"getDefaultIfUndefined");var We=require("stream");function X(t){return!!("readableEnded"in t&&t.readableEnded||"writableEnded"in t&&t.writableEnded)}s(X,"isStreamEnded");function P(t){return X(t)?Promise.resolve(t):new Promise((e,r)=>{let n=!1;function o(i){n||(n=!0,t.removeListener("error",o),t.removeListener("end",o),t.removeListener("finish",o),i?r(i):e(t))}s(o,"complete"),t.once("error",o),t.once("end",o),t.once("finish",o)})}s(P,"waitForStreamComplete");var h=q(require("util"),1);var v=class extends S{static{s(this,"DefaultHandler")}getHandler(e,r,n,o,i,d,a){return(p,u,l)=>{this.onReceiveRequest(a,p,u,i,d);let f=this.getAdapterByEventAndContext(p,u,n,a);return this.onResolveAdapter(a,f),H({event:p,context:u}),o.createResolver({event:p,context:u,callback:l,log:a,respondWithErrors:d,adapter:f}).run(()=>this.forwardRequestToFramework(e,r,p,u,f,i,a))}}onReceiveRequest(e,r,n,o,i){e.debug("SERVERLESS_ADAPTER:PROXY",()=>({event:h.default.inspect(r,{depth:null}),context:h.default.inspect(n,{depth:null}),binarySettings:o,respondWithErrors:i}))}onResolveAdapter(e,r){e.debug("SERVERLESS_ADAPTER:RESOLVED_ADAPTER_NAME: ",r.getAdapterName())}onResolveRequestValues(e,r){e.debug("SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:REQUEST_VALUES",()=>({requestValues:{...r,body:r.body?.toString()}}))}onResolveForwardedResponseToFramework(e,r){e.debug("SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:RESPONSE",()=>({response:r}))}onForwardResponse(e,r,n,o,i){e.debug("SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE_PARAMS",()=>({statusCode:r,body:n,headers:o,isBase64Encoded:i}))}onForwardResponseAdapterResponse(e,r,n){e.debug("SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE",()=>({successResponse:h.default.inspect(r,{depth:null}),body:n}))}async forwardRequestToFramework(e,r,n,o,i,d,a){let p=i.getRequest(n,o,a);this.onResolveRequestValues(a,p);let[u,l]=this.getServerlessRequestResponseFromAdapterRequest(p);return r.sendRequest(e,u,l),await P(l),this.onResolveForwardedResponseToFramework(a,l),this.forwardResponse(n,l,i,d,a)}forwardResponse(e,r,n,o,i){let d=r.statusCode,a=g.headers(r),p=O(a,o),u=p?"base64":"utf8",l=g.body(r).toString(u),f=p?"[BASE64_ENCODED]":l;this.onForwardResponse(i,d,f,a,p);let y=n.getResponse({event:e,statusCode:d,body:l,headers:a,isBase64Encoded:p,response:r,log:i});return this.onForwardResponseAdapterResponse(i,y,f),y}};var C=class extends v{constructor(r){super();this.options=r}static{s(this,"AzureHandler")}getHandler(r,n,o,i,d,a,p){return(u,l)=>{let f=I(this.options?.useContextLogWhenInternalLogger,!0);_(p)&&f&&(p=this.createLoggerFromContext(u));let y=super.getHandler(r,n,o,i,d,a,p);return delete u.done,delete u.res,y(l,u,void 0)}}createLoggerFromContext(r){return{error:r.log.error,debug:r.log.verbose,verbose:r.log.verbose,info:r.log.info,warn:r.log.warn}}};0&&(module.exports={AzureHandler});
4
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/handlers/azure/index.ts","../../../src/network/request.ts","../../../src/network/response.ts","../../../src/network/utils.ts","../../../src/network/response-stream.ts","../../../src/core/base-handler.ts","../../../src/core/current-invoke.ts","../../../src/core/is-binary.ts","../../../src/core/no-op.ts","../../../src/core/logger.ts","../../../src/core/optional.ts","../../../src/core/stream.ts","../../../src/handlers/default/default.handler.ts","../../../src/handlers/azure/azure.handler.ts"],"sourcesContent":["export * from './azure.handler';\n","// ATTRIBUTION: https://github.com/dougmoscrop/serverless-http\nimport { IncomingMessage } from 'node:http';\nimport type { AddressInfo } from 'node:net';\nimport type { SingleValueHeaders } from '../@types';\nimport { NO_OP } from '../core';\n\nconst HTTPS_PORT = 443;\n\n/**\n * The properties to create a {@link ServerlessRequest}\n *\n * @breadcrumb Network / ServerlessRequest\n * @public\n */\nexport interface ServerlessRequestProps {\n /**\n * The HTTP Method of the request\n */\n method: string;\n\n /**\n * The URL requested\n */\n url: string;\n\n /**\n * The headers from the event source\n */\n headers: SingleValueHeaders;\n\n /**\n * The body from the event source\n */\n body?: Buffer | Uint8Array;\n\n /**\n * The IP Address from caller\n */\n remoteAddress?: string;\n}\n\n/**\n * The class that represents an {@link http#IncomingMessage} created by the library to represent an actual request to the framework.\n *\n * @breadcrumb Network / ServerlessRequest\n * @public\n */\nexport class ServerlessRequest extends IncomingMessage {\n constructor({\n method,\n url,\n headers,\n body,\n remoteAddress,\n }: ServerlessRequestProps) {\n super({\n encrypted: true,\n readable: false,\n remoteAddress,\n address: () => ({ port: HTTPS_PORT }) as AddressInfo,\n end: NO_OP,\n destroy: NO_OP,\n } as any);\n\n this.statusCode = 200;\n this.statusMessage = 'OK';\n this.complete = true;\n this.httpVersion = '1.1';\n this.httpVersionMajor = 1;\n this.httpVersionMinor = 1;\n this.method = method;\n this.headers = headers;\n this.body = body;\n this.url = url;\n this.ip = remoteAddress;\n\n this._read = () => {\n this.push(body);\n this.push(null);\n };\n }\n\n ip?: string;\n body?: Buffer | Uint8Array;\n}\n","// ATTRIBUTION: https://github.com/dougmoscrop/serverless-http\nimport { IncomingMessage, ServerResponse } from 'node:http';\nimport type { Socket } from 'node:net';\nimport { NO_OP } from '../core';\nimport { getString } from './utils';\n\nconst headerEnd = '\\r\\n\\r\\n';\n\nconst BODY = Symbol('Response body');\nconst HEADERS = Symbol('Response headers');\n\nfunction addData(stream: ServerlessResponse, data: Uint8Array | string) {\n if (\n Buffer.isBuffer(data) ||\n typeof data === 'string' ||\n data instanceof Uint8Array\n )\n stream[BODY].push(Buffer.from(data));\n else throw new Error(`response.write() of unexpected type: ${typeof data}`);\n}\n\n/**\n * The properties to create a {@link ServerlessResponse}.\n *\n * @breadcrumb Network / ServerlessResponse\n * @public\n */\nexport interface ServerlessResponseProps {\n /**\n * The HTTP Method from request\n */\n method?: string;\n}\n\n/**\n * The class that represents a response instance used to send to the framework and wait until the framework finishes processing the request.\n * Once it's happens, we use the properties from this response to built the response to the cloud.\n *\n * @breadcrumb Network / ServerlessResponse\n * @public\n */\nexport class ServerlessResponse extends ServerResponse {\n constructor({ method }: ServerlessResponseProps) {\n super({ method } as any);\n\n this[BODY] = [];\n this[HEADERS] = {};\n\n this.useChunkedEncodingByDefault = false;\n this.chunkedEncoding = false;\n this._header = '';\n\n const socket: Partial<Socket> & { _writableState: any } = {\n _writableState: {},\n writable: true,\n on: NO_OP,\n removeListener: NO_OP,\n destroy: NO_OP,\n cork: NO_OP,\n uncork: NO_OP,\n write: (\n data: Uint8Array | string,\n encoding?: string | null | (() => void),\n cb?: () => void,\n ): any => {\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (this._header === '' || this._wroteHeader) addData(this, data);\n else {\n const string = getString(data);\n const index = string.indexOf(headerEnd);\n\n if (index !== -1) {\n const remainder = string.slice(index + headerEnd.length);\n\n if (remainder) addData(this, remainder);\n\n this._wroteHeader = true;\n }\n }\n\n if (typeof cb === 'function') cb();\n },\n };\n\n this.assignSocket(socket as unknown as Socket);\n }\n\n _header: string;\n _headers?: Record<any, any>;\n _wroteHeader?: boolean;\n\n [BODY]: any[];\n [HEADERS]: Record<any, any>;\n\n get headers(): Record<any, any> {\n return this[HEADERS];\n }\n\n static from(res: IncomingMessage) {\n const response = new ServerlessResponse({ method: res.method });\n\n response.statusCode = res.statusCode || 0;\n response[HEADERS] = res.headers;\n response[BODY] = (res as any).body ? [Buffer.from((res as any).body)] : [];\n response.end();\n\n return response;\n }\n\n static body(res: ServerlessResponse): Buffer {\n return Buffer.concat(res[BODY]);\n }\n\n static headers(res: ServerlessResponse) {\n const headers = res.getHeaders();\n\n return Object.assign(headers, res[HEADERS]);\n }\n\n override setHeader(\n key: string,\n value: number | string | readonly string[],\n ): any {\n if (this._wroteHeader) this[HEADERS][key] = value;\n else super.setHeader(key, value);\n }\n\n override writeHead(\n statusCode: number,\n statusMessage?: string | any | any[],\n obj?: any | any[],\n ): any {\n const headersObjOrArray =\n typeof statusMessage === 'string' ? obj : statusMessage;\n\n const arrayHeaders = Array.isArray(headersObjOrArray)\n ? headersObjOrArray\n : [headersObjOrArray || {}];\n\n for (const headers of arrayHeaders) {\n for (const name in headers) {\n this.setHeader(name, headers[name]!);\n\n if (!this._wroteHeader) {\n // we only need to initiate super.headers once\n // writeHead will add the other headers itself\n break;\n }\n }\n }\n\n return this.callNativeWriteHead(statusCode, statusMessage, obj);\n }\n\n /**\n * I use ignore here because in nodejs 12.x, statusMessage can be string | OutgoingHttpHeaders\n * But in nodejs \\>=14.x, statusMessage can also be OutgoingHttpHeaders[]\n * I take care of these cases above, but here I can't handle it well, so I give up\n * nodejs 12.x ref: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node/v12/http.d.ts#L229\n * nodejs 14.x ref: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node/v14/http.d.ts#L263\n */\n protected callNativeWriteHead(\n statusCode: number,\n statusMessage?: string | any | any[],\n obj?: any | any[],\n ): this {\n return super.writeHead(statusCode, statusMessage, obj);\n }\n}\n","/**\n * Get the data from a buffer, string, or Uint8Array\n *\n * @breadcrumb Network\n * @param data - The data that was written inside the stream\n */\nexport function getString(data: Buffer | string | unknown) {\n if (Buffer.isBuffer(data)) return data.toString('utf8');\n else if (typeof data === 'string') return data;\n else if (data instanceof Uint8Array) return new TextDecoder().decode(data);\n else throw new Error(`response.write() of unexpected type: ${typeof data}`);\n}\n","import { ServerResponse } from 'node:http';\nimport type { Socket } from 'node:net';\nimport type { Writable } from 'node:stream';\nimport type { BothValueHeaders } from '../@types';\nimport { type ILogger, NO_OP, parseHeaders } from '../core';\nimport { getString } from './utils';\n\nconst endChunked = '0\\r\\n\\r\\n';\nconst headerEnd = '\\r\\n\\r\\n';\nconst endStatusSeparator = '\\r\\n';\n\n/**\n * The properties to create a {@link ServerlessStreamResponse}.\n *\n * @breadcrumb Network / ServerlessStreamResponse\n * @public\n */\nexport interface ServerlessStreamResponseProps {\n /**\n * The HTTP Method from request\n */\n method?: string;\n\n /**\n * The callback to receive the headers when they are written to the stream\n * You need to return a writable stream be able to continue writing the response\n *\n * @param statusCode - The status code of the response\n * @param headers - The headers of the response\n */\n onReceiveHeaders: (statusCode: number, headers: BothValueHeaders) => Writable;\n\n /**\n * Instance of the logger\n */\n log: ILogger;\n}\n\n/**\n * The class that represents a response instance used to send to the framework and wait until the framework finishes processing the request.\n * This response is specially built to deal with transfer-encoding: chunked\n *\n * @breadcrumb Network / ServerlessStreamResponse\n * @public\n */\nexport class ServerlessStreamResponse extends ServerResponse {\n constructor({\n method,\n onReceiveHeaders,\n log,\n }: ServerlessStreamResponseProps) {\n super({ method } as any);\n\n this.useChunkedEncodingByDefault = true;\n this.chunkedEncoding = true;\n\n let internalWritable: Writable | null = null;\n let isFirstCall = true;\n // this ignore is used because I need to ignore these write calls:\n // https://github.com/nodejs/node/blob/main/lib/_http_outgoing.js#L934-L935\n // https://github.com/nodejs/node/blob/main/lib/_http_outgoing.js#L937\n let writesToIgnore = 0;\n\n const socket: Partial<Socket> & { _writableState: any } = {\n _writableState: {},\n writable: true,\n on: NO_OP,\n removeListener: NO_OP,\n destroy: NO_OP,\n cork: NO_OP,\n uncork: NO_OP,\n write: (\n data: Uint8Array | string,\n encoding?: string | null | (() => void),\n cb?: () => void,\n ): any => {\n // very unlikely, I don't even know how to reproduce this, but exist on types\n // istanbul ignore if\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n log.debug('SERVERLESS_ADAPTER:RESPONSE_STREAM:DATA', () => ({\n data: Buffer.isBuffer(data) ? data.toString('utf8') : data,\n encoding,\n }));\n\n if (!isFirstCall && internalWritable) {\n if (data === endChunked) {\n internalWritable.end(cb);\n\n return true;\n }\n\n if (writesToIgnore > 0) {\n writesToIgnore--;\n return true;\n }\n\n internalWritable.write(data, cb);\n writesToIgnore = 3;\n } else if (isFirstCall) {\n isFirstCall = false;\n\n const stringData = getString(data);\n const endStatusIndex = stringData.indexOf(endStatusSeparator);\n const status = +stringData.slice(0, endStatusIndex).split(' ')[1];\n\n const headerData = stringData.slice(\n endStatusIndex + 2,\n stringData.indexOf(headerEnd),\n );\n const headers = parseHeaders(headerData);\n log.debug('SERVERLESS_ADAPTER:RESPONSE_STREAM:FRAMEWORK_HEADERS', {\n headers,\n });\n\n writesToIgnore = 1;\n internalWritable = onReceiveHeaders(status, headers);\n }\n\n return true;\n },\n };\n\n this.assignSocket(socket as unknown as Socket);\n }\n}\n","//#region Imports\n\nimport type { BinarySettings } from '../@types';\nimport type {\n AdapterContract,\n AdapterRequest,\n FrameworkContract,\n HandlerContract,\n ResolverContract,\n ServerlessHandler,\n} from '../contracts';\nimport { ServerlessRequest, ServerlessResponse } from '../network';\nimport type { ILogger } from './index';\n\n//#endregion\n\n/**\n * The abstract class that represents the base class for a handler\n *\n * @breadcrumb Core\n * @public\n */\nexport abstract class BaseHandler<\n TApp,\n TEvent,\n TContext,\n TCallback,\n TResponse,\n TReturn,\n> implements\n HandlerContract<TApp, TEvent, TContext, TCallback, TResponse, TReturn>\n{\n //#region Public Methods\n\n /**\n * Get the handler that will handle serverless requests\n */\n public abstract getHandler(\n app: TApp,\n framework: FrameworkContract<TApp>,\n adapters: AdapterContract<TEvent, TContext, TResponse>[],\n resolverFactory: ResolverContract<\n TEvent,\n TContext,\n TCallback,\n TResponse,\n TReturn\n >,\n binarySettings: BinarySettings,\n respondWithErrors: boolean,\n log: ILogger,\n ): ServerlessHandler<TReturn>;\n\n //#endregion\n\n //#region Protected Methods\n\n /**\n * Get the adapter to handle a specific event and context\n *\n * @param event - The event sent by serverless\n * @param context - The context sent by serverless\n * @param adapters - The list of adapters\n * @param log - The instance of logger\n */\n protected getAdapterByEventAndContext(\n event: TEvent,\n context: TContext,\n adapters: AdapterContract<TEvent, TContext, TResponse>[],\n log: ILogger,\n ): AdapterContract<TEvent, TContext, TResponse> {\n const resolvedAdapters = adapters.filter(adapter =>\n adapter.canHandle(event, context, log),\n );\n\n if (resolvedAdapters.length === 0) {\n throw new Error(\n \"SERVERLESS_ADAPTER: Couldn't find adapter to handle this event.\",\n );\n }\n\n if (resolvedAdapters.length > 1) {\n throw new Error(\n `SERVERLESS_ADAPTER: Two or more adapters was resolved by the event, the adapters are: ${adapters\n .map(adapter => adapter.getAdapterName())\n .join(', ')}.`,\n );\n }\n\n return resolvedAdapters[0];\n }\n\n /**\n * Get serverless request and response frmo the adapter request\n *\n * @param requestValues - The request values from adapter\n */\n protected getServerlessRequestResponseFromAdapterRequest(\n requestValues: AdapterRequest,\n ): [request: ServerlessRequest, response: ServerlessResponse] {\n const request = new ServerlessRequest({\n method: requestValues.method,\n headers: requestValues.headers,\n body: requestValues.body,\n remoteAddress: requestValues.remoteAddress,\n url: requestValues.path,\n });\n\n const response = new ServerlessResponse({\n method: requestValues.method,\n });\n\n return [request, response];\n }\n\n //#endregion\n}\n","/**\n * The type that represents the object that handles the references to the event created by the serverless trigger or context created by the serverless environment.\n *\n * @breadcrumb Core / Current Invoke\n * @public\n */\nexport type CurrentInvoke<TEvent, TContext> = {\n /**\n * The event created by the serverless trigger\n *\n * @remarks It's only null when you call {@link getCurrentInvoke} outside this library's pipeline.\n */\n event: TEvent | null;\n\n /**\n * The context created by the serverless environment\n *\n * @remarks It's only null when you call {@link getCurrentInvoke} outside this library's pipeline.\n */\n context: TContext | null;\n};\n\nconst currentInvoke: CurrentInvoke<any, any> = {\n context: null,\n event: null,\n};\n\n/**\n * Get the reference to the event created by the serverless trigger or context created by the serverless environment.\n *\n * @example\n * ```typescript\n * import type { ALBEvent, Context } from 'aws-lambda';\n *\n * // inside the method that handles the aws alb request.\n * const { event, context } = getCurrentInvoke<ALBEvent, Context>();\n * ```\n *\n * @breadcrumb Core / Current Invoke\n * @public\n */\nexport function getCurrentInvoke<TEvent = any, TContext = any>(): CurrentInvoke<\n TEvent,\n TContext\n> {\n return currentInvoke;\n}\n\n/**\n * Method that saves to the event created by the serverless trigger or context created by the serverless environment.\n *\n * @remarks This method MUST NOT be called by you, this method MUST only be used internally in this library.\n *\n * @param event - The event created by the serverless trigger\n * @param context - The context created by the serverless environment\n *\n * @breadcrumb Core / Current Invoke\n * @public\n */\nexport function setCurrentInvoke<TEvent = any, TContext = any>({\n event,\n context,\n}: CurrentInvoke<TEvent, TContext>) {\n currentInvoke.event = event;\n currentInvoke.context = context;\n}\n","// ATTRIBUTION: https://github.com/dougmoscrop/serverless-http\n\n//#region Imports\n\nimport type { BinarySettings, BothValueHeaders } from '../@types';\n\n//#endregion\n\n/**\n * The function that determines by the content encoding whether the response should be treated as binary\n *\n * @example\n * ```typescript\n * const headers = { 'content-encoding': 'gzip' };\n * const isBinary = isContentEncodingBinary(headers, ['gzip']);\n * console.log(isBinary);\n * // true\n * ```\n *\n * @param headers - The headers of the response\n * @param binaryEncodingTypes - The list of content encodings that will be treated as binary\n *\n * @breadcrumb Core / isBinary\n * @public\n */\nexport function isContentEncodingBinary(\n headers: BothValueHeaders,\n binaryEncodingTypes: string[],\n): boolean {\n let contentEncodings = headers['content-encoding'];\n\n if (!contentEncodings) return false;\n\n if (!Array.isArray(contentEncodings))\n contentEncodings = contentEncodings.split(',');\n\n return contentEncodings.some(value =>\n binaryEncodingTypes.includes(value.trim()),\n );\n}\n\n/**\n * The function that returns the content type of headers\n *\n * @example\n * ```typescript\n * const headers = { 'content-type': 'application/json' };\n * const contentType = getContentType(headers);\n * console.log(contentType);\n * // application/json\n * ```\n *\n * @param headers - The headers of the response\n *\n * @breadcrumb Core / isBinary\n * @public\n */\nexport function getContentType(headers: BothValueHeaders): string {\n const contentTypeHeaderRaw = headers['content-type'];\n const contentTypeHeader = Array.isArray(contentTypeHeaderRaw)\n ? contentTypeHeaderRaw[0] || ''\n : contentTypeHeaderRaw || '';\n\n if (!contentTypeHeaderRaw) return '';\n\n // only compare mime type; ignore encoding part\n const contentTypeStart = contentTypeHeader.indexOf(';');\n\n if (contentTypeStart === -1) return contentTypeHeader;\n\n return contentTypeHeader.slice(0, contentTypeStart);\n}\n\n/**\n * The function that determines by the content type whether the response should be treated as binary\n *\n * @example\n * ```typescript\n * const headers = { 'content-type': 'image/png' };\n * const isBinary = isContentTypeBinary(headers, new Map([['image/png', true]]));\n * console.log(isBinary);\n * // true\n * ```\n *\n * @param headers - The headers of the response\n * @param binaryContentTypes - The list of content types that will be treated as binary\n *\n * @breadcrumb Core / isBinary\n * @public\n */\nexport function isContentTypeBinary(\n headers: BothValueHeaders,\n binaryContentTypes: string[],\n) {\n const contentType = getContentType(headers);\n\n if (!contentType) return false;\n\n return binaryContentTypes.includes(contentType.trim());\n}\n\n/**\n * The function used to determine from the headers and the binary settings if a response should be encoded or not\n *\n * @example\n * ```typescript\n * const headers = { 'content-type': 'image/png', 'content-encoding': 'gzip' };\n * const isContentBinary = isBinary(headers, { contentEncodings: ['gzip'], contentTypes: ['image/png'] });\n * console.log(isContentBinary);\n * // true\n * ```\n *\n * @param headers - The headers of the response\n * @param binarySettings - The settings for the validation\n *\n * @breadcrumb Core / isBinary\n * @public\n */\nexport function isBinary(\n headers: BothValueHeaders,\n binarySettings: BinarySettings,\n): boolean {\n if ('isBinary' in binarySettings) {\n if (binarySettings.isBinary === false) return false;\n\n return binarySettings.isBinary(headers);\n }\n\n return (\n isContentEncodingBinary(headers, binarySettings.contentEncodings) ||\n isContentTypeBinary(headers, binarySettings.contentTypes)\n );\n}\n","/**\n * No operation function is used when we need to pass a function, but we don't want to specify any behavior.\n *\n * @breadcrumb Core\n * @public\n */\nexport const NO_OP: (...args: any[]) => any = () => void 0;\n","import { NO_OP } from './no-op';\n\n/**\n * The type representing the possible log levels to choose from.\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport type LogLevels =\n | 'debug'\n | 'verbose'\n | 'info'\n | 'warn'\n | 'error'\n | 'none';\n\n/**\n * The options to customize {@link ILogger}\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport type LoggerOptions = {\n /**\n * Select the log level, {@link LogLevels | see more}.\n *\n * @defaultValue error\n */\n level: LogLevels;\n};\n\n/**\n * The log function used in any level.\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport type LoggerFN = (message: any, ...additional: any[]) => void;\n\n/**\n * The interface representing the logger, you can provide a custom logger by implementing this interface.\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport type ILogger = Record<Exclude<LogLevels, 'none'>, LoggerFN>;\n\n/**\n * The symbol used to check against an ILogger instace to verify if that ILogger was created by this library\n *\n * @breadcrumb Core / Logger\n * @public\n */\nconst InternalLoggerSymbol = Symbol('InternalLogger');\n\nconst logLevels: Record<\n LogLevels,\n [level: LogLevels, consoleMethod: keyof Console][]\n> = {\n debug: [\n ['debug', 'debug'],\n ['verbose', 'debug'],\n ['info', 'info'],\n ['error', 'error'],\n ['warn', 'warn'],\n ],\n verbose: [\n ['verbose', 'debug'],\n ['info', 'info'],\n ['error', 'error'],\n ['warn', 'warn'],\n ],\n info: [\n ['info', 'info'],\n ['error', 'error'],\n ['warn', 'warn'],\n ],\n warn: [\n ['warn', 'warn'],\n ['error', 'error'],\n ],\n error: [['error', 'error']],\n none: [],\n};\n\nconst lazyPrint = (value: () => any | unknown) => {\n if (typeof value === 'function') return value();\n\n return value;\n};\n\nconst print =\n (fn: string) =>\n (message: any, ...additional: (() => any)[]) =>\n console[fn](message, ...additional.map(lazyPrint));\n\n/**\n * The method used to create a simple logger instance to use in this library.\n *\n * @remarks Behind the scenes, this simple logger sends the message to the `console` methods.\n *\n * @example\n * ```typescript\n * const logger = createDefaultLogger();\n *\n * logger.error('An error happens.');\n * // An error happens.\n * ```\n *\n * @param level - Select the level of the log\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport function createDefaultLogger(\n { level }: LoggerOptions = { level: 'error' },\n): ILogger {\n const levels = logLevels[level];\n\n if (!levels) throw new Error('Invalid log level');\n\n const logger = {\n [InternalLoggerSymbol]: true,\n error: NO_OP,\n debug: NO_OP,\n info: NO_OP,\n verbose: NO_OP,\n warn: NO_OP,\n } as ILogger;\n\n for (const [level, consoleMethod] of levels)\n logger[level] = print(consoleMethod);\n\n return logger;\n}\n\n/**\n * The method used to chck if logger was created by this library, or it was defined by the user.\n *\n * @param logger - The instance of the logger to check\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport function isInternalLogger(logger: ILogger): boolean {\n return !!logger[InternalLoggerSymbol];\n}\n","/**\n * Return the defaultValue whether the value is undefined, otherwise, return the value.\n *\n * @example\n * ```typescript\n * const value1 = getDefaultIfUndefined(undefined, true);\n * const value2 = getDefaultIfUndefined(false, true);\n *\n * console.log(value1);\n * // true\n * console.log(value2);\n * // false\n * ```\n *\n * @param value - The value to be checked\n * @param defaultValue - The default value when value is undefined\n *\n * @breadcrumb Core\n * @public\n */\nexport function getDefaultIfUndefined<T>(\n value: T | undefined,\n defaultValue: T,\n): T {\n if (value === undefined) return defaultValue;\n\n return value;\n}\n","//#region Imports\n\nimport { Readable, Writable } from 'node:stream';\n\n//#endregion\n\n/**\n * Check if stream already ended\n *\n * @param stream - The stream\n *\n * @breadcrumb Core / Stream\n * @public\n */\nexport function isStreamEnded(stream: Readable | Writable): boolean {\n if ('readableEnded' in stream && stream.readableEnded) return true;\n\n if ('writableEnded' in stream && stream.writableEnded) return true;\n\n return false;\n}\n\n/**\n * Wait asynchronous the stream to complete\n *\n * @param stream - The stream\n *\n * @breadcrumb Core / Stream\n * @public\n */\nexport function waitForStreamComplete<TStream extends Readable | Writable>(\n stream: TStream,\n): Promise<TStream> {\n if (isStreamEnded(stream)) return Promise.resolve(stream);\n\n return new Promise<TStream>((resolve, reject) => {\n // Reading the {@link https://github.com/nodejs/node/blob/v12.22.9/lib/events.js#L262 | emit source code},\n // it's almost impossible to complete being called twice because the emit function runs synchronously and removes the other listeners,\n // but I'll leave it at that because I didn't write that code, so I couldn't figure out what the author thought when he wrote this.\n let isComplete = false;\n\n function complete(err: any) {\n /* istanbul ignore next */\n if (isComplete) return;\n\n isComplete = true;\n\n stream.removeListener('error', complete);\n stream.removeListener('end', complete);\n stream.removeListener('finish', complete);\n\n if (err) reject(err);\n else resolve(stream);\n }\n\n stream.once('error', complete);\n stream.once('end', complete);\n stream.once('finish', complete);\n });\n}\n","//#region Imports\n\nimport util from 'node:util';\nimport type { BinarySettings, SingleValueHeaders } from '../../@types';\nimport type {\n AdapterContract,\n AdapterRequest,\n FrameworkContract,\n ResolverContract,\n ServerlessHandler,\n} from '../../contracts';\nimport {\n BaseHandler,\n type ILogger,\n isBinary,\n setCurrentInvoke,\n waitForStreamComplete,\n} from '../../core';\nimport { ServerlessResponse } from '../../network';\n\n//#endregion\n\n/**\n * The class that implements a default serverless handler consisting of a function with event, context and callback parameters respectively\n *\n * @breadcrumb Handlers / DefaultHandler\n * @public\n */\nexport class DefaultHandler<\n TApp,\n TEvent,\n TContext,\n TCallback,\n TResponse,\n TReturn,\n> extends BaseHandler<TApp, TEvent, TContext, TCallback, TResponse, TReturn> {\n //#region Public Methods\n\n /**\n * {@inheritDoc}\n */\n public getHandler(\n app: TApp,\n framework: FrameworkContract<TApp>,\n adapters: AdapterContract<TEvent, TContext, TResponse>[],\n resolverFactory: ResolverContract<\n TEvent,\n TContext,\n TCallback,\n TResponse,\n TReturn\n >,\n binarySettings: BinarySettings,\n respondWithErrors: boolean,\n log: ILogger,\n ): ServerlessHandler<TReturn> {\n return (event: TEvent, context: TContext, callback?: TCallback) => {\n this.onReceiveRequest(\n log,\n event,\n context,\n binarySettings,\n respondWithErrors,\n );\n\n const adapter = this.getAdapterByEventAndContext(\n event,\n context,\n adapters,\n log,\n );\n\n this.onResolveAdapter(log, adapter);\n\n setCurrentInvoke({ event, context });\n\n const resolver = resolverFactory.createResolver({\n event,\n context,\n callback,\n log,\n respondWithErrors,\n adapter,\n });\n\n return resolver.run(() =>\n this.forwardRequestToFramework(\n app,\n framework,\n event,\n context,\n adapter,\n binarySettings,\n log,\n ),\n );\n };\n }\n\n //#endregion\n\n //#region Hooks\n\n /**\n * The hook executed on receive a request, before the request is being processed\n *\n * @param log - The instance of logger\n * @param event - The event sent by serverless\n * @param context - The context sent by serverless\n * @param binarySettings - The binary settings\n * @param respondWithErrors - Indicates whether the error stack should be included in the response or not\n */\n protected onReceiveRequest(\n log: ILogger,\n event: TEvent,\n context: TContext,\n binarySettings: BinarySettings,\n respondWithErrors: boolean,\n ): void {\n log.debug('SERVERLESS_ADAPTER:PROXY', () => ({\n event: util.inspect(event, { depth: null }),\n context: util.inspect(context, { depth: null }),\n binarySettings,\n respondWithErrors,\n }));\n }\n\n /**\n * The hook executed after resolve the adapter that will be used to handle the request and response\n *\n * @param log - The instance of logger\n * @param adapter - The adapter resolved\n */\n protected onResolveAdapter(\n log: ILogger,\n adapter: AdapterContract<TEvent, TContext, TResponse>,\n ): void {\n log.debug(\n 'SERVERLESS_ADAPTER:RESOLVED_ADAPTER_NAME: ',\n adapter.getAdapterName(),\n );\n }\n\n /**\n * The hook executed after resolves the request values that will be sent to the framework\n *\n * @param log - The instance of logger\n * @param requestValues - The request values returned by the adapter\n */\n protected onResolveRequestValues(\n log: ILogger,\n requestValues: AdapterRequest,\n ): void {\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:REQUEST_VALUES',\n () => ({\n requestValues: {\n ...requestValues,\n body: requestValues.body?.toString(),\n },\n }),\n );\n }\n\n /**\n * The hook executed after handling the response sent by the framework\n *\n * @param log - The instance of logger\n * @param response - The response sent by the framework\n */\n protected onResolveForwardedResponseToFramework(\n log: ILogger,\n response: ServerlessResponse,\n ): void {\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:RESPONSE',\n () => ({\n response,\n }),\n );\n }\n\n /**\n * The hook executed before sending response to the serverless\n *\n * @param log - The instance of logger\n * @param statusCode - The status code of the response\n * @param body - The body of the response\n * @param headers - The headers of the response\n * @param isBase64Encoded - Indicates whether the response was encoded as binary or not\n */\n protected onForwardResponse(\n log: ILogger,\n statusCode: number,\n body: string,\n headers: SingleValueHeaders,\n isBase64Encoded: boolean,\n ) {\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE_PARAMS',\n () => ({\n statusCode,\n body,\n headers,\n isBase64Encoded,\n }),\n );\n }\n\n /**\n * The hook executed before sending response to the serverless with response from adapter\n *\n * @param log - The instance of logger\n * @param successResponse - The success response resolved by the adapter\n * @param body - The body of the response sent by the framework\n */\n protected onForwardResponseAdapterResponse(\n log: ILogger,\n successResponse: TResponse,\n body: string,\n ) {\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE',\n () => ({\n successResponse: util.inspect(successResponse, { depth: null }),\n body,\n }),\n );\n }\n\n //#endregion\n\n //#region Protected Methods\n\n /**\n * The function to forward the event to the framework\n *\n * @param app - The instance of the app (express, hapi, etc...)\n * @param framework - The framework that will process requests\n * @param event - The event sent by serverless\n * @param context - The context sent by serverless\n * @param adapter - The adapter resolved to this event\n * @param log - The instance of logger\n * @param binarySettings - The binary settings\n */\n protected async forwardRequestToFramework(\n app: TApp,\n framework: FrameworkContract<TApp>,\n event: TEvent,\n context: TContext,\n adapter: AdapterContract<TEvent, TContext, TResponse>,\n binarySettings: BinarySettings,\n log: ILogger,\n ): Promise<TResponse> {\n const requestValues = adapter.getRequest(event, context, log);\n\n this.onResolveRequestValues(log, requestValues);\n\n const [request, response] =\n this.getServerlessRequestResponseFromAdapterRequest(requestValues);\n\n framework.sendRequest(app, request, response);\n\n await waitForStreamComplete(response);\n\n this.onResolveForwardedResponseToFramework(log, response);\n\n return this.forwardResponse(event, response, adapter, binarySettings, log);\n }\n\n /**\n * The function to forward the response back to the serverless\n *\n * @param event - The event sent by serverless\n * @param response - The response of the framework\n * @param adapter - The adapter resolved to this event\n * @param binarySettings - The binary settings\n * @param log - The instance of logger\n */\n protected forwardResponse(\n event: TEvent,\n response: ServerlessResponse,\n adapter: AdapterContract<TEvent, TContext, TResponse>,\n binarySettings: BinarySettings,\n log: ILogger,\n ): TResponse {\n const statusCode = response.statusCode;\n const headers = ServerlessResponse.headers(response);\n const isBase64Encoded = isBinary(headers, binarySettings);\n const encoding = isBase64Encoded ? 'base64' : 'utf8';\n const body = ServerlessResponse.body(response).toString(encoding);\n const logBody = isBase64Encoded ? '[BASE64_ENCODED]' : body;\n\n this.onForwardResponse(log, statusCode, logBody, headers, isBase64Encoded);\n\n const successResponse = adapter.getResponse({\n event,\n statusCode,\n body,\n headers,\n isBase64Encoded,\n response,\n log,\n });\n\n this.onForwardResponseAdapterResponse(log, successResponse, logBody);\n\n return successResponse;\n }\n\n //#endregion\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\n//#region Imports\n\nimport type { Context } from '@azure/functions';\nimport type { BinarySettings } from '../../@types';\nimport type {\n AdapterContract,\n FrameworkContract,\n ResolverContract,\n ServerlessHandler,\n} from '../../contracts';\nimport {\n type ILogger,\n getDefaultIfUndefined,\n isInternalLogger,\n} from '../../core';\nimport { DefaultHandler } from '../default';\n\n//#endregion\n\n/**\n * The options to customize {@link AzureHandler}\n *\n * @breadcrumb Handlers / AzureHandler\n * @public\n */\nexport interface AzureHandlerOptions {\n /**\n * Indicates to use the context log instead console.log when logger is internal (created by the library)\n *\n * @defaultValue true\n */\n useContextLogWhenInternalLogger: boolean;\n}\n\n/**\n * The class that implements a serverless handler for Azure Function.\n *\n * When you don't specify a custom logger, the {@link Context} logger is used instead.\n *\n * @breadcrumb Handlers / AzureHandler\n * @public\n */\nexport class AzureHandler<\n TApp,\n TEvent,\n TCallback,\n TResponse,\n TReturn,\n> extends DefaultHandler<TApp, TEvent, Context, TCallback, TResponse, TReturn> {\n //#region Constructor\n\n /**\n * Default Constructor\n */\n constructor(protected readonly options?: AzureHandlerOptions) {\n super();\n }\n\n //#endregion\n\n //#region Public Methods\n\n /**\n * {@inheritDoc}\n */\n public override getHandler(\n app: TApp,\n framework: FrameworkContract<TApp>,\n adapters: AdapterContract<TEvent, Context, TResponse>[],\n resolverFactory: ResolverContract<\n TEvent,\n Context,\n TCallback,\n TResponse,\n TReturn\n >,\n binarySettings: BinarySettings,\n respondWithErrors: boolean,\n log: ILogger,\n ): ServerlessHandler<TReturn> {\n return (context: Context, event: TEvent) => {\n const useContextLogWhenInternalLogger = getDefaultIfUndefined(\n this.options?.useContextLogWhenInternalLogger,\n true,\n );\n\n if (isInternalLogger(log) && useContextLogWhenInternalLogger)\n log = this.createLoggerFromContext(context);\n\n const defaultHandler = super.getHandler(\n app,\n framework,\n adapters,\n resolverFactory,\n binarySettings,\n respondWithErrors,\n log,\n );\n\n // remove this from context\n // because user can mess it-up the things\n // @ts-ignore\n delete context.done;\n delete context.res;\n\n return defaultHandler(event, context, undefined);\n };\n }\n\n //#endregion\n\n //#region Protected Methods\n\n /**\n * Get the {@link ILogger} instance from logger of the context\n *\n * @param context - The Azure Context\n */\n protected createLoggerFromContext(context: Context): ILogger {\n return {\n error: context.log.error,\n debug: context.log.verbose,\n verbose: context.log.verbose,\n info: context.log.info,\n warn: context.log.warn,\n };\n }\n\n //#endregion\n}\n"],"mappings":"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","names":["azure_exports","__export","AzureHandler","__toCommonJS","import_node_http","HTTPS_PORT","ServerlessRequest","__name","method","url","headers","body","remoteAddress","NO_OP","import_node_http","getString","data","__name","headerEnd","BODY","HEADERS","addData","stream","data","__name","ServerlessResponse","_ServerlessResponse","method","socket","NO_OP","encoding","cb","string","getString","index","remainder","res","response","headers","key","value","statusCode","statusMessage","obj","headersObjOrArray","arrayHeaders","name","import_node_http","BaseHandler","__name","event","context","adapters","log","resolvedAdapters","adapter","requestValues","request","ServerlessRequest","response","ServerlessResponse","currentInvoke","setCurrentInvoke","event","context","currentInvoke","__name","isContentEncodingBinary","headers","binaryEncodingTypes","contentEncodings","value","__name","getContentType","contentTypeHeaderRaw","contentTypeHeader","contentTypeStart","isContentTypeBinary","binaryContentTypes","contentType","isBinary","binarySettings","NO_OP","__name","InternalLoggerSymbol","isInternalLogger","logger","InternalLoggerSymbol","__name","getDefaultIfUndefined","value","defaultValue","__name","import_node_stream","isStreamEnded","stream","__name","waitForStreamComplete","resolve","reject","isComplete","complete","err","import_node_util","DefaultHandler","BaseHandler","__name","app","framework","adapters","resolverFactory","binarySettings","respondWithErrors","log","event","context","callback","adapter","setCurrentInvoke","util","requestValues","response","statusCode","body","headers","isBase64Encoded","successResponse","request","waitForStreamComplete","ServerlessResponse","isBinary","encoding","logBody","AzureHandler","DefaultHandler","options","__name","app","framework","adapters","resolverFactory","binarySettings","respondWithErrors","log","context","event","useContextLogWhenInternalLogger","getDefaultIfUndefined","isInternalLogger","defaultHandler"]}
@@ -1,15 +1,22 @@
1
- import type { Context } from '@azure/functions';
2
- import { BinarySettings } from '../../@types';
3
- import { AdapterContract, FrameworkContract, ResolverContract, ServerlessHandler } from '../../contracts';
4
- import { ILogger } from '../../core';
5
- import { DefaultHandler } from '../default';
1
+ import { Context } from '@azure/functions';
2
+ import { B as BinarySettings, S as ServerlessHandler } from '../../handler.contract-TQk8iM8f.cjs';
3
+ import { A as AdapterContract, R as ResolverContract } from '../../adapter.contract-y5xSjOjo.cjs';
4
+ import { F as FrameworkContract } from '../../framework.contract-YnJ-fl1w.cjs';
5
+ import { I as ILogger } from '../../logger-9me5n48P.cjs';
6
+ import { DefaultHandler } from '../default/index.cjs';
7
+ import '../../headers-K2qbcurv.cjs';
8
+ import 'http';
9
+ import 'node:http';
10
+ import '../../base-handler-peEBoKtZ.cjs';
11
+ import '../../request-DNNIV9ub.cjs';
12
+
6
13
  /**
7
14
  * The options to customize {@link AzureHandler}
8
15
  *
9
16
  * @breadcrumb Handlers / AzureHandler
10
17
  * @public
11
18
  */
12
- export interface AzureHandlerOptions {
19
+ interface AzureHandlerOptions {
13
20
  /**
14
21
  * Indicates to use the context log instead console.log when logger is internal (created by the library)
15
22
  *
@@ -25,7 +32,7 @@ export interface AzureHandlerOptions {
25
32
  * @breadcrumb Handlers / AzureHandler
26
33
  * @public
27
34
  */
28
- export declare class AzureHandler<TApp, TEvent, TCallback, TResponse, TReturn> extends DefaultHandler<TApp, TEvent, Context, TCallback, TResponse, TReturn> {
35
+ declare class AzureHandler<TApp, TEvent, TCallback, TResponse, TReturn> extends DefaultHandler<TApp, TEvent, Context, TCallback, TResponse, TReturn> {
29
36
  protected readonly options?: AzureHandlerOptions | undefined;
30
37
  /**
31
38
  * Default Constructor
@@ -42,4 +49,5 @@ export declare class AzureHandler<TApp, TEvent, TCallback, TResponse, TReturn> e
42
49
  */
43
50
  protected createLoggerFromContext(context: Context): ILogger;
44
51
  }
45
- //# sourceMappingURL=azure.handler.d.ts.map
52
+
53
+ export { AzureHandler, type AzureHandlerOptions };
@@ -1,2 +1,53 @@
1
- export * from './azure.handler';
2
- //# sourceMappingURL=index.d.ts.map
1
+ import { Context } from '@azure/functions';
2
+ import { B as BinarySettings, S as ServerlessHandler } from '../../handler.contract-8Cb7qLSi.js';
3
+ import { A as AdapterContract, R as ResolverContract } from '../../adapter.contract-EQE3rlgO.js';
4
+ import { F as FrameworkContract } from '../../framework.contract-YnJ-fl1w.js';
5
+ import { I as ILogger } from '../../logger-9me5n48P.js';
6
+ import { DefaultHandler } from '../default/index.js';
7
+ import '../../headers-K2qbcurv.js';
8
+ import 'http';
9
+ import 'node:http';
10
+ import '../../base-handler-fYEk59Xq.js';
11
+ import '../../request-sVa4pxmx.js';
12
+
13
+ /**
14
+ * The options to customize {@link AzureHandler}
15
+ *
16
+ * @breadcrumb Handlers / AzureHandler
17
+ * @public
18
+ */
19
+ interface AzureHandlerOptions {
20
+ /**
21
+ * Indicates to use the context log instead console.log when logger is internal (created by the library)
22
+ *
23
+ * @defaultValue true
24
+ */
25
+ useContextLogWhenInternalLogger: boolean;
26
+ }
27
+ /**
28
+ * The class that implements a serverless handler for Azure Function.
29
+ *
30
+ * When you don't specify a custom logger, the {@link Context} logger is used instead.
31
+ *
32
+ * @breadcrumb Handlers / AzureHandler
33
+ * @public
34
+ */
35
+ declare class AzureHandler<TApp, TEvent, TCallback, TResponse, TReturn> extends DefaultHandler<TApp, TEvent, Context, TCallback, TResponse, TReturn> {
36
+ protected readonly options?: AzureHandlerOptions | undefined;
37
+ /**
38
+ * Default Constructor
39
+ */
40
+ constructor(options?: AzureHandlerOptions | undefined);
41
+ /**
42
+ * {@inheritDoc}
43
+ */
44
+ getHandler(app: TApp, framework: FrameworkContract<TApp>, adapters: AdapterContract<TEvent, Context, TResponse>[], resolverFactory: ResolverContract<TEvent, Context, TCallback, TResponse, TReturn>, binarySettings: BinarySettings, respondWithErrors: boolean, log: ILogger): ServerlessHandler<TReturn>;
45
+ /**
46
+ * Get the {@link ILogger} instance from logger of the context
47
+ *
48
+ * @param context - The Azure Context
49
+ */
50
+ protected createLoggerFromContext(context: Context): ILogger;
51
+ }
52
+
53
+ export { AzureHandler, type AzureHandlerOptions };
@@ -0,0 +1,2 @@
1
+ import{a as s}from"../../chunk-NSO4L3EI.mjs";import{r as n,s as a}from"../../chunk-HU5XBQCP.mjs";import{a as o}from"../../chunk-OYOJMOFP.mjs";var p=class extends s{constructor(e){super();this.options=e}static{o(this,"AzureHandler")}getHandler(e,l,g,i,d,u,t){return(r,C)=>{let T=a(this.options?.useContextLogWhenInternalLogger,!0);n(t)&&T&&(t=this.createLoggerFromContext(r));let f=super.getHandler(e,l,g,i,d,u,t);return delete r.done,delete r.res,f(C,r,void 0)}}createLoggerFromContext(e){return{error:e.log.error,debug:e.log.verbose,verbose:e.log.verbose,info:e.log.info,warn:e.log.warn}}};export{p as AzureHandler};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/handlers/azure/azure.handler.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\n//#region Imports\n\nimport type { Context } from '@azure/functions';\nimport type { BinarySettings } from '../../@types';\nimport type {\n AdapterContract,\n FrameworkContract,\n ResolverContract,\n ServerlessHandler,\n} from '../../contracts';\nimport {\n type ILogger,\n getDefaultIfUndefined,\n isInternalLogger,\n} from '../../core';\nimport { DefaultHandler } from '../default';\n\n//#endregion\n\n/**\n * The options to customize {@link AzureHandler}\n *\n * @breadcrumb Handlers / AzureHandler\n * @public\n */\nexport interface AzureHandlerOptions {\n /**\n * Indicates to use the context log instead console.log when logger is internal (created by the library)\n *\n * @defaultValue true\n */\n useContextLogWhenInternalLogger: boolean;\n}\n\n/**\n * The class that implements a serverless handler for Azure Function.\n *\n * When you don't specify a custom logger, the {@link Context} logger is used instead.\n *\n * @breadcrumb Handlers / AzureHandler\n * @public\n */\nexport class AzureHandler<\n TApp,\n TEvent,\n TCallback,\n TResponse,\n TReturn,\n> extends DefaultHandler<TApp, TEvent, Context, TCallback, TResponse, TReturn> {\n //#region Constructor\n\n /**\n * Default Constructor\n */\n constructor(protected readonly options?: AzureHandlerOptions) {\n super();\n }\n\n //#endregion\n\n //#region Public Methods\n\n /**\n * {@inheritDoc}\n */\n public override getHandler(\n app: TApp,\n framework: FrameworkContract<TApp>,\n adapters: AdapterContract<TEvent, Context, TResponse>[],\n resolverFactory: ResolverContract<\n TEvent,\n Context,\n TCallback,\n TResponse,\n TReturn\n >,\n binarySettings: BinarySettings,\n respondWithErrors: boolean,\n log: ILogger,\n ): ServerlessHandler<TReturn> {\n return (context: Context, event: TEvent) => {\n const useContextLogWhenInternalLogger = getDefaultIfUndefined(\n this.options?.useContextLogWhenInternalLogger,\n true,\n );\n\n if (isInternalLogger(log) && useContextLogWhenInternalLogger)\n log = this.createLoggerFromContext(context);\n\n const defaultHandler = super.getHandler(\n app,\n framework,\n adapters,\n resolverFactory,\n binarySettings,\n respondWithErrors,\n log,\n );\n\n // remove this from context\n // because user can mess it-up the things\n // @ts-ignore\n delete context.done;\n delete context.res;\n\n return defaultHandler(event, context, undefined);\n };\n }\n\n //#endregion\n\n //#region Protected Methods\n\n /**\n * Get the {@link ILogger} instance from logger of the context\n *\n * @param context - The Azure Context\n */\n protected createLoggerFromContext(context: Context): ILogger {\n return {\n error: context.log.error,\n debug: context.log.verbose,\n verbose: context.log.verbose,\n info: context.log.info,\n warn: context.log.warn,\n };\n }\n\n //#endregion\n}\n"],"mappings":"8IA2CO,IAAMA,EAAN,cAMGC,CAAqE,CAM7E,YAA+BC,EAA+B,CAC5D,MAAM,EADuB,aAAAA,CAE/B,CAzDF,MAiD+E,CAAAC,EAAA,qBAiB7D,WACdC,EACAC,EACAC,EACAC,EAOAC,EACAC,EACAC,EAC4B,CAC5B,MAAO,CAACC,EAAkBC,IAAkB,CAC1C,IAAMC,EAAkCC,EACtC,KAAK,SAAS,gCACd,EACF,EAEIC,EAAiBL,CAAG,GAAKG,IAC3BH,EAAM,KAAK,wBAAwBC,CAAO,GAE5C,IAAMK,EAAiB,MAAM,WAC3BZ,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,CACF,EAKA,cAAOC,EAAQ,KACf,OAAOA,EAAQ,IAERK,EAAeJ,EAAOD,EAAS,MAAS,CACjD,CACF,CAWU,wBAAwBA,EAA2B,CAC3D,MAAO,CACL,MAAOA,EAAQ,IAAI,MACnB,MAAOA,EAAQ,IAAI,QACnB,QAASA,EAAQ,IAAI,QACrB,KAAMA,EAAQ,IAAI,KAClB,KAAMA,EAAQ,IAAI,IACpB,CACF,CAGF","names":["AzureHandler","DefaultHandler","options","__name","app","framework","adapters","resolverFactory","binarySettings","respondWithErrors","log","context","event","useContextLogWhenInternalLogger","getDefaultIfUndefined","isInternalLogger","defaultHandler"]}
@@ -0,0 +1,4 @@
1
+ "use strict";var O=Object.create;var y=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var s=(t,e)=>y(t,"name",{value:e,configurable:!0});var D=(t,e)=>{for(var r in e)y(t,r,{get:e[r],enumerable:!0})},x=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of I(e))!V.call(t,o)&&o!==r&&y(t,o,{get:()=>e[o],enumerable:!(n=P(e,o))||n.enumerable});return t};var N=(t,e,r)=>(r=t!=null?O(F(t)):{},x(e||!t||!t.__esModule?y(r,"default",{value:t,enumerable:!0}):r,t)),W=t=>x(y({},"__esModule",{value:!0}),t);var Y={};D(Y,{DefaultHandler:()=>A});module.exports=W(Y);var S=N(require("util"),1);var b=require("http");var U=443,E=class extends b.IncomingMessage{static{s(this,"ServerlessRequest")}constructor({method:e,url:r,headers:n,body:o,remoteAddress:i}){super({encrypted:!0,readable:!1,remoteAddress:i,address:()=>({port:U}),end:u,destroy:u}),this.statusCode=200,this.statusMessage="OK",this.complete=!0,this.httpVersion="1.1",this.httpVersionMajor=1,this.httpVersionMinor=1,this.method=e,this.headers=n,this.body=o,this.url=r,this.ip=i,this._read=()=>{this.push(o),this.push(null)}}ip;body};var L=require("http");function v(t){if(Buffer.isBuffer(t))return t.toString("utf8");if(typeof t=="string")return t;if(t instanceof Uint8Array)return new TextDecoder().decode(t);throw new Error(`response.write() of unexpected type: ${typeof t}`)}s(v,"getString");var C=`\r
2
+ \r
3
+ `,m=Symbol("Response body"),R=Symbol("Response headers");function w(t,e){if(Buffer.isBuffer(e)||typeof e=="string"||e instanceof Uint8Array)t[m].push(Buffer.from(e));else throw new Error(`response.write() of unexpected type: ${typeof e}`)}s(w,"addData");var f=class t extends L.ServerResponse{static{s(this,"ServerlessResponse")}constructor({method:e}){super({method:e}),this[m]=[],this[R]={},this.useChunkedEncodingByDefault=!1,this.chunkedEncoding=!1,this._header="";let r={_writableState:{},writable:!0,on:u,removeListener:u,destroy:u,cork:u,uncork:u,write:(n,o,i)=>{if(typeof o=="function"&&(i=o,o=null),this._header===""||this._wroteHeader)w(this,n);else{let d=v(n),a=d.indexOf(C);if(a!==-1){let p=d.slice(a+C.length);p&&w(this,p),this._wroteHeader=!0}}typeof i=="function"&&i()}};this.assignSocket(r)}_header;_headers;_wroteHeader;[m];[R];get headers(){return this[R]}static from(e){let r=new t({method:e.method});return r.statusCode=e.statusCode||0,r[R]=e.headers,r[m]=e.body?[Buffer.from(e.body)]:[],r.end(),r}static body(e){return Buffer.concat(e[m])}static headers(e){let r=e.getHeaders();return Object.assign(r,e[R])}setHeader(e,r){this._wroteHeader?this[R][e]=r:super.setHeader(e,r)}writeHead(e,r,n){let o=typeof r=="string"?n:r,i=Array.isArray(o)?o:[o||{}];for(let d of i)for(let a in d)if(this.setHeader(a,d[a]),!this._wroteHeader)break;return this.callNativeWriteHead(e,r,n)}callNativeWriteHead(e,r,n){return super.writeHead(e,r,n)}};var q=require("http");var T=class{static{s(this,"BaseHandler")}getAdapterByEventAndContext(e,r,n,o){let i=n.filter(d=>d.canHandle(e,r,o));if(i.length===0)throw new Error("SERVERLESS_ADAPTER: Couldn't find adapter to handle this event.");if(i.length>1)throw new Error(`SERVERLESS_ADAPTER: Two or more adapters was resolved by the event, the adapters are: ${n.map(d=>d.getAdapterName()).join(", ")}.`);return i[0]}getServerlessRequestResponseFromAdapterRequest(e){let r=new E({method:e.method,headers:e.headers,body:e.body,remoteAddress:e.remoteAddress,url:e.path}),n=new f({method:e.method});return[r,n]}};var k={context:null,event:null};function B({event:t,context:e}){k.event=t,k.context=e}s(B,"setCurrentInvoke");function M(t,e){let r=t["content-encoding"];return r?(Array.isArray(r)||(r=r.split(",")),r.some(n=>e.includes(n.trim()))):!1}s(M,"isContentEncodingBinary");function j(t){let e=t["content-type"],r=Array.isArray(e)?e[0]||"":e||"";if(!e)return"";let n=r.indexOf(";");return n===-1?r:r.slice(0,n)}s(j,"getContentType");function $(t,e){let r=j(t);return r?e.includes(r.trim()):!1}s($,"isContentTypeBinary");function _(t,e){return"isBinary"in e?e.isBinary===!1?!1:e.isBinary(t):M(t,e.contentEncodings)||$(t,e.contentTypes)}s(_,"isBinary");var u=s(()=>{},"NO_OP");var Be=Symbol("InternalLogger");var Ve=require("stream");function Q(t){return!!("readableEnded"in t&&t.readableEnded||"writableEnded"in t&&t.writableEnded)}s(Q,"isStreamEnded");function H(t){return Q(t)?Promise.resolve(t):new Promise((e,r)=>{let n=!1;function o(i){n||(n=!0,t.removeListener("error",o),t.removeListener("end",o),t.removeListener("finish",o),i?r(i):e(t))}s(o,"complete"),t.once("error",o),t.once("end",o),t.once("finish",o)})}s(H,"waitForStreamComplete");var A=class extends T{static{s(this,"DefaultHandler")}getHandler(e,r,n,o,i,d,a){return(p,l,c)=>{this.onReceiveRequest(a,p,l,i,d);let g=this.getAdapterByEventAndContext(p,l,n,a);return this.onResolveAdapter(a,g),B({event:p,context:l}),o.createResolver({event:p,context:l,callback:c,log:a,respondWithErrors:d,adapter:g}).run(()=>this.forwardRequestToFramework(e,r,p,l,g,i,a))}}onReceiveRequest(e,r,n,o,i){e.debug("SERVERLESS_ADAPTER:PROXY",()=>({event:S.default.inspect(r,{depth:null}),context:S.default.inspect(n,{depth:null}),binarySettings:o,respondWithErrors:i}))}onResolveAdapter(e,r){e.debug("SERVERLESS_ADAPTER:RESOLVED_ADAPTER_NAME: ",r.getAdapterName())}onResolveRequestValues(e,r){e.debug("SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:REQUEST_VALUES",()=>({requestValues:{...r,body:r.body?.toString()}}))}onResolveForwardedResponseToFramework(e,r){e.debug("SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:RESPONSE",()=>({response:r}))}onForwardResponse(e,r,n,o,i){e.debug("SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE_PARAMS",()=>({statusCode:r,body:n,headers:o,isBase64Encoded:i}))}onForwardResponseAdapterResponse(e,r,n){e.debug("SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE",()=>({successResponse:S.default.inspect(r,{depth:null}),body:n}))}async forwardRequestToFramework(e,r,n,o,i,d,a){let p=i.getRequest(n,o,a);this.onResolveRequestValues(a,p);let[l,c]=this.getServerlessRequestResponseFromAdapterRequest(p);return r.sendRequest(e,l,c),await H(c),this.onResolveForwardedResponseToFramework(a,c),this.forwardResponse(n,c,i,d,a)}forwardResponse(e,r,n,o,i){let d=r.statusCode,a=f.headers(r),p=_(a,o),l=p?"base64":"utf8",c=f.body(r).toString(l),g=p?"[BASE64_ENCODED]":c;this.onForwardResponse(i,d,g,a,p);let h=n.getResponse({event:e,statusCode:d,body:c,headers:a,isBase64Encoded:p,response:r,log:i});return this.onForwardResponseAdapterResponse(i,h,g),h}};0&&(module.exports={DefaultHandler});
4
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/handlers/default/index.ts","../../../src/handlers/default/default.handler.ts","../../../src/network/request.ts","../../../src/network/response.ts","../../../src/network/utils.ts","../../../src/network/response-stream.ts","../../../src/core/base-handler.ts","../../../src/core/current-invoke.ts","../../../src/core/is-binary.ts","../../../src/core/no-op.ts","../../../src/core/logger.ts","../../../src/core/stream.ts"],"sourcesContent":["export * from './default.handler';\n","//#region Imports\n\nimport util from 'node:util';\nimport type { BinarySettings, SingleValueHeaders } from '../../@types';\nimport type {\n AdapterContract,\n AdapterRequest,\n FrameworkContract,\n ResolverContract,\n ServerlessHandler,\n} from '../../contracts';\nimport {\n BaseHandler,\n type ILogger,\n isBinary,\n setCurrentInvoke,\n waitForStreamComplete,\n} from '../../core';\nimport { ServerlessResponse } from '../../network';\n\n//#endregion\n\n/**\n * The class that implements a default serverless handler consisting of a function with event, context and callback parameters respectively\n *\n * @breadcrumb Handlers / DefaultHandler\n * @public\n */\nexport class DefaultHandler<\n TApp,\n TEvent,\n TContext,\n TCallback,\n TResponse,\n TReturn,\n> extends BaseHandler<TApp, TEvent, TContext, TCallback, TResponse, TReturn> {\n //#region Public Methods\n\n /**\n * {@inheritDoc}\n */\n public getHandler(\n app: TApp,\n framework: FrameworkContract<TApp>,\n adapters: AdapterContract<TEvent, TContext, TResponse>[],\n resolverFactory: ResolverContract<\n TEvent,\n TContext,\n TCallback,\n TResponse,\n TReturn\n >,\n binarySettings: BinarySettings,\n respondWithErrors: boolean,\n log: ILogger,\n ): ServerlessHandler<TReturn> {\n return (event: TEvent, context: TContext, callback?: TCallback) => {\n this.onReceiveRequest(\n log,\n event,\n context,\n binarySettings,\n respondWithErrors,\n );\n\n const adapter = this.getAdapterByEventAndContext(\n event,\n context,\n adapters,\n log,\n );\n\n this.onResolveAdapter(log, adapter);\n\n setCurrentInvoke({ event, context });\n\n const resolver = resolverFactory.createResolver({\n event,\n context,\n callback,\n log,\n respondWithErrors,\n adapter,\n });\n\n return resolver.run(() =>\n this.forwardRequestToFramework(\n app,\n framework,\n event,\n context,\n adapter,\n binarySettings,\n log,\n ),\n );\n };\n }\n\n //#endregion\n\n //#region Hooks\n\n /**\n * The hook executed on receive a request, before the request is being processed\n *\n * @param log - The instance of logger\n * @param event - The event sent by serverless\n * @param context - The context sent by serverless\n * @param binarySettings - The binary settings\n * @param respondWithErrors - Indicates whether the error stack should be included in the response or not\n */\n protected onReceiveRequest(\n log: ILogger,\n event: TEvent,\n context: TContext,\n binarySettings: BinarySettings,\n respondWithErrors: boolean,\n ): void {\n log.debug('SERVERLESS_ADAPTER:PROXY', () => ({\n event: util.inspect(event, { depth: null }),\n context: util.inspect(context, { depth: null }),\n binarySettings,\n respondWithErrors,\n }));\n }\n\n /**\n * The hook executed after resolve the adapter that will be used to handle the request and response\n *\n * @param log - The instance of logger\n * @param adapter - The adapter resolved\n */\n protected onResolveAdapter(\n log: ILogger,\n adapter: AdapterContract<TEvent, TContext, TResponse>,\n ): void {\n log.debug(\n 'SERVERLESS_ADAPTER:RESOLVED_ADAPTER_NAME: ',\n adapter.getAdapterName(),\n );\n }\n\n /**\n * The hook executed after resolves the request values that will be sent to the framework\n *\n * @param log - The instance of logger\n * @param requestValues - The request values returned by the adapter\n */\n protected onResolveRequestValues(\n log: ILogger,\n requestValues: AdapterRequest,\n ): void {\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:REQUEST_VALUES',\n () => ({\n requestValues: {\n ...requestValues,\n body: requestValues.body?.toString(),\n },\n }),\n );\n }\n\n /**\n * The hook executed after handling the response sent by the framework\n *\n * @param log - The instance of logger\n * @param response - The response sent by the framework\n */\n protected onResolveForwardedResponseToFramework(\n log: ILogger,\n response: ServerlessResponse,\n ): void {\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_REQUEST_TO_FRAMEWORK:RESPONSE',\n () => ({\n response,\n }),\n );\n }\n\n /**\n * The hook executed before sending response to the serverless\n *\n * @param log - The instance of logger\n * @param statusCode - The status code of the response\n * @param body - The body of the response\n * @param headers - The headers of the response\n * @param isBase64Encoded - Indicates whether the response was encoded as binary or not\n */\n protected onForwardResponse(\n log: ILogger,\n statusCode: number,\n body: string,\n headers: SingleValueHeaders,\n isBase64Encoded: boolean,\n ) {\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE_PARAMS',\n () => ({\n statusCode,\n body,\n headers,\n isBase64Encoded,\n }),\n );\n }\n\n /**\n * The hook executed before sending response to the serverless with response from adapter\n *\n * @param log - The instance of logger\n * @param successResponse - The success response resolved by the adapter\n * @param body - The body of the response sent by the framework\n */\n protected onForwardResponseAdapterResponse(\n log: ILogger,\n successResponse: TResponse,\n body: string,\n ) {\n log.debug(\n 'SERVERLESS_ADAPTER:FORWARD_RESPONSE:EVENT_SOURCE_RESPONSE',\n () => ({\n successResponse: util.inspect(successResponse, { depth: null }),\n body,\n }),\n );\n }\n\n //#endregion\n\n //#region Protected Methods\n\n /**\n * The function to forward the event to the framework\n *\n * @param app - The instance of the app (express, hapi, etc...)\n * @param framework - The framework that will process requests\n * @param event - The event sent by serverless\n * @param context - The context sent by serverless\n * @param adapter - The adapter resolved to this event\n * @param log - The instance of logger\n * @param binarySettings - The binary settings\n */\n protected async forwardRequestToFramework(\n app: TApp,\n framework: FrameworkContract<TApp>,\n event: TEvent,\n context: TContext,\n adapter: AdapterContract<TEvent, TContext, TResponse>,\n binarySettings: BinarySettings,\n log: ILogger,\n ): Promise<TResponse> {\n const requestValues = adapter.getRequest(event, context, log);\n\n this.onResolveRequestValues(log, requestValues);\n\n const [request, response] =\n this.getServerlessRequestResponseFromAdapterRequest(requestValues);\n\n framework.sendRequest(app, request, response);\n\n await waitForStreamComplete(response);\n\n this.onResolveForwardedResponseToFramework(log, response);\n\n return this.forwardResponse(event, response, adapter, binarySettings, log);\n }\n\n /**\n * The function to forward the response back to the serverless\n *\n * @param event - The event sent by serverless\n * @param response - The response of the framework\n * @param adapter - The adapter resolved to this event\n * @param binarySettings - The binary settings\n * @param log - The instance of logger\n */\n protected forwardResponse(\n event: TEvent,\n response: ServerlessResponse,\n adapter: AdapterContract<TEvent, TContext, TResponse>,\n binarySettings: BinarySettings,\n log: ILogger,\n ): TResponse {\n const statusCode = response.statusCode;\n const headers = ServerlessResponse.headers(response);\n const isBase64Encoded = isBinary(headers, binarySettings);\n const encoding = isBase64Encoded ? 'base64' : 'utf8';\n const body = ServerlessResponse.body(response).toString(encoding);\n const logBody = isBase64Encoded ? '[BASE64_ENCODED]' : body;\n\n this.onForwardResponse(log, statusCode, logBody, headers, isBase64Encoded);\n\n const successResponse = adapter.getResponse({\n event,\n statusCode,\n body,\n headers,\n isBase64Encoded,\n response,\n log,\n });\n\n this.onForwardResponseAdapterResponse(log, successResponse, logBody);\n\n return successResponse;\n }\n\n //#endregion\n}\n","// ATTRIBUTION: https://github.com/dougmoscrop/serverless-http\nimport { IncomingMessage } from 'node:http';\nimport type { AddressInfo } from 'node:net';\nimport type { SingleValueHeaders } from '../@types';\nimport { NO_OP } from '../core';\n\nconst HTTPS_PORT = 443;\n\n/**\n * The properties to create a {@link ServerlessRequest}\n *\n * @breadcrumb Network / ServerlessRequest\n * @public\n */\nexport interface ServerlessRequestProps {\n /**\n * The HTTP Method of the request\n */\n method: string;\n\n /**\n * The URL requested\n */\n url: string;\n\n /**\n * The headers from the event source\n */\n headers: SingleValueHeaders;\n\n /**\n * The body from the event source\n */\n body?: Buffer | Uint8Array;\n\n /**\n * The IP Address from caller\n */\n remoteAddress?: string;\n}\n\n/**\n * The class that represents an {@link http#IncomingMessage} created by the library to represent an actual request to the framework.\n *\n * @breadcrumb Network / ServerlessRequest\n * @public\n */\nexport class ServerlessRequest extends IncomingMessage {\n constructor({\n method,\n url,\n headers,\n body,\n remoteAddress,\n }: ServerlessRequestProps) {\n super({\n encrypted: true,\n readable: false,\n remoteAddress,\n address: () => ({ port: HTTPS_PORT }) as AddressInfo,\n end: NO_OP,\n destroy: NO_OP,\n } as any);\n\n this.statusCode = 200;\n this.statusMessage = 'OK';\n this.complete = true;\n this.httpVersion = '1.1';\n this.httpVersionMajor = 1;\n this.httpVersionMinor = 1;\n this.method = method;\n this.headers = headers;\n this.body = body;\n this.url = url;\n this.ip = remoteAddress;\n\n this._read = () => {\n this.push(body);\n this.push(null);\n };\n }\n\n ip?: string;\n body?: Buffer | Uint8Array;\n}\n","// ATTRIBUTION: https://github.com/dougmoscrop/serverless-http\nimport { IncomingMessage, ServerResponse } from 'node:http';\nimport type { Socket } from 'node:net';\nimport { NO_OP } from '../core';\nimport { getString } from './utils';\n\nconst headerEnd = '\\r\\n\\r\\n';\n\nconst BODY = Symbol('Response body');\nconst HEADERS = Symbol('Response headers');\n\nfunction addData(stream: ServerlessResponse, data: Uint8Array | string) {\n if (\n Buffer.isBuffer(data) ||\n typeof data === 'string' ||\n data instanceof Uint8Array\n )\n stream[BODY].push(Buffer.from(data));\n else throw new Error(`response.write() of unexpected type: ${typeof data}`);\n}\n\n/**\n * The properties to create a {@link ServerlessResponse}.\n *\n * @breadcrumb Network / ServerlessResponse\n * @public\n */\nexport interface ServerlessResponseProps {\n /**\n * The HTTP Method from request\n */\n method?: string;\n}\n\n/**\n * The class that represents a response instance used to send to the framework and wait until the framework finishes processing the request.\n * Once it's happens, we use the properties from this response to built the response to the cloud.\n *\n * @breadcrumb Network / ServerlessResponse\n * @public\n */\nexport class ServerlessResponse extends ServerResponse {\n constructor({ method }: ServerlessResponseProps) {\n super({ method } as any);\n\n this[BODY] = [];\n this[HEADERS] = {};\n\n this.useChunkedEncodingByDefault = false;\n this.chunkedEncoding = false;\n this._header = '';\n\n const socket: Partial<Socket> & { _writableState: any } = {\n _writableState: {},\n writable: true,\n on: NO_OP,\n removeListener: NO_OP,\n destroy: NO_OP,\n cork: NO_OP,\n uncork: NO_OP,\n write: (\n data: Uint8Array | string,\n encoding?: string | null | (() => void),\n cb?: () => void,\n ): any => {\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (this._header === '' || this._wroteHeader) addData(this, data);\n else {\n const string = getString(data);\n const index = string.indexOf(headerEnd);\n\n if (index !== -1) {\n const remainder = string.slice(index + headerEnd.length);\n\n if (remainder) addData(this, remainder);\n\n this._wroteHeader = true;\n }\n }\n\n if (typeof cb === 'function') cb();\n },\n };\n\n this.assignSocket(socket as unknown as Socket);\n }\n\n _header: string;\n _headers?: Record<any, any>;\n _wroteHeader?: boolean;\n\n [BODY]: any[];\n [HEADERS]: Record<any, any>;\n\n get headers(): Record<any, any> {\n return this[HEADERS];\n }\n\n static from(res: IncomingMessage) {\n const response = new ServerlessResponse({ method: res.method });\n\n response.statusCode = res.statusCode || 0;\n response[HEADERS] = res.headers;\n response[BODY] = (res as any).body ? [Buffer.from((res as any).body)] : [];\n response.end();\n\n return response;\n }\n\n static body(res: ServerlessResponse): Buffer {\n return Buffer.concat(res[BODY]);\n }\n\n static headers(res: ServerlessResponse) {\n const headers = res.getHeaders();\n\n return Object.assign(headers, res[HEADERS]);\n }\n\n override setHeader(\n key: string,\n value: number | string | readonly string[],\n ): any {\n if (this._wroteHeader) this[HEADERS][key] = value;\n else super.setHeader(key, value);\n }\n\n override writeHead(\n statusCode: number,\n statusMessage?: string | any | any[],\n obj?: any | any[],\n ): any {\n const headersObjOrArray =\n typeof statusMessage === 'string' ? obj : statusMessage;\n\n const arrayHeaders = Array.isArray(headersObjOrArray)\n ? headersObjOrArray\n : [headersObjOrArray || {}];\n\n for (const headers of arrayHeaders) {\n for (const name in headers) {\n this.setHeader(name, headers[name]!);\n\n if (!this._wroteHeader) {\n // we only need to initiate super.headers once\n // writeHead will add the other headers itself\n break;\n }\n }\n }\n\n return this.callNativeWriteHead(statusCode, statusMessage, obj);\n }\n\n /**\n * I use ignore here because in nodejs 12.x, statusMessage can be string | OutgoingHttpHeaders\n * But in nodejs \\>=14.x, statusMessage can also be OutgoingHttpHeaders[]\n * I take care of these cases above, but here I can't handle it well, so I give up\n * nodejs 12.x ref: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node/v12/http.d.ts#L229\n * nodejs 14.x ref: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node/v14/http.d.ts#L263\n */\n protected callNativeWriteHead(\n statusCode: number,\n statusMessage?: string | any | any[],\n obj?: any | any[],\n ): this {\n return super.writeHead(statusCode, statusMessage, obj);\n }\n}\n","/**\n * Get the data from a buffer, string, or Uint8Array\n *\n * @breadcrumb Network\n * @param data - The data that was written inside the stream\n */\nexport function getString(data: Buffer | string | unknown) {\n if (Buffer.isBuffer(data)) return data.toString('utf8');\n else if (typeof data === 'string') return data;\n else if (data instanceof Uint8Array) return new TextDecoder().decode(data);\n else throw new Error(`response.write() of unexpected type: ${typeof data}`);\n}\n","import { ServerResponse } from 'node:http';\nimport type { Socket } from 'node:net';\nimport type { Writable } from 'node:stream';\nimport type { BothValueHeaders } from '../@types';\nimport { type ILogger, NO_OP, parseHeaders } from '../core';\nimport { getString } from './utils';\n\nconst endChunked = '0\\r\\n\\r\\n';\nconst headerEnd = '\\r\\n\\r\\n';\nconst endStatusSeparator = '\\r\\n';\n\n/**\n * The properties to create a {@link ServerlessStreamResponse}.\n *\n * @breadcrumb Network / ServerlessStreamResponse\n * @public\n */\nexport interface ServerlessStreamResponseProps {\n /**\n * The HTTP Method from request\n */\n method?: string;\n\n /**\n * The callback to receive the headers when they are written to the stream\n * You need to return a writable stream be able to continue writing the response\n *\n * @param statusCode - The status code of the response\n * @param headers - The headers of the response\n */\n onReceiveHeaders: (statusCode: number, headers: BothValueHeaders) => Writable;\n\n /**\n * Instance of the logger\n */\n log: ILogger;\n}\n\n/**\n * The class that represents a response instance used to send to the framework and wait until the framework finishes processing the request.\n * This response is specially built to deal with transfer-encoding: chunked\n *\n * @breadcrumb Network / ServerlessStreamResponse\n * @public\n */\nexport class ServerlessStreamResponse extends ServerResponse {\n constructor({\n method,\n onReceiveHeaders,\n log,\n }: ServerlessStreamResponseProps) {\n super({ method } as any);\n\n this.useChunkedEncodingByDefault = true;\n this.chunkedEncoding = true;\n\n let internalWritable: Writable | null = null;\n let isFirstCall = true;\n // this ignore is used because I need to ignore these write calls:\n // https://github.com/nodejs/node/blob/main/lib/_http_outgoing.js#L934-L935\n // https://github.com/nodejs/node/blob/main/lib/_http_outgoing.js#L937\n let writesToIgnore = 0;\n\n const socket: Partial<Socket> & { _writableState: any } = {\n _writableState: {},\n writable: true,\n on: NO_OP,\n removeListener: NO_OP,\n destroy: NO_OP,\n cork: NO_OP,\n uncork: NO_OP,\n write: (\n data: Uint8Array | string,\n encoding?: string | null | (() => void),\n cb?: () => void,\n ): any => {\n // very unlikely, I don't even know how to reproduce this, but exist on types\n // istanbul ignore if\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n log.debug('SERVERLESS_ADAPTER:RESPONSE_STREAM:DATA', () => ({\n data: Buffer.isBuffer(data) ? data.toString('utf8') : data,\n encoding,\n }));\n\n if (!isFirstCall && internalWritable) {\n if (data === endChunked) {\n internalWritable.end(cb);\n\n return true;\n }\n\n if (writesToIgnore > 0) {\n writesToIgnore--;\n return true;\n }\n\n internalWritable.write(data, cb);\n writesToIgnore = 3;\n } else if (isFirstCall) {\n isFirstCall = false;\n\n const stringData = getString(data);\n const endStatusIndex = stringData.indexOf(endStatusSeparator);\n const status = +stringData.slice(0, endStatusIndex).split(' ')[1];\n\n const headerData = stringData.slice(\n endStatusIndex + 2,\n stringData.indexOf(headerEnd),\n );\n const headers = parseHeaders(headerData);\n log.debug('SERVERLESS_ADAPTER:RESPONSE_STREAM:FRAMEWORK_HEADERS', {\n headers,\n });\n\n writesToIgnore = 1;\n internalWritable = onReceiveHeaders(status, headers);\n }\n\n return true;\n },\n };\n\n this.assignSocket(socket as unknown as Socket);\n }\n}\n","//#region Imports\n\nimport type { BinarySettings } from '../@types';\nimport type {\n AdapterContract,\n AdapterRequest,\n FrameworkContract,\n HandlerContract,\n ResolverContract,\n ServerlessHandler,\n} from '../contracts';\nimport { ServerlessRequest, ServerlessResponse } from '../network';\nimport type { ILogger } from './index';\n\n//#endregion\n\n/**\n * The abstract class that represents the base class for a handler\n *\n * @breadcrumb Core\n * @public\n */\nexport abstract class BaseHandler<\n TApp,\n TEvent,\n TContext,\n TCallback,\n TResponse,\n TReturn,\n> implements\n HandlerContract<TApp, TEvent, TContext, TCallback, TResponse, TReturn>\n{\n //#region Public Methods\n\n /**\n * Get the handler that will handle serverless requests\n */\n public abstract getHandler(\n app: TApp,\n framework: FrameworkContract<TApp>,\n adapters: AdapterContract<TEvent, TContext, TResponse>[],\n resolverFactory: ResolverContract<\n TEvent,\n TContext,\n TCallback,\n TResponse,\n TReturn\n >,\n binarySettings: BinarySettings,\n respondWithErrors: boolean,\n log: ILogger,\n ): ServerlessHandler<TReturn>;\n\n //#endregion\n\n //#region Protected Methods\n\n /**\n * Get the adapter to handle a specific event and context\n *\n * @param event - The event sent by serverless\n * @param context - The context sent by serverless\n * @param adapters - The list of adapters\n * @param log - The instance of logger\n */\n protected getAdapterByEventAndContext(\n event: TEvent,\n context: TContext,\n adapters: AdapterContract<TEvent, TContext, TResponse>[],\n log: ILogger,\n ): AdapterContract<TEvent, TContext, TResponse> {\n const resolvedAdapters = adapters.filter(adapter =>\n adapter.canHandle(event, context, log),\n );\n\n if (resolvedAdapters.length === 0) {\n throw new Error(\n \"SERVERLESS_ADAPTER: Couldn't find adapter to handle this event.\",\n );\n }\n\n if (resolvedAdapters.length > 1) {\n throw new Error(\n `SERVERLESS_ADAPTER: Two or more adapters was resolved by the event, the adapters are: ${adapters\n .map(adapter => adapter.getAdapterName())\n .join(', ')}.`,\n );\n }\n\n return resolvedAdapters[0];\n }\n\n /**\n * Get serverless request and response frmo the adapter request\n *\n * @param requestValues - The request values from adapter\n */\n protected getServerlessRequestResponseFromAdapterRequest(\n requestValues: AdapterRequest,\n ): [request: ServerlessRequest, response: ServerlessResponse] {\n const request = new ServerlessRequest({\n method: requestValues.method,\n headers: requestValues.headers,\n body: requestValues.body,\n remoteAddress: requestValues.remoteAddress,\n url: requestValues.path,\n });\n\n const response = new ServerlessResponse({\n method: requestValues.method,\n });\n\n return [request, response];\n }\n\n //#endregion\n}\n","/**\n * The type that represents the object that handles the references to the event created by the serverless trigger or context created by the serverless environment.\n *\n * @breadcrumb Core / Current Invoke\n * @public\n */\nexport type CurrentInvoke<TEvent, TContext> = {\n /**\n * The event created by the serverless trigger\n *\n * @remarks It's only null when you call {@link getCurrentInvoke} outside this library's pipeline.\n */\n event: TEvent | null;\n\n /**\n * The context created by the serverless environment\n *\n * @remarks It's only null when you call {@link getCurrentInvoke} outside this library's pipeline.\n */\n context: TContext | null;\n};\n\nconst currentInvoke: CurrentInvoke<any, any> = {\n context: null,\n event: null,\n};\n\n/**\n * Get the reference to the event created by the serverless trigger or context created by the serverless environment.\n *\n * @example\n * ```typescript\n * import type { ALBEvent, Context } from 'aws-lambda';\n *\n * // inside the method that handles the aws alb request.\n * const { event, context } = getCurrentInvoke<ALBEvent, Context>();\n * ```\n *\n * @breadcrumb Core / Current Invoke\n * @public\n */\nexport function getCurrentInvoke<TEvent = any, TContext = any>(): CurrentInvoke<\n TEvent,\n TContext\n> {\n return currentInvoke;\n}\n\n/**\n * Method that saves to the event created by the serverless trigger or context created by the serverless environment.\n *\n * @remarks This method MUST NOT be called by you, this method MUST only be used internally in this library.\n *\n * @param event - The event created by the serverless trigger\n * @param context - The context created by the serverless environment\n *\n * @breadcrumb Core / Current Invoke\n * @public\n */\nexport function setCurrentInvoke<TEvent = any, TContext = any>({\n event,\n context,\n}: CurrentInvoke<TEvent, TContext>) {\n currentInvoke.event = event;\n currentInvoke.context = context;\n}\n","// ATTRIBUTION: https://github.com/dougmoscrop/serverless-http\n\n//#region Imports\n\nimport type { BinarySettings, BothValueHeaders } from '../@types';\n\n//#endregion\n\n/**\n * The function that determines by the content encoding whether the response should be treated as binary\n *\n * @example\n * ```typescript\n * const headers = { 'content-encoding': 'gzip' };\n * const isBinary = isContentEncodingBinary(headers, ['gzip']);\n * console.log(isBinary);\n * // true\n * ```\n *\n * @param headers - The headers of the response\n * @param binaryEncodingTypes - The list of content encodings that will be treated as binary\n *\n * @breadcrumb Core / isBinary\n * @public\n */\nexport function isContentEncodingBinary(\n headers: BothValueHeaders,\n binaryEncodingTypes: string[],\n): boolean {\n let contentEncodings = headers['content-encoding'];\n\n if (!contentEncodings) return false;\n\n if (!Array.isArray(contentEncodings))\n contentEncodings = contentEncodings.split(',');\n\n return contentEncodings.some(value =>\n binaryEncodingTypes.includes(value.trim()),\n );\n}\n\n/**\n * The function that returns the content type of headers\n *\n * @example\n * ```typescript\n * const headers = { 'content-type': 'application/json' };\n * const contentType = getContentType(headers);\n * console.log(contentType);\n * // application/json\n * ```\n *\n * @param headers - The headers of the response\n *\n * @breadcrumb Core / isBinary\n * @public\n */\nexport function getContentType(headers: BothValueHeaders): string {\n const contentTypeHeaderRaw = headers['content-type'];\n const contentTypeHeader = Array.isArray(contentTypeHeaderRaw)\n ? contentTypeHeaderRaw[0] || ''\n : contentTypeHeaderRaw || '';\n\n if (!contentTypeHeaderRaw) return '';\n\n // only compare mime type; ignore encoding part\n const contentTypeStart = contentTypeHeader.indexOf(';');\n\n if (contentTypeStart === -1) return contentTypeHeader;\n\n return contentTypeHeader.slice(0, contentTypeStart);\n}\n\n/**\n * The function that determines by the content type whether the response should be treated as binary\n *\n * @example\n * ```typescript\n * const headers = { 'content-type': 'image/png' };\n * const isBinary = isContentTypeBinary(headers, new Map([['image/png', true]]));\n * console.log(isBinary);\n * // true\n * ```\n *\n * @param headers - The headers of the response\n * @param binaryContentTypes - The list of content types that will be treated as binary\n *\n * @breadcrumb Core / isBinary\n * @public\n */\nexport function isContentTypeBinary(\n headers: BothValueHeaders,\n binaryContentTypes: string[],\n) {\n const contentType = getContentType(headers);\n\n if (!contentType) return false;\n\n return binaryContentTypes.includes(contentType.trim());\n}\n\n/**\n * The function used to determine from the headers and the binary settings if a response should be encoded or not\n *\n * @example\n * ```typescript\n * const headers = { 'content-type': 'image/png', 'content-encoding': 'gzip' };\n * const isContentBinary = isBinary(headers, { contentEncodings: ['gzip'], contentTypes: ['image/png'] });\n * console.log(isContentBinary);\n * // true\n * ```\n *\n * @param headers - The headers of the response\n * @param binarySettings - The settings for the validation\n *\n * @breadcrumb Core / isBinary\n * @public\n */\nexport function isBinary(\n headers: BothValueHeaders,\n binarySettings: BinarySettings,\n): boolean {\n if ('isBinary' in binarySettings) {\n if (binarySettings.isBinary === false) return false;\n\n return binarySettings.isBinary(headers);\n }\n\n return (\n isContentEncodingBinary(headers, binarySettings.contentEncodings) ||\n isContentTypeBinary(headers, binarySettings.contentTypes)\n );\n}\n","/**\n * No operation function is used when we need to pass a function, but we don't want to specify any behavior.\n *\n * @breadcrumb Core\n * @public\n */\nexport const NO_OP: (...args: any[]) => any = () => void 0;\n","import { NO_OP } from './no-op';\n\n/**\n * The type representing the possible log levels to choose from.\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport type LogLevels =\n | 'debug'\n | 'verbose'\n | 'info'\n | 'warn'\n | 'error'\n | 'none';\n\n/**\n * The options to customize {@link ILogger}\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport type LoggerOptions = {\n /**\n * Select the log level, {@link LogLevels | see more}.\n *\n * @defaultValue error\n */\n level: LogLevels;\n};\n\n/**\n * The log function used in any level.\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport type LoggerFN = (message: any, ...additional: any[]) => void;\n\n/**\n * The interface representing the logger, you can provide a custom logger by implementing this interface.\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport type ILogger = Record<Exclude<LogLevels, 'none'>, LoggerFN>;\n\n/**\n * The symbol used to check against an ILogger instace to verify if that ILogger was created by this library\n *\n * @breadcrumb Core / Logger\n * @public\n */\nconst InternalLoggerSymbol = Symbol('InternalLogger');\n\nconst logLevels: Record<\n LogLevels,\n [level: LogLevels, consoleMethod: keyof Console][]\n> = {\n debug: [\n ['debug', 'debug'],\n ['verbose', 'debug'],\n ['info', 'info'],\n ['error', 'error'],\n ['warn', 'warn'],\n ],\n verbose: [\n ['verbose', 'debug'],\n ['info', 'info'],\n ['error', 'error'],\n ['warn', 'warn'],\n ],\n info: [\n ['info', 'info'],\n ['error', 'error'],\n ['warn', 'warn'],\n ],\n warn: [\n ['warn', 'warn'],\n ['error', 'error'],\n ],\n error: [['error', 'error']],\n none: [],\n};\n\nconst lazyPrint = (value: () => any | unknown) => {\n if (typeof value === 'function') return value();\n\n return value;\n};\n\nconst print =\n (fn: string) =>\n (message: any, ...additional: (() => any)[]) =>\n console[fn](message, ...additional.map(lazyPrint));\n\n/**\n * The method used to create a simple logger instance to use in this library.\n *\n * @remarks Behind the scenes, this simple logger sends the message to the `console` methods.\n *\n * @example\n * ```typescript\n * const logger = createDefaultLogger();\n *\n * logger.error('An error happens.');\n * // An error happens.\n * ```\n *\n * @param level - Select the level of the log\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport function createDefaultLogger(\n { level }: LoggerOptions = { level: 'error' },\n): ILogger {\n const levels = logLevels[level];\n\n if (!levels) throw new Error('Invalid log level');\n\n const logger = {\n [InternalLoggerSymbol]: true,\n error: NO_OP,\n debug: NO_OP,\n info: NO_OP,\n verbose: NO_OP,\n warn: NO_OP,\n } as ILogger;\n\n for (const [level, consoleMethod] of levels)\n logger[level] = print(consoleMethod);\n\n return logger;\n}\n\n/**\n * The method used to chck if logger was created by this library, or it was defined by the user.\n *\n * @param logger - The instance of the logger to check\n *\n * @breadcrumb Core / Logger\n * @public\n */\nexport function isInternalLogger(logger: ILogger): boolean {\n return !!logger[InternalLoggerSymbol];\n}\n","//#region Imports\n\nimport { Readable, Writable } from 'node:stream';\n\n//#endregion\n\n/**\n * Check if stream already ended\n *\n * @param stream - The stream\n *\n * @breadcrumb Core / Stream\n * @public\n */\nexport function isStreamEnded(stream: Readable | Writable): boolean {\n if ('readableEnded' in stream && stream.readableEnded) return true;\n\n if ('writableEnded' in stream && stream.writableEnded) return true;\n\n return false;\n}\n\n/**\n * Wait asynchronous the stream to complete\n *\n * @param stream - The stream\n *\n * @breadcrumb Core / Stream\n * @public\n */\nexport function waitForStreamComplete<TStream extends Readable | Writable>(\n stream: TStream,\n): Promise<TStream> {\n if (isStreamEnded(stream)) return Promise.resolve(stream);\n\n return new Promise<TStream>((resolve, reject) => {\n // Reading the {@link https://github.com/nodejs/node/blob/v12.22.9/lib/events.js#L262 | emit source code},\n // it's almost impossible to complete being called twice because the emit function runs synchronously and removes the other listeners,\n // but I'll leave it at that because I didn't write that code, so I couldn't figure out what the author thought when he wrote this.\n let isComplete = false;\n\n function complete(err: any) {\n /* istanbul ignore next */\n if (isComplete) return;\n\n isComplete = true;\n\n stream.removeListener('error', complete);\n stream.removeListener('end', complete);\n stream.removeListener('finish', complete);\n\n if (err) reject(err);\n else resolve(stream);\n }\n\n stream.once('error', complete);\n stream.once('end', complete);\n stream.once('finish', complete);\n });\n}\n"],"mappings":"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","names":["default_exports","__export","DefaultHandler","__toCommonJS","import_node_util","import_node_http","HTTPS_PORT","ServerlessRequest","__name","method","url","headers","body","remoteAddress","NO_OP","import_node_http","getString","data","__name","headerEnd","BODY","HEADERS","addData","stream","data","__name","ServerlessResponse","_ServerlessResponse","method","socket","NO_OP","encoding","cb","string","getString","index","remainder","res","response","headers","key","value","statusCode","statusMessage","obj","headersObjOrArray","arrayHeaders","name","import_node_http","BaseHandler","__name","event","context","adapters","log","resolvedAdapters","adapter","requestValues","request","ServerlessRequest","response","ServerlessResponse","currentInvoke","setCurrentInvoke","event","context","currentInvoke","__name","isContentEncodingBinary","headers","binaryEncodingTypes","contentEncodings","value","__name","getContentType","contentTypeHeaderRaw","contentTypeHeader","contentTypeStart","isContentTypeBinary","binaryContentTypes","contentType","isBinary","binarySettings","NO_OP","__name","InternalLoggerSymbol","import_node_stream","isStreamEnded","stream","__name","waitForStreamComplete","resolve","reject","isComplete","complete","err","DefaultHandler","BaseHandler","__name","app","framework","adapters","resolverFactory","binarySettings","respondWithErrors","log","event","context","callback","adapter","setCurrentInvoke","util","requestValues","response","statusCode","body","headers","isBase64Encoded","successResponse","request","waitForStreamComplete","ServerlessResponse","isBinary","encoding","logBody"]}