@bitblit/ratchet-epsilon-common 4.0.85-alpha

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 (409) hide show
  1. package/CHANGELOG.md +177 -0
  2. package/License.txt +13 -0
  3. package/README.md +242 -0
  4. package/dist/cjs/background/background-dynamo-log-table-handler.js +38 -0
  5. package/dist/cjs/background/background-entry.js +2 -0
  6. package/dist/cjs/background/background-execution-event-type.js +11 -0
  7. package/dist/cjs/background/background-execution-event.js +2 -0
  8. package/dist/cjs/background/background-execution-listener.js +2 -0
  9. package/dist/cjs/background/background-handler.js +269 -0
  10. package/dist/cjs/background/background-http-adapter-handler.js +127 -0
  11. package/dist/cjs/background/background-meta-response-internal.js +2 -0
  12. package/dist/cjs/background/background-process-handling.js +8 -0
  13. package/dist/cjs/background/background-process-log-table-entry.js +2 -0
  14. package/dist/cjs/background/background-queue-response-internal.js +2 -0
  15. package/dist/cjs/background/background-validator.js +88 -0
  16. package/dist/cjs/background/epsilon-background-process-error.js +93 -0
  17. package/dist/cjs/background/internal-background-entry.js +2 -0
  18. package/dist/cjs/background/manager/abstract-background-manager.js +92 -0
  19. package/dist/cjs/background/manager/aws-sqs-sns-background-manager.js +153 -0
  20. package/dist/cjs/background/manager/background-manager-like.js +2 -0
  21. package/dist/cjs/background/manager/single-thread-local-background-manager.js +49 -0
  22. package/dist/cjs/background/s3-background-transaction-logger.js +54 -0
  23. package/dist/cjs/build/ratchet-epsilon-common-info.js +18 -0
  24. package/dist/cjs/built-in/background/echo-processor.js +18 -0
  25. package/dist/cjs/built-in/background/log-and-enqueue-echo-processor.js +16 -0
  26. package/dist/cjs/built-in/background/log-message-background-error-processor.js +10 -0
  27. package/dist/cjs/built-in/background/no-op-processor.js +13 -0
  28. package/dist/cjs/built-in/background/retry-processor.js +41 -0
  29. package/dist/cjs/built-in/background/sample-delay-processor.js +16 -0
  30. package/dist/cjs/built-in/background/sample-input-validated-processor-data.js +2 -0
  31. package/dist/cjs/built-in/background/sample-input-validated-processor.js +16 -0
  32. package/dist/cjs/built-in/built-in-trace-id-generators.js +25 -0
  33. package/dist/cjs/built-in/daemon/daemon-authorizer-function.js +2 -0
  34. package/dist/cjs/built-in/daemon/daemon-config.js +2 -0
  35. package/dist/cjs/built-in/daemon/daemon-group-selection-function.js +2 -0
  36. package/dist/cjs/built-in/daemon/daemon-handler.js +62 -0
  37. package/dist/cjs/built-in/daemon/daemon-process-state-list.js +2 -0
  38. package/dist/cjs/built-in/http/apollo-filter.js +63 -0
  39. package/dist/cjs/built-in/http/built-in-auth-filters.js +115 -0
  40. package/dist/cjs/built-in/http/built-in-authorizers.js +43 -0
  41. package/dist/cjs/built-in/http/built-in-filters.js +222 -0
  42. package/dist/cjs/built-in/http/built-in-handlers.js +73 -0
  43. package/dist/cjs/built-in/http/log-level-manipulation-filter.js +20 -0
  44. package/dist/cjs/built-in/http/run-handler-as-filter.js +64 -0
  45. package/dist/cjs/cli-bootstrap/epsilon-run-background-process-from-command-line-dry-run.js +20 -0
  46. package/dist/cjs/config/background/background-aws-config.js +2 -0
  47. package/dist/cjs/config/background/background-config.js +2 -0
  48. package/dist/cjs/config/background/background-error-processor.js +2 -0
  49. package/dist/cjs/config/background/background-processor.js +2 -0
  50. package/dist/cjs/config/background/background-transaction-log.js +2 -0
  51. package/dist/cjs/config/background/background-transaction-logger.js +2 -0
  52. package/dist/cjs/config/cron/abstract-cron-entry.js +2 -0
  53. package/dist/cjs/config/cron/cron-background-entry.js +2 -0
  54. package/dist/cjs/config/cron/cron-config.js +2 -0
  55. package/dist/cjs/config/dynamo-db-config.js +2 -0
  56. package/dist/cjs/config/epsilon-config.js +2 -0
  57. package/dist/cjs/config/epsilon-lambda-event-handler.js +2 -0
  58. package/dist/cjs/config/epsilon-logger-config.js +2 -0
  59. package/dist/cjs/config/generic-aws-event-handler-function.js +2 -0
  60. package/dist/cjs/config/http/authorizer-function.js +2 -0
  61. package/dist/cjs/config/http/epsilon-authorization-context.js +2 -0
  62. package/dist/cjs/config/http/extended-api-gateway-event.js +2 -0
  63. package/dist/cjs/config/http/filter-chain-context.js +2 -0
  64. package/dist/cjs/config/http/filter-function.js +2 -0
  65. package/dist/cjs/config/http/handler-function.js +2 -0
  66. package/dist/cjs/config/http/http-config.js +2 -0
  67. package/dist/cjs/config/http/http-processing-config.js +2 -0
  68. package/dist/cjs/config/http/mapped-http-processing-config.js +2 -0
  69. package/dist/cjs/config/http/null-returned-object-handling.js +9 -0
  70. package/dist/cjs/config/inter-api/inter-api-aws-config.js +2 -0
  71. package/dist/cjs/config/inter-api/inter-api-config.js +2 -0
  72. package/dist/cjs/config/inter-api/inter-api-process-mapping.js +2 -0
  73. package/dist/cjs/config/logging-trace-id-generator.js +2 -0
  74. package/dist/cjs/config/open-api/open-api-document-components.js +2 -0
  75. package/dist/cjs/config/open-api/open-api-document-path.js +2 -0
  76. package/dist/cjs/config/open-api/open-api-document.js +2 -0
  77. package/dist/cjs/config/s3-config.js +2 -0
  78. package/dist/cjs/config/sns-config.js +2 -0
  79. package/dist/cjs/epsilon-build-properties.js +28 -0
  80. package/dist/cjs/epsilon-constants.js +49 -0
  81. package/dist/cjs/epsilon-global-handler.js +155 -0
  82. package/dist/cjs/epsilon-instance.js +2 -0
  83. package/dist/cjs/epsilon-logging-extension-processor.js +19 -0
  84. package/dist/cjs/http/auth/api-gateway-adapter-authentication-handler.js +75 -0
  85. package/dist/cjs/http/auth/auth0-web-token-manipulator.js +62 -0
  86. package/dist/cjs/http/auth/basic-auth-token.js +2 -0
  87. package/dist/cjs/http/auth/google-web-token-manipulator.js +72 -0
  88. package/dist/cjs/http/auth/jwt-ratchet-local-web-token-manipulator.js +29 -0
  89. package/dist/cjs/http/auth/local-web-token-manipulator.js +74 -0
  90. package/dist/cjs/http/auth/web-token-manipulator.js +2 -0
  91. package/dist/cjs/http/error/bad-gateway.js +12 -0
  92. package/dist/cjs/http/error/bad-request-error.js +12 -0
  93. package/dist/cjs/http/error/conflict-error.js +12 -0
  94. package/dist/cjs/http/error/epsilon-http-error.js +132 -0
  95. package/dist/cjs/http/error/forbidden-error.js +12 -0
  96. package/dist/cjs/http/error/gateway-timeout.js +12 -0
  97. package/dist/cjs/http/error/method-not-allowed-error.js +12 -0
  98. package/dist/cjs/http/error/misconfigured-error.js +12 -0
  99. package/dist/cjs/http/error/not-found-error.js +12 -0
  100. package/dist/cjs/http/error/not-implemented.js +12 -0
  101. package/dist/cjs/http/error/request-timeout-error.js +12 -0
  102. package/dist/cjs/http/error/service-unavailable.js +12 -0
  103. package/dist/cjs/http/error/too-many-requests-error.js +12 -0
  104. package/dist/cjs/http/error/unauthorized-error.js +12 -0
  105. package/dist/cjs/http/event-util.js +180 -0
  106. package/dist/cjs/http/response-util.js +146 -0
  107. package/dist/cjs/http/route/epsilon-router.js +2 -0
  108. package/dist/cjs/http/route/extended-auth-response-context.js +2 -0
  109. package/dist/cjs/http/route/route-mapping.js +2 -0
  110. package/dist/cjs/http/route/route-validator-config.js +2 -0
  111. package/dist/cjs/http/route/router-util.js +238 -0
  112. package/dist/cjs/http/web-handler.js +122 -0
  113. package/dist/cjs/http/web-v2-handler.js +25 -0
  114. package/dist/cjs/index.js +136 -0
  115. package/dist/cjs/inter-api/inter-api-entry.js +2 -0
  116. package/dist/cjs/inter-api/inter-api-util.js +62 -0
  117. package/dist/cjs/inter-api-manager.js +67 -0
  118. package/dist/cjs/lambda-event-handler/cron-epsilon-lambda-event-handler.js +76 -0
  119. package/dist/cjs/lambda-event-handler/dynamo-epsilon-lambda-event-handler.js +36 -0
  120. package/dist/cjs/lambda-event-handler/generic-sns-epsilon-lambda-event-handler.js +32 -0
  121. package/dist/cjs/lambda-event-handler/inter-api-epsilon-lambda-event-handler.js +26 -0
  122. package/dist/cjs/lambda-event-handler/s3-epsilon-lambda-event-handler.js +44 -0
  123. package/dist/cjs/local-container-server.js +79 -0
  124. package/dist/cjs/local-server-cert.js +71 -0
  125. package/dist/cjs/local-server.js +145 -0
  126. package/dist/cjs/open-api-util/open-api-doc-modifications.js +2 -0
  127. package/dist/cjs/open-api-util/open-api-doc-modifier.js +83 -0
  128. package/dist/cjs/open-api-util/yaml-combiner.js +32 -0
  129. package/dist/cjs/run-background-process-from-command-line.js +37 -0
  130. package/dist/cjs/sample/sample-batch-only-local-server.js +19 -0
  131. package/dist/cjs/sample/sample-local-server.js +30 -0
  132. package/dist/cjs/sample/sample-server-components.js +197 -0
  133. package/dist/cjs/test-error-server.js +48 -0
  134. package/dist/cjs/util/aws-util.js +69 -0
  135. package/dist/cjs/util/context-util.js +104 -0
  136. package/dist/cjs/util/cron-util.js +72 -0
  137. package/dist/cjs/util/epsilon-config-parser.js +70 -0
  138. package/dist/es/background/background-dynamo-log-table-handler.js +33 -0
  139. package/dist/es/background/background-entry.js +1 -0
  140. package/dist/es/background/background-execution-event-type.js +8 -0
  141. package/dist/es/background/background-execution-event.js +1 -0
  142. package/dist/es/background/background-execution-listener.js +1 -0
  143. package/dist/es/background/background-handler.js +265 -0
  144. package/dist/es/background/background-http-adapter-handler.js +123 -0
  145. package/dist/es/background/background-meta-response-internal.js +1 -0
  146. package/dist/es/background/background-process-handling.js +5 -0
  147. package/dist/es/background/background-process-log-table-entry.js +1 -0
  148. package/dist/es/background/background-queue-response-internal.js +1 -0
  149. package/dist/es/background/background-validator.js +84 -0
  150. package/dist/es/background/epsilon-background-process-error.js +88 -0
  151. package/dist/es/background/internal-background-entry.js +1 -0
  152. package/dist/es/background/manager/abstract-background-manager.js +88 -0
  153. package/dist/es/background/manager/aws-sqs-sns-background-manager.js +149 -0
  154. package/dist/es/background/manager/background-manager-like.js +1 -0
  155. package/dist/es/background/manager/single-thread-local-background-manager.js +45 -0
  156. package/dist/es/background/s3-background-transaction-logger.js +49 -0
  157. package/dist/es/build/ratchet-epsilon-common-info.js +14 -0
  158. package/dist/es/built-in/background/echo-processor.js +14 -0
  159. package/dist/es/built-in/background/log-and-enqueue-echo-processor.js +12 -0
  160. package/dist/es/built-in/background/log-message-background-error-processor.js +6 -0
  161. package/dist/es/built-in/background/no-op-processor.js +9 -0
  162. package/dist/es/built-in/background/retry-processor.js +36 -0
  163. package/dist/es/built-in/background/sample-delay-processor.js +12 -0
  164. package/dist/es/built-in/background/sample-input-validated-processor-data.js +1 -0
  165. package/dist/es/built-in/background/sample-input-validated-processor.js +12 -0
  166. package/dist/es/built-in/built-in-trace-id-generators.js +21 -0
  167. package/dist/es/built-in/daemon/daemon-authorizer-function.js +1 -0
  168. package/dist/es/built-in/daemon/daemon-config.js +1 -0
  169. package/dist/es/built-in/daemon/daemon-group-selection-function.js +1 -0
  170. package/dist/es/built-in/daemon/daemon-handler.js +58 -0
  171. package/dist/es/built-in/daemon/daemon-process-state-list.js +1 -0
  172. package/dist/es/built-in/http/apollo-filter.js +58 -0
  173. package/dist/es/built-in/http/built-in-auth-filters.js +107 -0
  174. package/dist/es/built-in/http/built-in-authorizers.js +39 -0
  175. package/dist/es/built-in/http/built-in-filters.js +208 -0
  176. package/dist/es/built-in/http/built-in-handlers.js +69 -0
  177. package/dist/es/built-in/http/log-level-manipulation-filter.js +16 -0
  178. package/dist/es/built-in/http/run-handler-as-filter.js +60 -0
  179. package/dist/es/cli-bootstrap/epsilon-run-background-process-from-command-line-dry-run.js +17 -0
  180. package/dist/es/config/background/background-aws-config.js +1 -0
  181. package/dist/es/config/background/background-config.js +1 -0
  182. package/dist/es/config/background/background-error-processor.js +1 -0
  183. package/dist/es/config/background/background-processor.js +1 -0
  184. package/dist/es/config/background/background-transaction-log.js +1 -0
  185. package/dist/es/config/background/background-transaction-logger.js +1 -0
  186. package/dist/es/config/cron/abstract-cron-entry.js +1 -0
  187. package/dist/es/config/cron/cron-background-entry.js +1 -0
  188. package/dist/es/config/cron/cron-config.js +1 -0
  189. package/dist/es/config/dynamo-db-config.js +1 -0
  190. package/dist/es/config/epsilon-config.js +1 -0
  191. package/dist/es/config/epsilon-lambda-event-handler.js +1 -0
  192. package/dist/es/config/epsilon-logger-config.js +1 -0
  193. package/dist/es/config/generic-aws-event-handler-function.js +1 -0
  194. package/dist/es/config/http/authorizer-function.js +1 -0
  195. package/dist/es/config/http/epsilon-authorization-context.js +1 -0
  196. package/dist/es/config/http/extended-api-gateway-event.js +1 -0
  197. package/dist/es/config/http/filter-chain-context.js +1 -0
  198. package/dist/es/config/http/filter-function.js +1 -0
  199. package/dist/es/config/http/handler-function.js +1 -0
  200. package/dist/es/config/http/http-config.js +1 -0
  201. package/dist/es/config/http/http-processing-config.js +1 -0
  202. package/dist/es/config/http/mapped-http-processing-config.js +1 -0
  203. package/dist/es/config/http/null-returned-object-handling.js +6 -0
  204. package/dist/es/config/inter-api/inter-api-aws-config.js +1 -0
  205. package/dist/es/config/inter-api/inter-api-config.js +1 -0
  206. package/dist/es/config/inter-api/inter-api-process-mapping.js +1 -0
  207. package/dist/es/config/logging-trace-id-generator.js +1 -0
  208. package/dist/es/config/open-api/open-api-document-components.js +1 -0
  209. package/dist/es/config/open-api/open-api-document-path.js +1 -0
  210. package/dist/es/config/open-api/open-api-document.js +1 -0
  211. package/dist/es/config/s3-config.js +1 -0
  212. package/dist/es/config/sns-config.js +1 -0
  213. package/dist/es/epsilon-build-properties.js +24 -0
  214. package/dist/es/epsilon-constants.js +45 -0
  215. package/dist/es/epsilon-global-handler.js +149 -0
  216. package/dist/es/epsilon-instance.js +1 -0
  217. package/dist/es/epsilon-logging-extension-processor.js +15 -0
  218. package/dist/es/http/auth/api-gateway-adapter-authentication-handler.js +71 -0
  219. package/dist/es/http/auth/auth0-web-token-manipulator.js +56 -0
  220. package/dist/es/http/auth/basic-auth-token.js +1 -0
  221. package/dist/es/http/auth/google-web-token-manipulator.js +67 -0
  222. package/dist/es/http/auth/jwt-ratchet-local-web-token-manipulator.js +25 -0
  223. package/dist/es/http/auth/local-web-token-manipulator.js +70 -0
  224. package/dist/es/http/auth/web-token-manipulator.js +1 -0
  225. package/dist/es/http/error/bad-gateway.js +8 -0
  226. package/dist/es/http/error/bad-request-error.js +8 -0
  227. package/dist/es/http/error/conflict-error.js +8 -0
  228. package/dist/es/http/error/epsilon-http-error.js +127 -0
  229. package/dist/es/http/error/forbidden-error.js +8 -0
  230. package/dist/es/http/error/gateway-timeout.js +8 -0
  231. package/dist/es/http/error/method-not-allowed-error.js +8 -0
  232. package/dist/es/http/error/misconfigured-error.js +8 -0
  233. package/dist/es/http/error/not-found-error.js +8 -0
  234. package/dist/es/http/error/not-implemented.js +8 -0
  235. package/dist/es/http/error/request-timeout-error.js +8 -0
  236. package/dist/es/http/error/service-unavailable.js +8 -0
  237. package/dist/es/http/error/too-many-requests-error.js +8 -0
  238. package/dist/es/http/error/unauthorized-error.js +8 -0
  239. package/dist/es/http/event-util.js +175 -0
  240. package/dist/es/http/response-util.js +141 -0
  241. package/dist/es/http/route/epsilon-router.js +1 -0
  242. package/dist/es/http/route/extended-auth-response-context.js +1 -0
  243. package/dist/es/http/route/route-mapping.js +1 -0
  244. package/dist/es/http/route/route-validator-config.js +1 -0
  245. package/dist/es/http/route/router-util.js +233 -0
  246. package/dist/es/http/web-handler.js +116 -0
  247. package/dist/es/http/web-v2-handler.js +21 -0
  248. package/dist/es/index.js +133 -0
  249. package/dist/es/inter-api/inter-api-entry.js +1 -0
  250. package/dist/es/inter-api/inter-api-util.js +58 -0
  251. package/dist/es/inter-api-manager.js +63 -0
  252. package/dist/es/lambda-event-handler/cron-epsilon-lambda-event-handler.js +72 -0
  253. package/dist/es/lambda-event-handler/dynamo-epsilon-lambda-event-handler.js +32 -0
  254. package/dist/es/lambda-event-handler/generic-sns-epsilon-lambda-event-handler.js +28 -0
  255. package/dist/es/lambda-event-handler/inter-api-epsilon-lambda-event-handler.js +22 -0
  256. package/dist/es/lambda-event-handler/s3-epsilon-lambda-event-handler.js +40 -0
  257. package/dist/es/local-container-server.js +74 -0
  258. package/dist/es/local-server-cert.js +67 -0
  259. package/dist/es/local-server.js +140 -0
  260. package/dist/es/open-api-util/open-api-doc-modifications.js +1 -0
  261. package/dist/es/open-api-util/open-api-doc-modifier.js +78 -0
  262. package/dist/es/open-api-util/yaml-combiner.js +27 -0
  263. package/dist/es/run-background-process-from-command-line.js +32 -0
  264. package/dist/es/sample/sample-batch-only-local-server.js +17 -0
  265. package/dist/es/sample/sample-local-server.js +28 -0
  266. package/dist/es/sample/sample-server-components.js +192 -0
  267. package/dist/es/test-error-server.js +43 -0
  268. package/dist/es/util/aws-util.js +65 -0
  269. package/dist/es/util/context-util.js +95 -0
  270. package/dist/es/util/cron-util.js +68 -0
  271. package/dist/es/util/epsilon-config-parser.js +64 -0
  272. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  273. package/dist/tsconfig.es.tsbuildinfo +1 -0
  274. package/dist/tsconfig.types.tsbuildinfo +1 -0
  275. package/dist/types/background/background-dynamo-log-table-handler.d.ts +11 -0
  276. package/dist/types/background/background-entry.d.ts +4 -0
  277. package/dist/types/background/background-execution-event-type.d.ts +7 -0
  278. package/dist/types/background/background-execution-event.d.ts +8 -0
  279. package/dist/types/background/background-execution-listener.d.ts +5 -0
  280. package/dist/types/background/background-handler.d.ts +33 -0
  281. package/dist/types/background/background-http-adapter-handler.d.ts +26 -0
  282. package/dist/types/background/background-meta-response-internal.d.ts +5 -0
  283. package/dist/types/background/background-process-handling.d.ts +4 -0
  284. package/dist/types/background/background-process-log-table-entry.d.ts +11 -0
  285. package/dist/types/background/background-queue-response-internal.d.ts +8 -0
  286. package/dist/types/background/background-validator.d.ts +20 -0
  287. package/dist/types/background/epsilon-background-process-error.d.ts +30 -0
  288. package/dist/types/background/internal-background-entry.d.ts +7 -0
  289. package/dist/types/background/manager/abstract-background-manager.d.ts +26 -0
  290. package/dist/types/background/manager/aws-sqs-sns-background-manager.d.ts +30 -0
  291. package/dist/types/background/manager/background-manager-like.d.ts +24 -0
  292. package/dist/types/background/manager/single-thread-local-background-manager.d.ts +22 -0
  293. package/dist/types/background/s3-background-transaction-logger.d.ts +17 -0
  294. package/dist/types/build/ratchet-epsilon-common-info.d.ts +5 -0
  295. package/dist/types/built-in/background/echo-processor.d.ts +7 -0
  296. package/dist/types/built-in/background/log-and-enqueue-echo-processor.d.ts +6 -0
  297. package/dist/types/built-in/background/log-message-background-error-processor.d.ts +5 -0
  298. package/dist/types/built-in/background/no-op-processor.d.ts +6 -0
  299. package/dist/types/built-in/background/retry-processor.d.ts +16 -0
  300. package/dist/types/built-in/background/sample-delay-processor.d.ts +6 -0
  301. package/dist/types/built-in/background/sample-input-validated-processor-data.d.ts +4 -0
  302. package/dist/types/built-in/background/sample-input-validated-processor.d.ts +8 -0
  303. package/dist/types/built-in/built-in-trace-id-generators.d.ts +5 -0
  304. package/dist/types/built-in/daemon/daemon-authorizer-function.d.ts +5 -0
  305. package/dist/types/built-in/daemon/daemon-config.d.ts +8 -0
  306. package/dist/types/built-in/daemon/daemon-group-selection-function.d.ts +4 -0
  307. package/dist/types/built-in/daemon/daemon-handler.d.ts +22 -0
  308. package/dist/types/built-in/daemon/daemon-process-state-list.d.ts +8 -0
  309. package/dist/types/built-in/http/apollo-filter.d.ts +10 -0
  310. package/dist/types/built-in/http/built-in-auth-filters.d.ts +9 -0
  311. package/dist/types/built-in/http/built-in-authorizers.d.ts +8 -0
  312. package/dist/types/built-in/http/built-in-filters.d.ts +25 -0
  313. package/dist/types/built-in/http/built-in-handlers.d.ts +9 -0
  314. package/dist/types/built-in/http/log-level-manipulation-filter.d.ts +9 -0
  315. package/dist/types/built-in/http/run-handler-as-filter.d.ts +12 -0
  316. package/dist/types/cli-bootstrap/epsilon-run-background-process-from-command-line-dry-run.d.ts +2 -0
  317. package/dist/types/config/background/background-aws-config.d.ts +7 -0
  318. package/dist/types/config/background/background-config.d.ts +14 -0
  319. package/dist/types/config/background/background-error-processor.d.ts +4 -0
  320. package/dist/types/config/background/background-processor.d.ts +6 -0
  321. package/dist/types/config/background/background-transaction-log.d.ts +8 -0
  322. package/dist/types/config/background/background-transaction-logger.d.ts +5 -0
  323. package/dist/types/config/cron/abstract-cron-entry.d.ts +12 -0
  324. package/dist/types/config/cron/cron-background-entry.d.ts +15 -0
  325. package/dist/types/config/cron/cron-config.d.ts +6 -0
  326. package/dist/types/config/dynamo-db-config.d.ts +5 -0
  327. package/dist/types/config/epsilon-config.d.ts +20 -0
  328. package/dist/types/config/epsilon-lambda-event-handler.d.ts +7 -0
  329. package/dist/types/config/epsilon-logger-config.d.ts +12 -0
  330. package/dist/types/config/generic-aws-event-handler-function.d.ts +3 -0
  331. package/dist/types/config/http/authorizer-function.d.ts +6 -0
  332. package/dist/types/config/http/epsilon-authorization-context.d.ts +5 -0
  333. package/dist/types/config/http/extended-api-gateway-event.d.ts +7 -0
  334. package/dist/types/config/http/filter-chain-context.d.ts +14 -0
  335. package/dist/types/config/http/filter-function.d.ts +4 -0
  336. package/dist/types/config/http/handler-function.d.ts +5 -0
  337. package/dist/types/config/http/http-config.d.ts +15 -0
  338. package/dist/types/config/http/http-processing-config.d.ts +11 -0
  339. package/dist/types/config/http/mapped-http-processing-config.d.ts +7 -0
  340. package/dist/types/config/http/null-returned-object-handling.d.ts +5 -0
  341. package/dist/types/config/inter-api/inter-api-aws-config.d.ts +5 -0
  342. package/dist/types/config/inter-api/inter-api-config.d.ts +6 -0
  343. package/dist/types/config/inter-api/inter-api-process-mapping.d.ts +11 -0
  344. package/dist/types/config/logging-trace-id-generator.d.ts +4 -0
  345. package/dist/types/config/open-api/open-api-document-components.d.ts +4 -0
  346. package/dist/types/config/open-api/open-api-document-path.d.ts +2 -0
  347. package/dist/types/config/open-api/open-api-document.d.ts +6 -0
  348. package/dist/types/config/s3-config.d.ts +6 -0
  349. package/dist/types/config/sns-config.d.ts +5 -0
  350. package/dist/types/epsilon-build-properties.d.ts +9 -0
  351. package/dist/types/epsilon-constants.d.ts +16 -0
  352. package/dist/types/epsilon-global-handler.d.ts +23 -0
  353. package/dist/types/epsilon-instance.d.ts +19 -0
  354. package/dist/types/epsilon-logging-extension-processor.d.ts +5 -0
  355. package/dist/types/http/auth/api-gateway-adapter-authentication-handler.d.ts +18 -0
  356. package/dist/types/http/auth/auth0-web-token-manipulator.d.ts +13 -0
  357. package/dist/types/http/auth/basic-auth-token.d.ts +7 -0
  358. package/dist/types/http/auth/google-web-token-manipulator.d.ts +14 -0
  359. package/dist/types/http/auth/jwt-ratchet-local-web-token-manipulator.d.ts +13 -0
  360. package/dist/types/http/auth/local-web-token-manipulator.d.ts +20 -0
  361. package/dist/types/http/auth/web-token-manipulator.d.ts +7 -0
  362. package/dist/types/http/error/bad-gateway.d.ts +5 -0
  363. package/dist/types/http/error/bad-request-error.d.ts +5 -0
  364. package/dist/types/http/error/conflict-error.d.ts +5 -0
  365. package/dist/types/http/error/epsilon-http-error.d.ts +41 -0
  366. package/dist/types/http/error/forbidden-error.d.ts +5 -0
  367. package/dist/types/http/error/gateway-timeout.d.ts +5 -0
  368. package/dist/types/http/error/method-not-allowed-error.d.ts +5 -0
  369. package/dist/types/http/error/misconfigured-error.d.ts +5 -0
  370. package/dist/types/http/error/not-found-error.d.ts +5 -0
  371. package/dist/types/http/error/not-implemented.d.ts +5 -0
  372. package/dist/types/http/error/request-timeout-error.d.ts +5 -0
  373. package/dist/types/http/error/service-unavailable.d.ts +5 -0
  374. package/dist/types/http/error/too-many-requests-error.d.ts +5 -0
  375. package/dist/types/http/error/unauthorized-error.d.ts +5 -0
  376. package/dist/types/http/event-util.d.ts +47 -0
  377. package/dist/types/http/response-util.d.ts +11 -0
  378. package/dist/types/http/route/epsilon-router.d.ts +8 -0
  379. package/dist/types/http/route/extended-auth-response-context.d.ts +6 -0
  380. package/dist/types/http/route/route-mapping.d.ts +12 -0
  381. package/dist/types/http/route/route-validator-config.d.ts +5 -0
  382. package/dist/types/http/route/router-util.d.ts +26 -0
  383. package/dist/types/http/web-handler.d.ts +26 -0
  384. package/dist/types/http/web-v2-handler.d.ts +13 -0
  385. package/dist/types/index.d.ts +136 -0
  386. package/dist/types/inter-api/inter-api-entry.d.ts +7 -0
  387. package/dist/types/inter-api/inter-api-util.d.ts +10 -0
  388. package/dist/types/inter-api-manager.d.ts +17 -0
  389. package/dist/types/lambda-event-handler/cron-epsilon-lambda-event-handler.d.ts +14 -0
  390. package/dist/types/lambda-event-handler/dynamo-epsilon-lambda-event-handler.d.ts +11 -0
  391. package/dist/types/lambda-event-handler/generic-sns-epsilon-lambda-event-handler.d.ts +10 -0
  392. package/dist/types/lambda-event-handler/inter-api-epsilon-lambda-event-handler.d.ts +10 -0
  393. package/dist/types/lambda-event-handler/s3-epsilon-lambda-event-handler.d.ts +10 -0
  394. package/dist/types/local-container-server.d.ts +13 -0
  395. package/dist/types/local-server-cert.d.ts +5 -0
  396. package/dist/types/local-server.d.ts +19 -0
  397. package/dist/types/open-api-util/open-api-doc-modifications.d.ts +8 -0
  398. package/dist/types/open-api-util/open-api-doc-modifier.d.ts +10 -0
  399. package/dist/types/open-api-util/yaml-combiner.d.ts +3 -0
  400. package/dist/types/run-background-process-from-command-line.d.ts +13 -0
  401. package/dist/types/sample/sample-batch-only-local-server.d.ts +1 -0
  402. package/dist/types/sample/sample-local-server.d.ts +1 -0
  403. package/dist/types/sample/sample-server-components.d.ts +12 -0
  404. package/dist/types/test-error-server.d.ts +13 -0
  405. package/dist/types/util/aws-util.d.ts +8 -0
  406. package/dist/types/util/context-util.d.ts +33 -0
  407. package/dist/types/util/cron-util.d.ts +11 -0
  408. package/dist/types/util/epsilon-config-parser.d.ts +14 -0
  409. package/package.json +132 -0
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseUtil = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
6
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
7
+ const zlib_1 = tslib_1.__importDefault(require("zlib"));
8
+ class ResponseUtil {
9
+ constructor() { }
10
+ static errorResponse(err) {
11
+ const body = {
12
+ errors: err.errors,
13
+ httpStatusCode: err.httpStatusCode,
14
+ requestId: err.requestId,
15
+ };
16
+ if (err.detailErrorCode) {
17
+ body['detailErrorCode'] = err.detailErrorCode;
18
+ }
19
+ if (err.endUserErrors && err.endUserErrors.length > 0) {
20
+ body['endUserErrors'] = err.endUserErrors;
21
+ }
22
+ if (err.details) {
23
+ body['details'] = err.details;
24
+ }
25
+ if (err.wrappedError) {
26
+ body['wrappedError'] = err.wrappedError.name + ' : ' + err.wrappedError.message;
27
+ }
28
+ const errorResponse = {
29
+ statusCode: err.httpStatusCode,
30
+ isBase64Encoded: false,
31
+ headers: {
32
+ 'Content-Type': 'application/json',
33
+ },
34
+ body: JSON.stringify(body),
35
+ };
36
+ return errorResponse;
37
+ }
38
+ static redirect(target, code = 301, queryParams = null) {
39
+ if (code !== 301 && code !== 302 && code !== 307) {
40
+ throw new Error('Code must be 301 or 302 or 307 for a redirect');
41
+ }
42
+ let redirectTarget = target;
43
+ if (queryParams) {
44
+ const keys = Object.keys(queryParams);
45
+ if (keys.length > 0) {
46
+ ratchet_common_1.Logger.silly('Applying params to input target : %j', queryParams);
47
+ redirectTarget += redirectTarget.indexOf('?') === -1 ? '?' : '&';
48
+ for (let i = 0; i < keys.length; i++) {
49
+ const k = keys[i];
50
+ redirectTarget += k + '=' + encodeURIComponent(queryParams[k]);
51
+ if (i < keys.length - 1) {
52
+ redirectTarget += '&';
53
+ }
54
+ }
55
+ }
56
+ }
57
+ return {
58
+ statusCode: code,
59
+ body: '{"redirect-target":"' + redirectTarget + '}',
60
+ headers: {
61
+ 'Content-Type': 'application/json',
62
+ Location: redirectTarget,
63
+ },
64
+ };
65
+ }
66
+ static coerceToProxyResult(input) {
67
+ let rval = null;
68
+ if (input != null) {
69
+ if (typeof input === 'object') {
70
+ if (input.statusCode && input.body !== undefined) {
71
+ rval = Object.assign({}, input);
72
+ if (typeof input.body === 'string') {
73
+ }
74
+ else if (Buffer.isBuffer(input.body)) {
75
+ rval.body = input.body.toString('base64');
76
+ rval.headers = input.headers || {};
77
+ rval.headers['Content-Type'] = input.body.contentType;
78
+ rval.isBase64Encoded = true;
79
+ }
80
+ }
81
+ else {
82
+ const headers = input.headers || {};
83
+ headers['Content-Type'] = 'application/json';
84
+ rval = ResponseUtil.coerceToProxyResult({
85
+ statusCode: 200,
86
+ body: JSON.stringify(input),
87
+ headers: headers,
88
+ isBase64Encoded: false,
89
+ });
90
+ }
91
+ }
92
+ else if (typeof input === 'string' || Buffer.isBuffer(input)) {
93
+ rval = ResponseUtil.coerceToProxyResult({ statusCode: 200, body: input });
94
+ }
95
+ else {
96
+ const headers = input.headers || {};
97
+ headers['Content-Type'] = 'application/json';
98
+ rval = ResponseUtil.coerceToProxyResult({
99
+ statusCode: 200,
100
+ body: JSON.stringify(input),
101
+ headers: headers,
102
+ isBase64Encoded: false,
103
+ });
104
+ }
105
+ }
106
+ return rval;
107
+ }
108
+ static async applyGzipIfPossible(encodingHeader, proxyResult) {
109
+ const rval = proxyResult;
110
+ if (encodingHeader && encodingHeader.toLowerCase().indexOf('gzip') > -1) {
111
+ const bigEnough = proxyResult.body.length > 1400;
112
+ let contentType = ratchet_common_2.MapRatchet.extractValueFromMapIgnoreCase(proxyResult.headers, 'content-type') || '';
113
+ contentType = contentType.toLowerCase();
114
+ const exemptContent = contentType === 'application/pdf' || contentType === 'application/zip' || contentType.startsWith('image/');
115
+ if (bigEnough && !exemptContent) {
116
+ const asBuffer = proxyResult.isBase64Encoded ? Buffer.from(proxyResult.body, 'base64') : Buffer.from(proxyResult.body);
117
+ const zipped = await this.gzip(asBuffer);
118
+ ratchet_common_1.Logger.info('Comp from %s to %d bytes', asBuffer.length, zipped.length);
119
+ const zipped64 = zipped.toString('base64');
120
+ rval.body = zipped64;
121
+ rval.isBase64Encoded = true;
122
+ rval.headers = rval.headers || {};
123
+ rval.headers['Content-Encoding'] = 'gzip';
124
+ }
125
+ else {
126
+ ratchet_common_1.Logger.silly('Not gzipping, too small or exempt content');
127
+ }
128
+ }
129
+ else {
130
+ ratchet_common_1.Logger.silly('Not gzipping, not an accepted encoding');
131
+ }
132
+ return rval;
133
+ }
134
+ static gzip(input) {
135
+ const promise = new Promise(function (resolve, reject) {
136
+ zlib_1.default.gzip(input, function (error, result) {
137
+ if (!error)
138
+ resolve(result);
139
+ else
140
+ reject(error);
141
+ });
142
+ });
143
+ return promise;
144
+ }
145
+ }
146
+ exports.ResponseUtil = ResponseUtil;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouterUtil = void 0;
4
+ const misconfigured_error_1 = require("../error/misconfigured-error");
5
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
6
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
7
+ const null_returned_object_handling_1 = require("../../config/http/null-returned-object-handling");
8
+ const built_in_filters_1 = require("../../built-in/http/built-in-filters");
9
+ const built_in_handlers_1 = require("../../built-in/http/built-in-handlers");
10
+ const built_in_auth_filters_1 = require("../../built-in/http/built-in-auth-filters");
11
+ const log_level_manipulation_filter_1 = require("../../built-in/http/log-level-manipulation-filter");
12
+ class RouterUtil {
13
+ constructor() { }
14
+ static defaultAuthenticationHeaderParsingEpsilonPreFilters(webTokenManipulator) {
15
+ return [
16
+ (fCtx) => built_in_auth_filters_1.BuiltInAuthFilters.parseAuthorizationHeader(fCtx, webTokenManipulator),
17
+ (fCtx) => built_in_auth_filters_1.BuiltInAuthFilters.applyOpenApiAuthorization(fCtx),
18
+ ].concat(RouterUtil.defaultEpsilonPreFilters());
19
+ }
20
+ static defaultEpsilonPreFilters() {
21
+ return [
22
+ (fCtx) => built_in_filters_1.BuiltInFilters.autoRespondToOptionsRequestWithCors(fCtx),
23
+ (fCtx) => built_in_filters_1.BuiltInFilters.ensureEventMaps(fCtx),
24
+ (fCtx) => log_level_manipulation_filter_1.LogLevelManipulationFilter.setLogLevelForTransaction(fCtx),
25
+ (fCtx) => built_in_filters_1.BuiltInFilters.parseJsonBodyToObject(fCtx),
26
+ (fCtx) => built_in_filters_1.BuiltInFilters.fixStillEncodedQueryParams(fCtx),
27
+ (fCtx) => built_in_filters_1.BuiltInFilters.uriDecodeQueryParams(fCtx),
28
+ (fCtx) => built_in_filters_1.BuiltInFilters.disallowStringNullAsPathParameter(fCtx),
29
+ (fCtx) => built_in_filters_1.BuiltInFilters.disallowStringNullAsQueryStringParameter(fCtx),
30
+ (fCtx) => built_in_filters_1.BuiltInFilters.validateInboundBody(fCtx),
31
+ (fCtx) => built_in_filters_1.BuiltInFilters.validateInboundQueryParams(fCtx),
32
+ (fCtx) => built_in_filters_1.BuiltInFilters.validateInboundQueryParams(fCtx),
33
+ ];
34
+ }
35
+ static defaultEpsilonPostFilters() {
36
+ return [
37
+ (fCtx) => built_in_filters_1.BuiltInFilters.validateOutboundResponse(fCtx),
38
+ (fCtx) => built_in_filters_1.BuiltInFilters.addAWSRequestIdHeader(fCtx),
39
+ (fCtx) => built_in_filters_1.BuiltInFilters.addAllowReflectionCORSHeaders(fCtx),
40
+ (fCtx) => built_in_filters_1.BuiltInFilters.applyGzipIfPossible(fCtx),
41
+ (fCtx) => built_in_filters_1.BuiltInFilters.checkMaximumLambdaBodySize(fCtx),
42
+ (fCtx) => log_level_manipulation_filter_1.LogLevelManipulationFilter.clearLogLevelForTransaction(fCtx),
43
+ ];
44
+ }
45
+ static defaultEpsilonErrorFilters() {
46
+ return [
47
+ (fCtx) => built_in_filters_1.BuiltInFilters.addAWSRequestIdHeader(fCtx),
48
+ (fCtx) => built_in_filters_1.BuiltInFilters.addAllowReflectionCORSHeaders(fCtx),
49
+ (fCtx) => log_level_manipulation_filter_1.LogLevelManipulationFilter.clearLogLevelForTransaction(fCtx),
50
+ ];
51
+ }
52
+ static defaultHttpMetaProcessingConfigWithAuthenticationHeaderParsing(webTokenManipulator) {
53
+ const defaults = {
54
+ configName: 'EpsilonDefaultHttpMetaProcessingConfig',
55
+ timeoutMS: 30000,
56
+ overrideAuthorizerName: null,
57
+ preFilters: RouterUtil.defaultAuthenticationHeaderParsingEpsilonPreFilters(webTokenManipulator),
58
+ postFilters: RouterUtil.defaultEpsilonPostFilters(),
59
+ errorFilters: RouterUtil.defaultEpsilonErrorFilters(),
60
+ nullReturnedObjectHandling: null_returned_object_handling_1.NullReturnedObjectHandling.Return404NotFoundResponse,
61
+ };
62
+ return defaults;
63
+ }
64
+ static defaultHttpMetaProcessingConfig() {
65
+ const defaults = {
66
+ configName: 'EpsilonDefaultHttpMetaProcessingConfig',
67
+ timeoutMS: 30000,
68
+ overrideAuthorizerName: null,
69
+ preFilters: RouterUtil.defaultEpsilonPreFilters(),
70
+ postFilters: RouterUtil.defaultEpsilonPostFilters(),
71
+ errorFilters: RouterUtil.defaultEpsilonErrorFilters(),
72
+ nullReturnedObjectHandling: null_returned_object_handling_1.NullReturnedObjectHandling.Return404NotFoundResponse,
73
+ };
74
+ return defaults;
75
+ }
76
+ static assignDefaultsOnHttpConfig(cfg) {
77
+ const defaults = {
78
+ handlers: new Map(),
79
+ authorizers: new Map(),
80
+ defaultMetaHandling: this.defaultHttpMetaProcessingConfig(),
81
+ staticContentRoutes: {},
82
+ prefixesToStripBeforeRouteMatch: [],
83
+ filterHandledRouteMatches: ['options .*'],
84
+ };
85
+ const rval = Object.assign({}, defaults, cfg || {});
86
+ return rval;
87
+ }
88
+ static findApplicableMeta(httpConfig, method, path) {
89
+ let rval = null;
90
+ if (httpConfig === null || httpConfig === void 0 ? void 0 : httpConfig.overrideMetaHandling) {
91
+ for (let i = 0; i < httpConfig.overrideMetaHandling.length && !rval; i++) {
92
+ const test = httpConfig.overrideMetaHandling[i];
93
+ if (!test.methods ||
94
+ test.methods.length === 0 ||
95
+ test.methods.map((s) => s.toLocaleLowerCase()).includes(method.toLocaleLowerCase())) {
96
+ const matches = !!path.match(test.pathRegex);
97
+ if ((matches && !test.invertPathMatching) || (!matches && test.invertPathMatching)) {
98
+ rval = test.config;
99
+ }
100
+ }
101
+ }
102
+ }
103
+ if (!rval) {
104
+ rval = httpConfig.defaultMetaHandling || RouterUtil.defaultHttpMetaProcessingConfig();
105
+ }
106
+ return rval;
107
+ }
108
+ static openApiYamlToRouterConfig(httpConfig, openApiDoc, modelValidator, backgroundHttpAdapterHandler) {
109
+ var _a;
110
+ if (!openApiDoc || !httpConfig) {
111
+ throw new misconfigured_error_1.MisconfiguredError('Cannot configure, missing either yaml or cfg');
112
+ }
113
+ const rval = {
114
+ routes: [],
115
+ openApiModelValidator: modelValidator,
116
+ config: RouterUtil.assignDefaultsOnHttpConfig(httpConfig),
117
+ };
118
+ if ((_a = openApiDoc === null || openApiDoc === void 0 ? void 0 : openApiDoc.components) === null || _a === void 0 ? void 0 : _a.securitySchemes) {
119
+ Object.keys(openApiDoc.components.securitySchemes).forEach((sk) => {
120
+ if (!rval.config.authorizers || !rval.config.authorizers.get(sk)) {
121
+ throw new misconfigured_error_1.MisconfiguredError().withFormattedErrorMessage('Doc requires authorizer %s but not found in map', sk);
122
+ }
123
+ });
124
+ }
125
+ const missingPaths = [];
126
+ const filterHandledPathMatches = httpConfig.filterHandledRouteMatches || [];
127
+ if (openApiDoc === null || openApiDoc === void 0 ? void 0 : openApiDoc.paths) {
128
+ Object.keys(openApiDoc.paths).forEach((path) => {
129
+ Object.keys(openApiDoc.paths[path]).forEach((method) => {
130
+ const convertedPath = RouterUtil.openApiPathToRouteParserPath(path);
131
+ const finder = method + ' ' + path;
132
+ const applicableMeta = RouterUtil.findApplicableMeta(httpConfig, method, path);
133
+ const entry = openApiDoc.paths[path][method];
134
+ const isBackgroundEndpoint = path.startsWith(backgroundHttpAdapterHandler.httpSubmissionPath);
135
+ const isBackgroundMetaEndpoint = path === backgroundHttpAdapterHandler.httpMetaEndpoint;
136
+ const isBackgroundStatusEndpoint = path === backgroundHttpAdapterHandler.httpStatusPath;
137
+ if (isBackgroundEndpoint) {
138
+ rval.config.handlers.set(finder, (evt, ctx) => backgroundHttpAdapterHandler.handleBackgroundSubmission(evt, ctx));
139
+ }
140
+ if (isBackgroundMetaEndpoint) {
141
+ rval.config.handlers.set(finder, (evt, ctx) => backgroundHttpAdapterHandler.handleBackgroundMetaRequest(evt, ctx));
142
+ }
143
+ if (isBackgroundStatusEndpoint) {
144
+ rval.config.handlers.set(finder, (evt, ctx) => backgroundHttpAdapterHandler.handleBackgroundStatusRequest(evt, ctx));
145
+ }
146
+ if (!rval.config.handlers || !rval.config.handlers.get(finder)) {
147
+ const match = filterHandledPathMatches.find((reg) => finder.match(reg));
148
+ if (match) {
149
+ ratchet_common_1.Logger.debug('Adding filter-handled handler for %s', finder);
150
+ rval.config.handlers.set(finder, (evt) => built_in_handlers_1.BuiltInHandlers.expectedHandledByFilter(evt));
151
+ }
152
+ else {
153
+ missingPaths.push(finder);
154
+ }
155
+ }
156
+ if (entry && entry['security'] && entry['security'].length > 1) {
157
+ throw new misconfigured_error_1.MisconfiguredError('Epsilon does not currently support multiple security (path was ' + finder + ')');
158
+ }
159
+ const authorizerName = entry['security'] && entry['security'].length == 1 ? Object.keys(entry['security'][0])[0] : null;
160
+ const newRoute = {
161
+ path: convertedPath,
162
+ method: method,
163
+ function: rval.config.handlers.get(finder),
164
+ authorizerName: applicableMeta.overrideAuthorizerName || authorizerName,
165
+ metaProcessingConfig: applicableMeta,
166
+ validation: null,
167
+ outboundValidation: null,
168
+ };
169
+ if (entry['requestBody'] &&
170
+ entry['requestBody']['content'] &&
171
+ entry['requestBody']['content']['application/json'] &&
172
+ entry['requestBody']['content']['application/json']['schema']) {
173
+ const schema = entry['requestBody']['content'];
174
+ ratchet_common_1.Logger.silly('Applying schema %j to %s', schema, finder);
175
+ const modelName = this.findAndValidateModelName(method, path, schema, rval.config.overrideModelValidator || rval.openApiModelValidator);
176
+ const required = ratchet_common_2.BooleanRatchet.parseBool(entry['requestBody']['required']);
177
+ const validation = {
178
+ extraPropertiesAllowed: true,
179
+ emptyAllowed: !required,
180
+ modelName: modelName,
181
+ };
182
+ newRoute.validation = validation;
183
+ }
184
+ if (entry['responses'] &&
185
+ entry['responses']['200'] &&
186
+ entry['responses']['200']['content'] &&
187
+ entry['responses']['200']['content']['application/json'] &&
188
+ entry['responses']['200']['content']['application/json']['schema']) {
189
+ const schema = entry['responses']['200']['content'];
190
+ ratchet_common_1.Logger.silly('Applying schema %j to %s', schema, finder);
191
+ const modelName = this.findAndValidateModelName(method, path, schema, rval.config.overrideModelValidator || rval.openApiModelValidator);
192
+ const validation = {
193
+ extraPropertiesAllowed: false,
194
+ emptyAllowed: false,
195
+ modelName: modelName,
196
+ };
197
+ newRoute.outboundValidation = validation;
198
+ }
199
+ rval.routes.push(newRoute);
200
+ });
201
+ });
202
+ }
203
+ if (missingPaths.length > 0) {
204
+ throw new misconfigured_error_1.MisconfiguredError().withFormattedErrorMessage('Missing expected handlers : %j', missingPaths);
205
+ }
206
+ return rval;
207
+ }
208
+ static findAndValidateModelName(method, path, schema, modelValidator) {
209
+ let rval = undefined;
210
+ const schemaPath = schema['application/json']['schema']['$ref'];
211
+ const inlinePath = schema['application/json']['schema']['type'];
212
+ if (schemaPath) {
213
+ rval = schemaPath.substring(schemaPath.lastIndexOf('/') + 1);
214
+ if (!modelValidator.fetchModel(rval)) {
215
+ throw new misconfigured_error_1.MisconfiguredError(`Path ${method} ${path} refers to schema ${rval} but its not in the schema section`);
216
+ }
217
+ }
218
+ else if (inlinePath) {
219
+ rval = `${method}-${path}-requestBodyModel`;
220
+ const model = schema['application/json']['schema'];
221
+ modelValidator.addModel(rval, model);
222
+ }
223
+ return rval;
224
+ }
225
+ static openApiPathToRouteParserPath(input) {
226
+ let rval = input;
227
+ if (rval) {
228
+ let sIdx = rval.indexOf('{');
229
+ while (sIdx > -1) {
230
+ const eIdx = rval.indexOf('}');
231
+ rval = rval.substring(0, sIdx) + ':' + rval.substring(sIdx + 1, eIdx) + rval.substring(eIdx + 1);
232
+ sIdx = rval.indexOf('{');
233
+ }
234
+ }
235
+ return rval;
236
+ }
237
+ }
238
+ exports.RouterUtil = RouterUtil;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebHandler = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
6
+ const route_parser_1 = tslib_1.__importDefault(require("route-parser"));
7
+ const response_util_1 = require("./response-util");
8
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
9
+ const epsilon_http_error_1 = require("./error/epsilon-http-error");
10
+ const built_in_filters_1 = require("../built-in/http/built-in-filters");
11
+ const run_handler_as_filter_1 = require("../built-in/http/run-handler-as-filter");
12
+ const context_util_1 = require("../util/context-util");
13
+ const ratchet_common_3 = require("@bitblit/ratchet-common");
14
+ const ratchet_aws_1 = require("@bitblit/ratchet-aws");
15
+ class WebHandler {
16
+ constructor(routerConfig) {
17
+ this.routerConfig = routerConfig;
18
+ ratchet_common_2.RequireRatchet.notNullOrUndefined(routerConfig);
19
+ }
20
+ get router() {
21
+ return this.routerConfig;
22
+ }
23
+ extractLabel(evt, context) {
24
+ return 'WEB:' + ratchet_common_3.StringRatchet.trimToEmpty(evt.httpMethod).toUpperCase() + ':' + evt.path;
25
+ }
26
+ handlesEvent(evt) {
27
+ return ratchet_aws_1.LambdaEventDetector.isValidApiGatewayEvent(evt);
28
+ }
29
+ async processEvent(event, context) {
30
+ if (!this.routerConfig) {
31
+ throw new Error('Router config not found');
32
+ }
33
+ const asExtended = Object.assign({}, { parsedBody: null, authorization: null, convertedFromV2Event: false }, event);
34
+ const rval = await this.openApiLambdaHandler(asExtended, context);
35
+ context_util_1.ContextUtil.addTraceToProxyResult(rval);
36
+ ratchet_common_1.Logger.updateTracePrefix(null);
37
+ return rval;
38
+ }
39
+ async openApiLambdaHandler(evt, context) {
40
+ var _a;
41
+ const rm = this.findBestMatchingRoute(evt);
42
+ const procConfig = ((_a = rm === null || rm === void 0 ? void 0 : rm.mapping) === null || _a === void 0 ? void 0 : _a.metaProcessingConfig)
43
+ ? rm.mapping.metaProcessingConfig
44
+ : this.routerConfig.config.defaultMetaHandling;
45
+ const fCtx = {
46
+ event: evt,
47
+ context: context,
48
+ result: null,
49
+ rawResult: null,
50
+ routeAndParse: rm,
51
+ modelValidator: this.routerConfig.config.overrideModelValidator || this.routerConfig.openApiModelValidator,
52
+ authenticators: this.routerConfig.config.authorizers,
53
+ };
54
+ try {
55
+ let filterChain = Object.assign([], procConfig.preFilters || []);
56
+ run_handler_as_filter_1.RunHandlerAsFilter.addRunHandlerAsFilterToList(filterChain, rm);
57
+ filterChain = filterChain.concat(procConfig.postFilters || []);
58
+ await built_in_filters_1.BuiltInFilters.combineFilters(fCtx, filterChain);
59
+ }
60
+ catch (err) {
61
+ const wrapper = epsilon_http_error_1.EpsilonHttpError.wrapError(err);
62
+ fCtx.result = response_util_1.ResponseUtil.errorResponse(wrapper);
63
+ try {
64
+ await built_in_filters_1.BuiltInFilters.combineFilters(fCtx, procConfig.errorFilters);
65
+ }
66
+ catch (convErr) {
67
+ ratchet_common_1.Logger.error('REALLY BAD - FAILED WHILE PROCESSING ERROR FILTERS : %s', convErr);
68
+ }
69
+ }
70
+ return fCtx.result;
71
+ }
72
+ findBestMatchingRoute(event) {
73
+ let rval = null;
74
+ const cleanPath = this.cleanPath(event);
75
+ const methodLower = event.httpMethod.toLowerCase();
76
+ const matchRoutes = this.routerConfig.routes
77
+ .map((r) => {
78
+ let rval = null;
79
+ if (r.method && r.method.toLowerCase() === methodLower) {
80
+ const routeParser = new route_parser_1.default(r.path);
81
+ const parsed = routeParser.match(cleanPath);
82
+ if (parsed !== false) {
83
+ rval = {
84
+ mapping: r,
85
+ route: routeParser,
86
+ parsed: parsed,
87
+ };
88
+ }
89
+ }
90
+ return rval;
91
+ })
92
+ .filter((r) => r != null);
93
+ matchRoutes.sort((a, b) => {
94
+ return Object.keys(a.parsed).length - Object.keys(b.parsed).length;
95
+ });
96
+ rval = matchRoutes && matchRoutes.length > 0 ? matchRoutes[0] : null;
97
+ if (!rval) {
98
+ ratchet_common_1.Logger.debug('Failed to find handler for %s (cleaned path was %s, strip prefixes were %j)', event.path, cleanPath, this.routerConfig.config.prefixesToStripBeforeRouteMatch);
99
+ }
100
+ return rval;
101
+ }
102
+ cleanPath(event) {
103
+ let rval = event.path;
104
+ while (rval.startsWith('/')) {
105
+ rval = rval.substring(1);
106
+ }
107
+ if (this.routerConfig.config.prefixesToStripBeforeRouteMatch) {
108
+ this.routerConfig.config.prefixesToStripBeforeRouteMatch.forEach((prefix) => {
109
+ if (rval.toLowerCase().startsWith(prefix.toLowerCase() + '/')) {
110
+ rval = rval.substring(prefix.length);
111
+ }
112
+ });
113
+ }
114
+ while (rval.startsWith('/')) {
115
+ rval = rval.substring(1);
116
+ }
117
+ rval = '/' + rval;
118
+ return rval;
119
+ }
120
+ }
121
+ exports.WebHandler = WebHandler;
122
+ WebHandler.MAXIMUM_LAMBDA_BODY_SIZE_BYTES = 1024 * 1024 * 5 - 1024 * 100;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebV2Handler = void 0;
4
+ const aws_util_1 = require("../util/aws-util");
5
+ const ratchet_aws_1 = require("@bitblit/ratchet-aws");
6
+ class WebV2Handler {
7
+ constructor(webHandler) {
8
+ this.webHandler = webHandler;
9
+ }
10
+ extractLabel(evt, context) {
11
+ let rval = this.webHandler.extractLabel(aws_util_1.AwsUtil.apiGatewayV2ToApiGatewayV1(evt), context);
12
+ rval = rval.replace('WEB:', 'WEB2:');
13
+ return rval;
14
+ }
15
+ handlesEvent(evt) {
16
+ return ratchet_aws_1.LambdaEventDetector.isValidApiGatewayV2WithRequestContextEvent(evt);
17
+ }
18
+ async processEvent(evt, context) {
19
+ const conv = aws_util_1.AwsUtil.apiGatewayV2ToApiGatewayV1(evt);
20
+ const asExtended = Object.assign({}, { parsedBody: null, authorization: null, convertedFromV2Event: true }, conv);
21
+ const rval = await this.webHandler.openApiLambdaHandler(asExtended, context);
22
+ return rval;
23
+ }
24
+ }
25
+ exports.WebV2Handler = WebV2Handler;