@cdklabs/cdk-appmod-catalog-blueprints 1.2.2 → 1.4.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 (69) hide show
  1. package/.jsii +804 -173
  2. package/README.md +76 -98
  3. package/lib/document-processing/adapter/queued-s3-adapter.js +1 -1
  4. package/lib/document-processing/agentic-document-processing.d.ts +5 -28
  5. package/lib/document-processing/agentic-document-processing.js +8 -63
  6. package/lib/document-processing/base-document-processing.js +4 -20
  7. package/lib/document-processing/bedrock-document-processing.d.ts +4 -32
  8. package/lib/document-processing/bedrock-document-processing.js +10 -37
  9. package/lib/document-processing/default-document-processing-config.js +1 -1
  10. package/lib/document-processing/tests/agentic-document-processing-nag.test.js +12 -11
  11. package/lib/document-processing/tests/agentic-document-processing.test.js +136 -67
  12. package/lib/document-processing/tests/base-document-processing-nag.test.d.ts +1 -0
  13. package/lib/document-processing/tests/base-document-processing-nag.test.js +161 -0
  14. package/lib/document-processing/tests/base-document-processing.test.d.ts +1 -0
  15. package/lib/document-processing/tests/base-document-processing.test.js +499 -0
  16. package/lib/document-processing/tests/bedrock-document-processing-nag.test.js +3 -2
  17. package/lib/document-processing/tests/bedrock-document-processing.test.js +221 -40
  18. package/lib/document-processing/tests/queued-s3-adapter-nag.test.d.ts +1 -0
  19. package/lib/document-processing/tests/queued-s3-adapter-nag.test.js +122 -0
  20. package/lib/document-processing/tests/queued-s3-adapter.test.d.ts +1 -0
  21. package/lib/document-processing/tests/queued-s3-adapter.test.js +276 -0
  22. package/lib/framework/agents/base-agent.d.ts +90 -0
  23. package/lib/framework/agents/base-agent.js +55 -0
  24. package/lib/framework/agents/batch-agent.d.ts +11 -0
  25. package/lib/framework/agents/batch-agent.js +64 -0
  26. package/lib/framework/agents/default-agent-config.d.ts +3 -0
  27. package/lib/framework/agents/default-agent-config.js +12 -0
  28. package/lib/framework/agents/index.d.ts +3 -0
  29. package/lib/framework/agents/index.js +20 -0
  30. package/lib/framework/agents/resources/default-strands-agent/batch.py +99 -0
  31. package/lib/framework/agents/resources/default-strands-agent/models.py +7 -0
  32. package/lib/framework/agents/resources/default-strands-agent/requirements.txt +7 -0
  33. package/lib/framework/agents/resources/default-strands-agent/utils.py +36 -0
  34. package/lib/framework/bedrock/bedrock.d.ts +38 -0
  35. package/lib/framework/bedrock/bedrock.js +54 -0
  36. package/lib/framework/bedrock/index.d.ts +1 -0
  37. package/lib/framework/bedrock/index.js +18 -0
  38. package/lib/framework/custom-resource/default-runtimes.js +1 -1
  39. package/lib/framework/foundation/access-log.js +1 -1
  40. package/lib/framework/foundation/eventbridge-broker.js +1 -1
  41. package/lib/framework/foundation/network.js +1 -1
  42. package/lib/framework/index.d.ts +2 -0
  43. package/lib/framework/index.js +3 -1
  44. package/lib/framework/tests/access-log.test.d.ts +1 -0
  45. package/lib/framework/tests/access-log.test.js +146 -0
  46. package/lib/framework/tests/batch-agent.test.d.ts +1 -0
  47. package/lib/framework/tests/batch-agent.test.js +164 -0
  48. package/lib/framework/tests/bedrock.test.d.ts +1 -0
  49. package/lib/framework/tests/bedrock.test.js +68 -0
  50. package/lib/framework/tests/eventbridge-broker.test.d.ts +1 -0
  51. package/lib/framework/tests/eventbridge-broker.test.js +73 -0
  52. package/lib/framework/tests/framework-nag.test.d.ts +1 -0
  53. package/lib/framework/tests/framework-nag.test.js +155 -0
  54. package/lib/framework/tests/network.test.d.ts +1 -0
  55. package/lib/framework/tests/network.test.js +120 -0
  56. package/lib/tsconfig.tsbuildinfo +1 -1
  57. package/lib/utilities/data-loader.js +1 -1
  58. package/lib/utilities/lambda-iam-utils.js +4 -3
  59. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
  60. package/lib/utilities/observability/default-observability-config.js +1 -1
  61. package/lib/utilities/observability/index.d.ts +1 -0
  62. package/lib/utilities/observability/index.js +2 -1
  63. package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
  64. package/lib/utilities/observability/log-group-data-protection-utils.d.ts +6 -0
  65. package/lib/utilities/observability/log-group-data-protection-utils.js +37 -0
  66. package/lib/utilities/observability/powertools-config.js +1 -1
  67. package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
  68. package/lib/webapp/frontend-construct.js +1 -1
  69. package/package.json +8 -8
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
4
+ const assertions_1 = require("aws-cdk-lib/assertions");
5
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
6
+ const aws_s3_1 = require("aws-cdk-lib/aws-s3");
7
+ const aws_stepfunctions_tasks_1 = require("aws-cdk-lib/aws-stepfunctions-tasks");
8
+ const framework_1 = require("../../framework");
9
+ const adapter_1 = require("../adapter");
10
+ const base_document_processing_1 = require("../base-document-processing");
11
+ class TestDocumentProcessing extends base_document_processing_1.BaseDocumentProcessing {
12
+ constructor(scope, id, props) {
13
+ super(scope, id, props);
14
+ this.classificationFn = new aws_lambda_1.Function(this, 'ClassificationFn', {
15
+ runtime: aws_lambda_1.Runtime.NODEJS_20_X,
16
+ handler: 'index.handler',
17
+ code: aws_lambda_1.Code.fromInline('exports.handler = async () => ({ documentClassification: "TEST" });'),
18
+ });
19
+ this.processingFn = new aws_lambda_1.Function(this, 'ProcessingFn', {
20
+ runtime: aws_lambda_1.Runtime.NODEJS_20_X,
21
+ handler: 'index.handler',
22
+ code: aws_lambda_1.Code.fromInline('exports.handler = async () => ({ result: {} });'),
23
+ });
24
+ }
25
+ classificationStep() {
26
+ return new aws_stepfunctions_tasks_1.LambdaInvoke(this, 'MockClassification', {
27
+ lambdaFunction: this.classificationFn,
28
+ resultPath: '$.classificationResult',
29
+ });
30
+ }
31
+ processingStep() {
32
+ return new aws_stepfunctions_tasks_1.LambdaInvoke(this, 'MockProcessing', {
33
+ lambdaFunction: this.processingFn,
34
+ resultPath: '$.processingResult',
35
+ });
36
+ }
37
+ enrichmentStep() {
38
+ return undefined;
39
+ }
40
+ postProcessingStep() {
41
+ return undefined;
42
+ }
43
+ createStateMachine() {
44
+ return this.handleStateMachineCreation('test-state-machine');
45
+ }
46
+ }
47
+ describe('QueuedS3Adapter', () => {
48
+ let defaultStack;
49
+ let customBucketStack;
50
+ let customPrefixStack;
51
+ let customQueueStack;
52
+ let defaultTemplate;
53
+ let customBucketTemplate;
54
+ let customPrefixTemplate;
55
+ let customQueueTemplate;
56
+ beforeAll(() => {
57
+ defaultStack = new aws_cdk_lib_1.Stack();
58
+ const defaultAdapter = new adapter_1.QueuedS3Adapter();
59
+ const defaultConstruct = new TestDocumentProcessing(defaultStack, 'DefaultTest', {
60
+ ingressAdapter: defaultAdapter,
61
+ });
62
+ defaultConstruct.createStateMachine();
63
+ customBucketStack = new aws_cdk_lib_1.Stack();
64
+ const accessLog = new framework_1.AccessLog(customBucketStack, 'AccessLog');
65
+ const customBucket = new aws_s3_1.Bucket(customBucketStack, 'CustomBucket', {
66
+ serverAccessLogsBucket: accessLog.bucket,
67
+ serverAccessLogsPrefix: accessLog.bucketPrefix,
68
+ enforceSSL: true,
69
+ });
70
+ const customBucketAdapter = new adapter_1.QueuedS3Adapter({ bucket: customBucket });
71
+ const customBucketConstruct = new TestDocumentProcessing(customBucketStack, 'CustomBucketTest', {
72
+ ingressAdapter: customBucketAdapter,
73
+ });
74
+ customBucketConstruct.createStateMachine();
75
+ customPrefixStack = new aws_cdk_lib_1.Stack();
76
+ const customPrefixAdapter = new adapter_1.QueuedS3Adapter({
77
+ rawPrefix: 'input/',
78
+ processedPrefix: 'output/',
79
+ failedPrefix: 'errors/',
80
+ });
81
+ const customPrefixConstruct = new TestDocumentProcessing(customPrefixStack, 'CustomPrefixTest', {
82
+ ingressAdapter: customPrefixAdapter,
83
+ });
84
+ customPrefixConstruct.createStateMachine();
85
+ customQueueStack = new aws_cdk_lib_1.Stack();
86
+ const customQueueAdapter = new adapter_1.QueuedS3Adapter({
87
+ queueVisibilityTimeout: aws_cdk_lib_1.Duration.minutes(10),
88
+ dlqMaxReceiveCount: 10,
89
+ });
90
+ const customQueueConstruct = new TestDocumentProcessing(customQueueStack, 'CustomQueueTest', {
91
+ ingressAdapter: customQueueAdapter,
92
+ });
93
+ customQueueConstruct.createStateMachine();
94
+ defaultTemplate = assertions_1.Template.fromStack(defaultStack);
95
+ customBucketTemplate = assertions_1.Template.fromStack(customBucketStack);
96
+ customPrefixTemplate = assertions_1.Template.fromStack(customPrefixStack);
97
+ customQueueTemplate = assertions_1.Template.fromStack(customQueueStack);
98
+ });
99
+ describe('S3 bucket configuration', () => {
100
+ test('creates default S3 bucket', () => {
101
+ defaultTemplate.hasResourceProperties('AWS::S3::Bucket', {
102
+ BucketEncryption: {
103
+ ServerSideEncryptionConfiguration: [{
104
+ ServerSideEncryptionByDefault: {
105
+ SSEAlgorithm: 'aws:kms',
106
+ },
107
+ }],
108
+ },
109
+ });
110
+ });
111
+ test('uses provided custom bucket', () => {
112
+ customBucketTemplate.resourceCountIs('AWS::S3::Bucket', 2);
113
+ });
114
+ test('enables bucket key for cost optimization', () => {
115
+ defaultTemplate.hasResourceProperties('AWS::S3::Bucket', {
116
+ BucketEncryption: {
117
+ ServerSideEncryptionConfiguration: [{
118
+ BucketKeyEnabled: true,
119
+ }],
120
+ },
121
+ });
122
+ });
123
+ });
124
+ describe('SQS queue configuration', () => {
125
+ test('creates SQS queue with default visibility timeout', () => {
126
+ defaultTemplate.hasResourceProperties('AWS::SQS::Queue', {
127
+ VisibilityTimeout: 300,
128
+ });
129
+ });
130
+ test('creates dead letter queue', () => {
131
+ defaultTemplate.hasResourceProperties('AWS::SQS::Queue', {
132
+ RedrivePolicy: {
133
+ deadLetterTargetArn: assertions_1.Match.anyValue(),
134
+ maxReceiveCount: 5,
135
+ },
136
+ });
137
+ });
138
+ test('uses custom visibility timeout', () => {
139
+ customQueueTemplate.hasResourceProperties('AWS::SQS::Queue', {
140
+ VisibilityTimeout: 600,
141
+ });
142
+ });
143
+ test('uses custom DLQ max receive count', () => {
144
+ customQueueTemplate.hasResourceProperties('AWS::SQS::Queue', {
145
+ RedrivePolicy: {
146
+ maxReceiveCount: 10,
147
+ },
148
+ });
149
+ });
150
+ test('encrypts queue with KMS', () => {
151
+ defaultTemplate.hasResourceProperties('AWS::SQS::Queue', {
152
+ KmsMasterKeyId: assertions_1.Match.anyValue(),
153
+ });
154
+ });
155
+ });
156
+ describe('S3 event notifications', () => {
157
+ test('creates S3 event notification for raw prefix', () => {
158
+ defaultTemplate.hasResourceProperties('AWS::Lambda::Function', {
159
+ Environment: {
160
+ Variables: {
161
+ RAW_PREFIX: 'raw/',
162
+ },
163
+ },
164
+ });
165
+ });
166
+ test('uses custom prefix for event notification', () => {
167
+ customPrefixTemplate.hasResourceProperties('AWS::Lambda::Function', {
168
+ Environment: {
169
+ Variables: {
170
+ RAW_PREFIX: 'input/',
171
+ },
172
+ },
173
+ });
174
+ });
175
+ });
176
+ describe('SQS consumer Lambda', () => {
177
+ test('creates SQS consumer Lambda function', () => {
178
+ defaultTemplate.hasResourceProperties('AWS::Lambda::Function', {
179
+ Runtime: 'python3.13',
180
+ Timeout: 300,
181
+ Environment: {
182
+ Variables: {
183
+ STATE_MACHINE_ARN: assertions_1.Match.anyValue(),
184
+ RAW_PREFIX: 'raw/',
185
+ },
186
+ },
187
+ });
188
+ });
189
+ test('configures Lambda event source mapping', () => {
190
+ defaultTemplate.hasResourceProperties('AWS::Lambda::EventSourceMapping', {
191
+ BatchSize: 10,
192
+ MaximumBatchingWindowInSeconds: 5,
193
+ FunctionResponseTypes: ['ReportBatchItemFailures'],
194
+ });
195
+ });
196
+ test('uses custom prefix in Lambda environment', () => {
197
+ customPrefixTemplate.hasResourceProperties('AWS::Lambda::Function', {
198
+ Environment: {
199
+ Variables: {
200
+ RAW_PREFIX: 'input/',
201
+ },
202
+ },
203
+ });
204
+ });
205
+ });
206
+ describe('IAM permissions', () => {
207
+ test('grants Lambda permission to start Step Functions execution', () => {
208
+ defaultTemplate.hasResourceProperties('AWS::IAM::Role', {
209
+ Policies: assertions_1.Match.arrayWith([
210
+ assertions_1.Match.objectLike({
211
+ PolicyDocument: {
212
+ Statement: assertions_1.Match.arrayWith([
213
+ assertions_1.Match.objectLike({
214
+ Action: 'states:StartExecution',
215
+ Effect: 'Allow',
216
+ }),
217
+ ]),
218
+ },
219
+ }),
220
+ ]),
221
+ });
222
+ });
223
+ test('grants KMS decrypt permissions', () => {
224
+ defaultTemplate.hasResourceProperties('AWS::IAM::Policy', {
225
+ PolicyDocument: {
226
+ Statement: assertions_1.Match.arrayWith([
227
+ assertions_1.Match.objectLike({
228
+ Action: assertions_1.Match.arrayWith(['kms:Decrypt']),
229
+ Effect: 'Allow',
230
+ }),
231
+ ]),
232
+ },
233
+ });
234
+ });
235
+ });
236
+ describe('State machine chains', () => {
237
+ test('creates success chain with copy and delete operations', () => {
238
+ defaultTemplate.hasResourceProperties('AWS::StepFunctions::StateMachine', {
239
+ DefinitionString: assertions_1.Match.objectLike({
240
+ 'Fn::Join': assertions_1.Match.arrayWith(['']),
241
+ }),
242
+ });
243
+ });
244
+ test('creates failed chain with copy and delete operations', () => {
245
+ defaultTemplate.hasResourceProperties('AWS::StepFunctions::StateMachine', {
246
+ DefinitionString: assertions_1.Match.objectLike({
247
+ 'Fn::Join': assertions_1.Match.arrayWith(['']),
248
+ }),
249
+ });
250
+ });
251
+ test('uses custom prefixes in state machine', () => {
252
+ customPrefixTemplate.hasResourceProperties('AWS::StepFunctions::StateMachine', {
253
+ DefinitionString: assertions_1.Match.objectLike({
254
+ 'Fn::Join': assertions_1.Match.arrayWith(['']),
255
+ }),
256
+ });
257
+ });
258
+ });
259
+ describe('Removal policy', () => {
260
+ test('applies removal policy to resources', () => {
261
+ const stack = new aws_cdk_lib_1.Stack();
262
+ const adapter = new adapter_1.QueuedS3Adapter();
263
+ const construct = new TestDocumentProcessing(stack, 'RemovalTest', {
264
+ ingressAdapter: adapter,
265
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN,
266
+ });
267
+ construct.createStateMachine();
268
+ const template = assertions_1.Template.fromStack(stack);
269
+ template.hasResource('AWS::SQS::Queue', {
270
+ DeletionPolicy: 'Retain',
271
+ UpdateReplacePolicy: 'Retain',
272
+ });
273
+ });
274
+ });
275
+ });
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVkLXMzLWFkYXB0ZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9kb2N1bWVudC1wcm9jZXNzaW5nL3Rlc3RzL3F1ZXVlZC1zMy1hZGFwdGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBNkQ7QUFDN0QsdURBQXlEO0FBQ3pELHVEQUFpRTtBQUNqRSwrQ0FBNEM7QUFDNUMsaUZBQW1FO0FBQ25FLCtDQUE0QztBQUM1Qyx3Q0FBNkM7QUFDN0MsMEVBQWlHO0FBRWpHLE1BQU0sc0JBQXVCLFNBQVEsaURBQXNCO0lBSXpELFlBQVksS0FBVSxFQUFFLEVBQVUsRUFBRSxLQUFVO1FBQzVDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLHFCQUFRLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQzdELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDLHFFQUFxRSxDQUFDO1NBQzdGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxxQkFBUSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDckQsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUsZUFBZTtZQUN4QixJQUFJLEVBQUUsaUJBQUksQ0FBQyxVQUFVLENBQUMsaURBQWlELENBQUM7U0FDekUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixPQUFPLElBQUksc0NBQVksQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDbEQsY0FBYyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDckMsVUFBVSxFQUFFLHdCQUF3QjtTQUNyQyxDQUFDLENBQUM7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QkFDdkIsYUFBYSxFQUFFLDJCQUFhLENBQUMsTUFBTTthQUNwQyxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQixNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUzQyxRQUFRLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFO2dCQUN0QyxjQUFjLEVBQUUsUUFBUTtnQkFDeEIsbUJBQW1CLEVBQUUsUUFBUTthQUM5QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBNYXRjaCwgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IENvZGUsIEZ1bmN0aW9uLCBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgTGFtYmRhSW52b2tlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQWNjZXNzTG9nIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrJztcbmltcG9ydCB7IFF1ZXVlZFMzQWRhcHRlciB9IGZyb20gJy4uL2FkYXB0ZXInO1xuaW1wb3J0IHsgQmFzZURvY3VtZW50UHJvY2Vzc2luZywgRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfSBmcm9tICcuLi9iYXNlLWRvY3VtZW50LXByb2Nlc3NpbmcnO1xuXG5jbGFzcyBUZXN0RG9jdW1lbnRQcm9jZXNzaW5nIGV4dGVuZHMgQmFzZURvY3VtZW50UHJvY2Vzc2luZyB7XG4gIHByaXZhdGUgY2xhc3NpZmljYXRpb25GbjogRnVuY3Rpb247XG4gIHByaXZhdGUgcHJvY2Vzc2luZ0ZuOiBGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogYW55LCBpZDogc3RyaW5nLCBwcm9wczogYW55KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLmNsYXNzaWZpY2F0aW9uRm4gPSBuZXcgRnVuY3Rpb24odGhpcywgJ0NsYXNzaWZpY2F0aW9uRm4nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKCdleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PiAoeyBkb2N1bWVudENsYXNzaWZpY2F0aW9uOiBcIlRFU1RcIiB9KTsnKSxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvY2Vzc2luZ0ZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdQcm9jZXNzaW5nRm4nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKCdleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PiAoeyByZXN1bHQ6IHt9IH0pOycpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsYXNzaWZpY2F0aW9uU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGFJbnZva2UodGhpcywgJ01vY2tDbGFzc2lmaWNhdGlvbicsIHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLmNsYXNzaWZpY2F0aW9uRm4sXG4gICAgICByZXN1bHRQYXRoOiAnJC5jbGFzc2lmaWNhdGlvblJlc3VsdCcsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUge1xuICAgIHJldHVybiBuZXcgTGFtYmRhSW52b2tlKHRoaXMsICdNb2NrUHJvY2Vzc2luZycsIHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLnByb2Nlc3NpbmdGbixcbiAgICAgIHJlc3VsdFBhdGg6ICckLnByb2Nlc3NpbmdSZXN1bHQnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVucmljaG1lbnRTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBvc3RQcm9jZXNzaW5nU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVTdGF0ZU1hY2hpbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlU3RhdGVNYWNoaW5lQ3JlYXRpb24oJ3Rlc3Qtc3RhdGUtbWFjaGluZScpO1xuICB9XG59XG5cbmRlc2NyaWJlKCdRdWV1ZWRTM0FkYXB0ZXInLCAoKSA9PiB7XG4gIGxldCBkZWZhdWx0U3RhY2s6IFN0YWNrO1xuICBsZXQgY3VzdG9tQnVja2V0U3RhY2s6IFN0YWNrO1xuICBsZXQgY3VzdG9tUHJlZml4U3RhY2s6IFN0YWNrO1xuICBsZXQgY3VzdG9tUXVldWVTdGFjazogU3RhY2s7XG4gIGxldCBkZWZhdWx0VGVtcGxhdGU6IFRlbXBsYXRlO1xuICBsZXQgY3VzdG9tQnVja2V0VGVtcGxhdGU6IFRlbXBsYXRlO1xuICBsZXQgY3VzdG9tUHJlZml4VGVtcGxhdGU6IFRlbXBsYXRlO1xuICBsZXQgY3VzdG9tUXVldWVUZW1wbGF0ZTogVGVtcGxhdGU7XG5cbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBkZWZhdWx0U3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCBkZWZhdWx0QWRhcHRlciA9IG5ldyBRdWV1ZWRTM0FkYXB0ZXIoKTtcbiAgICBjb25zdCBkZWZhdWx0Q29uc3RydWN0ID0gbmV3IFRlc3REb2N1bWVudFByb2Nlc3NpbmcoZGVmYXVsdFN0YWNrLCAnRGVmYXVsdFRlc3QnLCB7XG4gICAgICBpbmdyZXNzQWRhcHRlcjogZGVmYXVsdEFkYXB0ZXIsXG4gICAgfSk7XG4gICAgZGVmYXVsdENvbnN0cnVjdC5jcmVhdGVTdGF0ZU1hY2hpbmUoKTtcblxuICAgIGN1c3RvbUJ1Y2tldFN0YWNrID0gbmV3IFN0YWNrKCk7XG4gICAgY29uc3QgYWNjZXNzTG9nID0gbmV3IEFjY2Vzc0xvZyhjdXN0b21CdWNrZXRTdGFjaywgJ0FjY2Vzc0xvZycpO1xuICAgIGNvbnN0IGN1c3RvbUJ1Y2tldCA9IG5ldyBCdWNrZXQoY3VzdG9tQnVja2V0U3RhY2ssICdDdXN0b21CdWNrZXQnLCB7XG4gICAgICBzZXJ2ZXJBY2Nlc3NMb2dzQnVja2V0OiBhY2Nlc3NMb2cuYnVja2V0LFxuICAgICAgc2VydmVyQWNjZXNzTG9nc1ByZWZpeDogYWNjZXNzTG9nLmJ1Y2tldFByZWZpeCxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc3QgY3VzdG9tQnVja2V0QWRhcHRlciA9IG5ldyBRdWV1ZWRTM0FkYXB0ZXIoeyBidWNrZXQ6IGN1c3RvbUJ1Y2tldCB9KTtcbiAgICBjb25zdCBjdXN0b21CdWNrZXRDb25zdHJ1Y3QgPSBuZXcgVGVzdERvY3VtZW50UHJvY2Vzc2luZyhjdXN0b21CdWNrZXRTdGFjaywgJ0N1c3RvbUJ1Y2tldFRlc3QnLCB7XG4gICAgICBpbmdyZXNzQWRhcHRlcjogY3VzdG9tQnVja2V0QWRhcHRlcixcbiAgICB9KTtcbiAgICBjdXN0b21CdWNrZXRDb25zdHJ1Y3QuY3JlYXRlU3RhdGVNYWNoaW5lKCk7XG5cbiAgICBjdXN0b21QcmVmaXhTdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIGNvbnN0IGN1c3RvbVByZWZpeEFkYXB0ZXIgPSBuZXcgUXVldWVkUzNBZGFwdGVyKHtcbiAgICAgIHJhd1ByZWZpeDogJ2lucHV0LycsXG4gICAgICBwcm9jZXNzZWRQcmVmaXg6ICdvdXRwdXQvJyxcbiAgICAgIGZhaWxlZFByZWZpeDogJ2Vycm9ycy8nLFxuICAgIH0pO1xuICAgIGNvbnN0IGN1c3RvbVByZWZpeENvbnN0cnVjdCA9IG5ldyBUZXN0RG9jdW1lbnRQcm9jZXNzaW5nKGN1c3RvbVByZWZpeFN0YWNrLCAnQ3VzdG9tUHJlZml4VGVzdCcsIHtcbiAgICAgIGluZ3Jlc3NBZGFwdGVyOiBjdXN0b21QcmVmaXhBZGFwdGVyLFxuICAgIH0pO1xuICAgIGN1c3RvbVByZWZpeENvbnN0cnVjdC5jcmVhdGVTdGF0ZU1hY2hpbmUoKTtcblxuICAgIGN1c3RvbVF1ZXVlU3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgICBjb25zdCBjdXN0b21RdWV1ZUFkYXB0ZXIgPSBuZXcgUXVldWVkUzNBZGFwdGVyKHtcbiAgICAgIHF1ZXVlVmlzaWJpbGl0eVRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTApLFxuICAgICAgZGxxTWF4UmVjZWl2ZUNvdW50OiAxMCxcbiAgICB9KTtcbiAgICBjb25zdCBjdXN0b21RdWV1ZUNvbnN0cnVjdCA9IG5ldyBUZXN0RG9jdW1lbnRQcm9jZXNzaW5nKGN1c3RvbVF1ZXVlU3RhY2ssICdDdXN0b21RdWV1ZVRlc3QnLCB7XG4gICAgICBpbmdyZXNzQWRhcHRlcjogY3VzdG9tUXVldWVBZGFwdGVyLFxuICAgIH0pO1xuICAgIGN1c3RvbVF1ZXVlQ29uc3RydWN0LmNyZWF0ZVN0YXRlTWFjaGluZSgpO1xuXG4gICAgZGVmYXVsdFRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKGRlZmF1bHRTdGFjayk7XG4gICAgY3VzdG9tQnVja2V0VGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soY3VzdG9tQnVja2V0U3RhY2spO1xuICAgIGN1c3RvbVByZWZpeFRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKGN1c3RvbVByZWZpeFN0YWNrKTtcbiAgICBjdXN0b21RdWV1ZVRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKGN1c3RvbVF1ZXVlU3RhY2spO1xuICB9KTtcblxuICBkZXNjcmliZSgnUzMgYnVja2V0IGNvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyBkZWZhdWx0IFMzIGJ1Y2tldCcsICgpID0+IHtcbiAgICAgIGRlZmF1bHRUZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6UzM6OkJ1Y2tldCcsIHtcbiAgICAgICAgQnVja2V0RW5jcnlwdGlvbjoge1xuICAgICAgICAgIFNlcnZlclNpZGVFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogW3tcbiAgICAgICAgICAgIFNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0OiB7XG4gICAgICAgICAgICAgIFNTRUFsZ29yaXRobTogJ2F3czprbXMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndXNlcyBwcm92aWRlZCBjdXN0b20gYnVja2V0JywgKCkgPT4ge1xuICAgICAgY3VzdG9tQnVja2V0VGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OlMzOjpCdWNrZXQnLCAyKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2VuYWJsZXMgYnVja2V0IGtleSBmb3IgY29zdCBvcHRpbWl6YXRpb24nLCAoKSA9PiB7XG4gICAgICBkZWZhdWx0VGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICAgIEJ1Y2tldEVuY3J5cHRpb246IHtcbiAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IFt7XG4gICAgICAgICAgICBCdWNrZXRLZXlFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH1dLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTUVMgcXVldWUgY29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdjcmVhdGVzIFNRUyBxdWV1ZSB3aXRoIGRlZmF1bHQgdmlzaWJpbGl0eSB0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgZGVmYXVsdFRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpTUVM6OlF1ZXVlJywge1xuICAgICAgICBWaXNpYmlsaXR5VGltZW91dDogMzAwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjcmVhdGVzIGRlYWQgbGV0dGVyIHF1ZXVlJywgKCkgPT4ge1xuICAgICAgZGVmYXVsdFRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpTUVM6OlF1ZXVlJywge1xuICAgICAgICBSZWRyaXZlUG9saWN5OiB7XG4gICAgICAgICAgZGVhZExldHRlclRhcmdldEFybjogTWF0Y2guYW55VmFsdWUoKSxcbiAgICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IDUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3VzZXMgY3VzdG9tIHZpc2liaWxpdHkgdGltZW91dCcsICgpID0+IHtcbiAgICAgIGN1c3RvbVF1ZXVlVGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlNRUzo6UXVldWUnLCB7XG4gICAgICAgIFZpc2liaWxpdHlUaW1lb3V0OiA2MDAsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3VzZXMgY3VzdG9tIERMUSBtYXggcmVjZWl2ZSBjb3VudCcsICgpID0+IHtcbiAgICAgIGN1c3RvbVF1ZXVlVGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlNRUzo6UXVldWUnLCB7XG4gICAgICAgIFJlZHJpdmVQb2xpY3k6IHtcbiAgICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IDEwLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdlbmNyeXB0cyBxdWV1ZSB3aXRoIEtNUycsICgpID0+IHtcbiAgICAgIGRlZmF1bHRUZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6U1FTOjpRdWV1ZScsIHtcbiAgICAgICAgS21zTWFzdGVyS2V5SWQ6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1MzIGV2ZW50IG5vdGlmaWNhdGlvbnMnLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyBTMyBldmVudCBub3RpZmljYXRpb24gZm9yIHJhdyBwcmVmaXgnLCAoKSA9PiB7XG4gICAgICBkZWZhdWx0VGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgICAgVmFyaWFibGVzOiB7XG4gICAgICAgICAgICBSQVdfUFJFRklYOiAncmF3LycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndXNlcyBjdXN0b20gcHJlZml4IGZvciBldmVudCBub3RpZmljYXRpb24nLCAoKSA9PiB7XG4gICAgICBjdXN0b21QcmVmaXhUZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgICAgIFJBV19QUkVGSVg6ICdpbnB1dC8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NRUyBjb25zdW1lciBMYW1iZGEnLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyBTUVMgY29uc3VtZXIgTGFtYmRhIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgZGVmYXVsdFRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBSdW50aW1lOiAncHl0aG9uMy4xMycsXG4gICAgICAgIFRpbWVvdXQ6IDMwMCxcbiAgICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgICAgIFNUQVRFX01BQ0hJTkVfQVJOOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgICAgICAgICAgUkFXX1BSRUZJWDogJ3Jhdy8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NvbmZpZ3VyZXMgTGFtYmRhIGV2ZW50IHNvdXJjZSBtYXBwaW5nJywgKCkgPT4ge1xuICAgICAgZGVmYXVsdFRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZycsIHtcbiAgICAgICAgQmF0Y2hTaXplOiAxMCxcbiAgICAgICAgTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzOiA1LFxuICAgICAgICBGdW5jdGlvblJlc3BvbnNlVHlwZXM6IFsnUmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXMnXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndXNlcyBjdXN0b20gcHJlZml4IGluIExhbWJkYSBlbnZpcm9ubWVudCcsICgpID0+IHtcbiAgICAgIGN1c3RvbVByZWZpeFRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgIFZhcmlhYmxlczoge1xuICAgICAgICAgICAgUkFXX1BSRUZJWDogJ2lucHV0LycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnSUFNIHBlcm1pc3Npb25zJywgKCkgPT4ge1xuICAgIHRlc3QoJ2dyYW50cyBMYW1iZGEgcGVybWlzc2lvbiB0byBzdGFydCBTdGVwIEZ1bmN0aW9ucyBleGVjdXRpb24nLCAoKSA9PiB7XG4gICAgICBkZWZhdWx0VGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OklBTTo6Um9sZScsIHtcbiAgICAgICAgUG9saWNpZXM6IE1hdGNoLmFycmF5V2l0aChbXG4gICAgICAgICAgTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBQb2xpY3lEb2N1bWVudDoge1xuICAgICAgICAgICAgICBTdGF0ZW1lbnQ6IE1hdGNoLmFycmF5V2l0aChbXG4gICAgICAgICAgICAgICAgTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICAgICAgICBBY3Rpb246ICdzdGF0ZXM6U3RhcnRFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0pLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdncmFudHMgS01TIGRlY3J5cHQgcGVybWlzc2lvbnMnLCAoKSA9PiB7XG4gICAgICBkZWZhdWx0VGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OklBTTo6UG9saWN5Jywge1xuICAgICAgICBQb2xpY3lEb2N1bWVudDoge1xuICAgICAgICAgIFN0YXRlbWVudDogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgICAgIE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgICBBY3Rpb246IE1hdGNoLmFycmF5V2l0aChbJ2ttczpEZWNyeXB0J10pLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU3RhdGUgbWFjaGluZSBjaGFpbnMnLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyBzdWNjZXNzIGNoYWluIHdpdGggY29weSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMnLCAoKSA9PiB7XG4gICAgICBkZWZhdWx0VGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsIHtcbiAgICAgICAgRGVmaW5pdGlvblN0cmluZzogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgJ0ZuOjpKb2luJzogTWF0Y2guYXJyYXlXaXRoKFsnJ10pLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY3JlYXRlcyBmYWlsZWQgY2hhaW4gd2l0aCBjb3B5IGFuZCBkZWxldGUgb3BlcmF0aW9ucycsICgpID0+IHtcbiAgICAgIGRlZmF1bHRUZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJywge1xuICAgICAgICBEZWZpbml0aW9uU3RyaW5nOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAnRm46OkpvaW4nOiBNYXRjaC5hcnJheVdpdGgoWycnXSksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd1c2VzIGN1c3RvbSBwcmVmaXhlcyBpbiBzdGF0ZSBtYWNoaW5lJywgKCkgPT4ge1xuICAgICAgY3VzdG9tUHJlZml4VGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsIHtcbiAgICAgICAgRGVmaW5pdGlvblN0cmluZzogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgJ0ZuOjpKb2luJzogTWF0Y2guYXJyYXlXaXRoKFsnJ10pLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmVtb3ZhbCBwb2xpY3knLCAoKSA9PiB7XG4gICAgdGVzdCgnYXBwbGllcyByZW1vdmFsIHBvbGljeSB0byByZXNvdXJjZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgY29uc3QgYWRhcHRlciA9IG5ldyBRdWV1ZWRTM0FkYXB0ZXIoKTtcbiAgICAgIGNvbnN0IGNvbnN0cnVjdCA9IG5ldyBUZXN0RG9jdW1lbnRQcm9jZXNzaW5nKHN0YWNrLCAnUmVtb3ZhbFRlc3QnLCB7XG4gICAgICAgIGluZ3Jlc3NBZGFwdGVyOiBhZGFwdGVyLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIH0pO1xuICAgICAgY29uc3RydWN0LmNyZWF0ZVN0YXRlTWFjaGluZSgpO1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZSgnQVdTOjpTUVM6OlF1ZXVlJywge1xuICAgICAgICBEZWxldGlvblBvbGljeTogJ1JldGFpbicsXG4gICAgICAgIFVwZGF0ZVJlcGxhY2VQb2xpY3k6ICdSZXRhaW4nLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,90 @@
1
+ import { PythonFunction } from '@aws-cdk/aws-lambda-python-alpha';
2
+ import { RemovalPolicy } from 'aws-cdk-lib';
3
+ import { PolicyStatement, Role } from 'aws-cdk-lib/aws-iam';
4
+ import { Key } from 'aws-cdk-lib/aws-kms';
5
+ import { LayerVersion } from 'aws-cdk-lib/aws-lambda';
6
+ import { Asset } from 'aws-cdk-lib/aws-s3-assets';
7
+ import { Construct } from 'constructs';
8
+ import { LogGroupDataProtectionProps, ObservableProps } from '../../utilities';
9
+ import { BedrockModelProps } from '../bedrock';
10
+ import { Network } from '../foundation';
11
+ export interface AgentToolsLocationDefinition {
12
+ readonly bucketName: string;
13
+ readonly key: string;
14
+ readonly isFile: boolean;
15
+ readonly isZipArchive: boolean;
16
+ }
17
+ /**
18
+ * Parameters that influences the behavior of the agent
19
+ */
20
+ export interface AgentDefinitionProps {
21
+ /**
22
+ * Configuration for the Bedrock Model to be used
23
+ */
24
+ readonly bedrockModel: BedrockModelProps;
25
+ /**
26
+ * The system prompt of the agent
27
+ *
28
+ */
29
+ readonly systemPrompt: Asset;
30
+ /**
31
+ * List of tools defined in python files. This tools would automatically
32
+ * be loaded by the agent. You can also use this to incorporate other specialized
33
+ * agents as tools.
34
+ */
35
+ readonly tools?: Asset[];
36
+ /**
37
+ * Any dependencies needed by the provided tools
38
+ */
39
+ readonly lambdaLayers?: LayerVersion[];
40
+ /**
41
+ * If tools need additional IAM permissions, these statements
42
+ * would be attached to the Agent's IAM role
43
+ */
44
+ readonly additionalPolicyStatementsForTools?: PolicyStatement[];
45
+ }
46
+ export interface BaseAgentProps extends ObservableProps {
47
+ /**
48
+ * Name of the agent
49
+ */
50
+ readonly agentName: string;
51
+ /**
52
+ * Agent related parameters
53
+ */
54
+ readonly agentDefinition: AgentDefinitionProps;
55
+ /**
56
+ * Enable observability
57
+ *
58
+ * @default false
59
+ */
60
+ readonly enableObservability?: boolean;
61
+ /**
62
+ * If the Agent would be running inside a VPC
63
+ *
64
+ * @default Agent would not be in a VPC
65
+ */
66
+ readonly network?: Network;
67
+ /**
68
+ * Encryption key to encrypt agent environment variables
69
+ *
70
+ * @default new KMS Key would be created
71
+ */
72
+ readonly encryptionKey?: Key;
73
+ /**
74
+ * Removal policy for resources created by this
75
+ * construct
76
+ *
77
+ * @default RemovalPolicy.DESTROY
78
+ */
79
+ readonly removalPolicy?: RemovalPolicy;
80
+ }
81
+ export declare abstract class BaseAgent extends Construct {
82
+ abstract readonly agentFunction: PythonFunction;
83
+ readonly bedrockModel?: BedrockModelProps;
84
+ readonly agentRole: Role;
85
+ readonly encryptionKey: Key;
86
+ /** log group data protection configuration */
87
+ protected readonly logGroupDataProtection: LogGroupDataProtectionProps;
88
+ protected readonly agentToolsLocationDefinitions: AgentToolsLocationDefinition[];
89
+ constructor(scope: Construct, id: string, props: BaseAgentProps);
90
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BaseAgent = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
8
+ const aws_kms_1 = require("aws-cdk-lib/aws-kms");
9
+ const constructs_1 = require("constructs");
10
+ const utilities_1 = require("../../utilities");
11
+ const bedrock_1 = require("../bedrock");
12
+ class BaseAgent extends constructs_1.Construct {
13
+ constructor(scope, id, props) {
14
+ super(scope, id);
15
+ this.bedrockModel = props.agentDefinition.bedrockModel;
16
+ this.encryptionKey = props.encryptionKey || new aws_kms_1.Key(this, 'AgentEncryptionKey', {
17
+ enableKeyRotation: true,
18
+ removalPolicy: props.removalPolicy || aws_cdk_lib_1.RemovalPolicy.DESTROY,
19
+ });
20
+ const inlinePolicies = {};
21
+ if (props.agentDefinition.additionalPolicyStatementsForTools && props.agentDefinition.additionalPolicyStatementsForTools.length > 0) {
22
+ inlinePolicies.ToolPermissions = new aws_iam_1.PolicyDocument({
23
+ statements: props.agentDefinition.additionalPolicyStatementsForTools,
24
+ });
25
+ }
26
+ this.agentRole = new aws_iam_1.Role(this, `Agent-${props.agentName}-Role`, {
27
+ assumedBy: new aws_iam_1.ServicePrincipal('lambda.amazonaws.com'),
28
+ inlinePolicies,
29
+ });
30
+ if (props.network) {
31
+ this.agentRole.addToPrincipalPolicy(utilities_1.LambdaIamUtils.generateLambdaVPCPermissions());
32
+ }
33
+ this.agentToolsLocationDefinitions = [];
34
+ if (props.agentDefinition.tools) {
35
+ for (const tool of props.agentDefinition.tools) {
36
+ tool.grantRead(this.agentRole);
37
+ this.agentToolsLocationDefinitions.push({
38
+ bucketName: tool.s3BucketName,
39
+ key: tool.s3ObjectKey,
40
+ isFile: tool.isFile,
41
+ isZipArchive: tool.isZipArchive,
42
+ });
43
+ }
44
+ }
45
+ this.agentRole.addToPrincipalPolicy(bedrock_1.BedrockModelUtils.generateModelIAMPermissions(this, this.bedrockModel));
46
+ this.logGroupDataProtection = utilities_1.LogGroupDataProtectionUtils.handleDefault(this, props.logGroupDataProtection, props.removalPolicy);
47
+ if (props.enableObservability) {
48
+ aws_cdk_lib_1.PropertyInjectors.of(this).add(new utilities_1.LambdaObservabilityPropertyInjector(this.logGroupDataProtection));
49
+ }
50
+ }
51
+ }
52
+ exports.BaseAgent = BaseAgent;
53
+ _a = JSII_RTTI_SYMBOL_1;
54
+ BaseAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseAgent", version: "1.4.0" };
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYWdlbnRzL2Jhc2UtYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSw2Q0FBK0Q7QUFDL0QsaURBQThGO0FBQzlGLGlEQUEwQztBQUcxQywyQ0FBdUM7QUFDdkMsK0NBQWlLO0FBQ2pLLHdDQUFrRTtBQXNGbEUsTUFBc0IsU0FBVSxTQUFRLHNCQUFTO0lBUy9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLGFBQUcsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDOUUsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsSUFBSSwyQkFBYSxDQUFDLE9BQU87U0FDNUQsQ0FBQyxDQUFDO1FBR0gsTUFBTSxjQUFjLEdBQW1DLEVBQUUsQ0FBQztRQUUxRCxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsa0NBQWtDLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxrQ0FBa0MsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEksY0FBYyxDQUFDLGVBQWUsR0FBRyxJQUFJLHdCQUFjLENBQUM7Z0JBQ2xELFVBQVUsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLGtDQUFrQzthQUNyRSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGNBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxLQUFLLENBQUMsU0FBUyxPQUFPLEVBQUU7WUFDL0QsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMsc0JBQXNCLENBQUM7WUFDdkQsY0FBYztTQUNmLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsMEJBQWMsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUVELElBQUksQ0FBQyw2QkFBNkIsR0FBRyxFQUFFLENBQUM7UUFFeEMsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRS9CLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUM7b0JBQ3RDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWTtvQkFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXO29CQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ25CLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtpQkFDaEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLDJCQUFpQixDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM1RyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsdUNBQTJCLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWpJLElBQUksS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDOUIsK0JBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FDNUIsSUFBSSwrQ0FBbUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FDckUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOztBQTFESCw4QkEyREMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFB5dGhvbkZ1bmN0aW9uIH0gZnJvbSAnQGF3cy1jZGsvYXdzLWxhbWJkYS1weXRob24tYWxwaGEnO1xuaW1wb3J0IHsgUHJvcGVydHlJbmplY3RvcnMsIFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQb2xpY3lEb2N1bWVudCwgUG9saWN5U3RhdGVtZW50LCBSb2xlLCBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IExheWVyVmVyc2lvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTGFtYmRhSWFtVXRpbHMsIExhbWJkYU9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yLCBMb2dHcm91cERhdGFQcm90ZWN0aW9uUHJvcHMsIExvZ0dyb3VwRGF0YVByb3RlY3Rpb25VdGlscywgT2JzZXJ2YWJsZVByb3BzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IEJlZHJvY2tNb2RlbFByb3BzLCBCZWRyb2NrTW9kZWxVdGlscyB9IGZyb20gJy4uL2JlZHJvY2snO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uL2ZvdW5kYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb24ge1xuICByZWFkb25seSBidWNrZXROYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSBpc0ZpbGU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzWmlwQXJjaGl2ZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHRoYXQgaW5mbHVlbmNlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGFnZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnREZWZpbml0aW9uUHJvcHMge1xuICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQmVkcm9jayBNb2RlbCB0byBiZSB1c2VkXG4gICAgICovXG4gIHJlYWRvbmx5IGJlZHJvY2tNb2RlbDogQmVkcm9ja01vZGVsUHJvcHM7XG5cbiAgLyoqXG4gICAgICogVGhlIHN5c3RlbSBwcm9tcHQgb2YgdGhlIGFnZW50XG4gICAgICpcbiAgICAgKi9cbiAgcmVhZG9ubHkgc3lzdGVtUHJvbXB0OiBBc3NldDtcblxuICAvKipcbiAgICAgKiBMaXN0IG9mIHRvb2xzIGRlZmluZWQgaW4gcHl0aG9uIGZpbGVzLiBUaGlzIHRvb2xzIHdvdWxkIGF1dG9tYXRpY2FsbHlcbiAgICAgKiBiZSBsb2FkZWQgYnkgdGhlIGFnZW50LiBZb3UgY2FuIGFsc28gdXNlIHRoaXMgdG8gaW5jb3Jwb3JhdGUgb3RoZXIgc3BlY2lhbGl6ZWRcbiAgICAgKiBhZ2VudHMgYXMgdG9vbHMuXG4gICAgICovXG4gIHJlYWRvbmx5IHRvb2xzPzogQXNzZXRbXTtcblxuICAvKipcbiAgICAgKiBBbnkgZGVwZW5kZW5jaWVzIG5lZWRlZCBieSB0aGUgcHJvdmlkZWQgdG9vbHNcbiAgICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhTGF5ZXJzPzogTGF5ZXJWZXJzaW9uW107XG5cbiAgLyoqXG4gICAgICogSWYgdG9vbHMgbmVlZCBhZGRpdGlvbmFsIElBTSBwZXJtaXNzaW9ucywgdGhlc2Ugc3RhdGVtZW50c1xuICAgICAqIHdvdWxkIGJlIGF0dGFjaGVkIHRvIHRoZSBBZ2VudCdzIElBTSByb2xlXG4gICAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yVG9vbHM/OiBQb2xpY3lTdGF0ZW1lbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQWdlbnRQcm9wcyBleHRlbmRzIE9ic2VydmFibGVQcm9wcyB7XG5cbiAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgYWdlbnRcbiAgICAgKi9cbiAgcmVhZG9ubHkgYWdlbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAgICogQWdlbnQgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgICovXG4gIHJlYWRvbmx5IGFnZW50RGVmaW5pdGlvbjogQWdlbnREZWZpbml0aW9uUHJvcHM7XG5cbiAgLyoqXG4gICAgICogRW5hYmxlIG9ic2VydmFiaWxpdHlcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgICAqIElmIHRoZSBBZ2VudCB3b3VsZCBiZSBydW5uaW5nIGluc2lkZSBhIFZQQ1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgQWdlbnQgd291bGQgbm90IGJlIGluIGEgVlBDXG4gICAgICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrO1xuXG4gIC8qKlxuICAgICAqIEVuY3J5cHRpb24ga2V5IHRvIGVuY3J5cHQgYWdlbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBuZXcgS01TIEtleSB3b3VsZCBiZSBjcmVhdGVkXG4gICAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBLZXk7XG5cbiAgLyoqXG4gICAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIHJlc291cmNlcyBjcmVhdGVkIGJ5IHRoaXNcbiAgICAgKiBjb25zdHJ1Y3RcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VBZ2VudCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhZ2VudEZ1bmN0aW9uOiBQeXRob25GdW5jdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IGJlZHJvY2tNb2RlbD86IEJlZHJvY2tNb2RlbFByb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSb2xlOiBSb2xlO1xuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogS2V5O1xuICAvKiogbG9nIGdyb3VwIGRhdGEgcHJvdGVjdGlvbiBjb25maWd1cmF0aW9uICovXG4gIHByb3RlY3RlZCByZWFkb25seSBsb2dHcm91cERhdGFQcm90ZWN0aW9uOiBMb2dHcm91cERhdGFQcm90ZWN0aW9uUHJvcHM7XG4gIHByb3RlY3RlZCByZWFkb25seSBhZ2VudFRvb2xzTG9jYXRpb25EZWZpbml0aW9uczogQWdlbnRUb29sc0xvY2F0aW9uRGVmaW5pdGlvbltdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCYXNlQWdlbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5iZWRyb2NrTW9kZWwgPSBwcm9wcy5hZ2VudERlZmluaXRpb24uYmVkcm9ja01vZGVsO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IHByb3BzLmVuY3J5cHRpb25LZXkgfHwgbmV3IEtleSh0aGlzLCAnQWdlbnRFbmNyeXB0aW9uS2V5Jywge1xuICAgICAgZW5hYmxlS2V5Um90YXRpb246IHRydWUsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcblxuXG4gICAgY29uc3QgaW5saW5lUG9saWNpZXM6IFJlY29yZDxzdHJpbmcsIFBvbGljeURvY3VtZW50PiA9IHt9O1xuXG4gICAgaWYgKHByb3BzLmFnZW50RGVmaW5pdGlvbi5hZGRpdGlvbmFsUG9saWN5U3RhdGVtZW50c0ZvclRvb2xzICYmIHByb3BzLmFnZW50RGVmaW5pdGlvbi5hZGRpdGlvbmFsUG9saWN5U3RhdGVtZW50c0ZvclRvb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlubGluZVBvbGljaWVzLlRvb2xQZXJtaXNzaW9ucyA9IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgIHN0YXRlbWVudHM6IHByb3BzLmFnZW50RGVmaW5pdGlvbi5hZGRpdGlvbmFsUG9saWN5U3RhdGVtZW50c0ZvclRvb2xzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZ2VudFJvbGUgPSBuZXcgUm9sZSh0aGlzLCBgQWdlbnQtJHtwcm9wcy5hZ2VudE5hbWV9LVJvbGVgLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgaW5saW5lUG9saWNpZXMsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMubmV0d29yaykge1xuICAgICAgdGhpcy5hZ2VudFJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koTGFtYmRhSWFtVXRpbHMuZ2VuZXJhdGVMYW1iZGFWUENQZXJtaXNzaW9ucygpKTtcbiAgICB9XG5cbiAgICB0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zID0gW107XG5cbiAgICBpZiAocHJvcHMuYWdlbnREZWZpbml0aW9uLnRvb2xzKSB7XG4gICAgICBmb3IgKGNvbnN0IHRvb2wgb2YgcHJvcHMuYWdlbnREZWZpbml0aW9uLnRvb2xzKSB7XG4gICAgICAgIHRvb2wuZ3JhbnRSZWFkKHRoaXMuYWdlbnRSb2xlKTtcblxuICAgICAgICB0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zLnB1c2goe1xuICAgICAgICAgIGJ1Y2tldE5hbWU6IHRvb2wuczNCdWNrZXROYW1lLFxuICAgICAgICAgIGtleTogdG9vbC5zM09iamVjdEtleSxcbiAgICAgICAgICBpc0ZpbGU6IHRvb2wuaXNGaWxlLFxuICAgICAgICAgIGlzWmlwQXJjaGl2ZTogdG9vbC5pc1ppcEFyY2hpdmUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYWdlbnRSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KEJlZHJvY2tNb2RlbFV0aWxzLmdlbmVyYXRlTW9kZWxJQU1QZXJtaXNzaW9ucyh0aGlzLCB0aGlzLmJlZHJvY2tNb2RlbCkpO1xuICAgIHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiA9IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25VdGlscy5oYW5kbGVEZWZhdWx0KHRoaXMsIHByb3BzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24sIHByb3BzLnJlbW92YWxQb2xpY3kpO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHkpIHtcbiAgICAgIFByb3BlcnR5SW5qZWN0b3JzLm9mKHRoaXMpLmFkZChcbiAgICAgICAgbmV3IExhbWJkYU9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yKHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiksXG4gICAgICApO1xuICAgIH1cbiAgfVxufSJdfQ==
@@ -0,0 +1,11 @@
1
+ import { PythonFunction } from '@aws-cdk/aws-lambda-python-alpha';
2
+ import { Construct } from 'constructs';
3
+ import { BaseAgent, BaseAgentProps } from './base-agent';
4
+ export interface BatchAgentProps extends BaseAgentProps {
5
+ readonly prompt: string;
6
+ readonly expectJson?: boolean;
7
+ }
8
+ export declare class BatchAgent extends BaseAgent {
9
+ readonly agentFunction: PythonFunction;
10
+ constructor(scope: Construct, id: string, props: BatchAgentProps);
11
+ }
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BatchAgent = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
+ // SPDX-License-Identifier: Apache-2.0
8
+ const path = require("path");
9
+ const aws_lambda_python_alpha_1 = require("@aws-cdk/aws-lambda-python-alpha");
10
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
11
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
12
+ const base_agent_1 = require("./base-agent");
13
+ const utilities_1 = require("../../utilities");
14
+ const bedrock_1 = require("../bedrock");
15
+ const custom_resource_1 = require("../custom-resource");
16
+ const default_agent_config_1 = require("./default-agent-config");
17
+ class BatchAgent extends base_agent_1.BaseAgent {
18
+ constructor(scope, id, props) {
19
+ super(scope, id, props);
20
+ const modelId = bedrock_1.BedrockModelUtils.deriveActualModelId(this.bedrockModel);
21
+ const metricNamespace = props.metricNamespace || utilities_1.DefaultObservabilityConfig.DEFAULT_METRIC_NAMESPACE;
22
+ const metricServiceName = props.metricServiceName || default_agent_config_1.DefaultAgentConfig.DEFAULT_OBSERVABILITY_METRIC_SVC_NAME;
23
+ const env = {
24
+ SYSTEM_PROMPT_S3_BUCKET_NAME: props.agentDefinition.systemPrompt.s3BucketName,
25
+ SYSTEM_PROMPT_S3_KEY: props.agentDefinition.systemPrompt.s3ObjectKey,
26
+ TOOLS_CONFIG: JSON.stringify(this.agentToolsLocationDefinitions),
27
+ MODEL_ID: modelId,
28
+ INVOKE_TYPE: 'batch',
29
+ PROMPT: props.prompt,
30
+ EXPECT_JSON: props.expectJson ? 'True' : '',
31
+ ...utilities_1.PowertoolsConfig.generateDefaultLambdaConfig(props.enableObservability, metricNamespace, metricServiceName),
32
+ };
33
+ const { account, region } = aws_cdk_lib_1.Stack.of(this);
34
+ const agentLambdaLogPermissionsResult = utilities_1.LambdaIamUtils.createLogsPermissions({
35
+ account,
36
+ region,
37
+ scope: this,
38
+ functionName: props.agentName,
39
+ enableObservability: props.enableObservability,
40
+ });
41
+ this.agentFunction = new aws_lambda_python_alpha_1.PythonFunction(this, 'BatchAgentFunction', {
42
+ functionName: agentLambdaLogPermissionsResult.uniqueFunctionName,
43
+ architecture: aws_lambda_1.Architecture.X86_64,
44
+ entry: path.join(__dirname, 'resources/default-strands-agent'),
45
+ role: this.agentRole,
46
+ index: 'batch.py',
47
+ runtime: custom_resource_1.DefaultRuntimes.PYTHON,
48
+ layers: props.agentDefinition.lambdaLayers,
49
+ timeout: aws_cdk_lib_1.Duration.minutes(10),
50
+ memorySize: 1024,
51
+ environment: env,
52
+ environmentEncryption: this.encryptionKey,
53
+ vpc: props.network ? props.network.vpc : undefined,
54
+ vpcSubnets: props.network ? props.network.applicationSubnetSelection() : undefined,
55
+ });
56
+ for (const s of agentLambdaLogPermissionsResult.policyStatements) {
57
+ this.agentRole.addToPrincipalPolicy(s);
58
+ }
59
+ }
60
+ }
61
+ exports.BatchAgent = BatchAgent;
62
+ _a = JSII_RTTI_SYMBOL_1;
63
+ BatchAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BatchAgent", version: "1.4.0" };
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2gtYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9iYXRjaC1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7QUFFdEMsNkJBQTZCO0FBQzdCLDhFQUFrRTtBQUNsRSw2Q0FBOEM7QUFDOUMsdURBQXNEO0FBRXRELDZDQUF5RDtBQUN6RCwrQ0FBK0Y7QUFDL0Ysd0NBQStDO0FBQy9DLHdEQUFxRDtBQUNyRCxpRUFBNEQ7QUFPNUQsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFHdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FBRywyQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekUsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxzQ0FBMEIsQ0FBQyx3QkFBd0IsQ0FBQztRQUNyRyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSx5Q0FBa0IsQ0FBQyxxQ0FBcUMsQ0FBQztRQUU5RyxNQUFNLEdBQUcsR0FBMkI7WUFDbEMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsWUFBWTtZQUM3RSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxXQUFXO1lBQ3BFLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztZQUNoRSxRQUFRLEVBQUUsT0FBTztZQUNqQixXQUFXLEVBQUUsT0FBTztZQUNwQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMzQyxHQUFHLDRCQUFnQixDQUFDLDJCQUEyQixDQUM3QyxLQUFLLENBQUMsbUJBQW1CLEVBQ3pCLGVBQWUsRUFDZixpQkFBaUIsQ0FDbEI7U0FDRixDQUFDO1FBRUYsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxNQUFNLCtCQUErQixHQUFHLDBCQUFjLENBQUMscUJBQXFCLENBQUM7WUFDM0UsT0FBTztZQUNQLE1BQU07WUFDTixLQUFLLEVBQUUsSUFBSTtZQUNYLFlBQVksRUFBRSxLQUFLLENBQUMsU0FBUztZQUM3QixtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CO1NBQy9DLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSx3Q0FBYyxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUNsRSxZQUFZLEVBQUUsK0JBQStCLENBQUMsa0JBQWtCO1lBQ2hFLFlBQVksRUFBRSx5QkFBWSxDQUFDLE1BQU07WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGlDQUFpQyxDQUFDO1lBQzlELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUztZQUNwQixLQUFLLEVBQUUsVUFBVTtZQUNqQixPQUFPLEVBQUUsaUNBQWUsQ0FBQyxNQUFNO1lBQy9CLE1BQU0sRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLFlBQVk7WUFDMUMsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsR0FBRztZQUNoQixxQkFBcUIsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUN6QyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbEQsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNuRixDQUFDLENBQUM7UUFFSCxLQUFLLE1BQU0sQ0FBQyxJQUFJLCtCQUErQixDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzs7QUFwREgsZ0NBcURDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgUHl0aG9uRnVuY3Rpb24gfSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBcmNoaXRlY3R1cmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQmFzZUFnZW50LCBCYXNlQWdlbnRQcm9wcyB9IGZyb20gJy4vYmFzZS1hZ2VudCc7XG5pbXBvcnQgeyBEZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZywgTGFtYmRhSWFtVXRpbHMsIFBvd2VydG9vbHNDb25maWcgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgQmVkcm9ja01vZGVsVXRpbHMgfSBmcm9tICcuLi9iZWRyb2NrJztcbmltcG9ydCB7IERlZmF1bHRSdW50aW1lcyB9IGZyb20gJy4uL2N1c3RvbS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBEZWZhdWx0QWdlbnRDb25maWcgfSBmcm9tICcuL2RlZmF1bHQtYWdlbnQtY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXRjaEFnZW50UHJvcHMgZXh0ZW5kcyBCYXNlQWdlbnRQcm9wcyB7XG4gIHJlYWRvbmx5IHByb21wdDogc3RyaW5nO1xuICByZWFkb25seSBleHBlY3RKc29uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEJhdGNoQWdlbnQgZXh0ZW5kcyBCYXNlQWdlbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRGdW5jdGlvbjogUHl0aG9uRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhdGNoQWdlbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGNvbnN0IG1vZGVsSWQgPSBCZWRyb2NrTW9kZWxVdGlscy5kZXJpdmVBY3R1YWxNb2RlbElkKHRoaXMuYmVkcm9ja01vZGVsKTtcbiAgICBjb25zdCBtZXRyaWNOYW1lc3BhY2UgPSBwcm9wcy5tZXRyaWNOYW1lc3BhY2UgfHwgRGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcuREVGQVVMVF9NRVRSSUNfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG1ldHJpY1NlcnZpY2VOYW1lID0gcHJvcHMubWV0cmljU2VydmljZU5hbWUgfHwgRGVmYXVsdEFnZW50Q29uZmlnLkRFRkFVTFRfT0JTRVJWQUJJTElUWV9NRVRSSUNfU1ZDX05BTUU7XG5cbiAgICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBTWVNURU1fUFJPTVBUX1MzX0JVQ0tFVF9OQU1FOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzQnVja2V0TmFtZSxcbiAgICAgIFNZU1RFTV9QUk9NUFRfUzNfS0VZOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzT2JqZWN0S2V5LFxuICAgICAgVE9PTFNfQ09ORklHOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zKSxcbiAgICAgIE1PREVMX0lEOiBtb2RlbElkLFxuICAgICAgSU5WT0tFX1RZUEU6ICdiYXRjaCcsXG4gICAgICBQUk9NUFQ6IHByb3BzLnByb21wdCxcbiAgICAgIEVYUEVDVF9KU09OOiBwcm9wcy5leHBlY3RKc29uID8gJ1RydWUnIDogJycsXG4gICAgICAuLi5Qb3dlcnRvb2xzQ29uZmlnLmdlbmVyYXRlRGVmYXVsdExhbWJkYUNvbmZpZyhcbiAgICAgICAgcHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICAgICAgbWV0cmljTmFtZXNwYWNlLFxuICAgICAgICBtZXRyaWNTZXJ2aWNlTmFtZSxcbiAgICAgICksXG4gICAgfTtcblxuICAgIGNvbnN0IHsgYWNjb3VudCwgcmVnaW9uIH0gPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBhZ2VudExhbWJkYUxvZ1Blcm1pc3Npb25zUmVzdWx0ID0gTGFtYmRhSWFtVXRpbHMuY3JlYXRlTG9nc1Blcm1pc3Npb25zKHtcbiAgICAgIGFjY291bnQsXG4gICAgICByZWdpb24sXG4gICAgICBzY29wZTogdGhpcyxcbiAgICAgIGZ1bmN0aW9uTmFtZTogcHJvcHMuYWdlbnROYW1lLFxuICAgICAgZW5hYmxlT2JzZXJ2YWJpbGl0eTogcHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWdlbnRGdW5jdGlvbiA9IG5ldyBQeXRob25GdW5jdGlvbih0aGlzLCAnQmF0Y2hBZ2VudEZ1bmN0aW9uJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBhZ2VudExhbWJkYUxvZ1Blcm1pc3Npb25zUmVzdWx0LnVuaXF1ZUZ1bmN0aW9uTmFtZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLlg4Nl82NCxcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAncmVzb3VyY2VzL2RlZmF1bHQtc3RyYW5kcy1hZ2VudCcpLFxuICAgICAgcm9sZTogdGhpcy5hZ2VudFJvbGUsXG4gICAgICBpbmRleDogJ2JhdGNoLnB5JyxcbiAgICAgIHJ1bnRpbWU6IERlZmF1bHRSdW50aW1lcy5QWVRIT04sXG4gICAgICBsYXllcnM6IHByb3BzLmFnZW50RGVmaW5pdGlvbi5sYW1iZGFMYXllcnMsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEwKSxcbiAgICAgIG1lbW9yeVNpemU6IDEwMjQsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZW52aXJvbm1lbnRFbmNyeXB0aW9uOiB0aGlzLmVuY3J5cHRpb25LZXksXG4gICAgICB2cGM6IHByb3BzLm5ldHdvcmsgPyBwcm9wcy5uZXR3b3JrLnZwYyA6IHVuZGVmaW5lZCxcbiAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLm5ldHdvcmsgPyBwcm9wcy5uZXR3b3JrLmFwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uKCkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHMgb2YgYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdC5wb2xpY3lTdGF0ZW1lbnRzKSB7XG4gICAgICB0aGlzLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzKTtcbiAgICB9XG4gIH1cbn0iXX0=
@@ -0,0 +1,3 @@
1
+ export declare class DefaultAgentConfig {
2
+ static readonly DEFAULT_OBSERVABILITY_METRIC_SVC_NAME = "agent";
3
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DefaultAgentConfig = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ class DefaultAgentConfig {
7
+ }
8
+ exports.DefaultAgentConfig = DefaultAgentConfig;
9
+ _a = JSII_RTTI_SYMBOL_1;
10
+ DefaultAgentConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultAgentConfig", version: "1.4.0" };
11
+ DefaultAgentConfig.DEFAULT_OBSERVABILITY_METRIC_SVC_NAME = 'agent';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1hZ2VudC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9kZWZhdWx0LWFnZW50LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE1BQWEsa0JBQWtCOztBQUEvQixnREFFQzs7O0FBRHdCLHdEQUFxQyxHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBEZWZhdWx0QWdlbnRDb25maWcge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfT0JTRVJWQUJJTElUWV9NRVRSSUNfU1ZDX05BTUUgPSAnYWdlbnQnO1xufSJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './base-agent';
2
+ export * from './batch-agent';
3
+ export * from './default-agent-config';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./base-agent"), exports);
18
+ __exportStar(require("./batch-agent"), exports);
19
+ __exportStar(require("./default-agent-config"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQTZCO0FBQzdCLGdEQUE4QjtBQUM5Qix5REFBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Jhc2UtYWdlbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXRjaC1hZ2VudCc7XG5leHBvcnQgKiBmcm9tICcuL2RlZmF1bHQtYWdlbnQtY29uZmlnJzsiXX0=