@cdklabs/cdk-appmod-catalog-blueprints 1.3.0 → 1.4.1
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 +4 -4
- package/README.md +76 -98
- package/lib/document-processing/adapter/queued-s3-adapter.js +1 -1
- package/lib/document-processing/agentic-document-processing.js +1 -1
- package/lib/document-processing/base-document-processing.js +1 -1
- package/lib/document-processing/bedrock-document-processing.js +1 -1
- package/lib/document-processing/default-document-processing-config.js +1 -1
- package/lib/document-processing/tests/agentic-document-processing.test.js +104 -60
- package/lib/document-processing/tests/base-document-processing-nag.test.d.ts +1 -0
- package/lib/document-processing/tests/base-document-processing-nag.test.js +161 -0
- package/lib/document-processing/tests/base-document-processing.test.d.ts +1 -0
- package/lib/document-processing/tests/base-document-processing.test.js +499 -0
- package/lib/document-processing/tests/bedrock-document-processing.test.js +212 -36
- package/lib/document-processing/tests/queued-s3-adapter-nag.test.d.ts +1 -0
- package/lib/document-processing/tests/queued-s3-adapter-nag.test.js +122 -0
- package/lib/document-processing/tests/queued-s3-adapter.test.d.ts +1 -0
- package/lib/document-processing/tests/queued-s3-adapter.test.js +276 -0
- package/lib/framework/agents/base-agent.js +1 -1
- package/lib/framework/agents/batch-agent.js +1 -1
- package/lib/framework/agents/default-agent-config.js +1 -1
- package/lib/framework/bedrock/bedrock.js +1 -1
- package/lib/framework/custom-resource/default-runtimes.js +1 -1
- package/lib/framework/foundation/access-log.js +1 -1
- package/lib/framework/foundation/eventbridge-broker.js +1 -1
- package/lib/framework/foundation/network.js +1 -1
- package/lib/framework/tests/access-log.test.d.ts +1 -0
- package/lib/framework/tests/access-log.test.js +146 -0
- package/lib/framework/tests/batch-agent.test.d.ts +1 -0
- package/lib/framework/tests/batch-agent.test.js +164 -0
- package/lib/framework/tests/bedrock.test.d.ts +1 -0
- package/lib/framework/tests/bedrock.test.js +68 -0
- package/lib/framework/tests/eventbridge-broker.test.d.ts +1 -0
- package/lib/framework/tests/eventbridge-broker.test.js +73 -0
- package/lib/framework/tests/framework-nag.test.d.ts +1 -0
- package/lib/framework/tests/framework-nag.test.js +155 -0
- package/lib/framework/tests/network.test.d.ts +1 -0
- package/lib/framework/tests/network.test.js +120 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utilities/data-loader.js +1 -1
- package/lib/utilities/lambda-iam-utils.js +1 -1
- package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
- package/lib/utilities/observability/default-observability-config.js +1 -1
- package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
- package/lib/utilities/observability/log-group-data-protection-utils.js +1 -1
- package/lib/utilities/observability/powertools-config.js +1 -1
- package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
- package/lib/webapp/frontend-construct.js +1 -1
- package/package.json +8 -8
package/.jsii
CHANGED
|
@@ -4114,7 +4114,7 @@
|
|
|
4114
4114
|
"stability": "experimental"
|
|
4115
4115
|
},
|
|
4116
4116
|
"homepage": "https://github.com/cdklabs/cdk-appmod-catalog-blueprints.git",
|
|
4117
|
-
"jsiiVersion": "5.9.
|
|
4117
|
+
"jsiiVersion": "5.9.14 (build 9fc28bd)",
|
|
4118
4118
|
"keywords": [
|
|
4119
4119
|
"cdk"
|
|
4120
4120
|
],
|
|
@@ -4129,7 +4129,7 @@
|
|
|
4129
4129
|
},
|
|
4130
4130
|
"name": "@cdklabs/cdk-appmod-catalog-blueprints",
|
|
4131
4131
|
"readme": {
|
|
4132
|
-
"markdown": "
|
|
4132
|
+
"markdown": "# AppMod Catalog Blueprints\n\n[](https://github.com/cdklabs/cdk-appmod-catalog-blueprints)\n[](https://cdklabs.github.io/cdk-appmod-catalog-blueprints/)\n[](https://constructs.dev/packages/@cdklabs/cdk-appmod-catalog-blueprints/)\n\nApplication Modernization (AppMod) Catalog Blueprints is a comprehensive library of use case-driven infrastructure solution blueprints built using AWS well-architected best practices. Designed as composable multi-layered building blocks using [AWS Cloud Development Kit](https://aws.amazon.com/cdk/) (CDK) [L3 constructs](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html), these blueprints offer use case-driven solutions with multiple implementation pathways and industry-specific implementations to accelerate serverless development and modernization on AWS.\n\n**Key Benefits:**\n- **Use case-driven solutions**: Purpose-built blueprints for common business scenarios like document processing, web applications, and AI workflows, with industry-specific implementations like insurance claims processing\n- **Multi-layered approach**: Infrastructure Foundation → General Use Cases → Industry Examples, allowing you to start with proven patterns and customize as needed.\n- **Composable architecture**: Mix and match independent components with standardized interfaces\n- **Enterprise-ready**: Built-in security, compliance, and AWS Well-Architected best practices\n- **Multi-language support**: Available in TypeScript, Python, Java, and .NET via [JSII](https://aws.github.io/jsii/)\n\n## How to Use This Library\n\nGet started by exploring the [use case constructs](use-cases) and deployable [examples](examples). Learn more from [documentation](https://cdklabs.github.io/cdk-appmod-catalog-blueprints/) and [Construct Hub](https://constructs.dev/packages/@cdklabs/cdk-appmod-catalog-blueprints).\n\n| Approach | Best For | Get Started |\n|----------|----------|-------------|\n| **🚀 Rapid Deployment** | Quick evaluation, immediate solutions, proof-of-concepts | Use [examples](./examples/) - deploy complete solutions in minutes with sensible defaults and AWS Well-Architected best practices |\n| **🔧 Custom Development** | Specific requirements, enterprise integration, tailored solutions | Use [individual constructs](./use-cases/) - override defaults, inject custom logic, configure for your environment |\n\n## Use Case Building Blocks\n\n### Core Use Cases\n\n| Use Case | Description | Quick Deploy Examples |\n|----------|-------------|----------------------|\n| **[Document Processing](./use-cases/document-processing/)** | Intelligent document processing workflows with classification, extraction, and agentic capabilities | • [Bedrock Document Processing](./examples/document-processing/bedrock-document-processing/)<br/>• [Agentic Document Processing](./examples/document-processing/agentic-document-processing/)<br/>• [Full-Stack Insurance Claims Processing Web Application](./examples/document-processing/doc-processing-fullstack-webapp/) |\n| **[Web Application](./use-cases/webapp/)** | Static web application hosting with global CDN, security headers, and SPA support | • [Full-Stack Insurance Claims Processing Web Application](./examples/document-processing/doc-processing-fullstack-webapp/) |\n\n### Foundation and Utilities\n\n| Component | Description |\n|-----------|-------------|\n| **[Agentic AI Framework](./use-cases/framework/agents/)** | Composable enterprise framework for building intelligent AI agents that can be mixed and matched across diverse use cases - from document processing to conversational AI |\n| **[Infrastructure Foundation](./use-cases/framework/foundation/)** | Core infrastructure components including VPC networking, access logging, and EventBridge integration |\n| **[Observability & Monitoring](./use-cases/utilities/#observability)** | Comprehensive monitoring, logging, and alerting with automatic property injection and Lambda Powertools integration |\n| **[Data Masking](./use-cases/utilities/#data-masking)** | Lambda layer for data masking and PII protection in serverless applications |\n\n## Getting Started\n\n### Environment Setup\n```bash\n# Configure AWS credentials and region\naws configure\n# OR set AWS profile: export AWS_PROFILE=your-profile-name\n\n# Bootstrap your AWS environment (one-time setup)\nnpx cdk bootstrap\n```\n\n### Quick Deploy (Complete Solutions)\nDeploy working examples in minutes for immediate value:\n\n```bash\n# Clone the repository\ngit clone https://github.com/cdklabs/cdk-appmod-catalog-blueprints.git\n\n# Deploy complete insurance claims processing solution\ncd examples/document-processing/doc-processing-fullstack-webapp\nnpm install && npm run deploy\n# Full AI-powered solution with web interface deployed\n\n# Or deploy basic document processing\ncd examples/document-processing/bedrock-document-processing\nnpm install && npm run deploy\n```\n\n### Using Individual Constructs\nAdd to your existing CDK projects for custom solutions:\n\n```bash\n# Install the library\nnpm install @cdklabs/appmod-catalog-blueprints\n\n# Use in your CDK code\nimport { AgenticDocumentProcessing, WebApp } from '@cdklabs/appmod-catalog-blueprints';\n\nconst docProcessor = new AgenticDocumentProcessing(this, 'Processor', {\n agentDefinition: {\n bedrockModel: { useCrossRegionInference: true },\n systemPrompt: myPrompt,\n tools: [myTools]\n }\n});\n```\n\n## Key Design Principles\n\nAppMod Catalog Blueprints is built on Object-Oriented Programming (OOP) principles, providing a structured approach to infrastructure development through core design concepts:\n\n### Composable Architecture\n\nBuild complex enterprise systems by combining independent, reusable components with standardized interfaces.\n\n- **Independent components** with clear interfaces and loose coupling for maximum flexibility\n- **Mix and match building blocks** to create custom solutions across different contexts and use cases\n- **Scalable composition** that maintains consistency while enabling incremental adoption and gradual modernization\n\n### Multi-Layered Building Blocks Architecture\n\nOur blueprints use a multi-layered architecture that bridges the gap between business requirements and technical implementation:\n\n| Layer | Implementation Type | Purpose | Key Features |\n|-------|-------------------|---------|--------------|\n| **Infrastructure Foundation** | Abstract base classes | Shared infrastructure components and common services | • Standardized interfaces and contracts<br/>• Extensible foundation for custom implementations |\n| **General Use Case Implementation** | Concrete implementation classes | Implementations for common patterns across industries | • Configurable parameters for different environments<br/>• Abstract method implementations with general-purpose solutions |\n| **Industry-Aligned Implementation** | Configured implementation examples | Pre-configured solutions for specific business domains | • Industry-specific validation rules and workflows<br/>• Built-in compliance requirements and domain expertise |\n\n### Security & Compliance\n\nAll components include enterprise-grade security by default:\n- **CDK Nag Integration**: Automated security compliance checking\n- **AWS Well-Architected**: Security, reliability, and performance best practices\n- **Encryption & IAM**: At-rest/in-transit encryption with least-privilege access\n- **Compliance Reports**: Generate reports with `npm test -- --testPathPattern=\"nag.test.ts\"`\n\n## Contributing\n\nSee [CONTRIBUTING.md](https://github.com/cdklabs/cdk-appmod-catalog-blueprints/blob/main/CONTRIBUTING.md) for detailed guidelines on how to contribute to this project.\n\n## Disclaimer\nThese application solutions are not supported products in their own right, but examples to help our customers use our products from their applications. As our customer, any applications you integrate these examples in should be thoroughly tested, secured, and optimized according to your business's security standards before deploying to production or handling production workloads.\n\n## License\n\nApache License 2.0 - see [LICENSE](https://github.com/cdklabs/cdk-appmod-catalog-blueprints/blob/main/LICENSE) file for details.\n"
|
|
4133
4133
|
},
|
|
4134
4134
|
"repository": {
|
|
4135
4135
|
"type": "git",
|
|
@@ -9843,6 +9843,6 @@
|
|
|
9843
9843
|
"symbolId": "use-cases/utilities/observability/state-machine-observability-property-injector:StateMachineObservabilityPropertyInjector"
|
|
9844
9844
|
}
|
|
9845
9845
|
},
|
|
9846
|
-
"version": "1.
|
|
9847
|
-
"fingerprint": "
|
|
9846
|
+
"version": "1.4.1",
|
|
9847
|
+
"fingerprint": "YMoqjoSyxLeE4i0O8hTfbgkjfz/S2fY22EWcDdG21Cw="
|
|
9848
9848
|
}
|
package/README.md
CHANGED
|
@@ -1,29 +1,92 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Introduction
|
|
3
|
-
---
|
|
4
|
-
|
|
5
1
|
# AppMod Catalog Blueprints
|
|
6
2
|
|
|
7
|
-
|
|
3
|
+
[](https://github.com/cdklabs/cdk-appmod-catalog-blueprints)
|
|
4
|
+
[](https://cdklabs.github.io/cdk-appmod-catalog-blueprints/)
|
|
5
|
+
[](https://constructs.dev/packages/@cdklabs/cdk-appmod-catalog-blueprints/)
|
|
6
|
+
|
|
7
|
+
Application Modernization (AppMod) Catalog Blueprints is a comprehensive library of use case-driven infrastructure solution blueprints built using AWS well-architected best practices. Designed as composable multi-layered building blocks using [AWS Cloud Development Kit](https://aws.amazon.com/cdk/) (CDK) [L3 constructs](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html), these blueprints offer use case-driven solutions with multiple implementation pathways and industry-specific implementations to accelerate serverless development and modernization on AWS.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
**Key Benefits:**
|
|
10
|
+
- **Use case-driven solutions**: Purpose-built blueprints for common business scenarios like document processing, web applications, and AI workflows, with industry-specific implementations like insurance claims processing
|
|
11
|
+
- **Multi-layered approach**: Infrastructure Foundation → General Use Cases → Industry Examples, allowing you to start with proven patterns and customize as needed.
|
|
12
|
+
- **Composable architecture**: Mix and match independent components with standardized interfaces
|
|
13
|
+
- **Enterprise-ready**: Built-in security, compliance, and AWS Well-Architected best practices
|
|
14
|
+
- **Multi-language support**: Available in TypeScript, Python, Java, and .NET via [JSII](https://aws.github.io/jsii/)
|
|
15
|
+
|
|
16
|
+
## How to Use This Library
|
|
10
17
|
|
|
11
18
|
Get started by exploring the [use case constructs](use-cases) and deployable [examples](examples). Learn more from [documentation](https://cdklabs.github.io/cdk-appmod-catalog-blueprints/) and [Construct Hub](https://constructs.dev/packages/@cdklabs/cdk-appmod-catalog-blueprints).
|
|
12
19
|
|
|
13
|
-
|
|
20
|
+
| Approach | Best For | Get Started |
|
|
21
|
+
|----------|----------|-------------|
|
|
22
|
+
| **🚀 Rapid Deployment** | Quick evaluation, immediate solutions, proof-of-concepts | Use [examples](./examples/) - deploy complete solutions in minutes with sensible defaults and AWS Well-Architected best practices |
|
|
23
|
+
| **🔧 Custom Development** | Specific requirements, enterprise integration, tailored solutions | Use [individual constructs](./use-cases/) - override defaults, inject custom logic, configure for your environment |
|
|
24
|
+
|
|
25
|
+
## Use Case Building Blocks
|
|
26
|
+
|
|
27
|
+
### Core Use Cases
|
|
14
28
|
|
|
15
29
|
| Use Case | Description | Quick Deploy Examples |
|
|
16
30
|
|----------|-------------|----------------------|
|
|
17
|
-
| **[Document Processing](./use-cases/document-processing/)** |
|
|
31
|
+
| **[Document Processing](./use-cases/document-processing/)** | Intelligent document processing workflows with classification, extraction, and agentic capabilities | • [Bedrock Document Processing](./examples/document-processing/bedrock-document-processing/)<br/>• [Agentic Document Processing](./examples/document-processing/agentic-document-processing/)<br/>• [Full-Stack Insurance Claims Processing Web Application](./examples/document-processing/doc-processing-fullstack-webapp/) |
|
|
18
32
|
| **[Web Application](./use-cases/webapp/)** | Static web application hosting with global CDN, security headers, and SPA support | • [Full-Stack Insurance Claims Processing Web Application](./examples/document-processing/doc-processing-fullstack-webapp/) |
|
|
19
33
|
|
|
20
|
-
|
|
34
|
+
### Foundation and Utilities
|
|
21
35
|
|
|
22
36
|
| Component | Description |
|
|
23
37
|
|-----------|-------------|
|
|
24
|
-
| **[
|
|
25
|
-
| **[
|
|
26
|
-
| **[
|
|
38
|
+
| **[Agentic AI Framework](./use-cases/framework/agents/)** | Composable enterprise framework for building intelligent AI agents that can be mixed and matched across diverse use cases - from document processing to conversational AI |
|
|
39
|
+
| **[Infrastructure Foundation](./use-cases/framework/foundation/)** | Core infrastructure components including VPC networking, access logging, and EventBridge integration |
|
|
40
|
+
| **[Observability & Monitoring](./use-cases/utilities/#observability)** | Comprehensive monitoring, logging, and alerting with automatic property injection and Lambda Powertools integration |
|
|
41
|
+
| **[Data Masking](./use-cases/utilities/#data-masking)** | Lambda layer for data masking and PII protection in serverless applications |
|
|
42
|
+
|
|
43
|
+
## Getting Started
|
|
44
|
+
|
|
45
|
+
### Environment Setup
|
|
46
|
+
```bash
|
|
47
|
+
# Configure AWS credentials and region
|
|
48
|
+
aws configure
|
|
49
|
+
# OR set AWS profile: export AWS_PROFILE=your-profile-name
|
|
50
|
+
|
|
51
|
+
# Bootstrap your AWS environment (one-time setup)
|
|
52
|
+
npx cdk bootstrap
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Quick Deploy (Complete Solutions)
|
|
56
|
+
Deploy working examples in minutes for immediate value:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Clone the repository
|
|
60
|
+
git clone https://github.com/cdklabs/cdk-appmod-catalog-blueprints.git
|
|
61
|
+
|
|
62
|
+
# Deploy complete insurance claims processing solution
|
|
63
|
+
cd examples/document-processing/doc-processing-fullstack-webapp
|
|
64
|
+
npm install && npm run deploy
|
|
65
|
+
# Full AI-powered solution with web interface deployed
|
|
66
|
+
|
|
67
|
+
# Or deploy basic document processing
|
|
68
|
+
cd examples/document-processing/bedrock-document-processing
|
|
69
|
+
npm install && npm run deploy
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Using Individual Constructs
|
|
73
|
+
Add to your existing CDK projects for custom solutions:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Install the library
|
|
77
|
+
npm install @cdklabs/appmod-catalog-blueprints
|
|
78
|
+
|
|
79
|
+
# Use in your CDK code
|
|
80
|
+
import { AgenticDocumentProcessing, WebApp } from '@cdklabs/appmod-catalog-blueprints';
|
|
81
|
+
|
|
82
|
+
const docProcessor = new AgenticDocumentProcessing(this, 'Processor', {
|
|
83
|
+
agentDefinition: {
|
|
84
|
+
bedrockModel: { useCrossRegionInference: true },
|
|
85
|
+
systemPrompt: myPrompt,
|
|
86
|
+
tools: [myTools]
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
```
|
|
27
90
|
|
|
28
91
|
## Key Design Principles
|
|
29
92
|
|
|
@@ -44,18 +107,9 @@ Our blueprints use a multi-layered architecture that bridges the gap between bus
|
|
|
44
107
|
| Layer | Implementation Type | Purpose | Key Features |
|
|
45
108
|
|-------|-------------------|---------|--------------|
|
|
46
109
|
| **Infrastructure Foundation** | Abstract base classes | Shared infrastructure components and common services | • Standardized interfaces and contracts<br/>• Extensible foundation for custom implementations |
|
|
47
|
-
| **General Use Case Implementation** | Concrete implementation classes |
|
|
110
|
+
| **General Use Case Implementation** | Concrete implementation classes | Implementations for common patterns across industries | • Configurable parameters for different environments<br/>• Abstract method implementations with general-purpose solutions |
|
|
48
111
|
| **Industry-Aligned Implementation** | Configured implementation examples | Pre-configured solutions for specific business domains | • Industry-specific validation rules and workflows<br/>• Built-in compliance requirements and domain expertise |
|
|
49
112
|
|
|
50
|
-
### Production-Ready with Smart Defaults
|
|
51
|
-
|
|
52
|
-
AppMod Catalog Blueprints serves both **rapid deployment** needs (for teams wanting immediate solutions) and **custom development** requirements (for teams needing tailored implementations), providing flexibility without compromising on production readiness.
|
|
53
|
-
|
|
54
|
-
| Approach | Best For | Capabilities |
|
|
55
|
-
|----------|----------|--------------|
|
|
56
|
-
| **Out-of-the-Box Deployment** | Rapid deployment and evaluation | • Deploy complete solutions in minutes using examples for immediate value<br/>• Pre-configured security, monitoring, and best practices for production readiness<br/>• Sensible defaults with production-ready configurations that work immediately<br/>• No infrastructure boilerplate required with minimal learning curve |
|
|
57
|
-
| **Intelligent Customization** | Custom development and integration | • Override defaults to modify behavior without changing core implementation<br/>• Enable/disable optional features to meet specific requirements<br/>• Inject custom logic at predefined extension points while maintaining production readiness<br/>• Configure parameters for different environments and use cases |
|
|
58
|
-
|
|
59
113
|
### Security & Compliance
|
|
60
114
|
|
|
61
115
|
All components include enterprise-grade security by default:
|
|
@@ -64,82 +118,6 @@ All components include enterprise-grade security by default:
|
|
|
64
118
|
- **Encryption & IAM**: At-rest/in-transit encryption with least-privilege access
|
|
65
119
|
- **Compliance Reports**: Generate reports with `npm test -- --testPathPattern="nag.test.ts"`
|
|
66
120
|
|
|
67
|
-
## Essential Commands
|
|
68
|
-
|
|
69
|
-
### Environment Setup
|
|
70
|
-
```bash
|
|
71
|
-
# Clone the repository
|
|
72
|
-
git clone https://github.com/cdklabs/cdk-appmod-catalog-blueprints.git
|
|
73
|
-
|
|
74
|
-
# Configure AWS credentials and region
|
|
75
|
-
aws configure
|
|
76
|
-
# OR set AWS profile: export AWS_PROFILE=your-profile-name
|
|
77
|
-
|
|
78
|
-
# Bootstrap your AWS environment (one-time setup)
|
|
79
|
-
npx cdk bootstrap
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Quick Start
|
|
83
|
-
|
|
84
|
-
Deploy a working example in **5 minutes**:
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
# Navigate to any example and deploy
|
|
88
|
-
cd examples/document-processing/agentic-document-processing
|
|
89
|
-
npm install
|
|
90
|
-
npm run deploy
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### Build & Deploy Project
|
|
94
|
-
```bash
|
|
95
|
-
# Build entire project
|
|
96
|
-
npx projen build
|
|
97
|
-
|
|
98
|
-
# Deploy with specific profile/region
|
|
99
|
-
npx cdk deploy --require-approval never
|
|
100
|
-
|
|
101
|
-
# Update CDK CLI if needed
|
|
102
|
-
npm install aws-cdk@latest
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### Development
|
|
106
|
-
```bash
|
|
107
|
-
# Run all tests
|
|
108
|
-
npm test
|
|
109
|
-
|
|
110
|
-
# Run specific test pattern
|
|
111
|
-
npm test -- --testPathPattern="document-processing"
|
|
112
|
-
|
|
113
|
-
# Generate CDK Nag compliance reports
|
|
114
|
-
npm test -- --testPathPattern="nag.test.ts"
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
## How to Use This Library
|
|
118
|
-
|
|
119
|
-
### Quick Start (Deploy Examples)
|
|
120
|
-
1. **Browse Examples**: Start with the [examples](./examples/) folder to see working implementations
|
|
121
|
-
2. **Deploy & Test**: Use `npm run deploy` in any example to get a working system in minutes
|
|
122
|
-
3. **Customize**: Modify example parameters to fit your specific requirements
|
|
123
|
-
|
|
124
|
-
### Using Individual Constructs
|
|
125
|
-
1. **Import Constructs**: Add `@cdklabs/appmod-catalog-blueprints` to your CDK project
|
|
126
|
-
2. **Choose Your Layer**: Pick the right abstraction level for your needs
|
|
127
|
-
3. **Configure**: Use the configuration options documented in each construct
|
|
128
|
-
|
|
129
|
-
### Understanding the Layers
|
|
130
|
-
|
|
131
|
-
**Foundation Layer** (`use-cases/framework/`, `use-cases/utilities/`)
|
|
132
|
-
- **When to use**: Building custom solutions or need specific infrastructure components
|
|
133
|
-
- **Components**: VPC networking, observability utilities, data management tools, etc.
|
|
134
|
-
|
|
135
|
-
**Use Case Layer** (`use-cases/document-processing/`, `use-cases/webapp/`)
|
|
136
|
-
- **When to use**: Need proven patterns for common business problems
|
|
137
|
-
- **Components**: Document processing workflows, web application hosting, data transformation patterns, etc.
|
|
138
|
-
|
|
139
|
-
**Example Layer** (`examples/`)
|
|
140
|
-
- **When to use**: Want complete, deployable solutions
|
|
141
|
-
- **Components**: Industry-specific configurations, end-to-end applications, reference implementations, etc.
|
|
142
|
-
|
|
143
121
|
## Contributing
|
|
144
122
|
|
|
145
123
|
See [CONTRIBUTING.md](https://github.com/cdklabs/cdk-appmod-catalog-blueprints/blob/main/CONTRIBUTING.md) for detailed guidelines on how to contribute to this project.
|
|
@@ -226,5 +226,5 @@ class QueuedS3Adapter {
|
|
|
226
226
|
}
|
|
227
227
|
exports.QueuedS3Adapter = QueuedS3Adapter;
|
|
228
228
|
_a = JSII_RTTI_SYMBOL_1;
|
|
229
|
-
QueuedS3Adapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.QueuedS3Adapter", version: "1.
|
|
229
|
+
QueuedS3Adapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.QueuedS3Adapter", version: "1.4.1" };
|
|
230
230
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVkLXMzLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZG9jdW1lbnQtcHJvY2Vzc2luZy9hZGFwdGVyL3F1ZXVlZC1zMy1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0QyxrQ0FBa0M7QUFDbEMsOEVBQWtFO0FBQ2xFLDZDQUFzRDtBQUN0RCxpREFBcUU7QUFDckUsaURBQXNHO0FBQ3RHLGlEQUEwQztBQUUxQyxtRkFBc0U7QUFDdEUsK0NBQXlFO0FBQ3pFLDJFQUFrRTtBQUNsRSxpREFBNkQ7QUFDN0QscUVBQThFO0FBQzlFLGlGQUFxRTtBQUlyRSwrQ0FBa0Q7QUFDbEQsK0NBQStGO0FBQy9GLDhGQUF3RjtBQTREeEY7OztHQUdHO0FBQ0gsTUFBYSxlQUFlO0lBSzFCLFlBQVksZUFBcUMsRUFBRTtRQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxJQUFJLE1BQU07WUFDMUMsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxJQUFJLFlBQVk7WUFDNUQsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxJQUFJLFNBQVM7U0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUMsS0FBZ0IsRUFBRSxLQUFrQztRQUN2RCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSx3Q0FBOEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRixLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFB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QUM3QixDQUFDLENBQUMsSUFBSSxDQUNMLElBQUksd0NBQWMsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7WUFDaEQsT0FBTyxFQUFFLElBQUk7WUFDYixNQUFNLEVBQUUsY0FBYztZQUN0QixVQUFVLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLDRCQUFRLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO2dCQUM3QyxHQUFHLEVBQUUsNEJBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO2FBQ3hDO1lBQ0QsWUFBWSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUM7WUFDdkMsVUFBVSxFQUFFLDRCQUFRLENBQUMsT0FBTztTQUM3QixDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7QUFsUEgsMENBbVBDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBQeXRob25GdW5jdGlvbiB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhJztcbmltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeURvY3VtZW50LCBQb2xpY3lTdGF0ZW1lbnQsIFJvbGUsIFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEtleSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFNxc0V2ZW50U291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzJztcbmltcG9ydCB7IEJ1Y2tldCwgQnVja2V0RW5jcnlwdGlvbiwgRXZlbnRUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IFNxc0Rlc3RpbmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLW5vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IHsgUXVldWUsIFF1ZXVlRW5jcnlwdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zcXMnO1xuaW1wb3J0IHsgQ2hhaW4sIEpzb25QYXRoLCBTdGF0ZU1hY2hpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBDYWxsQXdzU2VydmljZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIH0gZnJvbSAnLi4vYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nJztcbmltcG9ydCB7IElBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVyJztcbmltcG9ydCB7IERlZmF1bHRSdW50aW1lcyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yayc7XG5pbXBvcnQgeyBEZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZywgTGFtYmRhSWFtVXRpbHMsIFBvd2VydG9vbHNDb25maWcgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZyB9IGZyb20gJy4uL2RlZmF1bHQtZG9jdW1lbnQtcHJvY2Vzc2luZy1jb25maWcnO1xuXG4vKipcbiAqIFN0cnVjdCBmb3IgUzMgUHJlZml4ZXNcbiAqL1xuaW50ZXJmYWNlIFMzUHJlZml4ZXMge1xuICByZWFkb25seSByYXc6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvY2Vzc2VkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZhaWxlZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUXVldWVkIFMzIEFkYXB0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWV1ZWRTM0FkYXB0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBTMyBidWNrZXQgZm9yIGRvY3VtZW50IHN0b3JhZ2Ugd2l0aCBvcmdhbml6ZWQgcHJlZml4ZXMgKHJhdy8sIHByb2Nlc3NlZC8sIGZhaWxlZC8pLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmV3IGJ1Y2tldCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhdXRvLWRlbGV0ZSBlbmFibGVkIGJhc2VkIG9uIHJlbW92YWxQb2xpY3kuXG4gICAqXG4gICAqIEBkZWZhdWx0IGNyZWF0ZSBhIG5ldyBidWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldD86IEJ1Y2tldDtcblxuICAvKipcbiAgICogUzMgcHJlZml4IHdoZXJlIHRoZSByYXcgZmlsZXMgd291bGQgYmUgc3RvcmVkLlxuICAgKiBUaGlzIHNlcnZlcyBhcyB0aGUgdHJpZ2dlciBwb2ludCBmb3IgcHJvY2Vzc2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCBcInJhdy9cIlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3UHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTMyBwcmVmaXggd2hlcmUgdGhlIHByb2Nlc3NlZCBmaWxlcyB3b3VsZCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwicHJvY2Vzc2VkL1wiXG4gICAqL1xuICByZWFkb25seSBwcm9jZXNzZWRQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFMzIHByZWZpeCB3aGVyZSB0aGUgZmlsZXMgdGhhdCBmYWlsZWQgcHJvY2Vzc2luZyB3b3VsZCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiZmFpbGVkL1wiXG4gICAqL1xuICByZWFkb25seSBmYWlsZWRQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNRUyBxdWV1ZSB2aXNpYmlsaXR5IHRpbWVvdXQgZm9yIHByb2Nlc3NpbmcgbWVzc2FnZXMuXG4gICAqIFNob3VsZCBiZSBsb25nZXIgdGhhbiBleHBlY3RlZCBwcm9jZXNzaW5nIHRpbWUgdG8gcHJldmVudCBkdXBsaWNhdGUgcHJvY2Vzc2luZy5cbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzMDApXG4gICAqL1xuICByZWFkb25seSBxdWV1ZVZpc2liaWxpdHlUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdGltZXMgYSBtZXNzYWdlIGNhbiBiZSB1bnN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBiZWZvcmUgYmVpbmcgbW92ZWQgdG8gdGhlIGRlYWQtbGV0dGVyIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICByZWFkb25seSBkbHFNYXhSZWNlaXZlQ291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhpcyBhZGFwdGVyIGFsbG93cyB0aGUgaW50ZWxsaWdlbnQgZG9jdW1lbnQgcHJvY2Vzc2luZyB3b3JrZmxvd1xuICogdG8gYmUgdHJpZ2dlcmVkIGJ5IGZpbGVzIHRoYXQgYXJlIHVwbG9hZGVkIGludG8gYSBTMyBCdWNrZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWV1ZWRTM0FkYXB0ZXIgaW1wbGVtZW50cyBJQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWRhcHRlclByb3BzOiBRdWV1ZWRTM0FkYXB0ZXJQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlZml4ZXM6IFMzUHJlZml4ZXM7XG5cbiAgY29uc3RydWN0b3IoYWRhcHRlclByb3BzOiBRdWV1ZWRTM0FkYXB0ZXJQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5hZGFwdGVyUHJvcHMgPSBhZGFwdGVyUHJvcHM7XG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbiAgICB0aGlzLnByZWZpeGVzID0ge1xuICAgICAgcmF3OiB0aGlzLmFkYXB0ZXJQcm9wcy5yYXdQcmVmaXggfHwgJ3Jhdy8nLFxuICAgICAgcHJvY2Vzc2VkOiB0aGlzLmFkYXB0ZXJQcm9wcy5wcm9jZXNzZWRQcmVmaXggfHwgJ3Byb2Nlc3NlZC8nLFxuICAgICAgZmFpbGVkOiB0aGlzLmFkYXB0ZXJQcm9wcy5mYWlsZWRQcmVmaXggfHwgJ2ZhaWxlZC8nLFxuICAgIH07XG4gIH1cblxuICBpbml0KHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAocHJvcHMubmV0d29yaykge1xuICAgICAgcHJvcHMubmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ3ZwY2Utc3FzJywgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNRUyk7XG4gICAgICBwcm9wcy5uZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgndnBjZS1zMycsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TMyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IHByb3BzLmVuY3J5cHRpb25LZXkgfHwgbmV3IEtleShzY29wZSwgJ1F1ZXVlZFMzQWRhcHRlckVuY3J5cHRpb25LZXknLCB7XG4gICAgICBlbmFibGVLZXlSb3RhdGlvbjogdHJ1ZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMuZW5jcnlwdGlvbktleSA9IGVuY3J5cHRpb25LZXk7XG5cbiAgICBjb25zdCBidWNrZXQgPSB0aGlzLmFkYXB0ZXJQcm9wcy5idWNrZXQgfHwgbmV3IEJ1Y2tldChzY29wZSwgJ0RvY3VtZW50UHJvY2Vzc2luZ0J1Y2tldCcsIHtcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiAocHJvcHMucmVtb3ZhbFBvbGljeSAmJiBwcm9wcy5yZW1vdmFsUG9saWN5ID09PSBSZW1vdmFsUG9saWN5LkRFU1RST1kpIHx8ICFwcm9wcy5yZW1vdmFsUG9saWN5ID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLktNUyxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICBidWNrZXRLZXlFbmFibGVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMuYnVja2V0ID0gYnVja2V0O1xuXG4gICAgY29uc3QgZGVhZExldHRlclF1ZXVlID0gbmV3IFF1ZXVlKHNjb3BlLCAnRG9jdW1lbnRQcm9jZXNzaW5nRExRJywge1xuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IHRoaXMuYWRhcHRlclByb3BzLnF1ZXVlVmlzaWJpbGl0eVRpbWVvdXQgfHwgRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgZW5jcnlwdGlvbjogUXVldWVFbmNyeXB0aW9uLktNUyxcbiAgICAgIGVuY3J5cHRpb25NYXN0ZXJLZXk6IGVuY3J5cHRpb25LZXksXG4gICAgfSk7XG5cbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBRdWV1ZShzY29wZSwgJ0RvY3VtZW50UHJvY2Vzc2luZ1F1ZXVlJywge1xuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IHRoaXMuYWRhcHRlclByb3BzLnF1ZXVlVmlzaWJpbGl0eVRpbWVvdXQgfHwgRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgZGVhZExldHRlclF1ZXVlOiB7XG4gICAgICAgIG1heFJlY2VpdmVDb3VudDogdGhpcy5hZGFwdGVyUHJvcHMuZGxxTWF4UmVjZWl2ZUNvdW50IHx8IDUsXG4gICAgICAgIHF1ZXVlOiBkZWFkTGV0dGVyUXVldWUsXG4gICAgICB9LFxuICAgICAgZW5jcnlwdGlvbjogUXVldWVFbmNyeXB0aW9uLktNUyxcbiAgICAgIGVuY3J5cHRpb25NYXN0ZXJLZXk6IGVuY3J5cHRpb25LZXksXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc291cmNlcy5kZWFkTGV0dGVyUXVldWUgPSBkZWFkTGV0dGVyUXVldWU7XG4gICAgdGhpcy5yZXNvdXJjZXMucXVldWUgPSBxdWV1ZTtcbiAgfVxuXG4gIGNyZWF0ZUluZ3Jlc3NUcmlnZ2VyKHNjb3BlOiBDb25zdHJ1Y3QsIHN0YXRlTWFjaGluZTogU3RhdGVNYWNoaW5lLCBwcm9wczogQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgYnVja2V0OiBCdWNrZXQgPSB0aGlzLnJlc291cmNlcy5idWNrZXQ7XG4gICAgY29uc3QgcXVldWU6IFF1ZXVlID0gdGhpcy5yZXNvdXJjZXMucXVldWU7XG4gICAgY29uc3QgZW5jcnlwdGlvbktleTogS2V5ID0gdGhpcy5yZXNvdXJjZXMuZW5jcnlwdGlvbktleTtcblxuICAgIGJ1Y2tldC5hZGRFdmVudE5vdGlmaWNhdGlvbihFdmVudFR5cGUuT0JKRUNUX0NSRUFURUQsIG5ldyBTcXNEZXN0aW5hdGlvbihxdWV1ZSksIHtcbiAgICAgIHByZWZpeDogdGhpcy5wcmVmaXhlcy5yYXcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzcXNDb25zdW1lckxhbWJkYUZuID0gdGhpcy5jcmVhdGVTUVNDb25zdW1lckxhbWJkYShzY29wZSwgc3RhdGVNYWNoaW5lLCBwcm9wcywgZW5jcnlwdGlvbktleSwgcXVldWUpO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMuc3FzQ29uc3VtZXJMYW1iZGFGdW5jdGlvbiA9IHNxc0NvbnN1bWVyTGFtYmRhRm47XG5cbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXM7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNRU0NvbnN1bWVyTGFtYmRhKHNjb3BlOiBDb25zdHJ1Y3QsIHN0YXRlTWFjaGluZTogU3RhdGVNYWNoaW5lXG4gICAgLCBwcm9wczogQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzLCBlbmNyeXB0aW9uS2V5OiBLZXksIHF1ZXVlOiBRdWV1ZSk6IEZ1bmN0aW9uIHtcbiAgICBjb25zdCBtZXRyaWNOYW1lc3BhY2UgPSBwcm9wcy5tZXRyaWNOYW1lc3BhY2UgfHwgRGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcuREVGQVVMVF9NRVRSSUNfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG1ldHJpY1NlcnZpY2VOYW1lID0gcHJvcHMubWV0cmljU2VydmljZU5hbWUgfHwgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZy5ERUZBVUxUX09CU0VSVkFCSUxJVFlfTUVUUklDX1NWQ19OQU1FO1xuXG4gICAgY29uc3QgeyByZWdpb24sIGFjY291bnQgfSA9IExhbWJkYUlhbVV0aWxzLmdldFN0YWNrSW5mbyhzY29wZSk7XG4gICAgLy8gQ3JlYXRlIGxvZ3MgcGVybWlzc2lvbnMgYW5kIGdldCB1bmlxdWUgZnVuY3Rpb24gbmFtZVxuICAgIGNvbnN0IGxvZ3NQZXJtaXNzaW9ucyA9IExhbWJkYUlhbVV0aWxzLmNyZWF0ZUxvZ3NQZXJtaXNzaW9ucyh7XG4gICAgICBzY29wZSxcbiAgICAgIGZ1bmN0aW9uTmFtZTogJ1NRU0NvbnN1bWVyJyxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGFjY291bnQsXG4gICAgICBlbmFibGVPYnNlcnZhYmlsaXR5OiBwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHBvbGljeSBzdGF0ZW1lbnRzIGZvciBTUVMgY29uc3VtZXIgTGFtYmRhXG4gICAgY29uc3QgcG9saWN5U3RhdGVtZW50cyA9IFtcbiAgICAgIC4uLmxvZ3NQZXJtaXNzaW9ucy5wb2xpY3lTdGF0ZW1lbnRzLFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ3N0YXRlczpTdGFydEV4ZWN1dGlvbiddLFxuICAgICAgICByZXNvdXJjZXM6IFtzdGF0ZU1hY2hpbmUuc3RhdGVNYWNoaW5lQXJuXSxcbiAgICAgIH0pLFxuICAgIF07XG5cbiAgICBpZiAocHJvcHMubmV0d29yaykge1xuICAgICAgcG9saWN5U3RhdGVtZW50cy5wdXNoKExhbWJkYUlhbVV0aWxzLmdlbmVyYXRlTGFtYmRhVlBDUGVybWlzc2lvbnMoKSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIElBTSByb2xlIGZvciBTUVMgY29uc3VtZXIgTGFtYmRhXG4gICAgY29uc3Qgc3FzQ29uc3VtZXJSb2xlID0gbmV3IFJvbGUoc2NvcGUsICdTUVNDb25zdW1lclJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgU1FTQ29uc3VtZXJFeGVjdXRpb25Qb2xpY3k6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogcG9saWN5U3RhdGVtZW50cyxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZW5jcnlwdGlvbktleS5ncmFudEVuY3J5cHREZWNyeXB0KHNxc0NvbnN1bWVyUm9sZSk7XG5cbiAgICAvLyBDcmVhdGUgU1FTIGNvbnN1bWVyIExhbWJkYSBmdW5jdGlvblxuICAgIGNvbnN0IHNxc0NvbnN1bWVyTGFtYmRhID0gbmV3IFB5dGhvbkZ1bmN0aW9uKHNjb3BlLCAnU1FTQ29uc3VtZXInLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IGxvZ3NQZXJtaXNzaW9ucy51bmlxdWVGdW5jdGlvbk5hbWUsXG4gICAgICBydW50aW1lOiBEZWZhdWx0UnVudGltZXMuUFlUSE9OLFxuICAgICAgcm9sZTogc3FzQ29uc3VtZXJSb2xlLFxuICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICcvLi4vcmVzb3VyY2VzL2RlZmF1bHQtc3FzLWNvbnN1bWVyJyksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBTVEFURV9NQUNISU5FX0FSTjogc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgUkFXX1BSRUZJWDogdGhpcy5wcmVmaXhlcy5yYXcsXG4gICAgICAgIC4uLlBvd2VydG9vbHNDb25maWcuZ2VuZXJhdGVEZWZhdWx0TGFtYmRhQ29uZmlnKHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHksIG1ldHJpY05hbWVzcGFjZSwgbWV0cmljU2VydmljZU5hbWUpLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBkZXNjcmlwdGlvbjogJ0NvbnN1bWVzIFNRUyBtZXNzYWdlcyBhbmQgdHJpZ2dlcnMgU3RlcCBGdW5jdGlvbnMgZXhlY3V0aW9ucyBmb3IgZG9jdW1lbnQgcHJvY2Vzc2luZycsXG4gICAgICBlbnZpcm9ubWVudEVuY3J5cHRpb246IGVuY3J5cHRpb25LZXksXG4gICAgICB2cGM6IHByb3BzLm5ldHdvcmsgPyBwcm9wcy5uZXR3b3JrLnZwYyA6IHVuZGVmaW5lZCxcbiAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLm5ldHdvcmsgPyBwcm9wcy5uZXR3b3JrLmFwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uKCkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgU1FTIGV2ZW50IHNvdXJjZSB0byBMYW1iZGFcbiAgICBzcXNDb25zdW1lckxhbWJkYS5hZGRFdmVudFNvdXJjZShcbiAgICAgIG5ldyBTcXNFdmVudFNvdXJjZShxdWV1ZSwge1xuICAgICAgICBiYXRjaFNpemU6IDEwLFxuICAgICAgICBtYXhCYXRjaGluZ1dpbmRvdzogRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgICAgcmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXM6IHRydWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHNxc0NvbnN1bWVyTGFtYmRhO1xuICB9XG5cbiAgZ2VuZXJhdGVBZGFwdGVySUFNUG9saWNpZXMoYWRkaXRpb25hbElBTUFjdGlvbnM/OiBzdHJpbmdbXSwgbmFycm93QWN0aW9ucz86IGJvb2xlYW4pOiBQb2xpY3lTdGF0ZW1lbnRbXSB7XG4gICAgY29uc3QgYnVja2V0OiBCdWNrZXQgPSB0aGlzLnJlc291cmNlcy5idWNrZXQ7XG5cbiAgICBjb25zdCBub3JtYWxpemVkSUFNQWN0aW9ucyA9IGFkZGl0aW9uYWxJQU1BY3Rpb25zIHx8IFtdO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IFtdO1xuICAgIGlmICghbmFycm93QWN0aW9ucykge1xuICAgICAgc3RhdGVtZW50cy5wdXNoKG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydzMzpHZXRPYmplY3QnLCAnczM6Q29weU9iamVjdCcsICdzMzpEZWxldGVPYmplY3QnLCAnczM6UHV0T2JqZWN0JywgLi4ubm9ybWFsaXplZElBTUFjdGlvbnNdLFxuICAgICAgICByZXNvdXJjZXM6IFtgJHtidWNrZXQuYnVja2V0QXJufS8qYF0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChidWNrZXQuZW5jcnlwdGlvbktleSkge1xuICAgICAgICBzdGF0ZW1lbnRzLnB1c2gobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgJ2ttczpFbmNyeXB0JyxcbiAgICAgICAgICAgICdrbXM6UmVFbmNyeXB0KicsXG4gICAgICAgICAgICAna21zOkdlbmVyYXRlRGF0YUtleSonLFxuICAgICAgICAgICAgJ2ttczpEZWNyeXB0JyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW2J1Y2tldC5lbmNyeXB0aW9uS2V5LmtleUFybl0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZW1lbnRzLnB1c2gobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBub3JtYWxpemVkSUFNQWN0aW9ucyxcbiAgICAgICAgcmVzb3VyY2VzOiBbYCR7YnVja2V0LmJ1Y2tldEFybn0vKmBdLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgY3JlYXRlRmFpbGVkQ2hhaW4oc2NvcGU6IENvbnN0cnVjdCk6IENoYWluIHtcbiAgICBjb25zdCBidWNrZXQ6IEJ1Y2tldCA9IHRoaXMucmVzb3VyY2VzLmJ1Y2tldDtcblxuICAgIGNvbnN0IGZhaWxlZENoYWluID0gbmV3IENhbGxBd3NTZXJ2aWNlKHNjb3BlLCAnQ29weVRvRmFpbGVkJywge1xuICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgIGFjdGlvbjogJ2NvcHlPYmplY3QnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBCdWNrZXQ6IEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQuYnVja2V0JyksXG4gICAgICAgIENvcHlTb3VyY2U6IEpzb25QYXRoLmZvcm1hdCgne30ve30nLCBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50LmJ1Y2tldCcpLCBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50LmtleScpKSxcbiAgICAgICAgS2V5OiBKc29uUGF0aC5mb3JtYXQoYCR7dGhpcy5wcmVmaXhlcy5mYWlsZWR9L3t9YCwgSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5maWxlbmFtZScpKSxcbiAgICAgIH0sXG4gICAgICBpYW1SZXNvdXJjZXM6IFtgJHtidWNrZXQuYnVja2V0QXJufS8qYF0sXG4gICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgIH0pLm5leHQoXG4gICAgICBuZXcgQ2FsbEF3c1NlcnZpY2Uoc2NvcGUsICdEZWxldGVGcm9tUmF3Jywge1xuICAgICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgICBhY3Rpb246ICdkZWxldGVPYmplY3QnLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQnVja2V0OiBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50LmJ1Y2tldCcpLFxuICAgICAgICAgIEtleTogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5rZXknKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWFtUmVzb3VyY2VzOiBbYCR7YnVja2V0LmJ1Y2tldEFybn0vKmBdLFxuICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBmYWlsZWRDaGFpbjtcbiAgfVxuXG4gIGNyZWF0ZVN1Y2Nlc3NDaGFpbihzY29wZTogQ29uc3RydWN0KTogQ2hhaW4ge1xuICAgIGNvbnN0IGJ1Y2tldDogQnVja2V0ID0gdGhpcy5yZXNvdXJjZXMuYnVja2V0O1xuXG4gICAgY29uc3QgY2hhaW4gPSBuZXcgQ2FsbEF3c1NlcnZpY2Uoc2NvcGUsICdDb3B5VG9Qcm9jZXNzZWQnLCB7XG4gICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgYWN0aW9uOiAnY29weU9iamVjdCcsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIEJ1Y2tldDogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5idWNrZXQnKSxcbiAgICAgICAgQ29weVNvdXJjZTogSnNvblBhdGguZm9ybWF0KCd7fS97fScsIEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQuYnVja2V0JyksIEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQua2V5JykpLFxuICAgICAgICBLZXk6IEpzb25QYXRoLmZvcm1hdChgJHt0aGlzLnByZWZpeGVzLnByb2Nlc3NlZH0ve31gLCBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50LmZpbGVuYW1lJykpLFxuICAgICAgfSxcbiAgICAgIGlhbVJlc291cmNlczogW2Ake2J1Y2tldC5idWNrZXRBcm59LypgXSxcbiAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgfSkubmV4dChcbiAgICAgIG5ldyBDYWxsQXdzU2VydmljZShzY29wZSwgJ0RlbGV0ZUZyb21SYXdTdWNjZXNzJywge1xuICAgICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgICBhY3Rpb246ICdkZWxldGVPYmplY3QnLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQnVja2V0OiBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50LmJ1Y2tldCcpLFxuICAgICAgICAgIEtleTogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5rZXknKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWFtUmVzb3VyY2VzOiBbYCR7YnVja2V0LmJ1Y2tldEFybn0vKmBdLFxuICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBjaGFpbjtcbiAgfVxufSJdfQ==
|
|
@@ -29,5 +29,5 @@ class AgenticDocumentProcessing extends bedrock_document_processing_1.BedrockDoc
|
|
|
29
29
|
}
|
|
30
30
|
exports.AgenticDocumentProcessing = AgenticDocumentProcessing;
|
|
31
31
|
_a = JSII_RTTI_SYMBOL_1;
|
|
32
|
-
AgenticDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgenticDocumentProcessing", version: "1.
|
|
32
|
+
AgenticDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgenticDocumentProcessing", version: "1.4.1" };
|
|
33
33
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnRpYy1kb2N1bWVudC1wcm9jZXNzaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvYWdlbnRpYy1kb2N1bWVudC1wcm9jZXNzaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUZBQW1FO0FBR25FLCtFQUEwRztBQUMxRyw0Q0FBMkQ7QUFXM0QsTUFBYSx5QkFBMEIsU0FBUSx1REFBeUI7SUFDdEUsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRVMsY0FBYztRQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsOEJBQWdFLENBQUM7UUFDekYsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMseUJBQXlCLENBQUM7UUFDbEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxzQkFBVSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUUvRSxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNqRixLQUFLLE1BQU0sU0FBUyxJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDaEQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsT0FBTyxJQUFJLHNDQUFZLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQzlDLGNBQWMsRUFBRSxVQUFVLENBQUMsYUFBYTtZQUN4QyxVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLGNBQWMsRUFBRTtnQkFDZCxVQUFVLEVBQUUsa0JBQWtCO2FBQy9CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF0QkgsOERBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGFtYmRhSW52b2tlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB9IGZyb20gJy4vYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nJztcbmltcG9ydCB7IEJlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmcsIEJlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmdQcm9wcyB9IGZyb20gJy4vYmVkcm9jay1kb2N1bWVudC1wcm9jZXNzaW5nJztcbmltcG9ydCB7IEJhdGNoQWdlbnQsIEJhdGNoQWdlbnRQcm9wcyB9IGZyb20gJy4uL2ZyYW1ld29yayc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMgZXh0ZW5kcyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMge1xuICAvKipcbiAgICogVGhpcyBwYXJhbWV0ZXIgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZVxuICAgKiBgcHJvY2Vzc2luZ0JlZHJvY2tNb2RlbGAgcGFyYW1ldGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvY2Vzc2luZ0FnZW50UGFyYW1ldGVyczogQmF0Y2hBZ2VudFByb3BzO1xufVxuXG5leHBvcnQgY2xhc3MgQWdlbnRpY0RvY3VtZW50UHJvY2Vzc2luZyBleHRlbmRzIEJlZHJvY2tEb2N1bWVudFByb2Nlc3Npbmcge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQWdlbnRpY0RvY3VtZW50UHJvY2Vzc2luZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUge1xuICAgIGNvbnN0IGFnZW50UHJvcHMgPSB0aGlzLmJlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmdQcm9wcyBhcyBBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHM7XG4gICAgY29uc3QgcHJvY2Vzc2luZ0FnZW50UHJvcHMgPSBhZ2VudFByb3BzLnByb2Nlc3NpbmdBZ2VudFBhcmFtZXRlcnM7XG4gICAgY29uc3QgYmF0Y2hBZ2VudCA9IG5ldyBCYXRjaEFnZW50KHRoaXMsICdJRFBCYXRjaEFnZW50JywgcHJvY2Vzc2luZ0FnZW50UHJvcHMpO1xuXG4gICAgY29uc3QgYWRhcHRlclBvbGljeVN0YXRlbWVudHMgPSB0aGlzLmluZ3Jlc3NBZGFwdGVyLmdlbmVyYXRlQWRhcHRlcklBTVBvbGljaWVzKCk7XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWRhcHRlclBvbGljeVN0YXRlbWVudHMpIHtcbiAgICAgIGJhdGNoQWdlbnQuYWdlbnRSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBMYW1iZGFJbnZva2UodGhpcywgJ1Byb2Nlc3NpbmdTdGVwJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IGJhdGNoQWdlbnQuYWdlbnRGdW5jdGlvbixcbiAgICAgIHJlc3VsdFBhdGg6ICckLnByb2Nlc3NpbmdSZXN1bHQnLFxuICAgICAgcmVzdWx0U2VsZWN0b3I6IHtcbiAgICAgICAgJ3Jlc3VsdC4kJzogJyQuUGF5bG9hZC5yZXN1bHQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufSJdfQ==
|
|
@@ -323,5 +323,5 @@ class BaseDocumentProcessing extends constructs_1.Construct {
|
|
|
323
323
|
}
|
|
324
324
|
exports.BaseDocumentProcessing = BaseDocumentProcessing;
|
|
325
325
|
_a = JSII_RTTI_SYMBOL_1;
|
|
326
|
-
BaseDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseDocumentProcessing", version: "1.
|
|
326
|
+
BaseDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseDocumentProcessing", version: "1.4.1" };
|
|
327
327
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2Q0FBeUU7QUFFekUsMkRBQThGO0FBQzlGLGlEQUFxRTtBQUNyRSxpREFBc0c7QUFDdEcsaURBQTBDO0FBQzFDLHFFQUErSDtBQUMvSCxpRkFBMks7QUFDM0ssMkNBQXVDO0FBQ3ZDLHVDQUFzRDtBQUN0RCw2RkFBdUY7QUFHdkYsNENBQXdGO0FBQ3hGLDBHQUFxRztBQUNyRyw4SEFBd0g7QUFFeEgsNElBQXFJO0FBNkRySTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBc0Isc0JBQXVCLFNBQVEsc0JBQVM7SUFnQjVEOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0M7UUFDMUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSx5QkFBZSxFQUFFLENBQUM7UUFFcEUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsd0NBQThCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsd0NBQThCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0YsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIs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QUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDL0MsT0FBTyxFQUFFLDRCQUFRLENBQUMsWUFBWSxDQUFDLDRCQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM5RCxjQUFjLEVBQUUsNEJBQVEsQ0FBQyxRQUFRLENBQUMsK0NBQStDLENBQUM7YUFDbkYsQ0FDRixDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7O0FBeFZILHdEQWlZQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgRHVyYXRpb24sIFByb3BlcnR5SW5qZWN0b3JzLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSU1ldHJpYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IEF0dHJpYnV0ZVR5cGUsIEJpbGxpbmdNb2RlLCBUYWJsZSwgVGFibGVFbmNyeXB0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiJztcbmltcG9ydCB7IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lEb2N1bWVudCwgUG9saWN5U3RhdGVtZW50LCBSb2xlLCBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IEN1c3RvbWVyTWFuYWdlZEVuY3J5cHRpb25Db25maWd1cmF0aW9uLCBEZWZpbml0aW9uQm9keSwgSnNvblBhdGgsIFN0YXRlTWFjaGluZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IEJlZHJvY2tJbnZva2VNb2RlbCwgRHluYW1vQXR0cmlidXRlVmFsdWUsIER5bmFtb1B1dEl0ZW0sIER5bmFtb1VwZGF0ZUl0ZW0sIExhbWJkYUludm9rZSwgU3RlcEZ1bmN0aW9uc1N0YXJ0RXhlY3V0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJQWRhcHRlciwgUXVldWVkUzNBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVyJztcbmltcG9ydCB7IERlZmF1bHREb2N1bWVudFByb2Nlc3NpbmdDb25maWcgfSBmcm9tICcuL2RlZmF1bHQtZG9jdW1lbnQtcHJvY2Vzc2luZy1jb25maWcnO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uL2ZyYW1ld29yayc7XG5pbXBvcnQgeyBFdmVudGJyaWRnZUJyb2tlciB9IGZyb20gJy4uL2ZyYW1ld29yay9mb3VuZGF0aW9uL2V2ZW50YnJpZGdlLWJyb2tlcic7XG5pbXBvcnQgeyBMb2dHcm91cERhdGFQcm90ZWN0aW9uUHJvcHMsIExvZ0dyb3VwRGF0YVByb3RlY3Rpb25VdGlscyB9IGZyb20gJy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBEZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZyB9IGZyb20gJy4uL3V0aWxpdGllcy9vYnNlcnZhYmlsaXR5L2RlZmF1bHQtb2JzZXJ2YWJpbGl0eS1jb25maWcnO1xuaW1wb3J0IHsgTGFtYmRhT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IgfSBmcm9tICcuLi91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9sYW1iZGEtb2JzZXJ2YWJpbGl0eS1wcm9wZXJ0eS1pbmplY3Rvcic7XG5pbXBvcnQgeyBJT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZVByb3BzIH0gZnJvbSAnLi4vdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvb2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVPYnNlcnZhYmlsaXR5UHJvcGVydHlJbmplY3RvciB9IGZyb20gJy4uL3V0aWxpdGllcy9vYnNlcnZhYmlsaXR5L3N0YXRlLW1hY2hpbmUtb2JzZXJ2YWJpbGl0eS1wcm9wZXJ0eS1pbmplY3Rvcic7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nIGNvbnN0cnVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMgZXh0ZW5kcyBPYnNlcnZhYmxlUHJvcHMge1xuXG4gIC8qKlxuICAgKiBBZGFwdGVyIHRoYXQgZGVmaW5lcyBob3cgdGhlIGRvY3VtZW50IHByb2Nlc3Npbmcgd29ya2Zsb3cgaXMgdHJpZ2dlcmVkXG4gICAqXG4gICAqIEBkZWZhdWx0IFF1ZXVlZFMzQWRhcHRlclxuICAgKi9cbiAgcmVhZG9ubHkgaW5ncmVzc0FkYXB0ZXI/OiBJQWRhcHRlcjtcblxuICAvKipcbiAgICogRHluYW1vREIgdGFibGUgZm9yIHN0b3JpbmcgZG9jdW1lbnQgcHJvY2Vzc2luZyBtZXRhZGF0YSBhbmQgd29ya2Zsb3cgc3RhdGUuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgYSBuZXcgdGFibGUgd2lsbCBiZSBjcmVhdGVkIHdpdGggRG9jdW1lbnRJZCBhcyBwYXJ0aXRpb24ga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jdW1lbnRQcm9jZXNzaW5nVGFibGU/OiBUYWJsZTtcblxuICAvKipcbiAgICogTWF4aW11bSBleGVjdXRpb24gdGltZSBmb3IgdGhlIFN0ZXAgRnVuY3Rpb25zIHdvcmtmbG93LlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDMwKVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dUaW1lb3V0PzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgY3JlYXRlZCByZXNvdXJjZXMgKGJ1Y2tldCwgdGFibGUsIHF1ZXVlKS5cbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIEV2ZW50QnJpZGdlIGJyb2tlciBmb3IgcHVibGlzaGluZyBjdXN0b20gZXZlbnRzIGR1cmluZyBwcm9jZXNzaW5nLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIG5vIGN1c3RvbSBldmVudHMgd2lsbCBiZSBzZW50IG91dC5cbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50YnJpZGdlQnJva2VyPzogRXZlbnRicmlkZ2VCcm9rZXI7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBsb2dnaW5nIGFuZCB0cmFjaW5nIGZvciBhbGwgc3VwcG9ydGluZyByZXNvdXJjZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlT2JzZXJ2YWJpbGl0eT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGF0IGNhbiBydW4gaW5zaWRlIGEgVlBDIHdpbGwgZm9sbG93IHRoZSBwcm92aWRlZCBuZXR3b3JrIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgcmVzb3VyY2VzIHdpbGwgcnVuIG91dHNpZGUgb2YgYSBWUENcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrO1xuXG4gIC8qKlxuICAgKiBLTVMga2V5IHRvIGJlIHVzZWQuXG4gICAqIEBkZWZhdWx0IEEgbmV3IGtleSB3b3VsZCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5PzogS2V5O1xufVxuXG4vKipcbiAqIFVuaW9uIHR5cGUgZm9yIFN0ZXAgRnVuY3Rpb25zIHRhc2tzIHRoYXQgY2FuIGJlIHVzZWQgaW4gZG9jdW1lbnQgcHJvY2Vzc2luZyB3b3JrZmxvd3MuXG4gKiBTdXBwb3J0cyBCZWRyb2NrIG1vZGVsIGludm9jYXRpb24sIExhbWJkYSBmdW5jdGlvbiBpbnZvY2F0aW9uLCBhbmQgbmVzdGVkIFN0ZXAgRnVuY3Rpb25zIGV4ZWN1dGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgPSBCZWRyb2NrSW52b2tlTW9kZWwgfCBMYW1iZGFJbnZva2UgfCBTdGVwRnVuY3Rpb25zU3RhcnRFeGVjdXRpb247XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Igc2VydmVybGVzcyBkb2N1bWVudCBwcm9jZXNzaW5nIHdvcmtmbG93cy5cbiAqXG4gKiBQcm92aWRlcyBhIGNvbXBsZXRlIGRvY3VtZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgd2l0aDpcbiAqIC0gKipTMyBTdG9yYWdlKio6IE9yZ2FuaXplZCB3aXRoIHByZWZpeGVzIChyYXcvLCBwcm9jZXNzZWQvLCBmYWlsZWQvKSBmb3IgZG9jdW1lbnQgbGlmZWN5Y2xlIG1hbmFnZW1lbnRcbiAqIC0gKipTUVMgUXVldWUqKjogUmVsaWFibGUgbWVzc2FnZSBwcm9jZXNzaW5nIHdpdGggY29uZmlndXJhYmxlIHZpc2liaWxpdHkgdGltZW91dCBhbmQgZGVhZCBsZXR0ZXIgcXVldWVcbiAqIC0gKipEeW5hbW9EQiBUYWJsZSoqOiBXb3JrZmxvdyBtZXRhZGF0YSB0cmFja2luZyB3aXRoIERvY3VtZW50SWQgYXMgcGFydGl0aW9uIGtleVxuICogLSAqKlN0ZXAgRnVuY3Rpb25zKio6IE9yY2hlc3RyYXRlZCB3b3JrZmxvdyB3aXRoIGF1dG9tYXRpYyBmaWxlIG1vdmVtZW50IGJhc2VkIG9uIHByb2Nlc3Npbmcgb3V0Y29tZVxuICogLSAqKkF1dG8tdHJpZ2dlcmluZyoqOiBTMyBldmVudCBub3RpZmljYXRpb25zIGF1dG9tYXRpY2FsbHkgc3RhcnQgcHJvY2Vzc2luZyB3aGVuIGZpbGVzIGFyZSB1cGxvYWRlZCB0byByYXcvIHByZWZpeFxuICogLSAqKkVycm9yIEhhbmRsaW5nKio6IEZhaWxlZCBkb2N1bWVudHMgYXJlIG1vdmVkIHRvIGZhaWxlZC8gcHJlZml4IHdpdGggZXJyb3IgZGV0YWlscyBzdG9yZWQgaW4gRHluYW1vREJcbiAqIC0gKipFdmVudEJyaWRnZSBJbnRlZ3JhdGlvbioqOiBPcHRpb25hbCBjdXN0b20gZXZlbnQgcHVibGlzaGluZyBmb3Igd29ya2Zsb3cgc3RhdGUgY2hhbmdlc1xuICpcbiAqICMjIEFyY2hpdGVjdHVyZSBGbG93XG4gKiBTMyBVcGxvYWQgKHJhdy8pIOKGkiBTUVMg4oaSIExhbWJkYSBDb25zdW1lciDihpIgU3RlcCBGdW5jdGlvbnMg4oaSIFByb2Nlc3NpbmcgU3RlcHMg4oaSIFMzIChwcm9jZXNzZWQvZmFpbGVkLylcbiAqXG4gKiAjIyBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlbWVudHNcbiAqIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgZm91ciBhYnN0cmFjdCBtZXRob2RzIHRvIGRlZmluZSB0aGUgcHJvY2Vzc2luZyB3b3JrZmxvdzpcbiAqIC0gYGNsYXNzaWZpY2F0aW9uU3RlcCgpYDogRG9jdW1lbnQgdHlwZSBjbGFzc2lmaWNhdGlvblxuICogLSBgZXh0cmFjdGlvblN0ZXAoKWA6IERhdGEgZXh0cmFjdGlvbiBmcm9tIGRvY3VtZW50c1xuICogLSBgZW5yaWNobWVudFN0ZXAoKWA6IE9wdGlvbmFsIGRhdGEgZW5yaWNobWVudCAocmV0dXJuIHVuZGVmaW5lZCB0byBza2lwKVxuICogLSBgcG9zdFByb2Nlc3NpbmdTdGVwKClgOiBPcHRpb25hbCBwb3N0LXByb2Nlc3NpbmcgKHJldHVybiB1bmRlZmluZWQgdG8gc2tpcClcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VEb2N1bWVudFByb2Nlc3NpbmcgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJT2JzZXJ2YWJsZSB7XG4gIC8qKiBCdXNpbmVzcyBtZXRyaWMgc2VydmljZSBuYW1lLiBUaGlzIGlzIHBhcnQgb2YgdGhlIGluaXRpYWwgc2VydmljZSBkaW1lbnNpb24gKi9cbiAgcmVhZG9ubHkgbWV0cmljU2VydmljZU5hbWU6IHN0cmluZztcbiAgLyoqIEJ1c2luZXNzIG1ldHJpYyBuYW1lc3BhY2UuICovXG4gIHJlYWRvbmx5IG1ldHJpY05hbWVzcGFjZTogc3RyaW5nO1xuICAvKiogbG9nIGdyb3VwIGRhdGEgcHJvdGVjdGlvbiBjb25maWd1cmF0aW9uICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwRGF0YVByb3RlY3Rpb246IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25Qcm9wcztcbiAgLyoqIER5bmFtb0RCIHRhYmxlIGZvciBzdG9yaW5nIGRvY3VtZW50IHByb2Nlc3NpbmcgbWV0YWRhdGEgYW5kIHdvcmtmbG93IHN0YXRlICovXG4gIHJlYWRvbmx5IGRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlOiBUYWJsZTtcbiAgLyoqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIGRvY3VtZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzO1xuICAvKiogS01TIGtleSAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5OiBLZXk7XG4gIC8qKiBJbmdyZXNzIGFkYXB0ZXIsIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHdvcmtmbG93ICovXG4gIHJlYWRvbmx5IGluZ3Jlc3NBZGFwdGVyOiBJQWRhcHRlcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nIGNvbnN0cnVjdC5cbiAgICpcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGNvbXBsZXRlIGRvY3VtZW50IHByb2Nlc3NpbmcgaW5mcmFzdHJ1Y3R1cmUgaW5jbHVkaW5nIFMzIGJ1Y2tldCxcbiAgICogU1FTIHF1ZXVlLCBEeW5hbW9EQiB0YWJsZSwgYW5kIHNldHMgdXAgUzMgZXZlbnQgbm90aWZpY2F0aW9ucyB0byB0cmlnZ2VyIHByb2Nlc3NpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuIE11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgc2NvcGUuXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIGRvY3VtZW50IHByb2Nlc3NpbmcgcGlwZWxpbmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmluZ3Jlc3NBZGFwdGVyID0gcHJvcHMuaW5ncmVzc0FkYXB0ZXIgfHwgbmV3IFF1ZXVlZFMzQWRhcHRlcigpO1xuXG4gICAgaWYgKHByb3BzLm5ldHdvcmspIHtcbiAgICAgIHByb3BzLm5ldHdvcmsuY3JlYXRlU2VydmljZUVuZHBvaW50KCd2cGNlLXNmbicsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TVEVQX0ZVTkNUSU9OUyk7XG4gICAgICBwcm9wcy5uZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgndnBjZS1lYicsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5FVkVOVEJSSURHRSk7XG4gICAgICBpZiAocHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSkge1xuICAgICAgICBwcm9wcy5uZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgndnBjZS1sb2dzJywgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkNMT1VEV0FUQ0hfTE9HUyk7XG4gICAgICAgIHByb3BzLm5ldHdvcmsuY3JlYXRlU2VydmljZUVuZHBvaW50KCd2cGNlLW1ldHJpY3MnLCBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuQ0xPVURXQVRDSF9NT05JVE9SSU5HKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluZ3Jlc3NBZGFwdGVyLmluaXQodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0gcHJvcHMuZW5jcnlwdGlvbktleSB8fCBuZXcgS2V5KHRoaXMsICdJRFBFbmNyeXB0aW9uS2V5Jywge1xuICAgICAgZW5hYmxlS2V5Um90YXRpb246IHRydWUsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcblxuICAgIHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiA9IExvZ0dyb3VwRGF0YVByb3RlY3Rpb25VdGlscy5oYW5kbGVEZWZhdWx0KHRoaXMsIHByb3BzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24sIHByb3BzLnJlbW92YWxQb2xpY3kpO1xuXG4gICAgdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSA9IHByb3BzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlIHx8IG5ldyBUYWJsZSh0aGlzLCAnRG9jdW1lbnRQcm9jZXNzaW5nVGFibGUnLCB7XG4gICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICAgICAgbmFtZTogJ0RvY3VtZW50SWQnLFxuICAgICAgICB0eXBlOiBBdHRyaWJ1dGVUeXBlLlNUUklORyxcbiAgICAgIH0sXG4gICAgICBiaWxsaW5nTW9kZTogQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNULFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBwb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbjoge1xuICAgICAgICBwb2ludEluVGltZVJlY292ZXJ5RW5hYmxlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBlbmNyeXB0aW9uOiBUYWJsZUVuY3J5cHRpb24uQ1VTVE9NRVJfTUFOQUdFRCxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHRoaXMuZW5jcnlwdGlvbktleSxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5KSB7XG4gICAgICBQcm9wZXJ0eUluamVjdG9ycy5vZih0aGlzKS5hZGQoXG4gICAgICAgIG5ldyBTdGF0ZU1hY2hpbmVPYnNlcnZhYmlsaXR5UHJvcGVydHlJbmplY3Rvcih0aGlzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24pLFxuICAgICAgICBuZXcgTGFtYmRhT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IodGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5tZXRyaWNOYW1lc3BhY2UgPSBwcm9wcy5tZXRyaWNOYW1lc3BhY2UgfHwgRGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcuREVGQVVMVF9NRVRSSUNfTkFNRVNQQUNFO1xuICAgIHRoaXMubWV0cmljU2VydmljZU5hbWUgPSBwcm9wcy5tZXRyaWNTZXJ2aWNlTmFtZSB8fCBEZWZhdWx0RG9jdW1lbnRQcm9jZXNzaW5nQ29uZmlnLkRFRkFVTFRfT0JTRVJWQUJJTElUWV9NRVRSSUNfU1ZDX05BTUU7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBoYW5kbGVTdGF0ZU1hY2hpbmVDcmVhdGlvbihzdGF0ZU1hY2hpbmVJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xhc3NpZmljYXRpb25TdGVwID0gdGhpcy5jbGFzc2lmaWNhdGlvblN0ZXAoKTtcbiAgICBjb25zdCBwcm9jZXNzaW5nU3RlcCA9IHRoaXMucHJvY2Vzc2luZ1N0ZXAoKTtcbiAgICBjb25zdCBlbnJpY2htZW50U3RlcCA9IHRoaXMuZW5yaWNobWVudFN0ZXAoKTtcbiAgICBjb25zdCBwb3N0UHJvY2Vzc2luZ1N0ZXAgPSB0aGlzLnBvc3RQcm9jZXNzaW5nU3RlcCgpO1xuXG4gICAgY29uc3QgaW5pdE1ldGFkYXRhRW50cnkgPSBuZXcgRHluYW1vUHV0SXRlbSh0aGlzLCAnSW5pdE1ldGFkYXRhRW50cnknLCB7XG4gICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgIGl0ZW06IHtcbiAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICBDb250ZW50VHlwZTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50VHlwZScpKSxcbiAgICAgICAgQ29udGVudDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQuY29udGVudCcpKSksXG4gICAgICAgIFdvcmtmbG93U3RhdHVzOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdwZW5kaW5nJyksXG4gICAgICAgIFN0YXRlTWFjaGluZUV4ZWNJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJCQuRXhlY3V0aW9uLklkJykpLFxuICAgICAgfSxcbiAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgfSk7XG5cbiAgICAvLyBGaWxlIG1vdmVtZW50IG9wZXJhdGlvbnNcbiAgICBjb25zdCBtb3ZlVG9GYWlsZWQgPSB0aGlzLmNyZWF0ZU1vdmVUb0ZhaWxlZENoYWluKCk7XG4gICAgY29uc3QgbW92ZVRvUHJvY2Vzc2VkID0gdGhpcy5jcmVhdGVNb3ZlVG9Qcm9jZXNzZWRDaGFpbigpO1xuXG4gICAgY29uc3QgcHJvY2Vzc2luZ0NoYWluID0gcHJvY2Vzc2luZ1N0ZXBcbiAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCAnUHJvY2Vzc2luZ0ZhaWxEREJVcGRhdGUnLCB7XG4gICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICBrZXk6IHtcbiAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzJyxcbiAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICc6bmV3U3RhdHVzJzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZygncHJvY2Vzc2luZy1mYWlsdXJlJyksXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICB9KS5uZXh0KG1vdmVUb0ZhaWxlZCksIHtcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pXG4gICAgICAubmV4dChcbiAgICAgICAgbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgJ1Byb2Nlc3NpbmdTdWNjZXNzVXBkYXRlJywge1xuICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMsIFByb2Nlc3NpbmdSZXN1bHQgPSA6cHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdwcm9jZXNzaW5nLWNvbXBsZXRlJyksXG4gICAgICAgICAgICAnOnByb2Nlc3NpbmdSZXN1bHQnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5wcm9jZXNzaW5nUmVzdWx0JykpKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBjb21wbGV0ZSBjaGFpbiBpbmNsdWRpbmcgb3B0aW9uYWwgc3RlcHNcbiAgICBpZiAoZW5yaWNobWVudFN0ZXApIHtcbiAgICAgIGNvbnN0IGVucmljaG1lbnRDaGFpbiA9IGVucmljaG1lbnRTdGVwXG4gICAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCAnRW5yaWNobWVudEZhaWxEREJVcGRhdGUnLCB7XG4gICAgICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdlbnJpY2htZW50LWZhaWx1cmUnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLm5leHQobW92ZVRvRmFpbGVkKSwge1xuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pXG4gICAgICAgIC5uZXh0KFxuICAgICAgICAgIG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsICdFbnJpY2htZW50U3VjY2Vzc1VwZGF0ZScsIHtcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICAgIERvY3VtZW50SWQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cywgRW5yaWNobWVudFJlc3VsdCA9IDplbnJpY2htZW50UmVzdWx0JyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBwb3N0UHJvY2Vzc2luZ1N0ZXAgPyBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdlbnJpY2htZW50LWNvbXBsZXRlJykgOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdjb21wbGV0ZScpLFxuICAgICAgICAgICAgICAnOmVucmljaG1lbnRSZXN1bHQnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5lbnJpY2hlZFJlc3VsdCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgcHJvY2Vzc2luZ0NoYWluLm5leHQoZW5yaWNobWVudENoYWluKTtcblxuICAgICAgaWYgKHBvc3RQcm9jZXNzaW5nU3RlcCkge1xuICAgICAgICBjb25zdCBwb3N0UHJvY2Vzc2luZ0NoYWluID0gcG9zdFByb2Nlc3NpbmdTdGVwXG4gICAgICAgICAgLmFkZENhdGNoKG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsICdQb3N0UHJvY2Vzc2luZ0ZhaWxEREJVcGRhdGUnLCB7XG4gICAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMnLFxuICAgICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ3Bvc3QtcHJvY2Vzc2luZy1mYWlsdXJlJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KS5uZXh0KG1vdmVUb0ZhaWxlZCksIHtcbiAgICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAubmV4dChcbiAgICAgICAgICAgIG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsICdQb3N0UHJvY2Vzc2luZ1N1Y2Nlc3NVcGRhdGUnLCB7XG4gICAgICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzLCBQb3N0UHJvY2Vzc2luZ1Jlc3VsdCA9IDpwb3N0UHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NvbXBsZXRlJyksXG4gICAgICAgICAgICAgICAgJzpwb3N0UHJvY2Vzc2luZ1Jlc3VsdCc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguanNvblRvU3RyaW5nKEpzb25QYXRoLm9iamVjdEF0KCckLnBvc3RQcm9jZXNzZWRSZXN1bHQnKSkpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICAgICAgfSkubmV4dChtb3ZlVG9Qcm9jZXNzZWQpLFxuICAgICAgICAgICk7XG4gICAgICAgIGVucmljaG1lbnRDaGFpbi5uZXh0KHBvc3RQcm9jZXNzaW5nQ2hhaW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5yaWNobWVudENoYWluLm5leHQobW92ZVRvUHJvY2Vzc2VkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBvc3RQcm9jZXNzaW5nU3RlcCkge1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NpbmdDaGFpbiA9IHBvc3RQcm9jZXNzaW5nU3RlcFxuICAgICAgICAuYWRkQ2F0Y2gobmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgJ1Bvc3RQcm9jZXNzaW5nRmFpbEREQlVwZGF0ZScsIHtcbiAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgIERvY3VtZW50SWQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzJyxcbiAgICAgICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ3Bvc3QtcHJvY2Vzc2luZy1mYWlsdXJlJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICB9KS5uZXh0KG1vdmVUb0ZhaWxlZCksIHtcbiAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICB9KVxuICAgICAgICAubmV4dChcbiAgICAgICAgICBuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCAnUG9zdFByb2Nlc3NpbmdTdWNjZXNzVXBkYXRlJywge1xuICAgICAgICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzLCBQb3N0UHJvY2Vzc2luZ1Jlc3VsdCA9IDpwb3N0UHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICAgICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgICAgICc6bmV3U3RhdHVzJzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZygnY29tcGxldGUnKSxcbiAgICAgICAgICAgICAgJzpwb3N0UHJvY2Vzc2luZ1Jlc3VsdCc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguanNvblRvU3RyaW5nKEpzb25QYXRoLm9iamVjdEF0KCckLnBvc3RQcm9jZXNzZWRSZXN1bHQnKSkpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgICAgfSkubmV4dChtb3ZlVG9Qcm9jZXNzZWQpLFxuICAgICAgICApO1xuICAgICAgcHJvY2Vzc2luZ0NoYWluLm5leHQocG9zdFByb2Nlc3NpbmdDaGFpbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG9wdGlvbmFsIHN0ZXBzIC0gbWFyayBhcyBjb21wbGV0ZSBhZnRlciBleHRyYWN0aW9uXG4gICAgICBwcm9jZXNzaW5nQ2hhaW4ubmV4dChcbiAgICAgICAgbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgJ1dvcmtmbG93Q29tcGxldGVVcGRhdGUnLCB7XG4gICAgICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdjb21wbGV0ZScpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSkubmV4dChtb3ZlVG9Qcm9jZXNzZWQpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB3b3JrZmxvd0RlZmluaXRpb24gPSBpbml0TWV0YWRhdGFFbnRyeS5uZXh0KFxuICAgICAgY2xhc3NpZmljYXRpb25TdGVwXG4gICAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCAnQ2xhc3NpZmljYXRpb25GYWlsRERCVXBkYXRlJywge1xuICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMnLFxuICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICc6bmV3U3RhdHVzJzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZygnY2xhc3NpZmljYXRpb24tZmFpbHVyZScpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSkubmV4dChtb3ZlVG9GYWlsZWQpLCB7XG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSlcbiAgICAgICAgLm5leHQoXG4gICAgICAgICAgbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgJ0NsYXNzaWZpY2F0aW9uU3VjY2Vzc1VwZGF0ZScsIHtcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICAgIERvY3VtZW50SWQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cywgQ2xhc3NpZmljYXRpb25SZXN1bHQgPSA6Y2xhc3NpZmljYXRpb25SZXN1bHQnLFxuICAgICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NsYXNzaWZpY2F0aW9uLWNvbXBsZXRlJyksXG4gICAgICAgICAgICAgICc6Y2xhc3NpZmljYXRpb25SZXN1bHQnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5jbGFzc2lmaWNhdGlvblJlc3VsdCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICApLm5leHQocHJvY2Vzc2luZ0NoYWluKTtcblxuICAgIGNvbnN0IHJvbGUgPSB0aGlzLmNyZWF0ZVN0YXRlTWFjaGluZVJvbGUoKTtcbiAgICB0aGlzLmVuY3J5cHRpb25LZXkuZ3JhbnRFbmNyeXB0RGVjcnlwdChyb2xlKTtcblxuICAgIGNvbnN0IHN0YXRlTWFjaGluZSA9IG5ldyBTdGF0ZU1hY2hpbmUodGhpcywgc3RhdGVNYWNoaW5lSWQsIHtcbiAgICAgIGRlZmluaXRpb25Cb2R5OiBEZWZpbml0aW9uQm9keS5mcm9tQ2hhaW5hYmxlKHdvcmtmbG93RGVmaW5pdGlvbiksXG4gICAgICB0aW1lb3V0OiB0aGlzLnByb3BzLndvcmtmbG93VGltZW91dCB8fCBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIHJvbGUsXG4gICAgICBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogbmV3IEN1c3RvbWVyTWFuYWdlZEVuY3J5cHRpb25Db25maWd1cmF0aW9uKHRoaXMuZW5jcnlwdGlvbktleSksXG4gICAgfSk7XG5cbiAgICB0aGlzLmluZ3Jlc3NBZGFwdGVyLmNyZWF0ZUluZ3Jlc3NUcmlnZ2VyKHRoaXMsIHN0YXRlTWFjaGluZSwgdGhpcy5wcm9wcyk7XG5cbiAgICByZXR1cm4gc3RhdGVNYWNoaW5lO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGF0ZU1hY2hpbmVSb2xlKCk6IFJvbGUge1xuICAgIHJldHVybiBuZXcgUm9sZSh0aGlzLCAnU3RhdGVNYWNoaW5lUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ3N0YXRlcy5hbWF6b25hd3MuY29tJyksXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBTdGF0ZU1hY2hpbmVFeGVjdXRpb25Qb2xpY3k6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgLi4udGhpcy5pbmdyZXNzQWRhcHRlci5nZW5lcmF0ZUFkYXB0ZXJJQU1Qb2xpY2llcygpLFxuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbJ2R5bmFtb2RiOlB1dEl0ZW0nLCAnZHluYW1vZGI6VXBkYXRlSXRlbSddLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFt0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLnRhYmxlQXJuXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTW92ZVRvRmFpbGVkQ2hhaW4oKSB7XG4gICAgY29uc3QgZmFpbGVkQ2hhaW4gPSB0aGlzLmluZ3Jlc3NBZGFwdGVyLmNyZWF0ZUZhaWxlZENoYWluKHRoaXMpO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuZXZlbnRicmlkZ2VCcm9rZXIpIHtcbiAgICAgIGNvbnN0IGViQ2hhaW4gPSB0aGlzLnByb3BzLmV2ZW50YnJpZGdlQnJva2VyLnNlbmRWaWFTZm5DaGFpbihcbiAgICAgICAgJ2RvY3VtZW50LXByb2Nlc3NpbmctZmFpbGVkJyxcbiAgICAgICAge1xuICAgICAgICAgIGRvY3VtZW50SWQ6IEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSxcbiAgICAgICAgICBjb250ZW50VHlwZTogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudFR5cGUnKSxcbiAgICAgICAgICBjb250ZW50OiBKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQuY29udGVudCcpKSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGZhaWxlZENoYWluLm5leHQoZWJDaGFpbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhaWxlZENoYWluO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNb3ZlVG9Qcm9jZXNzZWRDaGFpbigpIHtcbiAgICBjb25zdCBwcm9jZXNzZWRDaGFpbiA9IHRoaXMuaW5ncmVzc0FkYXB0ZXIuY3JlYXRlU3VjY2Vzc0NoYWluKHRoaXMpO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuZXZlbnRicmlkZ2VCcm9rZXIpIHtcbiAgICAgIHByb2Nlc3NlZENoYWluLm5leHQoXG4gICAgICAgIHRoaXMucHJvcHMuZXZlbnRicmlkZ2VCcm9rZXIuc2VuZFZpYVNmbkNoYWluKFxuICAgICAgICAgICdkb2N1bWVudC1wcm9jZXNzZWQtc3VjY2Vzc2Z1bCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZG9jdW1lbnRJZDogSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpLFxuICAgICAgICAgICAgY29udGVudFR5cGU6IEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnRUeXBlJyksXG4gICAgICAgICAgICBjb250ZW50OiBKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQuY29udGVudCcpKSxcbiAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiBKc29uUGF0aC5zdHJpbmdBdCgnJC5jbGFzc2lmaWNhdGlvblJlc3VsdC5kb2N1bWVudENsYXNzaWZpY2F0aW9uJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZENoYWluO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY3MoKTogSU1ldHJpY1tdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZG9jdW1lbnQgY2xhc3NpZmljYXRpb24gc3RlcCBvZiB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqICoqQ1JJVElDQUwqKjogTXVzdCBzZXQgYG91dHB1dFBhdGhgIHRvIHByZXNlcnZlIHdvcmtmbG93IHN0YXRlIGZvciBzdWJzZXF1ZW50IHN0ZXBzLlxuICAgKiBUaGUgY2xhc3NpZmljYXRpb24gcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQuY2xhc3NpZmljYXRpb25SZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBjbGFzc2lmaWNhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNsYXNzaWZpY2F0aW9uU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZTtcblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZG9jdW1lbnQgcHJvY2Vzc2luZyBzdGVwIG9mIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogKipDUklUSUNBTCoqOiBNdXN0IHNldCBgb3V0cHV0UGF0aGAgdG8gcHJlc2VydmUgd29ya2Zsb3cgc3RhdGUgZm9yIHN1YnNlcXVlbnQgc3RlcHMuXG4gICAqIFRoZSBleHRyYWN0aW9uIHJlc3VsdCBzaG91bGQgYmUgYXZhaWxhYmxlIGF0IGAkLnByb2Nlc3NpbmdSZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBleHRyYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGU7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIG9wdGlvbmFsIGRvY3VtZW50IGVucmljaG1lbnQgc3RlcCBvZiB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqICoqQ1JJVElDQUwqKjogSWYgaW1wbGVtZW50ZWQsIG11c3Qgc2V0IGBvdXRwdXRQYXRoYCB0byBwcmVzZXJ2ZSB3b3JrZmxvdyBzdGF0ZS5cbiAgICogVGhlIGVucmljaG1lbnQgcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQuZW5yaWNoZWRSZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBlbnJpY2htZW50LCBvciB1bmRlZmluZWQgdG8gc2tpcCB0aGlzIHN0ZXBcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBlbnJpY2htZW50U3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgb3B0aW9uYWwgcG9zdC1wcm9jZXNzaW5nIHN0ZXAgb2YgdGhlIHdvcmtmbG93LlxuICAgKlxuICAgKiAqKkNSSVRJQ0FMKio6IElmIGltcGxlbWVudGVkLCBtdXN0IHNldCBgb3V0cHV0UGF0aGAgdG8gcHJlc2VydmUgd29ya2Zsb3cgc3RhdGUuXG4gICAqIFRoZSBwb3N0LXByb2Nlc3NpbmcgcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQucG9zdFByb2Nlc3NlZFJlc3VsdGAgZm9yIER5bmFtb0RCIHN0b3JhZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIFN0ZXAgRnVuY3Rpb25zIHRhc2sgZm9yIHBvc3QtcHJvY2Vzc2luZywgb3IgdW5kZWZpbmVkIHRvIHNraXAgdGhpcyBzdGVwXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcG9zdFByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHwgdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -228,7 +228,7 @@ class BedrockDocumentProcessing extends base_document_processing_1.BaseDocumentP
|
|
|
228
228
|
}
|
|
229
229
|
exports.BedrockDocumentProcessing = BedrockDocumentProcessing;
|
|
230
230
|
_a = JSII_RTTI_SYMBOL_1;
|
|
231
|
-
BedrockDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockDocumentProcessing", version: "1.
|
|
231
|
+
BedrockDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockDocumentProcessing", version: "1.4.1" };
|
|
232
232
|
BedrockDocumentProcessing.DEFAULT_CLASSIFICATION_PROMPT = `
|
|
233
233
|
Analyze the document below, and classify the type of document it is (eg. INVOICE, IDENTITY_DOCUMENT, RECEIPT, etc). The result should be in JSON and should follow the following structure (only respond in JSON with the following structure and do not use markdown to indicate the json, just output plain old json with nothing else):
|
|
234
234
|
|
|
@@ -9,6 +9,6 @@ class DefaultDocumentProcessingConfig {
|
|
|
9
9
|
}
|
|
10
10
|
exports.DefaultDocumentProcessingConfig = DefaultDocumentProcessingConfig;
|
|
11
11
|
_a = JSII_RTTI_SYMBOL_1;
|
|
12
|
-
DefaultDocumentProcessingConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultDocumentProcessingConfig", version: "1.
|
|
12
|
+
DefaultDocumentProcessingConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultDocumentProcessingConfig", version: "1.4.1" };
|
|
13
13
|
DefaultDocumentProcessingConfig.DEFAULT_OBSERVABILITY_METRIC_SVC_NAME = 'document-processing';
|
|
14
14
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1kb2N1bWVudC1wcm9jZXNzaW5nLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3VzZS1jYXNlcy9kb2N1bWVudC1wcm9jZXNzaW5nL2RlZmF1bHQtZG9jdW1lbnQtcHJvY2Vzc2luZy1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLE1BQWEsK0JBQStCOztBQUE1QywwRUFFQzs7O0FBRHdCLHFFQUFxQyxHQUFHLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZyB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9PQlNFUlZBQklMSVRZX01FVFJJQ19TVkNfTkFNRSA9ICdkb2N1bWVudC1wcm9jZXNzaW5nJztcbn0iXX0=
|