@aws-cdk/aws-elasticache-alpha 2.218.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +8808 -0
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +217 -0
- package/LICENSE +201 -0
- package/NOTICE +2 -0
- package/README.md +421 -0
- package/lib/common.d.ts +13 -0
- package/lib/common.js +18 -0
- package/lib/iam-user.d.ts +79 -0
- package/lib/iam-user.js +106 -0
- package/lib/index.d.ts +8 -0
- package/lib/index.js +25 -0
- package/lib/no-password-user.d.ts +64 -0
- package/lib/no-password-user.js +78 -0
- package/lib/password-user.d.ts +70 -0
- package/lib/password-user.js +79 -0
- package/lib/serverless-cache-base.d.ts +247 -0
- package/lib/serverless-cache-base.js +183 -0
- package/lib/serverless-cache.d.ts +341 -0
- package/lib/serverless-cache.js +429 -0
- package/lib/user-base.d.ts +148 -0
- package/lib/user-base.js +114 -0
- package/lib/user-group.d.ts +199 -0
- package/lib/user-group.js +239 -0
- package/package.json +117 -0
- package/rosetta/_generated.ts-fixture +6 -0
- package/rosetta/default.ts-fixture +16 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ServerlessCacheBase = exports.CacheEngine = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const cloudwatch = require("aws-cdk-lib/aws-cloudwatch");
|
|
7
|
+
const iam = require("aws-cdk-lib/aws-iam");
|
|
8
|
+
const core_1 = require("aws-cdk-lib/core");
|
|
9
|
+
/**
|
|
10
|
+
* Supported cache engines together with available versions.
|
|
11
|
+
*/
|
|
12
|
+
var CacheEngine;
|
|
13
|
+
(function (CacheEngine) {
|
|
14
|
+
/**
|
|
15
|
+
* Valkey engine, latest major version available, minor version is selected automatically
|
|
16
|
+
* For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
|
|
17
|
+
*/
|
|
18
|
+
CacheEngine["VALKEY_LATEST"] = "valkey";
|
|
19
|
+
/**
|
|
20
|
+
* Valkey engine, major version 7, minor version is selected automatically
|
|
21
|
+
* For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
|
|
22
|
+
*/
|
|
23
|
+
CacheEngine["VALKEY_7"] = "valkey_7";
|
|
24
|
+
/**
|
|
25
|
+
* Valkey engine, major version 8, minor version is selected automatically
|
|
26
|
+
* For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
|
|
27
|
+
*/
|
|
28
|
+
CacheEngine["VALKEY_8"] = "valkey_8";
|
|
29
|
+
/**
|
|
30
|
+
* Redis engine, latest major version available, minor version is selected automatically
|
|
31
|
+
* For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
|
|
32
|
+
*/
|
|
33
|
+
CacheEngine["REDIS_LATEST"] = "redis";
|
|
34
|
+
/**
|
|
35
|
+
* Redis engine, major version 7, minor version is selected automatically
|
|
36
|
+
* For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
|
|
37
|
+
*/
|
|
38
|
+
CacheEngine["REDIS_7"] = "redis_7";
|
|
39
|
+
/**
|
|
40
|
+
* Memcached engine, latest major version available, minor version is selected automatically
|
|
41
|
+
* For more information about the features related to this version check: https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/engine-versions.html
|
|
42
|
+
*/
|
|
43
|
+
CacheEngine["MEMCACHED_LATEST"] = "memcached";
|
|
44
|
+
})(CacheEngine || (exports.CacheEngine = CacheEngine = {}));
|
|
45
|
+
/**
|
|
46
|
+
* Base class for ServerlessCache constructs
|
|
47
|
+
*/
|
|
48
|
+
class ServerlessCacheBase extends core_1.Resource {
|
|
49
|
+
/**
|
|
50
|
+
* Grant connect permissions to the cache
|
|
51
|
+
*
|
|
52
|
+
* @param grantee The principal to grant permissions to
|
|
53
|
+
*/
|
|
54
|
+
grantConnect(grantee) {
|
|
55
|
+
return this.grant(grantee, 'elasticache:Connect', 'elasticache:DescribeServerlessCaches');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Grant the given identity custom permissions
|
|
59
|
+
*
|
|
60
|
+
* @param grantee The principal to grant permissions to
|
|
61
|
+
* @param actions The actions to grant
|
|
62
|
+
*/
|
|
63
|
+
grant(grantee, ...actions) {
|
|
64
|
+
return iam.Grant.addToPrincipal({
|
|
65
|
+
grantee,
|
|
66
|
+
actions,
|
|
67
|
+
resourceArns: [this.serverlessCacheArn],
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Return the given named metric for this cache
|
|
72
|
+
*
|
|
73
|
+
* @param metricName The name of the metric
|
|
74
|
+
* @param props Additional properties which will be merged with the default metric
|
|
75
|
+
* @default Average over 5 minutes
|
|
76
|
+
*/
|
|
77
|
+
metric(metricName, props) {
|
|
78
|
+
return new cloudwatch.Metric({
|
|
79
|
+
namespace: 'AWS/ElastiCache',
|
|
80
|
+
metricName,
|
|
81
|
+
dimensionsMap: {
|
|
82
|
+
ServerlessCacheName: this.serverlessCacheName,
|
|
83
|
+
},
|
|
84
|
+
period: core_1.Duration.minutes(5),
|
|
85
|
+
statistic: 'Average',
|
|
86
|
+
...props,
|
|
87
|
+
}).attachTo(this);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Metric for cache hit count
|
|
91
|
+
*
|
|
92
|
+
* @param props Additional properties which will be merged with the default metric
|
|
93
|
+
* @default Sum over 5 minutes
|
|
94
|
+
*/
|
|
95
|
+
metricCacheHitCount(props) {
|
|
96
|
+
return this.metric('CacheHits', { statistic: 'Sum', ...props });
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Metric for cache miss count
|
|
100
|
+
*
|
|
101
|
+
* @param props Additional properties which will be merged with the default metric
|
|
102
|
+
* @default Sum over 5 minutes
|
|
103
|
+
*/
|
|
104
|
+
metricCacheMissCount(props) {
|
|
105
|
+
return this.metric('CacheMisses', { statistic: 'Sum', ...props });
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Metric for cache hit rate
|
|
109
|
+
*
|
|
110
|
+
* @param props Additional properties which will be merged with the default metric
|
|
111
|
+
* @default Average over 5 minutes
|
|
112
|
+
*/
|
|
113
|
+
metricCacheHitRate(props) {
|
|
114
|
+
return this.metric('CacheHitRate', props);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Metric for data stored in the cache
|
|
118
|
+
*
|
|
119
|
+
* @param props Additional properties which will be merged with the default metric
|
|
120
|
+
* @default Maximum over 5 minutes
|
|
121
|
+
*/
|
|
122
|
+
metricDataStored(props) {
|
|
123
|
+
return this.metric('BytesUsedForCache', { statistic: 'Maximum', ...props });
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Metric for ECPUs consumed
|
|
127
|
+
*
|
|
128
|
+
* @param props Additional properties which will be merged with the default metric
|
|
129
|
+
* @default Average over 5 minutes
|
|
130
|
+
*/
|
|
131
|
+
metricProcessingUnitsConsumed(props) {
|
|
132
|
+
return this.metric('ElastiCacheProcessingUnits', props);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Metric for network bytes in
|
|
136
|
+
*
|
|
137
|
+
* @param props Additional properties which will be merged with the default metric
|
|
138
|
+
* @default Sum over 5 minutes
|
|
139
|
+
*/
|
|
140
|
+
metricNetworkBytesIn(props) {
|
|
141
|
+
return this.metric('NetworkBytesIn', { statistic: 'Sum', ...props });
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Metric for network bytes out
|
|
145
|
+
*
|
|
146
|
+
* @param props Additional properties which will be merged with the default metric
|
|
147
|
+
* @default Sum over 5 minutes
|
|
148
|
+
*/
|
|
149
|
+
metricNetworkBytesOut(props) {
|
|
150
|
+
return this.metric('NetworkBytesOut', { statistic: 'Sum', ...props });
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Metric for active connections
|
|
154
|
+
*
|
|
155
|
+
* @param props Additional properties which will be merged with the default metric
|
|
156
|
+
* @default Maximum over 5 minutes
|
|
157
|
+
*/
|
|
158
|
+
metricActiveConnections(props) {
|
|
159
|
+
return this.metric('CurrConnections', { statistic: 'Maximum', ...props });
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Metric for write request latency
|
|
163
|
+
*
|
|
164
|
+
* @param props Additional properties which will be merged with the default metric
|
|
165
|
+
* @default Average over 5 minutes
|
|
166
|
+
*/
|
|
167
|
+
metricWriteRequestLatency(props) {
|
|
168
|
+
return this.metric('SuccessfulWriteRequestLatency', props);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Metric for read request latency
|
|
172
|
+
*
|
|
173
|
+
* @param props Additional properties which will be merged with the default metric
|
|
174
|
+
* @default Average over 5 minutes
|
|
175
|
+
*/
|
|
176
|
+
metricReadRequestLatency(props) {
|
|
177
|
+
return this.metric('SuccessfulReadRequestLatency', props);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.ServerlessCacheBase = ServerlessCacheBase;
|
|
181
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
182
|
+
ServerlessCacheBase[_a] = { fqn: "@aws-cdk/aws-elasticache-alpha.ServerlessCacheBase", version: "2.218.0-alpha.0" };
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVybGVzcy1jYWNoZS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VydmVybGVzcy1jYWNoZS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EseURBQXlEO0FBRXpELDJDQUEyQztBQUUzQywyQ0FBaUU7QUFFakU7O0dBRUc7QUFDSCxJQUFZLFdBK0JYO0FBL0JELFdBQVksV0FBVztJQUNyQjs7O09BR0c7SUFDSCx1Q0FBd0IsQ0FBQTtJQUN4Qjs7O09BR0c7SUFDSCxvQ0FBcUIsQ0FBQTtJQUNyQjs7O09BR0c7SUFDSCxvQ0FBcUIsQ0FBQTtJQUNyQjs7O09BR0c7SUFDSCxxQ0FBc0IsQ0FBQTtJQUN0Qjs7O09BR0c7SUFDSCxrQ0FBbUIsQ0FBQTtJQUNuQjs7O09BR0c7SUFDSCw2Q0FBOEIsQ0FBQTtBQUNoQyxDQUFDLEVBL0JXLFdBQVcsMkJBQVgsV0FBVyxRQStCdEI7QUFzR0Q7O0dBRUc7QUFDSCxNQUFzQixtQkFBb0IsU0FBUSxlQUFRO0lBaUJ4RDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLE9BQXVCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztLQUMzRjtJQUNEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLE9BQXVCLEVBQUUsR0FBRyxPQUFpQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxPQUFPO1lBQ1AsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQ3hDLENBQUMsQ0FBQztLQUNKO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFVBQWtCLEVBQUUsS0FBZ0M7UUFDaEUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDM0IsU0FBUyxFQUFFLGlCQUFpQjtZQUM1QixVQUFVO1lBQ1YsYUFBYSxFQUFFO2dCQUNiLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDOUM7WUFDRCxNQUFNLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDM0IsU0FBUyxFQUFFLFNBQVM7WUFDcEIsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNuQjtJQUNEOzs7OztPQUtHO0lBQ0ksbUJBQW1CLENBQUMsS0FBZ0M7UUFDekQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ2pFO0lBQ0Q7Ozs7O09BS0c7SUFDSSxvQkFBb0IsQ0FBQyxLQUFnQztRQUMxRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDbkU7SUFDRDs7Ozs7T0FLRztJQUNJLGtCQUFrQixDQUFDLEtBQWdDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDM0M7SUFDRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFDLEtBQWdDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzdFO0lBQ0Q7Ozs7O09BS0c7SUFDSSw2QkFBNkIsQ0FBQyxLQUFnQztRQUNuRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDekQ7SUFDRDs7Ozs7T0FLRztJQUNJLG9CQUFvQixDQUFDLEtBQWdDO1FBQzFELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3RFO0lBQ0Q7Ozs7O09BS0c7SUFDSSxxQkFBcUIsQ0FBQyxLQUFnQztRQUMzRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUN2RTtJQUNEOzs7OztPQUtHO0lBQ0ksdUJBQXVCLENBQUMsS0FBZ0M7UUFDN0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDM0U7SUFDRDs7Ozs7T0FLRztJQUNJLHlCQUF5QixDQUFDLEtBQWdDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM1RDtJQUNEOzs7OztPQUtHO0lBQ0ksd0JBQXdCLENBQUMsS0FBZ0M7UUFDOUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzNEOztBQW5KSCxrREFvSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVXNlckdyb3VwIH0gZnJvbSAnLi91c2VyLWdyb3VwJztcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgSVJlc291cmNlLCBSZXNvdXJjZSwgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcblxuLyoqXG4gKiBTdXBwb3J0ZWQgY2FjaGUgZW5naW5lcyB0b2dldGhlciB3aXRoIGF2YWlsYWJsZSB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gQ2FjaGVFbmdpbmUge1xuICAvKipcbiAgICogVmFsa2V5IGVuZ2luZSwgbGF0ZXN0IG1ham9yIHZlcnNpb24gYXZhaWxhYmxlLCBtaW5vciB2ZXJzaW9uIGlzIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHlcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZlYXR1cmVzIHJlbGF0ZWQgdG8gdGhpcyB2ZXJzaW9uIGNoZWNrOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRWxhc3RpQ2FjaGUvbGF0ZXN0L2RnL2VuZ2luZS12ZXJzaW9ucy5odG1sXG4gICAqL1xuICBWQUxLRVlfTEFURVNUID0gJ3ZhbGtleScsXG4gIC8qKlxuICAgKiBWYWxrZXkgZW5naW5lLCBtYWpvciB2ZXJzaW9uIDcsIG1pbm9yIHZlcnNpb24gaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseVxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgcmVsYXRlZCB0byB0aGlzIHZlcnNpb24gY2hlY2s6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FbGFzdGlDYWNoZS9sYXRlc3QvZGcvZW5naW5lLXZlcnNpb25zLmh0bWxcbiAgICovXG4gIFZBTEtFWV83ID0gJ3ZhbGtleV83JyxcbiAgLyoqXG4gICAqIFZhbGtleSBlbmdpbmUsIG1ham9yIHZlcnNpb24gOCwgbWlub3IgdmVyc2lvbiBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5XG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyByZWxhdGVkIHRvIHRoaXMgdmVyc2lvbiBjaGVjazogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVsYXN0aUNhY2hlL2xhdGVzdC9kZy9lbmdpbmUtdmVyc2lvbnMuaHRtbFxuICAgKi9cbiAgVkFMS0VZXzggPSAndmFsa2V5XzgnLFxuICAvKipcbiAgICogUmVkaXMgZW5naW5lLCBsYXRlc3QgbWFqb3IgdmVyc2lvbiBhdmFpbGFibGUsIG1pbm9yIHZlcnNpb24gaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseVxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgcmVsYXRlZCB0byB0aGlzIHZlcnNpb24gY2hlY2s6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FbGFzdGlDYWNoZS9sYXRlc3QvZGcvZW5naW5lLXZlcnNpb25zLmh0bWxcbiAgICovXG4gIFJFRElTX0xBVEVTVCA9ICdyZWRpcycsXG4gIC8qKlxuICAgKiBSZWRpcyBlbmdpbmUsIG1ham9yIHZlcnNpb24gNywgbWlub3IgdmVyc2lvbiBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5XG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyByZWxhdGVkIHRvIHRoaXMgdmVyc2lvbiBjaGVjazogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVsYXN0aUNhY2hlL2xhdGVzdC9kZy9lbmdpbmUtdmVyc2lvbnMuaHRtbFxuICAgKi9cbiAgUkVESVNfNyA9ICdyZWRpc183JyxcbiAgLyoqXG4gICAqIE1lbWNhY2hlZCBlbmdpbmUsIGxhdGVzdCBtYWpvciB2ZXJzaW9uIGF2YWlsYWJsZSwgbWlub3IgdmVyc2lvbiBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5XG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyByZWxhdGVkIHRvIHRoaXMgdmVyc2lvbiBjaGVjazogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVsYXN0aUNhY2hlL2xhdGVzdC9kZy9lbmdpbmUtdmVyc2lvbnMuaHRtbFxuICAgKi9cbiAgTUVNQ0FDSEVEX0xBVEVTVCA9ICdtZW1jYWNoZWQnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBTZXJ2ZXJsZXNzIEVsYXN0aUNhY2hlIGNhY2hlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNlcnZlcmxlc3NDYWNoZSBleHRlbmRzIElSZXNvdXJjZSwgZWMyLklDb25uZWN0YWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgZW5naW5lIHVzZWQgYnkgdGhpcyBjYWNoZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5naW5lPzogQ2FjaGVFbmdpbmU7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmVybGVzcyBjYWNoZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOcyBvZiBiYWNrdXBzIHJlc3RvcmVkIGluIHRoZSBjYWNoZVxuICAgKi9cbiAgcmVhZG9ubHkgYmFja3VwQXJuc1RvUmVzdG9yZT86IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoaXMgY2FjaGUgaXMgZGVwbG95ZWQgaW5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuICAvKipcbiAgICogVGhlIHN1Ym5ldHMgdGhpcyBjYWNoZSBpcyBkZXBsb3llZCBpblxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0cz86IGVjMi5JU3VibmV0W107XG4gIC8qKlxuICAgKiBUaGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xuICAvKipcbiAgICogVGhlIHVzZXIgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FjaGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJHcm91cD86IElVc2VyR3JvdXA7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzZXJ2ZXJsZXNzIGNhY2hlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjb25uZWN0IHBlcm1pc3Npb25zIHRvIHRoZSBjYWNoZVxuICAgKi9cbiAgZ3JhbnRDb25uZWN0KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICAvKipcbiAgICogR3JhbnQgdGhlIGdpdmVuIGlkZW50aXR5IGN1c3RvbSBwZXJtaXNzaW9uc1xuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBjYWNoZVxuICAgKi9cbiAgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgY2FjaGUgaGl0IGNvdW50XG4gICAqL1xuICBtZXRyaWNDYWNoZUhpdENvdW50KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGNhY2hlIG1pc3MgY291bnRcbiAgICovXG4gIG1ldHJpY0NhY2hlTWlzc0NvdW50KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGNhY2hlIGhpdCByYXRlXG4gICAqL1xuICBtZXRyaWNDYWNoZUhpdFJhdGUocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgZGF0YSBzdG9yZWQgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBtZXRyaWNEYXRhU3RvcmVkKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIEVDUFVzIGNvbnN1bWVkXG4gICAqL1xuICBtZXRyaWNQcm9jZXNzaW5nVW5pdHNDb25zdW1lZChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuICAvKipcbiAgICogTWV0cmljIGZvciBuZXR3b3JrIGJ5dGVzIGluXG4gICAqL1xuICBtZXRyaWNOZXR3b3JrQnl0ZXNJbihwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuICAvKipcbiAgICogTWV0cmljIGZvciBuZXR3b3JrIGJ5dGVzIG91dFxuICAgKi9cbiAgbWV0cmljTmV0d29ya0J5dGVzT3V0KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGFjdGl2ZSBjb25uZWN0aW9uc1xuICAgKi9cbiAgbWV0cmljQWN0aXZlQ29ubmVjdGlvbnMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcbiAgLyoqXG4gICAqIE1ldHJpYyBmb3Igd3JpdGUgcmVxdWVzdCBsYXRlbmN5XG4gICAqL1xuICBtZXRyaWNXcml0ZVJlcXVlc3RMYXRlbmN5KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHJlYWQgcmVxdWVzdCBsYXRlbmN5XG4gICAqL1xuICBtZXRyaWNSZWFkUmVxdWVzdExhdGVuY3kocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBTZXJ2ZXJsZXNzQ2FjaGUgY29uc3RydWN0c1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VydmVybGVzc0NhY2hlQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVNlcnZlcmxlc3NDYWNoZSB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBlbmdpbmU/OiBDYWNoZUVuZ2luZTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHNlcnZlcmxlc3NDYWNoZU5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGJhY2t1cEFybnNUb1Jlc3RvcmU/OiBzdHJpbmdbXTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzdWJuZXRzPzogZWMyLklTdWJuZXRbXTtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogZWMyLklTZWN1cml0eUdyb3VwW107XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1c2VyR3JvdXA/OiBJVXNlckdyb3VwO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzZXJ2ZXJsZXNzQ2FjaGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQWNjZXNzIHRvIG5ldHdvcmsgY29ubmVjdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucztcblxuICAvKipcbiAgICogR3JhbnQgY29ubmVjdCBwZXJtaXNzaW9ucyB0byB0aGUgY2FjaGVcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgcHVibGljIGdyYW50Q29ubmVjdChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2VsYXN0aWNhY2hlOkNvbm5lY3QnLCAnZWxhc3RpY2FjaGU6RGVzY3JpYmVTZXJ2ZXJsZXNzQ2FjaGVzJyk7XG4gIH1cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBpZGVudGl0eSBjdXN0b20gcGVybWlzc2lvbnNcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgYWN0aW9ucyB0byBncmFudFxuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuc2VydmVybGVzc0NhY2hlQXJuXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGdpdmVuIG5hbWVkIG1ldHJpYyBmb3IgdGhpcyBjYWNoZVxuICAgKlxuICAgKiBAcGFyYW0gbWV0cmljTmFtZSBUaGUgbmFtZSBvZiB0aGUgbWV0cmljXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBtZXRyaWNcbiAgICogQGRlZmF1bHQgQXZlcmFnZSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbmFtZXNwYWNlOiAnQVdTL0VsYXN0aUNhY2hlJyxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFNlcnZlcmxlc3NDYWNoZU5hbWU6IHRoaXMuc2VydmVybGVzc0NhY2hlTmFtZSxcbiAgICAgIH0sXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGNhY2hlIGhpdCBjb3VudFxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHdoaWNoIHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHQgbWV0cmljXG4gICAqIEBkZWZhdWx0IFN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0NhY2hlSGl0Q291bnQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdDYWNoZUhpdHMnLCB7IHN0YXRpc3RpYzogJ1N1bScsIC4uLnByb3BzIH0pO1xuICB9XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIGNhY2hlIG1pc3MgY291bnRcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIEFkZGl0aW9uYWwgcHJvcGVydGllcyB3aGljaCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBkZWZhdWx0IG1ldHJpY1xuICAgKiBAZGVmYXVsdCBTdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDYWNoZU1pc3NDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0NhY2hlTWlzc2VzJywgeyBzdGF0aXN0aWM6ICdTdW0nLCAuLi5wcm9wcyB9KTtcbiAgfVxuICAvKipcbiAgICogTWV0cmljIGZvciBjYWNoZSBoaXQgcmF0ZVxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHdoaWNoIHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHQgbWV0cmljXG4gICAqIEBkZWZhdWx0IEF2ZXJhZ2Ugb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDYWNoZUhpdFJhdGUocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdDYWNoZUhpdFJhdGUnLCBwcm9wcyk7XG4gIH1cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgZGF0YSBzdG9yZWQgaW4gdGhlIGNhY2hlXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBtZXRyaWNcbiAgICogQGRlZmF1bHQgTWF4aW11bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0RhdGFTdG9yZWQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdCeXRlc1VzZWRGb3JDYWNoZScsIHsgc3RhdGlzdGljOiAnTWF4aW11bScsIC4uLnByb3BzIH0pO1xuICB9XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIEVDUFVzIGNvbnN1bWVkXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBtZXRyaWNcbiAgICogQGRlZmF1bHQgQXZlcmFnZSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1Byb2Nlc3NpbmdVbml0c0NvbnN1bWVkKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnRWxhc3RpQ2FjaGVQcm9jZXNzaW5nVW5pdHMnLCBwcm9wcyk7XG4gIH1cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgbmV0d29yayBieXRlcyBpblxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHdoaWNoIHdpbGwgYmUgbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHQgbWV0cmljXG4gICAqIEBkZWZhdWx0IFN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY05ldHdvcmtCeXRlc0luKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnTmV0d29ya0J5dGVzSW4nLCB7IHN0YXRpc3RpYzogJ1N1bScsIC4uLnByb3BzIH0pO1xuICB9XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIG5ldHdvcmsgYnl0ZXMgb3V0XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBtZXRyaWNcbiAgICogQGRlZmF1bHQgU3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTmV0d29ya0J5dGVzT3V0KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnTmV0d29ya0J5dGVzT3V0JywgeyBzdGF0aXN0aWM6ICdTdW0nLCAuLi5wcm9wcyB9KTtcbiAgfVxuICAvKipcbiAgICogTWV0cmljIGZvciBhY3RpdmUgY29ubmVjdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIEFkZGl0aW9uYWwgcHJvcGVydGllcyB3aGljaCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBkZWZhdWx0IG1ldHJpY1xuICAgKiBAZGVmYXVsdCBNYXhpbXVtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQWN0aXZlQ29ubmVjdGlvbnMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdDdXJyQ29ubmVjdGlvbnMnLCB7IHN0YXRpc3RpYzogJ01heGltdW0nLCAuLi5wcm9wcyB9KTtcbiAgfVxuICAvKipcbiAgICogTWV0cmljIGZvciB3cml0ZSByZXF1ZXN0IGxhdGVuY3lcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIEFkZGl0aW9uYWwgcHJvcGVydGllcyB3aGljaCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBkZWZhdWx0IG1ldHJpY1xuICAgKiBAZGVmYXVsdCBBdmVyYWdlIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljV3JpdGVSZXF1ZXN0TGF0ZW5jeShwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1N1Y2Nlc3NmdWxXcml0ZVJlcXVlc3RMYXRlbmN5JywgcHJvcHMpO1xuICB9XG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHJlYWQgcmVxdWVzdCBsYXRlbmN5XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgd2hpY2ggd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZGVmYXVsdCBtZXRyaWNcbiAgICogQGRlZmF1bHQgQXZlcmFnZSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1JlYWRSZXF1ZXN0TGF0ZW5jeShwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ1N1Y2Nlc3NmdWxSZWFkUmVxdWVzdExhdGVuY3knLCBwcm9wcyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { IServerlessCache, ServerlessCacheBase, CacheEngine } from './serverless-cache-base';
|
|
3
|
+
import { IUserGroup } from './user-group';
|
|
4
|
+
import * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
5
|
+
import * as events from 'aws-cdk-lib/aws-events';
|
|
6
|
+
import * as kms from 'aws-cdk-lib/aws-kms';
|
|
7
|
+
import { Size } from 'aws-cdk-lib/core';
|
|
8
|
+
/**
|
|
9
|
+
* Usage limits configuration for ServerlessCache
|
|
10
|
+
*/
|
|
11
|
+
export interface CacheUsageLimitsProperty {
|
|
12
|
+
/**
|
|
13
|
+
* Minimum data storage size (1 GB)
|
|
14
|
+
*
|
|
15
|
+
* @default - No minimum limit
|
|
16
|
+
*/
|
|
17
|
+
readonly dataStorageMinimumSize?: Size;
|
|
18
|
+
/**
|
|
19
|
+
* Maximum data storage size (5000 GB)
|
|
20
|
+
*
|
|
21
|
+
* @default - No maximum limit
|
|
22
|
+
*/
|
|
23
|
+
readonly dataStorageMaximumSize?: Size;
|
|
24
|
+
/**
|
|
25
|
+
* Minimum request rate limit (1000 ECPUs per second)
|
|
26
|
+
*
|
|
27
|
+
* @default - No minimum limit
|
|
28
|
+
*/
|
|
29
|
+
readonly requestRateLimitMinimum?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Maximum request rate limit (15000000 ECPUs per second)
|
|
32
|
+
*
|
|
33
|
+
* @default - No maximum limit
|
|
34
|
+
*/
|
|
35
|
+
readonly requestRateLimitMaximum?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Backup configuration for ServerlessCache
|
|
39
|
+
*/
|
|
40
|
+
export interface BackupSettings {
|
|
41
|
+
/**
|
|
42
|
+
* Automated daily backup UTC time
|
|
43
|
+
*
|
|
44
|
+
* @default - No automated backups
|
|
45
|
+
*/
|
|
46
|
+
readonly backupTime?: events.Schedule;
|
|
47
|
+
/**
|
|
48
|
+
* Number of days to retain backups (1-35)
|
|
49
|
+
*
|
|
50
|
+
* @default - Backups are not retained
|
|
51
|
+
*/
|
|
52
|
+
readonly backupRetentionLimit?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Name for the final backup taken before deletion
|
|
55
|
+
*
|
|
56
|
+
* @default - No final backup
|
|
57
|
+
*/
|
|
58
|
+
readonly backupNameBeforeDeletion?: string;
|
|
59
|
+
/**
|
|
60
|
+
* ARNs of backups from which to restore data into the new cache
|
|
61
|
+
*
|
|
62
|
+
* @default - Create a new cache with no existing data
|
|
63
|
+
*/
|
|
64
|
+
readonly backupArnsToRestore?: string[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Properties for defining a ServerlessCache
|
|
68
|
+
*/
|
|
69
|
+
export interface ServerlessCacheProps {
|
|
70
|
+
/**
|
|
71
|
+
* The cache engine combined with the version
|
|
72
|
+
* Enum options: VALKEY_DEFAULT, VALKEY_7, VALKEY_8, REDIS_DEFAULT, MEMCACHED_DEFAULT
|
|
73
|
+
* The default options bring the latest versions available.
|
|
74
|
+
*
|
|
75
|
+
* @default when not provided, the default engine would be Valkey, latest version available (VALKEY_DEFAULT)
|
|
76
|
+
*/
|
|
77
|
+
readonly engine?: CacheEngine;
|
|
78
|
+
/**
|
|
79
|
+
* Name for the serverless cache
|
|
80
|
+
*
|
|
81
|
+
* @default automatically generated name by Resource
|
|
82
|
+
*/
|
|
83
|
+
readonly serverlessCacheName?: string;
|
|
84
|
+
/**
|
|
85
|
+
* A description for the cache
|
|
86
|
+
*
|
|
87
|
+
* @default - No description
|
|
88
|
+
*/
|
|
89
|
+
readonly description?: string;
|
|
90
|
+
/**
|
|
91
|
+
* Usage limits for the cache
|
|
92
|
+
*
|
|
93
|
+
* @default - No usage limits
|
|
94
|
+
*/
|
|
95
|
+
readonly cacheUsageLimits?: CacheUsageLimitsProperty;
|
|
96
|
+
/**
|
|
97
|
+
* Backup configuration
|
|
98
|
+
*
|
|
99
|
+
* @default - No backups configured
|
|
100
|
+
*/
|
|
101
|
+
readonly backup?: BackupSettings;
|
|
102
|
+
/**
|
|
103
|
+
* KMS key for encryption
|
|
104
|
+
*
|
|
105
|
+
* @default - Service managed encryption (AWS owned KMS key)
|
|
106
|
+
*/
|
|
107
|
+
readonly kmsKey?: kms.IKey;
|
|
108
|
+
/**
|
|
109
|
+
* The VPC to place the cache in
|
|
110
|
+
*/
|
|
111
|
+
readonly vpc: ec2.IVpc;
|
|
112
|
+
/**
|
|
113
|
+
* Which subnets to place the cache in
|
|
114
|
+
*
|
|
115
|
+
* @default - Private subnets with egress
|
|
116
|
+
*/
|
|
117
|
+
readonly vpcSubnets?: ec2.SubnetSelection;
|
|
118
|
+
/**
|
|
119
|
+
* Security groups for the cache
|
|
120
|
+
*
|
|
121
|
+
* @default - A new security group is created
|
|
122
|
+
*/
|
|
123
|
+
readonly securityGroups?: ec2.ISecurityGroup[];
|
|
124
|
+
/**
|
|
125
|
+
* User group for access control
|
|
126
|
+
*
|
|
127
|
+
* @default - No user group
|
|
128
|
+
*/
|
|
129
|
+
readonly userGroup?: IUserGroup;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Attributes that can be specified when importing a ServerlessCache
|
|
133
|
+
*/
|
|
134
|
+
export interface ServerlessCacheAttributes {
|
|
135
|
+
/**
|
|
136
|
+
* The cache engine used by this cache
|
|
137
|
+
*
|
|
138
|
+
* @default - engine type is unknown
|
|
139
|
+
*/
|
|
140
|
+
readonly engine?: CacheEngine;
|
|
141
|
+
/**
|
|
142
|
+
* The name of the serverless cache
|
|
143
|
+
*
|
|
144
|
+
* One of `serverlessCacheName` or `serverlessCacheArn` is required.
|
|
145
|
+
*
|
|
146
|
+
* @default - derived from serverlessCacheArn
|
|
147
|
+
*/
|
|
148
|
+
readonly serverlessCacheName?: string;
|
|
149
|
+
/**
|
|
150
|
+
* The ARN of the serverless cache
|
|
151
|
+
*
|
|
152
|
+
* One of `serverlessCacheName` or `serverlessCacheArn` is required.
|
|
153
|
+
*
|
|
154
|
+
* @default - derived from serverlessCacheName
|
|
155
|
+
*/
|
|
156
|
+
readonly serverlessCacheArn?: string;
|
|
157
|
+
/**
|
|
158
|
+
* The ARNs of backups restored in the cache
|
|
159
|
+
*
|
|
160
|
+
* @default - backups are unknown
|
|
161
|
+
*/
|
|
162
|
+
readonly backupArnsToRestore?: string[];
|
|
163
|
+
/**
|
|
164
|
+
* The KMS key used for encryption
|
|
165
|
+
*
|
|
166
|
+
* @default - encryption key is unknown
|
|
167
|
+
*/
|
|
168
|
+
readonly kmsKey?: kms.IKey;
|
|
169
|
+
/**
|
|
170
|
+
* The VPC this cache is deployed in
|
|
171
|
+
*
|
|
172
|
+
* @default - VPC is unknown
|
|
173
|
+
*/
|
|
174
|
+
readonly vpc?: ec2.IVpc;
|
|
175
|
+
/**
|
|
176
|
+
* The subnets this cache is deployed in
|
|
177
|
+
*
|
|
178
|
+
* @default - subnets are unknown
|
|
179
|
+
*/
|
|
180
|
+
readonly subnets?: ec2.ISubnet[];
|
|
181
|
+
/**
|
|
182
|
+
* The security groups associated with this cache
|
|
183
|
+
*
|
|
184
|
+
* @default - security groups are unknown
|
|
185
|
+
*/
|
|
186
|
+
readonly securityGroups?: ec2.ISecurityGroup[];
|
|
187
|
+
/**
|
|
188
|
+
* The user group associated with this cache
|
|
189
|
+
*
|
|
190
|
+
* @default - user group is unknown
|
|
191
|
+
*/
|
|
192
|
+
readonly userGroup?: IUserGroup;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* A serverless ElastiCache cache
|
|
196
|
+
*
|
|
197
|
+
* @resource AWS::ElastiCache::ServerlessCache
|
|
198
|
+
*/
|
|
199
|
+
export declare class ServerlessCache extends ServerlessCacheBase {
|
|
200
|
+
/**
|
|
201
|
+
* Uniquely identifies this class.
|
|
202
|
+
*/
|
|
203
|
+
static readonly PROPERTY_INJECTION_ID: string;
|
|
204
|
+
/**
|
|
205
|
+
* Return whether the given object is a `ServerlessCache`
|
|
206
|
+
*/
|
|
207
|
+
static isServerlessCache(x: any): x is ServerlessCache;
|
|
208
|
+
/**
|
|
209
|
+
* Import an existing serverless cache by name
|
|
210
|
+
*
|
|
211
|
+
* @param scope The parent creating construct (usually `this`)
|
|
212
|
+
* @param id The construct's name
|
|
213
|
+
* @param serverlessCacheName The name of the existing serverless cache
|
|
214
|
+
*/
|
|
215
|
+
static fromServerlessCacheName(scope: Construct, id: string, serverlessCacheName: string): IServerlessCache;
|
|
216
|
+
/**
|
|
217
|
+
* Import an existing serverless cache by ARN
|
|
218
|
+
*
|
|
219
|
+
* @param scope The parent creating construct (usually `this`)
|
|
220
|
+
* @param id The construct's name
|
|
221
|
+
* @param serverlessCacheArn The ARN of the existing serverless cache
|
|
222
|
+
*/
|
|
223
|
+
static fromServerlessCacheArn(scope: Construct, id: string, serverlessCacheArn: string): IServerlessCache;
|
|
224
|
+
/**
|
|
225
|
+
* Import an existing serverless cache using attributes
|
|
226
|
+
*
|
|
227
|
+
* @param scope The parent creating construct (usually `this`)
|
|
228
|
+
* @param id The construct's name
|
|
229
|
+
* @param attrs A `ServerlessCacheAttributes` object
|
|
230
|
+
*/
|
|
231
|
+
static fromServerlessCacheAttributes(scope: Construct, id: string, attrs: ServerlessCacheAttributes): IServerlessCache;
|
|
232
|
+
readonly engine?: CacheEngine;
|
|
233
|
+
readonly serverlessCacheName: string;
|
|
234
|
+
readonly backupArnsToRestore?: string[];
|
|
235
|
+
readonly kmsKey?: kms.IKey;
|
|
236
|
+
readonly vpc?: ec2.IVpc;
|
|
237
|
+
readonly subnets?: ec2.ISubnet[];
|
|
238
|
+
readonly securityGroups?: ec2.ISecurityGroup[];
|
|
239
|
+
readonly userGroup?: IUserGroup;
|
|
240
|
+
/**
|
|
241
|
+
* The ARN of the serverless cache
|
|
242
|
+
*
|
|
243
|
+
* @attribute
|
|
244
|
+
*/
|
|
245
|
+
readonly serverlessCacheArn: string;
|
|
246
|
+
/**
|
|
247
|
+
* The endpoint address of the serverless cache
|
|
248
|
+
*
|
|
249
|
+
* @attribute
|
|
250
|
+
*/
|
|
251
|
+
readonly serverlessCacheEndpointAddress: string;
|
|
252
|
+
/**
|
|
253
|
+
* The endpoint port of the serverless cache
|
|
254
|
+
*
|
|
255
|
+
* @attribute
|
|
256
|
+
*/
|
|
257
|
+
readonly serverlessCacheEndpointPort: string;
|
|
258
|
+
/**
|
|
259
|
+
* The reader endpoint address of the serverless cache
|
|
260
|
+
*
|
|
261
|
+
* @attribute
|
|
262
|
+
*/
|
|
263
|
+
readonly serverlessCacheReaderEndpointAddress: string;
|
|
264
|
+
/**
|
|
265
|
+
* The reader endpoint port of the serverless cache
|
|
266
|
+
*
|
|
267
|
+
* @attribute
|
|
268
|
+
*/
|
|
269
|
+
readonly serverlessCacheReaderEndpointPort: string;
|
|
270
|
+
/**
|
|
271
|
+
* The current status of the serverless cache
|
|
272
|
+
* Can be 'CREATING', 'AVAILABLE', 'DELETING', 'CREATE-FAILED', 'MODIFYING'
|
|
273
|
+
*
|
|
274
|
+
* @attribute
|
|
275
|
+
*/
|
|
276
|
+
readonly serverlessCacheStatus: string;
|
|
277
|
+
/**
|
|
278
|
+
* Access to network connections
|
|
279
|
+
*/
|
|
280
|
+
readonly connections: ec2.Connections;
|
|
281
|
+
constructor(scope: Construct, id: string, props: ServerlessCacheProps);
|
|
282
|
+
/**
|
|
283
|
+
* Validate description meets AWS requirements
|
|
284
|
+
*
|
|
285
|
+
* @param description The description to validate
|
|
286
|
+
*/
|
|
287
|
+
private validateDescription;
|
|
288
|
+
/**
|
|
289
|
+
* Validate data storage size limits
|
|
290
|
+
*
|
|
291
|
+
* @param limits The usage limits containing data storage settings
|
|
292
|
+
*/
|
|
293
|
+
private validateDataStorageLimits;
|
|
294
|
+
/**
|
|
295
|
+
* Validate request rate limits
|
|
296
|
+
*
|
|
297
|
+
* @param limits The usage limits containing request rate settings
|
|
298
|
+
*/
|
|
299
|
+
private validateRequestRateLimits;
|
|
300
|
+
/**
|
|
301
|
+
* Validate backup settings meet AWS requirements
|
|
302
|
+
*
|
|
303
|
+
* @param backup The backup settings to validate
|
|
304
|
+
*/
|
|
305
|
+
private validateBackupSettings;
|
|
306
|
+
/**
|
|
307
|
+
* Validate user group compatibility with cache engine
|
|
308
|
+
*
|
|
309
|
+
* @param engine The cache engine
|
|
310
|
+
* @param userGroup The user group to validate
|
|
311
|
+
*/
|
|
312
|
+
private validateUserGroupCompatibility;
|
|
313
|
+
/**
|
|
314
|
+
* Render cache usage limits for CloudFormation
|
|
315
|
+
*
|
|
316
|
+
* @param limits The usage limits to render
|
|
317
|
+
* @returns CloudFormation-compatible usage limits object or undefined
|
|
318
|
+
*/
|
|
319
|
+
private renderCacheUsageLimits;
|
|
320
|
+
/**
|
|
321
|
+
* Configure subnets for the cache
|
|
322
|
+
*
|
|
323
|
+
* @param props The ServerlessCache properties
|
|
324
|
+
* @returns Object containing subnet IDs and subnet objects
|
|
325
|
+
*/
|
|
326
|
+
private configureSubnets;
|
|
327
|
+
/**
|
|
328
|
+
* Configure security groups for the cache
|
|
329
|
+
*
|
|
330
|
+
* @param props The ServerlessCache properties
|
|
331
|
+
* @returns Object containing security group IDs and security group objects
|
|
332
|
+
*/
|
|
333
|
+
private configureSecurityGroups;
|
|
334
|
+
/**
|
|
335
|
+
* Format schedule to HH:MM format for daily backups
|
|
336
|
+
*
|
|
337
|
+
* @param schedule The schedule to format
|
|
338
|
+
* @returns Time string in HH:MM format
|
|
339
|
+
*/
|
|
340
|
+
private formatBackupTime;
|
|
341
|
+
}
|