@aws-cdk/aws-bedrock-agentcore-alpha 2.221.1-alpha.0 → 2.223.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.
Files changed (33) hide show
  1. package/.jsii +3396 -138
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +69 -1
  4. package/README.md +327 -5
  5. package/agentcore/index.d.ts +4 -0
  6. package/agentcore/index.js +5 -1
  7. package/agentcore/memory/memory-strategy.d.ts +162 -0
  8. package/agentcore/memory/memory-strategy.js +174 -0
  9. package/agentcore/memory/memory.d.ts +531 -0
  10. package/agentcore/memory/memory.js +661 -0
  11. package/agentcore/memory/perms.d.ts +63 -0
  12. package/agentcore/memory/perms.js +90 -0
  13. package/agentcore/memory/strategies/managed-strategy.d.ts +130 -0
  14. package/agentcore/memory/strategies/managed-strategy.js +209 -0
  15. package/agentcore/memory/strategies/self-managed-strategy.d.ts +119 -0
  16. package/agentcore/memory/strategies/self-managed-strategy.js +254 -0
  17. package/agentcore/memory/validation-helpers.d.ts +41 -0
  18. package/agentcore/memory/validation-helpers.js +89 -0
  19. package/agentcore/network/network-configuration.js +4 -4
  20. package/agentcore/runtime/runtime-artifact.js +1 -1
  21. package/agentcore/runtime/runtime-authorizer-configuration.d.ts +4 -4
  22. package/agentcore/runtime/runtime-authorizer-configuration.js +13 -32
  23. package/agentcore/runtime/runtime-base.js +3 -13
  24. package/agentcore/runtime/runtime-endpoint-base.js +1 -1
  25. package/agentcore/runtime/runtime-endpoint.js +1 -1
  26. package/agentcore/runtime/runtime.d.ts +2 -2
  27. package/agentcore/runtime/runtime.js +16 -17
  28. package/agentcore/runtime/types.d.ts +5 -1
  29. package/agentcore/runtime/types.js +5 -1
  30. package/agentcore/tools/browser.js +2 -2
  31. package/agentcore/tools/code-interpreter.js +2 -2
  32. package/package.json +14 -7
  33. package/rosetta/default.ts-fixture +4 -0
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelfManagedMemoryStrategy = void 0;
4
+ const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const cdk = require("aws-cdk-lib");
7
+ const iam = require("aws-cdk-lib/aws-iam");
8
+ const memory_strategy_1 = require("../memory-strategy");
9
+ const validation_helpers_1 = require("../validation-helpers");
10
+ /******************************************************************************
11
+ * CONSTANTS
12
+ *****************************************************************************/
13
+ /**
14
+ * Minimum value for time-based trigger in seconds
15
+ * @internal
16
+ */
17
+ const TIME_BASED_TRIGGER_MIN = 10;
18
+ /**
19
+ * Maximum value for time-based trigger in seconds
20
+ * @internal
21
+ */
22
+ const TIME_BASED_TRIGGER_MAX = 3000;
23
+ /**
24
+ * Minimum value for token-based trigger
25
+ * @internal
26
+ */
27
+ const TOKEN_BASED_TRIGGER_MIN = 100;
28
+ /**
29
+ * Maximum value for token-based trigger
30
+ * @internal
31
+ */
32
+ const TOKEN_BASED_TRIGGER_MAX = 500000;
33
+ /**
34
+ * Minimum value for message-based trigger
35
+ * @internal
36
+ */
37
+ const MESSAGE_BASED_TRIGGER_MIN = 1;
38
+ /**
39
+ * Maximum value for message-based trigger
40
+ * @internal
41
+ */
42
+ const MESSAGE_BASED_TRIGGER_MAX = 50;
43
+ /**
44
+ * Minimum value for historical context window size
45
+ * @internal
46
+ */
47
+ const HISTORICAL_CONTEXT_WINDOW_SIZE_MIN = 0;
48
+ /**
49
+ * Maximum value for historical context window size
50
+ * @internal
51
+ */
52
+ const HISTORICAL_CONTEXT_WINDOW_SIZE_MAX = 50;
53
+ /**
54
+ * Default value for historical context window size
55
+ * @internal
56
+ */
57
+ const DEFAULT_HISTORICAL_CONTEXT_WINDOW_SIZE = 4;
58
+ /**
59
+ * Default value for message-based trigger
60
+ * @internal
61
+ */
62
+ const DEFAULT_MESSAGE_BASED_TRIGGER = 1;
63
+ /**
64
+ * Default value for time-based trigger
65
+ * @internal
66
+ */
67
+ const DEFAULT_TIME_BASED_TRIGGER = cdk.Duration.seconds(10);
68
+ /**
69
+ * Default value for token-based trigger
70
+ * @internal
71
+ */
72
+ const DEFAULT_TOKEN_BASED_TRIGGER = 100;
73
+ /**
74
+ * Use AgentCore memory for event storage with custom triggers. Define memory processing logic in your own environment.
75
+ */
76
+ class SelfManagedMemoryStrategy {
77
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.SelfManagedMemoryStrategy", version: "2.223.0-alpha.0" };
78
+ name;
79
+ description;
80
+ strategyType;
81
+ /**
82
+ * Invocation configuration for self managed memory strategy
83
+ */
84
+ invocationConfiguration;
85
+ /**
86
+ * Trigger conditions for self managed memory strategy
87
+ */
88
+ triggerConditions;
89
+ /**
90
+ * Historical context window size for self managed memory strategy
91
+ */
92
+ historicalContextWindowSize;
93
+ constructor(strategyType, props) {
94
+ try {
95
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_MemoryStrategyType(strategyType);
96
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_SelfManagedStrategyProps(props);
97
+ }
98
+ catch (error) {
99
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
100
+ Error.captureStackTrace(error, SelfManagedMemoryStrategy);
101
+ }
102
+ throw error;
103
+ }
104
+ this.name = props.name;
105
+ this.description = props.description;
106
+ this.strategyType = strategyType;
107
+ this.invocationConfiguration = props.invocationConfiguration;
108
+ this.triggerConditions = {
109
+ messageBasedTrigger: props.triggerConditions?.messageBasedTrigger ?? DEFAULT_MESSAGE_BASED_TRIGGER,
110
+ timeBasedTrigger: props.triggerConditions?.timeBasedTrigger ?? DEFAULT_TIME_BASED_TRIGGER,
111
+ tokenBasedTrigger: props.triggerConditions?.tokenBasedTrigger ?? DEFAULT_TOKEN_BASED_TRIGGER,
112
+ };
113
+ this.historicalContextWindowSize = props.historicalContextWindowSize ?? DEFAULT_HISTORICAL_CONTEXT_WINDOW_SIZE;
114
+ // ------------------------------------------------------
115
+ // Validations
116
+ // ------------------------------------------------------
117
+ (0, validation_helpers_1.throwIfInvalid)(this._validateMemoryStrategyName, this.name);
118
+ (0, validation_helpers_1.throwIfInvalid)(this._validateHistoricalContextWindowSize, this.historicalContextWindowSize);
119
+ (0, validation_helpers_1.throwIfInvalid)(this._validateTriggerConditions, this.triggerConditions);
120
+ }
121
+ render() {
122
+ return {
123
+ customMemoryStrategy: {
124
+ name: this.name,
125
+ description: this.description,
126
+ type: this.strategyType,
127
+ configuration: {
128
+ selfManagedConfiguration: {
129
+ historicalContextWindowSize: this.historicalContextWindowSize,
130
+ invocationConfiguration: {
131
+ topicArn: this.invocationConfiguration.topic.topicArn,
132
+ payloadDeliveryBucketName: this.invocationConfiguration.s3Location.bucketName,
133
+ },
134
+ triggerConditions: [
135
+ {
136
+ messageBasedTrigger: {
137
+ messageCount: this.triggerConditions.messageBasedTrigger,
138
+ },
139
+ },
140
+ {
141
+ timeBasedTrigger: {
142
+ idleSessionTimeout: this.triggerConditions.timeBasedTrigger?.toSeconds(),
143
+ },
144
+ },
145
+ {
146
+ tokenBasedTrigger: {
147
+ tokenCount: this.triggerConditions.tokenBasedTrigger,
148
+ },
149
+ },
150
+ ],
151
+ },
152
+ },
153
+ },
154
+ }; // Type assertion to work around CloudFormation type limitations
155
+ }
156
+ /**
157
+ * Grants the necessary permissions to the role
158
+ * @param grantee - The grantee to grant permissions to
159
+ * @returns The Grant object for chaining
160
+ */
161
+ grant(grantee) {
162
+ // no existing grant method that provides both required sns actions
163
+ const grant1 = iam.Grant.addToPrincipal({
164
+ grantee: grantee,
165
+ actions: ['sns:GetTopicAttributes', 'sns:Publish'],
166
+ resourceArns: [
167
+ this.invocationConfiguration.topic.topicArn,
168
+ ],
169
+ });
170
+ let grant2;
171
+ // we don't have the scope here, so we add manually the permissions to the role policy
172
+ if (this.invocationConfiguration?.s3Location) {
173
+ // Grant S3 permissions for the specified location
174
+ grant2 = iam.Grant.addToPrincipal({
175
+ grantee: grantee,
176
+ actions: [
177
+ 's3:GetBucketLocation',
178
+ 's3:PutObject',
179
+ ],
180
+ resourceArns: [
181
+ `arn:${cdk.Aws.PARTITION}:s3:::${this.invocationConfiguration.s3Location.bucketName}`,
182
+ `arn:${cdk.Aws.PARTITION}:s3:::${this.invocationConfiguration.s3Location.bucketName}/*`,
183
+ ],
184
+ });
185
+ }
186
+ return grant1 && grant2 ? grant1.combine(grant2) : grant1 || grant2;
187
+ }
188
+ // ------------------------------------------------------
189
+ // VALIDATORS
190
+ // ------------------------------------------------------
191
+ /**
192
+ * Validates the memory strategy name
193
+ * @param name - The name to validate
194
+ * @returns Array of validation error messages, empty if valid
195
+ */
196
+ _validateMemoryStrategyName = (name, scope) => {
197
+ let errors = [];
198
+ errors.push(...(0, validation_helpers_1.validateStringFieldLength)({
199
+ value: name,
200
+ fieldName: 'Memory name',
201
+ minLength: memory_strategy_1.MEMORY_NAME_MIN_LENGTH,
202
+ maxLength: memory_strategy_1.MEMORY_NAME_MAX_LENGTH,
203
+ }, scope));
204
+ // Check if name matches the AWS API pattern: [a-zA-Z][a-zA-Z0-9_]{0,47}
205
+ // Must start with a letter, followed by up to 47 letters, numbers, or underscores
206
+ const validNamePattern = /^[a-zA-Z][a-zA-Z0-9_]{0,47}$/;
207
+ errors.push(...(0, validation_helpers_1.validateFieldPattern)(name, 'Memory name', validNamePattern, undefined, scope));
208
+ return errors;
209
+ };
210
+ /**
211
+ * Validates the historical context window size
212
+ * @param historicalContextWindowSize - The historical context window size to validate
213
+ * @returns Array of validation error messages, empty if valid
214
+ */
215
+ _validateHistoricalContextWindowSize = (historicalContextWindowSize) => {
216
+ let errors = [];
217
+ if (historicalContextWindowSize < HISTORICAL_CONTEXT_WINDOW_SIZE_MIN
218
+ || historicalContextWindowSize > HISTORICAL_CONTEXT_WINDOW_SIZE_MAX) {
219
+ errors.push(`Historical context window size must be between ${HISTORICAL_CONTEXT_WINDOW_SIZE_MIN} and ${HISTORICAL_CONTEXT_WINDOW_SIZE_MAX}, got ${historicalContextWindowSize}`);
220
+ }
221
+ return errors;
222
+ };
223
+ /**
224
+ * Validates the trigger conditions
225
+ * @param triggerConditions - The trigger conditions to validate
226
+ * @returns Array of validation error messages, empty if valid
227
+ */
228
+ _validateTriggerConditions = (triggerConditions) => {
229
+ let errors = [];
230
+ // Validate message-based trigger
231
+ if (triggerConditions.messageBasedTrigger !== undefined) {
232
+ if (triggerConditions.messageBasedTrigger < MESSAGE_BASED_TRIGGER_MIN
233
+ || triggerConditions.messageBasedTrigger > MESSAGE_BASED_TRIGGER_MAX) {
234
+ errors.push(`Message-based trigger must be between ${MESSAGE_BASED_TRIGGER_MIN} and ${MESSAGE_BASED_TRIGGER_MAX}, got ${triggerConditions.messageBasedTrigger}`);
235
+ }
236
+ }
237
+ // Validate time-based trigger
238
+ if (triggerConditions.timeBasedTrigger !== undefined) {
239
+ const seconds = triggerConditions.timeBasedTrigger.toSeconds();
240
+ if (seconds < TIME_BASED_TRIGGER_MIN || seconds > TIME_BASED_TRIGGER_MAX) {
241
+ errors.push(`Time-based trigger must be between ${TIME_BASED_TRIGGER_MIN} and ${TIME_BASED_TRIGGER_MAX} seconds, got ${seconds}`);
242
+ }
243
+ }
244
+ // Validate token-based trigger
245
+ if (triggerConditions.tokenBasedTrigger !== undefined) {
246
+ if (triggerConditions.tokenBasedTrigger < TOKEN_BASED_TRIGGER_MIN || triggerConditions.tokenBasedTrigger > TOKEN_BASED_TRIGGER_MAX) {
247
+ errors.push(`Token-based trigger must be between ${TOKEN_BASED_TRIGGER_MIN} and ${TOKEN_BASED_TRIGGER_MAX}, got ${triggerConditions.tokenBasedTrigger}`);
248
+ }
249
+ }
250
+ return errors;
251
+ };
252
+ }
253
+ exports.SelfManagedMemoryStrategy = SelfManagedMemoryStrategy;
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZi1tYW5hZ2VkLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VsZi1tYW5hZ2VkLXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBY0EsbUNBQW1DO0FBR25DLDJDQUEyQztBQUUzQyx3REFBb0o7QUFDcEosOERBQXdHO0FBRXhHOzsrRUFFK0U7QUFDL0U7OztHQUdHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDbEM7OztHQUdHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFDcEM7OztHQUdHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFDcEM7OztHQUdHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUM7QUFDdkM7OztHQUdHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFDcEM7OztHQUdHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyxFQUFFLENBQUM7QUFDckM7OztHQUdHO0FBQ0gsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLENBQUM7QUFDN0M7OztHQUdHO0FBQ0gsTUFBTSxrQ0FBa0MsR0FBRyxFQUFFLENBQUM7QUFDOUM7OztHQUdHO0FBQ0gsTUFBTSxzQ0FBc0MsR0FBRyxDQUFDLENBQUM7QUFDakQ7OztHQUdHO0FBQ0gsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQUM7QUFDeEM7OztHQUdHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1RDs7O0dBR0c7QUFDSCxNQUFNLDJCQUEyQixHQUFHLEdBQUcsQ0FBQztBQTREeEM7O0dBRUc7QUFDSCxNQUFhLHlCQUF5Qjs7SUFDcEIsSUFBSSxDQUFTO0lBQ2IsV0FBVyxDQUFVO0lBQ3JCLFlBQVksQ0FBcUI7SUFDakQ7O09BRUc7SUFDYSx1QkFBdUIsQ0FBMEI7SUFDakU7O09BRUc7SUFDYSxpQkFB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UUFBUSxzQkFBc0IsaUJBQWlCLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDcEksQ0FBQztRQUNILENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsSUFBSSxpQkFBaUIsQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0RCxJQUFJLGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLHVCQUF1QixJQUFJLGlCQUFpQixDQUFDLGlCQUFpQixHQUFHLHVCQUF1QixFQUFFLENBQUM7Z0JBQ25JLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLHVCQUF1QixRQUFRLHVCQUF1QixTQUFTLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUMzSixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQzs7QUF2TEosOERBd0xDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0IHsgSU1lbW9yeVN0cmF0ZWd5LCBNZW1vcnlTdHJhdGVneUNvbW1vblByb3BzLCBNZW1vcnlTdHJhdGVneVR5cGUsIE1FTU9SWV9OQU1FX01JTl9MRU5HVEgsIE1FTU9SWV9OQU1FX01BWF9MRU5HVEggfSBmcm9tICcuLi9tZW1vcnktc3RyYXRlZ3knO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmdGaWVsZExlbmd0aCwgdGhyb3dJZkludmFsaWQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogTWluaW11bSB2YWx1ZSBmb3IgdGltZS1iYXNlZCB0cmlnZ2VyIGluIHNlY29uZHNcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBUSU1FX0JBU0VEX1RSSUdHRVJfTUlOID0gMTA7XG4vKipcbiAqIE1heGltdW0gdmFsdWUgZm9yIHRpbWUtYmFzZWQgdHJpZ2dlciBpbiBzZWNvbmRzXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgVElNRV9CQVNFRF9UUklHR0VSX01BWCA9IDMwMDA7XG4vKipcbiAqIE1pbmltdW0gdmFsdWUgZm9yIHRva2VuLWJhc2VkIHRyaWdnZXJcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBUT0tFTl9CQVNFRF9UUklHR0VSX01JTiA9IDEwMDtcbi8qKlxuICogTWF4aW11bSB2YWx1ZSBmb3IgdG9rZW4tYmFzZWQgdHJpZ2dlclxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IFRPS0VOX0JBU0VEX1RSSUdHRVJfTUFYID0gNTAwMDAwO1xuLyoqXG4gKiBNaW5pbXVtIHZhbHVlIGZvciBtZXNzYWdlLWJhc2VkIHRyaWdnZXJcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBNRVNTQUdFX0JBU0VEX1RSSUdHRVJfTUlOID0gMTtcbi8qKlxuICogTWF4aW11bSB2YWx1ZSBmb3IgbWVzc2FnZS1iYXNlZCB0cmlnZ2VyXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTUVTU0FHRV9CQVNFRF9UUklHR0VSX01BWCA9IDUwO1xuLyoqXG4gKiBNaW5pbXVtIHZhbHVlIGZvciBoaXN0b3JpY2FsIGNvbnRleHQgd2luZG93IHNpemVcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBISVNUT1JJQ0FMX0NPTlRFWFRfV0lORE9XX1NJWkVfTUlOID0gMDtcbi8qKlxuICogTWF4aW11bSB2YWx1ZSBmb3IgaGlzdG9yaWNhbCBjb250ZXh0IHdpbmRvdyBzaXplXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgSElTVE9SSUNBTF9DT05URVhUX1dJTkRPV19TSVpFX01BWCA9IDUwO1xuLyoqXG4gKiBEZWZhdWx0IHZhbHVlIGZvciBoaXN0b3JpY2FsIGNvbnRleHQgd2luZG93IHNpemVcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBERUZBVUxUX0hJU1RPUklDQUxfQ09OVEVYVF9XSU5ET1dfU0laRSA9IDQ7XG4vKipcbiAqIERlZmF1bHQgdmFsdWUgZm9yIG1lc3NhZ2UtYmFzZWQgdHJpZ2dlclxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IERFRkFVTFRfTUVTU0FHRV9CQVNFRF9UUklHR0VSID0gMTtcbi8qKlxuICogRGVmYXVsdCB2YWx1ZSBmb3IgdGltZS1iYXNlZCB0cmlnZ2VyXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgREVGQVVMVF9USU1FX0JBU0VEX1RSSUdHRVIgPSBjZGsuRHVyYXRpb24uc2Vjb25kcygxMCk7XG4vKipcbiAqIERlZmF1bHQgdmFsdWUgZm9yIHRva2VuLWJhc2VkIHRyaWdnZXJcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBERUZBVUxUX1RPS0VOX0JBU0VEX1RSSUdHRVIgPSAxMDA7XG5cbi8qKlxuICogVHJpZ2dlciBjb25kaXRpb25zIGZvciBzZWxmIG1hbmFnZWQgbWVtb3J5IHN0cmF0ZWd5XG4gKiBXaGVuIGZpcnN0IGNvbmRpdGlvbiBpcyBtZXQsIGJhdGNoZWQgcGF5bG9hZHMgYXJlIHNlbnQgdG8gc3BlY2lmaWVkIFMzIGJ1Y2tldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmlnZ2VyQ29uZGl0aW9ucyB7XG4gIC8qKlxuICAgKiBUcmlnZ2VycyBtZW1vcnkgcHJvY2Vzc2luZyB3aGVuIHNwZWNpZmllZCBudW1iZXIgb2YgbmV3IG1lc3NhZ2VzIGlzIHJlYWNoZWRcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZUJhc2VkVHJpZ2dlcj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRyaWdnZXJzIG1lbW9yeSBwcm9jZXNzaW5nIHdoZW4gdGhlIHNlc3Npb24gaGFzIGJlZW4gaWRsZSBmb3IgdGhlIHNwZWNpZmllZCBkdXJhdGlvbi5cbiAgICogVmFsdWUgaW4gc2Vjb25kcy5cbiAgICogQGRlZmF1bHQgLSAxMCBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSB0aW1lQmFzZWRUcmlnZ2VyPzogY2RrLkR1cmF0aW9uO1xuICAvKipcbiAgICogVHJpZ2dlcnMgbWVtb3J5IHByb2Nlc3Npbmcgd2hlbiB0aGUgdG9rZW4gc2l6ZSByZWFjaGVzIHRoZSBzcGVjaWZpZWQgdGhyZXNob2xkLlxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICovXG4gIHJlYWRvbmx5IHRva2VuQmFzZWRUcmlnZ2VyPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEludm9jYXRpb24gY29uZmlndXJhdGlvbiBmb3Igc2VsZiBtYW5hZ2VkIG1lbW9yeSBzdHJhdGVneVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludm9jYXRpb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFNOUyBUb3BpYyBDb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSB0b3BpYzogc25zLklUb3BpYztcbiAgLyoqXG4gICAqIFMzIExvY2F0aW9uIENvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHMzTG9jYXRpb246IExvY2F0aW9uO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgYSBzZWxmIG1hbmFnZWQgbWVtb3J5IHN0cmF0ZWd5XG4gKiBleGlzdGluZyBidWlsdC1pbiBkZWZhdWx0IHByb21wdHMvbW9kZWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZk1hbmFnZWRTdHJhdGVneVByb3BzIGV4dGVuZHMgTWVtb3J5U3RyYXRlZ3lDb21tb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBEZWZpbmUgdGhlIG51bWJlciBvZiBwcmV2aW91cyBldmVudHMgdG8gYmUgaW5jbHVkZWQgd2hlbiBwcm9jZXNzaW5nIG1lbW9yeS4gQSBsYXJnZXIgaGlzdG9yeSB3aW5kb3cgcHJvdmlkZXMgbW9yZSBjb250ZXh0IGZyb20gcGFzdCBjb252ZXJzYXRpb25zLlxuICAgKiBAZGVmYXVsdCA0XG4gICAqL1xuICByZWFkb25seSBoaXN0b3JpY2FsQ29udGV4dFdpbmRvd1NpemU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBJbnZvY2F0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHNlbGYgbWFuYWdlZCBtZW1vcnkgc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IGludm9jYXRpb25Db25maWd1cmF0aW9uOiBJbnZvY2F0aW9uQ29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIFRyaWdnZXIgY29uZGl0aW9ucyBmb3Igc2VsZiBtYW5hZ2VkIG1lbW9yeSBzdHJhdGVneVxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgdHJpZ2dlckNvbmRpdGlvbnM/OiBUcmlnZ2VyQ29uZGl0aW9ucztcbn1cblxuLyoqXG4gKiBVc2UgQWdlbnRDb3JlIG1lbW9yeSBmb3IgZXZlbnQgc3RvcmFnZSB3aXRoIGN1c3RvbSB0cmlnZ2Vycy4gRGVmaW5lIG1lbW9yeSBwcm9jZXNzaW5nIGxvZ2ljIGluIHlvdXIgb3duIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgY2xhc3MgU2VsZk1hbmFnZWRNZW1vcnlTdHJhdGVneSBpbXBsZW1lbnRzIElNZW1vcnlTdHJhdGVneSB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0cmF0ZWd5VHlwZTogTWVtb3J5U3RyYXRlZ3lUeXBlO1xuICAvKipcbiAgICogSW52b2NhdGlvbiBjb25maWd1cmF0aW9uIGZvciBzZWxmIG1hbmFnZWQgbWVtb3J5IHN0cmF0ZWd5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW52b2NhdGlvbkNvbmZpZ3VyYXRpb246IEludm9jYXRpb25Db25maWd1cmF0aW9uO1xuICAvKipcbiAgICogVHJpZ2dlciBjb25kaXRpb25zIGZvciBzZWxmIG1hbmFnZWQgbWVtb3J5IHN0cmF0ZWd5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdHJpZ2dlckNvbmRpdGlvbnM6IFRyaWdnZXJDb25kaXRpb25zO1xuICAvKipcbiAgICogSGlzdG9yaWNhbCBjb250ZXh0IHdpbmRvdyBzaXplIGZvciBzZWxmIG1hbmFnZWQgbWVtb3J5IHN0cmF0ZWd5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaGlzdG9yaWNhbENvbnRleHRXaW5kb3dTaXplOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc3RyYXRlZ3lUeXBlOiBNZW1vcnlTdHJhdGVneVR5cGUsIHByb3BzOiBTZWxmTWFuYWdlZFN0cmF0ZWd5UHJvcHMpIHtcbiAgICB0aGlzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnN0cmF0ZWd5VHlwZSA9IHN0cmF0ZWd5VHlwZTtcbiAgICB0aGlzLmludm9jYXRpb25Db25maWd1cmF0aW9uID0gcHJvcHMuaW52b2NhdGlvbkNvbmZpZ3VyYXRpb247XG4gICAgdGhpcy50cmlnZ2VyQ29uZGl0aW9ucyA9IHtcbiAgICAgIG1lc3NhZ2VCYXNlZFRyaWdnZXI6IHByb3BzLnRyaWdnZXJDb25kaXRpb25zPy5tZXNzYWdlQmFzZWRUcmlnZ2VyID8/IERFRkFVTFRfTUVTU0FHRV9CQVNFRF9UUklHR0VSLFxuICAgICAgdGltZUJhc2VkVHJpZ2dlcjogcHJvcHMudHJpZ2dlckNvbmRpdGlvbnM/LnRpbWVCYXNlZFRyaWdnZXIgPz8gREVGQVVMVF9USU1FX0JBU0VEX1RSSUdHRVIsXG4gICAgICB0b2tlbkJhc2VkVHJpZ2dlcjogcHJvcHMudHJpZ2dlckNvbmRpdGlvbnM/LnRva2VuQmFzZWRUcmlnZ2VyID8/IERFRkFVTFRfVE9LRU5fQkFTRURfVFJJR0dFUixcbiAgICB9O1xuICAgIHRoaXMuaGlzdG9yaWNhbENvbnRleHRXaW5kb3dTaXplID0gcHJvcHMuaGlzdG9yaWNhbENvbnRleHRXaW5kb3dTaXplID8/IERFRkFVTFRfSElTVE9SSUNBTF9DT05URVhUX1dJTkRPV19TSVpFO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gVmFsaWRhdGlvbnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZU1lbW9yeVN0cmF0ZWd5TmFtZSwgdGhpcy5uYW1lKTtcbiAgICB0aHJvd0lmSW52YWxpZCh0aGlzLl92YWxpZGF0ZUhpc3RvcmljYWxDb250ZXh0V2luZG93U2l6ZSwgdGhpcy5oaXN0b3JpY2FsQ29udGV4dFdpbmRvd1NpemUpO1xuICAgIHRocm93SWZJbnZhbGlkKHRoaXMuX3ZhbGlkYXRlVHJpZ2dlckNvbmRpdGlvbnMsIHRoaXMudHJpZ2dlckNvbmRpdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcigpOiBiZWRyb2NrYWdlbnRjb3JlLkNmbk1lbW9yeS5NZW1vcnlTdHJhdGVneVByb3BlcnR5IHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VzdG9tTWVtb3J5U3RyYXRlZ3k6IHtcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgdHlwZTogdGhpcy5zdHJhdGVneVR5cGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBzZWxmTWFuYWdlZENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIGhpc3RvcmljYWxDb250ZXh0V2luZG93U2l6ZTogdGhpcy5oaXN0b3JpY2FsQ29udGV4dFdpbmRvd1NpemUsXG4gICAgICAgICAgICBpbnZvY2F0aW9uQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICB0b3BpY0FybjogdGhpcy5pbnZvY2F0aW9uQ29uZmlndXJhdGlvbi50b3BpYy50b3BpY0FybixcbiAgICAgICAgICAgICAgcGF5bG9hZERlbGl2ZXJ5QnVja2V0TmFtZTogdGhpcy5pbnZvY2F0aW9uQ29uZmlndXJhdGlvbi5zM0xvY2F0aW9uLmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJpZ2dlckNvbmRpdGlvbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VCYXNlZFRyaWdnZXI6IHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VDb3VudDogdGhpcy50cmlnZ2VyQ29uZGl0aW9ucy5tZXNzYWdlQmFzZWRUcmlnZ2VyLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aW1lQmFzZWRUcmlnZ2VyOiB7XG4gICAgICAgICAgICAgICAgICBpZGxlU2Vzc2lvblRpbWVvdXQ6IHRoaXMudHJpZ2dlckNvbmRpdGlvbnMudGltZUJhc2VkVHJpZ2dlcj8udG9TZWNvbmRzKCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRva2VuQmFzZWRUcmlnZ2VyOiB7XG4gICAgICAgICAgICAgICAgICB0b2tlbkNvdW50OiB0aGlzLnRyaWdnZXJDb25kaXRpb25zLnRva2VuQmFzZWRUcmlnZ2VyLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0gYXMgYW55OyAvLyBUeXBlIGFzc2VydGlvbiB0byB3b3JrIGFyb3VuZCBDbG91ZEZvcm1hdGlvbiB0eXBlIGxpbWl0YXRpb25zXG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgdG8gdGhlIHJvbGVcbiAgICogQHBhcmFtIGdyYW50ZWUgLSBUaGUgZ3JhbnRlZSB0byBncmFudCBwZXJtaXNzaW9ucyB0b1xuICAgKiBAcmV0dXJucyBUaGUgR3JhbnQgb2JqZWN0IGZvciBjaGFpbmluZ1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHwgdW5kZWZpbmVkIHtcbiAgICAvLyBubyBleGlzdGluZyBncmFudCBtZXRob2QgdGhhdCBwcm92aWRlcyBib3RoIHJlcXVpcmVkIHNucyBhY3Rpb25zXG4gICAgY29uc3QgZ3JhbnQxID0gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICBhY3Rpb25zOiBbJ3NuczpHZXRUb3BpY0F0dHJpYnV0ZXMnLCAnc25zOlB1Ymxpc2gnXSxcbiAgICAgIHJlc291cmNlQXJuczogW1xuICAgICAgICB0aGlzLmludm9jYXRpb25Db25maWd1cmF0aW9uLnRvcGljLnRvcGljQXJuLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGxldCBncmFudDI6IGlhbS5HcmFudCB8IHVuZGVmaW5lZDtcblxuICAgIC8vIHdlIGRvbid0IGhhdmUgdGhlIHNjb3BlIGhlcmUsIHNvIHdlIGFkZCBtYW51YWxseSB0aGUgcGVybWlzc2lvbnMgdG8gdGhlIHJvbGUgcG9saWN5XG4gICAgaWYgKHRoaXMuaW52b2NhdGlvbkNvbmZpZ3VyYXRpb24/LnMzTG9jYXRpb24pIHtcbiAgICAgIC8vIEdyYW50IFMzIHBlcm1pc3Npb25zIGZvciB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uXG4gICAgICBncmFudDIgPSBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgICBncmFudGVlOiBncmFudGVlLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgJ3MzOkdldEJ1Y2tldExvY2F0aW9uJyxcbiAgICAgICAgICAnczM6UHV0T2JqZWN0JyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VBcm5zOiBbXG4gICAgICAgICAgYGFybjoke2Nkay5Bd3MuUEFSVElUSU9OfTpzMzo6OiR7dGhpcy5pbnZvY2F0aW9uQ29uZmlndXJhdGlvbi5zM0xvY2F0aW9uLmJ1Y2tldE5hbWV9YCxcbiAgICAgICAgICBgYXJuOiR7Y2RrLkF3cy5QQVJUSVRJT059OnMzOjo6JHt0aGlzLmludm9jYXRpb25Db25maWd1cmF0aW9uLnMzTG9jYXRpb24uYnVja2V0TmFtZX0vKmAsXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhbnQxICYmIGdyYW50MiA/IGdyYW50MS5jb21iaW5lKGdyYW50MikgOiBncmFudDEgfHwgZ3JhbnQyO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFZBTElEQVRPUlNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG1lbW9yeSBzdHJhdGVneSBuYW1lXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlTWVtb3J5U3RyYXRlZ3lOYW1lID0gKG5hbWU6IHN0cmluZywgc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10gPT4ge1xuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHtcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgZmllbGROYW1lOiAnTWVtb3J5IG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiBNRU1PUllfTkFNRV9NSU5fTEVOR1RILFxuICAgICAgbWF4TGVuZ3RoOiBNRU1PUllfTkFNRV9NQVhfTEVOR1RILFxuICAgIH0sIHNjb3BlKSk7XG5cbiAgICAvLyBDaGVjayBpZiBuYW1lIG1hdGNoZXMgdGhlIEFXUyBBUEkgcGF0dGVybjogW2EtekEtWl1bYS16QS1aMC05X117MCw0N31cbiAgICAvLyBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHVwIHRvIDQ3IGxldHRlcnMsIG51bWJlcnMsIG9yIHVuZGVyc2NvcmVzXG4gICAgY29uc3QgdmFsaWROYW1lUGF0dGVybiA9IC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLztcbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUZpZWxkUGF0dGVybihuYW1lLCAnTWVtb3J5IG5hbWUnLCB2YWxpZE5hbWVQYXR0ZXJuLCB1bmRlZmluZWQsIHNjb3BlKSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGhpc3RvcmljYWwgY29udGV4dCB3aW5kb3cgc2l6ZVxuICAgKiBAcGFyYW0gaGlzdG9yaWNhbENvbnRleHRXaW5kb3dTaXplIC0gVGhlIGhpc3RvcmljYWwgY29udGV4dCB3aW5kb3cgc2l6ZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVIaXN0b3JpY2FsQ29udGV4dFdpbmRvd1NpemUgPSAoaGlzdG9yaWNhbENvbnRleHRXaW5kb3dTaXplOiBudW1iZXIpOiBzdHJpbmdbXSA9PiB7XG4gICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChoaXN0b3JpY2FsQ29udGV4dFdpbmRvd1NpemUgPCBISVNUT1JJQ0FMX0NPTlRFWFRfV0lORE9XX1NJWkVfTUlOXG4gICAgICAgIHx8IGhpc3RvcmljYWxDb250ZXh0V2luZG93U2l6ZSA+IEhJU1RPUklDQUxfQ09OVEVYVF9XSU5ET1dfU0laRV9NQVgpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBIaXN0b3JpY2FsIGNvbnRleHQgd2luZG93IHNpemUgbXVzdCBiZSBiZXR3ZWVuICR7SElTVE9SSUNBTF9DT05URVhUX1dJTkRPV19TSVpFX01JTn0gYW5kICR7SElTVE9SSUNBTF9DT05URVhUX1dJTkRPV19TSVpFX01BWH0sIGdvdCAke2hpc3RvcmljYWxDb250ZXh0V2luZG93U2l6ZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRyaWdnZXIgY29uZGl0aW9uc1xuICAgKiBAcGFyYW0gdHJpZ2dlckNvbmRpdGlvbnMgLSBUaGUgdHJpZ2dlciBjb25kaXRpb25zIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gICAqL1xuICBwcml2YXRlIF92YWxpZGF0ZVRyaWdnZXJDb25kaXRpb25zID0gKHRyaWdnZXJDb25kaXRpb25zOiBUcmlnZ2VyQ29uZGl0aW9ucyk6IHN0cmluZ1tdID0+IHtcbiAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gVmFsaWRhdGUgbWVzc2FnZS1iYXNlZCB0cmlnZ2VyXG4gICAgaWYgKHRyaWdnZXJDb25kaXRpb25zLm1lc3NhZ2VCYXNlZFRyaWdnZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRyaWdnZXJDb25kaXRpb25zLm1lc3NhZ2VCYXNlZFRyaWdnZXIgPCBNRVNTQUdFX0JBU0VEX1RSSUdHRVJfTUlOXG4gICAgICAgIHx8IHRyaWdnZXJDb25kaXRpb25zLm1lc3NhZ2VCYXNlZFRyaWdnZXIgPiBNRVNTQUdFX0JBU0VEX1RSSUdHRVJfTUFYKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBNZXNzYWdlLWJhc2VkIHRyaWdnZXIgbXVzdCBiZSBiZXR3ZWVuICR7TUVTU0FHRV9CQVNFRF9UUklHR0VSX01JTn0gYW5kICR7TUVTU0FHRV9CQVNFRF9UUklHR0VSX01BWH0sIGdvdCAke3RyaWdnZXJDb25kaXRpb25zLm1lc3NhZ2VCYXNlZFRyaWdnZXJ9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGltZS1iYXNlZCB0cmlnZ2VyXG4gICAgaWYgKHRyaWdnZXJDb25kaXRpb25zLnRpbWVCYXNlZFRyaWdnZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc2Vjb25kcyA9IHRyaWdnZXJDb25kaXRpb25zLnRpbWVCYXNlZFRyaWdnZXIudG9TZWNvbmRzKCk7XG4gICAgICBpZiAoc2Vjb25kcyA8IFRJTUVfQkFTRURfVFJJR0dFUl9NSU4gfHwgc2Vjb25kcyA+IFRJTUVfQkFTRURfVFJJR0dFUl9NQVgpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFRpbWUtYmFzZWQgdHJpZ2dlciBtdXN0IGJlIGJldHdlZW4gJHtUSU1FX0JBU0VEX1RSSUdHRVJfTUlOfSBhbmQgJHtUSU1FX0JBU0VEX1RSSUdHRVJfTUFYfSBzZWNvbmRzLCBnb3QgJHtzZWNvbmRzfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRva2VuLWJhc2VkIHRyaWdnZXJcbiAgICBpZiAodHJpZ2dlckNvbmRpdGlvbnMudG9rZW5CYXNlZFRyaWdnZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRyaWdnZXJDb25kaXRpb25zLnRva2VuQmFzZWRUcmlnZ2VyIDwgVE9LRU5fQkFTRURfVFJJR0dFUl9NSU4gfHwgdHJpZ2dlckNvbmRpdGlvbnMudG9rZW5CYXNlZFRyaWdnZXIgPiBUT0tFTl9CQVNFRF9UUklHR0VSX01BWCkge1xuICAgICAgICBlcnJvcnMucHVzaChgVG9rZW4tYmFzZWQgdHJpZ2dlciBtdXN0IGJlIGJldHdlZW4gJHtUT0tFTl9CQVNFRF9UUklHR0VSX01JTn0gYW5kICR7VE9LRU5fQkFTRURfVFJJR0dFUl9NQVh9LCBnb3QgJHt0cmlnZ2VyQ29uZGl0aW9ucy50b2tlbkJhc2VkVHJpZ2dlcn1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9O1xufVxuIl19
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
+ * with the License. A copy of the License is located at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
+ * and limitations under the License.
12
+ */
13
+ import { IConstruct } from 'constructs';
14
+ interface IntervalValidation {
15
+ fieldName: string;
16
+ minLength: number;
17
+ maxLength: number;
18
+ }
19
+ interface StringLengthValidation extends IntervalValidation {
20
+ value: string;
21
+ }
22
+ /**
23
+ * Validates the length of a string field against minimum and maximum constraints.
24
+ * @param params - Validation parameters including value, fieldName, minLength, and maxLength
25
+ * @param scope - The construct scope for error reporting (optional)
26
+ * @returns Array of validation error messages, empty if valid
27
+ */
28
+ export declare function validateStringFieldLength(params: StringLengthValidation, _scope?: IConstruct): string[];
29
+ /**
30
+ * Validates a string field against a regex pattern.
31
+ * @param value - The string value to validate
32
+ * @param fieldName - Name of the field being validated (for error messages)
33
+ * @param pattern - Regular expression pattern to test against
34
+ * @param customMessage - Optional custom error message
35
+ * @param scope - The construct scope for error reporting (optional)
36
+ * @returns Array of validation error messages, empty if valid
37
+ */
38
+ export declare function validateFieldPattern(value: string, fieldName: string, pattern: RegExp, customMessage?: string, _scope?: IConstruct): string[];
39
+ export type ValidationFn<T> = (param: T, scope?: IConstruct) => string[];
40
+ export declare function throwIfInvalid<T>(validationFn: ValidationFn<T>, param: T, scope?: IConstruct): T;
41
+ export {};
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.validateStringFieldLength = validateStringFieldLength;
16
+ exports.validateFieldPattern = validateFieldPattern;
17
+ exports.throwIfInvalid = throwIfInvalid;
18
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
19
+ const errors_1 = require("aws-cdk-lib/core/lib/errors");
20
+ /**
21
+ * Validates the length of a string field against minimum and maximum constraints.
22
+ * @param params - Validation parameters including value, fieldName, minLength, and maxLength
23
+ * @param scope - The construct scope for error reporting (optional)
24
+ * @returns Array of validation error messages, empty if valid
25
+ */
26
+ function validateStringFieldLength(params, _scope) {
27
+ const errors = [];
28
+ // Handle null/undefined values
29
+ if (params.value == null) {
30
+ return errors; // Skip validation for null/undefined values
31
+ }
32
+ const currentLength = params.value.length;
33
+ // Evaluate only if it is not an unresolved Token
34
+ if (!aws_cdk_lib_1.Token.isUnresolved(params.fieldName)) {
35
+ if (params.value.length > params.maxLength) {
36
+ errors.push(`The field ${params.fieldName} is ${currentLength} characters long but must be less than or equal to ${params.maxLength} characters`);
37
+ }
38
+ if (params.value.length < params.minLength) {
39
+ errors.push(`The field ${params.fieldName} is ${currentLength} characters long but must be at least ${params.minLength} characters`);
40
+ }
41
+ }
42
+ return errors;
43
+ }
44
+ /**
45
+ * Validates a string field against a regex pattern.
46
+ * @param value - The string value to validate
47
+ * @param fieldName - Name of the field being validated (for error messages)
48
+ * @param pattern - Regular expression pattern to test against
49
+ * @param customMessage - Optional custom error message
50
+ * @param scope - The construct scope for error reporting (optional)
51
+ * @returns Array of validation error messages, empty if valid
52
+ */
53
+ function validateFieldPattern(value, fieldName, pattern, customMessage, _scope) {
54
+ const errors = [];
55
+ // Handle null/undefined values
56
+ if (value == null) {
57
+ return errors; // Skip validation for null/undefined values
58
+ }
59
+ // Evaluate only if it is not an unresolved Token
60
+ if (!aws_cdk_lib_1.Token.isUnresolved(value)) {
61
+ // Verify type
62
+ if (typeof value !== 'string') {
63
+ errors.push(`Expected string for ${fieldName}, got ${typeof value}`);
64
+ }
65
+ // Validate specified regex
66
+ if (!(pattern instanceof RegExp)) {
67
+ errors.push('Pattern must be a valid regular expression');
68
+ }
69
+ // Pattern validation
70
+ if (!pattern.test(value)) {
71
+ const defaultMessage = `The field ${fieldName} with value "${value}" does not match the required pattern ${pattern}`;
72
+ errors.push(customMessage || defaultMessage);
73
+ }
74
+ }
75
+ return errors;
76
+ }
77
+ function throwIfInvalid(validationFn, param, scope) {
78
+ const errors = validationFn(param, scope);
79
+ if (errors.length > 0) {
80
+ if (scope) {
81
+ throw new errors_1.ValidationError(errors.join('\n'), scope);
82
+ }
83
+ else {
84
+ throw new errors_1.UnscopedValidationError(errors.join('\n'));
85
+ }
86
+ }
87
+ return param;
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFxQkgsOERBMEJDO0FBV0Qsb0RBaUNDO0FBSUQsd0NBVUM7QUF2R0QsNkNBQW9DO0FBQ3BDLHdEQUF1RjtBQVl2Rjs7Ozs7R0FLRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLE1BQThCLEVBQUUsTUFBbUI7SUFDM0YsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLCtCQUErQjtJQUMvQixJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsT0FBTyxNQUFNLENBQUMsQ0FBQyw0Q0FBNEM7SUFDN0QsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRTFDLGlEQUFpRDtJQUNqRCxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDMUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0MsTUFBTSxDQUFDLElBQUksQ0FDVCxhQUFhLE1BQU0sQ0FBQyxTQUFTLE9BQU8sYUFBYSxzREFBc0QsTUFBTSxDQUFDLFNBQVMsYUFBYSxDQUNySSxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsYUFBYSxNQUFNLENBQUMsU0FBUyxPQUFPLGFBQWEseUNBQXlDLE1BQU0sQ0FBQyxTQUFTLGFBQWEsQ0FDeEgsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLEtBQWEsRUFDYixTQUFpQixFQUNqQixPQUFlLEVBQ2YsYUFBc0IsRUFDdEIsTUFBbUI7SUFFbkIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLCtCQUErQjtJQUMvQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQixPQUFPLE1BQU0sQ0FBQyxDQUFDLDRDQUE0QztJQUM3RCxDQUFDO0lBRUQsaURBQWlEO0lBQ2pELElBQUksQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLGNBQWM7UUFDZCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLFNBQVMsU0FBUyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELDJCQUEyQjtRQUMzQixJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sY0FBYyxHQUFHLGFBQWEsU0FBUyxnQkFBZ0IsS0FBSyx5Q0FBeUMsT0FBTyxFQUFFLENBQUM7WUFDckgsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksY0FBYyxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBSUQsU0FBZ0IsY0FBYyxDQUFJLFlBQTZCLEVBQUUsS0FBUSxFQUFFLEtBQWtCO0lBQzNGLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksd0JBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLGdDQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yLCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2Vycm9ycyc7XG5pbXBvcnQgeyBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbnRlcmZhY2UgSW50ZXJ2YWxWYWxpZGF0aW9uIHtcbiAgZmllbGROYW1lOiBzdHJpbmc7XG4gIG1pbkxlbmd0aDogbnVtYmVyO1xuICBtYXhMZW5ndGg6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFN0cmluZ0xlbmd0aFZhbGlkYXRpb24gZXh0ZW5kcyBJbnRlcnZhbFZhbGlkYXRpb24ge1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgbGVuZ3RoIG9mIGEgc3RyaW5nIGZpZWxkIGFnYWluc3QgbWluaW11bSBhbmQgbWF4aW11bSBjb25zdHJhaW50cy5cbiAqIEBwYXJhbSBwYXJhbXMgLSBWYWxpZGF0aW9uIHBhcmFtZXRlcnMgaW5jbHVkaW5nIHZhbHVlLCBmaWVsZE5hbWUsIG1pbkxlbmd0aCwgYW5kIG1heExlbmd0aFxuICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVN0cmluZ0ZpZWxkTGVuZ3RoKHBhcmFtczogU3RyaW5nTGVuZ3RoVmFsaWRhdGlvbiwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEhhbmRsZSBudWxsL3VuZGVmaW5lZCB2YWx1ZXNcbiAgaWYgKHBhcmFtcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVycm9yczsgLy8gU2tpcCB2YWxpZGF0aW9uIGZvciBudWxsL3VuZGVmaW5lZCB2YWx1ZXNcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRMZW5ndGggPSBwYXJhbXMudmFsdWUubGVuZ3RoO1xuXG4gIC8vIEV2YWx1YXRlIG9ubHkgaWYgaXQgaXMgbm90IGFuIHVucmVzb2x2ZWQgVG9rZW5cbiAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocGFyYW1zLmZpZWxkTmFtZSkpIHtcbiAgICBpZiAocGFyYW1zLnZhbHVlLmxlbmd0aCA+IHBhcmFtcy5tYXhMZW5ndGgpIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBgVGhlIGZpZWxkICR7cGFyYW1zLmZpZWxkTmFtZX0gaXMgJHtjdXJyZW50TGVuZ3RofSBjaGFyYWN0ZXJzIGxvbmcgYnV0IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7cGFyYW1zLm1heExlbmd0aH0gY2hhcmFjdGVyc2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMudmFsdWUubGVuZ3RoIDwgcGFyYW1zLm1pbkxlbmd0aCkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgIGBUaGUgZmllbGQgJHtwYXJhbXMuZmllbGROYW1lfSBpcyAke2N1cnJlbnRMZW5ndGh9IGNoYXJhY3RlcnMgbG9uZyBidXQgbXVzdCBiZSBhdCBsZWFzdCAke3BhcmFtcy5taW5MZW5ndGh9IGNoYXJhY3RlcnNgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIHN0cmluZyBmaWVsZCBhZ2FpbnN0IGEgcmVnZXggcGF0dGVybi5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdmFsdWUgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBmaWVsZE5hbWUgLSBOYW1lIG9mIHRoZSBmaWVsZCBiZWluZyB2YWxpZGF0ZWQgKGZvciBlcnJvciBtZXNzYWdlcylcbiAqIEBwYXJhbSBwYXR0ZXJuIC0gUmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gdGVzdCBhZ2FpbnN0XG4gKiBAcGFyYW0gY3VzdG9tTWVzc2FnZSAtIE9wdGlvbmFsIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICB2YWx1ZTogc3RyaW5nLFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgcGF0dGVybjogUmVnRXhwLFxuICBjdXN0b21NZXNzYWdlPzogc3RyaW5nLFxuICBfc2NvcGU/OiBJQ29uc3RydWN0LFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gSGFuZGxlIG51bGwvdW5kZWZpbmVkIHZhbHVlc1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7IC8vIFNraXAgdmFsaWRhdGlvbiBmb3IgbnVsbC91bmRlZmluZWQgdmFsdWVzXG4gIH1cblxuICAvLyBFdmFsdWF0ZSBvbmx5IGlmIGl0IGlzIG5vdCBhbiB1bnJlc29sdmVkIFRva2VuXG4gIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgIC8vIFZlcmlmeSB0eXBlXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBFeHBlY3RlZCBzdHJpbmcgZm9yICR7ZmllbGROYW1lfSwgZ290ICR7dHlwZW9mIHZhbHVlfWApO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBzcGVjaWZpZWQgcmVnZXhcbiAgICBpZiAoIShwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgZXJyb3JzLnB1c2goJ1BhdHRlcm4gbXVzdCBiZSBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gdmFsaWRhdGlvblxuICAgIGlmICghcGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgZGVmYXVsdE1lc3NhZ2UgPSBgVGhlIGZpZWxkICR7ZmllbGROYW1lfSB3aXRoIHZhbHVlIFwiJHt2YWx1ZX1cIiBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgcGF0dGVybiAke3BhdHRlcm59YDtcbiAgICAgIGVycm9ycy5wdXNoKGN1c3RvbU1lc3NhZ2UgfHwgZGVmYXVsdE1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25GbjxUPiA9IChwYXJhbTogVCwgc2NvcGU/OiBJQ29uc3RydWN0KSA9PiBzdHJpbmdbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93SWZJbnZhbGlkPFQ+KHZhbGlkYXRpb25GbjogVmFsaWRhdGlvbkZuPFQ+LCBwYXJhbTogVCwgc2NvcGU/OiBJQ29uc3RydWN0KTogVCB7XG4gIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRpb25GbihwYXJhbSwgc2NvcGUpO1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoZXJyb3JzLmpvaW4oJ1xcbicpLCBzY29wZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihlcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyYW07XG59XG4iXX0=
@@ -9,7 +9,7 @@ const ec2 = require("aws-cdk-lib/aws-ec2");
9
9
  * Abstract base class for network configuration.
10
10
  */
11
11
  class NetworkConfiguration {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.NetworkConfiguration", version: "2.221.1-alpha.0" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.NetworkConfiguration", version: "2.223.0-alpha.0" };
13
13
  /**
14
14
  * The network mode to use.
15
15
  * Configure the security level for agent
@@ -88,7 +88,7 @@ exports.NetworkConfiguration = NetworkConfiguration;
88
88
  * Network configuration for the Browser tool.
89
89
  */
90
90
  class BrowserNetworkConfiguration extends NetworkConfiguration {
91
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserNetworkConfiguration", version: "2.221.1-alpha.0" };
91
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserNetworkConfiguration", version: "2.223.0-alpha.0" };
92
92
  /**
93
93
  * Creates a public network configuration. PUBLIC is the default network mode.
94
94
  * @returns A BrowserNetworkConfiguration.
@@ -134,7 +134,7 @@ exports.BrowserNetworkConfiguration = BrowserNetworkConfiguration;
134
134
  * Network configuration for the Code Interpreter tool.
135
135
  */
136
136
  class CodeInterpreterNetworkConfiguration extends NetworkConfiguration {
137
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterNetworkConfiguration", version: "2.221.1-alpha.0" };
137
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterNetworkConfiguration", version: "2.223.0-alpha.0" };
138
138
  /**
139
139
  * Creates a public network configuration.
140
140
  * @returns A CodeInterpreterNetworkConfiguration.
@@ -188,7 +188,7 @@ exports.CodeInterpreterNetworkConfiguration = CodeInterpreterNetworkConfiguratio
188
188
  * Network configuration for the Runtime.
189
189
  */
190
190
  class RuntimeNetworkConfiguration extends NetworkConfiguration {
191
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeNetworkConfiguration", version: "2.221.1-alpha.0" };
191
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeNetworkConfiguration", version: "2.223.0-alpha.0" };
192
192
  /**
193
193
  * Creates a public network configuration. PUBLIC is the default network mode.
194
194
  * @returns A RuntimeNetworkConfiguration.
@@ -10,7 +10,7 @@ const validation_helpers_1 = require("./validation-helpers");
10
10
  * Provides methods to reference container images from ECR repositories or local assets.
11
11
  */
12
12
  class AgentRuntimeArtifact {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AgentRuntimeArtifact", version: "2.221.1-alpha.0" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AgentRuntimeArtifact", version: "2.223.0-alpha.0" };
14
14
  /**
15
15
  * Reference an image in an ECR repository
16
16
  */
@@ -11,6 +11,7 @@
11
11
  * and limitations under the License.
12
12
  */
13
13
  import { CfnRuntime } from 'aws-cdk-lib/aws-bedrockagentcore';
14
+ import { IUserPool, IUserPoolClient } from 'aws-cdk-lib/aws-cognito';
14
15
  /**
15
16
  * Abstract base class for runtime authorizer configurations.
16
17
  * Provides static factory methods to create different authentication types.
@@ -37,13 +38,12 @@ export declare abstract class RuntimeAuthorizerConfiguration {
37
38
  * Use AWS Cognito User Pool authentication.
38
39
  * Validates Cognito-issued JWT tokens.
39
40
  *
40
- * @param userPoolId The Cognito User Pool ID (e.g., 'us-west-2_ABC123')
41
- * @param clientId The Cognito App Client ID
42
- * @param region Optional AWS region where the User Pool is located (defaults to stack region)
41
+ * @param userPool The Cognito User Pool
42
+ * @param userPoolClient The Cognito User Pool App Clients
43
43
  * @param allowedAudience Optional array of allowed audiences
44
44
  * @returns RuntimeAuthorizerConfiguration for Cognito authentication
45
45
  */
46
- static usingCognito(userPoolId: string, clientId: string, region?: string, allowedAudience?: string[]): RuntimeAuthorizerConfiguration;
46
+ static usingCognito(userPool: IUserPool, userPoolClients: IUserPoolClient[], allowedAudience?: string[]): RuntimeAuthorizerConfiguration;
47
47
  /**
48
48
  * Use OAuth 2.0 authentication.
49
49
  * Supports various OAuth providers.