@aligent/cdk-prerender-proxy 1.0.4 → 1.1.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.
|
@@ -2,9 +2,13 @@ import "source-map-support/register";
|
|
|
2
2
|
import { CloudFrontRequest, CloudFrontRequestEvent } from "aws-lambda";
|
|
3
3
|
|
|
4
4
|
const IS_BOT =
|
|
5
|
-
/googlebot|Google-InspectionTool|Schema-Markup-Validator|SchemaBot|chrome-lighthouse|
|
|
5
|
+
/googlebot|bingbot|yandex|baiduspider|facebookexternalhit|facebookbot|twitterbot|linkedinbot|embedly|showyoubot|outbrain|pinterestbot|slackbot|vkShare|W3C_Validator|whatsapp|ImgProxy|flipboard|tumblr|bitlybot|skype|nuzzel|discordbot|google|qwantify|pinterest|lighthouse|telegrambo|Google-InspectionTool|Schema-Markup-Validator|SchemaBot|chrome-lighthouse|adsbot-google|Feedfetcher-Google|Facebot|rogerbot|quora link preview|SiteAuditBot|Storebot|Mediapartners-Google|AdIdxBot|BingPreview|Yahoo! Slurp|duckduckbot|applebot|gptbot/i;
|
|
6
|
+
|
|
6
7
|
const IS_FILE =
|
|
7
|
-
/\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|
|
|
8
|
+
/\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|avi|ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|woff|ttf|svg|webmanifest|eot|torrent)$/;
|
|
9
|
+
|
|
10
|
+
// Allow passing a custom bot detection regex string
|
|
11
|
+
const IS_BOT_CUSTOM = new RegExp(process.env.CUSTOM_BOT_CHECK || "[]");
|
|
8
12
|
|
|
9
13
|
export const handler = async (
|
|
10
14
|
event: CloudFrontRequestEvent
|
|
@@ -14,7 +18,8 @@ export const handler = async (
|
|
|
14
18
|
// If the request is from a bot, is not a file and is not from prerender
|
|
15
19
|
// then set the x-request-prerender header so the origin-request lambda function
|
|
16
20
|
// alters the origin to prerender.io
|
|
17
|
-
|
|
21
|
+
const userAgent = request.headers["user-agent"][0].value;
|
|
22
|
+
if (IS_BOT.test(userAgent) || IS_BOT_CUSTOM.test(userAgent)) {
|
|
18
23
|
if (!IS_FILE.test(request.uri) && !request.headers["x-prerender"]) {
|
|
19
24
|
request.headers["x-request-prerender"] = [
|
|
20
25
|
{
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { Construct } from "@aws-cdk/core";
|
|
2
2
|
import { EdgeFunction } from "@aws-cdk/aws-cloudfront/lib/experimental";
|
|
3
|
+
export interface PrerenderCheckOptions {
|
|
4
|
+
/**
|
|
5
|
+
* A custom regex string to detect bots. Will be used in addition
|
|
6
|
+
* to the existing bot check regex to determine if a user-agent is a bot.
|
|
7
|
+
*
|
|
8
|
+
* @type string
|
|
9
|
+
*/
|
|
10
|
+
customBotCheckRegex: string;
|
|
11
|
+
}
|
|
3
12
|
export declare class PrerenderCheckFunction extends Construct {
|
|
4
13
|
readonly edgeFunction: EdgeFunction;
|
|
5
|
-
constructor(scope: Construct, id: string);
|
|
14
|
+
constructor(scope: Construct, id: string, options?: PrerenderCheckOptions);
|
|
6
15
|
}
|
|
@@ -6,7 +6,8 @@ const bundling_1 = require("@aws-cdk/aws-lambda-nodejs/lib/bundling");
|
|
|
6
6
|
const aws_lambda_1 = require("@aws-cdk/aws-lambda");
|
|
7
7
|
const aws_cloudfront_1 = require("@aws-cdk/aws-cloudfront");
|
|
8
8
|
class PrerenderCheckFunction extends core_1.Construct {
|
|
9
|
-
constructor(scope, id) {
|
|
9
|
+
constructor(scope, id, options) {
|
|
10
|
+
var _a;
|
|
10
11
|
super(scope, id);
|
|
11
12
|
this.edgeFunction = new aws_cloudfront_1.experimental.EdgeFunction(this, "PrerenderCheckFunction", {
|
|
12
13
|
code: bundling_1.Bundling.bundle({
|
|
@@ -15,6 +16,9 @@ class PrerenderCheckFunction extends core_1.Construct {
|
|
|
15
16
|
sourceMap: true,
|
|
16
17
|
projectRoot: `${__dirname}/handlers/`,
|
|
17
18
|
depsLockFilePath: `${__dirname}/handlers/package-lock.json`,
|
|
19
|
+
define: {
|
|
20
|
+
"process.env.CUSTOM_BOT_CHECK": JSON.stringify((_a = options === null || options === void 0 ? void 0 : options.customBotCheckRegex) !== null && _a !== void 0 ? _a : "[]"),
|
|
21
|
+
},
|
|
18
22
|
}),
|
|
19
23
|
runtime: aws_lambda_1.Runtime.NODEJS_16_X,
|
|
20
24
|
handler: "index.handler",
|
|
@@ -22,4 +26,4 @@ class PrerenderCheckFunction extends core_1.Construct {
|
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
28
|
exports.PrerenderCheckFunction = PrerenderCheckFunction;
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVuZGVyLWNoZWNrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByZXJlbmRlci1jaGVjay1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0NBQTBDO0FBQzFDLHNFQUFtRTtBQUNuRSxvREFBOEM7QUFDOUMsNERBQXVEO0FBYXZELE1BQWEsc0JBQXVCLFNBQVEsZ0JBQVM7SUFHbkQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxPQUErQjs7UUFDdkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksNkJBQVksQ0FBQyxZQUFZLENBQy9DLElBQUksRUFDSix3QkFBd0IsRUFDeEI7WUFDRSxJQUFJLEVBQUUsbUJBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxHQUFHLFNBQVMsOEJBQThCO2dCQUNqRCxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO2dCQUM1QixTQUFTLEVBQUUsSUFBSTtnQkFDZixXQUFXLEVBQUUsR0FBRyxTQUFTLFlBQVk7Z0JBQ3JDLGdCQUFnQixFQUFFLEdBQUcsU0FBUyw2QkFBNkI7Z0JBQzNELE1BQU0sRUFBRTtvQkFDTiw4QkFBOEIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUM1QyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxtQkFBbUIsbUNBQUksSUFBSSxDQUNyQztpQkFDRjthQUNLLENBQUM7WUFDVCxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLE9BQU8sRUFBRSxlQUFlO1NBQ3pCLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTFCRCx3REEwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiQGF3cy1jZGsvY29yZVwiO1xuaW1wb3J0IHsgQnVuZGxpbmcgfSBmcm9tIFwiQGF3cy1jZGsvYXdzLWxhbWJkYS1ub2RlanMvbGliL2J1bmRsaW5nXCI7XG5pbXBvcnQgeyBSdW50aW1lIH0gZnJvbSBcIkBhd3MtY2RrL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IGV4cGVyaW1lbnRhbCB9IGZyb20gXCJAYXdzLWNkay9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgRWRnZUZ1bmN0aW9uIH0gZnJvbSBcIkBhd3MtY2RrL2F3cy1jbG91ZGZyb250L2xpYi9leHBlcmltZW50YWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcmVyZW5kZXJDaGVja09wdGlvbnMge1xuICAvKipcbiAgICogQSBjdXN0b20gcmVnZXggc3RyaW5nIHRvIGRldGVjdCBib3RzLiBXaWxsIGJlIHVzZWQgaW4gYWRkaXRpb25cbiAgICogdG8gdGhlIGV4aXN0aW5nIGJvdCBjaGVjayByZWdleCB0byBkZXRlcm1pbmUgaWYgYSB1c2VyLWFnZW50IGlzIGEgYm90LlxuICAgKlxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICovXG4gIGN1c3RvbUJvdENoZWNrUmVnZXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFByZXJlbmRlckNoZWNrRnVuY3Rpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBlZGdlRnVuY3Rpb246IEVkZ2VGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBvcHRpb25zPzogUHJlcmVuZGVyQ2hlY2tPcHRpb25zKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmVkZ2VGdW5jdGlvbiA9IG5ldyBleHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiUHJlcmVuZGVyQ2hlY2tGdW5jdGlvblwiLFxuICAgICAge1xuICAgICAgICBjb2RlOiBCdW5kbGluZy5idW5kbGUoe1xuICAgICAgICAgIGVudHJ5OiBgJHtfX2Rpcm5hbWV9L2hhbmRsZXJzL3ByZXJlbmRlci1jaGVjay50c2AsXG4gICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMTZfWCxcbiAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgcHJvamVjdFJvb3Q6IGAke19fZGlybmFtZX0vaGFuZGxlcnMvYCxcbiAgICAgICAgICBkZXBzTG9ja0ZpbGVQYXRoOiBgJHtfX2Rpcm5hbWV9L2hhbmRsZXJzL3BhY2thZ2UtbG9jay5qc29uYCxcbiAgICAgICAgICBkZWZpbmU6IHtcbiAgICAgICAgICAgIFwicHJvY2Vzcy5lbnYuQ1VTVE9NX0JPVF9DSEVDS1wiOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgb3B0aW9ucz8uY3VzdG9tQm90Q2hlY2tSZWdleCA/PyBcIltdXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBhbnkpLFxuICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xNl9YLFxuICAgICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Construct } from "@aws-cdk/core";
|
|
2
2
|
import { PrerenderFunction } from "./prerender-construct";
|
|
3
|
-
import { PrerenderCheckFunction } from "./prerender-check-construct";
|
|
3
|
+
import { PrerenderCheckFunction, PrerenderCheckOptions } from "./prerender-check-construct";
|
|
4
4
|
import { ErrorResponseFunction } from "./error-response-construct";
|
|
5
5
|
import { CloudFrontCacheControl, CloudFrontCacheControlOptions } from "./prerender-cf-cache-control-construct";
|
|
6
6
|
export interface PrerenderLambdaProps {
|
|
7
7
|
prerenderToken: string;
|
|
8
8
|
exclusionExpression?: string;
|
|
9
9
|
cacheControlProps?: CloudFrontCacheControlOptions;
|
|
10
|
+
prerenderCheckOptions?: PrerenderCheckOptions;
|
|
10
11
|
}
|
|
11
12
|
export declare class PrerenderLambda extends Construct {
|
|
12
13
|
readonly prerenderCheckFunction: PrerenderCheckFunction;
|
|
@@ -9,11 +9,11 @@ const prerender_cf_cache_control_construct_1 = require("./prerender-cf-cache-con
|
|
|
9
9
|
class PrerenderLambda extends core_1.Construct {
|
|
10
10
|
constructor(scope, id, props) {
|
|
11
11
|
super(scope, id);
|
|
12
|
-
this.prerenderCheckFunction = new prerender_check_construct_1.PrerenderCheckFunction(this, "PrerenderViewerRequest");
|
|
12
|
+
this.prerenderCheckFunction = new prerender_check_construct_1.PrerenderCheckFunction(this, "PrerenderViewerRequest", props.prerenderCheckOptions);
|
|
13
13
|
this.prerenderFunction = new prerender_construct_1.PrerenderFunction(this, "PrerenderOriginRequest", props);
|
|
14
14
|
this.errorResponseFunction = new error_response_construct_1.ErrorResponseFunction(this, "ErrorResponse", {});
|
|
15
15
|
this.cacheControlFunction = new prerender_cf_cache_control_construct_1.CloudFrontCacheControl(this, "PrerenderCloudFrontCacheControl", props.cacheControlProps);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
exports.PrerenderLambda = PrerenderLambda;
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVuZGVyLWxhbWJkYS1jb25zdHJ1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmVyZW5kZXItbGFtYmRhLWNvbnN0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3Q0FBcUQ7QUFDckQsK0RBQTBEO0FBQzFELDJFQUdxQztBQUNyQyx5RUFBbUU7QUFDbkUsaUdBR2dEO0FBU2hELE1BQWEsZUFBZ0IsU0FBUSxnQkFBUztJQU01QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksa0RBQXNCLENBQ3RELElBQUksRUFDSix3QkFBd0IsRUFDeEIsS0FBSyxDQUFDLHFCQUFxQixDQUM1QixDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksdUNBQWlCLENBQzVDLElBQUksRUFDSix3QkFBd0IsRUFDeEIsS0FBSyxDQUNOLENBQUM7UUFFRixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxnREFBcUIsQ0FDcEQsSUFBSSxFQUNKLGVBQWUsRUFDZixFQUFFLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLDZEQUFzQixDQUNwRCxJQUFJLEVBQ0osaUNBQWlDLEVBQ2pDLEtBQUssQ0FBQyxpQkFBaUIsQ0FDeEIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWpDRCwwQ0FpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QsIENmbk91dHB1dCB9IGZyb20gXCJAYXdzLWNkay9jb3JlXCI7XG5pbXBvcnQgeyBQcmVyZW5kZXJGdW5jdGlvbiB9IGZyb20gXCIuL3ByZXJlbmRlci1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7XG4gIFByZXJlbmRlckNoZWNrRnVuY3Rpb24sXG4gIFByZXJlbmRlckNoZWNrT3B0aW9ucyxcbn0gZnJvbSBcIi4vcHJlcmVuZGVyLWNoZWNrLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZUZ1bmN0aW9uIH0gZnJvbSBcIi4vZXJyb3ItcmVzcG9uc2UtY29uc3RydWN0XCI7XG5pbXBvcnQge1xuICBDbG91ZEZyb250Q2FjaGVDb250cm9sLFxuICBDbG91ZEZyb250Q2FjaGVDb250cm9sT3B0aW9ucyxcbn0gZnJvbSBcIi4vcHJlcmVuZGVyLWNmLWNhY2hlLWNvbnRyb2wtY29uc3RydWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcmVuZGVyTGFtYmRhUHJvcHMge1xuICBwcmVyZW5kZXJUb2tlbjogc3RyaW5nO1xuICBleGNsdXNpb25FeHByZXNzaW9uPzogc3RyaW5nO1xuICBjYWNoZUNvbnRyb2xQcm9wcz86IENsb3VkRnJvbnRDYWNoZUNvbnRyb2xPcHRpb25zO1xuICBwcmVyZW5kZXJDaGVja09wdGlvbnM/OiBQcmVyZW5kZXJDaGVja09wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBQcmVyZW5kZXJMYW1iZGEgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBwcmVyZW5kZXJDaGVja0Z1bmN0aW9uOiBQcmVyZW5kZXJDaGVja0Z1bmN0aW9uO1xuICByZWFkb25seSBwcmVyZW5kZXJGdW5jdGlvbjogUHJlcmVuZGVyRnVuY3Rpb247XG4gIHJlYWRvbmx5IGVycm9yUmVzcG9uc2VGdW5jdGlvbjogRXJyb3JSZXNwb25zZUZ1bmN0aW9uO1xuICByZWFkb25seSBjYWNoZUNvbnRyb2xGdW5jdGlvbjogQ2xvdWRGcm9udENhY2hlQ29udHJvbDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHJlcmVuZGVyTGFtYmRhUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5wcmVyZW5kZXJDaGVja0Z1bmN0aW9uID0gbmV3IFByZXJlbmRlckNoZWNrRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJQcmVyZW5kZXJWaWV3ZXJSZXF1ZXN0XCIsXG4gICAgICBwcm9wcy5wcmVyZW5kZXJDaGVja09wdGlvbnNcbiAgICApO1xuXG4gICAgdGhpcy5wcmVyZW5kZXJGdW5jdGlvbiA9IG5ldyBQcmVyZW5kZXJGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIlByZXJlbmRlck9yaWdpblJlcXVlc3RcIixcbiAgICAgIHByb3BzXG4gICAgKTtcblxuICAgIHRoaXMuZXJyb3JSZXNwb25zZUZ1bmN0aW9uID0gbmV3IEVycm9yUmVzcG9uc2VGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIkVycm9yUmVzcG9uc2VcIixcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIHRoaXMuY2FjaGVDb250cm9sRnVuY3Rpb24gPSBuZXcgQ2xvdWRGcm9udENhY2hlQ29udHJvbChcbiAgICAgIHRoaXMsXG4gICAgICBcIlByZXJlbmRlckNsb3VkRnJvbnRDYWNoZUNvbnRyb2xcIixcbiAgICAgIHByb3BzLmNhY2hlQ29udHJvbFByb3BzXG4gICAgKTtcbiAgfVxufVxuIl19
|