@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,58 @@
1
+ import { LambdaEventDetector } from '@bitblit/ratchet-aws';
2
+ import { EpsilonConstants } from '../epsilon-constants';
3
+ import { RequireRatchet } from '@bitblit/ratchet-common';
4
+ import { Logger, StringRatchet } from '@bitblit/ratchet-common';
5
+ import { ContextUtil } from '../util/context-util';
6
+ export class InterApiUtil {
7
+ static isInterApiSnsEvent(event) {
8
+ return !!InterApiUtil.extractEntryFromEvent(event);
9
+ }
10
+ static extractEntryFromEvent(evt) {
11
+ let rval = null;
12
+ if (!!evt) {
13
+ if (LambdaEventDetector.isSingleSnsEvent(evt)) {
14
+ const cast = evt;
15
+ const msg = cast.Records[0].Sns.Message;
16
+ if (!!StringRatchet.trimToNull(msg)) {
17
+ const parsed = JSON.parse(msg);
18
+ if (!!parsed && parsed['type'] === EpsilonConstants.INTER_API_SNS_EVENT) {
19
+ rval = parsed['interApiEvent'];
20
+ }
21
+ }
22
+ }
23
+ }
24
+ return rval;
25
+ }
26
+ static async processInterApiEvent(evt, cfg, mgr) {
27
+ let rval = [];
28
+ RequireRatchet.notNullOrUndefined(evt, 'InterApiEntry');
29
+ RequireRatchet.notNullOrUndefined(mgr, 'BackgroundManager');
30
+ const interApiEntry = InterApiUtil.extractEntryFromEvent(evt);
31
+ ContextUtil.setOverrideTraceFromInterApiEntry(interApiEntry);
32
+ Logger.info('Processing inter-api event : %j', evt);
33
+ const backgroundEntries = [];
34
+ cfg.processMappings.forEach((map) => {
35
+ if (!map.disabled && interApiEntry.source.match(map.sourceRegex) && interApiEntry.type.match(map.typeRegex)) {
36
+ map.backgroundProcessTypes.forEach((taskName) => {
37
+ const entry = mgr.createEntry(taskName, interApiEntry.data);
38
+ backgroundEntries.push(entry);
39
+ });
40
+ }
41
+ });
42
+ if (backgroundEntries.length > 0) {
43
+ Logger.info('Adding %d entries to queue', backgroundEntries.length);
44
+ rval = await mgr.addEntriesToQueue(backgroundEntries, true);
45
+ }
46
+ else {
47
+ Logger.info('No entries mapped for this event');
48
+ }
49
+ return rval;
50
+ }
51
+ static addTraceToInterApiEntry(ent) {
52
+ if (ent) {
53
+ ent.traceId = ent.traceId || ContextUtil.currentTraceId();
54
+ ent.traceDepth = ent.traceDepth || ContextUtil.currentTraceDepth() + 1;
55
+ }
56
+ return ent;
57
+ }
58
+ }
@@ -0,0 +1,63 @@
1
+ import { Logger } from '@bitblit/ratchet-common';
2
+ import { EpsilonConstants } from './epsilon-constants';
3
+ import { InterApiUtil } from './inter-api/inter-api-util';
4
+ import { PublishCommand } from '@aws-sdk/client-sns';
5
+ export class InterApiManager {
6
+ constructor(_aws, _sns) {
7
+ this._aws = _aws;
8
+ this._sns = _sns;
9
+ }
10
+ get config() {
11
+ return this._aws;
12
+ }
13
+ get sns() {
14
+ return this._sns;
15
+ }
16
+ createEntry(type, data) {
17
+ const rval = {
18
+ source: this._aws.source,
19
+ type: type,
20
+ data: data,
21
+ };
22
+ return rval;
23
+ }
24
+ async fireInterApiEventByParts(type, data) {
25
+ const entry = this.createEntry(type, data);
26
+ const rval = await this.fireInterApiEvent(entry);
27
+ return rval;
28
+ }
29
+ async fireInterApiEvent(entry) {
30
+ let rval = null;
31
+ if (this.config.localMode) {
32
+ Logger.info('Fire inter-api event ignored because running locally (was %j)', entry);
33
+ rval = 'INTER-API-IGNORED';
34
+ }
35
+ else {
36
+ try {
37
+ Logger.info('Firing inter-api event (remote) : %j ', entry);
38
+ const toWrite = {
39
+ type: EpsilonConstants.INTER_API_SNS_EVENT,
40
+ interApiEvent: InterApiUtil.addTraceToInterApiEntry(entry),
41
+ };
42
+ const msg = JSON.stringify(toWrite);
43
+ const snsId = await this.writeMessageToSnsTopic(msg);
44
+ Logger.debug('Inter-api Wrote message : %s to SNS : %s', rval, msg, snsId);
45
+ }
46
+ catch (err) {
47
+ Logger.error('Failed to fireImmediateProcessRequest : %s', err, err);
48
+ }
49
+ }
50
+ return rval;
51
+ }
52
+ async writeMessageToSnsTopic(message) {
53
+ let rval = null;
54
+ const params = {
55
+ Message: message,
56
+ TopicArn: this._aws.snsArn,
57
+ };
58
+ Logger.debug('Writing message to SNS topic : j', params);
59
+ const result = await this.sns.send(new PublishCommand(params));
60
+ rval = result.MessageId;
61
+ return rval;
62
+ }
63
+ }
@@ -0,0 +1,72 @@
1
+ import { Logger } from '@bitblit/ratchet-common';
2
+ import { AwsUtil } from '../util/aws-util';
3
+ import { CronUtil } from '../util/cron-util';
4
+ import { LambdaEventDetector } from '@bitblit/ratchet-aws';
5
+ export class CronEpsilonLambdaEventHandler {
6
+ constructor(_epsilon) {
7
+ this._epsilon = _epsilon;
8
+ }
9
+ extractLabel(evt, context) {
10
+ return 'CronEvt:' + evt.source;
11
+ }
12
+ handlesEvent(evt) {
13
+ return LambdaEventDetector.isValidCronEvent(evt);
14
+ }
15
+ async processEvent(evt, context) {
16
+ let rval = null;
17
+ Logger.debug('Epsilon: CRON: %j', evt);
18
+ if (!this._epsilon.config.cron) {
19
+ Logger.debug('Skipping - CRON disabled');
20
+ rval = {
21
+ statusCode: 200,
22
+ body: JSON.stringify({ message: 'CRON skipped - disabled' }),
23
+ isBase64Encoded: false,
24
+ };
25
+ }
26
+ else {
27
+ const output = await CronEpsilonLambdaEventHandler.processCronEvent(evt, this._epsilon.config.cron, this._epsilon.backgroundManager, this._epsilon.backgroundHandler);
28
+ rval = {
29
+ statusCode: 200,
30
+ body: JSON.stringify({ message: 'CRON complete' }),
31
+ isBase64Encoded: false,
32
+ };
33
+ }
34
+ return rval;
35
+ }
36
+ static async processCronEvent(evt, cronConfig, backgroundManager, background) {
37
+ let rval = false;
38
+ if (cronConfig && evt && evt.resources[0]) {
39
+ if (!!cronConfig.entries) {
40
+ if (!!background) {
41
+ const toEnqueue = [];
42
+ for (let i = 0; i < cronConfig.entries.length; i++) {
43
+ const smCronEntry = cronConfig.entries[i];
44
+ if (CronUtil.eventMatchesEntry(evt, smCronEntry, cronConfig)) {
45
+ Logger.info('CRON Firing : %s', CronUtil.cronEntryName(smCronEntry));
46
+ const backgroundEntry = {
47
+ type: smCronEntry.backgroundTaskType,
48
+ data: AwsUtil.resolvePotentialFunctionToResult(smCronEntry.data, {}),
49
+ };
50
+ Logger.silly('Resolved entry : %j', backgroundEntry);
51
+ if (smCronEntry.fireImmediate) {
52
+ await backgroundManager.fireImmediateProcessRequest(backgroundEntry);
53
+ rval = true;
54
+ }
55
+ else {
56
+ toEnqueue.push(backgroundEntry);
57
+ }
58
+ }
59
+ }
60
+ if (toEnqueue.length > 0) {
61
+ await backgroundManager.addEntriesToQueue(toEnqueue, true);
62
+ rval = true;
63
+ }
64
+ }
65
+ else {
66
+ Logger.warn('Cron defines background tasks, but no background manager provided');
67
+ }
68
+ }
69
+ }
70
+ return rval;
71
+ }
72
+ }
@@ -0,0 +1,32 @@
1
+ import { Logger } from '@bitblit/ratchet-common';
2
+ import { AwsUtil } from '../util/aws-util';
3
+ import { LambdaEventDetector } from '@bitblit/ratchet-aws';
4
+ export class DynamoEpsilonLambdaEventHandler {
5
+ constructor(_epsilon) {
6
+ this._epsilon = _epsilon;
7
+ }
8
+ extractLabel(evt, context) {
9
+ return 'DDBEvt:' + evt.Records[0].eventName + ':' + evt.Records[0].eventSource;
10
+ }
11
+ handlesEvent(evt) {
12
+ return LambdaEventDetector.isValidDynamoDBEvent(evt);
13
+ }
14
+ async processEvent(evt, context) {
15
+ let rval = null;
16
+ if (this._epsilon.config && this._epsilon.config.dynamoDb && evt && evt.Records && evt.Records.length > 0) {
17
+ const finder = evt.Records[0].eventSourceARN;
18
+ const handler = AwsUtil.findInMap(finder, this._epsilon.config.dynamoDb.handlers);
19
+ if (handler) {
20
+ rval = await handler(evt);
21
+ }
22
+ else {
23
+ Logger.info('Found no Dynamo handler for : %s', finder);
24
+ }
25
+ }
26
+ return rval;
27
+ }
28
+ async processUncaughtError(event, context, err) {
29
+ Logger.error('Error slipped out to outer edge (Dynamo). Logging and rethrowing : %s', err, err);
30
+ throw err;
31
+ }
32
+ }
@@ -0,0 +1,28 @@
1
+ import { Logger } from '@bitblit/ratchet-common';
2
+ import { AwsUtil } from '../util/aws-util';
3
+ import { LambdaEventDetector } from '@bitblit/ratchet-aws';
4
+ export class GenericSnsEpsilonLambdaEventHandler {
5
+ constructor(_epsilon) {
6
+ this._epsilon = _epsilon;
7
+ }
8
+ extractLabel(evt, context) {
9
+ return 'SNSEvt:' + evt.Records[0].EventSource;
10
+ }
11
+ handlesEvent(evt) {
12
+ return LambdaEventDetector.isValidSnsEvent(evt);
13
+ }
14
+ async processEvent(evt, context) {
15
+ let rval = null;
16
+ if (this._epsilon.config && this._epsilon.config.sns && evt && evt.Records.length > 0) {
17
+ const finder = evt.Records[0].Sns.TopicArn;
18
+ const handler = AwsUtil.findInMap(finder, this._epsilon.config.sns.handlers);
19
+ if (handler) {
20
+ rval = await handler(evt);
21
+ }
22
+ else {
23
+ Logger.info('Found no SNS handler for : %s', finder);
24
+ }
25
+ }
26
+ return rval;
27
+ }
28
+ }
@@ -0,0 +1,22 @@
1
+ import { InterApiUtil } from '../inter-api/inter-api-util';
2
+ export class InterApiEpsilonLambdaEventHandler {
3
+ constructor(_epsilon) {
4
+ this._epsilon = _epsilon;
5
+ }
6
+ extractLabel(evt, context) {
7
+ const ent = InterApiUtil.extractEntryFromEvent(evt);
8
+ return 'InterApi:' + ent.source + ':' + ent.type;
9
+ }
10
+ handlesEvent(evt) {
11
+ return this._epsilon.config.interApiConfig && InterApiUtil.isInterApiSnsEvent(evt);
12
+ }
13
+ async processEvent(evt, context) {
14
+ const tmp = await InterApiUtil.processInterApiEvent(evt, this._epsilon.config.interApiConfig, this._epsilon.backgroundManager);
15
+ const rval = {
16
+ statusCode: 200,
17
+ body: JSON.stringify(tmp),
18
+ isBase64Encoded: false,
19
+ };
20
+ return rval;
21
+ }
22
+ }
@@ -0,0 +1,40 @@
1
+ import { Logger } from '@bitblit/ratchet-common';
2
+ import { AwsUtil } from '../util/aws-util';
3
+ import { LambdaEventDetector } from '@bitblit/ratchet-aws';
4
+ export class S3EpsilonLambdaEventHandler {
5
+ constructor(_epsilon) {
6
+ this._epsilon = _epsilon;
7
+ }
8
+ extractLabel(evt, context) {
9
+ return 'S3Evt:' + evt.Records[0].eventSource;
10
+ }
11
+ handlesEvent(evt) {
12
+ return LambdaEventDetector.isValidS3Event(evt);
13
+ }
14
+ async processEvent(evt, context) {
15
+ let rval = null;
16
+ if (this._epsilon.config && this._epsilon.config.s3 && evt && evt.Records.length > 0) {
17
+ const finder = evt.Records[0].s3.bucket.name + '/' + evt.Records[0].s3.object.key;
18
+ const isRemoveEvent = evt.Records[0].eventName && evt.Records[0].eventName.startsWith('ObjectRemoved');
19
+ if (isRemoveEvent) {
20
+ const handler = AwsUtil.findInMap(finder, this._epsilon.config.s3.removeHandlers);
21
+ if (handler) {
22
+ rval = await handler(evt);
23
+ }
24
+ else {
25
+ Logger.info('Found no s3 create handler for : %s', finder);
26
+ }
27
+ }
28
+ else {
29
+ const handler = AwsUtil.findInMap(finder, this._epsilon.config.s3.createHandlers);
30
+ if (handler) {
31
+ rval = await handler(evt);
32
+ }
33
+ else {
34
+ Logger.info('Found no s3 remove handler for : %s', finder);
35
+ }
36
+ }
37
+ }
38
+ return rval;
39
+ }
40
+ }
@@ -0,0 +1,74 @@
1
+ import { Logger, LoggerLevelName, StringRatchet } from '@bitblit/ratchet-common';
2
+ import http from 'http';
3
+ import { EventUtil } from './http/event-util';
4
+ import fetch from 'cross-fetch';
5
+ import { LocalServer } from './local-server';
6
+ import { CliRatchet } from '@bitblit/ratchet-node-only';
7
+ export class LocalContainerServer {
8
+ constructor(port = 8889) {
9
+ this.port = port;
10
+ this.aborted = false;
11
+ }
12
+ async runServer() {
13
+ return new Promise((res, rej) => {
14
+ try {
15
+ Logger.info('Starting Epsilon server on port %d', this.port);
16
+ this.server = http.createServer(this.requestHandler.bind(this)).listen(this.port);
17
+ Logger.info('Epsilon server is listening');
18
+ process.on('SIGINT', () => {
19
+ Logger.info('Caught SIGINT - shutting down test server...');
20
+ this.aborted = true;
21
+ res(true);
22
+ });
23
+ }
24
+ catch (err) {
25
+ Logger.error('Local server failed : %s', err, err);
26
+ rej(err);
27
+ }
28
+ });
29
+ }
30
+ async requestHandler(request, response) {
31
+ const context = {
32
+ awsRequestId: 'LOCAL-' + StringRatchet.createType4Guid(),
33
+ getRemainingTimeInMillis() {
34
+ return 300000;
35
+ },
36
+ };
37
+ const evt = await LocalServer.messageToApiGatewayEvent(request, context);
38
+ const logEventLevel = EventUtil.eventIsAGraphQLIntrospection(evt) ? LoggerLevelName.silly : LoggerLevelName.info;
39
+ Logger.logByLevel(logEventLevel, 'Processing event: %j', evt);
40
+ if (evt.path == '/epsilon-poison-pill') {
41
+ this.aborted = true;
42
+ return true;
43
+ }
44
+ else {
45
+ const url = 'http://localhost:8080/2015-03-31/functions/function/invocations';
46
+ try {
47
+ const postResp = await fetch(url, { method: 'POST', body: JSON.stringify(evt) });
48
+ const respBody = await postResp.json();
49
+ const result = respBody;
50
+ const written = await LocalServer.writeProxyResultToServerResponse(result, response);
51
+ return written;
52
+ }
53
+ catch (err) {
54
+ Logger.error('Failed: %s', err);
55
+ return '{"bad":true}';
56
+ }
57
+ }
58
+ }
59
+ }
60
+ if (CliRatchet.isCalledFromCLISingle('local-container-server')) {
61
+ Logger.setLevel(LoggerLevelName.debug);
62
+ Logger.debug('Running local container server');
63
+ const testServer = new LocalContainerServer();
64
+ testServer
65
+ .runServer()
66
+ .then((res) => {
67
+ Logger.info('Got res server');
68
+ process.exit(0);
69
+ })
70
+ .catch((err) => {
71
+ Logger.error('Error : %s', err);
72
+ process.exit(1);
73
+ });
74
+ }
@@ -0,0 +1,67 @@
1
+ export class LocalServerCert {
2
+ }
3
+ LocalServerCert.CLIENT_CSR = '-----BEGIN CERTIFICATE REQUEST-----\n' +
4
+ 'MIICwjCCAaoCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk5WMRIwEAYDVQQH\n' +
5
+ 'DAlMYXMgVmVnYXMxDjAMBgNVBAoMBVBsdW1hMRkwFwYDVQQDDBB3d3cuaGV5cGx1\n' +
6
+ 'bWEuY29tMSIwIAYJKoZIhvcNAQkBFhNjd2Vpc3NAaGV5cGx1bWEuY29tMIIBIjAN\n' +
7
+ 'BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Gh1SD1VciosMgh3MHF7IyKgNTu2\n' +
8
+ 'DjGMoORJV4VNKzrjp7UOdKnD3so0Xx3A6bUTYAL8Vtc+EG+8LZjUpBIOwuKzzbVo\n' +
9
+ 't16+yt3YXBxzTZPU9g7sFsXx42RoNispIFq0enRtJrq/zq8izZxUZdGn9XD2DidL\n' +
10
+ 'AedtRGjb8cmRuP6wmMRPBOZjct4ZjsSiTyhPa6kpt8V7Pa7vm0HGxcHiDAGp6zoy\n' +
11
+ 'GHfBdsqeBdGbkGT1ZPfs9kpbtXPm82Sckd0p3oY3fJn0rZqpTAb8qcdGcnheYtqX\n' +
12
+ 'FSjX7EoGsIXAK+oj25MvtfoZFMk4rjQ7FkHbgGk0iMHLN0kNjJzN0ysN/wIDAQAB\n' +
13
+ 'oAAwDQYJKoZIhvcNAQELBQADggEBAMbpCdoqmY9crolsh5y9YtYDLRIwisTjTjU1\n' +
14
+ 'Xzp1MurSzGIdHLokU+fdVWTIzn3uOu24yTQouTUUoYWHT4YgN4wELdDydfNxWvyl\n' +
15
+ 'r34QV5B0FZbRV2sNz/3C1UX/Uor4af1Yv+QYlGHspgj+WIAEkNQ3xQIo9+I/miR+\n' +
16
+ '2VSlydtyGvmzipgv6CAwOsrQsIw7DkpVmnqIjgjPSXlGCgeKM9S1D/CwNwZnVA/e\n' +
17
+ 'DF1SzDkJKl60/n+xZGYl/OtkH9vB8T6fHqk0iMxXuVUxI137fwEJwIQB5L6hFyJa\n' +
18
+ 'L4hbjq7Cull4qOhXDby+fNJT9Ic7VCosJBXBHxHPsEnY2+TZAJo=\n' +
19
+ '-----END CERTIFICATE REQUEST-----\n';
20
+ LocalServerCert.CLIENT_CERT_PEM = '-----BEGIN CERTIFICATE-----\n' +
21
+ 'MIIDgTCCAmkCFDKASki0c6HD75dCdIZZ3vXq4eQeMA0GCSqGSIb3DQEBCwUAMH0x\n' +
22
+ 'CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOVjESMBAGA1UEBwwJTGFzIFZlZ2FzMQ4w\n' +
23
+ 'DAYDVQQKDAVQbHVtYTEZMBcGA1UEAwwQd3d3LmhleXBsdW1hLmNvbTEiMCAGCSqG\n' +
24
+ 'SIb3DQEJARYTY3dlaXNzQGhleXBsdW1hLmNvbTAeFw0yMzAxMjMxMDU2MDlaFw0y\n' +
25
+ 'MzAyMjIxMDU2MDlaMH0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOVjESMBAGA1UE\n' +
26
+ 'BwwJTGFzIFZlZ2FzMQ4wDAYDVQQKDAVQbHVtYTEZMBcGA1UEAwwQd3d3LmhleXBs\n' +
27
+ 'dW1hLmNvbTEiMCAGCSqGSIb3DQEJARYTY3dlaXNzQGhleXBsdW1hLmNvbTCCASIw\n' +
28
+ 'DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANhodUg9VXIqLDIIdzBxeyMioDU7\n' +
29
+ 'tg4xjKDkSVeFTSs646e1DnSpw97KNF8dwOm1E2AC/FbXPhBvvC2Y1KQSDsLis821\n' +
30
+ 'aLdevsrd2Fwcc02T1PYO7BbF8eNkaDYrKSBatHp0bSa6v86vIs2cVGXRp/Vw9g4n\n' +
31
+ 'SwHnbURo2/HJkbj+sJjETwTmY3LeGY7Eok8oT2upKbfFez2u75tBxsXB4gwBqes6\n' +
32
+ 'Mhh3wXbKngXRm5Bk9WT37PZKW7Vz5vNknJHdKd6GN3yZ9K2aqUwG/KnHRnJ4XmLa\n' +
33
+ 'lxUo1+xKBrCFwCvqI9uTL7X6GRTJOK40OxZB24BpNIjByzdJDYyczdMrDf8CAwEA\n' +
34
+ 'ATANBgkqhkiG9w0BAQsFAAOCAQEAWQG2tvWY+cyeeumD/7WKTBNaBjg4EAe+1mnZ\n' +
35
+ 'KQsg0gGUL0kWsqCkg4xEqIojkKMjs62uS6ballEyWawygYd91OaJLFopNu+Dxk4N\n' +
36
+ '5GWKpriPr02vI6rMUZNtCmsooukEShr5ufFWb4WLnk4NXQlBCXTHbmIf7Z82UOMw\n' +
37
+ 'ONZdZyKLqlA0Z6SWYBp2gO32puww6dUU0DAKkIIx1SN8i8UKvowRAy13bugPtyau\n' +
38
+ 'NknlE3J1+Gab1hHCMRdKFZPKy8nc7LWUNZhgKdY82IC/k5FSW32Wibfog1TwWRJR\n' +
39
+ 'ceTW4EN4P7ZmdHGMYkIplc7Qcx0mraY2HRqmjA33j3cNcY5UsQ==\n' +
40
+ '-----END CERTIFICATE-----\n';
41
+ LocalServerCert.CLIENT_KEY_PEM = '-----BEGIN RSA PRIVATE KEY-----\n' +
42
+ 'MIIEogIBAAKCAQEA2Gh1SD1VciosMgh3MHF7IyKgNTu2DjGMoORJV4VNKzrjp7UO\n' +
43
+ 'dKnD3so0Xx3A6bUTYAL8Vtc+EG+8LZjUpBIOwuKzzbVot16+yt3YXBxzTZPU9g7s\n' +
44
+ 'FsXx42RoNispIFq0enRtJrq/zq8izZxUZdGn9XD2DidLAedtRGjb8cmRuP6wmMRP\n' +
45
+ 'BOZjct4ZjsSiTyhPa6kpt8V7Pa7vm0HGxcHiDAGp6zoyGHfBdsqeBdGbkGT1ZPfs\n' +
46
+ '9kpbtXPm82Sckd0p3oY3fJn0rZqpTAb8qcdGcnheYtqXFSjX7EoGsIXAK+oj25Mv\n' +
47
+ 'tfoZFMk4rjQ7FkHbgGk0iMHLN0kNjJzN0ysN/wIDAQABAoIBAHzZ9yAQUqWk8w6C\n' +
48
+ 'l9EZB4PDzE4p/uS9bXa9fhrCSz0vonv1FzvzXY/BdOmTTuMGlwEDd/XaBHKTJCvi\n' +
49
+ 'SnvF90I0bKu3h4yTWtvLlbG+sD8HlQvInCifVuhr2zu1Nur1qb4kQXzgrRxfKmMZ\n' +
50
+ 'WA/OH2qZGzwbK0kT7ZRUMuCR/EKPjYw9KP6pMF8nxXUjSm+g3YwgIB8kiPeDCV6C\n' +
51
+ '0/Ecpv5qMqcoYTg9f9KyBNmY3U5ZgbYrdwTDSMrrTwZKSHhTktdF0SEfYrVGLLEU\n' +
52
+ 'vfQQlQmfcc5Z3+cz99BH1BeTNaCPtEaXjgvQYwkWlSxnY6QUE0p1qq9Jy0xaVEx9\n' +
53
+ '8LReuHECgYEA/hhJ6b2XV1WLtszFO8MRMzlyMuvBc3Ot0dsuJ7r1W3WOF5X7poSU\n' +
54
+ 'xG0xe+n6Kubmi3tGhzS7BN4TEO9/SSE2gIQTk9zwAMuf+mZJQcG0Qz1iftVp5nnM\n' +
55
+ 'zi205vBLLq2Pmk7wbhTIBO8J190Dli1/fuvk/cmJrA60Ys8v3y4e820CgYEA2gfV\n' +
56
+ 'Q3eHRxk3wl4On71mMovY7lMx6+S8K8hBGo26A5FIu6N6v2jxKnQ5YphwFgjtkxgs\n' +
57
+ 'LspAXmxRwFMapZP3d/nFeBhlOzNly7tqIdDOeNqEcUzEx7pwGXpWGZEHOYs1fvU+\n' +
58
+ 'gU/1N8q9DBvr0B+XGeYR3NNdljajo6pwWZ6ed5sCgYAGmkz5ZPLU0yVBR8rsRaJh\n' +
59
+ 'yWFdT2EEhgIDTQXDBImxqblahYw3hIR1Ij1B8g+NI9jj0P1BMC6X7sliDEcreFB5\n' +
60
+ 'QHVdx0T5UFFE6XmH2ue7Q5IWp6cL1ShsRyXHRoE9okb0BI8c3S9haXDBCj44ndAN\n' +
61
+ 'VUXrDlykevFXC/k7fHBTdQKBgHjIshpoEycOD1e753oS4JTL6GdO6271DlFq5LYj\n' +
62
+ 'IZNsXtCkJhH3vvJ35Hp8XEu4snQ0hfV90d79PuS+pRppOETct8pqKVp8hL4ymv8U\n' +
63
+ 'v+0vkQN7NeA3pnZW0W/kag400nP8xJ26f+xiggw9Q4vOlFSioe6loUjgCBNZDlh3\n' +
64
+ 'iO5VAoGASXkcv39B9/8FuWQ7rwhXHEubxOOwZZzSBU1wtLj2qHyPGoeU9ZpsmdrL\n' +
65
+ 'XS9w1Jy0e49qmbBjzTqAEBw2nn/JVMFHyI/s//JVF7Q9GfBZAF5XF6mJ24yzTKgF\n' +
66
+ 'kSoO5T+7s8NXi0eAIBe4CkWCBX7kWEZtu46GuVhsrC3oEazuLOs=\n' +
67
+ '-----END RSA PRIVATE KEY-----\n';
@@ -0,0 +1,140 @@
1
+ import { Logger } from '@bitblit/ratchet-common';
2
+ import http from 'http';
3
+ import https from 'https';
4
+ import { StringRatchet } from '@bitblit/ratchet-common';
5
+ import { DateTime } from 'luxon';
6
+ import qs from 'querystring';
7
+ import { EventUtil } from './http/event-util';
8
+ import { LoggerLevelName } from '@bitblit/ratchet-common';
9
+ import { LocalServerCert } from './local-server-cert';
10
+ export class LocalServer {
11
+ constructor(globalHandler, port = 8888, https = false) {
12
+ this.globalHandler = globalHandler;
13
+ this.port = port;
14
+ this.aborted = false;
15
+ }
16
+ async runServer() {
17
+ return new Promise((res, rej) => {
18
+ try {
19
+ Logger.info('Starting Epsilon server on port %d', this.port);
20
+ if (https) {
21
+ const options = {
22
+ key: LocalServerCert.CLIENT_KEY_PEM,
23
+ cert: LocalServerCert.CLIENT_CERT_PEM,
24
+ };
25
+ Logger.info('Starting https server - THIS SERVER IS NOT SECURE! The KEYS are in the code! Testing Server Only - Use at your own risk!');
26
+ this.server = https.createServer(options, this.requestHandler.bind(this)).listen(this.port);
27
+ }
28
+ else {
29
+ this.server = http.createServer(this.requestHandler.bind(this)).listen(this.port);
30
+ }
31
+ Logger.info('Epsilon server is listening');
32
+ process.on('SIGINT', () => {
33
+ Logger.info('Caught SIGINT - shutting down test server...');
34
+ this.aborted = true;
35
+ res(true);
36
+ });
37
+ }
38
+ catch (err) {
39
+ Logger.error('Local server failed : %s', err, err);
40
+ rej(err);
41
+ }
42
+ });
43
+ }
44
+ async requestHandler(request, response) {
45
+ const context = {
46
+ awsRequestId: 'LOCAL-' + StringRatchet.createType4Guid(),
47
+ getRemainingTimeInMillis() {
48
+ return 300000;
49
+ },
50
+ };
51
+ const evt = await LocalServer.messageToApiGatewayEvent(request, context);
52
+ const logEventLevel = EventUtil.eventIsAGraphQLIntrospection(evt) ? LoggerLevelName.silly : LoggerLevelName.info;
53
+ if (evt.path == '/epsilon-poison-pill') {
54
+ this.aborted = true;
55
+ return true;
56
+ }
57
+ else {
58
+ const result = await this.globalHandler.lambdaHandler(evt, context);
59
+ const written = await LocalServer.writeProxyResultToServerResponse(result, response);
60
+ return written;
61
+ }
62
+ }
63
+ static async bodyAsBase64String(request) {
64
+ return new Promise((res, rej) => {
65
+ const body = [];
66
+ request.on('data', (chunk) => {
67
+ body.push(chunk);
68
+ });
69
+ request.on('end', () => {
70
+ const rval = Buffer.concat(body).toString('base64');
71
+ res(rval);
72
+ });
73
+ });
74
+ }
75
+ static async messageToApiGatewayEvent(request, context) {
76
+ const bodyString = await LocalServer.bodyAsBase64String(request);
77
+ const stageIdx = request.url.indexOf('/', 1);
78
+ const stage = request.url.substring(1, stageIdx);
79
+ const path = request.url.substring(stageIdx + 1);
80
+ const reqTime = new Date().getTime();
81
+ const formattedTime = DateTime.utc().toFormat('dd/MMM/yyyy:hh:mm:ss ZZ');
82
+ const queryIdx = request.url.indexOf('?');
83
+ const queryStringParams = queryIdx > -1 ? qs.parse(request.url.substring(queryIdx + 1)) : {};
84
+ const headers = Object.assign({}, request.headers);
85
+ headers['X-Forwarded-Proto'] = 'http';
86
+ const rval = {
87
+ body: bodyString,
88
+ multiValueHeaders: {},
89
+ multiValueQueryStringParameters: {},
90
+ resource: '/{proxy+}',
91
+ path: request.url,
92
+ httpMethod: request.method.toLowerCase(),
93
+ isBase64Encoded: true,
94
+ queryStringParameters: queryStringParams,
95
+ pathParameters: {
96
+ proxy: path,
97
+ },
98
+ stageVariables: {
99
+ baz: 'qux',
100
+ },
101
+ headers: headers,
102
+ requestContext: {
103
+ accountId: '123456789012',
104
+ resourceId: '123456',
105
+ stage: stage,
106
+ requestId: context.awsRequestId,
107
+ requestTime: formattedTime,
108
+ requestTimeEpoch: reqTime,
109
+ identity: null,
110
+ path: request.url,
111
+ domainName: request.headers['host'],
112
+ resourcePath: '/{proxy+}',
113
+ httpMethod: request.method.toLowerCase(),
114
+ apiId: '1234567890',
115
+ protocol: 'HTTP/1.1',
116
+ },
117
+ };
118
+ return rval;
119
+ }
120
+ static async writeProxyResultToServerResponse(proxyResult, response) {
121
+ const isGraphQLSchemaResponse = !!proxyResult && !!proxyResult.body && proxyResult.body.indexOf('{"data":{"__schema"') > -1;
122
+ if (!isGraphQLSchemaResponse) {
123
+ Logger.debug('Result: %j', proxyResult);
124
+ }
125
+ response.statusCode = proxyResult.statusCode;
126
+ if (proxyResult.headers) {
127
+ Object.keys(proxyResult.headers).forEach((hk) => {
128
+ response.setHeader(hk, String(proxyResult.headers[hk]));
129
+ });
130
+ }
131
+ if (proxyResult.multiValueHeaders) {
132
+ Object.keys(proxyResult.multiValueHeaders).forEach((hk) => {
133
+ response.setHeader(hk, proxyResult.multiValueHeaders[hk].join(','));
134
+ });
135
+ }
136
+ const toWrite = proxyResult.isBase64Encoded ? Buffer.from(proxyResult.body, 'base64') : Buffer.from(proxyResult.body);
137
+ response.end(toWrite);
138
+ return !!proxyResult.body;
139
+ }
140
+ }