quidproquo-deploy-awscdk 0.0.80 → 0.0.82
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/lib/constructs/basic/Function.js +5 -0
- package/lib/constructs/feature/webserver/webEntry/QpqWebserverWebEntryConstruct.js +40 -5
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/lambdas/lambdaAPIGatewayEvent.js +1 -1
- package/lib/lambdas/lambdaEventBridgeEvent.js +1 -1
- package/lib/lambdas/lambdaEventOriginRequest.js +1 -1
- package/lib/lambdas/lambdaSQSEvent.js +1 -1
- package/package.json +1 -1
- package/src/{qpqApp.ts → QPQApp.ts} +5 -5
- package/src/constructs/basic/Function.ts +8 -0
- package/src/constructs/feature/webserver/webEntry/QpqWebserverWebEntryConstruct.ts +60 -5
- package/src/index.ts +1 -1
- package/src/lambdas/lambdaAPIGatewayEvent.ts +2 -0
- package/src/lambdas/lambdaEventBridgeEvent.ts +2 -0
- package/src/lambdas/lambdaEventOriginRequest.ts +2 -0
- package/src/lambdas/lambdaSQSEvent.ts +2 -0
- /package/lib/{qpqApp.d.ts → QPQApp.d.ts} +0 -0
- /package/lib/{qpqApp.js → QPQApp.js} +0 -0
|
@@ -54,6 +54,11 @@ class Function extends QpqConstructBlock_1.QpqConstructBlock {
|
|
|
54
54
|
actions: ['apigateway:GET'],
|
|
55
55
|
resources: ['*'],
|
|
56
56
|
}));
|
|
57
|
+
// Let lambdas invalidate cache for cloud front
|
|
58
|
+
this.lambdaFunction.addToRolePolicy(new aws_cdk_lib_1.aws_iam.PolicyStatement({
|
|
59
|
+
actions: ['cloudfront:CreateInvalidation'],
|
|
60
|
+
resources: ['*'],
|
|
61
|
+
}));
|
|
57
62
|
}
|
|
58
63
|
}
|
|
59
64
|
exports.Function = Function;
|
|
@@ -31,6 +31,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
31
31
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
32
32
|
const cdk = __importStar(require("aws-cdk-lib"));
|
|
33
33
|
const quidproquo_webserver_1 = require("quidproquo-webserver");
|
|
34
|
+
const quidproquo_actionprocessor_awslambda_1 = require("quidproquo-actionprocessor-awslambda");
|
|
34
35
|
const QpqConstructBlock_1 = require("../../../base/QpqConstructBlock");
|
|
35
36
|
const qpqDeployAwsCdkUtils = __importStar(require("../../../../utils"));
|
|
36
37
|
class QpqWebserverWebEntryConstruct extends QpqConstructBlock_1.QpqConstructBlock {
|
|
@@ -104,6 +105,19 @@ class QpqWebserverWebEntryConstruct extends QpqConstructBlock_1.QpqConstructBloc
|
|
|
104
105
|
enableAcceptEncodingGzip: true,
|
|
105
106
|
enableAcceptEncodingBrotli: true,
|
|
106
107
|
});
|
|
108
|
+
const mustRevalidate = false;
|
|
109
|
+
const responseHeaderPolicy = new aws_cdk_lib_1.aws_cloudfront.ResponseHeadersPolicy(this, `dist-rhp`, {
|
|
110
|
+
responseHeadersPolicyName: this.resourceName(props.webEntryConfig.name),
|
|
111
|
+
customHeadersBehavior: {
|
|
112
|
+
customHeaders: [
|
|
113
|
+
{
|
|
114
|
+
header: 'Cache-Control',
|
|
115
|
+
value: `max-age=${props.webEntryConfig.cache.maxTTLInSeconds}${props.webEntryConfig.cache.mustRevalidate ? ', must-revalidate' : ''}`,
|
|
116
|
+
override: true,
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
});
|
|
107
121
|
// Create a CloudFront distribution using the S3 bucket as the origin
|
|
108
122
|
const distributionOrigin = new aws_cdk_lib_1.aws_cloudfront_origins.S3Origin(originBucket);
|
|
109
123
|
const distribution = new aws_cdk_lib_1.aws_cloudfront.Distribution(this, 'MyDistribution', {
|
|
@@ -111,6 +125,8 @@ class QpqWebserverWebEntryConstruct extends QpqConstructBlock_1.QpqConstructBloc
|
|
|
111
125
|
origin: distributionOrigin,
|
|
112
126
|
cachePolicy: cachePolicy,
|
|
113
127
|
viewerProtocolPolicy: aws_cdk_lib_1.aws_cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
128
|
+
compress: props.webEntryConfig.compressFiles,
|
|
129
|
+
responseHeadersPolicy: responseHeaderPolicy,
|
|
114
130
|
},
|
|
115
131
|
domainNames: [deployDomain],
|
|
116
132
|
certificate: myCertificate,
|
|
@@ -122,11 +138,7 @@ class QpqWebserverWebEntryConstruct extends QpqConstructBlock_1.QpqConstructBloc
|
|
|
122
138
|
responsePagePath: '/',
|
|
123
139
|
})),
|
|
124
140
|
});
|
|
125
|
-
props.webEntryConfig.
|
|
126
|
-
distribution.addBehavior(pathPattern, distributionOrigin, {
|
|
127
|
-
cachePolicy: aws_cdk_lib_1.aws_cloudfront.CachePolicy.CACHING_DISABLED,
|
|
128
|
-
});
|
|
129
|
-
});
|
|
141
|
+
qpqDeployAwsCdkUtils.exportStackValue(this, quidproquo_actionprocessor_awslambda_1.awsNamingUtils.getCFExportNameDistributionIdArnFromConfig(props.webEntryConfig.name, props.qpqConfig), distribution.distributionId);
|
|
130
142
|
// TODO: Fix this when they add l2 support for origin access control settings
|
|
131
143
|
// Currently distribution don't have support for origin access control settings
|
|
132
144
|
// So we manually add it.
|
|
@@ -184,6 +196,9 @@ class QpqWebserverWebEntryConstruct extends QpqConstructBlock_1.QpqConstructBloc
|
|
|
184
196
|
const wildcardPath = seo.path.replaceAll(/{(.+?)}/g, '*');
|
|
185
197
|
distribution.addBehavior(wildcardPath, distributionOrigin, {
|
|
186
198
|
cachePolicy: seoCachePolicy,
|
|
199
|
+
viewerProtocolPolicy: aws_cdk_lib_1.aws_cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
200
|
+
compress: props.webEntryConfig.compressFiles,
|
|
201
|
+
responseHeadersPolicy: responseHeaderPolicy,
|
|
187
202
|
edgeLambdas: [
|
|
188
203
|
{
|
|
189
204
|
functionVersion: edgeFunctionVR.currentVersion,
|
|
@@ -197,6 +212,26 @@ class QpqWebserverWebEntryConstruct extends QpqConstructBlock_1.QpqConstructBloc
|
|
|
197
212
|
});
|
|
198
213
|
}
|
|
199
214
|
}
|
|
215
|
+
const ignoreCacheResponseHeaderPolicy = new aws_cdk_lib_1.aws_cloudfront.ResponseHeadersPolicy(this, `dist-rhp-ignore`, {
|
|
216
|
+
responseHeadersPolicyName: this.qpqResourceName(props.webEntryConfig.name, 'ignore'),
|
|
217
|
+
customHeadersBehavior: {
|
|
218
|
+
customHeaders: [
|
|
219
|
+
{
|
|
220
|
+
header: 'Cache-Control',
|
|
221
|
+
value: `max-age=300, must-revalidate`,
|
|
222
|
+
override: true,
|
|
223
|
+
},
|
|
224
|
+
],
|
|
225
|
+
},
|
|
226
|
+
});
|
|
227
|
+
props.webEntryConfig.ignoreCache.forEach((pathPattern) => {
|
|
228
|
+
distribution.addBehavior(pathPattern, distributionOrigin, {
|
|
229
|
+
cachePolicy: aws_cdk_lib_1.aws_cloudfront.CachePolicy.CACHING_DISABLED,
|
|
230
|
+
viewerProtocolPolicy: aws_cdk_lib_1.aws_cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
231
|
+
compress: props.webEntryConfig.compressFiles,
|
|
232
|
+
responseHeadersPolicy: ignoreCacheResponseHeaderPolicy,
|
|
233
|
+
});
|
|
234
|
+
});
|
|
200
235
|
}
|
|
201
236
|
}
|
|
202
237
|
exports.QpqWebserverWebEntryConstruct = QpqWebserverWebEntryConstruct;
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -27,7 +27,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.qpqDeployAwsCdkUtils = void 0;
|
|
30
|
-
__exportStar(require("./
|
|
30
|
+
__exportStar(require("./QPQApp"), exports);
|
|
31
31
|
__exportStar(require("./constructs"), exports);
|
|
32
32
|
__exportStar(require("./stacks"), exports);
|
|
33
33
|
exports.qpqDeployAwsCdkUtils = __importStar(require("./utils"));
|
|
@@ -45,7 +45,7 @@ const getAPIGatewayEventExecutor = (dynamicModuleLoader, getCustomActionProcesso
|
|
|
45
45
|
const cdkConfig = yield (0, lambdaConfig_1.getLambdaConfigs)();
|
|
46
46
|
// Build a processor for the session and stuff
|
|
47
47
|
// Remove the non route ones ~ let the story execute action add them
|
|
48
|
-
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getAPIGatewayEventActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getEventBusActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
48
|
+
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getAPIGatewayEventActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getEventBusActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getWebEntryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
49
49
|
const logger = (result) => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
50
|
// addResult(
|
|
51
51
|
// envConfig.appName,
|
|
@@ -30,7 +30,7 @@ const getEventBridgeEventExecutor = (dynamicModuleLoader, getCustomActionProcess
|
|
|
30
30
|
const lambdaRuntimeConfig = JSON.parse(process.env.lambdaRuntimeConfig || '{}');
|
|
31
31
|
// Build a processor for the session and stuff
|
|
32
32
|
// Remove the non event ones
|
|
33
|
-
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getEventBridgeEventActionProcessor)(lambdaRuntimeConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getEventBusActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
33
|
+
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getEventBridgeEventActionProcessor)(lambdaRuntimeConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getEventBusActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getWebEntryActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
34
34
|
const logger = (result) => __awaiter(void 0, void 0, void 0, function* () { });
|
|
35
35
|
// Run the callback
|
|
36
36
|
const resolveStory = (0, quidproquo_core_1.createRuntime)({}, storyActionProcessor, getDateNow, logger, quidproquo_actionprocessor_awslambda_1.awsLambdaUtils.randomGuid);
|
|
@@ -30,7 +30,7 @@ const getOriginRequestEventExecutor = (dynamicModuleLoader, getCustomActionProce
|
|
|
30
30
|
const cdkConfig = yield (0, lambdaConfig_1.getLambdaConfigs)();
|
|
31
31
|
// Build a processor for the session and stuff
|
|
32
32
|
// Remove the non route ones ~ let the story execute action add them
|
|
33
|
-
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getCloudFrontOriginRequestEventActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
33
|
+
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getCloudFrontOriginRequestEventActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getWebEntryActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
34
34
|
const logger = (result) => __awaiter(void 0, void 0, void 0, function* () { });
|
|
35
35
|
// Run the callback
|
|
36
36
|
const resolveStory = (0, quidproquo_core_1.createRuntime)({}, storyActionProcessor, getDateNow, logger, quidproquo_actionprocessor_awslambda_1.awsLambdaUtils.randomGuid);
|
|
@@ -28,7 +28,7 @@ const getStoryActionRuntime = (dynamicModuleLoader, getCustomActionProcessors =
|
|
|
28
28
|
const cdkConfig = yield (0, lambdaConfig_1.getLambdaConfigs)();
|
|
29
29
|
// Build a processor for the session and stuff
|
|
30
30
|
// Remove the non route ones ~ let the story execute action add them
|
|
31
|
-
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getSQSEventRecordActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getEventBusActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
31
|
+
const storyActionProcessor = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, quidproquo_actionprocessor_node_1.coreActionProcessor), quidproquo_actionprocessor_node_1.webserverActionProcessor), (0, quidproquo_actionprocessor_awslambda_1.getSQSEventRecordActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetSecretActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParameterActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getConfigGetParametersActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getSystemActionProcessor)(dynamicModuleLoader)), (0, quidproquo_actionprocessor_awslambda_1.getFileActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_node_2.getConfigActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getQueueActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getEventBusActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getUserDirectoryActionProcessor)(cdkConfig.qpqConfig)), (0, quidproquo_actionprocessor_awslambda_1.getWebEntryActionProcessor)(cdkConfig.qpqConfig)), getCustomActionProcessors(cdkConfig.qpqConfig)), (0, qpq_custom_action_processors_loader_1.default)());
|
|
32
32
|
const logger = (result) => __awaiter(void 0, void 0, void 0, function* () { });
|
|
33
33
|
// Run the callback
|
|
34
34
|
const resolveStory = (0, quidproquo_core_1.createRuntime)({}, storyActionProcessor, getDateNow, logger, quidproquo_actionprocessor_awslambda_1.awsLambdaUtils.randomGuid);
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as cdk from 'aws-cdk-lib';
|
|
2
|
-
|
|
3
|
-
export const createQPQApp = (): cdk.App => {
|
|
4
|
-
return new cdk.App();
|
|
5
|
-
};
|
|
1
|
+
import * as cdk from 'aws-cdk-lib';
|
|
2
|
+
|
|
3
|
+
export const createQPQApp = (): cdk.App => {
|
|
4
|
+
return new cdk.App();
|
|
5
|
+
};
|
|
@@ -57,5 +57,13 @@ export class Function extends QpqConstructBlock {
|
|
|
57
57
|
resources: ['*'],
|
|
58
58
|
}),
|
|
59
59
|
);
|
|
60
|
+
|
|
61
|
+
// Let lambdas invalidate cache for cloud front
|
|
62
|
+
this.lambdaFunction.addToRolePolicy(
|
|
63
|
+
new aws_iam.PolicyStatement({
|
|
64
|
+
actions: ['cloudfront:CreateInvalidation'],
|
|
65
|
+
resources: ['*'],
|
|
66
|
+
}),
|
|
67
|
+
);
|
|
60
68
|
}
|
|
61
69
|
}
|
|
@@ -18,6 +18,9 @@ import {
|
|
|
18
18
|
qpqWebServerUtils,
|
|
19
19
|
qpqHeaderIsBot,
|
|
20
20
|
} from 'quidproquo-webserver';
|
|
21
|
+
|
|
22
|
+
import { awsNamingUtils } from 'quidproquo-actionprocessor-awslambda';
|
|
23
|
+
|
|
21
24
|
import { QpqConstructBlock, QpqConstructBlockProps } from '../../../base/QpqConstructBlock';
|
|
22
25
|
import { Construct } from 'constructs';
|
|
23
26
|
|
|
@@ -125,6 +128,23 @@ export class QpqWebserverWebEntryConstruct extends QpqConstructBlock {
|
|
|
125
128
|
enableAcceptEncodingBrotli: true,
|
|
126
129
|
});
|
|
127
130
|
|
|
131
|
+
const mustRevalidate = false;
|
|
132
|
+
|
|
133
|
+
const responseHeaderPolicy = new aws_cloudfront.ResponseHeadersPolicy(this, `dist-rhp`, {
|
|
134
|
+
responseHeadersPolicyName: this.resourceName(props.webEntryConfig.name),
|
|
135
|
+
customHeadersBehavior: {
|
|
136
|
+
customHeaders: [
|
|
137
|
+
{
|
|
138
|
+
header: 'Cache-Control',
|
|
139
|
+
value: `max-age=${props.webEntryConfig.cache.maxTTLInSeconds}${
|
|
140
|
+
props.webEntryConfig.cache.mustRevalidate ? ', must-revalidate' : ''
|
|
141
|
+
}`,
|
|
142
|
+
override: true,
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
|
|
128
148
|
// Create a CloudFront distribution using the S3 bucket as the origin
|
|
129
149
|
const distributionOrigin = new aws_cloudfront_origins.S3Origin(originBucket);
|
|
130
150
|
const distribution = new aws_cloudfront.Distribution(this, 'MyDistribution', {
|
|
@@ -132,7 +152,10 @@ export class QpqWebserverWebEntryConstruct extends QpqConstructBlock {
|
|
|
132
152
|
origin: distributionOrigin,
|
|
133
153
|
cachePolicy: cachePolicy,
|
|
134
154
|
viewerProtocolPolicy: aws_cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
155
|
+
compress: props.webEntryConfig.compressFiles,
|
|
156
|
+
responseHeadersPolicy: responseHeaderPolicy,
|
|
135
157
|
},
|
|
158
|
+
|
|
136
159
|
domainNames: [deployDomain],
|
|
137
160
|
certificate: myCertificate,
|
|
138
161
|
defaultRootObject: props.webEntryConfig.indexRoot,
|
|
@@ -145,11 +168,14 @@ export class QpqWebserverWebEntryConstruct extends QpqConstructBlock {
|
|
|
145
168
|
})),
|
|
146
169
|
});
|
|
147
170
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
171
|
+
qpqDeployAwsCdkUtils.exportStackValue(
|
|
172
|
+
this,
|
|
173
|
+
awsNamingUtils.getCFExportNameDistributionIdArnFromConfig(
|
|
174
|
+
props.webEntryConfig.name,
|
|
175
|
+
props.qpqConfig,
|
|
176
|
+
),
|
|
177
|
+
distribution.distributionId,
|
|
178
|
+
);
|
|
153
179
|
|
|
154
180
|
// TODO: Fix this when they add l2 support for origin access control settings
|
|
155
181
|
|
|
@@ -250,6 +276,9 @@ export class QpqWebserverWebEntryConstruct extends QpqConstructBlock {
|
|
|
250
276
|
const wildcardPath = seo.path.replaceAll(/{(.+?)}/g, '*');
|
|
251
277
|
distribution.addBehavior(wildcardPath, distributionOrigin, {
|
|
252
278
|
cachePolicy: seoCachePolicy,
|
|
279
|
+
viewerProtocolPolicy: aws_cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
280
|
+
compress: props.webEntryConfig.compressFiles,
|
|
281
|
+
responseHeadersPolicy: responseHeaderPolicy,
|
|
253
282
|
edgeLambdas: [
|
|
254
283
|
{
|
|
255
284
|
functionVersion: edgeFunctionVR.currentVersion,
|
|
@@ -263,5 +292,31 @@ export class QpqWebserverWebEntryConstruct extends QpqConstructBlock {
|
|
|
263
292
|
});
|
|
264
293
|
}
|
|
265
294
|
}
|
|
295
|
+
|
|
296
|
+
const ignoreCacheResponseHeaderPolicy = new aws_cloudfront.ResponseHeadersPolicy(
|
|
297
|
+
this,
|
|
298
|
+
`dist-rhp-ignore`,
|
|
299
|
+
{
|
|
300
|
+
responseHeadersPolicyName: this.qpqResourceName(props.webEntryConfig.name, 'ignore'),
|
|
301
|
+
customHeadersBehavior: {
|
|
302
|
+
customHeaders: [
|
|
303
|
+
{
|
|
304
|
+
header: 'Cache-Control',
|
|
305
|
+
value: `max-age=300, must-revalidate`,
|
|
306
|
+
override: true,
|
|
307
|
+
},
|
|
308
|
+
],
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
);
|
|
312
|
+
|
|
313
|
+
props.webEntryConfig.ignoreCache.forEach((pathPattern) => {
|
|
314
|
+
distribution.addBehavior(pathPattern, distributionOrigin, {
|
|
315
|
+
cachePolicy: aws_cloudfront.CachePolicy.CACHING_DISABLED,
|
|
316
|
+
viewerProtocolPolicy: aws_cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
|
|
317
|
+
compress: props.webEntryConfig.compressFiles,
|
|
318
|
+
responseHeadersPolicy: ignoreCacheResponseHeaderPolicy,
|
|
319
|
+
});
|
|
320
|
+
});
|
|
266
321
|
}
|
|
267
322
|
}
|
package/src/index.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
getConfigGetParameterActionProcessor,
|
|
11
11
|
getConfigGetParametersActionProcessor,
|
|
12
12
|
getUserDirectoryActionProcessor,
|
|
13
|
+
getWebEntryActionProcessor,
|
|
13
14
|
awsLambdaUtils,
|
|
14
15
|
DynamicModuleLoader,
|
|
15
16
|
} from 'quidproquo-actionprocessor-awslambda';
|
|
@@ -73,6 +74,7 @@ export const getAPIGatewayEventExecutor = (
|
|
|
73
74
|
...getQueueActionProcessor(cdkConfig.qpqConfig),
|
|
74
75
|
...getEventBusActionProcessor(cdkConfig.qpqConfig),
|
|
75
76
|
...getUserDirectoryActionProcessor(cdkConfig.qpqConfig),
|
|
77
|
+
...getWebEntryActionProcessor(cdkConfig.qpqConfig),
|
|
76
78
|
|
|
77
79
|
...getCustomActionProcessors(cdkConfig.qpqConfig),
|
|
78
80
|
...qpqCustomActionProcessors(),
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
getFileActionProcessor,
|
|
7
7
|
getQueueActionProcessor,
|
|
8
8
|
getEventBusActionProcessor,
|
|
9
|
+
getWebEntryActionProcessor,
|
|
9
10
|
getUserDirectoryActionProcessor,
|
|
10
11
|
getConfigGetSecretActionProcessor,
|
|
11
12
|
getConfigGetParameterActionProcessor,
|
|
@@ -59,6 +60,7 @@ export const getEventBridgeEventExecutor = (
|
|
|
59
60
|
...getConfigActionProcessor(cdkConfig.qpqConfig),
|
|
60
61
|
...getQueueActionProcessor(cdkConfig.qpqConfig),
|
|
61
62
|
...getEventBusActionProcessor(cdkConfig.qpqConfig),
|
|
63
|
+
...getWebEntryActionProcessor(cdkConfig.qpqConfig),
|
|
62
64
|
...getUserDirectoryActionProcessor(cdkConfig.qpqConfig),
|
|
63
65
|
|
|
64
66
|
...getCustomActionProcessors(cdkConfig.qpqConfig),
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
getConfigGetSecretActionProcessor,
|
|
9
9
|
getConfigGetParameterActionProcessor,
|
|
10
10
|
getConfigGetParametersActionProcessor,
|
|
11
|
+
getWebEntryActionProcessor,
|
|
11
12
|
awsLambdaUtils,
|
|
12
13
|
DynamicModuleLoader,
|
|
13
14
|
} from 'quidproquo-actionprocessor-awslambda';
|
|
@@ -53,6 +54,7 @@ export const getOriginRequestEventExecutor = (
|
|
|
53
54
|
...getSystemActionProcessor(dynamicModuleLoader),
|
|
54
55
|
...getFileActionProcessor(cdkConfig.qpqConfig),
|
|
55
56
|
...getConfigActionProcessor(cdkConfig.qpqConfig),
|
|
57
|
+
...getWebEntryActionProcessor(cdkConfig.qpqConfig),
|
|
56
58
|
|
|
57
59
|
// We probably don't want this?
|
|
58
60
|
...getUserDirectoryActionProcessor(cdkConfig.qpqConfig),
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
getConfigGetParameterActionProcessor,
|
|
13
13
|
getConfigGetParametersActionProcessor,
|
|
14
14
|
getUserDirectoryActionProcessor,
|
|
15
|
+
getWebEntryActionProcessor,
|
|
15
16
|
awsLambdaUtils,
|
|
16
17
|
DynamicModuleLoader,
|
|
17
18
|
} from 'quidproquo-actionprocessor-awslambda';
|
|
@@ -61,6 +62,7 @@ export const getStoryActionRuntime = async (
|
|
|
61
62
|
...getQueueActionProcessor(cdkConfig.qpqConfig),
|
|
62
63
|
...getEventBusActionProcessor(cdkConfig.qpqConfig),
|
|
63
64
|
...getUserDirectoryActionProcessor(cdkConfig.qpqConfig),
|
|
65
|
+
...getWebEntryActionProcessor(cdkConfig.qpqConfig),
|
|
64
66
|
|
|
65
67
|
...getCustomActionProcessors(cdkConfig.qpqConfig),
|
|
66
68
|
...qpqCustomActionProcessors(),
|
|
File without changes
|
|
File without changes
|