@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,78 @@
|
|
|
1
|
+
import yaml from 'js-yaml';
|
|
2
|
+
import { Logger } from '@bitblit/ratchet-common';
|
|
3
|
+
export class OpenApiDocModifier {
|
|
4
|
+
constructor(options) {
|
|
5
|
+
this.options = options;
|
|
6
|
+
}
|
|
7
|
+
modifyOpenApiDoc(yamlString) {
|
|
8
|
+
let rval;
|
|
9
|
+
if (!!yamlString && !!this.options) {
|
|
10
|
+
try {
|
|
11
|
+
const openApi = yaml.load(yamlString);
|
|
12
|
+
const removeTags = this.options.removeTags ? this.options.removeTags.map((t) => t.toLowerCase()) : [];
|
|
13
|
+
if (this.options.newServerPath) {
|
|
14
|
+
openApi['servers'] = [{ url: this.options.newServerPath }];
|
|
15
|
+
}
|
|
16
|
+
if (!!this.options.removeTags && openApi['tags']) {
|
|
17
|
+
if (openApi['tags']) {
|
|
18
|
+
openApi['tags'] = openApi.tags.filter((f) => {
|
|
19
|
+
const n = !!f && !!f['name'] ? f['name'].toLowerCase() : '';
|
|
20
|
+
const i = removeTags.indexOf(n);
|
|
21
|
+
return i === -1;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (openApi['paths']) {
|
|
26
|
+
let newPaths = {};
|
|
27
|
+
Object.keys(openApi['paths']).forEach((p) => {
|
|
28
|
+
const path = openApi['paths'][p];
|
|
29
|
+
Object.keys(path).forEach((verb) => {
|
|
30
|
+
const entry = path[verb];
|
|
31
|
+
entry.tags = !!entry.tags ? entry.tags.filter((t) => removeTags.lastIndexOf(t.toLowerCase()) == -1) : entry.tags;
|
|
32
|
+
const matcher = verb.toLowerCase() + ' ' + p.toLowerCase();
|
|
33
|
+
if (this.matchNone(matcher, this.options.removeEndpoints)) {
|
|
34
|
+
newPaths[p] = newPaths[p] || {};
|
|
35
|
+
newPaths[p][verb] = entry;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
if (this.options.sortEndpoints) {
|
|
40
|
+
const keys = Object.keys(newPaths).sort();
|
|
41
|
+
const newPaths2 = {};
|
|
42
|
+
keys.forEach((k) => {
|
|
43
|
+
newPaths2[k] = newPaths[k];
|
|
44
|
+
});
|
|
45
|
+
newPaths = newPaths2;
|
|
46
|
+
}
|
|
47
|
+
openApi['paths'] = newPaths;
|
|
48
|
+
}
|
|
49
|
+
let remSchemas = this.options.removeSchemas || [];
|
|
50
|
+
remSchemas = remSchemas.map((s) => s.toLowerCase());
|
|
51
|
+
if (openApi['components'] && openApi['components']['schemas']) {
|
|
52
|
+
const keys = Object.keys(openApi['components']['schemas']).sort();
|
|
53
|
+
const newComp = {};
|
|
54
|
+
keys.forEach((k) => {
|
|
55
|
+
if (remSchemas.indexOf(k.toLowerCase()) === -1) {
|
|
56
|
+
newComp[k] = openApi['components']['schemas'][k];
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
openApi['components']['schemas'] = newComp;
|
|
60
|
+
}
|
|
61
|
+
rval = yaml.dump(openApi);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
Logger.error('Error processing yaml: %s', err, err);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return rval;
|
|
68
|
+
}
|
|
69
|
+
matchNone(input, regex) {
|
|
70
|
+
let rval = true;
|
|
71
|
+
if (!!input && !!regex) {
|
|
72
|
+
regex.forEach((r) => {
|
|
73
|
+
rval = rval && !r.test(input);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return rval;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import { RequireRatchet } from '@bitblit/ratchet-common';
|
|
3
|
+
import yaml from 'js-yaml';
|
|
4
|
+
import { Logger } from '@bitblit/ratchet-common';
|
|
5
|
+
export class YamlCombiner {
|
|
6
|
+
static combine(files, inRootPath = []) {
|
|
7
|
+
RequireRatchet.notNullOrUndefined(files, 'Files argument');
|
|
8
|
+
RequireRatchet.true(files.length > 0, 'Files argument larger than 0');
|
|
9
|
+
RequireRatchet.notNullOrUndefined(inRootPath, 'Root path argument');
|
|
10
|
+
Logger.info('Processing %d files into output', files.length);
|
|
11
|
+
let allElements = {};
|
|
12
|
+
for (let i = 0; i < files.length; i++) {
|
|
13
|
+
const fileContents = fs.readFileSync(files[i]).toString();
|
|
14
|
+
const openApi = yaml.load(fileContents);
|
|
15
|
+
allElements = Object.assign(allElements, openApi);
|
|
16
|
+
}
|
|
17
|
+
const rootPath = Object.assign([], inRootPath);
|
|
18
|
+
while (rootPath.length > 0) {
|
|
19
|
+
const next = {};
|
|
20
|
+
next[rootPath[rootPath.length - 1]] = allElements;
|
|
21
|
+
rootPath.splice(rootPath.length - 1, 1);
|
|
22
|
+
allElements = next;
|
|
23
|
+
}
|
|
24
|
+
const rval = yaml.dump(allElements);
|
|
25
|
+
return rval;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ErrorRatchet, Logger, StringRatchet } from '@bitblit/ratchet-common';
|
|
2
|
+
import { program } from 'commander';
|
|
3
|
+
import clear from 'clear';
|
|
4
|
+
export class RunBackgroundProcessFromCommandLine {
|
|
5
|
+
static async processBackgroundCliRequest(epsilon, dryRun) {
|
|
6
|
+
let rval = false;
|
|
7
|
+
clear();
|
|
8
|
+
Logger.info('Bootstrapping batch processor, args : %j', process.argv);
|
|
9
|
+
program
|
|
10
|
+
.version('0.0.1')
|
|
11
|
+
.requiredOption('-p --process <processKey>', 'Background process key')
|
|
12
|
+
.option('-d --data <data>', 'Background data block, JSON encoded')
|
|
13
|
+
.option('-m --metadata <metadata>', 'Background metadata block, JSON encoded')
|
|
14
|
+
.parse(process.argv);
|
|
15
|
+
Logger.info('Program definition : %s : %s : %s', program.opts().process, program.opts().data, program.opts().meta);
|
|
16
|
+
let data = {};
|
|
17
|
+
if (StringRatchet.trimToNull(program.opts().data)) {
|
|
18
|
+
data = JSON.parse(program.opts().data);
|
|
19
|
+
}
|
|
20
|
+
if (dryRun) {
|
|
21
|
+
Logger.info('Dry run specified - not executing');
|
|
22
|
+
rval = false;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
if (!epsilon) {
|
|
26
|
+
ErrorRatchet.throwFormattedErr('Cannot run background cli because epsilon global handler is null');
|
|
27
|
+
}
|
|
28
|
+
rval = await epsilon.processSingleBackgroundByParts(program.opts().process, data);
|
|
29
|
+
}
|
|
30
|
+
return rval;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Logger } from '@bitblit/ratchet-common';
|
|
2
|
+
import { SampleServerComponents } from './sample-server-components';
|
|
3
|
+
import { LocalServer } from '../local-server';
|
|
4
|
+
import { LoggerLevelName } from '@bitblit/ratchet-common';
|
|
5
|
+
Logger.setLevel(LoggerLevelName.debug);
|
|
6
|
+
SampleServerComponents.createSampleBatchOnlyEpsilonGlobalHandler()
|
|
7
|
+
.then((handler) => {
|
|
8
|
+
const testServer = new LocalServer(handler);
|
|
9
|
+
testServer.runServer().then((res) => {
|
|
10
|
+
Logger.info('Got res server');
|
|
11
|
+
process.exit(0);
|
|
12
|
+
});
|
|
13
|
+
})
|
|
14
|
+
.catch((err) => {
|
|
15
|
+
Logger.error('Error: %s', err, err);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Logger } from '@bitblit/ratchet-common';
|
|
2
|
+
import { SampleServerComponents } from './sample-server-components';
|
|
3
|
+
import { LocalServer } from '../local-server';
|
|
4
|
+
import { LoggerLevelName } from '@bitblit/ratchet-common';
|
|
5
|
+
import { LocalWebTokenManipulator } from '../http/auth/local-web-token-manipulator';
|
|
6
|
+
Logger.setLevel(LoggerLevelName.debug);
|
|
7
|
+
const localTokenHandler = new LocalWebTokenManipulator(['abcd1234'], 'sample-server');
|
|
8
|
+
localTokenHandler
|
|
9
|
+
.createJWTStringAsync('asdf', {}, ['USER'], 3600)
|
|
10
|
+
.then((token) => {
|
|
11
|
+
Logger.info('Use token: %s', token);
|
|
12
|
+
SampleServerComponents.createSampleEpsilonGlobalHandler()
|
|
13
|
+
.then((handler) => {
|
|
14
|
+
const testServer = new LocalServer(handler, 8888, true);
|
|
15
|
+
testServer.runServer().then((res) => {
|
|
16
|
+
Logger.info('Got res server');
|
|
17
|
+
process.exit(0);
|
|
18
|
+
});
|
|
19
|
+
})
|
|
20
|
+
.catch((err) => {
|
|
21
|
+
Logger.error('Error: %s', err, err);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
});
|
|
24
|
+
})
|
|
25
|
+
.catch((tokenErr) => {
|
|
26
|
+
Logger.error('Failed to create token : %s', tokenErr);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
});
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { Logger } from '@bitblit/ratchet-common';
|
|
2
|
+
import { ApolloServer, gql } from 'apollo-server-lambda';
|
|
3
|
+
import { ApolloServerPluginLandingPageGraphQLPlayground } from 'apollo-server-core';
|
|
4
|
+
import { ErrorRatchet } from '@bitblit/ratchet-common';
|
|
5
|
+
import { NumberRatchet } from '@bitblit/ratchet-common';
|
|
6
|
+
import fs from 'fs';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import { LoggerLevelName, PromiseRatchet } from '@bitblit/ratchet-common';
|
|
9
|
+
import { EpsilonGlobalHandler } from '../epsilon-global-handler';
|
|
10
|
+
import { BuiltInHandlers } from '../built-in/http/built-in-handlers';
|
|
11
|
+
import { LocalWebTokenManipulator } from '../http/auth/local-web-token-manipulator';
|
|
12
|
+
import { EchoProcessor } from '../built-in/background/echo-processor';
|
|
13
|
+
import { NoOpProcessor } from '../built-in/background/no-op-processor';
|
|
14
|
+
import { SampleDelayProcessor } from '../built-in/background/sample-delay-processor';
|
|
15
|
+
import { LogAndEnqueueEchoProcessor } from '../built-in/background/log-and-enqueue-echo-processor';
|
|
16
|
+
import { EpsilonConfigParser } from '../util/epsilon-config-parser';
|
|
17
|
+
import { RouterUtil } from '../http/route/router-util';
|
|
18
|
+
import { SampleInputValidatedProcessor } from '../built-in/background/sample-input-validated-processor';
|
|
19
|
+
import { BuiltInAuthorizers } from '../built-in/http/built-in-authorizers';
|
|
20
|
+
import { ApolloFilter } from '../built-in/http/apollo-filter';
|
|
21
|
+
import { BooleanRatchet } from '@bitblit/ratchet-common';
|
|
22
|
+
import { StringRatchet } from '@bitblit/ratchet-common';
|
|
23
|
+
import { BuiltInFilters } from '../built-in/http/built-in-filters';
|
|
24
|
+
import { EventUtil } from '../http/event-util';
|
|
25
|
+
import { LogMessageBackgroundErrorProcessor } from '../built-in/background/log-message-background-error-processor';
|
|
26
|
+
import { SingleThreadLocalBackgroundManager } from '../background/manager/single-thread-local-background-manager';
|
|
27
|
+
export class SampleServerComponents {
|
|
28
|
+
constructor() { }
|
|
29
|
+
static async createSampleApollo() {
|
|
30
|
+
const gqlString = SampleServerComponents.loadSampleServerGQL();
|
|
31
|
+
Logger.silly('Creating apollo from : %s', gqlString);
|
|
32
|
+
const typeDefs = gql(gqlString);
|
|
33
|
+
const resolvers = {
|
|
34
|
+
RootQueryType: {
|
|
35
|
+
serverMeta: async (root) => {
|
|
36
|
+
return { version: 'A1', serverTime: new Date().toISOString() };
|
|
37
|
+
},
|
|
38
|
+
forceTimeout: async (root) => {
|
|
39
|
+
await PromiseRatchet.wait(1000 * 60 * 30);
|
|
40
|
+
return { placeholder: 'A1' };
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
const server = new ApolloServer({
|
|
45
|
+
debug: false,
|
|
46
|
+
introspection: true,
|
|
47
|
+
typeDefs,
|
|
48
|
+
resolvers,
|
|
49
|
+
plugins: [ApolloServerPluginLandingPageGraphQLPlayground({ endpoint: '/graphql' })],
|
|
50
|
+
context: async ({ event, context, express }) => {
|
|
51
|
+
const authTokenSt = EventUtil.extractBearerTokenFromEvent(event);
|
|
52
|
+
const token = null;
|
|
53
|
+
if (!!authTokenSt && authTokenSt.startsWith('Bearer')) {
|
|
54
|
+
Logger.info('Got : %s', authTokenSt);
|
|
55
|
+
}
|
|
56
|
+
const rval = {
|
|
57
|
+
user: token,
|
|
58
|
+
headers: event.headers,
|
|
59
|
+
functionName: context.functionName,
|
|
60
|
+
event,
|
|
61
|
+
context,
|
|
62
|
+
};
|
|
63
|
+
return rval;
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
return server;
|
|
67
|
+
}
|
|
68
|
+
static async createSampleEpsilonConfig() {
|
|
69
|
+
const yamlString = SampleServerComponents.loadSampleOpenApiYaml();
|
|
70
|
+
const authorizers = new Map();
|
|
71
|
+
authorizers.set('SampleAuthorizer', (token, evt) => BuiltInAuthorizers.simpleLoggedInAuth(token, evt));
|
|
72
|
+
authorizers.set('LogAuthorizer', (token, evt) => BuiltInAuthorizers.simpleNoAuthenticationLogAccess(token, evt));
|
|
73
|
+
const handlers = new Map();
|
|
74
|
+
handlers.set('get /', (event, context) => BuiltInHandlers.sample(event, null, context));
|
|
75
|
+
handlers.set('get /meta/server', (event) => BuiltInHandlers.sample(event));
|
|
76
|
+
handlers.set('get /meta/user', (event) => BuiltInHandlers.sample(event));
|
|
77
|
+
handlers.set('get /meta/item/{itemId}', (event) => BuiltInHandlers.sample(event));
|
|
78
|
+
handlers.set('post /secure/access-token', (event) => BuiltInHandlers.sample(event));
|
|
79
|
+
handlers.set('get /multi/fixed', (event) => BuiltInHandlers.sample(event, 'fixed'));
|
|
80
|
+
handlers.set('get /multi/{v}', (event) => BuiltInHandlers.sample(event, 'variable'));
|
|
81
|
+
handlers.set('get /err/{code}', (event) => {
|
|
82
|
+
const err = ErrorRatchet.fErr('Fake Err : %j', event);
|
|
83
|
+
err['statusCode'] = NumberRatchet.safeNumber(event.pathParameters['code']);
|
|
84
|
+
throw err;
|
|
85
|
+
});
|
|
86
|
+
handlers.set('get /meta/sample-item', async (event) => {
|
|
87
|
+
const numberToUse = NumberRatchet.safeNumber(event.queryStringParameters['num']) || 5;
|
|
88
|
+
const rval = {
|
|
89
|
+
numberParam: numberToUse,
|
|
90
|
+
nameParam: 'Test-String',
|
|
91
|
+
};
|
|
92
|
+
return rval;
|
|
93
|
+
});
|
|
94
|
+
handlers.set('post /meta/sample-item', async (event) => {
|
|
95
|
+
const parsed = event.parsedBody;
|
|
96
|
+
const forceFail = BooleanRatchet.parseBool(StringRatchet.trimToNull(event.queryStringParameters['forceFail'])) === true;
|
|
97
|
+
if (forceFail) {
|
|
98
|
+
parsed['numberParam'] = 'test';
|
|
99
|
+
}
|
|
100
|
+
return parsed;
|
|
101
|
+
});
|
|
102
|
+
const tokenManipulator = new LocalWebTokenManipulator(['abcd1234'], 'sample.erigir.com')
|
|
103
|
+
.withParseFailureLogLevel(LoggerLevelName.debug)
|
|
104
|
+
.withExtraDecryptionKeys(['abcdefabcdef'])
|
|
105
|
+
.withOldKeyUseLogLevel(LoggerLevelName.info);
|
|
106
|
+
const meta = RouterUtil.defaultHttpMetaProcessingConfigWithAuthenticationHeaderParsing(tokenManipulator);
|
|
107
|
+
meta.timeoutMS = 10000;
|
|
108
|
+
ApolloFilter.addApolloFilterToList(meta.preFilters, new RegExp('.*graphql.*'), await SampleServerComponents.createSampleApollo(), {
|
|
109
|
+
cors: {
|
|
110
|
+
origin: '*',
|
|
111
|
+
credentials: true,
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
meta.errorFilters.push((fCtx) => BuiltInFilters.secureOutboundServerErrorForProduction(fCtx, 'Clean Internal Server Error', 500));
|
|
115
|
+
const preFiltersAllowingNull = Object.assign({}, meta);
|
|
116
|
+
preFiltersAllowingNull.preFilters = Object.assign([], preFiltersAllowingNull.preFilters);
|
|
117
|
+
preFiltersAllowingNull.preFilters.splice(8, 1);
|
|
118
|
+
const cfg = {
|
|
119
|
+
defaultMetaHandling: meta,
|
|
120
|
+
handlers: handlers,
|
|
121
|
+
authorizers: authorizers,
|
|
122
|
+
overrideMetaHandling: [
|
|
123
|
+
{
|
|
124
|
+
pathRegex: '/background',
|
|
125
|
+
methods: null,
|
|
126
|
+
config: Object.assign({}, meta, { overrideAuthorizerName: 'LogAuthorizer' }),
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
pathRegex: '/meta/server',
|
|
130
|
+
methods: ['GET'],
|
|
131
|
+
config: preFiltersAllowingNull,
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
prefixesToStripBeforeRouteMatch: ['v0'],
|
|
135
|
+
filterHandledRouteMatches: ['options .*'],
|
|
136
|
+
};
|
|
137
|
+
const background = {
|
|
138
|
+
httpMetaEndpoint: '/background/meta',
|
|
139
|
+
httpSubmissionPath: '/background',
|
|
140
|
+
implyTypeFromPathSuffix: false,
|
|
141
|
+
processors: [
|
|
142
|
+
new EchoProcessor(),
|
|
143
|
+
new NoOpProcessor(),
|
|
144
|
+
new SampleDelayProcessor(),
|
|
145
|
+
new SampleInputValidatedProcessor(),
|
|
146
|
+
new LogAndEnqueueEchoProcessor(),
|
|
147
|
+
],
|
|
148
|
+
errorProcessor: new LogMessageBackgroundErrorProcessor(),
|
|
149
|
+
};
|
|
150
|
+
const epsilonConfig = {
|
|
151
|
+
openApiYamlString: yamlString,
|
|
152
|
+
httpConfig: cfg,
|
|
153
|
+
backgroundConfig: background,
|
|
154
|
+
};
|
|
155
|
+
return epsilonConfig;
|
|
156
|
+
}
|
|
157
|
+
static async createSampleEpsilonGlobalHandler() {
|
|
158
|
+
const epsilonConfig = await SampleServerComponents.createSampleEpsilonConfig();
|
|
159
|
+
const backgroundManager = new SingleThreadLocalBackgroundManager();
|
|
160
|
+
const epsilonInstance = EpsilonConfigParser.epsilonConfigToEpsilonInstance(epsilonConfig, backgroundManager);
|
|
161
|
+
const rval = new EpsilonGlobalHandler(epsilonInstance);
|
|
162
|
+
return rval;
|
|
163
|
+
}
|
|
164
|
+
static async createSampleBatchOnlyEpsilonGlobalHandler() {
|
|
165
|
+
const epsilonConfig = await SampleServerComponents.createSampleEpsilonConfig();
|
|
166
|
+
epsilonConfig.httpConfig.handlers = new Map();
|
|
167
|
+
const byPassCfg = Object.assign({}, epsilonConfig.httpConfig.defaultMetaHandling);
|
|
168
|
+
byPassCfg.preFilters = byPassCfg.preFilters.concat([
|
|
169
|
+
(fCtx) => BuiltInFilters.autoRespond(fCtx, { message: 'Background Processing Only' }),
|
|
170
|
+
]);
|
|
171
|
+
epsilonConfig.httpConfig.overrideMetaHandling = [
|
|
172
|
+
{
|
|
173
|
+
pathRegex: '.*background.*',
|
|
174
|
+
invertPathMatching: true,
|
|
175
|
+
config: byPassCfg,
|
|
176
|
+
},
|
|
177
|
+
];
|
|
178
|
+
epsilonConfig.httpConfig.filterHandledRouteMatches = ['.*'];
|
|
179
|
+
const backgroundManager = new SingleThreadLocalBackgroundManager();
|
|
180
|
+
const epsilonInstance = EpsilonConfigParser.epsilonConfigToEpsilonInstance(epsilonConfig, backgroundManager);
|
|
181
|
+
const rval = new EpsilonGlobalHandler(epsilonInstance);
|
|
182
|
+
return rval;
|
|
183
|
+
}
|
|
184
|
+
static loadSampleOpenApiYaml() {
|
|
185
|
+
const yamlString = fs.readFileSync(path.join(__dirname, '..', 'static', 'sample-open-api-doc.yaml')).toString();
|
|
186
|
+
return yamlString;
|
|
187
|
+
}
|
|
188
|
+
static loadSampleServerGQL() {
|
|
189
|
+
const yamlString = fs.readFileSync(path.join(__dirname, '..', 'static', 'sample-server.gql')).toString();
|
|
190
|
+
return yamlString;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Logger } from '@bitblit/ratchet-common';
|
|
2
|
+
import { CliRatchet } from '@bitblit/ratchet-node-only';
|
|
3
|
+
import net from 'net';
|
|
4
|
+
export class TestErrorServer {
|
|
5
|
+
constructor(port = 9999) {
|
|
6
|
+
this.port = port;
|
|
7
|
+
this.aborted = false;
|
|
8
|
+
}
|
|
9
|
+
async runServer() {
|
|
10
|
+
Logger.info('Starting Test Error net server on port %d', this.port);
|
|
11
|
+
return new Promise((res, rej) => {
|
|
12
|
+
const server = new net.Server({});
|
|
13
|
+
server.listen(this.port, () => {
|
|
14
|
+
Logger.info('Server listening for connection requests on socket localhost: %s', this.port);
|
|
15
|
+
});
|
|
16
|
+
server.on('connection', async (socket) => {
|
|
17
|
+
Logger.info('X: A new connection has been established.');
|
|
18
|
+
socket.write('Hello, client.');
|
|
19
|
+
socket.on('data', (chunk) => {
|
|
20
|
+
Logger.info('Data received from client: %s', chunk);
|
|
21
|
+
});
|
|
22
|
+
socket.on('end', () => {
|
|
23
|
+
Logger.info('Closing connection with the client');
|
|
24
|
+
});
|
|
25
|
+
socket.on('error', (err) => {
|
|
26
|
+
Logger.info('Error: %s', err);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async requestHandler(request, response) {
|
|
32
|
+
Logger.info('Got request %d - closing socket', request);
|
|
33
|
+
request.setTimeout(100);
|
|
34
|
+
response.end('x');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (CliRatchet.isCalledFromCLISingle('test-error-server')) {
|
|
38
|
+
const testServer = new TestErrorServer();
|
|
39
|
+
testServer.runServer().then((res) => {
|
|
40
|
+
Logger.info('Got res server');
|
|
41
|
+
process.exit(0);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export class AwsUtil {
|
|
2
|
+
static apiGatewayV2ToApiGatewayV1(srcEvt) {
|
|
3
|
+
const rval = {
|
|
4
|
+
requestContext: AwsUtil.apiGatewayV2RequestContextToApiGatewayV1RequestContext(srcEvt.requestContext),
|
|
5
|
+
httpMethod: srcEvt.requestContext.http.method,
|
|
6
|
+
path: srcEvt.requestContext.http.path,
|
|
7
|
+
queryStringParameters: srcEvt.queryStringParameters,
|
|
8
|
+
headers: srcEvt.headers,
|
|
9
|
+
body: srcEvt.body,
|
|
10
|
+
isBase64Encoded: srcEvt.isBase64Encoded,
|
|
11
|
+
multiValueHeaders: null,
|
|
12
|
+
multiValueQueryStringParameters: null,
|
|
13
|
+
pathParameters: srcEvt.pathParameters,
|
|
14
|
+
stageVariables: srcEvt.stageVariables,
|
|
15
|
+
resource: null,
|
|
16
|
+
};
|
|
17
|
+
return rval;
|
|
18
|
+
}
|
|
19
|
+
static apiGatewayV2RequestContextToApiGatewayV1RequestContext(srcEvt) {
|
|
20
|
+
const rval = {
|
|
21
|
+
accountId: srcEvt.accountId,
|
|
22
|
+
apiId: srcEvt.apiId,
|
|
23
|
+
authorizer: null,
|
|
24
|
+
domainName: srcEvt.domainName,
|
|
25
|
+
domainPrefix: srcEvt.domainPrefix,
|
|
26
|
+
requestId: srcEvt.requestId,
|
|
27
|
+
routeKey: srcEvt.routeKey,
|
|
28
|
+
stage: srcEvt.stage,
|
|
29
|
+
requestTime: srcEvt.time,
|
|
30
|
+
requestTimeEpoch: srcEvt.timeEpoch,
|
|
31
|
+
protocol: srcEvt.http.protocol,
|
|
32
|
+
httpMethod: srcEvt.http.method,
|
|
33
|
+
identity: null,
|
|
34
|
+
path: srcEvt.http.path,
|
|
35
|
+
resourceId: null,
|
|
36
|
+
resourcePath: null,
|
|
37
|
+
};
|
|
38
|
+
return rval;
|
|
39
|
+
}
|
|
40
|
+
static findInMap(toFind, map) {
|
|
41
|
+
let rval = null;
|
|
42
|
+
map.forEach((val, key) => {
|
|
43
|
+
if (AwsUtil.matchExact(key, toFind)) {
|
|
44
|
+
rval = val;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return rval;
|
|
48
|
+
}
|
|
49
|
+
static matchExact(r, str) {
|
|
50
|
+
const match = str.match(r);
|
|
51
|
+
return match != null && str == match[0];
|
|
52
|
+
}
|
|
53
|
+
static resolvePotentialFunctionToResult(src, def) {
|
|
54
|
+
let rval = def;
|
|
55
|
+
if (src) {
|
|
56
|
+
if (typeof src === 'function') {
|
|
57
|
+
rval = src();
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
rval = src;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return rval;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { NumberRatchet } from '@bitblit/ratchet-common';
|
|
2
|
+
import { ErrorRatchet } from '@bitblit/ratchet-common';
|
|
3
|
+
import { BuiltInTraceIdGenerators } from '../built-in/built-in-trace-id-generators';
|
|
4
|
+
import { StringRatchet } from '@bitblit/ratchet-common';
|
|
5
|
+
export class ContextUtil {
|
|
6
|
+
constructor() { }
|
|
7
|
+
static initContext(epsilon, evt, ctx, processLabel) {
|
|
8
|
+
ContextUtil.CURRENT_EPSILON_REFERENCE = epsilon;
|
|
9
|
+
ContextUtil.CURRENT_CONTEXT = ctx;
|
|
10
|
+
ContextUtil.CURRENT_EVENT = evt;
|
|
11
|
+
ContextUtil.CURRENT_LOG_VARS = {};
|
|
12
|
+
ContextUtil.CURRENT_PROCESS_LABEL = processLabel;
|
|
13
|
+
}
|
|
14
|
+
static clearContext() {
|
|
15
|
+
ContextUtil.CURRENT_EPSILON_REFERENCE = null;
|
|
16
|
+
ContextUtil.CURRENT_CONTEXT = null;
|
|
17
|
+
ContextUtil.CURRENT_EVENT = null;
|
|
18
|
+
ContextUtil.CURRENT_LOG_VARS = {};
|
|
19
|
+
ContextUtil.CURRENT_PROCESS_LABEL = null;
|
|
20
|
+
ContextUtil.CURRENT_OVERRIDE_TRACE_ID = null;
|
|
21
|
+
ContextUtil.CURRENT_OVERRIDE_TRACE_DEPTH = null;
|
|
22
|
+
}
|
|
23
|
+
static setOverrideTrace(traceId, traceDepth) {
|
|
24
|
+
ContextUtil.CURRENT_OVERRIDE_TRACE_ID = traceId || ContextUtil.CURRENT_OVERRIDE_TRACE_ID;
|
|
25
|
+
ContextUtil.CURRENT_OVERRIDE_TRACE_DEPTH = traceDepth || ContextUtil.CURRENT_OVERRIDE_TRACE_DEPTH;
|
|
26
|
+
}
|
|
27
|
+
static setOverrideTraceFromInternalBackgroundEntry(entry) {
|
|
28
|
+
ContextUtil.setOverrideTrace(entry.traceId, entry.traceDepth);
|
|
29
|
+
}
|
|
30
|
+
static setOverrideTraceFromInterApiEntry(interApiEntry) {
|
|
31
|
+
ContextUtil.setOverrideTrace(interApiEntry.traceId, interApiEntry.traceDepth);
|
|
32
|
+
}
|
|
33
|
+
static addHeadersToRecord(input, depthOffset = 0) {
|
|
34
|
+
if (input) {
|
|
35
|
+
input[ContextUtil.traceHeaderName()] = ContextUtil.currentTraceId();
|
|
36
|
+
input[ContextUtil.traceDepthHeaderName()] = StringRatchet.safeString(ContextUtil.currentTraceDepth() + depthOffset);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
ErrorRatchet.throwFormattedErr('Cannot add headers to null/undefined input');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
static addTraceToProxyResult(pr) {
|
|
43
|
+
pr.headers = pr.headers || {};
|
|
44
|
+
ContextUtil.addHeadersToRecord(pr.headers);
|
|
45
|
+
}
|
|
46
|
+
static addTraceToHttpRequestInit(ri) {
|
|
47
|
+
ri.headers = ri.headers || {};
|
|
48
|
+
ContextUtil.addHeadersToRecord(ri.headers, 1);
|
|
49
|
+
}
|
|
50
|
+
static setProcessLabel(processLabel) {
|
|
51
|
+
ContextUtil.CURRENT_PROCESS_LABEL = processLabel;
|
|
52
|
+
}
|
|
53
|
+
static currentRequestId() {
|
|
54
|
+
const ctx = ContextUtil.CURRENT_CONTEXT;
|
|
55
|
+
return ctx ? ctx.awsRequestId : null;
|
|
56
|
+
}
|
|
57
|
+
static remainingTimeMS() {
|
|
58
|
+
const ctx = ContextUtil.CURRENT_CONTEXT;
|
|
59
|
+
return ctx ? ctx.getRemainingTimeInMillis() : null;
|
|
60
|
+
}
|
|
61
|
+
static currentProcessLabel() {
|
|
62
|
+
return ContextUtil.CURRENT_PROCESS_LABEL || 'unset';
|
|
63
|
+
}
|
|
64
|
+
static traceHeaderName() {
|
|
65
|
+
const headerName = ContextUtil?.CURRENT_EPSILON_REFERENCE?.config?.loggerConfig?.traceHeaderName || 'X-TRACE-ID';
|
|
66
|
+
return headerName;
|
|
67
|
+
}
|
|
68
|
+
static traceDepthHeaderName() {
|
|
69
|
+
const headerName = ContextUtil?.CURRENT_EPSILON_REFERENCE?.config?.loggerConfig?.traceDepthHeaderName || 'X-TRACE-DEPTH';
|
|
70
|
+
return headerName;
|
|
71
|
+
}
|
|
72
|
+
static currentTraceId() {
|
|
73
|
+
const traceFn = ContextUtil?.CURRENT_EPSILON_REFERENCE?.config?.loggerConfig?.traceIdGenerator || BuiltInTraceIdGenerators.fullAwsRequestId;
|
|
74
|
+
const traceId = ContextUtil.CURRENT_OVERRIDE_TRACE_ID ||
|
|
75
|
+
ContextUtil.CURRENT_EVENT?.headers?.[ContextUtil.traceHeaderName()] ||
|
|
76
|
+
traceFn(ContextUtil.CURRENT_EVENT, ContextUtil.CURRENT_CONTEXT);
|
|
77
|
+
return traceId;
|
|
78
|
+
}
|
|
79
|
+
static currentTraceDepth() {
|
|
80
|
+
const caller = ContextUtil.CURRENT_OVERRIDE_TRACE_DEPTH ||
|
|
81
|
+
NumberRatchet.safeNumber(ContextUtil.CURRENT_EVENT?.headers?.[ContextUtil.traceDepthHeaderName()]) ||
|
|
82
|
+
1;
|
|
83
|
+
return caller;
|
|
84
|
+
}
|
|
85
|
+
static addLogVariable(name, val) {
|
|
86
|
+
ContextUtil.CURRENT_LOG_VARS[name] = val;
|
|
87
|
+
}
|
|
88
|
+
static fetchLogVariable(name) {
|
|
89
|
+
return ContextUtil.CURRENT_LOG_VARS?.[name];
|
|
90
|
+
}
|
|
91
|
+
static fetchLogVariables() {
|
|
92
|
+
return Object.assign({}, ContextUtil.CURRENT_LOG_VARS || {});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
ContextUtil.CURRENT_LOG_VARS = {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { RequireRatchet } from '@bitblit/ratchet-common';
|
|
2
|
+
import { ErrorRatchet } from '@bitblit/ratchet-common';
|
|
3
|
+
import { DateTime } from 'luxon';
|
|
4
|
+
import { StringRatchet } from '@bitblit/ratchet-common';
|
|
5
|
+
export class CronUtil {
|
|
6
|
+
static everyNMinuteFilter(n) {
|
|
7
|
+
return CronUtil.everyNElementFilter(n, 60);
|
|
8
|
+
}
|
|
9
|
+
static everyNDaysOfYearFilter(n) {
|
|
10
|
+
return CronUtil.everyNElementFilter(n, 365);
|
|
11
|
+
}
|
|
12
|
+
static everyNElementFilter(n, m) {
|
|
13
|
+
RequireRatchet.notNullOrUndefined(n);
|
|
14
|
+
RequireRatchet.notNullOrUndefined(m);
|
|
15
|
+
const half = Math.floor(m / 2);
|
|
16
|
+
if (!n || n < 2 || n > half || m % n !== 0) {
|
|
17
|
+
ErrorRatchet.throwFormattedErr('Invalid config - this function only makes sense for 2 < N < %d and %d evenly divisible by N', half, m);
|
|
18
|
+
throw new Error('Invalid config - this function only makes sense for 2 < N < 31 and 60 evenly divisible by N');
|
|
19
|
+
}
|
|
20
|
+
const rval = [];
|
|
21
|
+
for (let i = 0; i < 60; i += n) {
|
|
22
|
+
rval.push(i);
|
|
23
|
+
}
|
|
24
|
+
return rval;
|
|
25
|
+
}
|
|
26
|
+
static numberMatchesFilter(num, filter) {
|
|
27
|
+
return !filter || filter.length === 0 || filter.includes(num);
|
|
28
|
+
}
|
|
29
|
+
static eventMatchesEntry(event, entry, cfg, testTimeEpochMS = new Date().getTime()) {
|
|
30
|
+
let rval = false;
|
|
31
|
+
if (!!event && !!entry && !!cfg.timezone) {
|
|
32
|
+
if (!!event.resources && event.resources.length > 0) {
|
|
33
|
+
const eventSourceName = event.resources[0];
|
|
34
|
+
const targetTZ = StringRatchet.trimToNull(entry.overrideTimezone) || cfg.timezone;
|
|
35
|
+
const nowInTZ = DateTime.fromMillis(testTimeEpochMS).setZone(targetTZ);
|
|
36
|
+
rval = !entry.eventFilter || entry.eventFilter.test(eventSourceName);
|
|
37
|
+
rval = rval && CronUtil.numberMatchesFilter(nowInTZ.minute, entry.minuteFilter);
|
|
38
|
+
rval = rval && CronUtil.numberMatchesFilter(nowInTZ.hour, entry.hourFilter);
|
|
39
|
+
rval = rval && CronUtil.numberMatchesFilter(nowInTZ.weekday, entry.dayOfWeekFilter);
|
|
40
|
+
rval = rval && CronUtil.numberMatchesFilter(nowInTZ.day, entry.dayOfMonthFilter);
|
|
41
|
+
rval = rval && CronUtil.numberMatchesFilter(nowInTZ.month, entry.monthOfYearFilter);
|
|
42
|
+
rval = rval && (!entry.contextMatchFilter || entry.contextMatchFilter.test(StringRatchet.trimToEmpty(cfg.context)));
|
|
43
|
+
rval = rval && (!entry.contextNoMatchFilter || !entry.contextNoMatchFilter.test(StringRatchet.trimToEmpty(cfg.context)));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return rval;
|
|
47
|
+
}
|
|
48
|
+
static cronEntryName(entry, idx = null) {
|
|
49
|
+
RequireRatchet.notNullOrUndefined(entry);
|
|
50
|
+
let rval = null;
|
|
51
|
+
if (!!entry) {
|
|
52
|
+
rval = entry.name;
|
|
53
|
+
rval = rval || entry['backgroundTaskType'];
|
|
54
|
+
if (!rval && !!entry['directHandler']) {
|
|
55
|
+
if (!!idx) {
|
|
56
|
+
rval = 'Direct Entry ' + idx;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
rval = 'Direct Entry (No idx specified)';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
rval = 'ERROR: no entry passed';
|
|
65
|
+
}
|
|
66
|
+
return rval;
|
|
67
|
+
}
|
|
68
|
+
}
|