cdk-nextjs 0.1.3 → 0.2.1
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/.jsii +120 -88
- package/API.md +60 -38
- package/assets/lambdas/assets-deployment/assets-deployment.lambda/assets-deployment.Dockerfile +1 -1
- package/assets/lambdas/assets-deployment/assets-deployment.lambda/index.js +18 -8
- package/assets/lambdas/assets-deployment/assets-deployment.lambda/patch-fetch.js +1 -0
- package/docs/breaking-changes.md +12 -0
- package/lib/generated-structs/OptionalNextjsAssetsDeploymentProps.d.ts +5 -0
- package/lib/generated-structs/OptionalNextjsAssetsDeploymentProps.js +1 -1
- package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +7 -7
- package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
- package/lib/lambdas/assets-deployment/assets-deployment.lambda.js +16 -8
- package/lib/lambdas/assets-deployment/fs-to-s3.d.ts +12 -1
- package/lib/lambdas/assets-deployment/fs-to-s3.js +16 -3
- package/lib/nextjs-assets-deployment.d.ts +7 -4
- package/lib/nextjs-assets-deployment.js +3 -2
- package/lib/nextjs-build/nextjs-build.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-distribution.d.ts +9 -15
- package/lib/nextjs-distribution.js +15 -84
- package/lib/nextjs-file-system.js +1 -1
- package/lib/nextjs-invalidation.js +1 -1
- package/lib/nextjs-revalidation.js +1 -1
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/nextjs-vpc.js +1 -1
- package/lib/root-constructs/nextjs-global-containers.js +5 -4
- package/lib/root-constructs/nextjs-global-functions.js +5 -5
- package/lib/root-constructs/nextjs-regional-containers.js +4 -3
- package/package.json +4 -7
- package/assets/lambdas/sign-fn-url/sign-fn-url.edge-lambda/index.js +0 -2024
- package/lib/lambdas/sign-fn-url/sign-fn-url-function.d.ts +0 -13
- package/lib/lambdas/sign-fn-url/sign-fn-url-function.js +0 -23
- package/lib/lambdas/sign-fn-url/sign-fn-url.edge-lambda.d.ts +0 -9
- package/lib/lambdas/sign-fn-url/sign-fn-url.edge-lambda.js +0 -35
- package/lib/lambdas/sign-fn-url/sign-request.d.ts +0 -28
- package/lib/lambdas/sign-fn-url/sign-request.js +0 -119
- package/lib/lambdas/sign-fn-url/sign-request.test.d.ts +0 -1
- package/lib/lambdas/sign-fn-url/sign-request.test.js +0 -129
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
|
|
2
|
-
import { Construct } from 'constructs';
|
|
3
|
-
/**
|
|
4
|
-
* Props for SignFnUrlFunction
|
|
5
|
-
*/
|
|
6
|
-
export interface SignFnUrlFunctionProps extends cloudfront.experimental.EdgeFunctionProps {
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* An AWS Lambda function which executes src/lambdas/sign-fn-url/sign-fn-url.
|
|
10
|
-
*/
|
|
11
|
-
export declare class SignFnUrlFunction extends cloudfront.experimental.EdgeFunction {
|
|
12
|
-
constructor(scope: Construct, id: string, props?: SignFnUrlFunctionProps);
|
|
13
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SignFnUrlFunction = void 0;
|
|
4
|
-
// ~~ Generated by projen. To modify, edit .projenrc.ts and run "pnpm dlx projen".
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const cloudfront = require("aws-cdk-lib/aws-cloudfront");
|
|
7
|
-
const lambda = require("aws-cdk-lib/aws-lambda");
|
|
8
|
-
/**
|
|
9
|
-
* An AWS Lambda function which executes src/lambdas/sign-fn-url/sign-fn-url.
|
|
10
|
-
*/
|
|
11
|
-
class SignFnUrlFunction extends cloudfront.experimental.EdgeFunction {
|
|
12
|
-
constructor(scope, id, props) {
|
|
13
|
-
super(scope, id, {
|
|
14
|
-
description: 'src/lambdas/sign-fn-url/sign-fn-url.edge-lambda.ts',
|
|
15
|
-
...props,
|
|
16
|
-
runtime: new lambda.Runtime('nodejs22.x', lambda.RuntimeFamily.NODEJS),
|
|
17
|
-
handler: 'index.handler',
|
|
18
|
-
code: lambda.Code.fromAsset(path.join(__dirname, '../../../assets/lambdas/sign-fn-url/sign-fn-url.edge-lambda')),
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
exports.SignFnUrlFunction = SignFnUrlFunction;
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1mbi11cmwtZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGFtYmRhcy9zaWduLWZuLXVybC9zaWduLWZuLXVybC1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrRkFBa0Y7QUFDbEYsNkJBQTZCO0FBQzdCLHlEQUF5RDtBQUN6RCxpREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLGlCQUFrQixTQUFRLFVBQVUsQ0FBQyxZQUFZLENBQUMsWUFBWTtJQUN6RSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLG9EQUFvRDtZQUNqRSxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUN0RSxPQUFPLEVBQUUsZUFBZTtZQUN4QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsNkRBQTZELENBQUMsQ0FBQztTQUNqSCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFWRCw4Q0FVQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcInBucG0gZGx4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogUHJvcHMgZm9yIFNpZ25GblVybEZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbkZuVXJsRnVuY3Rpb25Qcm9wcyBleHRlbmRzIGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvblByb3BzIHtcbn1cblxuLyoqXG4gKiBBbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIHdoaWNoIGV4ZWN1dGVzIHNyYy9sYW1iZGFzL3NpZ24tZm4tdXJsL3NpZ24tZm4tdXJsLlxuICovXG5leHBvcnQgY2xhc3MgU2lnbkZuVXJsRnVuY3Rpb24gZXh0ZW5kcyBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFNpZ25GblVybEZ1bmN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnc3JjL2xhbWJkYXMvc2lnbi1mbi11cmwvc2lnbi1mbi11cmwuZWRnZS1sYW1iZGEudHMnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBydW50aW1lOiBuZXcgbGFtYmRhLlJ1bnRpbWUoJ25vZGVqczIyLngnLCBsYW1iZGEuUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9hc3NldHMvbGFtYmRhcy9zaWduLWZuLXVybC9zaWduLWZuLXVybC5lZGdlLWxhbWJkYScpKSxcbiAgICB9KTtcbiAgfVxufSJdfQ==
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { CloudFrontRequestHandler } from "aws-lambda";
|
|
2
|
-
/**
|
|
3
|
-
* This Lambda@Edge handler fixes s3 requests, fixes the host header, and
|
|
4
|
-
* signs requests as they're destined for Lambda Function URL that requires
|
|
5
|
-
* IAM Auth.
|
|
6
|
-
*
|
|
7
|
-
* This can be deleted/removed when CloudFront OAC Lambda supports POST requests.
|
|
8
|
-
*/
|
|
9
|
-
export declare const handler: CloudFrontRequestHandler;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handler = void 0;
|
|
4
|
-
const sign_request_1 = require("./sign-request");
|
|
5
|
-
const debug = true;
|
|
6
|
-
/**
|
|
7
|
-
* This Lambda@Edge handler fixes s3 requests, fixes the host header, and
|
|
8
|
-
* signs requests as they're destined for Lambda Function URL that requires
|
|
9
|
-
* IAM Auth.
|
|
10
|
-
*
|
|
11
|
-
* This can be deleted/removed when CloudFront OAC Lambda supports POST requests.
|
|
12
|
-
*/
|
|
13
|
-
const handler = async (event) => {
|
|
14
|
-
const request = event.Records[0]?.cf.request;
|
|
15
|
-
if (!request)
|
|
16
|
-
throw new Error("request missing");
|
|
17
|
-
if (debug)
|
|
18
|
-
console.log("input request", JSON.stringify(request, null, 2));
|
|
19
|
-
escapeQuerystring(request);
|
|
20
|
-
await (0, sign_request_1.signRequest)(request);
|
|
21
|
-
if (debug)
|
|
22
|
-
console.log("output request", JSON.stringify(request), null, 2);
|
|
23
|
-
return request;
|
|
24
|
-
};
|
|
25
|
-
exports.handler = handler;
|
|
26
|
-
/**
|
|
27
|
-
* Lambda URL will reject query parameters with brackets so we need to encode
|
|
28
|
-
* https://github.dev/pwrdrvr/lambda-url-signing/blob/main/packages/edge-to-origin/src/translate-request.ts#L19-L31
|
|
29
|
-
*/
|
|
30
|
-
function escapeQuerystring(request) {
|
|
31
|
-
request.querystring = request.querystring
|
|
32
|
-
.replace(/\[/g, "%5B")
|
|
33
|
-
.replace(/]/g, "%5D");
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1mbi11cmwuZWRnZS1sYW1iZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGFtYmRhcy9zaWduLWZuLXVybC9zaWduLWZuLXVybC5lZGdlLWxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpREFBNkM7QUFFN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBRW5COzs7Ozs7R0FNRztBQUNJLE1BQU0sT0FBTyxHQUE2QixLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDL0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDO0lBQzdDLElBQUksQ0FBQyxPQUFPO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2pELElBQUksS0FBSztRQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLE1BQU0sSUFBQSwwQkFBVyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTNCLElBQUksS0FBSztRQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0UsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBVlcsUUFBQSxPQUFPLFdBVWxCO0FBRUY7OztHQUdHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxPQUEwQjtJQUNuRCxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXO1NBQ3RDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO1NBQ3JCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2xvdWRGcm9udFJlcXVlc3QsIENsb3VkRnJvbnRSZXF1ZXN0SGFuZGxlciB9IGZyb20gXCJhd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBzaWduUmVxdWVzdCB9IGZyb20gXCIuL3NpZ24tcmVxdWVzdFwiO1xuXG5jb25zdCBkZWJ1ZyA9IHRydWU7XG5cbi8qKlxuICogVGhpcyBMYW1iZGFARWRnZSBoYW5kbGVyIGZpeGVzIHMzIHJlcXVlc3RzLCBmaXhlcyB0aGUgaG9zdCBoZWFkZXIsIGFuZFxuICogc2lnbnMgcmVxdWVzdHMgYXMgdGhleSdyZSBkZXN0aW5lZCBmb3IgTGFtYmRhIEZ1bmN0aW9uIFVSTCB0aGF0IHJlcXVpcmVzXG4gKiBJQU0gQXV0aC5cbiAqXG4gKiBUaGlzIGNhbiBiZSBkZWxldGVkL3JlbW92ZWQgd2hlbiBDbG91ZEZyb250IE9BQyBMYW1iZGEgc3VwcG9ydHMgUE9TVCByZXF1ZXN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZXI6IENsb3VkRnJvbnRSZXF1ZXN0SGFuZGxlciA9IGFzeW5jIChldmVudCkgPT4ge1xuICBjb25zdCByZXF1ZXN0ID0gZXZlbnQuUmVjb3Jkc1swXT8uY2YucmVxdWVzdDtcbiAgaWYgKCFyZXF1ZXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJyZXF1ZXN0IG1pc3NpbmdcIik7XG4gIGlmIChkZWJ1ZykgY29uc29sZS5sb2coXCJpbnB1dCByZXF1ZXN0XCIsIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QsIG51bGwsIDIpKTtcblxuICBlc2NhcGVRdWVyeXN0cmluZyhyZXF1ZXN0KTtcbiAgYXdhaXQgc2lnblJlcXVlc3QocmVxdWVzdCk7XG5cbiAgaWYgKGRlYnVnKSBjb25zb2xlLmxvZyhcIm91dHB1dCByZXF1ZXN0XCIsIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QpLCBudWxsLCAyKTtcbiAgcmV0dXJuIHJlcXVlc3Q7XG59O1xuXG4vKipcbiAqIExhbWJkYSBVUkwgd2lsbCByZWplY3QgcXVlcnkgcGFyYW1ldGVycyB3aXRoIGJyYWNrZXRzIHNvIHdlIG5lZWQgdG8gZW5jb2RlXG4gKiBodHRwczovL2dpdGh1Yi5kZXYvcHdyZHJ2ci9sYW1iZGEtdXJsLXNpZ25pbmcvYmxvYi9tYWluL3BhY2thZ2VzL2VkZ2UtdG8tb3JpZ2luL3NyYy90cmFuc2xhdGUtcmVxdWVzdC50cyNMMTktTDMxXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVF1ZXJ5c3RyaW5nKHJlcXVlc3Q6IENsb3VkRnJvbnRSZXF1ZXN0KSB7XG4gIHJlcXVlc3QucXVlcnlzdHJpbmcgPSByZXF1ZXN0LnF1ZXJ5c3RyaW5nXG4gICAgLnJlcGxhY2UoL1xcWy9nLCBcIiU1QlwiKVxuICAgIC5yZXBsYWNlKC9dL2csIFwiJTVEXCIpO1xufVxuIl19
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { CloudFrontHeaders, CloudFrontRequest } from "aws-lambda";
|
|
2
|
-
/**
|
|
3
|
-
* Enables use of IAM_AUTH on Lambda Function URL
|
|
4
|
-
* @link https://medium.com/@dario_26152/restrict-access-to-lambda-functionurl-to-cloudfront-using-aws-iam-988583834705
|
|
5
|
-
*/
|
|
6
|
-
export declare function signRequest(request: CloudFrontRequest): Promise<void>;
|
|
7
|
-
export declare function getRegionFromLambdaUrl(url: string): string;
|
|
8
|
-
/**
|
|
9
|
-
* Bag or Map used for HeaderBag or QueryStringParameterBag for `sigv4.sign()`
|
|
10
|
-
*/
|
|
11
|
-
type Bag = Record<string, string>;
|
|
12
|
-
/**
|
|
13
|
-
* Converts CloudFront headers (can have array of header values) to simple
|
|
14
|
-
* header bag (object) required by `sigv4.sign`
|
|
15
|
-
*
|
|
16
|
-
* NOTE: only includes headers allowed by origin policy to prevent signature
|
|
17
|
-
* mismatch
|
|
18
|
-
*/
|
|
19
|
-
export declare function cfHeadersToHeaderBag(headers: CloudFrontHeaders): Bag;
|
|
20
|
-
/**
|
|
21
|
-
* Converts simple header bag (object) to CloudFront headers
|
|
22
|
-
*/
|
|
23
|
-
export declare function headerBagToCfHeaders(headerBag: Bag): CloudFrontHeaders;
|
|
24
|
-
/**
|
|
25
|
-
* Converts CloudFront querystring to QueryParamaterBag for IAM Sig V4
|
|
26
|
-
*/
|
|
27
|
-
export declare function queryStringToQueryParamBag(querystring: string): Bag;
|
|
28
|
-
export {};
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.signRequest = signRequest;
|
|
4
|
-
exports.getRegionFromLambdaUrl = getRegionFromLambdaUrl;
|
|
5
|
-
exports.cfHeadersToHeaderBag = cfHeadersToHeaderBag;
|
|
6
|
-
exports.headerBagToCfHeaders = headerBagToCfHeaders;
|
|
7
|
-
exports.queryStringToQueryParamBag = queryStringToQueryParamBag;
|
|
8
|
-
// we bundle lambdas during build, so below dependencies actually don't need to be included in "dependencies"
|
|
9
|
-
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
10
|
-
const sha256_js_1 = require("@aws-crypto/sha256-js");
|
|
11
|
-
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
12
|
-
const signature_v4_1 = require("@smithy/signature-v4");
|
|
13
|
-
let sigv4;
|
|
14
|
-
/**
|
|
15
|
-
* Enables use of IAM_AUTH on Lambda Function URL
|
|
16
|
-
* @link https://medium.com/@dario_26152/restrict-access-to-lambda-functionurl-to-cloudfront-using-aws-iam-988583834705
|
|
17
|
-
*/
|
|
18
|
-
async function signRequest(request) {
|
|
19
|
-
if (!sigv4) {
|
|
20
|
-
const region = getRegionFromLambdaUrl(request.origin?.custom?.domainName || "");
|
|
21
|
-
sigv4 = getSigV4(region);
|
|
22
|
-
}
|
|
23
|
-
// remove x-forwarded-for b/c it changes from hop to hop
|
|
24
|
-
delete request.headers["x-forwarded-for"];
|
|
25
|
-
const headerBag = cfHeadersToHeaderBag(request.headers);
|
|
26
|
-
const hostname = headerBag.host;
|
|
27
|
-
if (!hostname)
|
|
28
|
-
throw new Error("host header missing");
|
|
29
|
-
let body;
|
|
30
|
-
if (request.body?.data) {
|
|
31
|
-
body = Buffer.from(request.body.data, "base64").toString();
|
|
32
|
-
}
|
|
33
|
-
const params = queryStringToQueryParamBag(request.querystring);
|
|
34
|
-
const signed = await sigv4.sign({
|
|
35
|
-
method: request.method,
|
|
36
|
-
headers: headerBag,
|
|
37
|
-
hostname,
|
|
38
|
-
path: request.uri,
|
|
39
|
-
body,
|
|
40
|
-
query: params,
|
|
41
|
-
protocol: "https",
|
|
42
|
-
});
|
|
43
|
-
request.headers = headerBagToCfHeaders(signed.headers);
|
|
44
|
-
}
|
|
45
|
-
function getSigV4(region) {
|
|
46
|
-
const accessKeyId = process.env.AWS_ACCESS_KEY_ID;
|
|
47
|
-
const secretAccessKey = process.env.AWS_SECRET_ACCESS_KEY;
|
|
48
|
-
const sessionToken = process.env.AWS_SESSION_TOKEN;
|
|
49
|
-
if (!region)
|
|
50
|
-
throw new Error("AWS_REGION missing");
|
|
51
|
-
if (!accessKeyId)
|
|
52
|
-
throw new Error("AWS_ACCESS_KEY_ID missing");
|
|
53
|
-
if (!secretAccessKey)
|
|
54
|
-
throw new Error("AWS_SECRET_ACCESS_KEY missing");
|
|
55
|
-
if (!sessionToken)
|
|
56
|
-
throw new Error("AWS_SESSION_TOKEN missing");
|
|
57
|
-
return new signature_v4_1.SignatureV4({
|
|
58
|
-
service: "lambda",
|
|
59
|
-
region,
|
|
60
|
-
credentials: {
|
|
61
|
-
accessKeyId,
|
|
62
|
-
secretAccessKey,
|
|
63
|
-
sessionToken,
|
|
64
|
-
},
|
|
65
|
-
sha256: sha256_js_1.Sha256,
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
function getRegionFromLambdaUrl(url) {
|
|
69
|
-
const region = url.split(".").at(2);
|
|
70
|
-
if (!region)
|
|
71
|
-
throw new Error("Region couldn't be extracted from Lambda Function URL");
|
|
72
|
-
return region;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Converts CloudFront headers (can have array of header values) to simple
|
|
76
|
-
* header bag (object) required by `sigv4.sign`
|
|
77
|
-
*
|
|
78
|
-
* NOTE: only includes headers allowed by origin policy to prevent signature
|
|
79
|
-
* mismatch
|
|
80
|
-
*/
|
|
81
|
-
function cfHeadersToHeaderBag(headers) {
|
|
82
|
-
const headerBag = {};
|
|
83
|
-
// assume first header value is the best match
|
|
84
|
-
// headerKey is case insensitive whereas key (adjacent property value that is
|
|
85
|
-
// not destructured) is case sensitive. we arbitrarily use case insensitive key
|
|
86
|
-
for (const [headerKey, [headerObj]] of Object.entries(headers)) {
|
|
87
|
-
const value = headerObj?.value;
|
|
88
|
-
if (value) {
|
|
89
|
-
headerBag[headerKey] = value;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return headerBag;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Converts simple header bag (object) to CloudFront headers
|
|
96
|
-
*/
|
|
97
|
-
function headerBagToCfHeaders(headerBag) {
|
|
98
|
-
const cfHeaders = {};
|
|
99
|
-
for (const [headerKey, value] of Object.entries(headerBag)) {
|
|
100
|
-
/*
|
|
101
|
-
When your Lambda function adds or modifies request headers and you don't include the header key field, Lambda@Edge automatically inserts a header key using the header name that you provide. Regardless of how you've formatted the header name, the header key that's inserted automatically is formatted with initial capitalization for each part, separated by hyphens (-).
|
|
102
|
-
See: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html
|
|
103
|
-
*/
|
|
104
|
-
cfHeaders[headerKey] = [{ value }];
|
|
105
|
-
}
|
|
106
|
-
return cfHeaders;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Converts CloudFront querystring to QueryParamaterBag for IAM Sig V4
|
|
110
|
-
*/
|
|
111
|
-
function queryStringToQueryParamBag(querystring) {
|
|
112
|
-
const oldParams = new URLSearchParams(querystring);
|
|
113
|
-
const newParams = {};
|
|
114
|
-
for (const [k, v] of oldParams) {
|
|
115
|
-
newParams[k] = v;
|
|
116
|
-
}
|
|
117
|
-
return newParams;
|
|
118
|
-
}
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1yZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xhbWJkYXMvc2lnbi1mbi11cmwvc2lnbi1yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsa0NBMkJDO0FBc0JELHdEQUtDO0FBYUQsb0RBWUM7QUFLRCxvREFVQztBQUtELGdFQU9DO0FBdkhELDZHQUE2RztBQUM3Ryw2REFBNkQ7QUFDN0QscURBQStDO0FBQy9DLDZEQUE2RDtBQUM3RCx1REFBbUQ7QUFHbkQsSUFBSSxLQUFrQixDQUFDO0FBRXZCOzs7R0FHRztBQUNJLEtBQUssVUFBVSxXQUFXLENBQUMsT0FBMEI7SUFDMUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQ25DLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQ3pDLENBQUM7UUFDRixLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCx3REFBd0Q7SUFDeEQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUMsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDaEMsSUFBSSxDQUFDLFFBQVE7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdEQsSUFBSSxJQUF3QixDQUFDO0lBQzdCLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lB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QUFDLFdBQW1CO0lBQzVELE1BQU0sU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sU0FBUyxHQUFRLEVBQUUsQ0FBQztJQUMxQixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7UUFDL0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHdlIGJ1bmRsZSBsYW1iZGFzIGR1cmluZyBidWlsZCwgc28gYmVsb3cgZGVwZW5kZW5jaWVzIGFjdHVhbGx5IGRvbid0IG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gXCJkZXBlbmRlbmNpZXNcIlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHsgU2hhMjU2IH0gZnJvbSBcIkBhd3MtY3J5cHRvL3NoYTI1Ni1qc1wiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHsgU2lnbmF0dXJlVjQgfSBmcm9tIFwiQHNtaXRoeS9zaWduYXR1cmUtdjRcIjtcbmltcG9ydCB0eXBlIHsgQ2xvdWRGcm9udEhlYWRlcnMsIENsb3VkRnJvbnRSZXF1ZXN0IH0gZnJvbSBcImF3cy1sYW1iZGFcIjtcblxubGV0IHNpZ3Y0OiBTaWduYXR1cmVWNDtcblxuLyoqXG4gKiBFbmFibGVzIHVzZSBvZiBJQU1fQVVUSCBvbiBMYW1iZGEgRnVuY3Rpb24gVVJMXG4gKiBAbGluayBodHRwczovL21lZGl1bS5jb20vQGRhcmlvXzI2MTUyL3Jlc3RyaWN0LWFjY2Vzcy10by1sYW1iZGEtZnVuY3Rpb251cmwtdG8tY2xvdWRmcm9udC11c2luZy1hd3MtaWFtLTk4ODU4MzgzNDcwNVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2lnblJlcXVlc3QocmVxdWVzdDogQ2xvdWRGcm9udFJlcXVlc3QpIHtcbiAgaWYgKCFzaWd2NCkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IGdldFJlZ2lvbkZyb21MYW1iZGFVcmwoXG4gICAgICByZXF1ZXN0Lm9yaWdpbj8uY3VzdG9tPy5kb21haW5OYW1lIHx8IFwiXCIsXG4gICAgKTtcbiAgICBzaWd2NCA9IGdldFNpZ1Y0KHJlZ2lvbik7XG4gIH1cbiAgLy8gcmVtb3ZlIHgtZm9yd2FyZGVkLWZvciBiL2MgaXQgY2hhbmdlcyBmcm9tIGhvcCB0byBob3BcbiAgZGVsZXRlIHJlcXVlc3QuaGVhZGVyc1tcIngtZm9yd2FyZGVkLWZvclwiXTtcbiAgY29uc3QgaGVhZGVyQmFnID0gY2ZIZWFkZXJzVG9IZWFkZXJCYWcocmVxdWVzdC5oZWFkZXJzKTtcbiAgY29uc3QgaG9zdG5hbWUgPSBoZWFkZXJCYWcuaG9zdDtcbiAgaWYgKCFob3N0bmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiaG9zdCBoZWFkZXIgbWlzc2luZ1wiKTtcbiAgbGV0IGJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKHJlcXVlc3QuYm9keT8uZGF0YSkge1xuICAgIGJvZHkgPSBCdWZmZXIuZnJvbShyZXF1ZXN0LmJvZHkuZGF0YSwgXCJiYXNlNjRcIikudG9TdHJpbmcoKTtcbiAgfVxuICBjb25zdCBwYXJhbXMgPSBxdWVyeVN0cmluZ1RvUXVlcnlQYXJhbUJhZyhyZXF1ZXN0LnF1ZXJ5c3RyaW5nKTtcbiAgY29uc3Qgc2lnbmVkID0gYXdhaXQgc2lndjQuc2lnbih7XG4gICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICBoZWFkZXJzOiBoZWFkZXJCYWcsXG4gICAgaG9zdG5hbWUsXG4gICAgcGF0aDogcmVxdWVzdC51cmksXG4gICAgYm9keSxcbiAgICBxdWVyeTogcGFyYW1zLFxuICAgIHByb3RvY29sOiBcImh0dHBzXCIsXG4gIH0pO1xuICByZXF1ZXN0LmhlYWRlcnMgPSBoZWFkZXJCYWdUb0NmSGVhZGVycyhzaWduZWQuaGVhZGVycyk7XG59XG5cbmZ1bmN0aW9uIGdldFNpZ1Y0KHJlZ2lvbjogc3RyaW5nKTogU2lnbmF0dXJlVjQge1xuICBjb25zdCBhY2Nlc3NLZXlJZCA9IHByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEO1xuICBjb25zdCBzZWNyZXRBY2Nlc3NLZXkgPSBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVk7XG4gIGNvbnN0IHNlc3Npb25Ub2tlbiA9IHByb2Nlc3MuZW52LkFXU19TRVNTSU9OX1RPS0VOO1xuICBpZiAoIXJlZ2lvbikgdGhyb3cgbmV3IEVycm9yKFwiQVdTX1JFR0lPTiBtaXNzaW5nXCIpO1xuICBpZiAoIWFjY2Vzc0tleUlkKSB0aHJvdyBuZXcgRXJyb3IoXCJBV1NfQUNDRVNTX0tFWV9JRCBtaXNzaW5nXCIpO1xuICBpZiAoIXNlY3JldEFjY2Vzc0tleSkgdGhyb3cgbmV3IEVycm9yKFwiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIG1pc3NpbmdcIik7XG4gIGlmICghc2Vzc2lvblRva2VuKSB0aHJvdyBuZXcgRXJyb3IoXCJBV1NfU0VTU0lPTl9UT0tFTiBtaXNzaW5nXCIpO1xuICByZXR1cm4gbmV3IFNpZ25hdHVyZVY0KHtcbiAgICBzZXJ2aWNlOiBcImxhbWJkYVwiLFxuICAgIHJlZ2lvbixcbiAgICBjcmVkZW50aWFsczoge1xuICAgICAgYWNjZXNzS2V5SWQsXG4gICAgICBzZWNyZXRBY2Nlc3NLZXksXG4gICAgICBzZXNzaW9uVG9rZW4sXG4gICAgfSxcbiAgICBzaGEyNTY6IFNoYTI1NixcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWdpb25Gcm9tTGFtYmRhVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVnaW9uID0gdXJsLnNwbGl0KFwiLlwiKS5hdCgyKTtcbiAgaWYgKCFyZWdpb24pXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUmVnaW9uIGNvdWxkbid0IGJlIGV4dHJhY3RlZCBmcm9tIExhbWJkYSBGdW5jdGlvbiBVUkxcIik7XG4gIHJldHVybiByZWdpb247XG59XG5cbi8qKlxuICogQmFnIG9yIE1hcCB1c2VkIGZvciBIZWFkZXJCYWcgb3IgUXVlcnlTdHJpbmdQYXJhbWV0ZXJCYWcgZm9yIGBzaWd2NC5zaWduKClgXG4gKi9cbnR5cGUgQmFnID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbi8qKlxuICogQ29udmVydHMgQ2xvdWRGcm9udCBoZWFkZXJzIChjYW4gaGF2ZSBhcnJheSBvZiBoZWFkZXIgdmFsdWVzKSB0byBzaW1wbGVcbiAqIGhlYWRlciBiYWcgKG9iamVjdCkgcmVxdWlyZWQgYnkgYHNpZ3Y0LnNpZ25gXG4gKlxuICogTk9URTogb25seSBpbmNsdWRlcyBoZWFkZXJzIGFsbG93ZWQgYnkgb3JpZ2luIHBvbGljeSB0byBwcmV2ZW50IHNpZ25hdHVyZVxuICogbWlzbWF0Y2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNmSGVhZGVyc1RvSGVhZGVyQmFnKGhlYWRlcnM6IENsb3VkRnJvbnRIZWFkZXJzKTogQmFnIHtcbiAgY29uc3QgaGVhZGVyQmFnOiBCYWcgPSB7fTtcbiAgLy8gYXNzdW1lIGZpcnN0IGhlYWRlciB2YWx1ZSBpcyB0aGUgYmVzdCBtYXRjaFxuICAvLyBoZWFkZXJLZXkgaXMgY2FzZSBpbnNlbnNpdGl2ZSB3aGVyZWFzIGtleSAoYWRqYWNlbnQgcHJvcGVydHkgdmFsdWUgdGhhdCBpc1xuICAvLyBub3QgZGVzdHJ1Y3R1cmVkKSBpcyBjYXNlIHNlbnNpdGl2ZS4gd2UgYXJiaXRyYXJpbHkgdXNlIGNhc2UgaW5zZW5zaXRpdmUga2V5XG4gIGZvciAoY29uc3QgW2hlYWRlcktleSwgW2hlYWRlck9ial1dIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgY29uc3QgdmFsdWUgPSBoZWFkZXJPYmo/LnZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaGVhZGVyQmFnW2hlYWRlcktleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhlYWRlckJhZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBzaW1wbGUgaGVhZGVyIGJhZyAob2JqZWN0KSB0byBDbG91ZEZyb250IGhlYWRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhlYWRlckJhZ1RvQ2ZIZWFkZXJzKGhlYWRlckJhZzogQmFnKTogQ2xvdWRGcm9udEhlYWRlcnMge1xuICBjb25zdCBjZkhlYWRlcnM6IENsb3VkRnJvbnRIZWFkZXJzID0ge307XG4gIGZvciAoY29uc3QgW2hlYWRlcktleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlckJhZykpIHtcbiAgICAvKlxuICAgICAgV2hlbiB5b3VyIExhbWJkYSBmdW5jdGlvbiBhZGRzIG9yIG1vZGlmaWVzIHJlcXVlc3QgaGVhZGVycyBhbmQgeW91IGRvbid0IGluY2x1ZGUgdGhlIGhlYWRlciBrZXkgZmllbGQsIExhbWJkYUBFZGdlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBhIGhlYWRlciBrZXkgdXNpbmcgdGhlIGhlYWRlciBuYW1lIHRoYXQgeW91IHByb3ZpZGUuIFJlZ2FyZGxlc3Mgb2YgaG93IHlvdSd2ZSBmb3JtYXR0ZWQgdGhlIGhlYWRlciBuYW1lLCB0aGUgaGVhZGVyIGtleSB0aGF0J3MgaW5zZXJ0ZWQgYXV0b21hdGljYWxseSBpcyBmb3JtYXR0ZWQgd2l0aCBpbml0aWFsIGNhcGl0YWxpemF0aW9uIGZvciBlYWNoIHBhcnQsIHNlcGFyYXRlZCBieSBoeXBoZW5zICgtKS5cbiAgICAgIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2xhbWJkYS1ldmVudC1zdHJ1Y3R1cmUuaHRtbFxuICAgICovXG4gICAgY2ZIZWFkZXJzW2hlYWRlcktleV0gPSBbeyB2YWx1ZSB9XTtcbiAgfVxuICByZXR1cm4gY2ZIZWFkZXJzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIENsb3VkRnJvbnQgcXVlcnlzdHJpbmcgdG8gUXVlcnlQYXJhbWF0ZXJCYWcgZm9yIElBTSBTaWcgVjRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5U3RyaW5nVG9RdWVyeVBhcmFtQmFnKHF1ZXJ5c3RyaW5nOiBzdHJpbmcpOiBCYWcge1xuICBjb25zdCBvbGRQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5c3RyaW5nKTtcbiAgY29uc3QgbmV3UGFyYW1zOiBCYWcgPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2Ygb2xkUGFyYW1zKSB7XG4gICAgbmV3UGFyYW1zW2tdID0gdjtcbiAgfVxuICByZXR1cm4gbmV3UGFyYW1zO1xufVxuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const sign_request_1 = require("./sign-request");
|
|
4
|
-
describe("LambdaOriginRequestIamAuth", () => {
|
|
5
|
-
test("signRequest should add x-amz headers", async () => {
|
|
6
|
-
// dummy AWS credentials
|
|
7
|
-
process.env = { ...process.env, ...getFakeAwsCreds() };
|
|
8
|
-
const event = getFakePageRequest();
|
|
9
|
-
const request = event.Records[0]?.cf.request;
|
|
10
|
-
if (!request)
|
|
11
|
-
throw new Error("Missing request");
|
|
12
|
-
await (0, sign_request_1.signRequest)(request);
|
|
13
|
-
const securityHeaders = [
|
|
14
|
-
"x-amz-date",
|
|
15
|
-
"x-amz-security-token",
|
|
16
|
-
"x-amz-content-sha256",
|
|
17
|
-
"authorization",
|
|
18
|
-
];
|
|
19
|
-
const hasSignedHeaders = securityHeaders.every((h) => h in request.headers);
|
|
20
|
-
expect(hasSignedHeaders).toBe(true);
|
|
21
|
-
});
|
|
22
|
-
test("getRegionFromLambdaUrl should correctly get region", () => {
|
|
23
|
-
const event = getFakePageRequest();
|
|
24
|
-
const request = event.Records[0]?.cf.request;
|
|
25
|
-
if (!request)
|
|
26
|
-
throw new Error("Missing request");
|
|
27
|
-
const actual = (0, sign_request_1.getRegionFromLambdaUrl)(request.origin?.custom?.domainName || "");
|
|
28
|
-
expect(actual).toBe("us-east-1");
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
function getFakePageRequest() {
|
|
32
|
-
return {
|
|
33
|
-
Records: [
|
|
34
|
-
{
|
|
35
|
-
cf: {
|
|
36
|
-
config: {
|
|
37
|
-
distributionDomainName: "d6b8brjqfujeb.cloudfront.net",
|
|
38
|
-
distributionId: "EHX2SDUU61T7U",
|
|
39
|
-
eventType: "origin-request",
|
|
40
|
-
requestId: "",
|
|
41
|
-
},
|
|
42
|
-
request: {
|
|
43
|
-
clientIp: "1.1.1.1",
|
|
44
|
-
headers: {
|
|
45
|
-
host: [
|
|
46
|
-
{
|
|
47
|
-
key: "Host",
|
|
48
|
-
value: "d6b8brjqfujeb.cloudfront.net",
|
|
49
|
-
},
|
|
50
|
-
],
|
|
51
|
-
"accept-language": [
|
|
52
|
-
{
|
|
53
|
-
key: "Accept-Language",
|
|
54
|
-
value: "en-US,en;q=0.9",
|
|
55
|
-
},
|
|
56
|
-
],
|
|
57
|
-
referer: [
|
|
58
|
-
{
|
|
59
|
-
key: "Referer",
|
|
60
|
-
value: "https://d6b8brjqfujeb.cloudfront.net/some/path",
|
|
61
|
-
},
|
|
62
|
-
],
|
|
63
|
-
"x-forwarded-for": [
|
|
64
|
-
{
|
|
65
|
-
key: "X-Forwarded-For",
|
|
66
|
-
value: "1.1.1.1",
|
|
67
|
-
},
|
|
68
|
-
],
|
|
69
|
-
"user-agent": [
|
|
70
|
-
{
|
|
71
|
-
key: "User-Agent",
|
|
72
|
-
value: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
|
|
73
|
-
},
|
|
74
|
-
],
|
|
75
|
-
via: [
|
|
76
|
-
{
|
|
77
|
-
key: "Via",
|
|
78
|
-
value: "2.0 8bf94e29f889f8d0076c4502ae008b58.cloudfront.net (CloudFront)",
|
|
79
|
-
},
|
|
80
|
-
],
|
|
81
|
-
"accept-encoding": [
|
|
82
|
-
{
|
|
83
|
-
key: "Accept-Encoding",
|
|
84
|
-
value: "br,gzip",
|
|
85
|
-
},
|
|
86
|
-
],
|
|
87
|
-
"sec-ch-ua": [
|
|
88
|
-
{
|
|
89
|
-
key: "sec-ch-ua",
|
|
90
|
-
value: '"Google Chrome";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
|
|
91
|
-
},
|
|
92
|
-
],
|
|
93
|
-
},
|
|
94
|
-
method: "GET",
|
|
95
|
-
querystring: "",
|
|
96
|
-
uri: "/some/path",
|
|
97
|
-
origin: {
|
|
98
|
-
custom: {
|
|
99
|
-
customHeaders: {},
|
|
100
|
-
domainName: "kjtbbx7u533q7p7n5font6gpci0phrng.lambda-url.us-east-1.on.aws",
|
|
101
|
-
keepaliveTimeout: 5,
|
|
102
|
-
path: "",
|
|
103
|
-
port: 443,
|
|
104
|
-
protocol: "https",
|
|
105
|
-
readTimeout: 30,
|
|
106
|
-
sslProtocols: ["TLSv1.2"],
|
|
107
|
-
},
|
|
108
|
-
},
|
|
109
|
-
body: {
|
|
110
|
-
action: "read-only",
|
|
111
|
-
data: "",
|
|
112
|
-
encoding: "base64",
|
|
113
|
-
inputTruncated: false,
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
},
|
|
118
|
-
],
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
function getFakeAwsCreds() {
|
|
122
|
-
return {
|
|
123
|
-
AWS_REGION: "us-east-1",
|
|
124
|
-
AWS_ACCESS_KEY_ID: "AKIAIOSFODNN7EXAMPLE",
|
|
125
|
-
AWS_SECRET_ACCESS_KEY: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
|
|
126
|
-
AWS_SESSION_TOKEN: "ZQoJb3JpZ2luX2VjEFgaCXVzLWVhc3QtMSJGMEQCIHijzdTXh59aSe2hRfCWpFd2/jacPUC+8rCq3qBIiuG2AiAGX8jqld+p04nPYfuShi1lLN/Z1hEXG9QSNEmEFLTxGSqmAgiR//////////8BEAIaDDI2ODkxNDQ2NTIzMSIMrAMO5/GTvMgoG+chKvoB4f4V1TfkZiHOlmeMK6Ep58mav65A0WU3K9WPzdrJojnGqqTuS85zTlKhm3lfmMxCOtwS/OlOuiBQ1MZNlksK2je1FazgbXN46fNSi+iHiY9VfyRAd0wSLmXB8FFrCGsU92QOy/+deji0qIVadsjEyvBRxzQj5oIUI5sb74Yt7uNvka9fVZcT4s4IndYda0N7oZwIrApCuzzBMuoMAhabmgVrZTbiLmvOiFHS2XZWBySABdygqaIzfV7G4hjckvcXhtxpkw+HJUZTNzVUlspghzte1UG6VvIRV8ax3kWA3zqm8nA/1gHkl40DubJIXz1AJbg5Cps5moE1pjD7vNijBjqeAZh0Q/e0awIHnV4dXMfXUu5mWJ7Db9K1eUlSSL9FyiKeKd94HEdrbIrnPuIWVT/I/5RjNm7NgPYiqmpyx3fSpVcq9CKws0oEfBw6J9Hxk0IhV8yWFZYNMWIarUUZdmL9vVeJmFZmwyL4JjY1s/SZIU/oa8DtvkmP4RG4tTJfpyyhoKL0wJOevkYyoigNllBlLN59SZAT8CCADpN/B+sK",
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1yZXF1ZXN0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGFtYmRhcy9zaWduLWZuLXVybC9zaWduLXJlcXVlc3QudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLGlEQUFxRTtBQUVyRSxRQUFRLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO0lBQzFDLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN0RCx3QkFBd0I7UUFDeEIsT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLGVBQWUsRUFBRSxFQUFFLENBQUM7UUFDdkQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakQsTUFBTSxJQUFBLDBCQUFXLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsTUFBTSxlQUFlLEdBQUc7WUFDdEIsWUFBWTtZQUNaLHNCQUFzQjtZQUN0QixzQkFBc0I7WUFDdEIsZUFBZTtTQUNoQixDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7UUFDOUQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQ0FBc0IsRUFDbkMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FDekMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsa0JBQWtCO0lBQ3pCLE9BQU87UUFDTCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxFQUFFLEVBQUU7b0JBQ0YsTUFBTSxFQUFFO3dCQUNOLHNCQUFzQixFQUFFLDhCQUE4Qjt3QkFDdEQsY0FBYyxFQUFFLGVBQWU7d0JBQy9CLFNBQVMsRUFBRSxnQkFBZ0I7d0JBQzNCLFNBQVMsRUFBRSxFQUFFO3FCQUNkO29CQUNELE9BQU8sRUFBRTt3QkFDUCxRQUFRLEVBQUUsU0FBUzt3QkFDbkIsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRTtnQ0FDSjtvQ0FDRSxHQUFHLEVBQUUsTUFBTTtvQ0FDWCxLQUFLLEVBQUUsOEJBQThCO2lDQUN0Qzs2QkFDRjs0QkFDRCxpQkFBaUIsRUFBRTtnQ0FDakI7b0NBQ0UsR0FBRyxFQUFFLGlCQUFpQjtvQ0FDdEIsS0FBSyxFQUFFLGdCQUFnQjtpQ0FDeEI7NkJBQ0Y7NEJBQ0QsT0FBTyxFQUFFO2dDQUNQO29DQUNFLEdBQUcsRUFBRSxTQUFTO29DQUNkLEtBQUssRUFBRSxnREFBZ0Q7aUNBQ3hEOzZCQUNGOzRCQUNELGlCQUFpQixFQUFFO2dDQUNqQjtvQ0FDRSxHQUFHLEVBQUUsaUJBQWlCO29DQUN0QixLQUFLLEVBQUUsU0FBUztpQ0FDakI7NkJBQ0Y7NEJBQ0QsWUFBWSxFQUFFO2dDQUNaO29DQUNFLEdBQUcsRUFBRSxZQUFZO29DQUNqQixLQUFLLEVBQ0gsdUhBQXVIO2lDQUMxSDs2QkFDRjs0QkFDRCxHQUFHLEVBQUU7Z0NBQ0g7b0NBQ0UsR0FBRyxFQUFFLEtBQUs7b0NBQ1YsS0FBSyxFQUNILGtFQUFrRTtpQ0FDckU7NkJBQ0Y7NEJBQ0QsaUJBQWlCLEVBQUU7Z0NBQ2pCO29DQUNFLEdBQUcsRUFBRSxpQkFBaUI7b0NBQ3RCLEtBQUssRUFBRSxTQUFTO2lDQUNqQjs2QkFDRjs0QkFDRCxXQUFXLEVBQUU7Z0NBQ1g7b0NBQ0UsR0FBRyxFQUFFLFdBQVc7b0NBQ2hCLEtBQUssRUFDSCxtRUFBbUU7aUNBQ3RFOzZCQUNGO3lCQUNGO3dCQUNELE1BQU0sRUFBRSxLQUFLO3dCQUNiLFdBQVcsRUFBRSxFQUFFO3dCQUNmLEdBQUcsRUFBRSxZQUFZO3dCQUNqQixNQUFNLEVBQUU7NEJBQ04sTUFBTSxFQUFFO2dDQUNOLGFBQWEsRUFBRSxFQUFFO2dDQUNqQixVQUFVLEVBQ1IsOERBQThEO2dDQUNoRSxnQkFBZ0IsRUFBRSxDQUFDO2dDQUNuQixJQUFJLEVBQUUsRUFBRTtnQ0FDUixJQUFJLEVBQUUsR0FBRztnQ0FDVCxRQUFRLEVBQUUsT0FBTztnQ0FDakIsV0FBVyxFQUFFLEVBQUU7Z0NBQ2YsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDOzZCQUMxQjt5QkFDRjt3QkFDRCxJQUFJLEVBQUU7NEJBQ0osTUFBTSxFQUFFLFdBQVc7NEJBQ25CLElBQUksRUFBRSxFQUFFOzRCQUNSLFFBQVEsRUFBRSxRQUFROzRCQUNsQixjQUFjLEVBQUUsS0FBSzt5QkFDdEI7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGVBQWU7SUFDdEIsT0FBTztRQUNMLFVBQVUsRUFBRSxXQUFXO1FBQ3ZCLGlCQUFpQixFQUFFLHNCQUFzQjtRQUN6QyxxQkFBcUIsRUFBRSwwQ0FBMEM7UUFDakUsaUJBQWlCLEVBQ2YsOHVCQUE4dUI7S0FDanZCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDbG91ZEZyb250UmVxdWVzdEV2ZW50IH0gZnJvbSBcImF3cy1sYW1iZGFcIjtcbmltcG9ydCB7IGdldFJlZ2lvbkZyb21MYW1iZGFVcmwsIHNpZ25SZXF1ZXN0IH0gZnJvbSBcIi4vc2lnbi1yZXF1ZXN0XCI7XG5cbmRlc2NyaWJlKFwiTGFtYmRhT3JpZ2luUmVxdWVzdElhbUF1dGhcIiwgKCkgPT4ge1xuICB0ZXN0KFwic2lnblJlcXVlc3Qgc2hvdWxkIGFkZCB4LWFteiBoZWFkZXJzXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBkdW1teSBBV1MgY3JlZGVudGlhbHNcbiAgICBwcm9jZXNzLmVudiA9IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLmdldEZha2VBd3NDcmVkcygpIH07XG4gICAgY29uc3QgZXZlbnQgPSBnZXRGYWtlUGFnZVJlcXVlc3QoKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gZXZlbnQuUmVjb3Jkc1swXT8uY2YucmVxdWVzdDtcbiAgICBpZiAoIXJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcmVxdWVzdFwiKTtcbiAgICBhd2FpdCBzaWduUmVxdWVzdChyZXF1ZXN0KTtcbiAgICBjb25zdCBzZWN1cml0eUhlYWRlcnMgPSBbXG4gICAgICBcIngtYW16LWRhdGVcIixcbiAgICAgIFwieC1hbXotc2VjdXJpdHktdG9rZW5cIixcbiAgICAgIFwieC1hbXotY29udGVudC1zaGEyNTZcIixcbiAgICAgIFwiYXV0aG9yaXphdGlvblwiLFxuICAgIF07XG4gICAgY29uc3QgaGFzU2lnbmVkSGVhZGVycyA9IHNlY3VyaXR5SGVhZGVycy5ldmVyeSgoaCkgPT4gaCBpbiByZXF1ZXN0LmhlYWRlcnMpO1xuICAgIGV4cGVjdChoYXNTaWduZWRIZWFkZXJzKS50b0JlKHRydWUpO1xuICB9KTtcblxuICB0ZXN0KFwiZ2V0UmVnaW9uRnJvbUxhbWJkYVVybCBzaG91bGQgY29ycmVjdGx5IGdldCByZWdpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0gZ2V0RmFrZVBhZ2VSZXF1ZXN0KCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGV2ZW50LlJlY29yZHNbMF0/LmNmLnJlcXVlc3Q7XG4gICAgaWYgKCFyZXF1ZXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHJlcXVlc3RcIik7XG4gICAgY29uc3QgYWN0dWFsID0gZ2V0UmVnaW9uRnJvbUxhbWJkYVVybChcbiAgICAgIHJlcXVlc3Qub3JpZ2luPy5jdXN0b20/LmRvbWFpbk5hbWUgfHwgXCJcIixcbiAgICApO1xuICAgIGV4cGVjdChhY3R1YWwpLnRvQmUoXCJ1cy1lYXN0LTFcIik7XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGdldEZha2VQYWdlUmVxdWVzdCgpOiBDbG91ZEZyb250UmVxdWVzdEV2ZW50IHtcbiAgcmV0dXJuIHtcbiAgICBSZWNvcmRzOiBbXG4gICAgICB7XG4gICAgICAgIGNmOiB7XG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBkaXN0cmlidXRpb25Eb21haW5OYW1lOiBcImQ2YjhicmpxZnVqZWIuY2xvdWRmcm9udC5uZXRcIixcbiAgICAgICAgICAgIGRpc3RyaWJ1dGlvbklkOiBcIkVIWDJTRFVVNjFUN1VcIixcbiAgICAgICAgICAgIGV2ZW50VHlwZTogXCJvcmlnaW4tcmVxdWVzdFwiLFxuICAgICAgICAgICAgcmVxdWVzdElkOiBcIlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgY2xpZW50SXA6IFwiMS4xLjEuMVwiLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBob3N0OiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcIkhvc3RcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImQ2YjhicmpxZnVqZWIuY2xvdWRmcm9udC5uZXRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBcImFjY2VwdC1sYW5ndWFnZVwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcIkFjY2VwdC1MYW5ndWFnZVwiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiZW4tVVMsZW47cT0wLjlcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZWZlcmVyOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcIlJlZmVyZXJcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImh0dHBzOi8vZDZiOGJyanFmdWplYi5jbG91ZGZyb250Lm5ldC9zb21lL3BhdGhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBcIngtZm9yd2FyZGVkLWZvclwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcIlgtRm9yd2FyZGVkLUZvclwiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiMS4xLjEuMVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIFwidXNlci1hZ2VudFwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcIlVzZXItQWdlbnRcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICBcIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC4wLjAgU2FmYXJpLzUzNy4zNlwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHZpYTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogXCJWaWFcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICBcIjIuMCA4YmY5NGUyOWY4ODlmOGQwMDc2YzQ1MDJhZTAwOGI1OC5jbG91ZGZyb250Lm5ldCAoQ2xvdWRGcm9udClcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBcImFjY2VwdC1lbmNvZGluZ1wiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcIkFjY2VwdC1FbmNvZGluZ1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiYnIsZ3ppcFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIFwic2VjLWNoLXVhXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IFwic2VjLWNoLXVhXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgJ1wiR29vZ2xlIENocm9tZVwiO3Y9XCIxMTNcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMTNcIiwgXCJOb3QtQS5CcmFuZFwiO3Y9XCIyNFwiJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgIHF1ZXJ5c3RyaW5nOiBcIlwiLFxuICAgICAgICAgICAgdXJpOiBcIi9zb21lL3BhdGhcIixcbiAgICAgICAgICAgIG9yaWdpbjoge1xuICAgICAgICAgICAgICBjdXN0b206IHtcbiAgICAgICAgICAgICAgICBjdXN0b21IZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgICBkb21haW5OYW1lOlxuICAgICAgICAgICAgICAgICAgXCJranRiYng3dTUzM3E3cDduNWZvbnQ2Z3BjaTBwaHJuZy5sYW1iZGEtdXJsLnVzLWVhc3QtMS5vbi5hd3NcIixcbiAgICAgICAgICAgICAgICBrZWVwYWxpdmVUaW1lb3V0OiA1LFxuICAgICAgICAgICAgICAgIHBhdGg6IFwiXCIsXG4gICAgICAgICAgICAgICAgcG9ydDogNDQzLFxuICAgICAgICAgICAgICAgIHByb3RvY29sOiBcImh0dHBzXCIsXG4gICAgICAgICAgICAgICAgcmVhZFRpbWVvdXQ6IDMwLFxuICAgICAgICAgICAgICAgIHNzbFByb3RvY29sczogW1wiVExTdjEuMlwiXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgIGFjdGlvbjogXCJyZWFkLW9ubHlcIixcbiAgICAgICAgICAgICAgZGF0YTogXCJcIixcbiAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwiYmFzZTY0XCIsXG4gICAgICAgICAgICAgIGlucHV0VHJ1bmNhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RmFrZUF3c0NyZWRzKCkge1xuICByZXR1cm4ge1xuICAgIEFXU19SRUdJT046IFwidXMtZWFzdC0xXCIsXG4gICAgQVdTX0FDQ0VTU19LRVlfSUQ6IFwiQUtJQUlPU0ZPRE5ON0VYQU1QTEVcIixcbiAgICBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6IFwid0phbHJYVXRuRkVNSS9LN01ERU5HL2JQeFJmaUNZRVhBTVBMRUtFWVwiLFxuICAgIEFXU19TRVNTSU9OX1RPS0VOOlxuICAgICAgXCJaUW9KYjNKcFoybHVYMlZqRUZnYUNYVnpMV1ZoYzNRdE1TSkdNRVFDSUhpanpkVFhoNTlhU2UyaFJmQ1dwRmQyL2phY1BVQys4ckNxM3FCSWl1RzJBaUFHWDhqcWxkK3AwNG5QWWZ1U2hpMWxMTi9aMWhFWEc5UVNORW1FRkxUeEdTcW1BZ2lSLy8vLy8vLy8vLzhCRUFJYURESTJPRGt4TkRRMk5USXpNU0lNckFNTzUvR1R2TWdvRytjaEt2b0I0ZjRWMVRma1ppSE9sbWVNSzZFcDU4bWF2NjVBMFdVM0s5V1B6ZHJKb2puR3FxVHVTODV6VGxLaG0zbGZtTXhDT3R3Uy9PbE91aUJRMU1aTmxrc0syamUxRmF6Z2JYTjQ2Zk5TaStpSGlZOVZmeVJBZDB3U0xtWEI4RkZyQ0dzVTkyUU95LytkZWppMHFJVmFkc2pFeXZCUnh6UWo1b0lVSTVzYjc0WXQ3dU52a2E5ZlZaY1Q0czRJbmRZZGEwTjdvWndJckFwQ3V6ekJNdW9NQWhhYm1nVnJaVGJpTG12T2lGSFMyWFpXQnlTQUJkeWdxYUl6ZlY3RzRoamNrdmNYaHR4cGt3K0hKVVpUTnpWVWxzcGdoenRlMVVHNlZ2SVJWOGF4M2tXQTN6cW04bkEvMWdIa2w0MER1YkpJWHoxQUpiZzVDcHM1bW9FMXBqRDd2TmlqQmpxZUFaaDBRL2UwYXdJSG5WNGRYTWZYVXU1bVdKN0RiOUsxZVVsU1NMOUZ5aUtlS2Q5NEhFZHJiSXJuUHVJV1ZUL0kvNVJqTm03TmdQWWlxbXB5eDNmU3BWY3E5Q0t3czBvRWZCdzZKOUh4azBJaFY4eVdGWllOTVdJYXJVVVpkbUw5dlZlSm1GWm13eUw0SmpZMXMvU1pJVS9vYThEdHZrbVA0Ukc0dFRKZnB5eWhvS0wwd0pPZXZrWXlvaWdObGxCbExONTlTWkFUOENDQURwTi9CK3NLXCIsXG4gIH07XG59XG4iXX0=
|