@kensio/yulin 1.20.17 → 1.21.0
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/service/athena/engine/sim-athena-comparison-shims.d.ts +13 -0
- package/dist/service/athena/engine/sim-athena-comparison-shims.js +68 -0
- package/dist/service/athena/engine/sim-athena-shims.js +2 -0
- package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-cfn-value-adapter.js +8 -0
- package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-orp-cfn.d.ts +24 -0
- package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-orp-cfn.js +31 -0
- package/dist/service/cloudfront/behaviour/sim-cloud-front-behavior.d.ts +12 -1
- package/dist/service/cloudfront/cache/sim-cf-accept-encoding.d.ts +11 -0
- package/dist/service/cloudfront/cache/sim-cf-accept-encoding.js +27 -0
- package/dist/service/cloudfront/cache/sim-cf-cache-control.d.ts +28 -0
- package/dist/service/cloudfront/cache/sim-cf-cache-control.js +49 -0
- package/dist/service/cloudfront/cache/sim-cf-cache-entry-key-path.d.ts +11 -0
- package/dist/service/cloudfront/cache/sim-cf-cache-entry-key-path.js +22 -0
- package/dist/service/cloudfront/cache/sim-cf-cache-entry-key.d.ts +32 -0
- package/dist/service/cloudfront/cache/sim-cf-cache-entry-key.js +112 -0
- package/dist/service/cloudfront/cache/sim-cf-cache-status.d.ts +27 -0
- package/dist/service/cloudfront/cache/sim-cf-cache-status.js +53 -0
- package/dist/service/cloudfront/cache/sim-cf-cache-ttl.d.ts +28 -0
- package/dist/service/cloudfront/cache/sim-cf-cache-ttl.js +50 -0
- package/dist/service/cloudfront/cache/sim-cf-cacheable-request.d.ts +35 -0
- package/dist/service/cloudfront/cache/sim-cf-cacheable-request.js +32 -0
- package/dist/service/cloudfront/cache/sim-cf-distribution-cache.d.ts +57 -0
- package/dist/service/cloudfront/cache/sim-cf-distribution-cache.js +115 -0
- package/dist/service/cloudfront/cache/sim-cf-edge.d.ts +37 -0
- package/dist/service/cloudfront/cache/sim-cf-edge.js +34 -0
- package/dist/service/cloudfront/cache/sim-cf-error-cache-ttl.d.ts +36 -0
- package/dist/service/cloudfront/cache/sim-cf-error-cache-ttl.js +28 -0
- package/dist/service/cloudfront/cache/sim-cf-http-date.d.ts +15 -0
- package/dist/service/cloudfront/cache/sim-cf-http-date.js +40 -0
- package/dist/service/cloudfront/cache-policy/sim-cf-cache-key.d.ts +63 -0
- package/dist/service/cloudfront/cache-policy/sim-cf-cache-key.js +70 -0
- package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy.d.ts +13 -3
- package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy.js +31 -3
- package/dist/service/cloudfront/cache-policy/sim-cf-managed-cache-policies.d.ts +8 -3
- package/dist/service/cloudfront/cache-policy/sim-cf-managed-cache-policies.js +96 -12
- package/dist/service/cloudfront/cff/sim-cff-search-distribution.fixture.js +4 -0
- package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-config.d.ts +9 -8
- package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-config.js +40 -11
- package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-key.d.ts +10 -0
- package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-key.js +50 -0
- package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-section.d.ts +28 -0
- package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-section.js +29 -0
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-behavior-policy-kinds.d.ts +16 -0
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-behavior-policy-kinds.js +23 -0
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-behavior-policies.d.ts +3 -2
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-behavior-policies.js +3 -2
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.d.ts +6 -6
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.js +6 -6
- package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-policy-drops.js +8 -23
- package/dist/service/cloudfront/cfn/origin-request-policy/sim-cfn-cf-orp-config.d.ts +28 -0
- package/dist/service/cloudfront/cfn/origin-request-policy/sim-cfn-cf-orp-config.js +46 -0
- package/dist/service/cloudfront/cfn/origin-request-policy/sim-cfn-cf-orp-creator.d.ts +24 -0
- package/dist/service/cloudfront/cfn/origin-request-policy/sim-cfn-cf-orp-creator.js +32 -0
- package/dist/service/cloudfront/cfn/origin-request-policy/sim-cfn-cf-orp-forwarding.d.ts +10 -0
- package/dist/service/cloudfront/cfn/origin-request-policy/sim-cfn-cf-orp-forwarding.js +51 -0
- package/dist/service/cloudfront/cfn/policy/sim-cfn-cf-policy-section.d.ts +22 -0
- package/dist/service/cloudfront/cfn/policy/sim-cfn-cf-policy-section.js +54 -0
- package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.d.ts +1 -0
- package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.js +12 -0
- package/dist/service/cloudfront/command/create-distribution/create-distribution.command.d.ts +1 -0
- package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.d.ts +2 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-create-invalidation.d.ts +28 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-create-invalidation.js +59 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-get-invalidation.d.ts +19 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-get-invalidation.js +32 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-invalidation-access.d.ts +36 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-invalidation-access.js +45 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-invalidation-command.types.d.ts +80 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-invalidation-command.types.js +1 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-invalidation-commands.d.ts +39 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-invalidation-commands.js +35 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-list-invalidations.d.ts +23 -0
- package/dist/service/cloudfront/command/invalidation/sim-cf-list-invalidations.js +39 -0
- package/dist/service/cloudfront/command/update-distribution/update-distribution.handler.d.ts +2 -0
- package/dist/service/cloudfront/controller/content/sim-cf-content-stage.d.ts +51 -0
- package/dist/service/cloudfront/controller/content/sim-cf-content-stage.js +65 -0
- package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.d.ts +2 -3
- package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.js +4 -4
- package/dist/service/cloudfront/controller/error/sim-cf-custom-error-responder.d.ts +4 -0
- package/dist/service/cloudfront/controller/error/sim-cf-custom-error-responder.js +12 -8
- package/dist/service/cloudfront/controller/origin/sim-cf-origin-stage.d.ts +2 -2
- package/dist/service/cloudfront/controller/origin/sim-cf-origin-stage.js +2 -2
- package/dist/service/cloudfront/controller/sim-cloudfront-request-pipeline.d.ts +6 -6
- package/dist/service/cloudfront/controller/sim-cloudfront-request-pipeline.js +35 -20
- package/dist/service/cloudfront/custom-error/sim-cloudfront-custom-error-response.d.ts +23 -5
- package/dist/service/cloudfront/custom-error/sim-cloudfront-custom-error-response.js +8 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-origin-request-policy.d.ts +18 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-origin-request-policy.js +30 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-policies.d.ts +7 -5
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-policies.js +8 -5
- package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-properties.js +4 -1
- package/dist/service/cloudfront/distribution/configurator/sim-cf-distribution-configurator.factory.d.ts +2 -0
- package/dist/service/cloudfront/distribution/configurator/sim-cf-distribution-configurator.factory.js +6 -2
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-custom-error-configurator.d.ts +13 -3
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-custom-error-configurator.js +27 -6
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-origin-configurator.d.ts +3 -1
- package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-origin-configurator.js +4 -1
- package/dist/service/cloudfront/distribution/sim-cf-distribution-configuration-state.d.ts +5 -3
- package/dist/service/cloudfront/distribution/sim-cf-distribution-reconfigurer.d.ts +2 -0
- package/dist/service/cloudfront/distribution/sim-cf-distribution-view.js +1 -1
- package/dist/service/cloudfront/distribution/sim-cloudfront-distribution.d.ts +25 -2
- package/dist/service/cloudfront/distribution/sim-cloudfront-distribution.js +24 -0
- package/dist/service/cloudfront/error/sim-cf-invalidation.error.d.ts +22 -0
- package/dist/service/cloudfront/error/sim-cf-invalidation.error.js +26 -0
- package/dist/service/cloudfront/error/sim-cf-origin-request-policy.error.d.ts +22 -0
- package/dist/service/cloudfront/error/sim-cf-origin-request-policy.error.js +26 -0
- package/dist/service/cloudfront/index.d.ts +2 -0
- package/dist/service/cloudfront/index.js +1 -0
- package/dist/service/cloudfront/invalidation/sim-cf-invalidation-path.d.ts +22 -0
- package/dist/service/cloudfront/invalidation/sim-cf-invalidation-path.js +32 -0
- package/dist/service/cloudfront/invalidation/sim-cf-invalidation-view.d.ts +43 -0
- package/dist/service/cloudfront/invalidation/sim-cf-invalidation-view.js +33 -0
- package/dist/service/cloudfront/invalidation/sim-cf-invalidation.d.ts +55 -0
- package/dist/service/cloudfront/invalidation/sim-cf-invalidation.js +56 -0
- package/dist/service/cloudfront/invalidation/sim-cf-invalidations.d.ts +41 -0
- package/dist/service/cloudfront/invalidation/sim-cf-invalidations.js +58 -0
- package/dist/service/cloudfront/invalidation/sim-cf-repeated-invalidation.d.ts +15 -0
- package/dist/service/cloudfront/invalidation/sim-cf-repeated-invalidation.js +23 -0
- package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-forwarding.d.ts +19 -0
- package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-forwarding.js +116 -0
- package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-request.d.ts +15 -5
- package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-request.js +13 -8
- package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-signer.js +8 -5
- package/dist/service/cloudfront/origin/custom/sim-cloudfront-custom-origin.d.ts +13 -0
- package/dist/service/cloudfront/origin/custom/sim-cloudfront-custom-origin.js +8 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-behavior-forwarded.d.ts +24 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-behavior-forwarded.js +21 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-forwarded-to-origin.d.ts +57 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-forwarded-to-origin.js +129 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-managed-origin-request-policies.d.ts +30 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-managed-origin-request-policies.js +121 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-origin-request-forwarding.d.ts +56 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-origin-request-forwarding.js +67 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-origin-request-policy-registry.d.ts +38 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-origin-request-policy-registry.js +51 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-origin-request-policy.d.ts +32 -0
- package/dist/service/cloudfront/origin-request-policy/sim-cf-origin-request-policy.js +30 -0
- package/dist/service/cloudfront/registry/sim-cloud-front-registry.d.ts +25 -0
- package/dist/service/cloudfront/registry/sim-cloud-front-registry.js +23 -0
- package/dist/service/cloudfront/sdk/sim-cloudfront-sdk-command-router.js +12 -0
- package/dist/service/cloudfront/sim-cloudfront-caching.d.ts +31 -0
- package/dist/service/cloudfront/sim-cloudfront-caching.js +38 -0
- package/dist/service/cloudfront/sim-cloudfront-commands.d.ts +12 -0
- package/dist/service/cloudfront/sim-cloudfront-commands.js +12 -0
- package/dist/service/cloudfront/sim-cloudfront-distributions.d.ts +21 -0
- package/dist/service/cloudfront/sim-cloudfront-distributions.js +23 -0
- package/dist/service/cloudfront/sim-cloudfront-origin-access-controls.d.ts +30 -0
- package/dist/service/cloudfront/sim-cloudfront-origin-access-controls.js +35 -0
- package/dist/service/cloudfront/sim-cloudfront-policies.d.ts +22 -5
- package/dist/service/cloudfront/sim-cloudfront-policies.js +27 -5
- package/dist/service/cloudfront/sim-cloudfront.d.ts +15 -31
- package/dist/service/cloudfront/sim-cloudfront.js +23 -41
- package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.d.ts +6 -5
- package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.js +6 -5
- package/dist/service/iam/authorize/context/sim-iam-auth-z-input.d.ts +6 -4
- package/dist/service/kms/command/sim-kms-request-options.d.ts +9 -5
- package/dist/service/logs/command/delivery/sim-logs-delivery-source-commands.d.ts +6 -4
- package/dist/service/logs/command/delivery/sim-logs-delivery-source-commands.js +13 -4
- package/dist/service/logs/delivery/cloudfront/sim-logs-vended-log-delivery.d.ts +23 -0
- package/dist/service/logs/delivery/cloudfront/sim-logs-vended-log-delivery.js +28 -0
- package/dist/service/ssm/parameter/sim-ssm-kms-crypto.d.ts +7 -10
- package/dist/service/ssm/parameter/sim-ssm-parameter-kms.d.ts +10 -11
- package/dist/service/ssm/parameter/sim-ssm-parameter-kms.js +11 -16
- package/docs/services/athena/README.md +7 -1
- package/docs/services/cloudformation/README.md +2 -1
- package/docs/services/cloudfront/README.md +903 -25
- package/docs/services/ecs/README.md +5 -2
- package/docs/services/kms/README.md +9 -5
- package/docs/services/logs/README.md +6 -0
- package/docs/services/ssm/README.md +26 -33
- package/package.json +1 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the API view of a sim CloudFront invalidation.
|
|
3
|
+
*/
|
|
4
|
+
export function simCfInvalidationView(invalidation) {
|
|
5
|
+
return {
|
|
6
|
+
Id: invalidation.invalidationId,
|
|
7
|
+
Status: invalidation.status,
|
|
8
|
+
CreateTime: invalidation.createTime,
|
|
9
|
+
InvalidationBatch: {
|
|
10
|
+
Paths: {
|
|
11
|
+
Quantity: invalidation.paths.length,
|
|
12
|
+
Items: invalidation.paths,
|
|
13
|
+
},
|
|
14
|
+
CallerReference: invalidation.callerReference,
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build the listing view of a sim CloudFront invalidation.
|
|
20
|
+
*/
|
|
21
|
+
export function simCfInvalidationSummary(invalidation) {
|
|
22
|
+
return {
|
|
23
|
+
Id: invalidation.invalidationId,
|
|
24
|
+
CreateTime: invalidation.createTime,
|
|
25
|
+
Status: invalidation.status,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The URL CreateInvalidation reports the new invalidation at.
|
|
30
|
+
*/
|
|
31
|
+
export function simCfInvalidationLocation(distributionId, invalidationId) {
|
|
32
|
+
return `https://cloudfront.amazonaws.com/2020-05-31/distribution/${distributionId}/invalidation/${invalidationId}`;
|
|
33
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { Brand } from "../../../util/brand.type.js";
|
|
2
|
+
export type SimCfInvalidationId = Brand<string, "SimCfInvalidationId">;
|
|
3
|
+
/**
|
|
4
|
+
* How far an invalidation has got.
|
|
5
|
+
*
|
|
6
|
+
* CloudFront answers CreateInvalidation with `InProgress` and moves the
|
|
7
|
+
* invalidation to `Completed` once every edge has been told, the way a
|
|
8
|
+
* Distribution reaches `Deployed`.
|
|
9
|
+
*/
|
|
10
|
+
export type SimCfInvalidationStatus = "InProgress" | "Completed";
|
|
11
|
+
interface SimCfInvalidationProperties {
|
|
12
|
+
readonly invalidationId: SimCfInvalidationId;
|
|
13
|
+
readonly callerReference: string;
|
|
14
|
+
readonly paths: readonly string[];
|
|
15
|
+
readonly createTime: Date;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* One simulated CloudFront invalidation.
|
|
19
|
+
*
|
|
20
|
+
* An invalidation is the batch of paths a caller asked to be cleared, plus
|
|
21
|
+
* where clearing them has got to. It belongs to the Distribution it was
|
|
22
|
+
* created against, which is what GetInvalidation and ListInvalidations read it
|
|
23
|
+
* back from.
|
|
24
|
+
*/
|
|
25
|
+
export declare class SimCfInvalidation {
|
|
26
|
+
#private;
|
|
27
|
+
readonly invalidationId: SimCfInvalidationId;
|
|
28
|
+
readonly callerReference: string;
|
|
29
|
+
readonly paths: readonly string[];
|
|
30
|
+
readonly createTime: Date;
|
|
31
|
+
constructor(properties: SimCfInvalidationProperties);
|
|
32
|
+
/**
|
|
33
|
+
* Whether this invalidation is still running.
|
|
34
|
+
*/
|
|
35
|
+
get status(): SimCfInvalidationStatus;
|
|
36
|
+
/**
|
|
37
|
+
* Move this invalidation into Completed status.
|
|
38
|
+
*/
|
|
39
|
+
completeInvalidation(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Whether a batch names the same paths as this one did.
|
|
42
|
+
*
|
|
43
|
+
* This is what decides whether a repeated `CallerReference` answers with the
|
|
44
|
+
* invalidation already created or is refused. The paths are compared in the
|
|
45
|
+
* order they were sent, since that is the batch CloudFront was given, and
|
|
46
|
+
* each one is read the way an invalidation reads it, so `*` and `/*` are the
|
|
47
|
+
* same batch.
|
|
48
|
+
*/
|
|
49
|
+
namesSamePaths(paths: readonly string[]): boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate a fake sim CloudFront invalidation ID.
|
|
53
|
+
*/
|
|
54
|
+
export declare function makeSimCfInvalidationId(): SimCfInvalidationId;
|
|
55
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { faker } from "@faker-js/faker";
|
|
2
|
+
import { simCfInvalidationPath } from "./sim-cf-invalidation-path.js";
|
|
3
|
+
/**
|
|
4
|
+
* One simulated CloudFront invalidation.
|
|
5
|
+
*
|
|
6
|
+
* An invalidation is the batch of paths a caller asked to be cleared, plus
|
|
7
|
+
* where clearing them has got to. It belongs to the Distribution it was
|
|
8
|
+
* created against, which is what GetInvalidation and ListInvalidations read it
|
|
9
|
+
* back from.
|
|
10
|
+
*/
|
|
11
|
+
export class SimCfInvalidation {
|
|
12
|
+
invalidationId;
|
|
13
|
+
callerReference;
|
|
14
|
+
paths;
|
|
15
|
+
createTime;
|
|
16
|
+
#status = "InProgress";
|
|
17
|
+
constructor(properties) {
|
|
18
|
+
this.invalidationId = properties.invalidationId;
|
|
19
|
+
this.callerReference = properties.callerReference;
|
|
20
|
+
this.paths = properties.paths;
|
|
21
|
+
this.createTime = properties.createTime;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Whether this invalidation is still running.
|
|
25
|
+
*/
|
|
26
|
+
get status() {
|
|
27
|
+
return this.#status;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Move this invalidation into Completed status.
|
|
31
|
+
*/
|
|
32
|
+
completeInvalidation() {
|
|
33
|
+
this.#status = "Completed";
|
|
34
|
+
return Promise.resolve();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether a batch names the same paths as this one did.
|
|
38
|
+
*
|
|
39
|
+
* This is what decides whether a repeated `CallerReference` answers with the
|
|
40
|
+
* invalidation already created or is refused. The paths are compared in the
|
|
41
|
+
* order they were sent, since that is the batch CloudFront was given, and
|
|
42
|
+
* each one is read the way an invalidation reads it, so `*` and `/*` are the
|
|
43
|
+
* same batch.
|
|
44
|
+
*/
|
|
45
|
+
namesSamePaths(paths) {
|
|
46
|
+
const named = paths.map((path) => simCfInvalidationPath(path));
|
|
47
|
+
return (this.paths.length === named.length &&
|
|
48
|
+
this.paths.every((path, index) => simCfInvalidationPath(path) === named.at(index)));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate a fake sim CloudFront invalidation ID.
|
|
53
|
+
*/
|
|
54
|
+
export function makeSimCfInvalidationId() {
|
|
55
|
+
return faker.helpers.fromRegExp(/I[0-9A-Z]{13}/);
|
|
56
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type SimCfInvalidation, type SimCfInvalidationId } from "./sim-cf-invalidation.js";
|
|
2
|
+
/**
|
|
3
|
+
* The invalidations one simulated Distribution has been asked for.
|
|
4
|
+
*
|
|
5
|
+
* An invalidation is scoped to its Distribution, so this hangs off the
|
|
6
|
+
* Distribution rather than off the service. It holds them in the order they
|
|
7
|
+
* were created, which is the order the counts and the listing are read back
|
|
8
|
+
* from.
|
|
9
|
+
*/
|
|
10
|
+
export declare class SimCfInvalidations {
|
|
11
|
+
private readonly invalidations;
|
|
12
|
+
/**
|
|
13
|
+
* Allocate an invalidation ID no invalidation of this Distribution holds.
|
|
14
|
+
*/
|
|
15
|
+
allocateInvalidationId(): SimCfInvalidationId;
|
|
16
|
+
/**
|
|
17
|
+
* Hold on to an invalidation.
|
|
18
|
+
*/
|
|
19
|
+
add(invalidation: SimCfInvalidation): void;
|
|
20
|
+
/**
|
|
21
|
+
* Get an invalidation by ID.
|
|
22
|
+
*/
|
|
23
|
+
byId(invalidationId: SimCfInvalidationId | string): SimCfInvalidation | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Get the invalidation created under a `CallerReference`, if there is one.
|
|
26
|
+
*
|
|
27
|
+
* A `CallerReference` is what makes a batch idempotent, so this is what a
|
|
28
|
+
* repeated one is answered from.
|
|
29
|
+
*/
|
|
30
|
+
byCallerReference(callerReference: string): SimCfInvalidation | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* The invalidations of this Distribution, most recently created first, as
|
|
33
|
+
* CloudFront lists them.
|
|
34
|
+
*/
|
|
35
|
+
newestFirst(): readonly SimCfInvalidation[];
|
|
36
|
+
/**
|
|
37
|
+
* How many invalidations of this Distribution are still running, which is
|
|
38
|
+
* what GetDistribution reports as `InProgressInvalidationBatches`.
|
|
39
|
+
*/
|
|
40
|
+
get inProgressCount(): number;
|
|
41
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { makeSimCfInvalidationId, } from "./sim-cf-invalidation.js";
|
|
2
|
+
/**
|
|
3
|
+
* The invalidations one simulated Distribution has been asked for.
|
|
4
|
+
*
|
|
5
|
+
* An invalidation is scoped to its Distribution, so this hangs off the
|
|
6
|
+
* Distribution rather than off the service. It holds them in the order they
|
|
7
|
+
* were created, which is the order the counts and the listing are read back
|
|
8
|
+
* from.
|
|
9
|
+
*/
|
|
10
|
+
export class SimCfInvalidations {
|
|
11
|
+
invalidations = [];
|
|
12
|
+
/**
|
|
13
|
+
* Allocate an invalidation ID no invalidation of this Distribution holds.
|
|
14
|
+
*/
|
|
15
|
+
allocateInvalidationId() {
|
|
16
|
+
let invalidationId = makeSimCfInvalidationId();
|
|
17
|
+
while (this.byId(invalidationId) !== undefined) {
|
|
18
|
+
/* v8 ignore next -- does not happen in practice */
|
|
19
|
+
invalidationId = makeSimCfInvalidationId();
|
|
20
|
+
}
|
|
21
|
+
return invalidationId;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Hold on to an invalidation.
|
|
25
|
+
*/
|
|
26
|
+
add(invalidation) {
|
|
27
|
+
this.invalidations.push(invalidation);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get an invalidation by ID.
|
|
31
|
+
*/
|
|
32
|
+
byId(invalidationId) {
|
|
33
|
+
return this.invalidations.find((invalidation) => invalidation.invalidationId === invalidationId);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get the invalidation created under a `CallerReference`, if there is one.
|
|
37
|
+
*
|
|
38
|
+
* A `CallerReference` is what makes a batch idempotent, so this is what a
|
|
39
|
+
* repeated one is answered from.
|
|
40
|
+
*/
|
|
41
|
+
byCallerReference(callerReference) {
|
|
42
|
+
return this.invalidations.find((invalidation) => invalidation.callerReference === callerReference);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The invalidations of this Distribution, most recently created first, as
|
|
46
|
+
* CloudFront lists them.
|
|
47
|
+
*/
|
|
48
|
+
newestFirst() {
|
|
49
|
+
return this.invalidations.toReversed();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* How many invalidations of this Distribution are still running, which is
|
|
53
|
+
* what GetDistribution reports as `InProgressInvalidationBatches`.
|
|
54
|
+
*/
|
|
55
|
+
get inProgressCount() {
|
|
56
|
+
return this.invalidations.filter((invalidation) => invalidation.status === "InProgress").length;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SimCloudFrontDistribution } from "../distribution/sim-cloudfront-distribution.js";
|
|
2
|
+
import type { SimCfInvalidation } from "./sim-cf-invalidation.js";
|
|
3
|
+
/**
|
|
4
|
+
* The invalidation a `CallerReference` already created, where a batch repeats
|
|
5
|
+
* it.
|
|
6
|
+
*
|
|
7
|
+
* A `CallerReference` makes a batch idempotent. A repeat naming the same paths
|
|
8
|
+
* is answered with what it created the first time, and nothing is cleared
|
|
9
|
+
* again. A repeat naming different paths is refused, since the reference then
|
|
10
|
+
* names two batches.
|
|
11
|
+
*
|
|
12
|
+
* A reference this Distribution has never seen answers with nothing, and the
|
|
13
|
+
* caller creates an invalidation for it.
|
|
14
|
+
*/
|
|
15
|
+
export declare function simCfRepeatedInvalidation(distribution: SimCloudFrontDistribution, callerReference: string, paths: readonly string[]): SimCfInvalidation | undefined;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SimCloudFrontInvalidationBatchAlreadyExists } from "../error/sim-cf-invalidation.error.js";
|
|
2
|
+
/**
|
|
3
|
+
* The invalidation a `CallerReference` already created, where a batch repeats
|
|
4
|
+
* it.
|
|
5
|
+
*
|
|
6
|
+
* A `CallerReference` makes a batch idempotent. A repeat naming the same paths
|
|
7
|
+
* is answered with what it created the first time, and nothing is cleared
|
|
8
|
+
* again. A repeat naming different paths is refused, since the reference then
|
|
9
|
+
* names two batches.
|
|
10
|
+
*
|
|
11
|
+
* A reference this Distribution has never seen answers with nothing, and the
|
|
12
|
+
* caller creates an invalidation for it.
|
|
13
|
+
*/
|
|
14
|
+
export function simCfRepeatedInvalidation(distribution, callerReference, paths) {
|
|
15
|
+
const existing = distribution.invalidations.byCallerReference(callerReference);
|
|
16
|
+
if (existing === undefined) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
if (!existing.namesSamePaths(paths)) {
|
|
20
|
+
throw new SimCloudFrontInvalidationBatchAlreadyExists(`Sim CloudFront invalidation batch ${existing.invalidationId} on Distribution ${distribution.distributionId} was created with CallerReference ${callerReference} and different paths`);
|
|
21
|
+
}
|
|
22
|
+
return existing;
|
|
23
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SimCfForwardedToOrigin } from "../../origin-request-policy/sim-cf-forwarded-to-origin.js";
|
|
2
|
+
/**
|
|
3
|
+
* The query string the Origin is asked for, holding the names the policies
|
|
4
|
+
* carry and nothing else.
|
|
5
|
+
*
|
|
6
|
+
* The pairs that travel keep the spelling the viewer wrote them in. A query
|
|
7
|
+
* string re-encoded on the way through is no longer the one the viewer asked
|
|
8
|
+
* for. A name the viewer repeated is repeated to the Origin, which dropping a
|
|
9
|
+
* repeat would change.
|
|
10
|
+
*/
|
|
11
|
+
export declare function simCfForwardedOriginSearch(viewerSearch: string, forwarded: SimCfForwardedToOrigin): string;
|
|
12
|
+
/**
|
|
13
|
+
* The headers the Origin is sent, which are the viewer's narrowed to what the
|
|
14
|
+
* policies carry plus the ones CloudFront sends regardless.
|
|
15
|
+
*
|
|
16
|
+
* `Host` is left to the caller, which is the one part of the Origin request
|
|
17
|
+
* that comes from the Origin rather than from the viewer or the policies.
|
|
18
|
+
*/
|
|
19
|
+
export declare function simCfForwardedOriginHeaders(viewerHeaders: Headers, forwarded: SimCfForwardedToOrigin): Headers;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `User-Agent` CloudFront sends when the policies do not carry the
|
|
3
|
+
* viewer's own.
|
|
4
|
+
*
|
|
5
|
+
* https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html
|
|
6
|
+
*/
|
|
7
|
+
const cloudFrontUserAgent = "Amazon CloudFront";
|
|
8
|
+
/**
|
|
9
|
+
* The headers CloudFront sends whatever the policies name.
|
|
10
|
+
*
|
|
11
|
+
* These describe the body travelling with the request rather than the viewer
|
|
12
|
+
* making it, and an Origin that lost them would read the wrong bytes.
|
|
13
|
+
*/
|
|
14
|
+
const bodyHeaders = new Set([
|
|
15
|
+
"content-length",
|
|
16
|
+
"content-type",
|
|
17
|
+
"transfer-encoding",
|
|
18
|
+
]);
|
|
19
|
+
/**
|
|
20
|
+
* The query string the Origin is asked for, holding the names the policies
|
|
21
|
+
* carry and nothing else.
|
|
22
|
+
*
|
|
23
|
+
* The pairs that travel keep the spelling the viewer wrote them in. A query
|
|
24
|
+
* string re-encoded on the way through is no longer the one the viewer asked
|
|
25
|
+
* for. A name the viewer repeated is repeated to the Origin, which dropping a
|
|
26
|
+
* repeat would change.
|
|
27
|
+
*/
|
|
28
|
+
export function simCfForwardedOriginSearch(viewerSearch, forwarded) {
|
|
29
|
+
const forwardedPairs = viewerSearch
|
|
30
|
+
.replace(/^\?/u, "")
|
|
31
|
+
.split("&")
|
|
32
|
+
.filter((pair) => pair.length > 0)
|
|
33
|
+
.filter((pair) => forwarded.forwardsQueryString(queryStringName(pair)));
|
|
34
|
+
return forwardedPairs.length === 0 ? "" : `?${forwardedPairs.join("&")}`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The headers the Origin is sent, which are the viewer's narrowed to what the
|
|
38
|
+
* policies carry plus the ones CloudFront sends regardless.
|
|
39
|
+
*
|
|
40
|
+
* `Host` is left to the caller, which is the one part of the Origin request
|
|
41
|
+
* that comes from the Origin rather than from the viewer or the policies.
|
|
42
|
+
*/
|
|
43
|
+
export function simCfForwardedOriginHeaders(viewerHeaders, forwarded) {
|
|
44
|
+
const headers = new Headers();
|
|
45
|
+
for (const [name, value] of viewerHeaders) {
|
|
46
|
+
if (bodyHeaders.has(name) || forwarded.forwardsHeader(name)) {
|
|
47
|
+
headers.set(name, value);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
applyForwardedCookies(viewerHeaders, headers, forwarded);
|
|
51
|
+
applyUserAgent(headers, forwarded);
|
|
52
|
+
applyAcceptEncoding(viewerHeaders, headers, forwarded);
|
|
53
|
+
return headers;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The name half of one `name=value` pair, read the way a viewer's own client
|
|
57
|
+
* wrote it rather than as the bytes it was sent as.
|
|
58
|
+
*/
|
|
59
|
+
function queryStringName(pair) {
|
|
60
|
+
const [name = ""] = new URLSearchParams(pair).keys();
|
|
61
|
+
return name;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Write the cookies the policies carry into the one `Cookie` header a request
|
|
65
|
+
* sends them all in, leaving the header off where none of them travels.
|
|
66
|
+
*
|
|
67
|
+
* A policy naming `Cookie` in its headers section carries the header whole,
|
|
68
|
+
* whatever its cookies section says.
|
|
69
|
+
*/
|
|
70
|
+
function applyForwardedCookies(viewerHeaders, headers, forwarded) {
|
|
71
|
+
if (forwarded.forwardsHeader("cookie")) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const cookies = (viewerHeaders.get("cookie") ?? "")
|
|
75
|
+
.split(";")
|
|
76
|
+
.map((cookie) => cookie.trim())
|
|
77
|
+
.filter((cookie) => cookie.length > 0)
|
|
78
|
+
.filter((cookie) => forwarded.forwardsCookie(cookieName(cookie)));
|
|
79
|
+
if (cookies.length > 0) {
|
|
80
|
+
headers.set("cookie", cookies.join("; "));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The name half of one `name=value` cookie.
|
|
85
|
+
*/
|
|
86
|
+
function cookieName(cookie) {
|
|
87
|
+
const [name = ""] = cookie.split("=", 1);
|
|
88
|
+
return name;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* State CloudFront as the user agent where the policies do not carry the
|
|
92
|
+
* viewer's own, as CloudFront states itself.
|
|
93
|
+
*/
|
|
94
|
+
function applyUserAgent(headers, forwarded) {
|
|
95
|
+
if (!forwarded.forwardsHeader("user-agent")) {
|
|
96
|
+
headers.set("user-agent", cloudFrontUserAgent);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Ask the Origin for the compression the cache policy keyed on.
|
|
101
|
+
*
|
|
102
|
+
* A cache policy that set either `EnableAcceptEncoding` flag decides this
|
|
103
|
+
* header on its own, and the normalized value replaces a viewer's own that an
|
|
104
|
+
* origin request policy carried. A policy that set neither leaves whatever the
|
|
105
|
+
* policies carried, which is the viewer's header or no header at all.
|
|
106
|
+
*/
|
|
107
|
+
function applyAcceptEncoding(viewerHeaders, headers, forwarded) {
|
|
108
|
+
if (!forwarded.keysOnCompression) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const acceptEncoding = forwarded.normalizedAcceptEncoding(viewerHeaders);
|
|
112
|
+
headers.delete("accept-encoding");
|
|
113
|
+
if (acceptEncoding !== undefined) {
|
|
114
|
+
headers.set("accept-encoding", acceptEncoding);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
import type { SimCfForwardedToOrigin } from "../../origin-request-policy/sim-cf-forwarded-to-origin.js";
|
|
1
2
|
interface SimCfCustomOriginRequestProperties {
|
|
2
3
|
readonly domainName: string;
|
|
3
4
|
readonly originPath: string;
|
|
4
5
|
readonly request: Request;
|
|
6
|
+
/**
|
|
7
|
+
* What the Behavior's cache policy and origin request policy carry to the
|
|
8
|
+
* Origin between them.
|
|
9
|
+
*/
|
|
10
|
+
readonly forwarded: SimCfForwardedToOrigin;
|
|
5
11
|
/**
|
|
6
12
|
* The Origin's own custom headers, keyed by lower-case header name.
|
|
7
13
|
*/
|
|
@@ -16,11 +22,15 @@ interface SimCfCustomOriginRequestProperties {
|
|
|
16
22
|
/**
|
|
17
23
|
* Build the request sim CloudFront sends on to a custom Origin.
|
|
18
24
|
*
|
|
19
|
-
* CloudFront keeps the viewer's method
|
|
20
|
-
* the Origin's own domain as the host
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
25
|
+
* CloudFront keeps the viewer's method and body, prefixes the Origin path to
|
|
26
|
+
* the request path, and sends the Origin's own domain as the host. Of the
|
|
27
|
+
* viewer's headers, cookies and query strings it sends what the Behavior's two
|
|
28
|
+
* policies name between them and drops the rest. An Origin reads what the
|
|
29
|
+
* Distribution was configured to tell it.
|
|
30
|
+
*
|
|
31
|
+
* The Origin domain is rewritten to its Yulin-local form here, so that an AWS
|
|
32
|
+
* endpoint hostname is resolved by the same host handling that serves the
|
|
33
|
+
* simulated environment on localhost.
|
|
24
34
|
*/
|
|
25
35
|
export declare function simCfCustomOriginRequest(properties: SimCfCustomOriginRequestProperties): Request;
|
|
26
36
|
export {};
|
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
import { SimAwsLocalUrl } from "../../../../serve/http/url/sim-aws-local-url.js";
|
|
2
2
|
import { stripSimAwsControlHeaders } from "../../../iam/request/sim-aws-control-headers.js";
|
|
3
|
+
import { simCfForwardedOriginHeaders, simCfForwardedOriginSearch, } from "./sim-cf-custom-origin-forwarding.js";
|
|
3
4
|
/**
|
|
4
5
|
* Build the request sim CloudFront sends on to a custom Origin.
|
|
5
6
|
*
|
|
6
|
-
* CloudFront keeps the viewer's method
|
|
7
|
-
* the Origin's own domain as the host
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* CloudFront keeps the viewer's method and body, prefixes the Origin path to
|
|
8
|
+
* the request path, and sends the Origin's own domain as the host. Of the
|
|
9
|
+
* viewer's headers, cookies and query strings it sends what the Behavior's two
|
|
10
|
+
* policies name between them and drops the rest. An Origin reads what the
|
|
11
|
+
* Distribution was configured to tell it.
|
|
12
|
+
*
|
|
13
|
+
* The Origin domain is rewritten to its Yulin-local form here, so that an AWS
|
|
14
|
+
* endpoint hostname is resolved by the same host handling that serves the
|
|
15
|
+
* simulated environment on localhost.
|
|
11
16
|
*/
|
|
12
17
|
export function simCfCustomOriginRequest(properties) {
|
|
13
|
-
const { request } = properties;
|
|
18
|
+
const { request, forwarded } = properties;
|
|
14
19
|
const viewerUrl = new URL(request.url);
|
|
15
20
|
const originUrl = new SimAwsLocalUrl({
|
|
16
21
|
input: `https://${properties.domainName}`,
|
|
17
22
|
}).toURL();
|
|
18
23
|
originUrl.pathname = originRequestPath(properties.originPath, viewerUrl.pathname);
|
|
19
|
-
originUrl.search = viewerUrl.search;
|
|
20
|
-
const headers =
|
|
24
|
+
originUrl.search = simCfForwardedOriginSearch(viewerUrl.search, forwarded);
|
|
25
|
+
const headers = simCfForwardedOriginHeaders(request.headers, forwarded);
|
|
21
26
|
headers.set("host", originUrl.host);
|
|
22
27
|
// Who the Origin request is from is the Origin's business, not the viewer's,
|
|
23
28
|
// so a viewer's own control headers are dropped before the Origin's are
|
|
@@ -66,15 +66,18 @@ export class SimCfCustomOriginSigner {
|
|
|
66
66
|
* POST or PUT that carried no hash through a signing origin access control is
|
|
67
67
|
* refused at the Origin, which is what real CloudFront and Lambda do with one.
|
|
68
68
|
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
69
|
+
* The viewer's own header is restated here rather than left to travel with the
|
|
70
|
+
* rest of them, since the Behavior's policies decide which of the viewer's
|
|
71
|
+
* headers reach the Origin and a signature is not theirs to withhold.
|
|
71
72
|
*
|
|
72
73
|
* https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-lambda.html
|
|
73
74
|
*/
|
|
74
75
|
function payloadDeclaration(viewerRequest) {
|
|
75
|
-
if (!bodyCarryingMethods.has(viewerRequest.method.toUpperCase())
|
|
76
|
-
viewerRequest.headers.has(simIamSigV4ContentSha256Header)) {
|
|
76
|
+
if (!bodyCarryingMethods.has(viewerRequest.method.toUpperCase())) {
|
|
77
77
|
return {};
|
|
78
78
|
}
|
|
79
|
-
return {
|
|
79
|
+
return {
|
|
80
|
+
[simIamSigV4ContentSha256Header]: viewerRequest.headers.get(simIamSigV4ContentSha256Header) ??
|
|
81
|
+
simIamSigV4UnsignedPayload,
|
|
82
|
+
};
|
|
80
83
|
}
|
|
@@ -2,6 +2,7 @@ import type { LambdaAtEdge } from "../../typings/lambda-at-edge.namespace.js";
|
|
|
2
2
|
import type { SimCloudFrontOriginAccessControl } from "../../origin-access-control/sim-cf-origin-access-control.js";
|
|
3
3
|
import type { SimCloudFrontOrigin } from "../sim-cloudfront-origin.js";
|
|
4
4
|
import type { SimCloudFrontOriginRequest } from "../sim-cloudfront-request-response.js";
|
|
5
|
+
import { type SimCfBehaviorPolicyRegistries } from "../../origin-request-policy/sim-cf-behavior-forwarded.js";
|
|
5
6
|
import type { SimCfCustomOriginDispatcher } from "./sim-cf-custom-origin-dispatcher.js";
|
|
6
7
|
interface SimCloudFrontCustomOriginProperties {
|
|
7
8
|
readonly originId: string;
|
|
@@ -14,6 +15,13 @@ interface SimCloudFrontCustomOriginProperties {
|
|
|
14
15
|
* keyed by lower-case header name.
|
|
15
16
|
*/
|
|
16
17
|
readonly customHeaders?: Readonly<Record<string, string>> | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* The policies a Behavior's forwarding is read from, which decide what of
|
|
20
|
+
* the viewer's request reaches this Origin. Without them a Behavior names no
|
|
21
|
+
* policy this Origin can read, and carries what CloudFront sends of its own
|
|
22
|
+
* accord and nothing else.
|
|
23
|
+
*/
|
|
24
|
+
readonly policies?: SimCfBehaviorPolicyRegistries | undefined;
|
|
17
25
|
}
|
|
18
26
|
/**
|
|
19
27
|
* Simulated CloudFront custom Origin.
|
|
@@ -45,10 +53,15 @@ export declare class SimCloudFrontCustomOrigin implements SimCloudFrontOrigin {
|
|
|
45
53
|
private readonly originId;
|
|
46
54
|
private readonly dispatcher;
|
|
47
55
|
private readonly signer;
|
|
56
|
+
private readonly policies;
|
|
48
57
|
constructor(properties: SimCloudFrontCustomOriginProperties);
|
|
49
58
|
/**
|
|
50
59
|
* Fetch the request from the simulated service behind this Origin.
|
|
51
60
|
*
|
|
61
|
+
* The Behavior the request resolved to decides what of the viewer's headers,
|
|
62
|
+
* cookies and query strings travels, so the policies are read per request
|
|
63
|
+
* rather than when the Origin was built.
|
|
64
|
+
*
|
|
52
65
|
* An Origin domain naming nothing in the simulation fails here rather than
|
|
53
66
|
* being sent to the real domain, because a simulated Distribution reaching
|
|
54
67
|
* out to the internet is never what a test meant.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { customOriginEdgeOrigin, customOriginEdgeParts, } from "./sim-cf-custom-origin-edge.js";
|
|
2
|
+
import { simCfBehaviorForwardedToOrigin, } from "../../origin-request-policy/sim-cf-behavior-forwarded.js";
|
|
2
3
|
import { simCfCustomOriginRequest } from "./sim-cf-custom-origin-request.js";
|
|
3
4
|
import { SimCfCustomOriginSigner } from "./sim-cf-custom-origin-signer.js";
|
|
4
5
|
/**
|
|
@@ -31,6 +32,7 @@ export class SimCloudFrontCustomOrigin {
|
|
|
31
32
|
originId;
|
|
32
33
|
dispatcher;
|
|
33
34
|
signer;
|
|
35
|
+
policies;
|
|
34
36
|
constructor(properties) {
|
|
35
37
|
this.properties = properties;
|
|
36
38
|
this.originId = properties.originId;
|
|
@@ -40,10 +42,15 @@ export class SimCloudFrontCustomOrigin {
|
|
|
40
42
|
this.originAccessControl = properties.originAccessControl;
|
|
41
43
|
this.signer = new SimCfCustomOriginSigner(properties.originAccessControl);
|
|
42
44
|
this.customHeaders = properties.customHeaders ?? {};
|
|
45
|
+
this.policies = properties.policies;
|
|
43
46
|
}
|
|
44
47
|
/**
|
|
45
48
|
* Fetch the request from the simulated service behind this Origin.
|
|
46
49
|
*
|
|
50
|
+
* The Behavior the request resolved to decides what of the viewer's headers,
|
|
51
|
+
* cookies and query strings travels, so the policies are read per request
|
|
52
|
+
* rather than when the Origin was built.
|
|
53
|
+
*
|
|
47
54
|
* An Origin domain naming nothing in the simulation fails here rather than
|
|
48
55
|
* being sent to the real domain, because a simulated Distribution reaching
|
|
49
56
|
* out to the internet is never what a test meant.
|
|
@@ -53,6 +60,7 @@ export class SimCloudFrontCustomOrigin {
|
|
|
53
60
|
domainName: this.domainName,
|
|
54
61
|
originPath: this.originPath,
|
|
55
62
|
request: request.req,
|
|
63
|
+
forwarded: simCfBehaviorForwardedToOrigin(request.behavior, this.policies),
|
|
56
64
|
customHeaders: this.customHeaders,
|
|
57
65
|
signingHeaders: this.signer.forRequest(request),
|
|
58
66
|
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SimCloudFrontBehavior } from "../behaviour/sim-cloud-front-behavior.js";
|
|
2
|
+
import type { SimCloudFrontCachePolicyRegistry } from "../cache-policy/sim-cf-cache-policy-registry.js";
|
|
3
|
+
import { SimCfForwardedToOrigin } from "./sim-cf-forwarded-to-origin.js";
|
|
4
|
+
import type { SimCloudFrontOriginRequestPolicyRegistry } from "./sim-cf-origin-request-policy-registry.js";
|
|
5
|
+
/**
|
|
6
|
+
* The two policy registries a Behavior's forwarding is read from.
|
|
7
|
+
*
|
|
8
|
+
* They are asked per request rather than when the Distribution was configured,
|
|
9
|
+
* so a policy a template replaced decides the next Origin request rather than
|
|
10
|
+
* the one it replaced.
|
|
11
|
+
*/
|
|
12
|
+
export interface SimCfBehaviorPolicyRegistries {
|
|
13
|
+
readonly cachePolicies: SimCloudFrontCachePolicyRegistry;
|
|
14
|
+
readonly originRequestPolicies: SimCloudFrontOriginRequestPolicyRegistry;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* What one Behavior carries to its Origin, from the two policies it names.
|
|
18
|
+
*
|
|
19
|
+
* A Behavior naming a policy this simulation does not hold is read as naming
|
|
20
|
+
* none, which is the same reading the Distribution's cache takes. Without
|
|
21
|
+
* either registry there is nothing to read a policy from, and the Behavior
|
|
22
|
+
* carries the same nothing.
|
|
23
|
+
*/
|
|
24
|
+
export declare function simCfBehaviorForwardedToOrigin(behaviour: SimCloudFrontBehavior, registries?: SimCfBehaviorPolicyRegistries): SimCfForwardedToOrigin;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SimCfForwardedToOrigin } from "./sim-cf-forwarded-to-origin.js";
|
|
2
|
+
/**
|
|
3
|
+
* What one Behavior carries to its Origin, from the two policies it names.
|
|
4
|
+
*
|
|
5
|
+
* A Behavior naming a policy this simulation does not hold is read as naming
|
|
6
|
+
* none, which is the same reading the Distribution's cache takes. Without
|
|
7
|
+
* either registry there is nothing to read a policy from, and the Behavior
|
|
8
|
+
* carries the same nothing.
|
|
9
|
+
*/
|
|
10
|
+
export function simCfBehaviorForwardedToOrigin(behaviour, registries) {
|
|
11
|
+
const cachePolicy = behaviour.cachePolicyId === undefined
|
|
12
|
+
? undefined
|
|
13
|
+
: registries?.cachePolicies.byId(behaviour.cachePolicyId);
|
|
14
|
+
const originRequestPolicy = behaviour.originRequestPolicyId === undefined
|
|
15
|
+
? undefined
|
|
16
|
+
: registries?.originRequestPolicies.byId(behaviour.originRequestPolicyId);
|
|
17
|
+
return new SimCfForwardedToOrigin({
|
|
18
|
+
cacheKey: cachePolicy?.cacheKey,
|
|
19
|
+
forwarding: originRequestPolicy?.forwarding,
|
|
20
|
+
});
|
|
21
|
+
}
|