@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.
- package/CHANGELOG.md +177 -0
- package/License.txt +13 -0
- package/README.md +242 -0
- package/dist/cjs/background/background-dynamo-log-table-handler.js +38 -0
- package/dist/cjs/background/background-entry.js +2 -0
- package/dist/cjs/background/background-execution-event-type.js +11 -0
- package/dist/cjs/background/background-execution-event.js +2 -0
- package/dist/cjs/background/background-execution-listener.js +2 -0
- package/dist/cjs/background/background-handler.js +269 -0
- package/dist/cjs/background/background-http-adapter-handler.js +127 -0
- package/dist/cjs/background/background-meta-response-internal.js +2 -0
- package/dist/cjs/background/background-process-handling.js +8 -0
- package/dist/cjs/background/background-process-log-table-entry.js +2 -0
- package/dist/cjs/background/background-queue-response-internal.js +2 -0
- package/dist/cjs/background/background-validator.js +88 -0
- package/dist/cjs/background/epsilon-background-process-error.js +93 -0
- package/dist/cjs/background/internal-background-entry.js +2 -0
- package/dist/cjs/background/manager/abstract-background-manager.js +92 -0
- package/dist/cjs/background/manager/aws-sqs-sns-background-manager.js +153 -0
- package/dist/cjs/background/manager/background-manager-like.js +2 -0
- package/dist/cjs/background/manager/single-thread-local-background-manager.js +49 -0
- package/dist/cjs/background/s3-background-transaction-logger.js +54 -0
- package/dist/cjs/build/ratchet-epsilon-common-info.js +18 -0
- package/dist/cjs/built-in/background/echo-processor.js +18 -0
- package/dist/cjs/built-in/background/log-and-enqueue-echo-processor.js +16 -0
- package/dist/cjs/built-in/background/log-message-background-error-processor.js +10 -0
- package/dist/cjs/built-in/background/no-op-processor.js +13 -0
- package/dist/cjs/built-in/background/retry-processor.js +41 -0
- package/dist/cjs/built-in/background/sample-delay-processor.js +16 -0
- package/dist/cjs/built-in/background/sample-input-validated-processor-data.js +2 -0
- package/dist/cjs/built-in/background/sample-input-validated-processor.js +16 -0
- package/dist/cjs/built-in/built-in-trace-id-generators.js +25 -0
- package/dist/cjs/built-in/daemon/daemon-authorizer-function.js +2 -0
- package/dist/cjs/built-in/daemon/daemon-config.js +2 -0
- package/dist/cjs/built-in/daemon/daemon-group-selection-function.js +2 -0
- package/dist/cjs/built-in/daemon/daemon-handler.js +62 -0
- package/dist/cjs/built-in/daemon/daemon-process-state-list.js +2 -0
- package/dist/cjs/built-in/http/apollo-filter.js +63 -0
- package/dist/cjs/built-in/http/built-in-auth-filters.js +115 -0
- package/dist/cjs/built-in/http/built-in-authorizers.js +43 -0
- package/dist/cjs/built-in/http/built-in-filters.js +222 -0
- package/dist/cjs/built-in/http/built-in-handlers.js +73 -0
- package/dist/cjs/built-in/http/log-level-manipulation-filter.js +20 -0
- package/dist/cjs/built-in/http/run-handler-as-filter.js +64 -0
- package/dist/cjs/cli-bootstrap/epsilon-run-background-process-from-command-line-dry-run.js +20 -0
- package/dist/cjs/config/background/background-aws-config.js +2 -0
- package/dist/cjs/config/background/background-config.js +2 -0
- package/dist/cjs/config/background/background-error-processor.js +2 -0
- package/dist/cjs/config/background/background-processor.js +2 -0
- package/dist/cjs/config/background/background-transaction-log.js +2 -0
- package/dist/cjs/config/background/background-transaction-logger.js +2 -0
- package/dist/cjs/config/cron/abstract-cron-entry.js +2 -0
- package/dist/cjs/config/cron/cron-background-entry.js +2 -0
- package/dist/cjs/config/cron/cron-config.js +2 -0
- package/dist/cjs/config/dynamo-db-config.js +2 -0
- package/dist/cjs/config/epsilon-config.js +2 -0
- package/dist/cjs/config/epsilon-lambda-event-handler.js +2 -0
- package/dist/cjs/config/epsilon-logger-config.js +2 -0
- package/dist/cjs/config/generic-aws-event-handler-function.js +2 -0
- package/dist/cjs/config/http/authorizer-function.js +2 -0
- package/dist/cjs/config/http/epsilon-authorization-context.js +2 -0
- package/dist/cjs/config/http/extended-api-gateway-event.js +2 -0
- package/dist/cjs/config/http/filter-chain-context.js +2 -0
- package/dist/cjs/config/http/filter-function.js +2 -0
- package/dist/cjs/config/http/handler-function.js +2 -0
- package/dist/cjs/config/http/http-config.js +2 -0
- package/dist/cjs/config/http/http-processing-config.js +2 -0
- package/dist/cjs/config/http/mapped-http-processing-config.js +2 -0
- package/dist/cjs/config/http/null-returned-object-handling.js +9 -0
- package/dist/cjs/config/inter-api/inter-api-aws-config.js +2 -0
- package/dist/cjs/config/inter-api/inter-api-config.js +2 -0
- package/dist/cjs/config/inter-api/inter-api-process-mapping.js +2 -0
- package/dist/cjs/config/logging-trace-id-generator.js +2 -0
- package/dist/cjs/config/open-api/open-api-document-components.js +2 -0
- package/dist/cjs/config/open-api/open-api-document-path.js +2 -0
- package/dist/cjs/config/open-api/open-api-document.js +2 -0
- package/dist/cjs/config/s3-config.js +2 -0
- package/dist/cjs/config/sns-config.js +2 -0
- package/dist/cjs/epsilon-build-properties.js +28 -0
- package/dist/cjs/epsilon-constants.js +49 -0
- package/dist/cjs/epsilon-global-handler.js +155 -0
- package/dist/cjs/epsilon-instance.js +2 -0
- package/dist/cjs/epsilon-logging-extension-processor.js +19 -0
- package/dist/cjs/http/auth/api-gateway-adapter-authentication-handler.js +75 -0
- package/dist/cjs/http/auth/auth0-web-token-manipulator.js +62 -0
- package/dist/cjs/http/auth/basic-auth-token.js +2 -0
- package/dist/cjs/http/auth/google-web-token-manipulator.js +72 -0
- package/dist/cjs/http/auth/jwt-ratchet-local-web-token-manipulator.js +29 -0
- package/dist/cjs/http/auth/local-web-token-manipulator.js +74 -0
- package/dist/cjs/http/auth/web-token-manipulator.js +2 -0
- package/dist/cjs/http/error/bad-gateway.js +12 -0
- package/dist/cjs/http/error/bad-request-error.js +12 -0
- package/dist/cjs/http/error/conflict-error.js +12 -0
- package/dist/cjs/http/error/epsilon-http-error.js +132 -0
- package/dist/cjs/http/error/forbidden-error.js +12 -0
- package/dist/cjs/http/error/gateway-timeout.js +12 -0
- package/dist/cjs/http/error/method-not-allowed-error.js +12 -0
- package/dist/cjs/http/error/misconfigured-error.js +12 -0
- package/dist/cjs/http/error/not-found-error.js +12 -0
- package/dist/cjs/http/error/not-implemented.js +12 -0
- package/dist/cjs/http/error/request-timeout-error.js +12 -0
- package/dist/cjs/http/error/service-unavailable.js +12 -0
- package/dist/cjs/http/error/too-many-requests-error.js +12 -0
- package/dist/cjs/http/error/unauthorized-error.js +12 -0
- package/dist/cjs/http/event-util.js +180 -0
- package/dist/cjs/http/response-util.js +146 -0
- package/dist/cjs/http/route/epsilon-router.js +2 -0
- package/dist/cjs/http/route/extended-auth-response-context.js +2 -0
- package/dist/cjs/http/route/route-mapping.js +2 -0
- package/dist/cjs/http/route/route-validator-config.js +2 -0
- package/dist/cjs/http/route/router-util.js +238 -0
- package/dist/cjs/http/web-handler.js +122 -0
- package/dist/cjs/http/web-v2-handler.js +25 -0
- package/dist/cjs/index.js +136 -0
- package/dist/cjs/inter-api/inter-api-entry.js +2 -0
- package/dist/cjs/inter-api/inter-api-util.js +62 -0
- package/dist/cjs/inter-api-manager.js +67 -0
- package/dist/cjs/lambda-event-handler/cron-epsilon-lambda-event-handler.js +76 -0
- package/dist/cjs/lambda-event-handler/dynamo-epsilon-lambda-event-handler.js +36 -0
- package/dist/cjs/lambda-event-handler/generic-sns-epsilon-lambda-event-handler.js +32 -0
- package/dist/cjs/lambda-event-handler/inter-api-epsilon-lambda-event-handler.js +26 -0
- package/dist/cjs/lambda-event-handler/s3-epsilon-lambda-event-handler.js +44 -0
- package/dist/cjs/local-container-server.js +79 -0
- package/dist/cjs/local-server-cert.js +71 -0
- package/dist/cjs/local-server.js +145 -0
- package/dist/cjs/open-api-util/open-api-doc-modifications.js +2 -0
- package/dist/cjs/open-api-util/open-api-doc-modifier.js +83 -0
- package/dist/cjs/open-api-util/yaml-combiner.js +32 -0
- package/dist/cjs/run-background-process-from-command-line.js +37 -0
- package/dist/cjs/sample/sample-batch-only-local-server.js +19 -0
- package/dist/cjs/sample/sample-local-server.js +30 -0
- package/dist/cjs/sample/sample-server-components.js +197 -0
- package/dist/cjs/test-error-server.js +48 -0
- package/dist/cjs/util/aws-util.js +69 -0
- package/dist/cjs/util/context-util.js +104 -0
- package/dist/cjs/util/cron-util.js +72 -0
- package/dist/cjs/util/epsilon-config-parser.js +70 -0
- package/dist/es/background/background-dynamo-log-table-handler.js +33 -0
- package/dist/es/background/background-entry.js +1 -0
- package/dist/es/background/background-execution-event-type.js +8 -0
- package/dist/es/background/background-execution-event.js +1 -0
- package/dist/es/background/background-execution-listener.js +1 -0
- package/dist/es/background/background-handler.js +265 -0
- package/dist/es/background/background-http-adapter-handler.js +123 -0
- package/dist/es/background/background-meta-response-internal.js +1 -0
- package/dist/es/background/background-process-handling.js +5 -0
- package/dist/es/background/background-process-log-table-entry.js +1 -0
- package/dist/es/background/background-queue-response-internal.js +1 -0
- package/dist/es/background/background-validator.js +84 -0
- package/dist/es/background/epsilon-background-process-error.js +88 -0
- package/dist/es/background/internal-background-entry.js +1 -0
- package/dist/es/background/manager/abstract-background-manager.js +88 -0
- package/dist/es/background/manager/aws-sqs-sns-background-manager.js +149 -0
- package/dist/es/background/manager/background-manager-like.js +1 -0
- package/dist/es/background/manager/single-thread-local-background-manager.js +45 -0
- package/dist/es/background/s3-background-transaction-logger.js +49 -0
- package/dist/es/build/ratchet-epsilon-common-info.js +14 -0
- package/dist/es/built-in/background/echo-processor.js +14 -0
- package/dist/es/built-in/background/log-and-enqueue-echo-processor.js +12 -0
- package/dist/es/built-in/background/log-message-background-error-processor.js +6 -0
- package/dist/es/built-in/background/no-op-processor.js +9 -0
- package/dist/es/built-in/background/retry-processor.js +36 -0
- package/dist/es/built-in/background/sample-delay-processor.js +12 -0
- package/dist/es/built-in/background/sample-input-validated-processor-data.js +1 -0
- package/dist/es/built-in/background/sample-input-validated-processor.js +12 -0
- package/dist/es/built-in/built-in-trace-id-generators.js +21 -0
- package/dist/es/built-in/daemon/daemon-authorizer-function.js +1 -0
- package/dist/es/built-in/daemon/daemon-config.js +1 -0
- package/dist/es/built-in/daemon/daemon-group-selection-function.js +1 -0
- package/dist/es/built-in/daemon/daemon-handler.js +58 -0
- package/dist/es/built-in/daemon/daemon-process-state-list.js +1 -0
- package/dist/es/built-in/http/apollo-filter.js +58 -0
- package/dist/es/built-in/http/built-in-auth-filters.js +107 -0
- package/dist/es/built-in/http/built-in-authorizers.js +39 -0
- package/dist/es/built-in/http/built-in-filters.js +208 -0
- package/dist/es/built-in/http/built-in-handlers.js +69 -0
- package/dist/es/built-in/http/log-level-manipulation-filter.js +16 -0
- package/dist/es/built-in/http/run-handler-as-filter.js +60 -0
- package/dist/es/cli-bootstrap/epsilon-run-background-process-from-command-line-dry-run.js +17 -0
- package/dist/es/config/background/background-aws-config.js +1 -0
- package/dist/es/config/background/background-config.js +1 -0
- package/dist/es/config/background/background-error-processor.js +1 -0
- package/dist/es/config/background/background-processor.js +1 -0
- package/dist/es/config/background/background-transaction-log.js +1 -0
- package/dist/es/config/background/background-transaction-logger.js +1 -0
- package/dist/es/config/cron/abstract-cron-entry.js +1 -0
- package/dist/es/config/cron/cron-background-entry.js +1 -0
- package/dist/es/config/cron/cron-config.js +1 -0
- package/dist/es/config/dynamo-db-config.js +1 -0
- package/dist/es/config/epsilon-config.js +1 -0
- package/dist/es/config/epsilon-lambda-event-handler.js +1 -0
- package/dist/es/config/epsilon-logger-config.js +1 -0
- package/dist/es/config/generic-aws-event-handler-function.js +1 -0
- package/dist/es/config/http/authorizer-function.js +1 -0
- package/dist/es/config/http/epsilon-authorization-context.js +1 -0
- package/dist/es/config/http/extended-api-gateway-event.js +1 -0
- package/dist/es/config/http/filter-chain-context.js +1 -0
- package/dist/es/config/http/filter-function.js +1 -0
- package/dist/es/config/http/handler-function.js +1 -0
- package/dist/es/config/http/http-config.js +1 -0
- package/dist/es/config/http/http-processing-config.js +1 -0
- package/dist/es/config/http/mapped-http-processing-config.js +1 -0
- package/dist/es/config/http/null-returned-object-handling.js +6 -0
- package/dist/es/config/inter-api/inter-api-aws-config.js +1 -0
- package/dist/es/config/inter-api/inter-api-config.js +1 -0
- package/dist/es/config/inter-api/inter-api-process-mapping.js +1 -0
- package/dist/es/config/logging-trace-id-generator.js +1 -0
- package/dist/es/config/open-api/open-api-document-components.js +1 -0
- package/dist/es/config/open-api/open-api-document-path.js +1 -0
- package/dist/es/config/open-api/open-api-document.js +1 -0
- package/dist/es/config/s3-config.js +1 -0
- package/dist/es/config/sns-config.js +1 -0
- package/dist/es/epsilon-build-properties.js +24 -0
- package/dist/es/epsilon-constants.js +45 -0
- package/dist/es/epsilon-global-handler.js +149 -0
- package/dist/es/epsilon-instance.js +1 -0
- package/dist/es/epsilon-logging-extension-processor.js +15 -0
- package/dist/es/http/auth/api-gateway-adapter-authentication-handler.js +71 -0
- package/dist/es/http/auth/auth0-web-token-manipulator.js +56 -0
- package/dist/es/http/auth/basic-auth-token.js +1 -0
- package/dist/es/http/auth/google-web-token-manipulator.js +67 -0
- package/dist/es/http/auth/jwt-ratchet-local-web-token-manipulator.js +25 -0
- package/dist/es/http/auth/local-web-token-manipulator.js +70 -0
- package/dist/es/http/auth/web-token-manipulator.js +1 -0
- package/dist/es/http/error/bad-gateway.js +8 -0
- package/dist/es/http/error/bad-request-error.js +8 -0
- package/dist/es/http/error/conflict-error.js +8 -0
- package/dist/es/http/error/epsilon-http-error.js +127 -0
- package/dist/es/http/error/forbidden-error.js +8 -0
- package/dist/es/http/error/gateway-timeout.js +8 -0
- package/dist/es/http/error/method-not-allowed-error.js +8 -0
- package/dist/es/http/error/misconfigured-error.js +8 -0
- package/dist/es/http/error/not-found-error.js +8 -0
- package/dist/es/http/error/not-implemented.js +8 -0
- package/dist/es/http/error/request-timeout-error.js +8 -0
- package/dist/es/http/error/service-unavailable.js +8 -0
- package/dist/es/http/error/too-many-requests-error.js +8 -0
- package/dist/es/http/error/unauthorized-error.js +8 -0
- package/dist/es/http/event-util.js +175 -0
- package/dist/es/http/response-util.js +141 -0
- package/dist/es/http/route/epsilon-router.js +1 -0
- package/dist/es/http/route/extended-auth-response-context.js +1 -0
- package/dist/es/http/route/route-mapping.js +1 -0
- package/dist/es/http/route/route-validator-config.js +1 -0
- package/dist/es/http/route/router-util.js +233 -0
- package/dist/es/http/web-handler.js +116 -0
- package/dist/es/http/web-v2-handler.js +21 -0
- package/dist/es/index.js +133 -0
- package/dist/es/inter-api/inter-api-entry.js +1 -0
- package/dist/es/inter-api/inter-api-util.js +58 -0
- package/dist/es/inter-api-manager.js +63 -0
- package/dist/es/lambda-event-handler/cron-epsilon-lambda-event-handler.js +72 -0
- package/dist/es/lambda-event-handler/dynamo-epsilon-lambda-event-handler.js +32 -0
- package/dist/es/lambda-event-handler/generic-sns-epsilon-lambda-event-handler.js +28 -0
- package/dist/es/lambda-event-handler/inter-api-epsilon-lambda-event-handler.js +22 -0
- package/dist/es/lambda-event-handler/s3-epsilon-lambda-event-handler.js +40 -0
- package/dist/es/local-container-server.js +74 -0
- package/dist/es/local-server-cert.js +67 -0
- package/dist/es/local-server.js +140 -0
- package/dist/es/open-api-util/open-api-doc-modifications.js +1 -0
- package/dist/es/open-api-util/open-api-doc-modifier.js +78 -0
- package/dist/es/open-api-util/yaml-combiner.js +27 -0
- package/dist/es/run-background-process-from-command-line.js +32 -0
- package/dist/es/sample/sample-batch-only-local-server.js +17 -0
- package/dist/es/sample/sample-local-server.js +28 -0
- package/dist/es/sample/sample-server-components.js +192 -0
- package/dist/es/test-error-server.js +43 -0
- package/dist/es/util/aws-util.js +65 -0
- package/dist/es/util/context-util.js +95 -0
- package/dist/es/util/cron-util.js +68 -0
- package/dist/es/util/epsilon-config-parser.js +64 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.es.tsbuildinfo +1 -0
- package/dist/tsconfig.types.tsbuildinfo +1 -0
- package/dist/types/background/background-dynamo-log-table-handler.d.ts +11 -0
- package/dist/types/background/background-entry.d.ts +4 -0
- package/dist/types/background/background-execution-event-type.d.ts +7 -0
- package/dist/types/background/background-execution-event.d.ts +8 -0
- package/dist/types/background/background-execution-listener.d.ts +5 -0
- package/dist/types/background/background-handler.d.ts +33 -0
- package/dist/types/background/background-http-adapter-handler.d.ts +26 -0
- package/dist/types/background/background-meta-response-internal.d.ts +5 -0
- package/dist/types/background/background-process-handling.d.ts +4 -0
- package/dist/types/background/background-process-log-table-entry.d.ts +11 -0
- package/dist/types/background/background-queue-response-internal.d.ts +8 -0
- package/dist/types/background/background-validator.d.ts +20 -0
- package/dist/types/background/epsilon-background-process-error.d.ts +30 -0
- package/dist/types/background/internal-background-entry.d.ts +7 -0
- package/dist/types/background/manager/abstract-background-manager.d.ts +26 -0
- package/dist/types/background/manager/aws-sqs-sns-background-manager.d.ts +30 -0
- package/dist/types/background/manager/background-manager-like.d.ts +24 -0
- package/dist/types/background/manager/single-thread-local-background-manager.d.ts +22 -0
- package/dist/types/background/s3-background-transaction-logger.d.ts +17 -0
- package/dist/types/build/ratchet-epsilon-common-info.d.ts +5 -0
- package/dist/types/built-in/background/echo-processor.d.ts +7 -0
- package/dist/types/built-in/background/log-and-enqueue-echo-processor.d.ts +6 -0
- package/dist/types/built-in/background/log-message-background-error-processor.d.ts +5 -0
- package/dist/types/built-in/background/no-op-processor.d.ts +6 -0
- package/dist/types/built-in/background/retry-processor.d.ts +16 -0
- package/dist/types/built-in/background/sample-delay-processor.d.ts +6 -0
- package/dist/types/built-in/background/sample-input-validated-processor-data.d.ts +4 -0
- package/dist/types/built-in/background/sample-input-validated-processor.d.ts +8 -0
- package/dist/types/built-in/built-in-trace-id-generators.d.ts +5 -0
- package/dist/types/built-in/daemon/daemon-authorizer-function.d.ts +5 -0
- package/dist/types/built-in/daemon/daemon-config.d.ts +8 -0
- package/dist/types/built-in/daemon/daemon-group-selection-function.d.ts +4 -0
- package/dist/types/built-in/daemon/daemon-handler.d.ts +22 -0
- package/dist/types/built-in/daemon/daemon-process-state-list.d.ts +8 -0
- package/dist/types/built-in/http/apollo-filter.d.ts +10 -0
- package/dist/types/built-in/http/built-in-auth-filters.d.ts +9 -0
- package/dist/types/built-in/http/built-in-authorizers.d.ts +8 -0
- package/dist/types/built-in/http/built-in-filters.d.ts +25 -0
- package/dist/types/built-in/http/built-in-handlers.d.ts +9 -0
- package/dist/types/built-in/http/log-level-manipulation-filter.d.ts +9 -0
- package/dist/types/built-in/http/run-handler-as-filter.d.ts +12 -0
- package/dist/types/cli-bootstrap/epsilon-run-background-process-from-command-line-dry-run.d.ts +2 -0
- package/dist/types/config/background/background-aws-config.d.ts +7 -0
- package/dist/types/config/background/background-config.d.ts +14 -0
- package/dist/types/config/background/background-error-processor.d.ts +4 -0
- package/dist/types/config/background/background-processor.d.ts +6 -0
- package/dist/types/config/background/background-transaction-log.d.ts +8 -0
- package/dist/types/config/background/background-transaction-logger.d.ts +5 -0
- package/dist/types/config/cron/abstract-cron-entry.d.ts +12 -0
- package/dist/types/config/cron/cron-background-entry.d.ts +15 -0
- package/dist/types/config/cron/cron-config.d.ts +6 -0
- package/dist/types/config/dynamo-db-config.d.ts +5 -0
- package/dist/types/config/epsilon-config.d.ts +20 -0
- package/dist/types/config/epsilon-lambda-event-handler.d.ts +7 -0
- package/dist/types/config/epsilon-logger-config.d.ts +12 -0
- package/dist/types/config/generic-aws-event-handler-function.d.ts +3 -0
- package/dist/types/config/http/authorizer-function.d.ts +6 -0
- package/dist/types/config/http/epsilon-authorization-context.d.ts +5 -0
- package/dist/types/config/http/extended-api-gateway-event.d.ts +7 -0
- package/dist/types/config/http/filter-chain-context.d.ts +14 -0
- package/dist/types/config/http/filter-function.d.ts +4 -0
- package/dist/types/config/http/handler-function.d.ts +5 -0
- package/dist/types/config/http/http-config.d.ts +15 -0
- package/dist/types/config/http/http-processing-config.d.ts +11 -0
- package/dist/types/config/http/mapped-http-processing-config.d.ts +7 -0
- package/dist/types/config/http/null-returned-object-handling.d.ts +5 -0
- package/dist/types/config/inter-api/inter-api-aws-config.d.ts +5 -0
- package/dist/types/config/inter-api/inter-api-config.d.ts +6 -0
- package/dist/types/config/inter-api/inter-api-process-mapping.d.ts +11 -0
- package/dist/types/config/logging-trace-id-generator.d.ts +4 -0
- package/dist/types/config/open-api/open-api-document-components.d.ts +4 -0
- package/dist/types/config/open-api/open-api-document-path.d.ts +2 -0
- package/dist/types/config/open-api/open-api-document.d.ts +6 -0
- package/dist/types/config/s3-config.d.ts +6 -0
- package/dist/types/config/sns-config.d.ts +5 -0
- package/dist/types/epsilon-build-properties.d.ts +9 -0
- package/dist/types/epsilon-constants.d.ts +16 -0
- package/dist/types/epsilon-global-handler.d.ts +23 -0
- package/dist/types/epsilon-instance.d.ts +19 -0
- package/dist/types/epsilon-logging-extension-processor.d.ts +5 -0
- package/dist/types/http/auth/api-gateway-adapter-authentication-handler.d.ts +18 -0
- package/dist/types/http/auth/auth0-web-token-manipulator.d.ts +13 -0
- package/dist/types/http/auth/basic-auth-token.d.ts +7 -0
- package/dist/types/http/auth/google-web-token-manipulator.d.ts +14 -0
- package/dist/types/http/auth/jwt-ratchet-local-web-token-manipulator.d.ts +13 -0
- package/dist/types/http/auth/local-web-token-manipulator.d.ts +20 -0
- package/dist/types/http/auth/web-token-manipulator.d.ts +7 -0
- package/dist/types/http/error/bad-gateway.d.ts +5 -0
- package/dist/types/http/error/bad-request-error.d.ts +5 -0
- package/dist/types/http/error/conflict-error.d.ts +5 -0
- package/dist/types/http/error/epsilon-http-error.d.ts +41 -0
- package/dist/types/http/error/forbidden-error.d.ts +5 -0
- package/dist/types/http/error/gateway-timeout.d.ts +5 -0
- package/dist/types/http/error/method-not-allowed-error.d.ts +5 -0
- package/dist/types/http/error/misconfigured-error.d.ts +5 -0
- package/dist/types/http/error/not-found-error.d.ts +5 -0
- package/dist/types/http/error/not-implemented.d.ts +5 -0
- package/dist/types/http/error/request-timeout-error.d.ts +5 -0
- package/dist/types/http/error/service-unavailable.d.ts +5 -0
- package/dist/types/http/error/too-many-requests-error.d.ts +5 -0
- package/dist/types/http/error/unauthorized-error.d.ts +5 -0
- package/dist/types/http/event-util.d.ts +47 -0
- package/dist/types/http/response-util.d.ts +11 -0
- package/dist/types/http/route/epsilon-router.d.ts +8 -0
- package/dist/types/http/route/extended-auth-response-context.d.ts +6 -0
- package/dist/types/http/route/route-mapping.d.ts +12 -0
- package/dist/types/http/route/route-validator-config.d.ts +5 -0
- package/dist/types/http/route/router-util.d.ts +26 -0
- package/dist/types/http/web-handler.d.ts +26 -0
- package/dist/types/http/web-v2-handler.d.ts +13 -0
- package/dist/types/index.d.ts +136 -0
- package/dist/types/inter-api/inter-api-entry.d.ts +7 -0
- package/dist/types/inter-api/inter-api-util.d.ts +10 -0
- package/dist/types/inter-api-manager.d.ts +17 -0
- package/dist/types/lambda-event-handler/cron-epsilon-lambda-event-handler.d.ts +14 -0
- package/dist/types/lambda-event-handler/dynamo-epsilon-lambda-event-handler.d.ts +11 -0
- package/dist/types/lambda-event-handler/generic-sns-epsilon-lambda-event-handler.d.ts +10 -0
- package/dist/types/lambda-event-handler/inter-api-epsilon-lambda-event-handler.d.ts +10 -0
- package/dist/types/lambda-event-handler/s3-epsilon-lambda-event-handler.d.ts +10 -0
- package/dist/types/local-container-server.d.ts +13 -0
- package/dist/types/local-server-cert.d.ts +5 -0
- package/dist/types/local-server.d.ts +19 -0
- package/dist/types/open-api-util/open-api-doc-modifications.d.ts +8 -0
- package/dist/types/open-api-util/open-api-doc-modifier.d.ts +10 -0
- package/dist/types/open-api-util/yaml-combiner.d.ts +3 -0
- package/dist/types/run-background-process-from-command-line.d.ts +13 -0
- package/dist/types/sample/sample-batch-only-local-server.d.ts +1 -0
- package/dist/types/sample/sample-local-server.d.ts +1 -0
- package/dist/types/sample/sample-server-components.d.ts +12 -0
- package/dist/types/test-error-server.d.ts +13 -0
- package/dist/types/util/aws-util.d.ts +8 -0
- package/dist/types/util/context-util.d.ts +33 -0
- package/dist/types/util/cron-util.d.ts +11 -0
- package/dist/types/util/epsilon-config-parser.d.ts +14 -0
- 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
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|