@kensio/yulin 1.20.1 → 1.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/service/apigateway/api/sim-rest-api-lambda-proxy.factory.d.ts +2 -5
- package/dist/service/apigateway/api/sim-rest-api-lambda-proxy.factory.d.ts.map +1 -1
- package/dist/service/apigateway/api/sim-rest-api-lambda-proxy.factory.js +3 -7
- package/dist/service/apigateway/api/sim-rest-api-lambda-proxy.factory.js.map +1 -1
- package/dist/service/apigateway/api/sim-rest-api-proxy-stage.d.ts +22 -0
- package/dist/service/apigateway/api/sim-rest-api-proxy-stage.d.ts.map +1 -0
- package/dist/service/apigateway/api/sim-rest-api-proxy-stage.js +31 -0
- package/dist/service/apigateway/api/sim-rest-api-proxy-stage.js.map +1 -0
- package/dist/service/apigateway/api/stage/settings/sim-rest-api-method-settings.type.d.ts +19 -0
- package/dist/service/apigateway/api/stage/settings/sim-rest-api-method-settings.type.d.ts.map +1 -0
- package/dist/service/apigateway/api/stage/settings/sim-rest-api-method-settings.type.js +2 -0
- package/dist/service/apigateway/api/stage/settings/sim-rest-api-method-settings.type.js.map +1 -0
- package/dist/service/apigateway/api/stage/settings/sim-rest-api-stage-method-settings.d.ts +43 -0
- package/dist/service/apigateway/api/stage/settings/sim-rest-api-stage-method-settings.d.ts.map +1 -0
- package/dist/service/apigateway/api/stage/settings/sim-rest-api-stage-method-settings.js +75 -0
- package/dist/service/apigateway/api/stage/settings/sim-rest-api-stage-method-settings.js.map +1 -0
- package/dist/service/apigateway/api/stage/sim-rest-api-stage.d.ts +19 -0
- package/dist/service/apigateway/api/stage/sim-rest-api-stage.d.ts.map +1 -1
- package/dist/service/apigateway/api/stage/sim-rest-api-stage.js +22 -0
- package/dist/service/apigateway/api/stage/sim-rest-api-stage.js.map +1 -1
- package/dist/service/apigateway/cfn/stage/sim-cfn-rest-api-method-settings-properties.d.ts +33 -0
- package/dist/service/apigateway/cfn/stage/sim-cfn-rest-api-method-settings-properties.d.ts.map +1 -0
- package/dist/service/apigateway/cfn/stage/sim-cfn-rest-api-method-settings-properties.js +69 -0
- package/dist/service/apigateway/cfn/stage/sim-cfn-rest-api-method-settings-properties.js.map +1 -0
- package/dist/service/apigateway/cfn/stage/sim-cfn-rest-api-stage-properties.d.ts +4 -1
- package/dist/service/apigateway/cfn/stage/sim-cfn-rest-api-stage-properties.d.ts.map +1 -1
- package/dist/service/apigateway/cfn/stage/sim-cfn-rest-api-stage-properties.js +13 -4
- package/dist/service/apigateway/cfn/stage/sim-cfn-rest-api-stage-properties.js.map +1 -1
- package/dist/service/apigateway/command/sim-api-gateway-unsimulated-input.d.ts +6 -1
- package/dist/service/apigateway/command/sim-api-gateway-unsimulated-input.d.ts.map +1 -1
- package/dist/service/apigateway/command/sim-api-gateway-unsimulated-input.js +8 -3
- package/dist/service/apigateway/command/sim-api-gateway-unsimulated-input.js.map +1 -1
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-commands.d.ts.map +1 -1
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-commands.js +4 -0
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-commands.js.map +1 -1
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-method-settings-input.d.ts +18 -0
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-method-settings-input.d.ts.map +1 -0
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-method-settings-input.js +42 -0
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-method-settings-input.js.map +1 -0
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-publisher.d.ts +9 -0
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-publisher.d.ts.map +1 -1
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-publisher.js +17 -0
- package/dist/service/apigateway/command/stage/sim-rest-api-stage-publisher.js.map +1 -1
- package/dist/service/apigateway/command/stage/stage.command.d.ts +11 -0
- package/dist/service/apigateway/command/stage/stage.command.d.ts.map +1 -1
- package/dist/service/apigateway/index.d.ts +2 -0
- package/dist/service/apigateway/index.d.ts.map +1 -1
- package/dist/service/apigateway/index.js +1 -0
- package/dist/service/apigateway/index.js.map +1 -1
- package/dist/service/apigateway/serve/sim-api-gateway-controller.d.ts +4 -1
- package/dist/service/apigateway/serve/sim-api-gateway-controller.d.ts.map +1 -1
- package/dist/service/apigateway/serve/sim-api-gateway-controller.js +10 -1
- package/dist/service/apigateway/serve/sim-api-gateway-controller.js.map +1 -1
- package/dist/service/apigateway/serve/sim-api-gateway-error-response.d.ts +8 -0
- package/dist/service/apigateway/serve/sim-api-gateway-error-response.d.ts.map +1 -1
- package/dist/service/apigateway/serve/sim-api-gateway-error-response.js +10 -0
- package/dist/service/apigateway/serve/sim-api-gateway-error-response.js.map +1 -1
- package/dist/service/apigatewayv2/api/sim-http-api-lambda-proxy.factory.d.ts +5 -0
- package/dist/service/apigatewayv2/api/sim-http-api-lambda-proxy.factory.d.ts.map +1 -1
- package/dist/service/apigatewayv2/api/sim-http-api-lambda-proxy.factory.js +4 -0
- package/dist/service/apigatewayv2/api/sim-http-api-lambda-proxy.factory.js.map +1 -1
- package/dist/service/apigatewayv2/api/stage/settings/sim-http-api-route-settings.type.d.ts +24 -0
- package/dist/service/apigatewayv2/api/stage/settings/sim-http-api-route-settings.type.d.ts.map +1 -0
- package/dist/service/apigatewayv2/api/stage/settings/sim-http-api-route-settings.type.js +2 -0
- package/dist/service/apigatewayv2/api/stage/settings/sim-http-api-route-settings.type.js.map +1 -0
- package/dist/service/apigatewayv2/api/stage/settings/sim-http-api-stage-route-settings.d.ts +39 -0
- package/dist/service/apigatewayv2/api/stage/settings/sim-http-api-stage-route-settings.d.ts.map +1 -0
- package/dist/service/apigatewayv2/api/stage/settings/sim-http-api-stage-route-settings.js +74 -0
- package/dist/service/apigatewayv2/api/stage/settings/sim-http-api-stage-route-settings.js.map +1 -0
- package/dist/service/apigatewayv2/api/stage/sim-http-api-stage.d.ts +16 -1
- package/dist/service/apigatewayv2/api/stage/sim-http-api-stage.d.ts.map +1 -1
- package/dist/service/apigatewayv2/api/stage/sim-http-api-stage.js +16 -0
- package/dist/service/apigatewayv2/api/stage/sim-http-api-stage.js.map +1 -1
- package/dist/service/apigatewayv2/cfn/stage/sim-cfn-http-api-route-settings-properties.d.ts +30 -0
- package/dist/service/apigatewayv2/cfn/stage/sim-cfn-http-api-route-settings-properties.d.ts.map +1 -0
- package/dist/service/apigatewayv2/cfn/stage/sim-cfn-http-api-route-settings-properties.js +67 -0
- package/dist/service/apigatewayv2/cfn/stage/sim-cfn-http-api-route-settings-properties.js.map +1 -0
- package/dist/service/apigatewayv2/cfn/stage/sim-cfn-http-api-stage-properties.d.ts +3 -1
- package/dist/service/apigatewayv2/cfn/stage/sim-cfn-http-api-stage-properties.d.ts.map +1 -1
- package/dist/service/apigatewayv2/cfn/stage/sim-cfn-http-api-stage-properties.js +16 -5
- package/dist/service/apigatewayv2/cfn/stage/sim-cfn-http-api-stage-properties.js.map +1 -1
- package/dist/service/apigatewayv2/command/sim-api-gateway-v2-unsimulated-input.d.ts +6 -1
- package/dist/service/apigatewayv2/command/sim-api-gateway-v2-unsimulated-input.d.ts.map +1 -1
- package/dist/service/apigatewayv2/command/sim-api-gateway-v2-unsimulated-input.js +8 -3
- package/dist/service/apigatewayv2/command/sim-api-gateway-v2-unsimulated-input.js.map +1 -1
- package/dist/service/apigatewayv2/command/stage/sim-http-api-stage-commands.d.ts.map +1 -1
- package/dist/service/apigatewayv2/command/stage/sim-http-api-stage-commands.js +8 -0
- package/dist/service/apigatewayv2/command/stage/sim-http-api-stage-commands.js.map +1 -1
- package/dist/service/apigatewayv2/command/stage/sim-http-api-stage-route-settings-input.d.ts +18 -0
- package/dist/service/apigatewayv2/command/stage/sim-http-api-stage-route-settings-input.d.ts.map +1 -0
- package/dist/service/apigatewayv2/command/stage/sim-http-api-stage-route-settings-input.js +32 -0
- package/dist/service/apigatewayv2/command/stage/sim-http-api-stage-route-settings-input.js.map +1 -0
- package/dist/service/apigatewayv2/command/stage/stage.command.d.ts +3 -0
- package/dist/service/apigatewayv2/command/stage/stage.command.d.ts.map +1 -1
- package/dist/service/apigatewayv2/index.d.ts +2 -0
- package/dist/service/apigatewayv2/index.d.ts.map +1 -1
- package/dist/service/apigatewayv2/index.js +1 -0
- package/dist/service/apigatewayv2/index.js.map +1 -1
- package/dist/service/apigatewayv2/serve/sim-api-gateway-v2-controller.d.ts +4 -1
- package/dist/service/apigatewayv2/serve/sim-api-gateway-v2-controller.d.ts.map +1 -1
- package/dist/service/apigatewayv2/serve/sim-api-gateway-v2-controller.js +11 -2
- package/dist/service/apigatewayv2/serve/sim-api-gateway-v2-controller.js.map +1 -1
- package/dist/service/apigatewayv2/serve/sim-api-gateway-v2-error-response.d.ts +8 -0
- package/dist/service/apigatewayv2/serve/sim-api-gateway-v2-error-response.d.ts.map +1 -1
- package/dist/service/apigatewayv2/serve/sim-api-gateway-v2-error-response.js +10 -0
- package/dist/service/apigatewayv2/serve/sim-api-gateway-v2-error-response.js.map +1 -1
- package/dist/service/aws/factory/sim-aws-account-service-cache.d.ts.map +1 -1
- package/dist/service/aws/factory/sim-aws-account-service-cache.js +5 -0
- package/dist/service/aws/factory/sim-aws-account-service-cache.js.map +1 -1
- package/dist/service/cloudformation/template/node/fn/join/sim-cfn-fn-join.d.ts +7 -0
- package/dist/service/cloudformation/template/node/fn/join/sim-cfn-fn-join.d.ts.map +1 -1
- package/dist/service/cloudformation/template/node/fn/join/sim-cfn-fn-join.js +9 -1
- package/dist/service/cloudformation/template/node/fn/join/sim-cfn-fn-join.js.map +1 -1
- package/dist/service/cloudfront/behaviour/sim-cloud-front-behavior.d.ts +5 -0
- package/dist/service/cloudfront/behaviour/sim-cloud-front-behavior.d.ts.map +1 -1
- package/dist/service/cloudfront/behaviour/sim-cloud-front-behavior.js.map +1 -1
- package/dist/service/cloudfront/cff/sim-cff-arn.d.ts +13 -0
- package/dist/service/cloudfront/cff/sim-cff-arn.d.ts.map +1 -0
- package/dist/service/cloudfront/cff/sim-cff-arn.js +18 -0
- package/dist/service/cloudfront/cff/sim-cff-arn.js.map +1 -0
- package/dist/service/cloudfront/command/create-distribution/create-distribution.command.d.ts +16 -0
- package/dist/service/cloudfront/command/create-distribution/create-distribution.command.d.ts.map +1 -1
- package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.d.ts +3 -0
- package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.d.ts.map +1 -1
- package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.js +11 -4
- package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.js.map +1 -1
- package/dist/service/cloudfront/command/create-distribution/sim-cf-distro-config-normalizer.d.ts.map +1 -1
- package/dist/service/cloudfront/command/create-distribution/sim-cf-distro-config-normalizer.js +1 -0
- package/dist/service/cloudfront/command/create-distribution/sim-cf-distro-config-normalizer.js.map +1 -1
- package/dist/service/cloudfront/command/update-distribution/update-distribution.handler.d.ts +3 -0
- package/dist/service/cloudfront/command/update-distribution/update-distribution.handler.d.ts.map +1 -1
- package/dist/service/cloudfront/command/update-distribution/update-distribution.handler.js +9 -2
- package/dist/service/cloudfront/command/update-distribution/update-distribution.handler.js.map +1 -1
- package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.d.ts +3 -0
- package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.d.ts.map +1 -1
- package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.js +6 -0
- package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.js.map +1 -1
- package/dist/service/cloudfront/controller/edge/sim-lambda-edge-applicator.d.ts +48 -0
- package/dist/service/cloudfront/controller/edge/sim-lambda-edge-applicator.d.ts.map +1 -0
- package/dist/service/cloudfront/controller/edge/sim-lambda-edge-applicator.js +66 -0
- package/dist/service/cloudfront/controller/edge/sim-lambda-edge-applicator.js.map +1 -0
- package/dist/service/cloudfront/controller/edge/sim-lambda-edge-distribution.d.ts +11 -0
- package/dist/service/cloudfront/controller/edge/sim-lambda-edge-distribution.d.ts.map +1 -0
- package/dist/service/cloudfront/controller/edge/sim-lambda-edge-distribution.js +14 -0
- package/dist/service/cloudfront/controller/edge/sim-lambda-edge-distribution.js.map +1 -0
- package/dist/service/cloudfront/controller/sim-cloudfront-request-pipeline.d.ts +5 -0
- package/dist/service/cloudfront/controller/sim-cloudfront-request-pipeline.d.ts.map +1 -1
- package/dist/service/cloudfront/controller/sim-cloudfront-request-pipeline.js +16 -1
- package/dist/service/cloudfront/controller/sim-cloudfront-request-pipeline.js.map +1 -1
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-properties.d.ts.map +1 -1
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-properties.js +2 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-properties.js.map +1 -1
- package/dist/service/cloudfront/distribution/sim-cf-distribution-configuration-state.d.ts +5 -2
- package/dist/service/cloudfront/distribution/sim-cf-distribution-configuration-state.d.ts.map +1 -1
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-body.d.ts +24 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-body.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-body.js +51 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-body.js.map +1 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-event-adapter.d.ts +41 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-event-adapter.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-event-adapter.js +78 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-event-adapter.js.map +1 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-headers.d.ts +20 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-headers.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-headers.js +55 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-headers.js.map +1 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-request-adapter.d.ts +30 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-request-adapter.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-request-adapter.js +90 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-request-adapter.js.map +1 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-response-adapter.d.ts +26 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-response-adapter.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-response-adapter.js +47 -0
- package/dist/service/cloudfront/edge/adapter/sim-lambda-edge-response-adapter.js.map +1 -0
- package/dist/service/cloudfront/edge/sim-aws-cf-edge-functions.d.ts +44 -0
- package/dist/service/cloudfront/edge/sim-aws-cf-edge-functions.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/sim-aws-cf-edge-functions.js +89 -0
- package/dist/service/cloudfront/edge/sim-aws-cf-edge-functions.js.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-auth-z.d.ts +7 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-auth-z.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-auth-z.js +27 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-auth-z.js.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-checks.d.ts +47 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-checks.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-checks.js +71 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-checks.js.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-validator.d.ts +36 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-validator.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-validator.js +79 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association-validator.js.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association.d.ts +23 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association.js +2 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-association.js.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-associations-configure.d.ts +14 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-associations-configure.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-associations-configure.js +36 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-associations-configure.js.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-function-arn.d.ts +18 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-function-arn.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-function-arn.js +47 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-function-arn.js.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-functions.d.ts +25 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-functions.d.ts.map +1 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-functions.js +2 -0
- package/dist/service/cloudfront/edge/sim-cf-edge-functions.js.map +1 -0
- package/dist/service/cloudfront/error/sim-cloudfront.error.d.ts +13 -0
- package/dist/service/cloudfront/error/sim-cloudfront.error.d.ts.map +1 -1
- package/dist/service/cloudfront/error/sim-cloudfront.error.js +15 -0
- package/dist/service/cloudfront/error/sim-cloudfront.error.js.map +1 -1
- package/dist/service/cloudfront/index.d.ts +1 -0
- package/dist/service/cloudfront/index.d.ts.map +1 -1
- package/dist/service/cloudfront/sim-cloudfront-commands.d.ts +10 -0
- package/dist/service/cloudfront/sim-cloudfront-commands.d.ts.map +1 -1
- package/dist/service/cloudfront/sim-cloudfront-commands.js +10 -1
- package/dist/service/cloudfront/sim-cloudfront-commands.js.map +1 -1
- package/dist/service/cloudfront/sim-cloudfront.d.ts.map +1 -1
- package/dist/service/cloudfront/sim-cloudfront.js +3 -8
- package/dist/service/cloudfront/sim-cloudfront.js.map +1 -1
- package/dist/service/cloudfront/typings/lambda-at-edge.namespace.d.ts +91 -0
- package/dist/service/cloudfront/typings/lambda-at-edge.namespace.d.ts.map +1 -0
- package/dist/service/cloudfront/typings/lambda-at-edge.namespace.js +2 -0
- package/dist/service/cloudfront/typings/lambda-at-edge.namespace.js.map +1 -0
- package/dist/service/lambda/function/environment/sim-lambda-environment.d.ts +22 -20
- package/dist/service/lambda/function/environment/sim-lambda-environment.d.ts.map +1 -1
- package/dist/service/lambda/function/environment/sim-lambda-environment.js +27 -29
- package/dist/service/lambda/function/environment/sim-lambda-environment.js.map +1 -1
- package/dist/service/lambda/function/environment/sim-lambda-host-backed-variables.d.ts +28 -0
- package/dist/service/lambda/function/environment/sim-lambda-host-backed-variables.d.ts.map +1 -0
- package/dist/service/lambda/function/environment/sim-lambda-host-backed-variables.js +49 -0
- package/dist/service/lambda/function/environment/sim-lambda-host-backed-variables.js.map +1 -0
- package/dist/service/lambda/function/environment/sim-lambda-runtime-variables.d.ts +18 -0
- package/dist/service/lambda/function/environment/sim-lambda-runtime-variables.d.ts.map +1 -0
- package/dist/service/lambda/function/environment/sim-lambda-runtime-variables.js +23 -0
- package/dist/service/lambda/function/environment/sim-lambda-runtime-variables.js.map +1 -0
- package/dist/util/process/sim-process-environment.d.ts +9 -0
- package/dist/util/process/sim-process-environment.d.ts.map +1 -1
- package/dist/util/process/sim-process-environment.js +17 -0
- package/dist/util/process/sim-process-environment.js.map +1 -1
- package/dist/util/throttle/sim-token-bucket.d.ts +32 -0
- package/dist/util/throttle/sim-token-bucket.d.ts.map +1 -0
- package/dist/util/throttle/sim-token-bucket.js +53 -0
- package/dist/util/throttle/sim-token-bucket.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { SimLambdaEdgeRequestAdapter } from "./sim-lambda-edge-request-adapter.js";
|
|
3
|
+
import { SimLambdaEdgeResponseAdapter } from "./sim-lambda-edge-response-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Converts between native Fetch API Request and Response objects and the
|
|
6
|
+
* Lambda@Edge event and result shapes.
|
|
7
|
+
*/
|
|
8
|
+
export class SimLambdaEdgeEventAdapter {
|
|
9
|
+
requestAdapter = new SimLambdaEdgeRequestAdapter();
|
|
10
|
+
responseAdapter = new SimLambdaEdgeResponseAdapter();
|
|
11
|
+
/**
|
|
12
|
+
* Build the event a viewer-request function is invoked with.
|
|
13
|
+
*/
|
|
14
|
+
async toRequestEvent(request, includeBody, distribution) {
|
|
15
|
+
return {
|
|
16
|
+
Records: [
|
|
17
|
+
{
|
|
18
|
+
cf: {
|
|
19
|
+
config: this.config(distribution, "viewer-request"),
|
|
20
|
+
request: await this.requestAdapter.toEdgeRequest(request, includeBody),
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build the event a viewer-response function is invoked with.
|
|
28
|
+
*
|
|
29
|
+
* The request travels with the response, and it never carries a body. Real
|
|
30
|
+
* CloudFront has already forwarded the request by this point, and
|
|
31
|
+
* `IncludeBody` applies to viewer-request and origin-request events only.
|
|
32
|
+
*/
|
|
33
|
+
async toResponseEvent(request, response, distribution) {
|
|
34
|
+
return {
|
|
35
|
+
Records: [
|
|
36
|
+
{
|
|
37
|
+
cf: {
|
|
38
|
+
config: this.config(distribution, "viewer-response"),
|
|
39
|
+
request: await this.requestAdapter.toEdgeRequest(request, false),
|
|
40
|
+
response: this.responseAdapter.toEdgeResponse(response),
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Read what a viewer-request handler answered with.
|
|
48
|
+
*
|
|
49
|
+
* A result carrying a status is a response the viewer gets. Anything else is
|
|
50
|
+
* the request carrying on to the origin.
|
|
51
|
+
*/
|
|
52
|
+
fromRequestResult(result, originalRequest) {
|
|
53
|
+
return isEdgeResponse(result)
|
|
54
|
+
? this.responseAdapter.fromEdgeResponse(result)
|
|
55
|
+
: this.requestAdapter.fromEdgeRequest(result, originalRequest);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Read what a viewer-response handler answered with.
|
|
59
|
+
*/
|
|
60
|
+
fromResponseResult(result, originalResponse) {
|
|
61
|
+
return this.responseAdapter.fromEdgeViewerResponse(result, originalResponse);
|
|
62
|
+
}
|
|
63
|
+
config(distribution, eventType) {
|
|
64
|
+
return {
|
|
65
|
+
distributionId: distribution.distributionId,
|
|
66
|
+
distributionDomainName: distribution.distributionDomainName,
|
|
67
|
+
eventType,
|
|
68
|
+
requestId: randomUUID(),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Whether a viewer-request handler answered with a response.
|
|
74
|
+
*/
|
|
75
|
+
function isEdgeResponse(result) {
|
|
76
|
+
return "status" in result;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=sim-lambda-edge-event-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-lambda-edge-event-adapter.js","sourceRoot":"","sources":["../../../../../src/service/cloudfront/edge/adapter/sim-lambda-edge-event-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAUrF;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IACnB,cAAc,GAAG,IAAI,2BAA2B,EAAE,CAAC;IACnD,eAAe,GAAG,IAAI,4BAA4B,EAAE,CAAC;IAEtE;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,OAAgB,EAChB,WAAoB,EACpB,YAA6C;QAE7C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,EAAE,EAAE;wBACF,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;wBACnD,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAC9C,OAAO,EACP,WAAW,CACZ;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,eAAe,CACnB,OAAgB,EAChB,QAAkB,EAClB,YAA6C;QAE7C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,EAAE,EAAE;wBACF,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC;wBACpD,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;wBAChE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC;qBACxD;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CACf,MAAkC,EAClC,eAAwB;QAExB,OAAO,cAAc,CAAC,MAAM,CAAC;YAC3B,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC/C,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,kBAAkB,CAChB,MAA6B,EAC7B,gBAA0B;QAE1B,OAAO,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAChD,MAAM,EACN,gBAAgB,CACjB,CAAC;IACJ,CAAC;IAEO,MAAM,CACZ,YAA6C,EAC7C,SAAiB;QAEjB,OAAO;YACL,cAAc,EAAE,YAAY,CAAC,cAAc;YAC3C,sBAAsB,EAAE,YAAY,CAAC,sBAAsB;YAC3D,SAAS;YACT,SAAS,EAAE,UAAU,EAAE;SACxB,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,MAAkC;IAElC,OAAO,QAAQ,IAAI,MAAM,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LambdaAtEdge } from "../../typings/lambda-at-edge.namespace.js";
|
|
2
|
+
/**
|
|
3
|
+
* Convert Fetch API headers into the Lambda@Edge header shape.
|
|
4
|
+
*
|
|
5
|
+
* Every header is keyed by its lowercase name and holds a list, because
|
|
6
|
+
* CloudFront presents repeated headers as repeated entries rather than as one
|
|
7
|
+
* joined value. `Headers` already lowercases its keys, and it joins repeated
|
|
8
|
+
* values with a comma, so a `set-cookie` is split back out through
|
|
9
|
+
* `getSetCookie` and everything else arrives as the single entry it was.
|
|
10
|
+
*/
|
|
11
|
+
export declare function toEdgeHeaders(headers: Headers): LambdaAtEdge.Headers;
|
|
12
|
+
/**
|
|
13
|
+
* Convert Lambda@Edge headers back into Fetch API headers.
|
|
14
|
+
*
|
|
15
|
+
* A handler that left the header list alone hands back what it was given, and
|
|
16
|
+
* one that added an entry hands back a list with the entry on the end. Both
|
|
17
|
+
* are appended in order, so a repeated header survives the round trip.
|
|
18
|
+
*/
|
|
19
|
+
export declare function fromEdgeHeaders(edgeHeaders: LambdaAtEdge.Headers | undefined): Headers;
|
|
20
|
+
//# sourceMappingURL=sim-lambda-edge-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-lambda-edge-headers.d.ts","sourceRoot":"","sources":["../../../../../src/service/cloudfront/edge/adapter/sim-lambda-edge-headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAE9E;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC,OAAO,CAmBpE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,YAAY,CAAC,OAAO,GAAG,SAAS,GAC5C,OAAO,CAWT"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert Fetch API headers into the Lambda@Edge header shape.
|
|
3
|
+
*
|
|
4
|
+
* Every header is keyed by its lowercase name and holds a list, because
|
|
5
|
+
* CloudFront presents repeated headers as repeated entries rather than as one
|
|
6
|
+
* joined value. `Headers` already lowercases its keys, and it joins repeated
|
|
7
|
+
* values with a comma, so a `set-cookie` is split back out through
|
|
8
|
+
* `getSetCookie` and everything else arrives as the single entry it was.
|
|
9
|
+
*/
|
|
10
|
+
export function toEdgeHeaders(headers) {
|
|
11
|
+
const edgeHeaders = new Map();
|
|
12
|
+
for (const [name, value] of headers.entries()) {
|
|
13
|
+
if (name !== "set-cookie") {
|
|
14
|
+
edgeHeaders.set(name, [{ key: headerKey(name), value }]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const setCookies = headers.getSetCookie();
|
|
18
|
+
if (setCookies.length > 0) {
|
|
19
|
+
edgeHeaders.set("set-cookie", setCookies.map((value) => ({ key: "Set-Cookie", value })));
|
|
20
|
+
}
|
|
21
|
+
return Object.fromEntries(edgeHeaders);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Convert Lambda@Edge headers back into Fetch API headers.
|
|
25
|
+
*
|
|
26
|
+
* A handler that left the header list alone hands back what it was given, and
|
|
27
|
+
* one that added an entry hands back a list with the entry on the end. Both
|
|
28
|
+
* are appended in order, so a repeated header survives the round trip.
|
|
29
|
+
*/
|
|
30
|
+
export function fromEdgeHeaders(edgeHeaders) {
|
|
31
|
+
const headers = new Headers();
|
|
32
|
+
const named = Object.entries(edgeHeaders ?? {});
|
|
33
|
+
for (const [name, values] of named) {
|
|
34
|
+
for (const header of values) {
|
|
35
|
+
headers.append(header.key ?? name, header.value);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return headers;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The casing CloudFront reports a header name in.
|
|
42
|
+
*
|
|
43
|
+
* Real CloudFront reports the casing the viewer or the origin sent, which
|
|
44
|
+
* `Headers` has already lowercased by the time anything here sees it. The
|
|
45
|
+
* conventional title casing is reconstructed so a handler reading `key` for
|
|
46
|
+
* display gets `User-Agent` rather than `user-agent`. Nothing reads `key` to
|
|
47
|
+
* decide anything, and `fromEdgeHeaders` matches on the lowercase name.
|
|
48
|
+
*/
|
|
49
|
+
function headerKey(name) {
|
|
50
|
+
return name
|
|
51
|
+
.split("-")
|
|
52
|
+
.map((part) => part === "" ? part : part[0]?.toUpperCase() + part.slice(1))
|
|
53
|
+
.join("-");
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=sim-lambda-edge-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-lambda-edge-headers.js","sourceRoot":"","sources":["../../../../../src/service/cloudfront/edge/adapter/sim-lambda-edge-headers.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiC,CAAC;IAE7D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAE1C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,WAAW,CAAC,GAAG,CACb,YAAY,EACZ,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,WAA6C;IAE7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAEhD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACnC,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5D;SACA,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { LambdaAtEdge } from "../../typings/lambda-at-edge.namespace.js";
|
|
2
|
+
/**
|
|
3
|
+
* Converts a Fetch API Request into the Lambda@Edge request shape, and a
|
|
4
|
+
* handler's request back again. `SimLambdaEdgeResponseAdapter` does the same
|
|
5
|
+
* for a response.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SimLambdaEdgeRequestAdapter {
|
|
8
|
+
/**
|
|
9
|
+
* Convert a Node fetch Request into the Lambda@Edge request shape.
|
|
10
|
+
*
|
|
11
|
+
* The body is read only when the association asked for it, because
|
|
12
|
+
* CloudFront sends one only where `IncludeBody` is set and reading it here
|
|
13
|
+
* would otherwise consume a stream nothing wants.
|
|
14
|
+
*/
|
|
15
|
+
toEdgeRequest(request: Request, includeBody: boolean): Promise<LambdaAtEdge.Request>;
|
|
16
|
+
/**
|
|
17
|
+
* Convert a handler's request back into a Node fetch Request.
|
|
18
|
+
*/
|
|
19
|
+
fromEdgeRequest(edgeRequest: LambdaAtEdge.Request, originalRequest: Request): Request;
|
|
20
|
+
/**
|
|
21
|
+
* Request headers as the edge function sees them, with the host CloudFront
|
|
22
|
+
* presents.
|
|
23
|
+
*
|
|
24
|
+
* A request served on localhost arrives with the Yulin-local host, and the
|
|
25
|
+
* function is told the Distribution domain name or alternate domain name the
|
|
26
|
+
* viewer used, as it would be on AWS.
|
|
27
|
+
*/
|
|
28
|
+
private viewerEdgeHeaders;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=sim-lambda-edge-request-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-lambda-edge-request-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/service/cloudfront/edge/adapter/sim-lambda-edge-request-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAY9E;;;;GAIG;AACH,qBAAa,2BAA2B;IACtC;;;;;;OAMG;IACG,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAW/B;IAED;;OAEG;IACH,eAAe,CACb,WAAW,EAAE,YAAY,CAAC,OAAO,EACjC,eAAe,EAAE,OAAO,GACvB,OAAO,CAyBT;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;CAM1B"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { simAwsRequestHostname } from "../../../../serve/http/url/sim-aws-request-hostname.js";
|
|
2
|
+
import { edgeRequestBody, replacementBody } from "./sim-lambda-edge-body.js";
|
|
3
|
+
import { fromEdgeHeaders, toEdgeHeaders } from "./sim-lambda-edge-headers.js";
|
|
4
|
+
/**
|
|
5
|
+
* The client IP a simulated edge function is told the request came from.
|
|
6
|
+
*
|
|
7
|
+
* Everything reaching the simulator arrives in process, so there is no viewer
|
|
8
|
+
* address to report. The CloudFront Functions adapter reports the same one.
|
|
9
|
+
*/
|
|
10
|
+
const simEdgeClientIp = "127.0.0.1";
|
|
11
|
+
/**
|
|
12
|
+
* Converts a Fetch API Request into the Lambda@Edge request shape, and a
|
|
13
|
+
* handler's request back again. `SimLambdaEdgeResponseAdapter` does the same
|
|
14
|
+
* for a response.
|
|
15
|
+
*/
|
|
16
|
+
export class SimLambdaEdgeRequestAdapter {
|
|
17
|
+
/**
|
|
18
|
+
* Convert a Node fetch Request into the Lambda@Edge request shape.
|
|
19
|
+
*
|
|
20
|
+
* The body is read only when the association asked for it, because
|
|
21
|
+
* CloudFront sends one only where `IncludeBody` is set and reading it here
|
|
22
|
+
* would otherwise consume a stream nothing wants.
|
|
23
|
+
*/
|
|
24
|
+
async toEdgeRequest(request, includeBody) {
|
|
25
|
+
const url = new URL(request.url);
|
|
26
|
+
return {
|
|
27
|
+
clientIp: simEdgeClientIp,
|
|
28
|
+
method: request.method,
|
|
29
|
+
uri: url.pathname,
|
|
30
|
+
querystring: url.search.replace(/^\?/u, ""),
|
|
31
|
+
headers: this.viewerEdgeHeaders(request),
|
|
32
|
+
...(includeBody && { body: await edgeRequestBody(request) }),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Convert a handler's request back into a Node fetch Request.
|
|
37
|
+
*/
|
|
38
|
+
fromEdgeRequest(edgeRequest, originalRequest) {
|
|
39
|
+
const url = new URL(originalRequest.url);
|
|
40
|
+
url.pathname = edgeRequest.uri;
|
|
41
|
+
url.search = edgeRequest.querystring;
|
|
42
|
+
const headers = fromEdgeHeaders(edgeRequest.headers);
|
|
43
|
+
restoreViewerHost(headers, originalRequest);
|
|
44
|
+
// A replaced body is a different length from the one the viewer sent, and
|
|
45
|
+
// `Content-Length` is read-only to the handler, so the header it hands
|
|
46
|
+
// back still describes the old body. Real CloudFront works the new length
|
|
47
|
+
// out for itself, and dropping the header leaves the transport to do the
|
|
48
|
+
// same.
|
|
49
|
+
if (edgeRequest.body?.action === "replace") {
|
|
50
|
+
headers.delete("content-length");
|
|
51
|
+
}
|
|
52
|
+
return new Request(url, {
|
|
53
|
+
method: edgeRequest.method,
|
|
54
|
+
headers,
|
|
55
|
+
body: replacementBody(edgeRequest, originalRequest),
|
|
56
|
+
duplex: "half",
|
|
57
|
+
redirect: originalRequest.redirect,
|
|
58
|
+
signal: originalRequest.signal,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Request headers as the edge function sees them, with the host CloudFront
|
|
63
|
+
* presents.
|
|
64
|
+
*
|
|
65
|
+
* A request served on localhost arrives with the Yulin-local host, and the
|
|
66
|
+
* function is told the Distribution domain name or alternate domain name the
|
|
67
|
+
* viewer used, as it would be on AWS.
|
|
68
|
+
*/
|
|
69
|
+
viewerEdgeHeaders(request) {
|
|
70
|
+
const headers = toEdgeHeaders(request.headers);
|
|
71
|
+
headers["host"] = [{ key: "Host", value: simAwsRequestHostname(request) }];
|
|
72
|
+
return headers;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Restore the host the request arrived with.
|
|
77
|
+
*
|
|
78
|
+
* `Host` is read-only in a viewer-request event, so a host a handler wrote is
|
|
79
|
+
* discarded. That also keeps the Yulin-local host on the request continuing to
|
|
80
|
+
* the origin, which is the name the rest of the simulation resolves.
|
|
81
|
+
*/
|
|
82
|
+
function restoreViewerHost(headers, originalRequest) {
|
|
83
|
+
const viewerHost = originalRequest.headers.get("host");
|
|
84
|
+
if (viewerHost === null) {
|
|
85
|
+
headers.delete("host");
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
headers.set("host", viewerHost);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=sim-lambda-edge-request-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-lambda-edge-request-adapter.js","sourceRoot":"","sources":["../../../../../src/service/cloudfront/edge/adapter/sim-lambda-edge-request-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAE/F,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE9E;;;;;GAKG;AACH,MAAM,eAAe,GAAG,WAAW,CAAC;AAEpC;;;;GAIG;AACH,MAAM,OAAO,2BAA2B;IACtC;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CACjB,OAAgB,EAChB,WAAoB;QAEpB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEjC,OAAO;YACL,QAAQ,EAAE,eAAe;YACzB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,GAAG,CAAC,QAAQ;YACjB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACxC,GAAG,CAAC,WAAW,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;SAC7D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe,CACb,WAAiC,EACjC,eAAwB;QAExB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACzC,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC;QAC/B,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC;QAErC,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrD,iBAAiB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAE5C,0EAA0E;QAC1E,uEAAuE;QACvE,0EAA0E;QAC1E,yEAAyE;QACzE,QAAQ;QACR,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE;YACtB,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,OAAO;YACP,IAAI,EAAE,eAAe,CAAC,WAAW,EAAE,eAAe,CAAC;YACnD,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,eAAe,CAAC,QAAQ;YAClC,MAAM,EAAE,eAAe,CAAC,MAAM;SAC/B,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACK,iBAAiB,CAAC,OAAgB;QACxC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE3E,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,OAAgB,EAAE,eAAwB;IACnE,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEvD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LambdaAtEdge } from "../../typings/lambda-at-edge.namespace.js";
|
|
2
|
+
/**
|
|
3
|
+
* Converts between Fetch API Response objects and the Lambda@Edge response
|
|
4
|
+
* shape.
|
|
5
|
+
*/
|
|
6
|
+
export declare class SimLambdaEdgeResponseAdapter {
|
|
7
|
+
/**
|
|
8
|
+
* Convert a Node fetch Response into the Lambda@Edge response shape.
|
|
9
|
+
*/
|
|
10
|
+
toEdgeResponse(response: Response): LambdaAtEdge.Response;
|
|
11
|
+
/**
|
|
12
|
+
* Convert a handler's generated response into a Node fetch Response.
|
|
13
|
+
*/
|
|
14
|
+
fromEdgeResponse(edgeResponse: LambdaAtEdge.Response): Response;
|
|
15
|
+
/**
|
|
16
|
+
* Convert a viewer-response handler's result into a Node fetch Response,
|
|
17
|
+
* keeping the origin's body.
|
|
18
|
+
*
|
|
19
|
+
* A viewer-response event carries no body, and a handler that returns
|
|
20
|
+
* `event.Records[0].cf.response` returns none either. Treating that as an
|
|
21
|
+
* empty body would drop the page while leaving the origin's content-length
|
|
22
|
+
* header describing it. A handler that did write a body replaces it.
|
|
23
|
+
*/
|
|
24
|
+
fromEdgeViewerResponse(edgeResponse: LambdaAtEdge.Response, originalResponse: Response): Response;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=sim-lambda-edge-response-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-lambda-edge-response-adapter.d.ts","sourceRoot":"","sources":["../../../../../src/service/cloudfront/edge/adapter/sim-lambda-edge-response-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAI9E;;;GAGG;AACH,qBAAa,4BAA4B;IACvC;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAMxD;IAED;;OAEG;IACH,gBAAgB,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAM9D;IAED;;;;;;;;OAQG;IACH,sBAAsB,CACpB,YAAY,EAAE,YAAY,CAAC,QAAQ,EACnC,gBAAgB,EAAE,QAAQ,GACzB,QAAQ,CAWV;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { edgeResponseBody } from "./sim-lambda-edge-body.js";
|
|
2
|
+
import { fromEdgeHeaders, toEdgeHeaders } from "./sim-lambda-edge-headers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Converts between Fetch API Response objects and the Lambda@Edge response
|
|
5
|
+
* shape.
|
|
6
|
+
*/
|
|
7
|
+
export class SimLambdaEdgeResponseAdapter {
|
|
8
|
+
/**
|
|
9
|
+
* Convert a Node fetch Response into the Lambda@Edge response shape.
|
|
10
|
+
*/
|
|
11
|
+
toEdgeResponse(response) {
|
|
12
|
+
return {
|
|
13
|
+
status: String(response.status),
|
|
14
|
+
statusDescription: response.statusText,
|
|
15
|
+
headers: toEdgeHeaders(response.headers),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Convert a handler's generated response into a Node fetch Response.
|
|
20
|
+
*/
|
|
21
|
+
fromEdgeResponse(edgeResponse) {
|
|
22
|
+
return new Response(edgeResponseBody(edgeResponse), {
|
|
23
|
+
status: Number(edgeResponse.status),
|
|
24
|
+
statusText: edgeResponse.statusDescription ?? "",
|
|
25
|
+
headers: fromEdgeHeaders(edgeResponse.headers),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Convert a viewer-response handler's result into a Node fetch Response,
|
|
30
|
+
* keeping the origin's body.
|
|
31
|
+
*
|
|
32
|
+
* A viewer-response event carries no body, and a handler that returns
|
|
33
|
+
* `event.Records[0].cf.response` returns none either. Treating that as an
|
|
34
|
+
* empty body would drop the page while leaving the origin's content-length
|
|
35
|
+
* header describing it. A handler that did write a body replaces it.
|
|
36
|
+
*/
|
|
37
|
+
fromEdgeViewerResponse(edgeResponse, originalResponse) {
|
|
38
|
+
return new Response(edgeResponse.body === undefined
|
|
39
|
+
? originalResponse.body
|
|
40
|
+
: edgeResponseBody(edgeResponse), {
|
|
41
|
+
status: Number(edgeResponse.status),
|
|
42
|
+
statusText: edgeResponse.statusDescription ?? "",
|
|
43
|
+
headers: fromEdgeHeaders(edgeResponse.headers),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=sim-lambda-edge-response-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-lambda-edge-response-adapter.js","sourceRoot":"","sources":["../../../../../src/service/cloudfront/edge/adapter/sim-lambda-edge-response-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE9E;;;GAGG;AACH,MAAM,OAAO,4BAA4B;IACvC;;OAEG;IACH,cAAc,CAAC,QAAkB;QAC/B,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/B,iBAAiB,EAAE,QAAQ,CAAC,UAAU;YACtC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;SACzC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,YAAmC;QAClD,OAAO,IAAI,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;YAClD,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YACnC,UAAU,EAAE,YAAY,CAAC,iBAAiB,IAAI,EAAE;YAChD,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,sBAAsB,CACpB,YAAmC,EACnC,gBAA0B;QAE1B,OAAO,IAAI,QAAQ,CACjB,YAAY,CAAC,IAAI,KAAK,SAAS;YAC7B,CAAC,CAAC,gBAAgB,CAAC,IAAI;YACvB,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAClC;YACE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YACnC,UAAU,EAAE,YAAY,CAAC,iBAAiB,IAAI,EAAE;YAChD,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC;SAC/C,CACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { SimAws } from "../../aws/sim-aws.js";
|
|
2
|
+
import type { SimCfEdgeFunctions } from "./sim-cf-edge-functions.js";
|
|
3
|
+
/**
|
|
4
|
+
* The service principal Lambda@Edge runs a function's execution role as.
|
|
5
|
+
*
|
|
6
|
+
* A role for an ordinary function trusts `lambda.amazonaws.com` alone, and
|
|
7
|
+
* CloudFront refuses to associate that function. Adding this principal to the
|
|
8
|
+
* trust policy is the step people miss.
|
|
9
|
+
*/
|
|
10
|
+
export declare const simLambdaEdgeServicePrincipal = "edgelambda.amazonaws.com";
|
|
11
|
+
/**
|
|
12
|
+
* The simulated Lambda functions of one simulated AWS instance, as Lambda@Edge
|
|
13
|
+
* targets.
|
|
14
|
+
*/
|
|
15
|
+
export declare class SimAwsCfEdgeFunctions implements SimCfEdgeFunctions {
|
|
16
|
+
private readonly simAws;
|
|
17
|
+
constructor(simAws: SimAws);
|
|
18
|
+
/**
|
|
19
|
+
* Check the function is there and that Lambda@Edge could run it.
|
|
20
|
+
*/
|
|
21
|
+
assertAssociable(functionArn: string): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Run the function for one edge event.
|
|
24
|
+
*
|
|
25
|
+
* The function is invoked directly rather than through an Invoke command,
|
|
26
|
+
* because real CloudFront runs the replica as the service rather than as
|
|
27
|
+
* whoever made the request, and because a handler that throws has to reach
|
|
28
|
+
* the request pipeline as a failure rather than as an invocation result.
|
|
29
|
+
*/
|
|
30
|
+
invoke(functionArn: string, event: object): Promise<unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* What this ARN names, refusing an ARN that names nothing here.
|
|
33
|
+
*/
|
|
34
|
+
private target;
|
|
35
|
+
/**
|
|
36
|
+
* Refuse a function whose execution role Lambda@Edge could not assume.
|
|
37
|
+
*
|
|
38
|
+
* Whether a role can be assumed is IAM's own rule, so the decision is made
|
|
39
|
+
* by the shared service-role helper and CloudFront only says what it means
|
|
40
|
+
* here.
|
|
41
|
+
*/
|
|
42
|
+
private assertExecutionRoleTrust;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=sim-aws-cf-edge-functions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-aws-cf-edge-functions.d.ts","sourceRoot":"","sources":["../../../../src/service/cloudfront/edge/sim-aws-cf-edge-functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AASnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,6BAA6B,CAAC;AAOxE;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,kBAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,MAAM,EAAI;IAE/C;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;IAED;;;;;;;OAOG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEjE;IAED;;OAEG;IACH,OAAO,CAAC,MAAM;IAiBd;;;;;;OAMG;YACW,wBAAwB;CAcvC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { assumeSimServiceRole, simServiceRoleTarget, } from "../../sts/service-role/sim-service-role.js";
|
|
2
|
+
import { SimCloudFrontInvalidLambdaFunctionAssociation } from "../error/sim-cloudfront.error.js";
|
|
3
|
+
import { edgeFunctionArnParts } from "./sim-cf-edge-function-arn.js";
|
|
4
|
+
/**
|
|
5
|
+
* The service principal Lambda@Edge runs a function's execution role as.
|
|
6
|
+
*
|
|
7
|
+
* A role for an ordinary function trusts `lambda.amazonaws.com` alone, and
|
|
8
|
+
* CloudFront refuses to associate that function. Adding this principal to the
|
|
9
|
+
* trust policy is the step people miss.
|
|
10
|
+
*/
|
|
11
|
+
export const simLambdaEdgeServicePrincipal = "edgelambda.amazonaws.com";
|
|
12
|
+
/**
|
|
13
|
+
* The session name AWS gives a role Lambda@Edge assumes.
|
|
14
|
+
*/
|
|
15
|
+
const sessionName = "LambdaEdge";
|
|
16
|
+
/**
|
|
17
|
+
* The simulated Lambda functions of one simulated AWS instance, as Lambda@Edge
|
|
18
|
+
* targets.
|
|
19
|
+
*/
|
|
20
|
+
export class SimAwsCfEdgeFunctions {
|
|
21
|
+
simAws;
|
|
22
|
+
constructor(simAws) {
|
|
23
|
+
this.simAws = simAws;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check the function is there and that Lambda@Edge could run it.
|
|
27
|
+
*/
|
|
28
|
+
async assertAssociable(functionArn) {
|
|
29
|
+
await this.assertExecutionRoleTrust(this.target(functionArn), functionArn);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Run the function for one edge event.
|
|
33
|
+
*
|
|
34
|
+
* The function is invoked directly rather than through an Invoke command,
|
|
35
|
+
* because real CloudFront runs the replica as the service rather than as
|
|
36
|
+
* whoever made the request, and because a handler that throws has to reach
|
|
37
|
+
* the request pipeline as a failure rather than as an invocation result.
|
|
38
|
+
*/
|
|
39
|
+
async invoke(functionArn, event) {
|
|
40
|
+
return await this.target(functionArn).simFunction.invoke(event);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* What this ARN names, refusing an ARN that names nothing here.
|
|
44
|
+
*/
|
|
45
|
+
target(functionArn) {
|
|
46
|
+
const arn = edgeFunctionArnParts(functionArn);
|
|
47
|
+
const found = this.simAws
|
|
48
|
+
.accountRegionScope(arn.accountId, arn.regionName)
|
|
49
|
+
.lambda()
|
|
50
|
+
.getSimFunctionTarget(arn.functionName, arn.qualifier);
|
|
51
|
+
if (found === undefined) {
|
|
52
|
+
throw new SimCloudFrontInvalidLambdaFunctionAssociation(`Sim CloudFront LambdaFunctionARN ${functionArn} names no simulated ` +
|
|
53
|
+
`Lambda function version`);
|
|
54
|
+
}
|
|
55
|
+
return found;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Refuse a function whose execution role Lambda@Edge could not assume.
|
|
59
|
+
*
|
|
60
|
+
* Whether a role can be assumed is IAM's own rule, so the decision is made
|
|
61
|
+
* by the shared service-role helper and CloudFront only says what it means
|
|
62
|
+
* here.
|
|
63
|
+
*/
|
|
64
|
+
async assertExecutionRoleTrust(target, functionArn) {
|
|
65
|
+
const { accountId, regionName } = target.simFunction.accountRegionScope;
|
|
66
|
+
await assumeSimServiceRole({
|
|
67
|
+
target: simServiceRoleTarget(target.simFunction.roleArn),
|
|
68
|
+
servicePrincipal: simLambdaEdgeServicePrincipal,
|
|
69
|
+
sessionName,
|
|
70
|
+
iam: this.simAws.accountRegionScope(accountId, regionName).iam(),
|
|
71
|
+
refusals: executionRoleRefusals(functionArn),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* What CloudFront says when a Lambda@Edge execution role is unusable.
|
|
77
|
+
*/
|
|
78
|
+
function executionRoleRefusals(functionArn) {
|
|
79
|
+
return {
|
|
80
|
+
missingRole: (target) => new SimCloudFrontInvalidLambdaFunctionAssociation(`Sim CloudFront Lambda@Edge function ${functionArn} has execution ` +
|
|
81
|
+
`role ${target.roleArn}, which is not a simulated IAM role`),
|
|
82
|
+
untrustedRole: (target, servicePrincipal) => new SimCloudFrontInvalidLambdaFunctionAssociation(`The trust policy of ${target.roleArn} does not allow ` +
|
|
83
|
+
`${servicePrincipal} to assume it, so Lambda@Edge could not run ` +
|
|
84
|
+
`${functionArn}. A Lambda@Edge execution role trusts both ` +
|
|
85
|
+
`lambda.amazonaws.com and ${servicePrincipal}. Add it to the ` +
|
|
86
|
+
`role's AssumeRolePolicyDocument.`),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=sim-aws-cf-edge-functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-aws-cf-edge-functions.js","sourceRoot":"","sources":["../../../../src/service/cloudfront/edge/sim-aws-cf-edge-functions.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EAEpB,oBAAoB,GACrB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,6CAA6C,EAAE,MAAM,kCAAkC,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,0BAA0B,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IACH,MAAM;IAAnC,YAA6B,MAAc;sBAAd,MAAM;IAAW,CAAC;IAE/C;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QACxC,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,CAAC,WAAmB,EAAE,KAAa;QAC7C,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,WAAmB;QAChC,MAAM,GAAG,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;aACtB,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC;aACjD,MAAM,EAAE;aACR,oBAAoB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,6CAA6C,CACrD,oCAAoC,WAAW,sBAAsB;gBACnE,yBAAyB,CAC5B,CAAC;QACJ,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,wBAAwB,CACpC,MAA+B,EAC/B,WAAmB;QAEnB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC;QAExE,MAAM,oBAAoB,CAAC;YACzB,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;YACxD,gBAAgB,EAAE,6BAA6B;YAC/C,WAAW;YACX,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,GAAG,EAAE;YAChE,QAAQ,EAAE,qBAAqB,CAAC,WAAW,CAAC;SAC7C,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,WAAmB;IAChD,OAAO;QACL,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CACtB,IAAI,6CAA6C,CAC/C,uCAAuC,WAAW,iBAAiB;YACjE,QAAQ,MAAM,CAAC,OAAO,qCAAqC,CAC9D;QACH,aAAa,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,CAC1C,IAAI,6CAA6C,CAC/C,uBAAuB,MAAM,CAAC,OAAO,kBAAkB;YACrD,GAAG,gBAAgB,8CAA8C;YACjE,GAAG,WAAW,6CAA6C;YAC3D,4BAA4B,gBAAgB,kBAAkB;YAC9D,kCAAkC,CACrC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SimAwsCaller } from "../../aws/caller/sim-aws-caller.js";
|
|
2
|
+
import type { SimIamInterServiceAuthZ } from "../../iam/authorize/sim-iam-inter-service-auth-z.js";
|
|
3
|
+
/**
|
|
4
|
+
* Check the caller may put this function version in front of a Distribution.
|
|
5
|
+
*/
|
|
6
|
+
export declare function authorizeEdgeAssociation(iam: SimIamInterServiceAuthZ, functionArn: string, caller?: SimAwsCaller): void;
|
|
7
|
+
//# sourceMappingURL=sim-cf-edge-association-auth-z.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cf-edge-association-auth-z.d.ts","sourceRoot":"","sources":["../../../../src/service/cloudfront/edge/sim-cf-edge-association-auth-z.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAcnG;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,uBAAuB,EAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,YAAY,GACpB,IAAI,CAYN"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { SimIamAccessDenied } from "../../iam/error/sim-iam.error.js";
|
|
2
|
+
/**
|
|
3
|
+
* What a caller needs on the function version to put it in front of a
|
|
4
|
+
* Distribution.
|
|
5
|
+
*
|
|
6
|
+
* `GetFunction` is how CloudFront reads the code and configuration, and
|
|
7
|
+
* `EnableReplication` is what lets the replication service copy it out to the
|
|
8
|
+
* edge. A policy written the way the AWS docs write it grants
|
|
9
|
+
* `lambda:EnableReplication*`, which matches this.
|
|
10
|
+
*/
|
|
11
|
+
const associationActions = ["lambda:GetFunction", "lambda:EnableReplication"];
|
|
12
|
+
/**
|
|
13
|
+
* Check the caller may put this function version in front of a Distribution.
|
|
14
|
+
*/
|
|
15
|
+
export function authorizeEdgeAssociation(iam, functionArn, caller) {
|
|
16
|
+
for (const action of associationActions) {
|
|
17
|
+
const decision = iam.authorize({ action, resource: functionArn, caller });
|
|
18
|
+
if (decision.isDenied) {
|
|
19
|
+
throw new SimIamAccessDenied({
|
|
20
|
+
principal: decision.caller.principal,
|
|
21
|
+
action,
|
|
22
|
+
resource: functionArn,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=sim-cf-edge-association-auth-z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cf-edge-association-auth-z.js","sourceRoot":"","sources":["../../../../src/service/cloudfront/edge/sim-cf-edge-association-auth-z.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE;;;;;;;;GAQG;AACH,MAAM,kBAAkB,GAAG,CAAC,oBAAoB,EAAE,0BAA0B,CAAC,CAAC;AAE9E;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,GAA4B,EAC5B,WAAmB,EACnB,MAAqB;IAErB,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QAE1E,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,kBAAkB,CAAC;gBAC3B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;gBACpC,MAAM;gBACN,QAAQ,EAAE,WAAW;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { SimCloudFrontCacheBehaviorConfig, SimCloudFrontDefaultCacheBehaviorConfig } from "../command/create-distribution/create-distribution.command.js";
|
|
2
|
+
/**
|
|
3
|
+
* The checks a Lambda@Edge association needs that read the Behavior config
|
|
4
|
+
* alone, held apart from the validator that also reaches simulated Lambda and
|
|
5
|
+
* simulated IAM.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* The event types this simulation runs a Lambda@Edge function at.
|
|
9
|
+
*/
|
|
10
|
+
export type SimulatedEdgeEventType = "viewer-request" | "viewer-response";
|
|
11
|
+
type BehaviorConfig = SimCloudFrontDefaultCacheBehaviorConfig | SimCloudFrontCacheBehaviorConfig;
|
|
12
|
+
/**
|
|
13
|
+
* Refuse an event type this simulation has no hook for.
|
|
14
|
+
*
|
|
15
|
+
* CloudFront runs a Lambda@Edge function at all four events, and this runs one
|
|
16
|
+
* at the two viewer events. An origin association is told so here rather than
|
|
17
|
+
* being configured into a Behavior that would never run it.
|
|
18
|
+
*/
|
|
19
|
+
export declare function assertSimulatedEventType(eventType: string | undefined): asserts eventType is SimulatedEdgeEventType;
|
|
20
|
+
/**
|
|
21
|
+
* Refuse a Behavior that runs both kinds of edge function at the viewer.
|
|
22
|
+
*
|
|
23
|
+
* CloudFront takes one function per event type, and it takes CloudFront
|
|
24
|
+
* Functions and Lambda@Edge together only where the Lambda@Edge function is on
|
|
25
|
+
* an origin event. A viewer-request CloudFront Function alongside a
|
|
26
|
+
* viewer-response Lambda@Edge function is refused too, which is the part of
|
|
27
|
+
* the rule that surprises people.
|
|
28
|
+
*/
|
|
29
|
+
export declare function assertNoViewerFunctionMix(behavior: BehaviorConfig): void;
|
|
30
|
+
/**
|
|
31
|
+
* Refuse a Behavior associating two functions with one event type.
|
|
32
|
+
*
|
|
33
|
+
* CloudFront takes one edge function per event type. Two entries naming the
|
|
34
|
+
* same one would otherwise be configured last-wins, leaving a Distribution
|
|
35
|
+
* running a function the template did not put first.
|
|
36
|
+
*/
|
|
37
|
+
export declare function assertOneFunctionPerEvent(seen: Set<string>, eventType: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Refuse an association with no function to run.
|
|
40
|
+
*
|
|
41
|
+
* `LambdaFunctionARN` is required on a real association. Left out, it has to
|
|
42
|
+
* be refused here, because the Behavior configurator reads it well after a
|
|
43
|
+
* Distribution ID has been allocated and the Distribution built.
|
|
44
|
+
*/
|
|
45
|
+
export declare function assertAssociatedFunctionArn(functionArn: string | undefined, eventType: string): asserts functionArn is string;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=sim-cf-edge-association-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cf-edge-association-checks.d.ts","sourceRoot":"","sources":["../../../../src/service/cloudfront/edge/sim-cf-edge-association-checks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gCAAgC,EAChC,uCAAuC,EACxC,MAAM,+DAA+D,CAAC;AAGvE;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAE1E,KAAK,cAAc,GACf,uCAAuC,GACvC,gCAAgC,CAAC;AAErC;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,SAAS,IAAI,sBAAsB,CAU7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAmBxE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAWN;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,IAAI,MAAM,CAS/B"}
|