@composurecdk/apigateway 0.7.0 → 0.8.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/dist/commonjs/alarm-config.d.ts.map +1 -0
- package/dist/commonjs/alarm-config.js +3 -0
- package/dist/{alarm-config.js.map → commonjs/alarm-config.js.map} +1 -1
- package/dist/commonjs/alarm-defaults.d.ts.map +1 -0
- package/dist/commonjs/alarm-defaults.js +46 -0
- package/dist/commonjs/alarm-defaults.js.map +1 -0
- package/dist/commonjs/builder-common.d.ts.map +1 -0
- package/dist/commonjs/builder-common.js +3 -0
- package/dist/{builder-common.js.map → commonjs/builder-common.js.map} +1 -1
- package/dist/commonjs/defaults.d.ts.map +1 -0
- package/dist/commonjs/defaults.js +56 -0
- package/dist/commonjs/defaults.js.map +1 -0
- package/dist/commonjs/deploy-options.d.ts.map +1 -0
- package/dist/commonjs/deploy-options.js +33 -0
- package/dist/commonjs/deploy-options.js.map +1 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +13 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/resource-builder.d.ts.map +1 -0
- package/dist/commonjs/resource-builder.js +90 -0
- package/dist/commonjs/resource-builder.js.map +1 -0
- package/dist/commonjs/rest-api-alarms.d.ts.map +1 -0
- package/dist/commonjs/rest-api-alarms.js +102 -0
- package/dist/commonjs/rest-api-alarms.js.map +1 -0
- package/dist/commonjs/rest-api-builder.d.ts.map +1 -0
- package/dist/commonjs/rest-api-builder.js +105 -0
- package/dist/commonjs/rest-api-builder.js.map +1 -0
- package/dist/commonjs/spec-rest-api-builder.d.ts.map +1 -0
- package/dist/commonjs/spec-rest-api-builder.js +74 -0
- package/dist/commonjs/spec-rest-api-builder.js.map +1 -0
- package/dist/esm/alarm-config.d.ts +47 -0
- package/dist/esm/alarm-config.d.ts.map +1 -0
- package/dist/esm/alarm-config.js.map +1 -0
- package/dist/esm/alarm-defaults.d.ts +15 -0
- package/dist/esm/alarm-defaults.d.ts.map +1 -0
- package/dist/esm/alarm-defaults.js.map +1 -0
- package/dist/esm/builder-common.d.ts +68 -0
- package/dist/esm/builder-common.d.ts.map +1 -0
- package/dist/esm/builder-common.js.map +1 -0
- package/dist/esm/defaults.d.ts +22 -0
- package/dist/esm/defaults.d.ts.map +1 -0
- package/dist/esm/defaults.js.map +1 -0
- package/dist/esm/deploy-options.d.ts +17 -0
- package/dist/esm/deploy-options.d.ts.map +1 -0
- package/dist/esm/deploy-options.js.map +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/resource-builder.d.ts +70 -0
- package/dist/esm/resource-builder.d.ts.map +1 -0
- package/dist/esm/resource-builder.js.map +1 -0
- package/dist/esm/rest-api-alarms.d.ts +26 -0
- package/dist/esm/rest-api-alarms.d.ts.map +1 -0
- package/dist/esm/rest-api-alarms.js.map +1 -0
- package/dist/esm/rest-api-builder.d.ts +116 -0
- package/dist/esm/rest-api-builder.d.ts.map +1 -0
- package/dist/esm/rest-api-builder.js.map +1 -0
- package/dist/esm/spec-rest-api-builder.d.ts +90 -0
- package/dist/esm/spec-rest-api-builder.d.ts.map +1 -0
- package/dist/esm/spec-rest-api-builder.js.map +1 -0
- package/package.json +37 -19
- package/dist/alarm-config.d.ts.map +0 -1
- package/dist/alarm-defaults.d.ts.map +0 -1
- package/dist/alarm-defaults.js.map +0 -1
- package/dist/builder-common.d.ts.map +0 -1
- package/dist/defaults.d.ts.map +0 -1
- package/dist/defaults.js.map +0 -1
- package/dist/deploy-options.d.ts.map +0 -1
- package/dist/deploy-options.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/resource-builder.d.ts.map +0 -1
- package/dist/resource-builder.js.map +0 -1
- package/dist/rest-api-alarms.d.ts.map +0 -1
- package/dist/rest-api-alarms.js.map +0 -1
- package/dist/rest-api-builder.d.ts.map +0 -1
- package/dist/rest-api-builder.js.map +0 -1
- package/dist/spec-rest-api-builder.d.ts.map +0 -1
- package/dist/spec-rest-api-builder.js.map +0 -1
- /package/dist/{alarm-config.d.ts → commonjs/alarm-config.d.ts} +0 -0
- /package/dist/{alarm-defaults.d.ts → commonjs/alarm-defaults.d.ts} +0 -0
- /package/dist/{builder-common.d.ts → commonjs/builder-common.d.ts} +0 -0
- /package/dist/{defaults.d.ts → commonjs/defaults.d.ts} +0 -0
- /package/dist/{deploy-options.d.ts → commonjs/deploy-options.d.ts} +0 -0
- /package/dist/{index.d.ts → commonjs/index.d.ts} +0 -0
- /package/dist/{resource-builder.d.ts → commonjs/resource-builder.d.ts} +0 -0
- /package/dist/{rest-api-alarms.d.ts → commonjs/rest-api-alarms.d.ts} +0 -0
- /package/dist/{rest-api-builder.d.ts → commonjs/rest-api-builder.d.ts} +0 -0
- /package/dist/{spec-rest-api-builder.d.ts → commonjs/spec-rest-api-builder.d.ts} +0 -0
- /package/dist/{alarm-config.js → esm/alarm-config.js} +0 -0
- /package/dist/{alarm-defaults.js → esm/alarm-defaults.js} +0 -0
- /package/dist/{builder-common.js → esm/builder-common.js} +0 -0
- /package/dist/{defaults.js → esm/defaults.js} +0 -0
- /package/dist/{deploy-options.js → esm/deploy-options.js} +0 -0
- /package/dist/{index.js → esm/index.js} +0 -0
- /package/dist/{resource-builder.js → esm/resource-builder.js} +0 -0
- /package/dist/{rest-api-alarms.js → esm/rest-api-alarms.js} +0 -0
- /package/dist/{rest-api-builder.js → esm/rest-api-builder.js} +0 -0
- /package/dist/{spec-rest-api-builder.js → esm/spec-rest-api-builder.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-config.d.ts","sourceRoot":"","sources":["../../src/alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAElC;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAElC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CAC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-config.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"alarm-config.js","sourceRoot":"","sources":["../../src/alarm-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-defaults.d.ts","sourceRoot":"","sources":["../../src/alarm-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,UAAU,oBAAoB;IAC5B,OAAO,EAAE,IAAI,CAAC;IACd,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,EAAE,mBAAmB,CAAC;IACjC,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,oBAsCrC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REST_API_ALARM_DEFAULTS = void 0;
|
|
4
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
5
|
+
/**
|
|
6
|
+
* AWS-recommended default alarm configuration for API Gateway REST APIs.
|
|
7
|
+
*
|
|
8
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#ApiGateway
|
|
9
|
+
*/
|
|
10
|
+
exports.REST_API_ALARM_DEFAULTS = {
|
|
11
|
+
enabled: true,
|
|
12
|
+
/**
|
|
13
|
+
* Elevated 4XX error rate indicates client-side issues such as
|
|
14
|
+
* authorization failures, invalid parameters, or throttling.
|
|
15
|
+
* Threshold 0.05 = 5% of requests.
|
|
16
|
+
*/
|
|
17
|
+
clientError: {
|
|
18
|
+
threshold: 0.05,
|
|
19
|
+
evaluationPeriods: 5,
|
|
20
|
+
datapointsToAlarm: 5,
|
|
21
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
|
|
22
|
+
},
|
|
23
|
+
/**
|
|
24
|
+
* Elevated 5XX error rate indicates server-side issues such as
|
|
25
|
+
* backend failures or integration errors.
|
|
26
|
+
* Threshold 0.05 = 5% of requests.
|
|
27
|
+
*/
|
|
28
|
+
serverError: {
|
|
29
|
+
threshold: 0.05,
|
|
30
|
+
evaluationPeriods: 3,
|
|
31
|
+
datapointsToAlarm: 3,
|
|
32
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
|
|
33
|
+
},
|
|
34
|
+
/**
|
|
35
|
+
* Elevated p90 latency indicates slow API responses that may
|
|
36
|
+
* impact user experience or trigger downstream timeouts.
|
|
37
|
+
* Default 2500ms threshold per AWS recommendation.
|
|
38
|
+
*/
|
|
39
|
+
latency: {
|
|
40
|
+
threshold: 2500,
|
|
41
|
+
evaluationPeriods: 5,
|
|
42
|
+
datapointsToAlarm: 5,
|
|
43
|
+
treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=alarm-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-defaults.js","sourceRoot":"","sources":["../../src/alarm-defaults.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAU9D;;;;GAIG;AACU,QAAA,uBAAuB,GAAyB;IAC3D,OAAO,EAAE,IAAI;IAEb;;;;OAIG;IACH,WAAW,EAAE;QACX,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,iCAAgB,CAAC,aAAa;KACjD;IAED;;;;OAIG;IACH,WAAW,EAAE;QACX,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,iCAAgB,CAAC,aAAa;KACjD;IAED;;;;OAIG;IACH,OAAO,EAAE;QACP,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,iCAAgB,CAAC,aAAa;KACjD;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder-common.d.ts","sourceRoot":"","sources":["../../src/builder-common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,kBAAkB,GAAG,KAAK,CAAC;CAChD;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,WAAW;IAC7D,qDAAqD;IACrD,GAAG,EAAE,CAAC,CAAC;IAEP;;;OAGG;IACH,cAAc,CAAC,EAAE,QAAQ,CAAC;IAE1B;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-common.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"builder-common.js","sourceRoot":"","sources":["../../src/builder-common.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,YAmBrC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,mBAAmB,CAU1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,OAAO,CAAC,uBAAuB,CAQnE,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SPEC_REST_API_DEFAULTS = exports.REST_API_DEFAULTS = exports.DEPLOY_OPTIONS_DEFAULTS = void 0;
|
|
4
|
+
const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
|
|
5
|
+
/**
|
|
6
|
+
* Secure, AWS-recommended deploy-stage defaults shared by all API Gateway
|
|
7
|
+
* builders. Each property can be individually overridden via the builder's
|
|
8
|
+
* fluent API.
|
|
9
|
+
*/
|
|
10
|
+
exports.DEPLOY_OPTIONS_DEFAULTS = {
|
|
11
|
+
/**
|
|
12
|
+
* Enable AWS X-Ray tracing on the API Gateway stage.
|
|
13
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/opex-distributed-tracing.html
|
|
14
|
+
*/
|
|
15
|
+
tracingEnabled: true,
|
|
16
|
+
/**
|
|
17
|
+
* Enable CloudWatch execution logging for API Gateway methods.
|
|
18
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/opex-logging.html
|
|
19
|
+
*/
|
|
20
|
+
loggingLevel: aws_apigateway_1.MethodLoggingLevel.INFO,
|
|
21
|
+
/**
|
|
22
|
+
* Disable full request/response body logging to prevent sensitive data
|
|
23
|
+
* from appearing in CloudWatch logs.
|
|
24
|
+
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-logging.html
|
|
25
|
+
*/
|
|
26
|
+
dataTraceEnabled: false,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Secure, AWS-recommended defaults applied to every REST API built with
|
|
30
|
+
* {@link createRestApiBuilder}. Each property can be individually overridden
|
|
31
|
+
* via the builder's fluent API.
|
|
32
|
+
*/
|
|
33
|
+
exports.REST_API_DEFAULTS = {
|
|
34
|
+
/**
|
|
35
|
+
* Automatically create an access log group with structured JSON output.
|
|
36
|
+
* Access logging provides an audit trail of all API calls for security
|
|
37
|
+
* monitoring and troubleshooting.
|
|
38
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/opex-logging.html
|
|
39
|
+
*/
|
|
40
|
+
accessLogging: true,
|
|
41
|
+
deployOptions: exports.DEPLOY_OPTIONS_DEFAULTS,
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Secure, AWS-recommended defaults applied to every spec-driven REST API
|
|
45
|
+
* built with {@link createSpecRestApiBuilder}. Each property can be
|
|
46
|
+
* individually overridden via the builder's fluent API.
|
|
47
|
+
*/
|
|
48
|
+
exports.SPEC_REST_API_DEFAULTS = {
|
|
49
|
+
/**
|
|
50
|
+
* Automatically create an access log group with structured JSON output.
|
|
51
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/opex-logging.html
|
|
52
|
+
*/
|
|
53
|
+
accessLogging: true,
|
|
54
|
+
deployOptions: exports.DEPLOY_OPTIONS_DEFAULTS,
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":";;;AAAA,+DAAmF;AAInF;;;;GAIG;AACU,QAAA,uBAAuB,GAAiB;IACnD;;;OAGG;IACH,cAAc,EAAE,IAAI;IAEpB;;;OAGG;IACH,YAAY,EAAE,mCAAkB,CAAC,IAAI;IAErC;;;;OAIG;IACH,gBAAgB,EAAE,KAAK;CACxB,CAAC;AAEF;;;;GAIG;AACU,QAAA,iBAAiB,GAAiC;IAC7D;;;;;OAKG;IACH,aAAa,EAAE,IAAI;IAEnB,aAAa,EAAE,+BAAuB;CACvC,CAAC;AAEF;;;;GAIG;AACU,QAAA,sBAAsB,GAAqC;IACtE;;;OAGG;IACH,aAAa,EAAE,IAAI;IAEnB,aAAa,EAAE,+BAAuB;CACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-options.d.ts","sourceRoot":"","sources":["../../src/deploy-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,UAAU,mBAAmB;IAC3B,cAAc,CAAC,EAAE,QAAQ,CAAC;IAC1B,aAAa,EAAE,YAAY,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,aAAa,EAAE,OAAO,GAAG,SAAS,EAClC,QAAQ,EAAE,YAAY,EACtB,iBAAiB,EAAE,YAAY,GAC9B,mBAAmB,CAsBrB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveDeployOptions = resolveDeployOptions;
|
|
4
|
+
const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
|
|
5
|
+
const logs_1 = require("@composurecdk/logs");
|
|
6
|
+
/**
|
|
7
|
+
* Resolves access logging configuration and merges deploy options with
|
|
8
|
+
* the provided defaults. Shared by {@link RestApiBuilder} and
|
|
9
|
+
* {@link SpecRestApiBuilder}.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
function resolveDeployOptions(scope, id, accessLogging, defaults, userDeployOptions) {
|
|
14
|
+
const autoAccessLog = (accessLogging ?? true) && !userDeployOptions.accessLogDestination;
|
|
15
|
+
let accessLogGroup;
|
|
16
|
+
let accessLogProps = {};
|
|
17
|
+
if (autoAccessLog) {
|
|
18
|
+
accessLogGroup = (0, logs_1.createLogGroupBuilder)().build(scope, `${id}AccessLogs`).logGroup;
|
|
19
|
+
accessLogProps = {
|
|
20
|
+
accessLogDestination: new aws_apigateway_1.LogGroupLogDestination(accessLogGroup),
|
|
21
|
+
accessLogFormat: aws_apigateway_1.AccessLogFormat.jsonWithStandardFields(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
accessLogGroup,
|
|
26
|
+
deployOptions: {
|
|
27
|
+
...defaults,
|
|
28
|
+
...accessLogProps,
|
|
29
|
+
...userDeployOptions,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=deploy-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-options.js","sourceRoot":"","sources":["../../src/deploy-options.ts"],"names":[],"mappings":";;AAqBA,oDA4BC;AAjDD,+DAIoC;AAGpC,6CAA2D;AAO3D;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAClC,KAAiB,EACjB,EAAU,EACV,aAAkC,EAClC,QAAsB,EACtB,iBAA+B;IAE/B,MAAM,aAAa,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC;IAEzF,IAAI,cAAoC,CAAC;IACzC,IAAI,cAAc,GAAG,EAAE,CAAC;IAExB,IAAI,aAAa,EAAE,CAAC;QAClB,cAAc,GAAG,IAAA,4BAAqB,GAAE,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC;QAClF,cAAc,GAAG;YACf,oBAAoB,EAAE,IAAI,uCAAsB,CAAC,cAAc,CAAC;YAChE,eAAe,EAAE,gCAAe,CAAC,sBAAsB,EAAE;SAC1D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,cAAc;QACd,aAAa,EAAE;YACb,GAAG,QAAQ;YACX,GAAG,cAAc;YACjB,GAAG,iBAAiB;SACrB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REST_API_ALARM_DEFAULTS = exports.SPEC_REST_API_DEFAULTS = exports.REST_API_DEFAULTS = exports.createSpecRestApiBuilder = exports.createRestApiBuilder = void 0;
|
|
4
|
+
var rest_api_builder_js_1 = require("./rest-api-builder.js");
|
|
5
|
+
Object.defineProperty(exports, "createRestApiBuilder", { enumerable: true, get: function () { return rest_api_builder_js_1.createRestApiBuilder; } });
|
|
6
|
+
var spec_rest_api_builder_js_1 = require("./spec-rest-api-builder.js");
|
|
7
|
+
Object.defineProperty(exports, "createSpecRestApiBuilder", { enumerable: true, get: function () { return spec_rest_api_builder_js_1.createSpecRestApiBuilder; } });
|
|
8
|
+
var defaults_js_1 = require("./defaults.js");
|
|
9
|
+
Object.defineProperty(exports, "REST_API_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.REST_API_DEFAULTS; } });
|
|
10
|
+
Object.defineProperty(exports, "SPEC_REST_API_DEFAULTS", { enumerable: true, get: function () { return defaults_js_1.SPEC_REST_API_DEFAULTS; } });
|
|
11
|
+
var alarm_defaults_js_1 = require("./alarm-defaults.js");
|
|
12
|
+
Object.defineProperty(exports, "REST_API_ALARM_DEFAULTS", { enumerable: true, get: function () { return alarm_defaults_js_1.REST_API_ALARM_DEFAULTS; } });
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,6DAK+B;AAJ7B,2HAAA,oBAAoB,OAAA;AAMtB,uEAKoC;AAJlC,oIAAA,wBAAwB,OAAA;AAK1B,6CAA0E;AAAjE,gHAAA,iBAAiB,OAAA;AAAE,qHAAA,sBAAsB,OAAA;AAElD,yDAA8D;AAArD,4HAAA,uBAAuB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-builder.d.ts","sourceRoot":"","sources":["../../src/resource-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE9D,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe;IAC1B,gBAAgB;IAChB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAwC;IAE/E;;;;;;;;OAQG;IACH,SAAS,CACP,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,EACrC,OAAO,CAAC,EAAE,aAAa,GACtB,IAAI;IAKP;;;;;;OAMG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IASpF;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAOvC,gBAAgB;IAChB,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,IAAI;CAczE"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResourceBuilder = void 0;
|
|
4
|
+
const core_1 = require("@composurecdk/core");
|
|
5
|
+
/**
|
|
6
|
+
* A declarative builder for defining API Gateway resources and methods.
|
|
7
|
+
*
|
|
8
|
+
* `ResourceBuilder` captures a tree of resource paths and HTTP methods as
|
|
9
|
+
* data. The tree is applied to actual CDK constructs during
|
|
10
|
+
* {@link RestApiBuilder.build}. Users do not construct `ResourceBuilder`
|
|
11
|
+
* directly — instances are provided via the {@link IRestApiBuilder.addResource}
|
|
12
|
+
* callback.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* createRestApiBuilder()
|
|
17
|
+
* .addResource("users", users => users
|
|
18
|
+
* .addMethod("GET", listIntegration)
|
|
19
|
+
* .addResource("{id}", user => user
|
|
20
|
+
* .addMethod("GET", getIntegration)
|
|
21
|
+
* .addMethod("DELETE", deleteIntegration)
|
|
22
|
+
* )
|
|
23
|
+
* );
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
class ResourceBuilder {
|
|
27
|
+
/** @internal */
|
|
28
|
+
definition = { methods: [], children: new Map() };
|
|
29
|
+
/**
|
|
30
|
+
* Adds an HTTP method to this resource.
|
|
31
|
+
*
|
|
32
|
+
* @param httpMethod - The HTTP verb (GET, POST, PUT, DELETE, etc.).
|
|
33
|
+
* @param integration - The backend integration for this method. Accepts a concrete
|
|
34
|
+
* {@link Integration} or a {@link Ref} that resolves to one at build time.
|
|
35
|
+
* @param options - Additional method configuration such as authorization or method responses.
|
|
36
|
+
* @returns This builder for chaining.
|
|
37
|
+
*/
|
|
38
|
+
addMethod(httpMethod, integration, options) {
|
|
39
|
+
this.definition.methods.push({ httpMethod, integration, options });
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Adds a child resource under this resource.
|
|
44
|
+
*
|
|
45
|
+
* @param pathPart - The path segment for the child resource (e.g. "users" or "\{id\}").
|
|
46
|
+
* @param configure - Optional callback to configure the child resource's methods and nested resources.
|
|
47
|
+
* @returns This builder for chaining.
|
|
48
|
+
*/
|
|
49
|
+
addResource(pathPart, configure) {
|
|
50
|
+
const child = new ResourceBuilder();
|
|
51
|
+
if (configure) {
|
|
52
|
+
configure(child);
|
|
53
|
+
}
|
|
54
|
+
this.definition.children.set(pathPart, child.definition);
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Copies this builder's resource tree onto `target`. Used by
|
|
59
|
+
* `RestApiBuilder.[COPY_STATE]` per ADR-0005's containers-fresh,
|
|
60
|
+
* elements-shared rule: the `methods` array and `children` Map are
|
|
61
|
+
* reconstructed on `target`, but `MethodDefinition` and child
|
|
62
|
+
* `ResourceDefinition` entries are shared by reference. Sharing the
|
|
63
|
+
* child entries is safe because the public API (`addResource`)
|
|
64
|
+
* replaces a child wholesale rather than mutating it in place.
|
|
65
|
+
*
|
|
66
|
+
* @internal
|
|
67
|
+
*/
|
|
68
|
+
copyInto(target) {
|
|
69
|
+
target.definition.methods.push(...this.definition.methods);
|
|
70
|
+
for (const [pathPart, childDef] of this.definition.children) {
|
|
71
|
+
target.definition.children.set(pathPart, childDef);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** @internal */
|
|
75
|
+
applyTo(resource, context = {}) {
|
|
76
|
+
for (const method of this.definition.methods) {
|
|
77
|
+
const integration = method.integration !== undefined ? (0, core_1.resolve)(method.integration, context) : undefined;
|
|
78
|
+
resource.addMethod(method.httpMethod, integration, method.options);
|
|
79
|
+
}
|
|
80
|
+
for (const [pathPart, childDef] of this.definition.children) {
|
|
81
|
+
const childResource = resource.addResource(pathPart);
|
|
82
|
+
const childBuilder = new ResourceBuilder();
|
|
83
|
+
childBuilder.definition.methods = childDef.methods;
|
|
84
|
+
childDef.children.forEach((v, k) => childBuilder.definition.children.set(k, v));
|
|
85
|
+
childBuilder.applyTo(childResource, context);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.ResourceBuilder = ResourceBuilder;
|
|
90
|
+
//# sourceMappingURL=resource-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-builder.js","sourceRoot":"","sources":["../../src/resource-builder.ts"],"names":[],"mappings":";;;AACA,6CAA8D;AAa9D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAa,eAAe;IAC1B,gBAAgB;IACP,UAAU,GAAuB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAE/E;;;;;;;;OAQG;IACH,SAAS,CACP,UAAkB,EAClB,WAAqC,EACrC,OAAuB;QAEvB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,QAAgB,EAAE,SAA+C;QAC3E,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAuB;QAC9B,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3D,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC5D,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,QAAmB,EAAE,UAAkC,EAAE;QAC/D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC7C,MAAM,WAAW,GACf,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtF,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC5D,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;YAC3C,YAAY,CAAC,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACnD,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChF,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF;AAvED,0CAuEC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-api-alarms.d.ts","sourceRoot":"","sources":["../../src/rest-api-alarms.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,KAAK,EAAqC,MAAM,4BAA4B,CAAC;AAC3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAoC,MAAM,0BAA0B,CAAC;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAuB5D;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,eAAe,EAAE,CAmDnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,kBAAkB,GAAG,KAAK,GAAG,SAAS,EAC9C,YAAY,GAAE,sBAAsB,CAAC,WAAW,CAAC,EAAO,GACvD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAUvB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveRestApiAlarmDefinitions = resolveRestApiAlarmDefinitions;
|
|
4
|
+
exports.createRestApiAlarms = createRestApiAlarms;
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
7
|
+
const cloudwatch_1 = require("@composurecdk/cloudwatch");
|
|
8
|
+
const alarm_defaults_js_1 = require("./alarm-defaults.js");
|
|
9
|
+
const METRIC_PERIOD = aws_cdk_lib_1.Duration.minutes(1);
|
|
10
|
+
const METRIC_PERIOD_LABEL = `${String(METRIC_PERIOD.toMinutes())} minute`;
|
|
11
|
+
/**
|
|
12
|
+
* Creates an API Gateway metric with the correct namespace and
|
|
13
|
+
* dimensions (ApiName + Stage).
|
|
14
|
+
*/
|
|
15
|
+
function apiMetric(api, metricName, statistic) {
|
|
16
|
+
return new aws_cloudwatch_1.Metric({
|
|
17
|
+
namespace: "AWS/ApiGateway",
|
|
18
|
+
metricName,
|
|
19
|
+
dimensionsMap: {
|
|
20
|
+
ApiName: api.restApiName,
|
|
21
|
+
Stage: api.deploymentStage.stageName,
|
|
22
|
+
},
|
|
23
|
+
statistic,
|
|
24
|
+
period: METRIC_PERIOD,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Resolves the recommended alarm configuration into fully-resolved
|
|
29
|
+
* {@link AlarmDefinition}s for an API Gateway REST API.
|
|
30
|
+
*/
|
|
31
|
+
function resolveRestApiAlarmDefinitions(api, config) {
|
|
32
|
+
if (config?.enabled === false)
|
|
33
|
+
return [];
|
|
34
|
+
const definitions = [];
|
|
35
|
+
if (config?.clientError !== false) {
|
|
36
|
+
const cfg = (0, cloudwatch_1.resolveAlarmConfig)(config?.clientError, alarm_defaults_js_1.REST_API_ALARM_DEFAULTS.clientError);
|
|
37
|
+
definitions.push({
|
|
38
|
+
key: "clientError",
|
|
39
|
+
alarmName: cfg.alarmName,
|
|
40
|
+
metric: apiMetric(api, "4XXError", aws_cloudwatch_1.Stats.AVERAGE),
|
|
41
|
+
threshold: cfg.threshold,
|
|
42
|
+
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD,
|
|
43
|
+
evaluationPeriods: cfg.evaluationPeriods,
|
|
44
|
+
datapointsToAlarm: cfg.datapointsToAlarm,
|
|
45
|
+
treatMissingData: cfg.treatMissingData,
|
|
46
|
+
description: `REST API client error rate is elevated. Threshold: > ${String(cfg.threshold * 100)}% of requests in ${METRIC_PERIOD_LABEL}.`,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (config?.serverError !== false) {
|
|
50
|
+
const cfg = (0, cloudwatch_1.resolveAlarmConfig)(config?.serverError, alarm_defaults_js_1.REST_API_ALARM_DEFAULTS.serverError);
|
|
51
|
+
definitions.push({
|
|
52
|
+
key: "serverError",
|
|
53
|
+
alarmName: cfg.alarmName,
|
|
54
|
+
metric: apiMetric(api, "5XXError", aws_cloudwatch_1.Stats.AVERAGE),
|
|
55
|
+
threshold: cfg.threshold,
|
|
56
|
+
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD,
|
|
57
|
+
evaluationPeriods: cfg.evaluationPeriods,
|
|
58
|
+
datapointsToAlarm: cfg.datapointsToAlarm,
|
|
59
|
+
treatMissingData: cfg.treatMissingData,
|
|
60
|
+
description: `REST API server error rate is elevated. Threshold: > ${String(cfg.threshold * 100)}% of requests in ${METRIC_PERIOD_LABEL}.`,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (config?.latency !== false) {
|
|
64
|
+
const cfg = (0, cloudwatch_1.resolveAlarmConfig)(config?.latency, alarm_defaults_js_1.REST_API_ALARM_DEFAULTS.latency);
|
|
65
|
+
definitions.push({
|
|
66
|
+
key: "latency",
|
|
67
|
+
alarmName: cfg.alarmName,
|
|
68
|
+
metric: apiMetric(api, "Latency", aws_cloudwatch_1.Stats.percentile(90)),
|
|
69
|
+
threshold: cfg.threshold,
|
|
70
|
+
comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
71
|
+
evaluationPeriods: cfg.evaluationPeriods,
|
|
72
|
+
datapointsToAlarm: cfg.datapointsToAlarm,
|
|
73
|
+
treatMissingData: cfg.treatMissingData,
|
|
74
|
+
description: `REST API p90 latency is elevated. Threshold: >= ${String(cfg.threshold)}ms in ${METRIC_PERIOD_LABEL}.`,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return definitions;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Creates AWS-recommended CloudWatch alarms for an API Gateway REST API,
|
|
81
|
+
* merging recommended definitions with any custom alarm builders.
|
|
82
|
+
*
|
|
83
|
+
* @param scope - CDK construct scope for creating alarm constructs.
|
|
84
|
+
* @param id - Base identifier for alarm construct ids.
|
|
85
|
+
* @param api - The REST API to create alarms for.
|
|
86
|
+
* @param config - User-provided alarm configuration, or `false` to disable all.
|
|
87
|
+
* @param customAlarms - Custom alarm builders added via `addAlarm()`.
|
|
88
|
+
* @returns A record mapping alarm keys to their created Alarm constructs.
|
|
89
|
+
*
|
|
90
|
+
* @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#ApiGateway
|
|
91
|
+
*/
|
|
92
|
+
function createRestApiAlarms(scope, id, api, config, customAlarms = []) {
|
|
93
|
+
if (config === false)
|
|
94
|
+
return {};
|
|
95
|
+
const enabled = config?.enabled ?? alarm_defaults_js_1.REST_API_ALARM_DEFAULTS.enabled;
|
|
96
|
+
if (!enabled)
|
|
97
|
+
return {};
|
|
98
|
+
const recommended = resolveRestApiAlarmDefinitions(api, config);
|
|
99
|
+
const custom = customAlarms.map((b) => b.resolve(api));
|
|
100
|
+
return (0, cloudwatch_1.createAlarms)(scope, id, [...recommended, ...custom]);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=rest-api-alarms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-api-alarms.js","sourceRoot":"","sources":["../../src/rest-api-alarms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-api-builder.d.ts","sourceRoot":"","sources":["../../src/rest-api-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,OAAO,EACP,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAG7F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;;;GAIG;AACH,MAAM,WAAW,mBAAoB,SAAQ,YAAY,EAAE,uBAAuB;CAAG;AAErF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AAElF,cAAM,cAAe,YAAW,SAAS,CAAC,oBAAoB,CAAC;;IAC7D,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAM;IAIzC,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,WAAW,CAAC,KAAK,sBAAsB,CAAC,WAAW,CAAC,GAC7F,IAAI;IAKP;;;;;;;;OAQG;IACH,SAAS,CACP,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,EACrC,OAAO,CAAC,EAAE,aAAa,GACtB,IAAI;IAKP;;;;;;OAMG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAKpF;;;;;;;;OAQG;IACH,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAK1C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,oBAAoB;CAoB7F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRestApiBuilder = createRestApiBuilder;
|
|
4
|
+
const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
|
|
5
|
+
const core_1 = require("@composurecdk/core");
|
|
6
|
+
const cloudformation_1 = require("@composurecdk/cloudformation");
|
|
7
|
+
const cloudwatch_1 = require("@composurecdk/cloudwatch");
|
|
8
|
+
const defaults_js_1 = require("./defaults.js");
|
|
9
|
+
const deploy_options_js_1 = require("./deploy-options.js");
|
|
10
|
+
const resource_builder_js_1 = require("./resource-builder.js");
|
|
11
|
+
const rest_api_alarms_js_1 = require("./rest-api-alarms.js");
|
|
12
|
+
class RestApiBuilder {
|
|
13
|
+
props = {};
|
|
14
|
+
#root = new resource_builder_js_1.ResourceBuilder();
|
|
15
|
+
#customAlarms = [];
|
|
16
|
+
addAlarm(key, configure) {
|
|
17
|
+
this.#customAlarms.push(configure(new cloudwatch_1.AlarmDefinitionBuilder(key)));
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Adds an HTTP method to the API root resource (`/`).
|
|
22
|
+
*
|
|
23
|
+
* @param httpMethod - The HTTP verb (GET, POST, PUT, DELETE, etc.).
|
|
24
|
+
* @param integration - The backend integration for this method. Accepts a concrete
|
|
25
|
+
* {@link Integration} or a {@link Ref} that resolves to one at build time.
|
|
26
|
+
* @param options - Additional method configuration such as authorization or method responses.
|
|
27
|
+
* @returns This builder for chaining.
|
|
28
|
+
*/
|
|
29
|
+
addMethod(httpMethod, integration, options) {
|
|
30
|
+
this.#root.addMethod(httpMethod, integration, options);
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Adds a child resource under the API root resource (`/`).
|
|
35
|
+
*
|
|
36
|
+
* @param pathPart - The path segment for the resource (e.g. "users" or "\{id\}").
|
|
37
|
+
* @param configure - Optional callback to configure the resource's methods and nested resources.
|
|
38
|
+
* @returns This builder for chaining.
|
|
39
|
+
*/
|
|
40
|
+
addResource(pathPart, configure) {
|
|
41
|
+
this.#root.addResource(pathPart, configure);
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Copies non-`props` state onto a freshly cloned builder. The resource
|
|
46
|
+
* tree is deep-cloned via `ResourceBuilder.copyInto` so mutations on
|
|
47
|
+
* either side after `.copy()` do not leak; the alarm-builder array is
|
|
48
|
+
* spread into a fresh container with elements shared by reference per
|
|
49
|
+
* ADR-0005's shallow-clone stance.
|
|
50
|
+
*
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
[core_1.COPY_STATE](target) {
|
|
54
|
+
this.#root.copyInto(target.#root);
|
|
55
|
+
target.#customAlarms.push(...this.#customAlarms);
|
|
56
|
+
}
|
|
57
|
+
build(scope, id, context) {
|
|
58
|
+
const { accessLogging, recommendedAlarms: alarmConfig, ...restApiProps } = this.props;
|
|
59
|
+
const { accessLogGroup, deployOptions } = (0, deploy_options_js_1.resolveDeployOptions)(scope, id, accessLogging, defaults_js_1.REST_API_DEFAULTS.deployOptions ?? {}, restApiProps.deployOptions ?? {});
|
|
60
|
+
const api = new aws_apigateway_1.RestApi(scope, id, {
|
|
61
|
+
...restApiProps,
|
|
62
|
+
deployOptions,
|
|
63
|
+
});
|
|
64
|
+
this.#root.applyTo(api.root, context ?? {});
|
|
65
|
+
const alarms = (0, rest_api_alarms_js_1.createRestApiAlarms)(scope, id, api, alarmConfig, this.#customAlarms);
|
|
66
|
+
return { api, accessLogGroup, alarms };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Creates a new {@link IRestApiBuilder} for configuring an API Gateway REST API.
|
|
71
|
+
*
|
|
72
|
+
* This is the entry point for defining a REST API component. The returned
|
|
73
|
+
* builder exposes every {@link RestApiProps} property as a fluent setter/getter,
|
|
74
|
+
* plus {@link IRestApiBuilder.addResource | addResource} and
|
|
75
|
+
* {@link IRestApiBuilder.addMethod | addMethod} for defining the resource tree.
|
|
76
|
+
* It implements {@link Lifecycle} for use with {@link compose}.
|
|
77
|
+
*
|
|
78
|
+
* @returns A fluent builder for an API Gateway REST API.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* const api = createRestApiBuilder()
|
|
83
|
+
* .restApiName("My Service")
|
|
84
|
+
* .description("Public API")
|
|
85
|
+
* .addResource("users", users => users
|
|
86
|
+
* .addMethod("GET", listUsersIntegration)
|
|
87
|
+
* .addResource("{id}", user => user
|
|
88
|
+
* .addMethod("GET", getUserIntegration)
|
|
89
|
+
* )
|
|
90
|
+
* );
|
|
91
|
+
*
|
|
92
|
+
* // Use standalone:
|
|
93
|
+
* const result = api.build(stack, "MyApi");
|
|
94
|
+
*
|
|
95
|
+
* // Or compose into a system:
|
|
96
|
+
* const system = compose(
|
|
97
|
+
* { api, handler: createFunctionBuilder() },
|
|
98
|
+
* { api: ["handler"], handler: [] },
|
|
99
|
+
* );
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
function createRestApiBuilder() {
|
|
103
|
+
return (0, cloudformation_1.taggedBuilder)(RestApiBuilder);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=rest-api-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest-api-builder.js","sourceRoot":"","sources":["../../src/rest-api-builder.ts"],"names":[],"mappings":";;AA0KA,oDAEC;AA5KD,+DAMoC;AAEpC,6CAAiF;AACjF,iEAAkF;AAClF,yDAAkE;AAElE,+CAAkD;AAClD,2DAA2D;AAC3D,+DAAwD;AACxD,6DAA2D;AA2C3D,MAAM,cAAc;IAClB,KAAK,GAAiC,EAAE,CAAC;IAChC,KAAK,GAAG,IAAI,qCAAe,EAAE,CAAC;IAC9B,aAAa,GAA0C,EAAE,CAAC;IAEnE,QAAQ,CACN,GAAW,EACX,SAA8F;QAE9F,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,mCAAsB,CAAc,GAAG,CAAC,CAAC,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,SAAS,CACP,UAAkB,EAClB,WAAqC,EACrC,OAAuB;QAEvB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,QAAgB,EAAE,SAA+C;QAC3E,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,CAAC,iBAAU,CAAC,CAAC,MAAsB;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACtF,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,IAAA,wCAAoB,EAC5D,KAAK,EACL,EAAE,EACF,aAAa,EACb,+BAAiB,CAAC,aAAa,IAAI,EAAE,EACrC,YAAY,CAAC,aAAa,IAAI,EAAE,CACjC,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,wBAAO,CAAC,KAAK,EAAE,EAAE,EAAE;YACjC,GAAG,YAAY;YACf,aAAa;SACd,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,IAAA,wCAAmB,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpF,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,SAAgB,oBAAoB;IAClC,OAAO,IAAA,8BAAa,EAAsC,cAAc,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-rest-api-builder.d.ts","sourceRoot":"","sources":["../../src/spec-rest-api-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAK7F;;;;;GAKG;AACH,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB,EAAE,uBAAuB;CAAG;AAE7F;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;AAE9F,cAAM,kBAAmB,YAAW,SAAS,CAAC,wBAAwB,CAAC;;IACrE,KAAK,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAM;IAG7C,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,KAAK,EAAE,sBAAsB,CAAC,WAAW,CAAC,KAAK,sBAAsB,CAAC,WAAW,CAAC,GAC7F,IAAI;IAKP,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAI9C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,wBAAwB;CAmB/D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,wBAAwB,IAAI,mBAAmB,CAE9D"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSpecRestApiBuilder = createSpecRestApiBuilder;
|
|
4
|
+
const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
|
|
5
|
+
const core_1 = require("@composurecdk/core");
|
|
6
|
+
const cloudformation_1 = require("@composurecdk/cloudformation");
|
|
7
|
+
const cloudwatch_1 = require("@composurecdk/cloudwatch");
|
|
8
|
+
const defaults_js_1 = require("./defaults.js");
|
|
9
|
+
const deploy_options_js_1 = require("./deploy-options.js");
|
|
10
|
+
const rest_api_alarms_js_1 = require("./rest-api-alarms.js");
|
|
11
|
+
class SpecRestApiBuilder {
|
|
12
|
+
props = {};
|
|
13
|
+
#customAlarms = [];
|
|
14
|
+
addAlarm(key, configure) {
|
|
15
|
+
this.#customAlarms.push(configure(new cloudwatch_1.AlarmDefinitionBuilder(key)));
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
/** @internal — see ADR-0005. */
|
|
19
|
+
[core_1.COPY_STATE](target) {
|
|
20
|
+
target.#customAlarms.push(...this.#customAlarms);
|
|
21
|
+
}
|
|
22
|
+
build(scope, id) {
|
|
23
|
+
const { accessLogging, recommendedAlarms: alarmConfig, ...specRestApiProps } = this.props;
|
|
24
|
+
const { accessLogGroup, deployOptions } = (0, deploy_options_js_1.resolveDeployOptions)(scope, id, accessLogging, defaults_js_1.SPEC_REST_API_DEFAULTS.deployOptions ?? {}, specRestApiProps.deployOptions ?? {});
|
|
25
|
+
const api = new aws_apigateway_1.SpecRestApi(scope, id, {
|
|
26
|
+
...specRestApiProps,
|
|
27
|
+
deployOptions,
|
|
28
|
+
});
|
|
29
|
+
const alarms = (0, rest_api_alarms_js_1.createRestApiAlarms)(scope, id, api, alarmConfig, this.#customAlarms);
|
|
30
|
+
return { api, accessLogGroup, alarms };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new {@link ISpecRestApiBuilder} for configuring an API Gateway
|
|
35
|
+
* REST API from an OpenAPI specification.
|
|
36
|
+
*
|
|
37
|
+
* This is the entry point for defining a spec-driven REST API component. The
|
|
38
|
+
* returned builder exposes every {@link SpecRestApiProps} property as a fluent
|
|
39
|
+
* setter/getter. It implements {@link Lifecycle} for use with {@link compose}.
|
|
40
|
+
*
|
|
41
|
+
* The API structure — resources, methods, and integrations — is defined
|
|
42
|
+
* entirely by the OpenAPI specification passed to {@link apiDefinition}.
|
|
43
|
+
* Use CDK's {@link ApiDefinition} static methods to load the spec from an
|
|
44
|
+
* inline object, a local file, or an S3 bucket.
|
|
45
|
+
*
|
|
46
|
+
* @returns A fluent builder for a spec-driven API Gateway REST API.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts
|
|
50
|
+
* // From a local OpenAPI file
|
|
51
|
+
* const api = createSpecRestApiBuilder()
|
|
52
|
+
* .restApiName("PetStore")
|
|
53
|
+
* .apiDefinition(ApiDefinition.fromAsset("openapi/petstore.yaml"));
|
|
54
|
+
*
|
|
55
|
+
* // From an inline definition
|
|
56
|
+
* const api = createSpecRestApiBuilder()
|
|
57
|
+
* .restApiName("PetStore")
|
|
58
|
+
* .apiDefinition(ApiDefinition.fromInline({
|
|
59
|
+
* openapi: "3.0.2",
|
|
60
|
+
* info: { title: "PetStore", version: "1.0" },
|
|
61
|
+
* paths: { "/pets": { get: { ... } } },
|
|
62
|
+
* }));
|
|
63
|
+
*
|
|
64
|
+
* // Compose into a system
|
|
65
|
+
* const system = compose(
|
|
66
|
+
* { api },
|
|
67
|
+
* { api: [] },
|
|
68
|
+
* );
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
function createSpecRestApiBuilder() {
|
|
72
|
+
return (0, cloudformation_1.taggedBuilder)(SpecRestApiBuilder);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=spec-rest-api-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-rest-api-builder.js","sourceRoot":"","sources":["../../src/spec-rest-api-builder.ts"],"names":[],"mappings":";;AA2HA,4DAEC;AA7HD,+DAAkG;AAElG,6CAAgE;AAChE,iEAAkF;AAClF,yDAAkE;AAElE,+CAAuD;AACvD,2DAA2D;AAC3D,6DAA2D;AAuC3D,MAAM,kBAAkB;IACtB,KAAK,GAAqC,EAAE,CAAC;IACpC,aAAa,GAA0C,EAAE,CAAC;IAEnE,QAAQ,CACN,GAAW,EACX,SAA8F;QAE9F,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,mCAAsB,CAAc,GAAG,CAAC,CAAC,CAAC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,CAAC,iBAAU,CAAC,CAAC,MAA0B;QACrC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU;QACjC,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1F,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,IAAA,wCAAoB,EAC5D,KAAK,EACL,EAAE,EACF,aAAa,EACb,oCAAsB,CAAC,aAAa,IAAI,EAAE,EAC1C,gBAAgB,CAAC,aAAa,IAAI,EAAE,CACrC,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,4BAAW,CAAC,KAAK,EAAE,EAAE,EAAE;YACrC,GAAG,gBAAgB;YACnB,aAAa;SACM,CAAC,CAAC;QAEvB,MAAM,MAAM,GAAG,IAAA,wCAAmB,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpF,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,SAAgB,wBAAwB;IACtC,OAAO,IAAA,8BAAa,EAA8C,kBAAkB,CAAC,CAAC;AACxF,CAAC"}
|