{"_id":"@aws-mdaa/gaia-v2-l3-construct","_rev":"5-2d04234918193e3edc389c5253a948b5","name":"@aws-mdaa/gaia-v2-l3-construct","dist-tags":{"latest":"1.9.0"},"versions":{"1.6.0":{"name":"@aws-mdaa/gaia-v2-l3-construct","version":"1.6.0","author":{"url":"https://aws.amazon.com/solutions","name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-mdaa/gaia-v2-l3-construct@1.6.0","maintainers":[{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"}],"homepage":"https://github.com/aws/modern-data-architecture-accelerator#readme","bugs":{"url":"https://github.com/aws/modern-data-architecture-accelerator/issues"},"dist":{"shasum":"bc3d76ed7cb33f6c9c88154aab00d10e89116195","tarball":"https://registry.npmjs.org/@aws-mdaa/gaia-v2-l3-construct/-/gaia-v2-l3-construct-1.6.0.tgz","fileCount":82,"integrity":"sha512-QDjzMjv5AeixkTIw3p9i2HgtDFW/H3jRuyt3++2Xn27CbH222fCuR+SGnYshd8q8CdpAaA40jUPjYkok9TIlow==","signatures":[{"sig":"MEYCIQCwxwXvluz6JUyZxTb47FX4wgl1azwNH/VCB90AnnJ7uwIhAJ/r66IuX7PjRciGc0VxNJ100ooydLnNcrqnhbA2inu0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2218872},"jsii":{"outdir":"jsii-dist","targets":{},"versionFormat":"full"},"main":"lib/index.js","_from":"file:/Users/guoneng/projects/mdaa/mdaa-pipeline/npmjs-build/mdaa/target/package-build/aws-mdaa-gaia-v2-l3-construct-1.6.0.tgz","types":"lib/index.d.ts","gitHead":"8b49a2b371014baec046605ffdbfe38951099c31","scripts":{"lint":"eslint --max-warnings 0 -c ../../../../../eslint.config.mjs","test":"jest --passWithNoTests --coverage","build":"export JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=1 && jsii --project-references","watch":"jsii -w  --project-references","package":"jsii-pacmak --npmignore=false","test:python":"bash ../../../../../scripts/test/test_python_package.sh python-tests","test:package-docs":"../../../../../scripts/generate_docs/test_package_docs.sh"},"_npmUser":{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"},"_resolved":"/Users/guoneng/projects/mdaa/mdaa-pipeline/npmjs-build/mdaa/target/package-build/aws-mdaa-gaia-v2-l3-construct-1.6.0.tgz","overrides":{"aws-cdk-lib":"2.220.0","@types/babel__traverse":"7.18.2","@aws-cdk/aws-glue-alpha":"2.220.0-alpha.0"},"stability":"experimental","_integrity":"sha512-QDjzMjv5AeixkTIw3p9i2HgtDFW/H3jRuyt3++2Xn27CbH222fCuR+SGnYshd8q8CdpAaA40jUPjYkok9TIlow==","repository":{"url":"git+https://github.com/aws/modern-data-architecture-accelerator.git","type":"git"},"_npmVersion":"10.9.4","description":"MDAA GenAI Accelerator L3 Construct","directories":{},"_nodeVersion":"24.12.0","dependencies":{"cdk-nag":"2.37.55","constructs":"10.0.96","aws-cdk-lib":"2.220.0","@aws-mdaa/construct":"1.6.0","@aws-mdaa/l3-construct":"1.6.0","@aws-mdaa/s3-constructs":"1.6.0","@aws-mdaa/ddb-constructs":"1.6.0","@aws-mdaa/ec2-constructs":"1.6.0","@aws-mdaa/iam-constructs":"1.6.0","@aws-mdaa/kms-constructs":"1.6.0","@aws-mdaa/rds-constructs":"1.6.0","@aws-mdaa/sns-constructs":"1.6.0","@aws-mdaa/sqs-constructs":"1.6.0","@aws-mdaa/iam-role-helper":"1.6.0","@aws-mdaa/custom-constructs":"1.6.0","@aws-mdaa/lambda-constructs":"1.6.0","@aws-mdaa/cloudwatch-constructs":"1.6.0","@aws-mdaa/bedrock-builder-l3-construct":"1.6.0","@aws-mdaa/athena-workgroup-l3-construct":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","ts-jest":"29.4.9","ts-node":"10.9.2","constructs":"10.0.96","typescript":"5.9.3","@types/jest":"29.5.0","@types/node":"17.0.23","aws-cdk-lib":"2.220.0","@types/prettier":"2.6.0","@aws-mdaa/testing":"1.6.0","source-map-support":"0.5.21","@aws-mdaa/construct":"1.6.0","@aws-mdaa/l3-construct":"1.6.0","typescript-json-schema":"0.67.4","@aws-mdaa/ddb-constructs":"1.6.0","@aws-mdaa/ec2-constructs":"1.6.0","@aws-mdaa/kms-constructs":"1.6.0","@aws-mdaa/iam-role-helper":"1.6.0","@aws-mdaa/custom-constructs":"1.6.0","@aws-mdaa/lambda-constructs":"1.6.0","@aws-mdaa/datalake-l3-construct":"1.6.0","@aws-mdaa/bedrock-builder-l3-construct":"1.6.0","@aws-mdaa/athena-workgroup-l3-construct":"1.6.0"},"peerDependencies":{"constructs":"10.0.96","aws-cdk-lib":"2.220.0","@aws-mdaa/construct":"1.6.0","@aws-mdaa/l3-construct":"1.6.0","@aws-mdaa/ddb-constructs":"1.6.0","@aws-mdaa/ec2-constructs":"1.6.0","@aws-mdaa/kms-constructs":"1.6.0","@aws-mdaa/iam-role-helper":"1.6.0","@aws-mdaa/custom-constructs":"1.6.0","@aws-mdaa/lambda-constructs":"1.6.0","@aws-mdaa/roles-l3-construct":"1.6.0","@aws-mdaa/datalake-l3-construct":"1.6.0","@aws-mdaa/bedrock-builder-l3-construct":"1.6.0","@aws-mdaa/athena-workgroup-l3-construct":"1.6.0","@aws-mdaa/sm-studio-domain-l3-construct":"1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/gaia-v2-l3-construct_1.6.0_1779447858698_0.20377939015549806","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@aws-mdaa/gaia-v2-l3-construct","version":"1.7.0","author":{"url":"https://aws.amazon.com/solutions","name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-mdaa/gaia-v2-l3-construct@1.7.0","maintainers":[{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"}],"homepage":"https://github.com/aws/modern-data-architecture-accelerator#readme","bugs":{"url":"https://github.com/aws/modern-data-architecture-accelerator/issues"},"dist":{"shasum":"0a8264350cc913ee4209ec174eba32c9fe8d9b01","tarball":"https://registry.npmjs.org/@aws-mdaa/gaia-v2-l3-construct/-/gaia-v2-l3-construct-1.7.0.tgz","fileCount":84,"integrity":"sha512-6c1EJN8+nBEGEXzBp2HxdAButdOal6GmWTU8tMN5IDZ+uo/ZoTf0RFtc/uVZrRIinbF7B/WaMvL2G1sdF9lbVw==","signatures":[{"sig":"MEQCIGLTUhfu5FQDKvw+MLysDYVJhSobhXR1yF/6T6octhnjAiByHwJlLT6H0v7DE5f3bA/hu1V5xrolngIXDZG7X8z3mA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2593043},"jsii":{"outdir":"jsii-dist","targets":{},"versionFormat":"full"},"main":"lib/index.js","_from":"file:/Users/guoneng/projects/mdaa/mdaa-pipeline/npmjs-build/mdaa/target/package-build/aws-mdaa-gaia-v2-l3-construct-1.7.0.tgz","types":"lib/index.d.ts","gitHead":"8b49a2b371014baec046605ffdbfe38951099c31","scripts":{"lint":"eslint --max-warnings 0 -c ../../../../../eslint.config.mjs","test":"jest --passWithNoTests --coverage","build":"export JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=1 && jsii --project-references","watch":"jsii -w  --project-references","package":"jsii-pacmak --npmignore=false","test:python":"bash ../../../../../scripts/test/test_python_package.sh python-tests","test:package-docs":"../../../../../scripts/generate_docs/test_package_docs.sh"},"_npmUser":{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"},"_resolved":"/Users/guoneng/projects/mdaa/mdaa-pipeline/npmjs-build/mdaa/target/package-build/aws-mdaa-gaia-v2-l3-construct-1.7.0.tgz","overrides":{"aws-cdk-lib":"2.258.0","@types/babel__traverse":"7.18.2","@aws-cdk/aws-glue-alpha":"2.220.0-alpha.0"},"stability":"experimental","_integrity":"sha512-6c1EJN8+nBEGEXzBp2HxdAButdOal6GmWTU8tMN5IDZ+uo/ZoTf0RFtc/uVZrRIinbF7B/WaMvL2G1sdF9lbVw==","repository":{"url":"git+https://github.com/aws/modern-data-architecture-accelerator.git","type":"git"},"_npmVersion":"10.9.4","description":"MDAA GenAI Accelerator L3 Construct","directories":{},"_nodeVersion":"24.12.0","dependencies":{"cdk-nag":"2.37.55","constructs":"10.6.0","aws-cdk-lib":"2.258.0","@aws-mdaa/construct":"1.7.0","@aws-mdaa/l3-construct":"1.7.0","@aws-mdaa/s3-constructs":"1.7.0","@aws-mdaa/ddb-constructs":"1.7.0","@aws-mdaa/ec2-constructs":"1.7.0","@aws-mdaa/iam-constructs":"1.7.0","@aws-mdaa/kms-constructs":"1.7.0","@aws-mdaa/rds-constructs":"1.7.0","@aws-mdaa/sns-constructs":"1.7.0","@aws-mdaa/sqs-constructs":"1.7.0","@aws-mdaa/iam-role-helper":"1.7.0","@aws-mdaa/custom-constructs":"1.7.0","@aws-mdaa/lambda-constructs":"1.7.0","@aws-mdaa/cloudwatch-constructs":"1.7.0","@aws-mdaa/bedrock-builder-l3-construct":"1.7.0","@aws-mdaa/athena-workgroup-l3-construct":"1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","ts-jest":"29.4.9","ts-node":"10.9.2","constructs":"10.6.0","typescript":"5.9.3","@types/jest":"29.5.0","@types/node":"17.0.23","aws-cdk-lib":"2.258.0","@types/prettier":"2.6.0","@aws-mdaa/testing":"1.7.0","source-map-support":"0.5.21","@aws-mdaa/construct":"1.7.0","@aws-mdaa/l3-construct":"1.7.0","typescript-json-schema":"0.67.4","@aws-mdaa/ddb-constructs":"1.7.0","@aws-mdaa/ec2-constructs":"1.7.0","@aws-mdaa/kms-constructs":"1.7.0","@aws-mdaa/iam-role-helper":"1.7.0","@aws-mdaa/custom-constructs":"1.7.0","@aws-mdaa/lambda-constructs":"1.7.0","@aws-mdaa/datalake-l3-construct":"1.7.0","@aws-mdaa/bedrock-builder-l3-construct":"1.7.0","@aws-mdaa/athena-workgroup-l3-construct":"1.7.0"},"peerDependencies":{"constructs":"10.6.0","aws-cdk-lib":"2.258.0","@aws-mdaa/construct":"1.7.0","@aws-mdaa/l3-construct":"1.7.0","@aws-mdaa/ddb-constructs":"1.7.0","@aws-mdaa/ec2-constructs":"1.7.0","@aws-mdaa/kms-constructs":"1.7.0","@aws-mdaa/iam-role-helper":"1.7.0","@aws-mdaa/custom-constructs":"1.7.0","@aws-mdaa/lambda-constructs":"1.7.0","@aws-mdaa/roles-l3-construct":"1.7.0","@aws-mdaa/datalake-l3-construct":"1.7.0","@aws-mdaa/bedrock-builder-l3-construct":"1.7.0","@aws-mdaa/athena-workgroup-l3-construct":"1.7.0","@aws-mdaa/sm-studio-domain-l3-construct":"1.7.0"},"_npmOperationalInternal":{"tmp":"tmp/gaia-v2-l3-construct_1.7.0_1784277844590_0.5481043429850061","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@aws-mdaa/gaia-v2-l3-construct","version":"1.8.0","author":{"url":"https://aws.amazon.com/solutions","name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-mdaa/gaia-v2-l3-construct@1.8.0","maintainers":[{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"}],"homepage":"https://github.com/aws/modern-data-architecture-accelerator#readme","bugs":{"url":"https://github.com/aws/modern-data-architecture-accelerator/issues"},"dist":{"shasum":"43847b49200822078157bc3e5432cec005aa2488","tarball":"https://registry.npmjs.org/@aws-mdaa/gaia-v2-l3-construct/-/gaia-v2-l3-construct-1.8.0.tgz","fileCount":84,"integrity":"sha512-x8lfdK7oBeOJr5pN2li1WJsUCHsM+A8sKgVBvvGRZZpZEopVzqMyoS3ty/JxqYLd/X/FJE5aznqsSr1EcV9UUA==","signatures":[{"sig":"MEQCIBST2ccDKqeVslFnkTEgasK6C4HD854LvNcz1F26mrzhAiAvJ8QqKKYXNZKROggCDKhXomCay8FpcBa05+8R3aU/qQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2595175},"jsii":{"outdir":"jsii-dist","targets":{},"versionFormat":"full"},"main":"lib/index.js","_from":"file:/Users/guoneng/.cache/mdaa-publish/mdaa/target/package-build/aws-mdaa-gaia-v2-l3-construct-1.8.0.tgz","types":"lib/index.d.ts","gitHead":"8b49a2b371014baec046605ffdbfe38951099c31","scripts":{"lint":"eslint --max-warnings 0 -c ../../../../../eslint.config.mjs","test":"jest --passWithNoTests --coverage","build":"export JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=1 && jsii --project-references","watch":"jsii -w  --project-references","package":"jsii-pacmak --npmignore=false","test:python":"bash ../../../../../scripts/test/test_python_package.sh python-tests","test:package-docs":"../../../../../scripts/generate_docs/test_package_docs.sh"},"_npmUser":{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"},"_resolved":"/Users/guoneng/.cache/mdaa-publish/mdaa/target/package-build/aws-mdaa-gaia-v2-l3-construct-1.8.0.tgz","overrides":{"aws-cdk-lib":"2.261.0","@types/babel__traverse":"7.18.2","@aws-cdk/aws-glue-alpha":"2.220.0-alpha.0"},"stability":"experimental","_integrity":"sha512-x8lfdK7oBeOJr5pN2li1WJsUCHsM+A8sKgVBvvGRZZpZEopVzqMyoS3ty/JxqYLd/X/FJE5aznqsSr1EcV9UUA==","repository":{"url":"git+https://github.com/aws/modern-data-architecture-accelerator.git","type":"git"},"_npmVersion":"10.9.8","description":"MDAA GenAI Accelerator L3 Construct","directories":{},"_nodeVersion":"22.23.1","dependencies":{"cdk-nag":"2.37.55","constructs":"10.6.0","aws-cdk-lib":"2.261.0","@aws-mdaa/construct":"1.8.0","@aws-mdaa/l3-construct":"1.8.0","@aws-mdaa/s3-constructs":"1.8.0","@aws-mdaa/ddb-constructs":"1.8.0","@aws-mdaa/ec2-constructs":"1.8.0","@aws-mdaa/iam-constructs":"1.8.0","@aws-mdaa/kms-constructs":"1.8.0","@aws-mdaa/rds-constructs":"1.8.0","@aws-mdaa/sns-constructs":"1.8.0","@aws-mdaa/sqs-constructs":"1.8.0","@aws-mdaa/iam-role-helper":"1.8.0","@aws-mdaa/custom-constructs":"1.8.0","@aws-mdaa/lambda-constructs":"1.8.0","@aws-mdaa/cloudwatch-constructs":"1.8.0","@aws-mdaa/bedrock-builder-l3-construct":"1.8.0","@aws-mdaa/athena-workgroup-l3-construct":"1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","ts-jest":"29.4.9","ts-node":"10.9.2","constructs":"10.6.0","typescript":"5.9.3","@types/jest":"29.5.0","@types/node":"17.0.23","aws-cdk-lib":"2.261.0","@types/prettier":"2.6.0","@aws-mdaa/testing":"1.8.0","source-map-support":"0.5.21","@aws-mdaa/construct":"1.8.0","@aws-mdaa/l3-construct":"1.8.0","typescript-json-schema":"0.67.4","@aws-mdaa/ddb-constructs":"1.8.0","@aws-mdaa/ec2-constructs":"1.8.0","@aws-mdaa/kms-constructs":"1.8.0","@aws-mdaa/iam-role-helper":"1.8.0","@aws-mdaa/custom-constructs":"1.8.0","@aws-mdaa/lambda-constructs":"1.8.0","@aws-mdaa/datalake-l3-construct":"1.8.0","@aws-mdaa/bedrock-builder-l3-construct":"1.8.0","@aws-mdaa/athena-workgroup-l3-construct":"1.8.0"},"peerDependencies":{"constructs":"10.6.0","aws-cdk-lib":"2.261.0","@aws-mdaa/construct":"1.8.0","@aws-mdaa/l3-construct":"1.8.0","@aws-mdaa/ddb-constructs":"1.8.0","@aws-mdaa/ec2-constructs":"1.8.0","@aws-mdaa/kms-constructs":"1.8.0","@aws-mdaa/iam-role-helper":"1.8.0","@aws-mdaa/custom-constructs":"1.8.0","@aws-mdaa/lambda-constructs":"1.8.0","@aws-mdaa/roles-l3-construct":"1.8.0","@aws-mdaa/datalake-l3-construct":"1.8.0","@aws-mdaa/bedrock-builder-l3-construct":"1.8.0","@aws-mdaa/athena-workgroup-l3-construct":"1.8.0","@aws-mdaa/sm-studio-domain-l3-construct":"1.8.0"},"_npmOperationalInternal":{"tmp":"tmp/gaia-v2-l3-construct_1.8.0_1788288022678_0.7391191374385937","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"@aws-mdaa/gaia-v2-l3-construct","version":"1.8.1","author":{"url":"https://aws.amazon.com/solutions","name":"Amazon Web Services"},"license":"Apache-2.0","_id":"@aws-mdaa/gaia-v2-l3-construct@1.8.1","maintainers":[{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"}],"homepage":"https://github.com/aws/modern-data-architecture-accelerator#readme","bugs":{"url":"https://github.com/aws/modern-data-architecture-accelerator/issues"},"dist":{"shasum":"896549fc247a6c649dee849a0659929de6fbacf2","tarball":"https://registry.npmjs.org/@aws-mdaa/gaia-v2-l3-construct/-/gaia-v2-l3-construct-1.8.1.tgz","fileCount":84,"integrity":"sha512-V2sorE/FSVuhb6+iGW/OkolFnTbsJO6VDj174LBKJVnGmX6UGt6yHeIZMU5kn8mGi9RyR+/+kjff8WBxzN6aZQ==","signatures":[{"sig":"MEUCIQCaOtyHvKza9S4LwCEdktlvTH3Zyfo6rk943gUn549bJgIgG1pK4ExXQMDc7RKWIBwy2EpKSLnNpBJfSgSI8KlPbPw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIELPntZuTJCTLPBN2JV8MHU+k1bFgm6AO5P/cK7qlNGtAiAejVZY+HNPeWkm94zr99PnO+OzvwQaIJA2M+p4MN3IWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2595175},"jsii":{"outdir":"jsii-dist","targets":{},"versionFormat":"full"},"main":"lib/index.js","_from":"file:/Users/guoneng/.cache/mdaa-publish/mdaa/target/package-build/aws-mdaa-gaia-v2-l3-construct-1.8.1.tgz","types":"lib/index.d.ts","gitHead":"8b49a2b371014baec046605ffdbfe38951099c31","scripts":{"lint":"eslint --max-warnings 0 -c ../../../../../eslint.config.mjs","test":"jest --passWithNoTests --coverage","build":"export JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=1 && jsii --project-references","watch":"jsii -w  --project-references","package":"jsii-pacmak --npmignore=false","test:python":"bash ../../../../../scripts/test/test_python_package.sh python-tests","test:package-docs":"../../../../../scripts/generate_docs/test_package_docs.sh"},"_npmUser":{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"},"_resolved":"/Users/guoneng/.cache/mdaa-publish/mdaa/target/package-build/aws-mdaa-gaia-v2-l3-construct-1.8.1.tgz","overrides":{"aws-cdk-lib":"2.261.0","@types/babel__traverse":"7.18.2","@aws-cdk/aws-glue-alpha":"2.220.0-alpha.0"},"stability":"experimental","_integrity":"sha512-V2sorE/FSVuhb6+iGW/OkolFnTbsJO6VDj174LBKJVnGmX6UGt6yHeIZMU5kn8mGi9RyR+/+kjff8WBxzN6aZQ==","repository":{"url":"git+https://github.com/aws/modern-data-architecture-accelerator.git","type":"git"},"_npmVersion":"10.9.8","description":"MDAA GenAI Accelerator L3 Construct","directories":{},"_nodeVersion":"22.23.1","dependencies":{"cdk-nag":"2.37.55","constructs":"10.6.0","aws-cdk-lib":"2.261.0","@aws-mdaa/construct":"1.8.1","@aws-mdaa/l3-construct":"1.8.1","@aws-mdaa/s3-constructs":"1.8.1","@aws-mdaa/ddb-constructs":"1.8.1","@aws-mdaa/ec2-constructs":"1.8.1","@aws-mdaa/iam-constructs":"1.8.1","@aws-mdaa/kms-constructs":"1.8.1","@aws-mdaa/rds-constructs":"1.8.1","@aws-mdaa/sns-constructs":"1.8.1","@aws-mdaa/sqs-constructs":"1.8.1","@aws-mdaa/iam-role-helper":"1.8.1","@aws-mdaa/custom-constructs":"1.8.1","@aws-mdaa/lambda-constructs":"1.8.1","@aws-mdaa/cloudwatch-constructs":"1.8.1","@aws-mdaa/bedrock-builder-l3-construct":"1.8.1","@aws-mdaa/athena-workgroup-l3-construct":"1.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","ts-jest":"29.4.9","ts-node":"10.9.2","constructs":"10.6.0","typescript":"5.9.3","@types/jest":"29.5.0","@types/node":"17.0.23","aws-cdk-lib":"2.261.0","@types/prettier":"2.6.0","@aws-mdaa/testing":"1.8.1","source-map-support":"0.5.21","@aws-mdaa/construct":"1.8.1","@aws-mdaa/l3-construct":"1.8.1","typescript-json-schema":"0.68.0","@aws-mdaa/ddb-constructs":"1.8.1","@aws-mdaa/ec2-constructs":"1.8.1","@aws-mdaa/kms-constructs":"1.8.1","@aws-mdaa/iam-role-helper":"1.8.1","@aws-mdaa/custom-constructs":"1.8.1","@aws-mdaa/lambda-constructs":"1.8.1","@aws-mdaa/datalake-l3-construct":"1.8.1","@aws-mdaa/bedrock-builder-l3-construct":"1.8.1","@aws-mdaa/athena-workgroup-l3-construct":"1.8.1"},"peerDependencies":{"constructs":"10.6.0","aws-cdk-lib":"2.261.0","@aws-mdaa/construct":"1.8.1","@aws-mdaa/l3-construct":"1.8.1","@aws-mdaa/ddb-constructs":"1.8.1","@aws-mdaa/ec2-constructs":"1.8.1","@aws-mdaa/kms-constructs":"1.8.1","@aws-mdaa/iam-role-helper":"1.8.1","@aws-mdaa/custom-constructs":"1.8.1","@aws-mdaa/lambda-constructs":"1.8.1","@aws-mdaa/roles-l3-construct":"1.8.1","@aws-mdaa/datalake-l3-construct":"1.8.1","@aws-mdaa/bedrock-builder-l3-construct":"1.8.1","@aws-mdaa/athena-workgroup-l3-construct":"1.8.1","@aws-mdaa/sm-studio-domain-l3-construct":"1.8.1"},"_npmOperationalInternal":{"tmp":"tmp/gaia-v2-l3-construct_1.8.1_1789417164408_0.9876274694287215","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"_id":"@aws-mdaa/gaia-v2-l3-construct@1.9.0","bugs":{"url":"https://github.com/aws/modern-data-architecture-accelerator/issues"},"dist":{"shasum":"0d373c629eca4312cba163676fbbf4a18146b970","tarball":"https://registry.npmjs.org/@aws-mdaa/gaia-v2-l3-construct/-/gaia-v2-l3-construct-1.9.0.tgz","fileCount":84,"integrity":"sha512-6laYKTeNhEwRTb8GF++FClsqSecppSU7/13nAQ3brVoa1aI/iLBFHJ0j7nmTCvw12eO3s5SDOBlYUpTrMxpFhg==","signatures":[{"sig":"MEYCIQDryq4YX21Q1+regXEW9tKOQIn50MZxpT1V9du+e92rpgIhANoeHR0eIyv9mziFAYp+oYGsgznMw9rW47gT8GO0Yvq1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCddOy4JqeUCOqJm61SnEW8U3is9kqailOuNsQJTQpGtQIgBNuoHDzSFVD9BVZH5w4GbMhj+/pQNFB/9nzR12532xA="}],"unpackedSize":2595521},"jsii":{"outdir":"jsii-dist","targets":{},"versionFormat":"full"},"main":"lib/index.js","name":"@aws-mdaa/gaia-v2-l3-construct","_from":"file:/codebuild/output/src553311566/src/out/mdaa/target/package-build/aws-mdaa-gaia-v2-l3-construct-1.9.0.tgz","types":"lib/index.d.ts","author":{"url":"https://aws.amazon.com/solutions","name":"Amazon Web Services"},"gitHead":"8b49a2b371014baec046605ffdbfe38951099c31","license":"Apache-2.0","scripts":{"lint":"eslint --max-warnings 0 -c ../../../../../eslint.config.mjs","test":"jest --passWithNoTests --coverage","build":"export JSII_SILENCE_WARNING_UNTESTED_NODE_VERSION=1 && jsii --project-references","watch":"jsii -w  --project-references","package":"jsii-pacmak --npmignore=false","test:python":"bash ../../../../../scripts/test/test_python_package.sh python-tests","test:package-docs":"../../../../../scripts/generate_docs/test_package_docs.sh"},"version":"1.9.0","_npmUser":{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"},"homepage":"https://github.com/aws/modern-data-architecture-accelerator#readme","_resolved":"/codebuild/output/src553311566/src/out/mdaa/target/package-build/aws-mdaa-gaia-v2-l3-construct-1.9.0.tgz","overrides":{"aws-cdk-lib":"2.261.0","@types/babel__traverse":"7.18.2","@aws-cdk/aws-glue-alpha":"2.220.0-alpha.0"},"stability":"experimental","_integrity":"sha512-6laYKTeNhEwRTb8GF++FClsqSecppSU7/13nAQ3brVoa1aI/iLBFHJ0j7nmTCvw12eO3s5SDOBlYUpTrMxpFhg==","repository":{"url":"git+https://github.com/aws/modern-data-architecture-accelerator.git","type":"git"},"_npmVersion":"11.7.0","description":"MDAA GenAI Accelerator L3 Construct","directories":{},"maintainers":[{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"}],"_nodeVersion":"22.23.2","dependencies":{"cdk-nag":"2.37.55","constructs":"10.6.0","aws-cdk-lib":"2.261.0","@aws-mdaa/construct":"1.9.0","@aws-mdaa/l3-construct":"1.9.0","@aws-mdaa/s3-constructs":"1.9.0","@aws-mdaa/ddb-constructs":"1.9.0","@aws-mdaa/ec2-constructs":"1.9.0","@aws-mdaa/iam-constructs":"1.9.0","@aws-mdaa/kms-constructs":"1.9.0","@aws-mdaa/rds-constructs":"1.9.0","@aws-mdaa/sns-constructs":"1.9.0","@aws-mdaa/sqs-constructs":"1.9.0","@aws-mdaa/iam-role-helper":"1.9.0","@aws-mdaa/custom-constructs":"1.9.0","@aws-mdaa/lambda-constructs":"1.9.0","@aws-mdaa/cloudwatch-constructs":"1.9.0","@aws-mdaa/bedrock-builder-l3-construct":"1.9.0","@aws-mdaa/athena-workgroup-l3-construct":"1.9.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.5.0","ts-jest":"29.4.9","ts-node":"10.9.2","constructs":"10.6.0","typescript":"5.9.3","@types/jest":"29.5.0","@types/node":"17.0.23","aws-cdk-lib":"2.261.0","@types/prettier":"2.6.0","@aws-mdaa/testing":"1.9.0","source-map-support":"0.5.21","@aws-mdaa/construct":"1.9.0","@aws-mdaa/l3-construct":"1.9.0","typescript-json-schema":"0.68.0","@aws-mdaa/ddb-constructs":"1.9.0","@aws-mdaa/ec2-constructs":"1.9.0","@aws-mdaa/kms-constructs":"1.9.0","@aws-mdaa/iam-role-helper":"1.9.0","@aws-mdaa/custom-constructs":"1.9.0","@aws-mdaa/lambda-constructs":"1.9.0","@aws-mdaa/datalake-l3-construct":"1.9.0","@aws-mdaa/bedrock-builder-l3-construct":"1.9.0","@aws-mdaa/athena-workgroup-l3-construct":"1.9.0"},"peerDependencies":{"constructs":"10.6.0","aws-cdk-lib":"2.261.0","@aws-mdaa/construct":"1.9.0","@aws-mdaa/l3-construct":"1.9.0","@aws-mdaa/ddb-constructs":"1.9.0","@aws-mdaa/ec2-constructs":"1.9.0","@aws-mdaa/kms-constructs":"1.9.0","@aws-mdaa/iam-role-helper":"1.9.0","@aws-mdaa/custom-constructs":"1.9.0","@aws-mdaa/lambda-constructs":"1.9.0","@aws-mdaa/roles-l3-construct":"1.9.0","@aws-mdaa/datalake-l3-construct":"1.9.0","@aws-mdaa/bedrock-builder-l3-construct":"1.9.0","@aws-mdaa/athena-workgroup-l3-construct":"1.9.0","@aws-mdaa/sm-studio-domain-l3-construct":"1.9.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gaia-v2-l3-construct_1.9.0_1790952248894_0.9095935018234078"}}},"time":{"created":"2026-05-22T11:04:18.532Z","modified":"2026-10-02T14:44:09.395Z","1.6.0":"2026-05-22T11:04:18.880Z","1.7.0":"2026-07-17T08:44:04.807Z","1.8.0":"2026-09-01T18:40:22.901Z","1.8.1":"2026-09-14T20:19:24.550Z","1.9.0":"2026-10-02T14:44:08.994Z"},"bugs":{"url":"https://github.com/aws/modern-data-architecture-accelerator/issues"},"author":{"url":"https://aws.amazon.com/solutions","name":"Amazon Web Services"},"license":"Apache-2.0","homepage":"https://github.com/aws/modern-data-architecture-accelerator#readme","repository":{"url":"git+https://github.com/aws/modern-data-architecture-accelerator.git","type":"git"},"description":"MDAA GenAI Accelerator L3 Construct","maintainers":[{"name":"mdaa-dev-team","email":"mdaa-dev-team@amazon.com"}],"readme":"# GenAI Accelerator CDK L3 Construct\n\nThe GenAI Accelerator L3 Construct provides a comprehensive, secure, and scalable foundation for deploying Generative AI applications on AWS. This construct enables rapid deployment of GenAI backends including chat interfaces, RAG (Retrieval-Augmented Generation) capabilities, LLM integrations, and enterprise-grade security features.\n\n***\n\n## Architecture Overview\n\n![gaia-l3-construct](./docs/ai-gaia.png)\n\nThe GenAI Accelerator follows a modern, event-driven serverless architecture designed for scalability, security, and cost optimization. The system is built around three core interaction patterns: real-time chat via WebSocket, RESTful API operations, and asynchronous document processing.\n\n## Deployed Resources\n\n### Deployed Resources and Compliance Details\n\nThe GenAI Accelerator deploys a comprehensive set of AWS resources organized into logical categories. The following sections detail each component's purpose, functionality, and dependencies.\n\n### Core Components\n\nThese are the essential components deployed in every GenAI Accelerator installation:\n\n#### API Infrastructure\n* **Amazon API Gateway (REST API)** - RESTful API for CRUD operations for chat history and feedback collection.\n* **AWS AppSync Event API** - GraphQL-based event API that orchestrates WebSocket message routing and real-time subscriptions between clients and AI model interfaces.\n\n#### Authentication and Security\n* **Amazon Cognito User Pool** - User authentication and management supporting multiple authentication flows including email/password, SAML federation with Active Directory, and integration with existing user pools.\n* **Amazon Cognito User Pool Client** - Application client configuration for OAuth flows, callback URLs, and authentication settings.\n* **AWS KMS Customer Managed Key** - Stack-wide encryption key for all data at rest and in transit with fine-grained access control policies.\n* **AWS Secrets** - Secure storage for sensitive configuration including database credentials, API keys, and security tokens.\n\n#### Data Storage\n* **Amazon DynamoDB - Sessions Table** - Stores chat message history, and conversation metadata with configurable retention policies.\n* **Amazon DynamoDB - Feedback Table** - Captures user feedback, ratings, and analytics data for AI responses.\n\n#### Lambda Functions\n* **REST API Handler** - Processes all REST API requests for chat history and feedback collection.\n* **WebSocket Connection Handler** - Manages WebSocket connection lifecycle.\n\n#### AI Model Integration\n* **Amazon Bedrock Integration** - Native integration with foundation models available on Amazon Bedrock.  [See documentation for complete list of models available on Bedrock.](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html)\n\n#### UI Hosting Infrastructure\n* **Client UI S3 Bucket & CloudFront Distribution** - S3 bucket and CloudFront distribution provisioned for hosting a client-facing web application. No UI is included with MDAA; this infrastructure is ready for deployment of your own custom UI.\n\n* **Admin UI S3 Bucket & CloudFront Distribution** - S3 bucket and CloudFront distribution provisioned for hosting an administrative dashboard. No UI is included with MDAA; this infrastructure is ready for deployment of your own custom UI.\n\n### Optional Components\n\nThese components are deployed based on configuration and feature requirements:\n\n* **Regional WAF** - Protects API Gateway endpoints with configurable rules, CIDR-based access control, and DDoS protection. Can be skipped when using AWS Firewall Manager\n* **Global WAF** - Protects CloudFront distributions with global threat intelligence and custom security rules. Can be skipped when using AWS Firewall Manager\n* **Service Interruption Management** - DynamoDB table and REST API endpoints for managing planned maintenance and service interruptions.\n\n## WAF and Regional Deployment\n\nThe GenAI Accelerator deploys two WAF Web ACLs:\n- **Regional WAF** - Protects API Gateway (deployed in your target region)\n- **Global WAF** - Protects CloudFront distributions (must be deployed in `us-east-1`)\n\n### Deployment Options\n\n#### Option 1: Deploy to us-east-1 (Simplest)\n\nIf you deploy to `us-east-1`, both WAFs are created automatically in the same stack. No additional configuration needed.\n\n#### Option 2: Deploy to Another Region with Pre-Configured Cross-Region Stack\n\nWhen deploying to a region other than `us-east-1`, MDAA will use a cross-region stack in `us-east-1` for the Global WAF. This requires your MDAA configuration to have cross-region stacks pre-configured via `additional_stacks` in your module configuration:\n\n```yaml\n# In mdaa.yaml, at the module level:\nmodules:\n  gaia2:\n    cdk_app: \"@aws-mdaa/gaia-v2\"\n    additional_stacks:\n      - region: 'us-east-1'  # Creates a cross-region stack for Global WAF\n    app_configs:\n      - ./gaia.yaml\n```\n\nFor more details on `additional_stacks` configuration, see [CONFIGURATION.md](../../../../../CONFIGURATION.md).\n\nNote: CDK bootstrap must be established in `us-east-1` for your account before deployment.\n\nIf cross-region stacks are not configured, deployment will fail with:\n```\nError: CloudFront WAF requires a cross-region stack when your primary region is not us-east-1 \n(CloudFront WAF resources must be deployed in us-east-1).\n```\n\n#### Option 3: Bring Your Own Global WAF\n\nCreate a WAF Web ACL in `us-east-1` manually and reference it in your configuration:\n\n```yaml\ngaia:\n  waf:\n    skipGlobalDefaultWaf: true\n    globalWafArn: \"arn:aws:wafv2:us-east-1:123456789012:global/webacl/my-global-waf/a1b2c3d4-...\"\n```\n\nTo create a Global WAF via AWS CLI:\n\n```bash\n# Create IP Set for allowed CIDRs (us-east-1, CLOUDFRONT scope)\nAWS_PAGER=\"\" aws wafv2 create-ip-set \\\n  --name \"gaia-global-ip-allowlist\" \\\n  --scope CLOUDFRONT \\\n  --ip-address-version IPV4 \\\n  --addresses \"203.0.113.0/24\" \"198.51.100.0/24\" \\\n  --region us-east-1\n\n# Note the IP Set ARN from the output, then create the Web ACL\nAWS_PAGER=\"\" aws wafv2 create-web-acl \\\n  --name \"gaia-global-waf\" \\\n  --scope CLOUDFRONT \\\n  --default-action Block={} \\\n  --visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=gaia-global-waf \\\n  --rules '[{\n    \"Name\": \"IPAllowList\",\n    \"Priority\": 0,\n    \"Statement\": {\n      \"IPSetReferenceStatement\": {\n        \"ARN\": \"<IP_SET_ARN_FROM_PREVIOUS_COMMAND>\"\n      }\n    },\n    \"Action\": { \"Allow\": {} },\n    \"VisibilityConfig\": {\n      \"SampledRequestsEnabled\": true,\n      \"CloudWatchMetricsEnabled\": true,\n      \"MetricName\": \"IPAllowList\"\n    }\n  }]' \\\n  --region us-east-1\n```\n\n#### Option 4: Skip Global WAF Entirely\n\nIf you're using AWS Firewall Manager or don't need CloudFront WAF protection:\n\n```yaml\ngaia:\n  waf:\n    skipGlobalDefaultWaf: true\n    # globalWafArn: omit this to have no WAF on CloudFront\n```\n\n> **Security note:** With this configuration, your CloudFront distributions (client UI and admin UI) have no WAF protection. There is no IP allowlisting, rate limiting, or managed rule coverage at the CDN layer. Anyone on the internet can reach the login page and static assets. Cognito authentication still protects the application, but the attack surface is larger. AWS Shield Standard provides basic DDoS protection on CloudFront, but this is much coarser than WAF rules. For production deployments, prefer Option 1, 2, or 3.\n\n### Regional WAF Configuration\n\nThe Regional WAF (for API Gateway) is created in your deployment region by default. To use an existing WAF:\n\n```yaml\ngaia:\n  waf:\n    skipRegionalDefaultWaf: true\n    regionalWafArn: \"arn:aws:wafv2:ca-central-1:123456789012:regional/webacl/my-regional-waf/...\"\n```\n\n### WAF IP Allowlist and NAT Gateway\n\nIf you use WAF with IP allowlisting (`allowedCidrs`), you must include your NAT Gateway's public IP address.\n\nLambda functions send WebSocket responses through AppSync, which is protected by WAF. The Lambda traffic appears to come from your NAT Gateway's public IP. If this IP is not in `allowedCidrs`, Lambda receives `FORBIDDEN` errors and chat responses never reach users.\n\n**Symptoms of misconfiguration:**\n- Chat messages send successfully but responses never arrive\n- Lambda logs show `FORBIDDEN` errors when calling AppSync\n- Users see messages \"hang\" indefinitely\n\n**Solution:** Add your NAT Gateway IP to `allowedCidrs`:\n\n```bash\n# Find your NAT Gateway public IP\nAWS_PAGER=\"\" aws ec2 describe-nat-gateways \\\n  --query 'NatGateways[*].[NatGatewayId,NatGatewayAddresses[0].PublicIp]' \\\n  --output table\n```\n\n## VPC and Networking Requirements\n\nThe GenAI Accelerator deploys Lambda functions inside your VPC. These functions need outbound internet access to reach AWS services including AppSync Events (for WebSocket responses).\n\n**Key requirement:** Subnets must have a route to a NAT Gateway.\n\n> Note that connecting a function to a public subnet doesn't automatically give it an internet access.\n> — [AWS Lambda Documentation](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc-internet.html)\n\n### Why NAT Gateway is Required\n\nLambda functions in a VPC use elastic network interfaces (ENIs) that do not receive public IP addresses. To reach the internet, Lambda traffic must route through a NAT Gateway.\n\nThe subnet's route table must have a route like `0.0.0.0/0 → nat-xxxxx` for Lambda to have outbound internet access.\n\nAdditionally, **AppSync Events does not have a VPC endpoint**, so Lambda must reach it via the public internet. This makes NAT Gateway mandatory for GAIA v2.\n\n### AWS RAM Shared VPCs (Cross-Account)\n\nIf you're using AWS RAM to share a VPC from a network account to your workload account, you must specify the `vpcOwnerAccountId` in your configuration:\n\n```yaml\ngaia:\n  vpc:\n    vpcId: \"vpc-12345678\"\n    appSubnets:\n      - \"subnet-aaaaaaaa\"\n      - \"subnet-bbbbbbbb\"\n    vpcOwnerAccountId: \"222222222222\"  # Network account that owns the VPC\n```\n\n**Why is this needed?**\n\nWhen Lambda creates ENIs in shared subnets, the IAM policy condition `ec2:Vpc` must reference the VPC ARN with the network account ID (the account that owns the VPC), not the workload account ID. Without this setting, Lambda functions will fail to create network interfaces with an authorization error.\n\n**When to use:**\n- Your VPC is shared via AWS RAM from a central network account\n- The subnets belong to a different AWS account than where GAIA is deployed\n\n**When NOT needed:**\n- The VPC exists in the same account where GAIA is deployed\n- You're not using AWS RAM shared VPCs\n\n### Intended Network Architecture\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│ VPC                                                         │\n│  ┌─────────────────────┐    ┌─────────────────────┐        │\n│  │ Subnet (NAT GW)     │    │ Subnet (Lambda)     │        │\n│  │  ┌───────────────┐  │    │  ┌───────────────┐  │        │\n│  │  │ NAT Gateway   │◄─┼────┼──│ Lambda        │  │        │\n│  │  └───────┬───────┘  │    │  └───────────────┘  │        │\n│  └──────────┼──────────┘    └─────────────────────┘        │\n│             │                Route: 0.0.0.0/0 → nat-xxx     │\n└─────────────┼───────────────────────────────────────────────┘\n              │\n              ▼\n         Internet Gateway → AWS Services (AppSync, Bedrock, etc.)\n```\n\n## WebSocket Data Sources\n\nThe GenAI Accelerator supports multiple data source types for the WebSocket chat API. Each data source is implemented as a Lambda function that processes incoming messages and sends responses via AppSync Events.\n\n### Available Data Sources\n\n| Data Source | Description | Use Case |\n|-------------|-------------|----------|\n| `bedrockRagDataSource` | RAG with Bedrock Knowledge Base | Document Q&A with citations |\n| `invokeModelDataSource` | Direct Bedrock model invocation | General chat, no KB needed |\n| `customDataSource` | Bring your own Lambda | Custom processing logic |\n\n### bedrockRagDataSource\n\nUses Bedrock's `RetrieveAndGenerate` API to query a Knowledge Base and generate responses with source citations.\n\n**Features:**\n- Retrieval-augmented generation with Knowledge Base\n- Inline citations and source attribution\n- Bedrock Guardrail integration\n- Custom prompt templates\n- Configurable inference parameters\n\n**Required Configuration:**\n| Property | Description |\n|----------|-------------|\n| `modelId` | Bedrock model ID for generation |\n| `lambdaRole` | IAM role reference for Lambda execution |\n\n**Optional Configuration - RAG Settings:**\n| Property | Description |\n|----------|-------------|\n| `guardrailId` | Bedrock Guardrail ID for content safety |\n| `guardrailKmsKeyArn` | KMS key ARN for Guardrail encryption |\n| `guardrailVersion` | Guardrail version to use |\n| `displayInlineCitations` | Show citation markers in responses (default: false) |\n| `kbNumberOfResults` | Number of documents to retrieve from KB (1-100) |\n| `promptTemplate` | Custom prompt for response generation |\n\n**Optional Configuration - Model Inference:**\n| Property | Description |\n|----------|-------------|\n| `inferenceMaxTokens` | Maximum tokens in response |\n| `inferenceTemperature` | Randomness: 0=deterministic, 1=creative (0.0-1.0) |\n| `inferenceTopP` | Nucleus sampling threshold (0.0-1.0) |\n\n**Optional Configuration - Orchestration (Advanced RAG):**\n| Property | Description |\n|----------|-------------|\n| `orchestrationPromptTemplate` | Custom prompt for query transformation |\n| `orchestrationInferenceMaxTokens` | Max tokens for orchestration inference |\n| `orchestrationInferenceTemperature` | Temperature for orchestration (0.0-1.0) |\n| `orchestrationInferenceTopP` | Top-p for orchestration (0.0-1.0) |\n| `orchestrationInferenceStopSequences` | Stop sequences for orchestration |\n| `orchestrationPerformanceLatency` | Performance vs latency (`standard` or `optimized`) |\n| `orchestrationQueryTransformationType` | Query transformation type (e.g., `QUERY_DECOMPOSITION`) |\n\n**Optional Configuration - Lambda Settings:**\n| Property | Description |\n|----------|-------------|\n| `lambdaArchitecture` | `ARM_64` or `X86_64` (default: X86_64) |\n| `pythonRuntime` | Python runtime version (default: Python 3.14) |\n| `lambdaTimeoutInSeconds` | Lambda timeout (default: 600s) |\n| `lambdaMemorySize` | Lambda memory in MB (default: 1024) |\n| `provisionedConcurrentExecutions` | Pre-warmed Lambda instances |\n| `reservedConcurrentExecutions` | Reserved concurrent executions |\n\n### invokeModelDataSource\n\nDirect invocation of Bedrock foundation models via `invokeModelWithResponseStream`. Simpler configuration when RAG is not needed.\n\n**Features:**\n- Streaming responses from Bedrock models\n- No Knowledge Base required\n- Lower latency (no retrieval step)\n- Service interruption awareness\n\n**Required Configuration:**\n| Property | Description |\n|----------|-------------|\n| `modelId` | Bedrock model ID (e.g., `anthropic.claude-3-sonnet-20240229-v1:0`) |\n| `lambdaRole` | IAM role reference for Lambda execution |\n\n**Optional Configuration - Lambda Settings:**\n| Property | Description |\n|----------|-------------|\n| `lambdaArchitecture` | `ARM_64` or `X86_64` (default: X86_64) |\n| `pythonRuntime` | Python runtime version (default: Python 3.14) |\n| `lambdaTimeoutInSeconds` | Lambda timeout (default: 600s) |\n| `lambdaMemorySize` | Lambda memory in MB (default: 1024) |\n| `provisionedConcurrentExecutions` | Pre-warmed Lambda instances |\n| `reservedConcurrentExecutions` | Reserved concurrent executions |\n\n### customDataSource\n\nAllows integration of a custom Lambda function for complete control over message processing.\n\n**Required Configuration:**\n| Property | Description |\n|----------|-------------|\n| `lambdaArn` | ARN of your custom Lambda function |\n\n## REST API Reference\n\nAll REST API endpoints are served under the `/v1` prefix and require Cognito authentication.\n\n### Direct API Gateway Access\n\nBy default, the REST API requires requests to come through CloudFront, which adds an `X-Origin-Verify` header for origin verification. This provides defense-in-depth security.\n\nTo allow direct API Gateway access (bypassing CloudFront), set the Lambda environment variable:\n\n```\nREQUIRE_ORIGIN_VERIFY=false\n```\n\nWhen disabled:\n- Requests can be made directly to the API Gateway endpoint\n- Authentication still relies on the Cognito authorizer (primary auth mechanism)\n- Useful for testing, internal integrations, or architectures without CloudFront\n\nWhen enabled (default):\n- Requests must include the correct `X-Origin-Verify` header (added by CloudFront)\n- Requests bypassing CloudFront receive a 403 Forbidden response\n\n### Sessions API\n\nThe Sessions API manages chat conversation history. Each session represents a conversation thread with the AI, storing the full message history for context continuity. Sessions are automatically created when users start chatting and can be retrieved to resume conversations or review past interactions.\n\n| Method | Endpoint | Description | Auth |\n|--------|----------|-------------|------|\n| `GET` | `/v1/sessions` | List all sessions for the current user | User |\n| `GET` | `/v1/sessions/<session_id>` | Get a specific session with full chat history | User |\n| `DELETE` | `/v1/sessions` | Delete all sessions for the current user | User |\n| `DELETE` | `/v1/sessions/<session_id>` | Delete a specific session | User |\n| `GET` | `/v1/admin/sessions` | List all sessions across all users (paginated) | Admin |\n| `GET` | `/v1/users/<user_id>/sessions` | List all sessions for a specific user | Admin |\n| `GET` | `/v1/users/<user_id>/sessions/<session_id>` | Get a specific session for any user | Admin |\n\nSession list response:\n```json\n{\n  \"id\": \"session-uuid\",\n  \"title\": \"First message from user...\",\n  \"dateModified\": 1703894400\n}\n```\n\nSession detail response (includes full chat history):\n```json\n{\n  \"id\": \"session-uuid\",\n  \"title\": \"First message from user...\",\n  \"dateModified\": 1703894400,\n  \"userId\": \"user-sub\",\n  \"history\": [\n    {\n      \"id\": \"message-uuid\",\n      \"role\": \"user\",\n      \"content\": \"What is Amazon S3?\"\n    },\n    {\n      \"id\": \"message-uuid\",\n      \"role\": \"assistant\",\n      \"content\": \"Amazon S3 is...\",\n      \"parts\": [\n        {\n          \"type\": \"text\",\n          \"text\": \"Amazon S3 is...\",\n          \"citationSpans\": [{\"span\": {...}, \"refIndex\": 0}]\n        },\n        {\n          \"type\": \"source\",\n          \"documents\": [{\"title\": \"...\", \"uri\": \"s3://...\", \"excerpt\": \"...\"}]\n        }\n      ],\n      \"metadata\": {\n        \"modelId\": \"anthropic.claude-3-sonnet-20240229-v1:0\",\n        \"responseTimeMs\": 1523\n      }\n    }\n  ]\n}\n```\n\nHistory message fields:\n- `parts` (assistant messages only): Rich content array for RAG responses\n  - `type: \"text\"`: Contains the response text and `citationSpans` for inline citation positions\n  - `type: \"source\"`: Contains retrieved `documents` with title, URI, and excerpt\n- `metadata` (assistant messages only): Response metadata including `modelId` and `responseTimeMs`\n\n### Pagination\n\nPaginated endpoints (`GET /v1/admin/sessions`, `GET /v1/feedback`, `GET /v1/admin/feedback`) accept a `limit` query parameter and, when more results are available, return a `next_token` in the response body:\n\n```json\n{\n  \"sessions\": [ ... ],\n  \"next_token\": \"v1.aBcD...\"\n}\n```\n\nTo fetch the next page, pass the value back unchanged as the `next_token` query parameter. The token is **opaque** and **versioned** (the `v1.` prefix identifies the format): it is an encrypted, integrity-protected encoding of the server's internal pagination cursor. Clients must treat it as a meaningless string — do not decode, construct, or modify it. A token that has been tampered with, or one issued for a different endpoint or user, is rejected with `400 Invalid next_token`. Tokens are not guaranteed to remain valid across service deployments.\n\n### Feedback API\n\nThe Feedback API enables collecting user ratings on AI responses for quality monitoring and improvement. Users can submit thumbs up/down ratings with configurable reasons (e.g., \"accuracy\", \"unhelpful\") and optional free-text feedback. This data can be used for analytics dashboards, model fine-tuning decisions, and compliance auditing.\n\nConfigure available feedback reasons in your `gaia.yaml`:\n```yaml\ngaia:\n  userFeedback:\n    reasons:\n      - \"accuracy\"\n      - \"unhelpful\"\n      - \"app_issue\"\n      - \"other\"\n```\n\n| Method | Endpoint | Description | Auth |\n|--------|----------|-------------|------|\n| `POST` | `/v1/feedback` | Submit feedback for an AI response | User |\n| `GET` | `/v1/feedback` | Get current user's feedback history (paginated) | User |\n| `GET` | `/v1/feedback/<feedback_id>` | Get a specific feedback entry | User/Admin |\n| `GET` | `/v1/admin/feedback` | Get all feedback in a date range (paginated) | Admin |\n\nFeedback payload:\n```json\n{\n  \"session_id\": \"uuid\",\n  \"message_id\": \"uuid\",\n  \"rating\": \"thumbs_up | thumbs_down\",\n  \"reason\": \"accuracy\",\n  \"text_feedback\": \"Optional detailed feedback\"\n}\n```\n\n### Bot Management API (Optional)\n\nAdmin-only endpoints for managing service interruptions. Requires `SERVICE_INTERRUPTION_TABLE_NAME` to be configured.\n\n| Method | Endpoint | Description | Auth |\n|--------|----------|-------------|------|\n| `POST` | `/v1/bot-management/interruptions` | Activate a service interruption | Admin |\n| `GET` | `/v1/bot-management/interruptions` | Get status of all service interruptions | Admin |\n| `GET` | `/v1/bot-management/interruptions/<service_type>` | Get status of a specific service interruption | Admin |\n| `DELETE` | `/v1/bot-management/interruptions/<service_type>` | Deactivate a service interruption | Admin |\n| `GET` | `/v1/bot-management/service-types` | List available service types | Admin |\n| `GET` | `/v1/bot-management/health` | Health check for bot management | Admin |\n\nValid service types: `global`, `bedrock-rag`, `bedrock-invoke-model`, `bedrock-strands-agents`\n\n## WebSocket API Reference (AppSync Events)\n\nThe GenAI Accelerator uses AWS AppSync Events for real-time chat communication. Clients connect via WebSocket to send messages and receive streaming AI responses.\n\n### Connection\n\nConnect to the AppSync Events endpoint using the WebSocket URL from your deployment outputs. Authentication is via Cognito JWT token in the `Authorization` header.\n\n### Channel Structure\n\nChannels follow the pattern `/namespace/{userId}/{sessionId}`:\n\n| Namespace | Purpose |\n|-----------|---------|\n| `/in/{userId}/{sessionId}` | Client publishes messages to this channel (ingress) |\n| `/out/{userId}/{sessionId}` | Client subscribes to this channel to receive responses (egress) |\n\nUsers can only subscribe to channels matching their own `userId` (enforced by the `sub` claim in the JWT).\n\n### Sending Messages (Publish to `/in`)\n\nPublish a message to start a chat interaction:\n\n```json\n{\n  \"payload\": {\n    \"text\": \"What is Amazon S3?\",\n    \"sessionId\": \"550e8400-e29b-41d4-a716-446655440000\"\n  }\n}\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `text` | string | Yes | The user's message/question |\n| `sessionId` | string | Yes | UUID identifying the chat session |\n\n### Receiving Messages (Subscribe to `/out`)\n\nSubscribe to the `/out/{userId}/{sessionId}` channel to receive streaming responses. Messages arrive as events with the following structure:\n\n```json\n{\n  \"id\": \"content-uuid\",\n  \"content\": {\n    \"type\": \"<message_type>\",\n    ...\n  }\n}\n```\n\n### Message Types\n\n#### `textDelta` - Streaming Text Chunk\n\nSent incrementally as the AI generates its response. Collect and concatenate these to build the full response.\n\n```json\n{\n  \"id\": \"abc123\",\n  \"content\": {\n    \"type\": \"textDelta\",\n    \"sequenceNumber\": 0,\n    \"text\": \"Amazon S3 is \"\n  }\n}\n```\n\n| Field | Description |\n|-------|-------------|\n| `type` | Always `\"textDelta\"` |\n| `sequenceNumber` | Incrementing number for ordering chunks |\n| `text` | The text fragment for this chunk |\n\nWhen `textDelta` messages stop arriving, the response is complete. There is no explicit \"end\" message for text streaming.\n\n#### `citationEvent` - Inline Citation Marker (RAG only)\n\nSent when inline citations are enabled (`displayInlineCitations: true`). Indicates where a citation should be inserted in the response text.\n\n```json\n{\n  \"id\": \"abc123\",\n  \"content\": {\n    \"type\": \"citationEvent\",\n    \"sequenceNumber\": 5,\n    \"position\": 142,\n    \"citationNumber\": 1,\n    \"citationText\": \"relevant excerpt from source\",\n    \"documentIndex\": 0\n  }\n}\n```\n\n| Field | Description |\n|-------|-------------|\n| `position` | Character position in the response where citation applies |\n| `citationNumber` | Display number for the citation (1-indexed) |\n| `citationText` | The text span this citation covers |\n| `documentIndex` | Index into the `source` documents array |\n\n#### `source` - Retrieved Documents (RAG only)\n\nSent after text streaming completes. Contains the source documents used for RAG responses.\n\n```json\n{\n  \"id\": \"abc123\",\n  \"content\": {\n    \"type\": \"source\",\n    \"documents\": [\n      {\n        \"title\": \"Document Title\",\n        \"uri\": \"s3://bucket/path/to/doc.pdf\",\n        \"excerpt\": \"Relevant excerpt from the document...\"\n      }\n    ]\n  }\n}\n```\n\n#### `error` - Error Response\n\nSent when an error occurs during processing.\n\n```json\n{\n  \"type\": \"text\",\n  \"action\": \"error\",\n  \"id\": \"error-uuid\",\n  \"connectionId\": \"session-id\",\n  \"userId\": \"user-id\",\n  \"timestamp\": 1703894400,\n  \"data\": {\n    \"sessionId\": \"session-id\",\n    \"content\": \"Error message describing what went wrong\",\n    \"type\": \"text\"\n  }\n}\n```\n\n### Typical Message Flow\n\n1. Client publishes message to `/in/{userId}/{sessionId}`\n2. Client receives multiple `textDelta` messages (streaming response)\n3. Client receives `citationEvent` messages (if RAG with inline citations)\n4. Client receives `source` message with documents (if RAG)\n5. Streaming is complete when messages stop arriving\n\n### Service Interruptions\n\nWhen a service interruption is active, the response will be a single `textDelta` containing the interruption message instead of an AI-generated response.\n\n","readmeFilename":"README.md"}