@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.
- package/.jsii +11883 -7285
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +4 -0
- package/README.md +405 -0
- package/lib/gateway/gateway-base.js +1 -1
- package/lib/gateway/gateway.d.ts +58 -0
- package/lib/gateway/gateway.js +46 -3
- package/lib/gateway/inbound-auth/authorizer.d.ts +27 -1
- package/lib/gateway/inbound-auth/authorizer.js +37 -5
- package/lib/gateway/inbound-auth/custom-claim.js +1 -1
- package/lib/gateway/interceptor.js +1 -1
- package/lib/gateway/outbound-auth/api-key.js +1 -1
- package/lib/gateway/outbound-auth/credential-provider.js +1 -1
- package/lib/gateway/protocol.js +2 -2
- package/lib/gateway/targets/schema/api-schema.js +4 -4
- package/lib/gateway/targets/schema/tool-schema.js +4 -4
- package/lib/gateway/targets/target-base.js +1 -1
- package/lib/gateway/targets/target-configuration.js +6 -6
- package/lib/gateway/targets/target.js +1 -1
- package/lib/index.d.ts +8 -0
- package/lib/index.js +13 -1
- package/lib/memory/memory-strategy.js +1 -1
- package/lib/memory/memory.js +2 -2
- package/lib/memory/strategies/managed-strategy.js +1 -1
- package/lib/memory/strategies/self-managed-strategy.js +1 -1
- package/lib/network/network-configuration.js +4 -4
- package/lib/policy/perms.d.ts +50 -0
- package/lib/policy/perms.js +62 -0
- package/lib/policy/policy-base.d.ts +194 -0
- package/lib/policy/policy-base.js +120 -0
- package/lib/policy/policy-engine-base.d.ts +260 -0
- package/lib/policy/policy-engine-base.js +193 -0
- package/lib/policy/policy-engine.d.ts +150 -0
- package/lib/policy/policy-engine.js +290 -0
- package/lib/policy/policy-statement.d.ts +518 -0
- package/lib/policy/policy-statement.js +927 -0
- package/lib/policy/policy-types.d.ts +66 -0
- package/lib/policy/policy-types.js +30 -0
- package/lib/policy/policy.d.ts +127 -0
- package/lib/policy/policy.js +225 -0
- package/lib/policy/validation-helpers.d.ts +139 -0
- package/lib/policy/validation-helpers.js +276 -0
- package/lib/runtime/inbound-auth/custom-claim.js +1 -1
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
- package/lib/runtime/observability.d.ts +105 -0
- package/lib/runtime/observability.js +317 -0
- package/lib/runtime/runtime-artifact.js +1 -1
- package/lib/runtime/runtime-base.js +1 -1
- package/lib/runtime/runtime-endpoint-base.js +1 -1
- package/lib/runtime/runtime-endpoint.js +1 -1
- package/lib/runtime/runtime.d.ts +17 -0
- package/lib/runtime/runtime.js +10 -2
- package/lib/tools/browser.js +2 -2
- package/lib/tools/code-interpreter.js +2 -2
- package/package.json +9 -9
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
/**
|
package/lib/runtime/runtime.d.ts
CHANGED
|
@@ -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
|