@aws-cdk/aws-bedrock-agentcore-alpha 2.250.0-alpha.0 → 2.252.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 (56) hide show
  1. package/.jsii +11883 -7285
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +4 -0
  4. package/README.md +405 -0
  5. package/lib/gateway/gateway-base.js +1 -1
  6. package/lib/gateway/gateway.d.ts +58 -0
  7. package/lib/gateway/gateway.js +46 -3
  8. package/lib/gateway/inbound-auth/authorizer.d.ts +27 -1
  9. package/lib/gateway/inbound-auth/authorizer.js +37 -5
  10. package/lib/gateway/inbound-auth/custom-claim.js +1 -1
  11. package/lib/gateway/interceptor.js +1 -1
  12. package/lib/gateway/outbound-auth/api-key.js +1 -1
  13. package/lib/gateway/outbound-auth/credential-provider.js +1 -1
  14. package/lib/gateway/protocol.js +2 -2
  15. package/lib/gateway/targets/schema/api-schema.js +4 -4
  16. package/lib/gateway/targets/schema/tool-schema.js +4 -4
  17. package/lib/gateway/targets/target-base.js +1 -1
  18. package/lib/gateway/targets/target-configuration.js +6 -6
  19. package/lib/gateway/targets/target.js +1 -1
  20. package/lib/index.d.ts +8 -0
  21. package/lib/index.js +13 -1
  22. package/lib/memory/memory-strategy.js +1 -1
  23. package/lib/memory/memory.js +2 -2
  24. package/lib/memory/strategies/managed-strategy.js +1 -1
  25. package/lib/memory/strategies/self-managed-strategy.js +1 -1
  26. package/lib/network/network-configuration.js +4 -4
  27. package/lib/policy/perms.d.ts +50 -0
  28. package/lib/policy/perms.js +62 -0
  29. package/lib/policy/policy-base.d.ts +194 -0
  30. package/lib/policy/policy-base.js +120 -0
  31. package/lib/policy/policy-engine-base.d.ts +260 -0
  32. package/lib/policy/policy-engine-base.js +193 -0
  33. package/lib/policy/policy-engine.d.ts +150 -0
  34. package/lib/policy/policy-engine.js +290 -0
  35. package/lib/policy/policy-statement.d.ts +518 -0
  36. package/lib/policy/policy-statement.js +927 -0
  37. package/lib/policy/policy-types.d.ts +66 -0
  38. package/lib/policy/policy-types.js +30 -0
  39. package/lib/policy/policy.d.ts +127 -0
  40. package/lib/policy/policy.js +225 -0
  41. package/lib/policy/validation-helpers.d.ts +139 -0
  42. package/lib/policy/validation-helpers.js +276 -0
  43. package/lib/runtime/inbound-auth/custom-claim.js +1 -1
  44. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
  45. package/lib/runtime/observability.d.ts +105 -0
  46. package/lib/runtime/observability.js +317 -0
  47. package/lib/runtime/runtime-artifact.js +1 -1
  48. package/lib/runtime/runtime-base.js +1 -1
  49. package/lib/runtime/runtime-endpoint-base.js +1 -1
  50. package/lib/runtime/runtime-endpoint.js +1 -1
  51. package/lib/runtime/runtime.d.ts +17 -0
  52. package/lib/runtime/runtime.js +10 -2
  53. package/lib/tools/browser.js +2 -2
  54. package/lib/tools/code-interpreter.js +2 -2
  55. package/package.json +9 -9
  56. package/rosetta/default.ts-fixture +2 -0
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoggingDestination = exports.LogType = void 0;
4
+ exports.configureTracingDelivery = configureTracingDelivery;
5
+ exports.configureLoggingDelivery = configureLoggingDelivery;
6
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
8
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
9
+ const logs = require("aws-cdk-lib/aws-logs");
10
+ const xray = require("aws-cdk-lib/aws-xray");
11
+ const constructs_1 = require("constructs");
12
+ /**
13
+ * Maximum length for delivery source and destination names
14
+ */
15
+ const MAX_DELIVERY_NAME_LENGTH = 60;
16
+ /**
17
+ * Log types for AgentCore Runtime observability
18
+ */
19
+ class LogType {
20
+ value;
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LogType", version: "2.252.0-alpha.0" };
22
+ /**
23
+ * Application logs for agent runtime invocations
24
+ */
25
+ static APPLICATION_LOGS = new LogType('APPLICATION_LOGS');
26
+ /**
27
+ * Usage logs for session-level resource consumption
28
+ */
29
+ static USAGE_LOGS = new LogType('USAGE_LOGS');
30
+ /**
31
+ * A custom log type value
32
+ *
33
+ * @param value The log type value
34
+ */
35
+ static of(value) {
36
+ return new LogType(value);
37
+ }
38
+ constructor(
39
+ /**
40
+ * The log type value
41
+ */
42
+ value) {
43
+ this.value = value;
44
+ }
45
+ }
46
+ exports.LogType = LogType;
47
+ /**
48
+ * Represents a logging destination for AgentCore Runtime
49
+ *
50
+ * Use the static factory methods to create instances:
51
+ * - `LoggingDestination.cloudWatchLogs(logGroup)` - Send logs to CloudWatch Logs
52
+ * - `LoggingDestination.s3(bucket)` - Send logs to S3
53
+ * - `LoggingDestination.firehose(stream)` - Send logs to Kinesis Data Firehose
54
+ */
55
+ class LoggingDestination {
56
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LoggingDestination", version: "2.252.0-alpha.0" };
57
+ /**
58
+ * Create a logging destination that sends logs to a CloudWatch Log Group
59
+ *
60
+ * @param logGroup The CloudWatch Log Group to send logs to
61
+ */
62
+ static cloudWatchLogs(logGroup) {
63
+ return new CloudWatchLogsDestination(logGroup);
64
+ }
65
+ /**
66
+ * Create a logging destination that sends logs to an S3 bucket
67
+ *
68
+ * @param bucket The S3 bucket to send logs to
69
+ */
70
+ static s3(bucket) {
71
+ return new S3Destination(bucket);
72
+ }
73
+ /**
74
+ * Create a logging destination that sends logs to a Kinesis Data Firehose delivery stream
75
+ *
76
+ * @param stream The Firehose delivery stream to send logs to
77
+ */
78
+ static firehose(stream) {
79
+ return new FirehoseDestination(stream);
80
+ }
81
+ }
82
+ exports.LoggingDestination = LoggingDestination;
83
+ /**
84
+ * CloudWatch Logs destination implementation
85
+ */
86
+ class CloudWatchLogsDestination extends LoggingDestination {
87
+ logGroup;
88
+ constructor(logGroup) {
89
+ super();
90
+ this.logGroup = logGroup;
91
+ }
92
+ _bind(scope, id) {
93
+ const stack = aws_cdk_lib_1.Stack.of(scope);
94
+ // Get or create a singleton resource policy for logs delivery
95
+ const policyId = 'CdkLogGroupLogsDeliveryPolicy';
96
+ let resourcePolicy = stack.node.tryFindChild(policyId);
97
+ if (!resourcePolicy) {
98
+ resourcePolicy = new logs.ResourcePolicy(stack, policyId);
99
+ }
100
+ // Grant permissions for this specific log group
101
+ // @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-V2-CloudWatchLogs.html
102
+ resourcePolicy.document.addStatements(new aws_iam_1.PolicyStatement({
103
+ effect: aws_iam_1.Effect.ALLOW,
104
+ principals: [new aws_iam_1.ServicePrincipal('delivery.logs.amazonaws.com')],
105
+ actions: ['logs:CreateLogStream', 'logs:PutLogEvents'],
106
+ resources: [`${this.logGroup.logGroupArn}:log-stream:*`],
107
+ conditions: {
108
+ StringEquals: {
109
+ 'aws:SourceAccount': stack.account,
110
+ },
111
+ ArnLike: {
112
+ 'aws:SourceArn': stack.formatArn({
113
+ service: 'logs',
114
+ resource: '*',
115
+ }),
116
+ },
117
+ },
118
+ }));
119
+ const deliveryDestination = new logs.CfnDeliveryDestination(scope, `${id}Dest`, {
120
+ name: aws_cdk_lib_1.Lazy.string({ produce: () => aws_cdk_lib_1.Names.uniqueResourceName(deliveryDestination, { maxLength: MAX_DELIVERY_NAME_LENGTH }) }),
121
+ deliveryDestinationType: 'CWL',
122
+ destinationResourceArn: this.logGroup.logGroupArn,
123
+ });
124
+ deliveryDestination.node.addDependency(resourcePolicy);
125
+ return { deliveryDestination };
126
+ }
127
+ }
128
+ /**
129
+ * S3 destination implementation
130
+ */
131
+ class S3Destination extends LoggingDestination {
132
+ bucket;
133
+ constructor(bucket) {
134
+ super();
135
+ this.bucket = bucket;
136
+ }
137
+ _bind(scope, id) {
138
+ const stack = aws_cdk_lib_1.Stack.of(scope);
139
+ // Add bucket policy for logs delivery
140
+ // @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-V2-S3.html
141
+ this.bucket.addToResourcePolicy(new aws_iam_1.PolicyStatement({
142
+ effect: aws_iam_1.Effect.ALLOW,
143
+ principals: [new aws_iam_1.ServicePrincipal('delivery.logs.amazonaws.com')],
144
+ actions: ['s3:PutObject'],
145
+ resources: [`${this.bucket.bucketArn}/AWSLogs/${stack.account}/*`],
146
+ conditions: {
147
+ StringEquals: {
148
+ 's3:x-amz-acl': 'bucket-owner-full-control',
149
+ 'aws:SourceAccount': stack.account,
150
+ },
151
+ ArnLike: {
152
+ 'aws:SourceArn': stack.formatArn({
153
+ service: 'logs',
154
+ resource: 'delivery-source',
155
+ resourceName: '*',
156
+ arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
157
+ }),
158
+ },
159
+ },
160
+ }));
161
+ const deliveryDestination = new logs.CfnDeliveryDestination(scope, `${id}Dest`, {
162
+ name: aws_cdk_lib_1.Lazy.string({ produce: () => aws_cdk_lib_1.Names.uniqueResourceName(deliveryDestination, { maxLength: MAX_DELIVERY_NAME_LENGTH }) }),
163
+ deliveryDestinationType: 'S3',
164
+ destinationResourceArn: this.bucket.bucketArn,
165
+ });
166
+ return { deliveryDestination };
167
+ }
168
+ }
169
+ /**
170
+ * Firehose destination implementation
171
+ */
172
+ class FirehoseDestination extends LoggingDestination {
173
+ stream;
174
+ constructor(stream) {
175
+ super();
176
+ this.stream = stream;
177
+ }
178
+ _bind(scope, id) {
179
+ // Firehose uses a service-linked role that requires this tag to grant access
180
+ // @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-V2-Firehose.html
181
+ aws_cdk_lib_1.Tags.of(this.stream).add('LogDeliveryEnabled', 'true');
182
+ const deliveryDestination = new logs.CfnDeliveryDestination(scope, `${id}Dest`, {
183
+ name: aws_cdk_lib_1.Lazy.string({ produce: () => aws_cdk_lib_1.Names.uniqueResourceName(deliveryDestination, { maxLength: MAX_DELIVERY_NAME_LENGTH }) }),
184
+ deliveryDestinationType: 'FH',
185
+ destinationResourceArn: this.stream.deliveryStreamArn,
186
+ });
187
+ return { deliveryDestination };
188
+ }
189
+ }
190
+ /**
191
+ * Internal X-Ray resource policy wrapper that allows adding statements after creation.
192
+ * This is similar to logs.ResourcePolicy but for X-Ray.
193
+ */
194
+ class XRayResourcePolicy extends constructs_1.Construct {
195
+ document;
196
+ constructor(scope, id) {
197
+ super(scope, id);
198
+ this.document = new aws_iam_1.PolicyDocument();
199
+ new xray.CfnResourcePolicy(this, 'ResourcePolicy', {
200
+ policyName: aws_cdk_lib_1.Lazy.string({
201
+ produce: () => aws_cdk_lib_1.Names.uniqueResourceName(this, { maxLength: 128 }),
202
+ }),
203
+ policyDocument: aws_cdk_lib_1.Lazy.string({
204
+ produce: () => JSON.stringify(this.document.toJSON()),
205
+ }),
206
+ });
207
+ }
208
+ }
209
+ /**
210
+ * Configure X-Ray tracing delivery for a runtime
211
+ *
212
+ * @param scope The construct scope
213
+ * @param sourceArn The ARN of the source resource (runtime)
214
+ * @internal
215
+ */
216
+ function configureTracingDelivery(scope, sourceArn) {
217
+ const stack = aws_cdk_lib_1.Stack.of(scope);
218
+ // Create delivery source for traces
219
+ const deliverySource = new logs.CfnDeliverySource(scope, 'TracesDeliverySource', {
220
+ name: aws_cdk_lib_1.Lazy.string({ produce: () => aws_cdk_lib_1.Names.uniqueResourceName(deliverySource, { maxLength: MAX_DELIVERY_NAME_LENGTH }) }),
221
+ logType: 'TRACES',
222
+ resourceArn: sourceArn,
223
+ });
224
+ // Get or create X-Ray resource policy (singleton per stack)
225
+ const policyId = 'CdkXRayLogsDeliveryPolicy';
226
+ let xrayPolicy = stack.node.tryFindChild(policyId);
227
+ if (!xrayPolicy) {
228
+ xrayPolicy = new XRayResourcePolicy(stack, policyId);
229
+ }
230
+ // Grant permissions for this specific source resource
231
+ // The xray:PutTraceSegments action requires resources: ['*'] per AWS documentation.
232
+ // The conditions below restrict this broad scope to only the specific source resource
233
+ // (via logs:LogGeneratingResourceArns) and the current account and delivery-source ARN.
234
+ // @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-infrastructure-V2-XRAY.html
235
+ xrayPolicy.document.addStatements(new aws_iam_1.PolicyStatement({
236
+ effect: aws_iam_1.Effect.ALLOW,
237
+ principals: [new aws_iam_1.ServicePrincipal('delivery.logs.amazonaws.com')],
238
+ actions: ['xray:PutTraceSegments'],
239
+ resources: ['*'],
240
+ conditions: {
241
+ 'ForAllValues:ArnLike': {
242
+ 'logs:LogGeneratingResourceArns': [sourceArn],
243
+ },
244
+ 'StringEquals': {
245
+ 'aws:SourceAccount': stack.account,
246
+ },
247
+ 'ArnLike': {
248
+ 'aws:SourceArn': stack.formatArn({
249
+ service: 'logs',
250
+ resource: 'delivery-source',
251
+ resourceName: '*',
252
+ arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
253
+ }),
254
+ },
255
+ },
256
+ }));
257
+ // Create delivery destination for X-Ray
258
+ const deliveryDestination = new logs.CfnDeliveryDestination(scope, 'TracesDeliveryDest', {
259
+ name: aws_cdk_lib_1.Lazy.string({ produce: () => aws_cdk_lib_1.Names.uniqueResourceName(deliveryDestination, { maxLength: MAX_DELIVERY_NAME_LENGTH }) }),
260
+ deliveryDestinationType: 'XRAY',
261
+ });
262
+ deliveryDestination.node.addDependency(xrayPolicy);
263
+ // Create delivery to connect source and destination
264
+ const delivery = new logs.CfnDelivery(scope, 'TracesDelivery', {
265
+ deliverySourceName: deliverySource.deliverySourceRef.deliverySourceName,
266
+ deliveryDestinationArn: deliveryDestination.attrArn,
267
+ });
268
+ delivery.node.addDependency(deliverySource);
269
+ delivery.node.addDependency(deliveryDestination);
270
+ return delivery;
271
+ }
272
+ /**
273
+ * Configure logging delivery for a runtime
274
+ *
275
+ * @param scope The construct scope
276
+ * @param sourceArn The ARN of the source resource (runtime)
277
+ * @param loggingConfigs Array of logging configurations
278
+ * @internal
279
+ */
280
+ function configureLoggingDelivery(scope, sourceArn, loggingConfigs) {
281
+ const deliveries = [];
282
+ // Group configs by log type to create one source per log type
283
+ const configsByLogType = new Map();
284
+ for (const config of loggingConfigs) {
285
+ const existing = configsByLogType.get(config.logType.value) ?? [];
286
+ existing.push(config);
287
+ configsByLogType.set(config.logType.value, existing);
288
+ }
289
+ // Create delivery sources and deliveries for each log type
290
+ for (const [logType, configs] of configsByLogType) {
291
+ // Convert log type to PascalCase for construct IDs (e.g., APPLICATION_LOGS → ApplicationLogs)
292
+ const logTypeId = logType.split('_').map(word => word.charAt(0) + word.slice(1).toLowerCase()).join('');
293
+ // Create a delivery source for this log type
294
+ const deliverySource = new logs.CfnDeliverySource(scope, `${logTypeId}DeliverySource`, {
295
+ name: aws_cdk_lib_1.Lazy.string({ produce: () => aws_cdk_lib_1.Names.uniqueResourceName(deliverySource, { maxLength: MAX_DELIVERY_NAME_LENGTH }) }),
296
+ logType: logType,
297
+ resourceArn: sourceArn,
298
+ });
299
+ // Create delivery for each destination
300
+ configs.forEach((config, index) => {
301
+ const id = configs.length === 1 ? logTypeId : `${logTypeId}${index}`;
302
+ const bindConfig = config.destination._bind(scope, id);
303
+ const delivery = new logs.CfnDelivery(scope, `${id}Delivery`, {
304
+ deliverySourceName: deliverySource.deliverySourceRef.deliverySourceName,
305
+ deliveryDestinationArn: bindConfig.deliveryDestination.attrArn,
306
+ });
307
+ delivery.node.addDependency(deliverySource);
308
+ delivery.node.addDependency(bindConfig.deliveryDestination);
309
+ if (deliveries.length > 0) {
310
+ delivery.node.addDependency(deliveries[deliveries.length - 1]);
311
+ }
312
+ deliveries.push(delivery);
313
+ });
314
+ }
315
+ return deliveries;
316
+ }
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9ic2VydmFiaWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd1FBLDREQW1FQztBQVVELDREQWlEQzs7QUF0WUQsNkNBQWtFO0FBQ2xFLGlEQUFnRztBQUVoRyw2Q0FBNkM7QUFFN0MsNkNBQTZDO0FBQzdDLDJDQUF1QztBQUV2Qzs7R0FFRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBRXBDOztHQUVHO0FBQ0gsTUFBYSxPQUFPO0lBd0JBOztJQXZCbEI7O09BRUc7SUFDSSxNQUFNLENBQVUsZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUUxRTs7T0FFRztJQUNJLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFOUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYTtRQUM1QixPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzNCO0lBRUQ7SUFDRTs7T0FFRztJQUNhLEtBQWE7UUFBYixVQUFLLEdBQUwsS0FBSyxDQUFRO0tBQzNCOztBQXpCTiwwQkEwQkM7QUE0QkQ7Ozs7Ozs7R0FPRztBQUNILE1BQXNCLGtCQUFrQjs7SUFDdEM7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBd0I7UUFDbkQsT0FBTyxJQUFJLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ2hEO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBa0I7UUFDakMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNsQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQXVCO1FBQzVDLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4Qzs7QUEx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QUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJuRm9ybWF0LCBMYXp5LCBOYW1lcywgU3RhY2ssIFRhZ3MgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCwgU2VydmljZVByaW5jaXBhbCwgUG9saWN5RG9jdW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB0eXBlIHsgSURlbGl2ZXJ5U3RyZWFtIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWtpbmVzaXNmaXJlaG9zZSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB0eXBlICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHhyYXkgZnJvbSAnYXdzLWNkay1saWIvYXdzLXhyYXknO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogTWF4aW11bSBsZW5ndGggZm9yIGRlbGl2ZXJ5IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbmFtZXNcbiAqL1xuY29uc3QgTUFYX0RFTElWRVJZX05BTUVfTEVOR1RIID0gNjA7XG5cbi8qKlxuICogTG9nIHR5cGVzIGZvciBBZ2VudENvcmUgUnVudGltZSBvYnNlcnZhYmlsaXR5XG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dUeXBlIHtcbiAgLyoqXG4gICAqIEFwcGxpY2F0aW9uIGxvZ3MgZm9yIGFnZW50IHJ1bnRpbWUgaW52b2NhdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVBQTElDQVRJT05fTE9HUyA9IG5ldyBMb2dUeXBlKCdBUFBMSUNBVElPTl9MT0dTJyk7XG5cbiAgLyoqXG4gICAqIFVzYWdlIGxvZ3MgZm9yIHNlc3Npb24tbGV2ZWwgcmVzb3VyY2UgY29uc3VtcHRpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNBR0VfTE9HUyA9IG5ldyBMb2dUeXBlKCdVU0FHRV9MT0dTJyk7XG5cbiAgLyoqXG4gICAqIEEgY3VzdG9tIGxvZyB0eXBlIHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgbG9nIHR5cGUgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IExvZ1R5cGUge1xuICAgIHJldHVybiBuZXcgTG9nVHlwZSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgICAqIFRoZSBsb2cgdHlwZSB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nLFxuICApIHt9XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgbG9nZ2luZyB3aXRoIGxvZyB0eXBlIGFuZCBkZXN0aW5hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dpbmdDb25maWcge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbG9ncyB0byBkZWxpdmVyXG4gICAqL1xuICByZWFkb25seSBsb2dUeXBlOiBMb2dUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzdGluYXRpb24gZm9yIGxvZ3NcbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBMb2dnaW5nRGVzdGluYXRpb247XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiByZXR1cm5lZCBieSBMb2dnaW5nRGVzdGluYXRpb24uYmluZCgpXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIExvZ2dpbmdEZXN0aW5hdGlvbkJpbmRDb25maWcge1xuICAvKipcbiAgICogVGhlIGRlbGl2ZXJ5IGRlc3RpbmF0aW9uIGNvbnN0cnVjdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsaXZlcnlEZXN0aW5hdGlvbjogbG9ncy5DZm5EZWxpdmVyeURlc3RpbmF0aW9uO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBsb2dnaW5nIGRlc3RpbmF0aW9uIGZvciBBZ2VudENvcmUgUnVudGltZVxuICpcbiAqIFVzZSB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kcyB0byBjcmVhdGUgaW5zdGFuY2VzOlxuICogLSBgTG9nZ2luZ0Rlc3RpbmF0aW9uLmNsb3VkV2F0Y2hMb2dzKGxvZ0dyb3VwKWAgLSBTZW5kIGxvZ3MgdG8gQ2xvdWRXYXRjaCBMb2dzXG4gKiAtIGBMb2dnaW5nRGVzdGluYXRpb24uczMoYnVja2V0KWAgLSBTZW5kIGxvZ3MgdG8gUzNcbiAqIC0gYExvZ2dpbmdEZXN0aW5hdGlvbi5maXJlaG9zZShzdHJlYW0pYCAtIFNlbmQgbG9ncyB0byBLaW5lc2lzIERhdGEgRmlyZWhvc2VcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExvZ2dpbmdEZXN0aW5hdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsb2dnaW5nIGRlc3RpbmF0aW9uIHRoYXQgc2VuZHMgbG9ncyB0byBhIENsb3VkV2F0Y2ggTG9nIEdyb3VwXG4gICAqXG4gICAqIEBwYXJhbSBsb2dHcm91cCBUaGUgQ2xvdWRXYXRjaCBMb2cgR3JvdXAgdG8gc2VuZCBsb2dzIHRvXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNsb3VkV2F0Y2hMb2dzKGxvZ0dyb3VwOiBsb2dzLklMb2dHcm91cCk6IExvZ2dpbmdEZXN0aW5hdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDbG91ZFdhdGNoTG9nc0Rlc3RpbmF0aW9uKGxvZ0dyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBsb2dnaW5nIGRlc3RpbmF0aW9uIHRoYXQgc2VuZHMgbG9ncyB0byBhbiBTMyBidWNrZXRcbiAgICpcbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0IHRvIHNlbmQgbG9ncyB0b1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzMyhidWNrZXQ6IHMzLklCdWNrZXQpOiBMb2dnaW5nRGVzdGluYXRpb24ge1xuICAgIHJldHVybiBuZXcgUzNEZXN0aW5hdGlvbihidWNrZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxvZ2dpbmcgZGVzdGluYXRpb24gdGhhdCBzZW5kcyBsb2dzIHRvIGEgS2luZXNpcyBEYXRhIEZpcmVob3NlIGRlbGl2ZXJ5IHN0cmVhbVxuICAgKlxuICAgKiBAcGFyYW0gc3RyZWFtIFRoZSBGaXJlaG9zZSBkZWxpdmVyeSBzdHJlYW0gdG8gc2VuZCBsb2dzIHRvXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZpcmVob3NlKHN0cmVhbTogSURlbGl2ZXJ5U3RyZWFtKTogTG9nZ2luZ0Rlc3RpbmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IEZpcmVob3NlRGVzdGluYXRpb24oc3RyZWFtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHRoaXMgZGVzdGluYXRpb24gdG8gYSBzY29wZSBhbmQgY3JlYXRlIHRoZSBkZWxpdmVyeSBkZXN0aW5hdGlvbiByZXNvdXJjZVxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfYmluZChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKTogTG9nZ2luZ0Rlc3RpbmF0aW9uQmluZENvbmZpZztcbn1cblxuLyoqXG4gKiBDbG91ZFdhdGNoIExvZ3MgZGVzdGluYXRpb24gaW1wbGVtZW50YXRpb25cbiAqL1xuY2xhc3MgQ2xvdWRXYXRjaExvZ3NEZXN0aW5hdGlvbiBleHRlbmRzIExvZ2dpbmdEZXN0aW5hdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuSUxvZ0dyb3VwKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKTogTG9nZ2luZ0Rlc3RpbmF0aW9uQmluZENvbmZpZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgICAvLyBHZXQgb3IgY3JlYXRlIGEgc2luZ2xldG9uIHJlc291cmNlIHBvbGljeSBmb3IgbG9ncyBkZWxpdmVyeVxuICAgIGNvbnN0IHBvbGljeUlkID0gJ0Nka0xvZ0dyb3VwTG9nc0RlbGl2ZXJ5UG9saWN5JztcbiAgICBsZXQgcmVzb3VyY2VQb2xpY3kgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChwb2xpY3lJZCkgYXMgbG9ncy5SZXNvdXJjZVBvbGljeSB8IHVuZGVmaW5lZDtcblxuICAgIGlmICghcmVzb3VyY2VQb2xpY3kpIHtcbiAgICAgIHJlc291cmNlUG9saWN5ID0gbmV3IGxvZ3MuUmVzb3VyY2VQb2xpY3koc3RhY2ssIHBvbGljeUlkKTtcbiAgICB9XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBzcGVjaWZpYyBsb2cgZ3JvdXBcbiAgICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9sb2dzL0FXUy1sb2dzLWluZnJhc3RydWN0dXJlLVYyLUNsb3VkV2F0Y2hMb2dzLmh0bWxcbiAgICByZXNvdXJjZVBvbGljeS5kb2N1bWVudC5hZGRTdGF0ZW1lbnRzKG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICBwcmluY2lwYWxzOiBbbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2RlbGl2ZXJ5LmxvZ3MuYW1hem9uYXdzLmNvbScpXSxcbiAgICAgIGFjdGlvbnM6IFsnbG9nczpDcmVhdGVMb2dTdHJlYW0nLCAnbG9nczpQdXRMb2dFdmVudHMnXSxcbiAgICAgIHJlc291cmNlczogW2Ake3RoaXMubG9nR3JvdXAubG9nR3JvdXBBcm59OmxvZy1zdHJlYW06KmBdLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnYXdzOlNvdXJjZUFjY291bnQnOiBzdGFjay5hY2NvdW50LFxuICAgICAgICB9LFxuICAgICAgICBBcm5MaWtlOiB7XG4gICAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgc2VydmljZTogJ2xvZ3MnLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICcqJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZGVsaXZlcnlEZXN0aW5hdGlvbiA9IG5ldyBsb2dzLkNmbkRlbGl2ZXJ5RGVzdGluYXRpb24oc2NvcGUsIGAke2lkfURlc3RgLCB7XG4gICAgICBuYW1lOiBMYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpOiBzdHJpbmcgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKGRlbGl2ZXJ5RGVzdGluYXRpb24sIHsgbWF4TGVuZ3RoOiBNQVhfREVMSVZFUllfTkFNRV9MRU5HVEggfSkgfSksXG4gICAgICBkZWxpdmVyeURlc3RpbmF0aW9uVHlwZTogJ0NXTCcsXG4gICAgICBkZXN0aW5hdGlvblJlc291cmNlQXJuOiB0aGlzLmxvZ0dyb3VwLmxvZ0dyb3VwQXJuLFxuICAgIH0pO1xuXG4gICAgZGVsaXZlcnlEZXN0aW5hdGlvbi5ub2RlLmFkZERlcGVuZGVuY3kocmVzb3VyY2VQb2xpY3kpO1xuXG4gICAgcmV0dXJuIHsgZGVsaXZlcnlEZXN0aW5hdGlvbiB9O1xuICB9XG59XG5cbi8qKlxuICogUzMgZGVzdGluYXRpb24gaW1wbGVtZW50YXRpb25cbiAqL1xuY2xhc3MgUzNEZXN0aW5hdGlvbiBleHRlbmRzIExvZ2dpbmdEZXN0aW5hdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKTogTG9nZ2luZ0Rlc3RpbmF0aW9uQmluZENvbmZpZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgICAvLyBBZGQgYnVja2V0IHBvbGljeSBmb3IgbG9ncyBkZWxpdmVyeVxuICAgIC8vIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvQVdTLWxvZ3MtaW5mcmFzdHJ1Y3R1cmUtVjItUzMuaHRtbFxuICAgIHRoaXMuYnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIHByaW5jaXBhbHM6IFtuZXcgU2VydmljZVByaW5jaXBhbCgnZGVsaXZlcnkubG9ncy5hbWF6b25hd3MuY29tJyldLFxuICAgICAgYWN0aW9uczogWydzMzpQdXRPYmplY3QnXSxcbiAgICAgIHJlc291cmNlczogW2Ake3RoaXMuYnVja2V0LmJ1Y2tldEFybn0vQVdTTG9ncy8ke3N0YWNrLmFjY291bnR9LypgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ3MzOngtYW16LWFjbCc6ICdidWNrZXQtb3duZXItZnVsbC1jb250cm9sJyxcbiAgICAgICAgICAnYXdzOlNvdXJjZUFjY291bnQnOiBzdGFjay5hY2NvdW50LFxuICAgICAgICB9LFxuICAgICAgICBBcm5MaWtlOiB7XG4gICAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgc2VydmljZTogJ2xvZ3MnLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICdkZWxpdmVyeS1zb3VyY2UnLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICAgICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBkZWxpdmVyeURlc3RpbmF0aW9uID0gbmV3IGxvZ3MuQ2ZuRGVsaXZlcnlEZXN0aW5hdGlvbihzY29wZSwgYCR7aWR9RGVzdGAsIHtcbiAgICAgIG5hbWU6IExhenkuc3RyaW5nKHsgcHJvZHVjZTogKCk6IHN0cmluZyA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUoZGVsaXZlcnlEZXN0aW5hdGlvbiwgeyBtYXhMZW5ndGg6IE1BWF9ERUxJVkVSWV9OQU1FX0xFTkdUSCB9KSB9KSxcbiAgICAgIGRlbGl2ZXJ5RGVzdGluYXRpb25UeXBlOiAnUzMnLFxuICAgICAgZGVzdGluYXRpb25SZXNvdXJjZUFybjogdGhpcy5idWNrZXQuYnVja2V0QXJuLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgZGVsaXZlcnlEZXN0aW5hdGlvbiB9O1xuICB9XG59XG5cbi8qKlxuICogRmlyZWhvc2UgZGVzdGluYXRpb24gaW1wbGVtZW50YXRpb25cbiAqL1xuY2xhc3MgRmlyZWhvc2VEZXN0aW5hdGlvbiBleHRlbmRzIExvZ2dpbmdEZXN0aW5hdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBJRGVsaXZlcnlTdHJlYW0pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpOiBMb2dnaW5nRGVzdGluYXRpb25CaW5kQ29uZmlnIHtcbiAgICAvLyBGaXJlaG9zZSB1c2VzIGEgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IHJlcXVpcmVzIHRoaXMgdGFnIHRvIGdyYW50IGFjY2Vzc1xuICAgIC8vIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvQVdTLWxvZ3MtaW5mcmFzdHJ1Y3R1cmUtVjItRmlyZWhvc2UuaHRtbFxuICAgIFRhZ3Mub2YodGhpcy5zdHJlYW0pLmFkZCgnTG9nRGVsaXZlcnlFbmFibGVkJywgJ3RydWUnKTtcblxuICAgIGNvbnN0IGRlbGl2ZXJ5RGVzdGluYXRpb24gPSBuZXcgbG9ncy5DZm5EZWxpdmVyeURlc3RpbmF0aW9uKHNjb3BlLCBgJHtpZH1EZXN0YCwge1xuICAgICAgbmFtZTogTGF6eS5zdHJpbmcoeyBwcm9kdWNlOiAoKTogc3RyaW5nID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZShkZWxpdmVyeURlc3RpbmF0aW9uLCB7IG1heExlbmd0aDogTUFYX0RFTElWRVJZX05BTUVfTEVOR1RIIH0pIH0pLFxuICAgICAgZGVsaXZlcnlEZXN0aW5hdGlvblR5cGU6ICdGSCcsXG4gICAgICBkZXN0aW5hdGlvblJlc291cmNlQXJuOiB0aGlzLnN0cmVhbS5kZWxpdmVyeVN0cmVhbUFybixcbiAgICB9KTtcblxuICAgIHJldHVybiB7IGRlbGl2ZXJ5RGVzdGluYXRpb24gfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVybmFsIFgtUmF5IHJlc291cmNlIHBvbGljeSB3cmFwcGVyIHRoYXQgYWxsb3dzIGFkZGluZyBzdGF0ZW1lbnRzIGFmdGVyIGNyZWF0aW9uLlxuICogVGhpcyBpcyBzaW1pbGFyIHRvIGxvZ3MuUmVzb3VyY2VQb2xpY3kgYnV0IGZvciBYLVJheS5cbiAqL1xuY2xhc3MgWFJheVJlc291cmNlUG9saWN5IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50OiBQb2xpY3lEb2N1bWVudDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuZG9jdW1lbnQgPSBuZXcgUG9saWN5RG9jdW1lbnQoKTtcblxuICAgIG5ldyB4cmF5LkNmblJlc291cmNlUG9saWN5KHRoaXMsICdSZXNvdXJjZVBvbGljeScsIHtcbiAgICAgIHBvbGljeU5hbWU6IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjggfSksXG4gICAgICB9KSxcbiAgICAgIHBvbGljeURvY3VtZW50OiBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IEpTT04uc3RyaW5naWZ5KHRoaXMuZG9jdW1lbnQudG9KU09OKCkpLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25maWd1cmUgWC1SYXkgdHJhY2luZyBkZWxpdmVyeSBmb3IgYSBydW50aW1lXG4gKlxuICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAqIEBwYXJhbSBzb3VyY2VBcm4gVGhlIEFSTiBvZiB0aGUgc291cmNlIHJlc291cmNlIChydW50aW1lKVxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVUcmFjaW5nRGVsaXZlcnkoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIHNvdXJjZUFybjogc3RyaW5nLFxuKTogbG9ncy5DZm5EZWxpdmVyeSB7XG4gIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuXG4gIC8vIENyZWF0ZSBkZWxpdmVyeSBzb3VyY2UgZm9yIHRyYWNlc1xuICBjb25zdCBkZWxpdmVyeVNvdXJjZSA9IG5ldyBsb2dzLkNmbkRlbGl2ZXJ5U291cmNlKHNjb3BlLCAnVHJhY2VzRGVsaXZlcnlTb3VyY2UnLCB7XG4gICAgbmFtZTogTGF6eS5zdHJpbmcoeyBwcm9kdWNlOiAoKTogc3RyaW5nID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZShkZWxpdmVyeVNvdXJjZSwgeyBtYXhMZW5ndGg6IE1BWF9ERUxJVkVSWV9OQU1FX0xFTkdUSCB9KSB9KSxcbiAgICBsb2dUeXBlOiAnVFJBQ0VTJyxcbiAgICByZXNvdXJjZUFybjogc291cmNlQXJuLFxuICB9KTtcblxuICAvLyBHZXQgb3IgY3JlYXRlIFgtUmF5IHJlc291cmNlIHBvbGljeSAoc2luZ2xldG9uIHBlciBzdGFjaylcbiAgY29uc3QgcG9saWN5SWQgPSAnQ2RrWFJheUxvZ3NEZWxpdmVyeVBvbGljeSc7XG4gIGxldCB4cmF5UG9saWN5ID0gc3RhY2subm9kZS50cnlGaW5kQ2hpbGQocG9saWN5SWQpIGFzIFhSYXlSZXNvdXJjZVBvbGljeSB8IHVuZGVmaW5lZDtcblxuICBpZiAoIXhyYXlQb2xpY3kpIHtcbiAgICB4cmF5UG9saWN5ID0gbmV3IFhSYXlSZXNvdXJjZVBvbGljeShzdGFjaywgcG9saWN5SWQpO1xuICB9XG5cbiAgLy8gR3JhbnQgcGVybWlzc2lvbnMgZm9yIHRoaXMgc3BlY2lmaWMgc291cmNlIHJlc291cmNlXG4gIC8vIFRoZSB4cmF5OlB1dFRyYWNlU2VnbWVudHMgYWN0aW9uIHJlcXVpcmVzIHJlc291cmNlczogWycqJ10gcGVyIEFXUyBkb2N1bWVudGF0aW9uLlxuICAvLyBUaGUgY29uZGl0aW9ucyBiZWxvdyByZXN0cmljdCB0aGlzIGJyb2FkIHNjb3BlIHRvIG9ubHkgdGhlIHNwZWNpZmljIHNvdXJjZSByZXNvdXJjZVxuICAvLyAodmlhIGxvZ3M6TG9nR2VuZXJhdGluZ1Jlc291cmNlQXJucykgYW5kIHRoZSBjdXJyZW50IGFjY291bnQgYW5kIGRlbGl2ZXJ5LXNvdXJjZSBBUk4uXG4gIC8vIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvQVdTLWxvZ3MtaW5mcmFzdHJ1Y3R1cmUtVjItWFJBWS5odG1sXG4gIHhyYXlQb2xpY3kuZG9jdW1lbnQuYWRkU3RhdGVtZW50cyhuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICBwcmluY2lwYWxzOiBbbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2RlbGl2ZXJ5LmxvZ3MuYW1hem9uYXdzLmNvbScpXSxcbiAgICBhY3Rpb25zOiBbJ3hyYXk6UHV0VHJhY2VTZWdtZW50cyddLFxuICAgIHJlc291cmNlczogWycqJ10sXG4gICAgY29uZGl0aW9uczoge1xuICAgICAgJ0ZvckFsbFZhbHVlczpBcm5MaWtlJzoge1xuICAgICAgICAnbG9nczpMb2dHZW5lcmF0aW5nUmVzb3VyY2VBcm5zJzogW3NvdXJjZUFybl0sXG4gICAgICB9LFxuICAgICAgJ1N0cmluZ0VxdWFscyc6IHtcbiAgICAgICAgJ2F3czpTb3VyY2VBY2NvdW50Jzogc3RhY2suYWNjb3VudCxcbiAgICAgIH0sXG4gICAgICAnQXJuTGlrZSc6IHtcbiAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICByZXNvdXJjZTogJ2RlbGl2ZXJ5LXNvdXJjZScsXG4gICAgICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0sXG4gIH0pKTtcblxuICAvLyBDcmVhdGUgZGVsaXZlcnkgZGVzdGluYXRpb24gZm9yIFgtUmF5XG4gIGNvbnN0IGRlbGl2ZXJ5RGVzdGluYXRpb24gPSBuZXcgbG9ncy5DZm5EZWxpdmVyeURlc3RpbmF0aW9uKHNjb3BlLCAnVHJhY2VzRGVsaXZlcnlEZXN0Jywge1xuICAgIG5hbWU6IExhenkuc3RyaW5nKHsgcHJvZHVjZTogKCk6IHN0cmluZyA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUoZGVsaXZlcnlEZXN0aW5hdGlvbiwgeyBtYXhMZW5ndGg6IE1BWF9ERUxJVkVSWV9OQU1FX0xFTkdUSCB9KSB9KSxcbiAgICBkZWxpdmVyeURlc3RpbmF0aW9uVHlwZTogJ1hSQVknLFxuICB9KTtcblxuICBkZWxpdmVyeURlc3RpbmF0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeSh4cmF5UG9saWN5KTtcblxuICAvLyBDcmVhdGUgZGVsaXZlcnkgdG8gY29ubmVjdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uXG4gIGNvbnN0IGRlbGl2ZXJ5ID0gbmV3IGxvZ3MuQ2ZuRGVsaXZlcnkoc2NvcGUsICdUcmFjZXNEZWxpdmVyeScsIHtcbiAgICBkZWxpdmVyeVNvdXJjZU5hbWU6IGRlbGl2ZXJ5U291cmNlLmRlbGl2ZXJ5U291cmNlUmVmLmRlbGl2ZXJ5U291cmNlTmFtZSxcbiAgICBkZWxpdmVyeURlc3RpbmF0aW9uQXJuOiBkZWxpdmVyeURlc3RpbmF0aW9uLmF0dHJBcm4sXG4gIH0pO1xuXG4gIGRlbGl2ZXJ5Lm5vZGUuYWRkRGVwZW5kZW5jeShkZWxpdmVyeVNvdXJjZSk7XG4gIGRlbGl2ZXJ5Lm5vZGUuYWRkRGVwZW5kZW5jeShkZWxpdmVyeURlc3RpbmF0aW9uKTtcblxuICByZXR1cm4gZGVsaXZlcnk7XG59XG5cbi8qKlxuICogQ29uZmlndXJlIGxvZ2dpbmcgZGVsaXZlcnkgZm9yIGEgcnVudGltZVxuICpcbiAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gKiBAcGFyYW0gc291cmNlQXJuIFRoZSBBUk4gb2YgdGhlIHNvdXJjZSByZXNvdXJjZSAocnVudGltZSlcbiAqIEBwYXJhbSBsb2dnaW5nQ29uZmlncyBBcnJheSBvZiBsb2dnaW5nIGNvbmZpZ3VyYXRpb25zXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZUxvZ2dpbmdEZWxpdmVyeShcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgc291cmNlQXJuOiBzdHJpbmcsXG4gIGxvZ2dpbmdDb25maWdzOiBMb2dnaW5nQ29uZmlnW10sXG4pOiBsb2dzLkNmbkRlbGl2ZXJ5W10ge1xuICBjb25zdCBkZWxpdmVyaWVzOiBsb2dzLkNmbkRlbGl2ZXJ5W10gPSBbXTtcblxuICAvLyBHcm91cCBjb25maWdzIGJ5IGxvZyB0eXBlIHRvIGNyZWF0ZSBvbmUgc291cmNlIHBlciBsb2cgdHlwZVxuICBjb25zdCBjb25maWdzQnlMb2dUeXBlID0gbmV3IE1hcDxzdHJpbmcsIExvZ2dpbmdDb25maWdbXT4oKTtcbiAgZm9yIChjb25zdCBjb25maWcgb2YgbG9nZ2luZ0NvbmZpZ3MpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGNvbmZpZ3NCeUxvZ1R5cGUuZ2V0KGNvbmZpZy5sb2dUeXBlLnZhbHVlKSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKGNvbmZpZyk7XG4gICAgY29uZmlnc0J5TG9nVHlwZS5zZXQoY29uZmlnLmxvZ1R5cGUudmFsdWUsIGV4aXN0aW5nKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBkZWxpdmVyeSBzb3VyY2VzIGFuZCBkZWxpdmVyaWVzIGZvciBlYWNoIGxvZyB0eXBlXG4gIGZvciAoY29uc3QgW2xvZ1R5cGUsIGNvbmZpZ3NdIG9mIGNvbmZpZ3NCeUxvZ1R5cGUpIHtcbiAgICAvLyBDb252ZXJ0IGxvZyB0eXBlIHRvIFBhc2NhbENhc2UgZm9yIGNvbnN0cnVjdCBJRHMgKGUuZy4sIEFQUExJQ0FUSU9OX0xPR1Mg4oaSIEFwcGxpY2F0aW9uTG9ncylcbiAgICBjb25zdCBsb2dUeXBlSWQgPSBsb2dUeXBlLnNwbGl0KCdfJykubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCkpLmpvaW4oJycpO1xuXG4gICAgLy8gQ3JlYXRlIGEgZGVsaXZlcnkgc291cmNlIGZvciB0aGlzIGxvZyB0eXBlXG4gICAgY29uc3QgZGVsaXZlcnlTb3VyY2U6IGxvZ3MuQ2ZuRGVsaXZlcnlTb3VyY2UgPSBuZXcgbG9ncy5DZm5EZWxpdmVyeVNvdXJjZShzY29wZSwgYCR7bG9nVHlwZUlkfURlbGl2ZXJ5U291cmNlYCwge1xuICAgICAgbmFtZTogTGF6eS5zdHJpbmcoeyBwcm9kdWNlOiAoKTogc3RyaW5nID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZShkZWxpdmVyeVNvdXJjZSwgeyBtYXhMZW5ndGg6IE1BWF9ERUxJVkVSWV9OQU1FX0xFTkdUSCB9KSB9KSxcbiAgICAgIGxvZ1R5cGU6IGxvZ1R5cGUsXG4gICAgICByZXNvdXJjZUFybjogc291cmNlQXJuLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGRlbGl2ZXJ5IGZvciBlYWNoIGRlc3RpbmF0aW9uXG4gICAgY29uZmlncy5mb3JFYWNoKChjb25maWcsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpZCA9IGNvbmZpZ3MubGVuZ3RoID09PSAxID8gbG9nVHlwZUlkIDogYCR7bG9nVHlwZUlkfSR7aW5kZXh9YDtcbiAgICAgIGNvbnN0IGJpbmRDb25maWcgPSBjb25maWcuZGVzdGluYXRpb24uX2JpbmQoc2NvcGUsIGlkKTtcblxuICAgICAgY29uc3QgZGVsaXZlcnkgPSBuZXcgbG9ncy5DZm5EZWxpdmVyeShzY29wZSwgYCR7aWR9RGVsaXZlcnlgLCB7XG4gICAgICAgIGRlbGl2ZXJ5U291cmNlTmFtZTogZGVsaXZlcnlTb3VyY2UuZGVsaXZlcnlTb3VyY2VSZWYuZGVsaXZlcnlTb3VyY2VOYW1lLFxuICAgICAgICBkZWxpdmVyeURlc3RpbmF0aW9uQXJuOiBiaW5kQ29uZmlnLmRlbGl2ZXJ5RGVzdGluYXRpb24uYXR0ckFybixcbiAgICAgIH0pO1xuXG4gICAgICBkZWxpdmVyeS5ub2RlLmFkZERlcGVuZGVuY3koZGVsaXZlcnlTb3VyY2UpO1xuICAgICAgZGVsaXZlcnkubm9kZS5hZGREZXBlbmRlbmN5KGJpbmRDb25maWcuZGVsaXZlcnlEZXN0aW5hdGlvbik7XG5cbiAgICAgIGlmIChkZWxpdmVyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGVsaXZlcnkubm9kZS5hZGREZXBlbmRlbmN5KGRlbGl2ZXJpZXNbZGVsaXZlcmllcy5sZW5ndGggLSAxXSk7XG4gICAgICB9XG5cbiAgICAgIGRlbGl2ZXJpZXMucHVzaChkZWxpdmVyeSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZGVsaXZlcmllcztcbn1cbiJdfQ==
@@ -49,7 +49,7 @@ var AgentCoreRuntime;
49
49
  * Provides methods to reference container images from ECR repositories or local assets.
50
50
  */
51
51
  class AgentRuntimeArtifact {
52
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AgentRuntimeArtifact", version: "2.250.0-alpha.0" };
52
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AgentRuntimeArtifact", version: "2.252.0-alpha.0" };
53
53
  /**
54
54
  * Reference an image in an ECR repository
55
55
  */
@@ -15,7 +15,7 @@ const perms_1 = require("./perms");
15
15
  * Base class for Agent Runtime
16
16
  */
17
17
  class RuntimeBase extends aws_cdk_lib_1.Resource {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeBase", version: "2.250.0-alpha.0" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeBase", version: "2.252.0-alpha.0" };
19
19
  /**
20
20
  * A reference to a Runtime resource.
21
21
  */
@@ -10,7 +10,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
10
10
  * Base class for Runtime Endpoint
11
11
  */
12
12
  class RuntimeEndpointBase extends aws_cdk_lib_1.Resource {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeEndpointBase", version: "2.250.0-alpha.0" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeEndpointBase", version: "2.252.0-alpha.0" };
14
14
  /**
15
15
  * A reference to a RuntimeEndpoint resource.
16
16
  */
@@ -69,7 +69,7 @@ let RuntimeEndpoint = (() => {
69
69
  RuntimeEndpoint = _classThis = _classDescriptor.value;
70
70
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
71
71
  }
72
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeEndpoint", version: "2.250.0-alpha.0" };
72
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeEndpoint", version: "2.252.0-alpha.0" };
73
73
  /** Uniquely identifies this class. */
74
74
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.RuntimeEndpoint';
75
75
  /**
@@ -1,6 +1,7 @@
1
1
  import * as iam from 'aws-cdk-lib/aws-iam';
2
2
  import type { Construct } from 'constructs';
3
3
  import type { RuntimeAuthorizerConfiguration } from './inbound-auth/runtime-authorizer-configuration';
4
+ import type { LoggingConfig } from './observability';
4
5
  import type { AgentRuntimeArtifact } from './runtime-artifact';
5
6
  import type { IBedrockAgentRuntime, AgentRuntimeAttributes } from './runtime-base';
6
7
  import { RuntimeBase } from './runtime-base';
@@ -84,6 +85,22 @@ export interface RuntimeProps {
84
85
  * @default - No lifecycle configuration
85
86
  */
86
87
  readonly lifecycleConfiguration?: LifecycleConfiguration;
88
+ /**
89
+ * Whether to enable X-Ray tracing for this runtime.
90
+ * When enabled, traces will be delivered to AWS X-Ray.
91
+ *
92
+ * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/observability.html
93
+ * @default false
94
+ */
95
+ readonly tracingEnabled?: boolean;
96
+ /**
97
+ * Logging configuration for the runtime.
98
+ * Allows sending APPLICATION_LOGS and USAGE_LOGS to CloudWatch Logs, S3, or Kinesis Data Firehose.
99
+ *
100
+ * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/observability.html
101
+ * @default - No logging configured
102
+ */
103
+ readonly loggingConfigs?: LoggingConfig[];
87
104
  }
88
105
  /**
89
106
  * Options for adding an endpoint to the runtime