@konker.dev/neverthrow-r-middleware 0.0.2

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 (303) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +26 -0
  3. package/dist/handler.d.ts +3 -0
  4. package/dist/handler.d.ts.map +1 -0
  5. package/dist/handler.js +2 -0
  6. package/dist/handler.js.map +1 -0
  7. package/dist/http/HttpApiError.d.ts +16 -0
  8. package/dist/http/HttpApiError.d.ts.map +1 -0
  9. package/dist/http/HttpApiError.js +60 -0
  10. package/dist/http/HttpApiError.js.map +1 -0
  11. package/dist/http/HttpApiError.test.d.ts +2 -0
  12. package/dist/http/HttpApiError.test.d.ts.map +1 -0
  13. package/dist/http/HttpApiError.test.js +45 -0
  14. package/dist/http/HttpApiError.test.js.map +1 -0
  15. package/dist/http/Rec.d.ts +13 -0
  16. package/dist/http/Rec.d.ts.map +1 -0
  17. package/dist/http/Rec.js +2 -0
  18. package/dist/http/Rec.js.map +1 -0
  19. package/dist/http/RequestResponseHandler.d.ts +7 -0
  20. package/dist/http/RequestResponseHandler.d.ts.map +1 -0
  21. package/dist/http/RequestResponseHandler.js +2 -0
  22. package/dist/http/RequestResponseHandler.js.map +1 -0
  23. package/dist/http/RequestW.d.ts +14 -0
  24. package/dist/http/RequestW.d.ts.map +1 -0
  25. package/dist/http/RequestW.js +17 -0
  26. package/dist/http/RequestW.js.map +1 -0
  27. package/dist/http/RequestW.test.d.ts +2 -0
  28. package/dist/http/RequestW.test.d.ts.map +1 -0
  29. package/dist/http/RequestW.test.js +26 -0
  30. package/dist/http/RequestW.test.js.map +1 -0
  31. package/dist/http/ResponseW.d.ts +11 -0
  32. package/dist/http/ResponseW.d.ts.map +1 -0
  33. package/dist/http/ResponseW.js +14 -0
  34. package/dist/http/ResponseW.js.map +1 -0
  35. package/dist/http/ResponseW.test.d.ts +2 -0
  36. package/dist/http/ResponseW.test.d.ts.map +1 -0
  37. package/dist/http/ResponseW.test.js +23 -0
  38. package/dist/http/ResponseW.test.js.map +1 -0
  39. package/dist/http/contrib/apiGatewayProxyEventV2Adapter.d.ts +14 -0
  40. package/dist/http/contrib/apiGatewayProxyEventV2Adapter.d.ts.map +1 -0
  41. package/dist/http/contrib/apiGatewayProxyEventV2Adapter.js +26 -0
  42. package/dist/http/contrib/apiGatewayProxyEventV2Adapter.js.map +1 -0
  43. package/dist/http/contrib/apiGatewayProxyEventV2Adapter.test.d.ts +2 -0
  44. package/dist/http/contrib/apiGatewayProxyEventV2Adapter.test.d.ts.map +1 -0
  45. package/dist/http/contrib/apiGatewayProxyEventV2Adapter.test.js +76 -0
  46. package/dist/http/contrib/apiGatewayProxyEventV2Adapter.test.js.map +1 -0
  47. package/dist/http/contrib/base64BodyDecoder.d.ts +7 -0
  48. package/dist/http/contrib/base64BodyDecoder.d.ts.map +1 -0
  49. package/dist/http/contrib/base64BodyDecoder.js +15 -0
  50. package/dist/http/contrib/base64BodyDecoder.js.map +1 -0
  51. package/dist/http/contrib/base64BodyDecoder.test.d.ts +2 -0
  52. package/dist/http/contrib/base64BodyDecoder.test.d.ts.map +1 -0
  53. package/dist/http/contrib/base64BodyDecoder.test.js +47 -0
  54. package/dist/http/contrib/base64BodyDecoder.test.js.map +1 -0
  55. package/dist/http/contrib/basicAuthAuthenticator.d.ts +17 -0
  56. package/dist/http/contrib/basicAuthAuthenticator.d.ts.map +1 -0
  57. package/dist/http/contrib/basicAuthAuthenticator.js +30 -0
  58. package/dist/http/contrib/basicAuthAuthenticator.js.map +1 -0
  59. package/dist/http/contrib/basicAuthAuthenticator.test.d.ts +2 -0
  60. package/dist/http/contrib/basicAuthAuthenticator.test.d.ts.map +1 -0
  61. package/dist/http/contrib/basicAuthAuthenticator.test.js +64 -0
  62. package/dist/http/contrib/basicAuthAuthenticator.test.js.map +1 -0
  63. package/dist/http/contrib/basicAuthDecoder.d.ts +13 -0
  64. package/dist/http/contrib/basicAuthDecoder.d.ts.map +1 -0
  65. package/dist/http/contrib/basicAuthDecoder.js +23 -0
  66. package/dist/http/contrib/basicAuthDecoder.js.map +1 -0
  67. package/dist/http/contrib/basicAuthDecoder.test.d.ts +2 -0
  68. package/dist/http/contrib/basicAuthDecoder.test.d.ts.map +1 -0
  69. package/dist/http/contrib/basicAuthDecoder.test.js +31 -0
  70. package/dist/http/contrib/basicAuthDecoder.test.js.map +1 -0
  71. package/dist/http/contrib/bodyValidator.d.ts +11 -0
  72. package/dist/http/contrib/bodyValidator.d.ts.map +1 -0
  73. package/dist/http/contrib/bodyValidator.js +15 -0
  74. package/dist/http/contrib/bodyValidator.js.map +1 -0
  75. package/dist/http/contrib/bodyValidator.test.d.ts +2 -0
  76. package/dist/http/contrib/bodyValidator.test.d.ts.map +1 -0
  77. package/dist/http/contrib/bodyValidator.test.js +58 -0
  78. package/dist/http/contrib/bodyValidator.test.js.map +1 -0
  79. package/dist/http/contrib/envValidator.d.ts +10 -0
  80. package/dist/http/contrib/envValidator.d.ts.map +1 -0
  81. package/dist/http/contrib/envValidator.js +12 -0
  82. package/dist/http/contrib/envValidator.js.map +1 -0
  83. package/dist/http/contrib/envValidator.test.d.ts +2 -0
  84. package/dist/http/contrib/envValidator.test.d.ts.map +1 -0
  85. package/dist/http/contrib/envValidator.test.js +49 -0
  86. package/dist/http/contrib/envValidator.test.js.map +1 -0
  87. package/dist/http/contrib/headerSignatureAuthorizer/index.d.ts +13 -0
  88. package/dist/http/contrib/headerSignatureAuthorizer/index.d.ts.map +1 -0
  89. package/dist/http/contrib/headerSignatureAuthorizer/index.js +22 -0
  90. package/dist/http/contrib/headerSignatureAuthorizer/index.js.map +1 -0
  91. package/dist/http/contrib/headerSignatureAuthorizer/index.test.d.ts +2 -0
  92. package/dist/http/contrib/headerSignatureAuthorizer/index.test.d.ts.map +1 -0
  93. package/dist/http/contrib/headerSignatureAuthorizer/index.test.js +39 -0
  94. package/dist/http/contrib/headerSignatureAuthorizer/index.test.js.map +1 -0
  95. package/dist/http/contrib/headerSignatureAuthorizer/lib.d.ts +4 -0
  96. package/dist/http/contrib/headerSignatureAuthorizer/lib.d.ts.map +1 -0
  97. package/dist/http/contrib/headerSignatureAuthorizer/lib.js +13 -0
  98. package/dist/http/contrib/headerSignatureAuthorizer/lib.js.map +1 -0
  99. package/dist/http/contrib/headerSignatureAuthorizer/lib.test.d.ts +2 -0
  100. package/dist/http/contrib/headerSignatureAuthorizer/lib.test.d.ts.map +1 -0
  101. package/dist/http/contrib/headerSignatureAuthorizer/lib.test.js +9 -0
  102. package/dist/http/contrib/headerSignatureAuthorizer/lib.test.js.map +1 -0
  103. package/dist/http/contrib/headersNormalizer/index.d.ts +9 -0
  104. package/dist/http/contrib/headersNormalizer/index.d.ts.map +1 -0
  105. package/dist/http/contrib/headersNormalizer/index.js +8 -0
  106. package/dist/http/contrib/headersNormalizer/index.js.map +1 -0
  107. package/dist/http/contrib/headersNormalizer/index.test.d.ts +2 -0
  108. package/dist/http/contrib/headersNormalizer/index.test.d.ts.map +1 -0
  109. package/dist/http/contrib/headersNormalizer/index.test.js +38 -0
  110. package/dist/http/contrib/headersNormalizer/index.test.js.map +1 -0
  111. package/dist/http/contrib/headersNormalizer/lib.d.ts +11 -0
  112. package/dist/http/contrib/headersNormalizer/lib.d.ts.map +1 -0
  113. package/dist/http/contrib/headersNormalizer/lib.js +64 -0
  114. package/dist/http/contrib/headersNormalizer/lib.js.map +1 -0
  115. package/dist/http/contrib/headersNormalizer/lib.test.d.ts +2 -0
  116. package/dist/http/contrib/headersNormalizer/lib.test.d.ts.map +1 -0
  117. package/dist/http/contrib/headersNormalizer/lib.test.js +35 -0
  118. package/dist/http/contrib/headersNormalizer/lib.test.js.map +1 -0
  119. package/dist/http/contrib/headersNormalizer/types.d.ts +10 -0
  120. package/dist/http/contrib/headersNormalizer/types.d.ts.map +1 -0
  121. package/dist/http/contrib/headersNormalizer/types.js +2 -0
  122. package/dist/http/contrib/headersNormalizer/types.js.map +1 -0
  123. package/dist/http/contrib/headersValidator.d.ts +12 -0
  124. package/dist/http/contrib/headersValidator.d.ts.map +1 -0
  125. package/dist/http/contrib/headersValidator.js +15 -0
  126. package/dist/http/contrib/headersValidator.js.map +1 -0
  127. package/dist/http/contrib/headersValidator.test.d.ts +2 -0
  128. package/dist/http/contrib/headersValidator.test.d.ts.map +1 -0
  129. package/dist/http/contrib/headersValidator.test.js +46 -0
  130. package/dist/http/contrib/headersValidator.test.js.map +1 -0
  131. package/dist/http/contrib/helmetJsHeaders.d.ts +5 -0
  132. package/dist/http/contrib/helmetJsHeaders.d.ts.map +1 -0
  133. package/dist/http/contrib/helmetJsHeaders.js +25 -0
  134. package/dist/http/contrib/helmetJsHeaders.js.map +1 -0
  135. package/dist/http/contrib/helmetJsHeaders.test.d.ts +2 -0
  136. package/dist/http/contrib/helmetJsHeaders.test.d.ts.map +1 -0
  137. package/dist/http/contrib/helmetJsHeaders.test.js +18 -0
  138. package/dist/http/contrib/helmetJsHeaders.test.js.map +1 -0
  139. package/dist/http/contrib/honoAdapter.d.ts +16 -0
  140. package/dist/http/contrib/honoAdapter.d.ts.map +1 -0
  141. package/dist/http/contrib/honoAdapter.js +28 -0
  142. package/dist/http/contrib/honoAdapter.js.map +1 -0
  143. package/dist/http/contrib/honoAdapter.test.d.ts +2 -0
  144. package/dist/http/contrib/honoAdapter.test.d.ts.map +1 -0
  145. package/dist/http/contrib/honoAdapter.test.js +75 -0
  146. package/dist/http/contrib/honoAdapter.test.js.map +1 -0
  147. package/dist/http/contrib/identity.d.ts +4 -0
  148. package/dist/http/contrib/identity.d.ts.map +1 -0
  149. package/dist/http/contrib/identity.js +3 -0
  150. package/dist/http/contrib/identity.js.map +1 -0
  151. package/dist/http/contrib/identity.test.d.ts +2 -0
  152. package/dist/http/contrib/identity.test.d.ts.map +1 -0
  153. package/dist/http/contrib/identity.test.js +12 -0
  154. package/dist/http/contrib/identity.test.js.map +1 -0
  155. package/dist/http/contrib/index.d.ts +25 -0
  156. package/dist/http/contrib/index.d.ts.map +1 -0
  157. package/dist/http/contrib/index.js +25 -0
  158. package/dist/http/contrib/index.js.map +1 -0
  159. package/dist/http/contrib/jsonBodyParserRequest.d.ts +10 -0
  160. package/dist/http/contrib/jsonBodyParserRequest.d.ts.map +1 -0
  161. package/dist/http/contrib/jsonBodyParserRequest.js +22 -0
  162. package/dist/http/contrib/jsonBodyParserRequest.js.map +1 -0
  163. package/dist/http/contrib/jsonBodyParserRequest.test.d.ts +2 -0
  164. package/dist/http/contrib/jsonBodyParserRequest.test.d.ts.map +1 -0
  165. package/dist/http/contrib/jsonBodyParserRequest.test.js +37 -0
  166. package/dist/http/contrib/jsonBodyParserRequest.test.js.map +1 -0
  167. package/dist/http/contrib/jsonBodySerializerResponse.d.ts +9 -0
  168. package/dist/http/contrib/jsonBodySerializerResponse.d.ts.map +1 -0
  169. package/dist/http/contrib/jsonBodySerializerResponse.js +15 -0
  170. package/dist/http/contrib/jsonBodySerializerResponse.js.map +1 -0
  171. package/dist/http/contrib/jsonBodySerializerResponse.test.d.ts +2 -0
  172. package/dist/http/contrib/jsonBodySerializerResponse.test.d.ts.map +1 -0
  173. package/dist/http/contrib/jsonBodySerializerResponse.test.js +31 -0
  174. package/dist/http/contrib/jsonBodySerializerResponse.test.js.map +1 -0
  175. package/dist/http/contrib/jwtAuthenticator.d.ts +15 -0
  176. package/dist/http/contrib/jwtAuthenticator.d.ts.map +1 -0
  177. package/dist/http/contrib/jwtAuthenticator.js +28 -0
  178. package/dist/http/contrib/jwtAuthenticator.js.map +1 -0
  179. package/dist/http/contrib/jwtAuthenticator.test.d.ts +2 -0
  180. package/dist/http/contrib/jwtAuthenticator.test.d.ts.map +1 -0
  181. package/dist/http/contrib/jwtAuthenticator.test.js +88 -0
  182. package/dist/http/contrib/jwtAuthenticator.test.js.map +1 -0
  183. package/dist/http/contrib/jwtAuthenticatorRsa.d.ts +15 -0
  184. package/dist/http/contrib/jwtAuthenticatorRsa.d.ts.map +1 -0
  185. package/dist/http/contrib/jwtAuthenticatorRsa.js +28 -0
  186. package/dist/http/contrib/jwtAuthenticatorRsa.js.map +1 -0
  187. package/dist/http/contrib/jwtAuthenticatorRsa.test.d.ts +2 -0
  188. package/dist/http/contrib/jwtAuthenticatorRsa.test.d.ts.map +1 -0
  189. package/dist/http/contrib/jwtAuthenticatorRsa.test.js +88 -0
  190. package/dist/http/contrib/jwtAuthenticatorRsa.test.js.map +1 -0
  191. package/dist/http/contrib/jwtDecoder.d.ts +13 -0
  192. package/dist/http/contrib/jwtDecoder.d.ts.map +1 -0
  193. package/dist/http/contrib/jwtDecoder.js +23 -0
  194. package/dist/http/contrib/jwtDecoder.js.map +1 -0
  195. package/dist/http/contrib/jwtDecoder.test.d.ts +2 -0
  196. package/dist/http/contrib/jwtDecoder.test.d.ts.map +1 -0
  197. package/dist/http/contrib/jwtDecoder.test.js +76 -0
  198. package/dist/http/contrib/jwtDecoder.test.js.map +1 -0
  199. package/dist/http/contrib/pathParametersValidator.d.ts +12 -0
  200. package/dist/http/contrib/pathParametersValidator.d.ts.map +1 -0
  201. package/dist/http/contrib/pathParametersValidator.js +15 -0
  202. package/dist/http/contrib/pathParametersValidator.js.map +1 -0
  203. package/dist/http/contrib/pathParametersValidator.test.d.ts +2 -0
  204. package/dist/http/contrib/pathParametersValidator.test.d.ts.map +1 -0
  205. package/dist/http/contrib/pathParametersValidator.test.js +46 -0
  206. package/dist/http/contrib/pathParametersValidator.test.js.map +1 -0
  207. package/dist/http/contrib/pathTokenAuthorizer.d.ts +13 -0
  208. package/dist/http/contrib/pathTokenAuthorizer.d.ts.map +1 -0
  209. package/dist/http/contrib/pathTokenAuthorizer.js +19 -0
  210. package/dist/http/contrib/pathTokenAuthorizer.js.map +1 -0
  211. package/dist/http/contrib/pathTokenAuthorizer.test.d.ts +2 -0
  212. package/dist/http/contrib/pathTokenAuthorizer.test.d.ts.map +1 -0
  213. package/dist/http/contrib/pathTokenAuthorizer.test.js +29 -0
  214. package/dist/http/contrib/pathTokenAuthorizer.test.js.map +1 -0
  215. package/dist/http/contrib/queryStringValidator.d.ts +12 -0
  216. package/dist/http/contrib/queryStringValidator.d.ts.map +1 -0
  217. package/dist/http/contrib/queryStringValidator.js +15 -0
  218. package/dist/http/contrib/queryStringValidator.js.map +1 -0
  219. package/dist/http/contrib/queryStringValidator.test.d.ts +2 -0
  220. package/dist/http/contrib/queryStringValidator.test.d.ts.map +1 -0
  221. package/dist/http/contrib/queryStringValidator.test.js +46 -0
  222. package/dist/http/contrib/queryStringValidator.test.js.map +1 -0
  223. package/dist/http/contrib/requestResponseLogger.d.ts +5 -0
  224. package/dist/http/contrib/requestResponseLogger.d.ts.map +1 -0
  225. package/dist/http/contrib/requestResponseLogger.js +8 -0
  226. package/dist/http/contrib/requestResponseLogger.js.map +1 -0
  227. package/dist/http/contrib/requestResponseLogger.test.d.ts +2 -0
  228. package/dist/http/contrib/requestResponseLogger.test.d.ts.map +1 -0
  229. package/dist/http/contrib/requestResponseLogger.test.js +18 -0
  230. package/dist/http/contrib/requestResponseLogger.test.js.map +1 -0
  231. package/dist/http/contrib/responseProcessor.d.ts +8 -0
  232. package/dist/http/contrib/responseProcessor.d.ts.map +1 -0
  233. package/dist/http/contrib/responseProcessor.js +16 -0
  234. package/dist/http/contrib/responseProcessor.js.map +1 -0
  235. package/dist/http/contrib/responseProcessor.test.d.ts +2 -0
  236. package/dist/http/contrib/responseProcessor.test.d.ts.map +1 -0
  237. package/dist/http/contrib/responseProcessor.test.js +29 -0
  238. package/dist/http/contrib/responseProcessor.test.js.map +1 -0
  239. package/dist/http/contrib/standardRequestResponseAdapter.d.ts +16 -0
  240. package/dist/http/contrib/standardRequestResponseAdapter.d.ts.map +1 -0
  241. package/dist/http/contrib/standardRequestResponseAdapter.js +27 -0
  242. package/dist/http/contrib/standardRequestResponseAdapter.js.map +1 -0
  243. package/dist/http/contrib/standardRequestResponseAdapter.test.d.ts +2 -0
  244. package/dist/http/contrib/standardRequestResponseAdapter.test.d.ts.map +1 -0
  245. package/dist/http/contrib/standardRequestResponseAdapter.test.js +85 -0
  246. package/dist/http/contrib/standardRequestResponseAdapter.test.js.map +1 -0
  247. package/dist/http/contrib/trivial.d.ts +5 -0
  248. package/dist/http/contrib/trivial.d.ts.map +1 -0
  249. package/dist/http/contrib/trivial.js +9 -0
  250. package/dist/http/contrib/trivial.js.map +1 -0
  251. package/dist/http/contrib/trivial.test.d.ts +2 -0
  252. package/dist/http/contrib/trivial.test.d.ts.map +1 -0
  253. package/dist/http/contrib/trivial.test.js +14 -0
  254. package/dist/http/contrib/trivial.test.js.map +1 -0
  255. package/dist/http/index.d.ts +6 -0
  256. package/dist/http/index.d.ts.map +1 -0
  257. package/dist/http/index.js +6 -0
  258. package/dist/http/index.js.map +1 -0
  259. package/dist/index.d.ts +3 -0
  260. package/dist/index.d.ts.map +1 -0
  261. package/dist/index.js +3 -0
  262. package/dist/index.js.map +1 -0
  263. package/dist/lib/Logger.d.ts +23 -0
  264. package/dist/lib/Logger.d.ts.map +1 -0
  265. package/dist/lib/Logger.js +30 -0
  266. package/dist/lib/Logger.js.map +1 -0
  267. package/dist/lib/Logger.test.d.ts +2 -0
  268. package/dist/lib/Logger.test.d.ts.map +1 -0
  269. package/dist/lib/Logger.test.js +54 -0
  270. package/dist/lib/Logger.test.js.map +1 -0
  271. package/dist/lib/MiddlewareError.d.ts +10 -0
  272. package/dist/lib/MiddlewareError.d.ts.map +1 -0
  273. package/dist/lib/MiddlewareError.js +20 -0
  274. package/dist/lib/MiddlewareError.js.map +1 -0
  275. package/dist/lib/MiddlewareError.test.d.ts +2 -0
  276. package/dist/lib/MiddlewareError.test.d.ts.map +1 -0
  277. package/dist/lib/MiddlewareError.test.js +55 -0
  278. package/dist/lib/MiddlewareError.test.js.map +1 -0
  279. package/dist/lib/index.d.ts +4 -0
  280. package/dist/lib/index.d.ts.map +1 -0
  281. package/dist/lib/index.js +4 -0
  282. package/dist/lib/index.js.map +1 -0
  283. package/dist/lib/utils.d.ts +7 -0
  284. package/dist/lib/utils.d.ts.map +1 -0
  285. package/dist/lib/utils.js +11 -0
  286. package/dist/lib/utils.js.map +1 -0
  287. package/dist/lib/utils.test.d.ts +2 -0
  288. package/dist/lib/utils.test.d.ts.map +1 -0
  289. package/dist/lib/utils.test.js +47 -0
  290. package/dist/lib/utils.test.js.map +1 -0
  291. package/dist/test/kitchen-sink.test.d.ts +2 -0
  292. package/dist/test/kitchen-sink.test.d.ts.map +1 -0
  293. package/dist/test/kitchen-sink.test.js +76 -0
  294. package/dist/test/kitchen-sink.test.js.map +1 -0
  295. package/dist/test/round-trip.test.d.ts +2 -0
  296. package/dist/test/round-trip.test.d.ts.map +1 -0
  297. package/dist/test/round-trip.test.js +75 -0
  298. package/dist/test/round-trip.test.js.map +1 -0
  299. package/dist/test/test-common.d.ts +17 -0
  300. package/dist/test/test-common.d.ts.map +1 -0
  301. package/dist/test/test-common.js +25 -0
  302. package/dist/test/test-common.js.map +1 -0
  303. package/package.json +265 -0
package/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2024 Konrad Markus <mail@konker.dev>
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
12
+ SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
14
+ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
15
+ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # @konker.dev/neverthrow-r-middleware
2
+
3
+ Type-safe HTTP middleware system built on
4
+ [`@konker.dev/neverthrow-r`](../neverthrow-r). Composition is decorator-style:
5
+ each middleware wraps an inner handler and returns a new handler.
6
+
7
+ ```ts
8
+ import type { ResultAsyncR } from '@konker.dev/neverthrow-r/types';
9
+
10
+ export type Handler<I, R, O, E> = (i: I) => ResultAsyncR<R, O, E>;
11
+ ```
12
+
13
+ The package is the `ResultAsyncR`-based counterpart to
14
+ [`@konker.dev/middleware-fp`](../middleware-fp) (which is built on Effect).
15
+
16
+ ## Included middlewares
17
+
18
+ - `identity` / `trivial` — minimal decorator examples.
19
+ - `jsonBodyParserRequest` / `jsonBodySerializerResponse` — JSON request/response IO.
20
+ - `bodyValidator` — validates the request body against any
21
+ [Standard Schema](https://standardschema.dev) validator (zod, valibot,
22
+ arktype, effect/Schema, …).
23
+ - `requestResponseLogger` — logs request/response via the `Logger` threaded
24
+ through the `R` channel.
25
+ - `apiGatewayProxyEventV2Adapter` — adapts an AWS API Gateway HTTP API event.
26
+ - `honoAdapter` — adapts a `HonoRequest`.
@@ -0,0 +1,3 @@
1
+ import type { ResultAsyncR } from '@konker.dev/neverthrow-r/types';
2
+ export type Handler<I, R, O, E> = (i: I) => ResultAsyncR<R, O, E>;
3
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { ResponseW } from './ResponseW.js';
2
+ export declare const ERROR_TAG: "HttpApiError";
3
+ export declare class HttpApiError extends Error {
4
+ readonly _tag: "HttpApiError";
5
+ readonly statusCode: number;
6
+ readonly internal: Array<unknown> | undefined;
7
+ constructor({ internal, message, statusCode, }: {
8
+ readonly statusCode: number;
9
+ readonly message: string;
10
+ readonly internal?: Array<unknown>;
11
+ });
12
+ }
13
+ export declare function isHttpApiError(x: unknown): x is HttpApiError;
14
+ export declare function toHttpApiError(x: unknown, statusCode?: number, message?: string): HttpApiError;
15
+ export declare function toErrorResponseW(error: HttpApiError): ResponseW;
16
+ //# sourceMappingURL=HttpApiError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpApiError.d.ts","sourceRoot":"","sources":["../../src/http/HttpApiError.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,eAAO,MAAM,SAAS,EAAG,cAAuB,CAAC;AAEjD,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,iBAAa;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;gBAElC,EACV,QAAQ,EACR,OAAO,EACP,UAAU,GACX,EAAE;QACD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;KACpC;CAMF;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,YAAY,CAI5D;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CA8B9F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAoB/D"}
@@ -0,0 +1,60 @@
1
+ /* eslint-disable */
2
+ import { Result } from 'neverthrow';
3
+ import { makeResponseW } from './ResponseW.js';
4
+ export const ERROR_TAG = 'HttpApiError';
5
+ export class HttpApiError extends Error {
6
+ _tag = ERROR_TAG;
7
+ statusCode;
8
+ internal;
9
+ constructor({ internal, message, statusCode, }) {
10
+ super(message);
11
+ this.name = ERROR_TAG;
12
+ this.statusCode = statusCode;
13
+ this.internal = internal;
14
+ }
15
+ }
16
+ export function isHttpApiError(x) {
17
+ return (x instanceof HttpApiError || (typeof x === 'object' && x !== null && x._tag === ERROR_TAG));
18
+ }
19
+ export function toHttpApiError(x, statusCode, message) {
20
+ if (isHttpApiError(x)) {
21
+ return new HttpApiError({
22
+ statusCode: statusCode ?? x.statusCode,
23
+ message: message ?? x.message,
24
+ internal: [x, ...(x.internal ?? [])],
25
+ });
26
+ }
27
+ if (x instanceof Error) {
28
+ return new HttpApiError({
29
+ statusCode: statusCode ?? 500,
30
+ message: message ?? x.message,
31
+ internal: [x],
32
+ });
33
+ }
34
+ if (typeof x === 'string') {
35
+ return new HttpApiError({
36
+ statusCode: statusCode ?? 500,
37
+ message: message ?? x,
38
+ internal: [x],
39
+ });
40
+ }
41
+ return new HttpApiError({
42
+ statusCode: statusCode ?? 500,
43
+ message: message ?? 'Internal Server Error',
44
+ internal: [x],
45
+ });
46
+ }
47
+ export function toErrorResponseW(error) {
48
+ const bodyResult = Result.fromThrowable(() => JSON.stringify({
49
+ message: error.message,
50
+ statusCode: error.statusCode,
51
+ }), () => new Error('JSON stringify failed'))();
52
+ return makeResponseW({
53
+ statusCode: error.statusCode,
54
+ headers: {
55
+ 'Content-Type': 'application/json',
56
+ },
57
+ body: bodyResult.match((body) => body, () => '{"message":"Internal Server Error","statusCode":500}'),
58
+ });
59
+ }
60
+ //# sourceMappingURL=HttpApiError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpApiError.js","sourceRoot":"","sources":["../../src/http/HttpApiError.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGpC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,CAAC,MAAM,SAAS,GAAG,cAAuB,CAAC;AAEjD,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,GAAG,SAAS,CAAC;IACjB,UAAU,CAAS;IACnB,QAAQ,CAA6B;IAE9C,YAAY,EACV,QAAQ,EACR,OAAO,EACP,UAAU,GAKX;QACC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,CAAU;IACvC,OAAO,CACL,CAAC,YAAY,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAK,CAAwB,CAAC,IAAI,KAAK,SAAS,CAAC,CACnH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAU,EAAE,UAAmB,EAAE,OAAgB;IAC9E,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,UAAU,IAAI,CAAC,CAAC,UAAU;YACtC,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO;YAC7B,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACvB,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,UAAU,IAAI,GAAG;YAC7B,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO;YAC7B,QAAQ,EAAE,CAAC,CAAC,CAAC;SACd,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,UAAU,IAAI,GAAG;YAC7B,OAAO,EAAE,OAAO,IAAI,CAAC;YACrB,QAAQ,EAAE,CAAC,CAAC,CAAC;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,YAAY,CAAC;QACtB,UAAU,EAAE,UAAU,IAAI,GAAG;QAC7B,OAAO,EAAE,OAAO,IAAI,uBAAuB;QAC3C,QAAQ,EAAE,CAAC,CAAC,CAAC;KACd,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CACrC,GAAG,EAAE,CACH,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC,EACJ,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CACzC,EAAE,CAAC;IAEJ,OAAO,aAAa,CAAC;QACnB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,UAAU,CAAC,KAAK,CACpB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EACd,GAAG,EAAE,CAAC,sDAAsD,CAC7D;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=HttpApiError.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpApiError.test.d.ts","sourceRoot":"","sources":["../../src/http/HttpApiError.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import { afterEach, describe, expect, it, vi } from 'vitest';
2
+ import { ERROR_TAG, HttpApiError, isHttpApiError, toErrorResponseW, toHttpApiError } from './HttpApiError.js';
3
+ describe('HttpApiError', () => {
4
+ afterEach(() => {
5
+ vi.restoreAllMocks();
6
+ });
7
+ it('recognises HttpApiError instances and tagged objects', () => {
8
+ expect(isHttpApiError(new HttpApiError({ statusCode: 400, message: 'bad' }))).toBe(true);
9
+ expect(isHttpApiError({ _tag: ERROR_TAG })).toBe(true);
10
+ expect(isHttpApiError({})).toBe(false);
11
+ });
12
+ it('wraps string inputs', () => {
13
+ const error = toHttpApiError('boom');
14
+ expect(error.statusCode).toBe(500);
15
+ expect(error.message).toBe('boom');
16
+ expect(error.internal).toEqual(['boom']);
17
+ });
18
+ it('wraps unknown inputs with the default message', () => {
19
+ const error = toHttpApiError({ no: 'shape' });
20
+ expect(error.statusCode).toBe(500);
21
+ expect(error.message).toBe('Internal Server Error');
22
+ });
23
+ it('overrides status and message when wrapping an Error', () => {
24
+ const error = toHttpApiError(new Error('inner'), 401, 'outer');
25
+ expect(error.statusCode).toBe(401);
26
+ expect(error.message).toBe('outer');
27
+ });
28
+ it('uses the original Error status defaults when no overrides are provided', () => {
29
+ const error = toHttpApiError(new Error('inner'));
30
+ expect(error.statusCode).toBe(500);
31
+ expect(error.message).toBe('inner');
32
+ });
33
+ it('falls back when JSON stringification throws', () => {
34
+ vi.spyOn(JSON, 'stringify').mockImplementation(() => {
35
+ throw new Error('nope');
36
+ });
37
+ const response = toErrorResponseW(new HttpApiError({ statusCode: 418, message: 'teapot' }));
38
+ expect(response).toEqual({
39
+ statusCode: 418,
40
+ headers: { 'Content-Type': 'application/json' },
41
+ body: '{"message":"Internal Server Error","statusCode":500}',
42
+ });
43
+ });
44
+ });
45
+ //# sourceMappingURL=HttpApiError.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpApiError.test.js","sourceRoot":"","sources":["../../src/http/HttpApiError.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type Rec = Record<string, unknown>;
2
+ type KnownKeys<T> = {
3
+ [K in keyof T]: string extends K ? never : number extends K ? never : symbol extends K ? never : K;
4
+ }[keyof T];
5
+ export type Override<T, U> = Omit<T, KnownKeys<U>> & U;
6
+ export type BodyRec = Record<string, unknown> & {
7
+ readonly body?: unknown;
8
+ };
9
+ export type StrBodyRec = Record<string, unknown> & {
10
+ readonly body?: string;
11
+ };
12
+ export {};
13
+ //# sourceMappingURL=Rec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rec.d.ts","sourceRoot":"","sources":["../../src/http/Rec.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,KAAK,SAAS,CAAC,CAAC,IAAI;KACjB,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,GAAG,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC;CACnG,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEvD,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5E,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Rec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rec.js","sourceRoot":"","sources":["../../src/http/Rec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { Handler } from '../handler.js';
2
+ import type { Rec } from './Rec.js';
3
+ import type { RequestW } from './RequestW.js';
4
+ import type { ResponseW } from './ResponseW.js';
5
+ export type { BodyRec, Override, Rec, StrBodyRec } from './Rec.js';
6
+ export type RequestResponseHandler<I extends Rec, R, O extends Rec, E> = Handler<RequestW<I>, R, ResponseW<O>, E>;
7
+ //# sourceMappingURL=RequestResponseHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestResponseHandler.d.ts","sourceRoot":"","sources":["../../src/http/RequestResponseHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEnE,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RequestResponseHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestResponseHandler.js","sourceRoot":"","sources":["../../src/http/RequestResponseHandler.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { Override, StrBodyRec } from './Rec.js';
2
+ type RequestWBase = {
3
+ readonly url: string;
4
+ readonly method: string;
5
+ readonly headers: Record<string, string>;
6
+ readonly queryStringParameters: Record<string, string>;
7
+ readonly pathParameters: Record<string, string>;
8
+ };
9
+ export type RequestW<T extends Record<string, unknown> = StrBodyRec> = RequestWBase & T;
10
+ export declare function makeRequestW<T extends Record<string, unknown>>(requestW: RequestW<T>): RequestW<T>;
11
+ export declare function makeRequestW<T extends Record<string, unknown> = {}, U extends Record<string, unknown> | undefined = undefined>(requestW: RequestW<T>, u: U): NoInfer<U extends undefined ? RequestW<T> : U extends Record<string, unknown> ? RequestW<Override<T, U>> : never>;
12
+ export declare const EMPTY_REQUEST_W: RequestW;
13
+ export {};
14
+ //# sourceMappingURL=RequestW.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestW.d.ts","sourceRoot":"","sources":["../../src/http/RequestW.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGrD,KAAK,YAAY,GAAG;IAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,IAAI,YAAY,GAAG,CAAC,CAAC;AAGxF,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEpG,wBAAgB,YAAY,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EACtC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EAEzD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,CAAC,EAAE,CAAC,GACH,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAerH,eAAO,MAAM,eAAe,EAAE,QAMpB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export function makeRequestW(requestW, u) {
2
+ return u
3
+ ? {
4
+ ...requestW,
5
+ ...u,
6
+ }
7
+ : { ...requestW };
8
+ }
9
+ // --------------------------------------------------------------------------
10
+ export const EMPTY_REQUEST_W = {
11
+ url: '/',
12
+ method: 'GET',
13
+ headers: {},
14
+ queryStringParameters: {},
15
+ pathParameters: {},
16
+ };
17
+ //# sourceMappingURL=RequestW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestW.js","sourceRoot":"","sources":["../../src/http/RequestW.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,YAAY,CAC1B,QAAqB,EACrB,CAAK;IAEL,OAAO,CAAC;QACN,CAAC,CAAC;YACE,GAAG,QAAQ;YACX,GAAG,CAAC;SACL;QACH,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC,GAAG,EAAE,GAAG;IACR,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,EAAE;IACX,qBAAqB,EAAE,EAAE;IACzB,cAAc,EAAE,EAAE;CACV,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RequestW.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestW.test.d.ts","sourceRoot":"","sources":["../../src/http/RequestW.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { EMPTY_REQUEST_W, makeRequestW } from './RequestW.js';
3
+ describe('RequestW', () => {
4
+ it('EMPTY_REQUEST_W has the expected default shape', () => {
5
+ expect(EMPTY_REQUEST_W).toEqual({
6
+ url: '/',
7
+ method: 'GET',
8
+ headers: {},
9
+ queryStringParameters: {},
10
+ pathParameters: {},
11
+ });
12
+ });
13
+ describe('makeRequestW', () => {
14
+ it('returns a shallow copy when called with one arg', () => {
15
+ const copy = makeRequestW(EMPTY_REQUEST_W);
16
+ expect(copy).toEqual(EMPTY_REQUEST_W);
17
+ expect(copy).not.toBe(EMPTY_REQUEST_W);
18
+ });
19
+ it('merges extra fields when called with two args', () => {
20
+ const merged = makeRequestW(EMPTY_REQUEST_W, { body: 'hi', extra: 1 });
21
+ expect(merged.body).toBe('hi');
22
+ expect(merged.extra).toBe(1);
23
+ });
24
+ });
25
+ });
26
+ //# sourceMappingURL=RequestW.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestW.test.js","sourceRoot":"","sources":["../../src/http/RequestW.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE9D,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC;YAC9B,GAAG,EAAE,GAAG;YACR,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE;YACX,qBAAqB,EAAE,EAAE;YACzB,cAAc,EAAE,EAAE;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,IAAI,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAE,MAA4B,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { BodyRec, Override } from './Rec.js';
2
+ type ResponseWBase = {
3
+ readonly statusCode: number;
4
+ readonly headers: Record<string, string>;
5
+ };
6
+ export type ResponseW<T extends Record<string, unknown> = BodyRec> = ResponseWBase & T;
7
+ export declare function makeResponseW<T extends Record<string, unknown>>(responseW: ResponseW<T>): ResponseW<T>;
8
+ export declare function makeResponseW<T extends Record<string, unknown> = {}, U extends Record<string, unknown> | undefined = undefined>(responseW: ResponseW<T>, u: U): U extends undefined ? ResponseW<T> : U extends Record<string, unknown> ? ResponseW<Override<T, U>> : never;
9
+ export declare const EMPTY_RESPONSE_W: ResponseW;
10
+ export {};
11
+ //# sourceMappingURL=ResponseW.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseW.d.ts","sourceRoot":"","sources":["../../src/http/ResponseW.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGlD,KAAK,aAAa,GAAG;IACnB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,IAAI,aAAa,GAAG,CAAC,CAAC;AAGvF,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAExG,wBAAgB,aAAa,CAC3B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EACtC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,EAEzD,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EACvB,CAAC,EAAE,CAAC,GACH,CAAC,SAAS,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAe9G,eAAO,MAAM,gBAAgB,EAAE,SAGrB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export function makeResponseW(responseW, u) {
2
+ return u
3
+ ? {
4
+ ...responseW,
5
+ ...u,
6
+ }
7
+ : { ...responseW };
8
+ }
9
+ // --------------------------------------------------------------------------
10
+ export const EMPTY_RESPONSE_W = {
11
+ statusCode: 200,
12
+ headers: {},
13
+ };
14
+ //# sourceMappingURL=ResponseW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseW.js","sourceRoot":"","sources":["../../src/http/ResponseW.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,aAAa,CAC3B,SAAuB,EACvB,CAAK;IAEL,OAAO,CAAC;QACN,CAAC,CAAC;YACE,GAAG,SAAS;YACZ,GAAG,CAAC;SACL;QACH,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC;AACvB,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC,UAAU,EAAE,GAAG;IACf,OAAO,EAAE,EAAE;CACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ResponseW.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseW.test.d.ts","sourceRoot":"","sources":["../../src/http/ResponseW.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { EMPTY_RESPONSE_W, makeResponseW } from './ResponseW.js';
3
+ describe('ResponseW', () => {
4
+ it('EMPTY_RESPONSE_W has the expected default shape', () => {
5
+ expect(EMPTY_RESPONSE_W).toEqual({ statusCode: 200, headers: {} });
6
+ });
7
+ describe('makeResponseW', () => {
8
+ it('returns a shallow copy when called with one arg', () => {
9
+ const copy = makeResponseW(EMPTY_RESPONSE_W);
10
+ expect(copy).toEqual(EMPTY_RESPONSE_W);
11
+ expect(copy).not.toBe(EMPTY_RESPONSE_W);
12
+ });
13
+ it('merges extra fields when called with two args', () => {
14
+ const merged = makeResponseW(EMPTY_RESPONSE_W, {
15
+ body: '{"ok":true}',
16
+ statusCode: 201,
17
+ });
18
+ expect(merged.statusCode).toBe(201);
19
+ expect(merged.body).toBe('{"ok":true}');
20
+ });
21
+ });
22
+ });
23
+ //# sourceMappingURL=ResponseW.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseW.test.js","sourceRoot":"","sources":["../../src/http/ResponseW.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEjE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,IAAI,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAG,aAAa,CAAC,gBAAgB,EAAE;gBAC7C,IAAI,EAAE,aAAa;gBACnB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,CAAE,MAA4B,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { APIGatewayProxyEventV2, APIGatewayProxyResult } from 'aws-lambda';
2
+ import type { Handler } from '../../handler.js';
3
+ import type { WithLogger } from '../../lib/Logger.js';
4
+ import type { StrBodyRec } from '../RequestResponseHandler.js';
5
+ import type { RequestW } from '../RequestW.js';
6
+ import type { ResponseW } from '../ResponseW.js';
7
+ export declare const TAG = "apiGatewayProxyEventV2Adapter";
8
+ export type WithApiGatewayProxyEventRaw = {
9
+ readonly apiGatewayProxyEventV2Raw: APIGatewayProxyEventV2;
10
+ };
11
+ export declare function adaptFromApiGatewayProxyEventV2(request: APIGatewayProxyEventV2): RequestW<WithApiGatewayProxyEventRaw & StrBodyRec>;
12
+ export declare function adaptToApiGatewayProxyResult<O extends StrBodyRec>(responseW: ResponseW<O>): APIGatewayProxyResult;
13
+ export declare const middleware: (_params?: never) => <O extends StrBodyRec, E, R>(wrapped: Handler<RequestW<WithApiGatewayProxyEventRaw & StrBodyRec>, R, ResponseW<O>, E>) => Handler<APIGatewayProxyEventV2, R & WithLogger, APIGatewayProxyResult, E>;
14
+ //# sourceMappingURL=apiGatewayProxyEventV2Adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiGatewayProxyEventV2Adapter.d.ts","sourceRoot":"","sources":["../../../src/http/contrib/apiGatewayProxyEventV2Adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEhF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,eAAO,MAAM,GAAG,kCAAkC,CAAC;AAEnD,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,CAAC,yBAAyB,EAAE,sBAAsB,CAAC;CAC5D,CAAC;AAEF,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,sBAAsB,GAC9B,QAAQ,CAAC,2BAA2B,GAAG,UAAU,CAAC,CAUpD;AAED,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAMjH;AAED,eAAO,MAAM,UAAU,GACpB,UAAU,KAAK,MACf,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAC,EACzB,SAAS,OAAO,CAAC,QAAQ,CAAC,2BAA2B,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KACvF,OAAO,CAAC,sBAAsB,EAAE,CAAC,GAAG,UAAU,EAAE,qBAAqB,EAAE,CAAC,CASxE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { andThenAsync, mapAsync } from '@konker.dev/neverthrow-r/async';
2
+ import { okAsyncR } from '@konker.dev/neverthrow-r/constructors';
3
+ import { pipe } from '@konker.dev/neverthrow-r/pipe';
4
+ import { tapLogger } from '../../lib/Logger.js';
5
+ import { sanitizeRecord } from '../../lib/utils.js';
6
+ export const TAG = 'apiGatewayProxyEventV2Adapter';
7
+ export function adaptFromApiGatewayProxyEventV2(request) {
8
+ return {
9
+ url: request.requestContext.http.path,
10
+ method: request.requestContext.http.method,
11
+ body: request.body ?? '',
12
+ headers: sanitizeRecord(request.headers),
13
+ queryStringParameters: sanitizeRecord(request.queryStringParameters),
14
+ pathParameters: sanitizeRecord(request.pathParameters),
15
+ apiGatewayProxyEventV2Raw: request,
16
+ };
17
+ }
18
+ export function adaptToApiGatewayProxyResult(responseW) {
19
+ return {
20
+ statusCode: responseW.statusCode,
21
+ body: responseW.body ?? '',
22
+ headers: responseW.headers,
23
+ };
24
+ }
25
+ export const middleware = (_params) => (wrapped) => (i) => pipe(okAsyncR(i), tapLogger('debug', `[${TAG}] IN`), mapAsync(adaptFromApiGatewayProxyEventV2), andThenAsync(wrapped), mapAsync(adaptToApiGatewayProxyResult), tapLogger('debug', `[${TAG}] OUT`));
26
+ //# sourceMappingURL=apiGatewayProxyEventV2Adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiGatewayProxyEventV2Adapter.js","sourceRoot":"","sources":["../../../src/http/contrib/apiGatewayProxyEventV2Adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAKrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,MAAM,CAAC,MAAM,GAAG,GAAG,+BAA+B,CAAC;AAMnD,MAAM,UAAU,+BAA+B,CAC7C,OAA+B;IAE/B,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;QACrC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM;QAC1C,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;QACxB,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;QACxC,qBAAqB,EAAE,cAAc,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACpE,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC;QACtD,yBAAyB,EAAE,OAAO;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAuB,SAAuB;IACxF,OAAO;QACL,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE;QAC1B,OAAO,EAAE,SAAS,CAAC,OAAO;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GACrB,CAAC,OAAe,EAAE,EAAE,CACpB,CACE,OAAwF,EACb,EAAE,CAC/E,CAAC,CAAyB,EAAE,EAAE,CAC5B,IAAI,CACF,QAAQ,CAAC,CAAC,CAAC,EACX,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,EACjC,QAAQ,CAAC,+BAA+B,CAAC,EACzC,YAAY,CAAC,OAAO,CAAC,EACrB,QAAQ,CAAC,4BAA4B,CAAC,EACtC,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,CACnC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=apiGatewayProxyEventV2Adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiGatewayProxyEventV2Adapter.test.d.ts","sourceRoot":"","sources":["../../../src/http/contrib/apiGatewayProxyEventV2Adapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ import { okAsyncR } from '@konker.dev/neverthrow-r/constructors';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { recordingLogger } from '../../test/test-common.js';
4
+ import { EMPTY_RESPONSE_W } from '../ResponseW.js';
5
+ import { adaptFromApiGatewayProxyEventV2, adaptToApiGatewayProxyResult, middleware as apiGatewayProxyEventV2Adapter, } from './apiGatewayProxyEventV2Adapter.js';
6
+ const sampleEvent = {
7
+ version: '2.0',
8
+ routeKey: 'GET /hello',
9
+ rawPath: '/hello',
10
+ rawQueryString: 'a=1',
11
+ headers: { 'x-test': 'yes', missing: undefined },
12
+ queryStringParameters: { a: '1' },
13
+ pathParameters: undefined,
14
+ requestContext: {
15
+ accountId: '123',
16
+ apiId: 'abc',
17
+ domainName: 'example.com',
18
+ domainPrefix: 'example',
19
+ http: {
20
+ method: 'GET',
21
+ path: '/hello',
22
+ protocol: 'HTTP/1.1',
23
+ sourceIp: '127.0.0.1',
24
+ userAgent: 'test',
25
+ },
26
+ requestId: 'req',
27
+ routeKey: 'GET /hello',
28
+ stage: '$default',
29
+ time: '1/Jan/2026:00:00:00 +0000',
30
+ timeEpoch: 0,
31
+ },
32
+ isBase64Encoded: false,
33
+ };
34
+ describe('apiGatewayProxyEventV2Adapter', () => {
35
+ describe('adaptFromApiGatewayProxyEventV2', () => {
36
+ it('flattens an event into a RequestW with sanitised records', () => {
37
+ const req = adaptFromApiGatewayProxyEventV2(sampleEvent);
38
+ expect(req.url).toBe('/hello');
39
+ expect(req.method).toBe('GET');
40
+ expect(req.body).toBe('');
41
+ expect(req.headers).toEqual({ 'x-test': 'yes', missing: '' });
42
+ expect(req.queryStringParameters).toEqual({ a: '1' });
43
+ expect(req.pathParameters).toEqual({});
44
+ expect(req.apiGatewayProxyEventV2Raw).toBe(sampleEvent);
45
+ });
46
+ });
47
+ describe('adaptToApiGatewayProxyResult', () => {
48
+ it('flattens a ResponseW back into a proxy result', () => {
49
+ const res = adaptToApiGatewayProxyResult({
50
+ ...EMPTY_RESPONSE_W,
51
+ body: 'hi',
52
+ });
53
+ expect(res).toEqual({ statusCode: 200, body: 'hi', headers: {} });
54
+ });
55
+ it('falls back to empty body when body is missing', () => {
56
+ const res = adaptToApiGatewayProxyResult(EMPTY_RESPONSE_W);
57
+ expect(res.body).toBe('');
58
+ });
59
+ });
60
+ describe('middleware', () => {
61
+ it('round-trips an event through a wrapped handler', async () => {
62
+ const { logger } = recordingLogger();
63
+ const wrapped = apiGatewayProxyEventV2Adapter()((_req) => okAsyncR({
64
+ ...EMPTY_RESPONSE_W,
65
+ body: 'hello',
66
+ }));
67
+ const result = await wrapped(sampleEvent)({ logger });
68
+ expect(result.isOk() && result.value).toEqual({
69
+ statusCode: 200,
70
+ body: 'hello',
71
+ headers: {},
72
+ });
73
+ });
74
+ });
75
+ });
76
+ //# sourceMappingURL=apiGatewayProxyEventV2Adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiGatewayProxyEventV2Adapter.test.js","sourceRoot":"","sources":["../../../src/http/contrib/apiGatewayProxyEventV2Adapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { WithLogger } from '../../lib/Logger.js';
2
+ import type { MiddlewareError } from '../../lib/MiddlewareError.js';
3
+ import type { Rec, RequestResponseHandler, StrBodyRec } from '../RequestResponseHandler.js';
4
+ import type { RequestW } from '../RequestW.js';
5
+ export declare const TAG = "base64BodyDecoder";
6
+ export declare const middleware: <I extends Rec>(isBase64Encoded: (i: RequestW<I>) => boolean) => <O extends Rec, E, R>(wrapped: RequestResponseHandler<I & StrBodyRec, R, O, E>) => RequestResponseHandler<I & StrBodyRec, R & WithLogger, O, E | MiddlewareError>;
7
+ //# sourceMappingURL=base64BodyDecoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64BodyDecoder.d.ts","sourceRoot":"","sources":["../../../src/http/contrib/base64BodyDecoder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,eAAO,MAAM,GAAG,sBAAsB,CAAC;AAEvC,eAAO,MAAM,UAAU,GACpB,CAAC,SAAS,GAAG,EAAE,iBAAiB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,MAC3D,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EAClB,SAAS,sBAAsB,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACvD,sBAAsB,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG,eAAe,CAqB7E,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { andThenAsync, mapAsync } from '@konker.dev/neverthrow-r/async';
2
+ import { okAsyncR } from '@konker.dev/neverthrow-r/constructors';
3
+ import { pipe } from '@konker.dev/neverthrow-r/pipe';
4
+ import { tapLogger } from '../../lib/Logger.js';
5
+ import { toMiddlewareError } from '../../lib/MiddlewareError.js';
6
+ import { fromPromise } from '../../lib/utils.js';
7
+ import { makeResponseW } from '../ResponseW.js';
8
+ export const TAG = 'base64BodyDecoder';
9
+ export const middleware = (isBase64Encoded) => (wrapped) => (i) => pipe(okAsyncR(i), tapLogger('debug', `[${TAG}] IN`), andThenAsync((req) => () => fromPromise(async () => isBase64Encoded(req)
10
+ ? {
11
+ ...req,
12
+ body: Buffer.from(req.body ?? '', 'base64').toString('utf-8'),
13
+ }
14
+ : { ...req }, toMiddlewareError)), andThenAsync(wrapped), mapAsync((res) => makeResponseW(res)), tapLogger('debug', `[${TAG}] OUT`));
15
+ //# sourceMappingURL=base64BodyDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64BodyDecoder.js","sourceRoot":"","sources":["../../../src/http/contrib/base64BodyDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAGrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,CAAC,MAAM,GAAG,GAAG,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,UAAU,GACrB,CAAgB,eAA4C,EAAE,EAAE,CAChE,CACE,OAAwD,EACwB,EAAE,CACpF,CAAC,CAA2B,EAAE,EAAE,CAC9B,IAAI,CACF,QAAQ,CAAC,CAAC,CAAC,EACX,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,EACjC,YAAY,CACV,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CACZ,WAAW,CACT,KAAK,IAAuC,EAAE,CAC5C,eAAe,CAAC,GAAG,CAAC;IAClB,CAAC,CAAC;QACE,GAAG,GAAG;QACN,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;KAC9D;IACH,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,EAChB,iBAAiB,CAClB,CACJ,EACD,YAAY,CAAC,OAAO,CAAC,EACrB,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EACrC,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,CACnC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base64BodyDecoder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64BodyDecoder.test.d.ts","sourceRoot":"","sources":["../../../src/http/contrib/base64BodyDecoder.test.ts"],"names":[],"mappings":""}