@intentius/chant-lexicon-aws 0.124.30 → 0.124.32
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/dist/actions/dynamodb.js +41 -0
- package/dist/actions/ecr.js +9 -0
- package/dist/actions/ecs.js +5 -0
- package/dist/actions/iam.js +3 -0
- package/dist/actions/index.js +9 -0
- package/dist/actions/lambda.js +11 -0
- package/dist/actions/logs.js +4 -0
- package/dist/actions/s3.js +40 -0
- package/dist/actions/sns.js +5 -0
- package/dist/actions/sqs.js +15 -0
- package/dist/agentcore/trace-fetch.d.ts.map +1 -1
- package/dist/agentcore/trace-fetch.js +472 -0
- package/dist/agentcore/trace-render.js +359 -0
- package/dist/ambient.js +148 -0
- package/dist/api/credential-chain.d.ts +30 -3
- package/dist/api/credential-chain.d.ts.map +1 -1
- package/dist/api/credential-chain.js +509 -0
- package/dist/api/read-client.d.ts +16 -43
- package/dist/api/read-client.d.ts.map +1 -1
- package/dist/api/read-client.js +458 -0
- package/dist/api/sigv4.d.ts +4 -4
- package/dist/api/sigv4.js +185 -0
- package/dist/behaviour-kinds.js +114 -0
- package/dist/caller-identity.d.ts +3 -5
- package/dist/caller-identity.d.ts.map +1 -1
- package/dist/caller-identity.js +146 -0
- package/dist/codegen/docs-cli.js +2 -0
- package/dist/codegen/docs.js +120 -0
- package/dist/codegen/enum-overlay.js +162 -0
- package/dist/codegen/extensions.js +139 -0
- package/dist/codegen/fallback.js +32 -0
- package/dist/codegen/generate-cli.js +15 -0
- package/dist/codegen/generate-lexicon.js +70 -0
- package/dist/codegen/generate-typescript.js +226 -0
- package/dist/codegen/generate.d.ts.map +1 -1
- package/dist/codegen/generate.js +234 -0
- package/dist/codegen/naming.js +135 -0
- package/dist/codegen/package.js +67 -0
- package/dist/codegen/patches.d.ts +26 -1
- package/dist/codegen/patches.d.ts.map +1 -1
- package/dist/codegen/patches.js +90 -0
- package/dist/codegen/property-overlay.js +85 -0
- package/dist/codegen/property-overlay.json +1 -16
- package/dist/codegen/sam.js +402 -0
- package/dist/codegen/typecheck.js +4 -0
- package/dist/codegen/versions.js +31 -0
- package/dist/components/__tests__/mock-cloud-executor.js +326 -0
- package/dist/components/apply.d.ts +44 -1
- package/dist/components/apply.d.ts.map +1 -1
- package/dist/components/apply.js +752 -0
- package/dist/components/builders.js +37 -0
- package/dist/components/capability-plugin.js +66 -0
- package/dist/components/cloud-executor.d.ts +35 -0
- package/dist/components/cloud-executor.d.ts.map +1 -1
- package/dist/components/cloud-executor.js +576 -0
- package/dist/components/config-bom.js +207 -0
- package/dist/components/host-delivery.js +117 -0
- package/dist/components/index.js +18 -0
- package/dist/components/job-submission.js +77 -0
- package/dist/components/publish.js +234 -0
- package/dist/components/safety.js +62 -0
- package/dist/components/wait-aws.js +68 -0
- package/dist/composites/agentcore-agent.js +187 -0
- package/dist/composites/agentcore-trust-policy.js +13 -0
- package/dist/composites/alb-shared.js +84 -0
- package/dist/composites/bucket-deployment.js +93 -0
- package/dist/composites/catalog.js +2714 -0
- package/dist/composites/dynamodb-table.js +66 -0
- package/dist/composites/ec2-instance-bundle.js +75 -0
- package/dist/composites/ec2-instance-role.js +26 -0
- package/dist/composites/ecr-repository.js +64 -0
- package/dist/composites/ecs-trust-policy.js +10 -0
- package/dist/composites/efs-with-access-point.js +44 -0
- package/dist/composites/eks-cluster.js +118 -0
- package/dist/composites/fargate-alb.js +216 -0
- package/dist/composites/fargate-service.js +222 -0
- package/dist/composites/index.js +28 -0
- package/dist/composites/lambda-api.js +15 -0
- package/dist/composites/lambda-dynamodb.js +77 -0
- package/dist/composites/lambda-eventbridge.js +27 -0
- package/dist/composites/lambda-function.js +54 -0
- package/dist/composites/lambda-s3.js +93 -0
- package/dist/composites/lambda-sns.js +23 -0
- package/dist/composites/lambda-sqs.js +34 -0
- package/dist/composites/landing-zone.js +82 -0
- package/dist/composites/microvm-app.js +293 -0
- package/dist/composites/minimal-vpc.js +40 -0
- package/dist/composites/monitoring-stack.js +105 -0
- package/dist/composites/nlb-service.js +61 -0
- package/dist/composites/rds-instance.js +98 -0
- package/dist/composites/scheduled-lambda.js +28 -0
- package/dist/composites/solr-fargate-service.js +33 -0
- package/dist/composites/step-functions-workflow.js +78 -0
- package/dist/composites/vpc-default.js +132 -0
- package/dist/condition.js +43 -0
- package/dist/coverage.js +4 -0
- package/dist/deep-observe.d.ts.map +1 -1
- package/dist/deep-observe.js +709 -0
- package/dist/deep-topology.js +226 -0
- package/dist/default-tags.js +50 -0
- package/dist/defaults.js +85 -0
- package/dist/dependencies.js +269 -0
- package/dist/detect.js +21 -0
- package/dist/disruption.d.ts.map +1 -1
- package/dist/disruption.js +129 -0
- package/dist/effect-receipt-row.js +107 -0
- package/dist/generated/index.d.ts +1297 -82
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/generated/index.js +12382 -0
- package/dist/generated/runtime.js +4 -0
- package/dist/governance.js +131 -0
- package/dist/identity-observe.d.ts.map +1 -1
- package/dist/identity-observe.js +127 -0
- package/dist/import/generator.js +757 -0
- package/dist/import/live-export.js +34 -0
- package/dist/import/parser.js +394 -0
- package/dist/index.js +69 -0
- package/dist/integrity.json +6 -6
- package/dist/intrinsics.js +393 -0
- package/dist/lint/audit-catalog.js +87 -0
- package/dist/lint/audit-lineage.js +150 -0
- package/dist/lint/post-synth/cf-refs.js +247 -0
- package/dist/lint/post-synth/cor020.js +60 -0
- package/dist/lint/post-synth/ext001.d.ts.map +1 -1
- package/dist/lint/post-synth/ext001.js +197 -0
- package/dist/lint/post-synth/index.js +124 -0
- package/dist/lint/post-synth/waw010.js +41 -0
- package/dist/lint/post-synth/waw011.js +41 -0
- package/dist/lint/post-synth/waw013.js +38 -0
- package/dist/lint/post-synth/waw014.js +42 -0
- package/dist/lint/post-synth/waw015.js +88 -0
- package/dist/lint/post-synth/waw016.d.ts.map +1 -1
- package/dist/lint/post-synth/waw016.js +116 -0
- package/dist/lint/post-synth/waw017.js +43 -0
- package/dist/lint/post-synth/waw018.js +61 -0
- package/dist/lint/post-synth/waw019.js +64 -0
- package/dist/lint/post-synth/waw020.js +56 -0
- package/dist/lint/post-synth/waw021.js +44 -0
- package/dist/lint/post-synth/waw022.js +36 -0
- package/dist/lint/post-synth/waw023.js +40 -0
- package/dist/lint/post-synth/waw024.js +46 -0
- package/dist/lint/post-synth/waw025.js +36 -0
- package/dist/lint/post-synth/waw026.js +38 -0
- package/dist/lint/post-synth/waw027.js +41 -0
- package/dist/lint/post-synth/waw028.js +39 -0
- package/dist/lint/post-synth/waw029.js +54 -0
- package/dist/lint/post-synth/waw030.js +282 -0
- package/dist/lint/post-synth/waw031.js +58 -0
- package/dist/lint/post-synth/waw032.js +45 -0
- package/dist/lint/post-synth/waw033.js +75 -0
- package/dist/lint/post-synth/waw034.js +52 -0
- package/dist/lint/post-synth/waw035.js +56 -0
- package/dist/lint/post-synth/waw036.js +79 -0
- package/dist/lint/post-synth/waw037.js +67 -0
- package/dist/lint/post-synth/waw038.js +42 -0
- package/dist/lint/post-synth/waw039.js +42 -0
- package/dist/lint/post-synth/waw040.js +45 -0
- package/dist/lint/post-synth/waw041.js +40 -0
- package/dist/lint/post-synth/waw042.js +99 -0
- package/dist/lint/post-synth/waw043.js +51 -0
- package/dist/lint/post-synth/waw044.js +64 -0
- package/dist/lint/post-synth/waw045.js +49 -0
- package/dist/lint/post-synth/waw046.js +52 -0
- package/dist/lint/post-synth/waw047.js +43 -0
- package/dist/lint/post-synth/waw048.js +40 -0
- package/dist/lint/post-synth/waw049.js +78 -0
- package/dist/lint/post-synth/waw050.js +44 -0
- package/dist/lint/post-synth/waw051.js +41 -0
- package/dist/lint/post-synth/waw052.js +43 -0
- package/dist/lint/post-synth/waw053.js +43 -0
- package/dist/lint/post-synth/waw054.js +41 -0
- package/dist/lint/post-synth/waw055.js +41 -0
- package/dist/lint/post-synth/waw056.js +65 -0
- package/dist/lint/post-synth/waw057.js +43 -0
- package/dist/lint/post-synth/waw058.js +61 -0
- package/dist/lint/post-synth/waw059.js +338 -0
- package/dist/lint/post-synth/waw060.js +83 -0
- package/dist/lint/post-synth/waw061.js +60 -0
- package/dist/lint/post-synth/waw062.js +0 -0
- package/dist/lint/post-synth/waw063.js +0 -0
- package/dist/lint/post-synth/waw064.js +45 -0
- package/dist/lint/post-synth/waw065.js +104 -0
- package/dist/lint/post-synth/waw066.js +145 -0
- package/dist/lint/post-synth/waw067.js +115 -0
- package/dist/lint/post-synth/waw068.js +69 -0
- package/dist/lint/post-synth/waw069.js +0 -0
- package/dist/lint/rules/hardcoded-region.js +38 -0
- package/dist/lint/rules/iam-wildcard.js +60 -0
- package/dist/lint/rules/index.js +6 -0
- package/dist/lint/rules/s3-encryption.js +60 -0
- package/dist/live-attrs.js +42 -0
- package/dist/lsp/completions.d.ts.map +1 -1
- package/dist/lsp/completions.js +18 -0
- package/dist/lsp/hover.d.ts.map +1 -1
- package/dist/lsp/hover.js +66 -0
- package/dist/manifest.json +1 -1
- package/dist/mapping.js +33 -0
- package/dist/meta.json +17359 -784
- package/dist/nested-stack.js +95 -0
- package/dist/okf/index.md +203 -0
- package/dist/okf/rules/EXT001.md +1 -0
- package/dist/okf/rules/WAW016.md +2 -0
- package/dist/okf/rules/WAW019.md +1 -0
- package/dist/okf/rules/WAW028.md +1 -0
- package/dist/okf/rules/WAW030.md +2 -0
- package/dist/okf/rules/WAW039.md +1 -0
- package/dist/okf/rules/WAW049.md +1 -0
- package/dist/okf/rules/WAW056.md +1 -0
- package/dist/okf/rules/WAW058.md +1 -0
- package/dist/okf/rules/WAW062.md +1 -0
- package/dist/okf/rules/WAW064.md +1 -0
- package/dist/okf/rules/WAW065.md +1 -0
- package/dist/okf/rules/WAW066.md +1 -0
- package/dist/okf/rules/WAW067.md +1 -0
- package/dist/okf/rules/WAW068.md +1 -0
- package/dist/okf/rules/WAW069.md +4 -0
- package/dist/okf/types/AIWorkloadConfig.md +23 -0
- package/dist/okf/types/ARCRegionSwitchPlan.md +1 -0
- package/dist/okf/types/AccountAccessApplication.md +28 -0
- package/dist/okf/types/AccountAccessEntitlement.md +22 -0
- package/dist/okf/types/ActionTarget.md +20 -0
- package/dist/okf/types/AdConfiguration.md +21 -0
- package/dist/okf/types/Adapter.md +26 -0
- package/dist/okf/types/AgentContext.md +35 -0
- package/dist/okf/types/AgentGoal.md +31 -0
- package/dist/okf/types/AgentProfile.md +34 -0
- package/dist/okf/types/Alarm.md +3 -1
- package/dist/okf/types/AlarmModel.md +14 -9
- package/dist/okf/types/AmplifyWebhook.md +25 -0
- package/dist/okf/types/ApiCache.md +8 -8
- package/dist/okf/types/ApiGatewayManagedOverrides.md +5 -5
- package/dist/okf/types/AppAuthorization.md +35 -0
- package/dist/okf/types/AppBlockBuilder.md +1 -0
- package/dist/okf/types/AppInstance.md +2 -2
- package/dist/okf/types/AppInstanceBot.md +2 -2
- package/dist/okf/types/AppStreamFleet.md +3 -2
- package/dist/okf/types/AppSyncApiKey.md +6 -6
- package/dist/okf/types/AppSyncType.md +22 -0
- package/dist/okf/types/ApplicationStatusCheck.md +36 -0
- package/dist/okf/types/ApplicationVersion.md +4 -1
- package/dist/okf/types/ApplicationsList.md +26 -0
- package/dist/okf/types/ApprovalPolicy.md +28 -0
- package/dist/okf/types/ArchiveRule.md +24 -0
- package/dist/okf/types/Asset.md +30 -0
- package/dist/okf/types/Backup.md +31 -0
- package/dist/okf/types/BedrockAgentCoreDataset.md +1 -1
- package/dist/okf/types/BedrockAgentCoreGateway.md +3 -0
- package/dist/okf/types/BedrockSession.md +28 -0
- package/dist/okf/types/BillEstimate.md +35 -0
- package/dist/okf/types/Brand.md +32 -0
- package/dist/okf/types/CallAnalyticsCategory.md +25 -0
- package/dist/okf/types/Campaign.md +28 -0
- package/dist/okf/types/CapacityProvider.md +30 -0
- package/dist/okf/types/Case.md +24 -0
- package/dist/okf/types/CertificateAssociation.md +13 -0
- package/dist/okf/types/ChangeSet.md +36 -0
- package/dist/okf/types/ChannelFlow.md +29 -0
- package/dist/okf/types/ChimeChannel.md +39 -0
- package/dist/okf/types/Classifier.md +6 -6
- package/dist/okf/types/ClientVpnAuthorizationRule.md +6 -6
- package/dist/okf/types/ClientVpnEndpoint.md +2 -0
- package/dist/okf/types/ClientVpnRoute.md +5 -5
- package/dist/okf/types/CloudConnector.md +29 -0
- package/dist/okf/types/Cluster.md +39 -0
- package/dist/okf/types/ClusterSchedulerConfig.md +30 -0
- package/dist/okf/types/CodeCommitRepository.md +12 -12
- package/dist/okf/types/CodeConnectionsHost.md +26 -0
- package/dist/okf/types/CodeRepository.md +5 -5
- package/dist/okf/types/CompositeAlarm.md +1 -0
- package/dist/okf/types/ComputeEnvironment.md +2 -0
- package/dist/okf/types/ComputeNodeGroup.md +1 -1
- package/dist/okf/types/ComputeQuota.md +34 -0
- package/dist/okf/types/ConfigRule.md +1 -1
- package/dist/okf/types/ConfigurationRecorder.md +7 -6
- package/dist/okf/types/ConnectAttachment.md +2 -0
- package/dist/okf/types/ConnectQueue.md +5 -1
- package/dist/okf/types/ConnectVocabulary.md +28 -0
- package/dist/okf/types/ConnectionType.md +24 -0
- package/dist/okf/types/ConsentPortal.md +33 -0
- package/dist/okf/types/ContactMethod.md +29 -0
- package/dist/okf/types/ContainerAssociation.md +26 -0
- package/dist/okf/types/ContainerFleet.md +1 -1
- package/dist/okf/types/ContainerGroupDefinition.md +1 -1
- package/dist/okf/types/Content.md +40 -0
- package/dist/okf/types/ContentAssociation.md +28 -0
- package/dist/okf/types/CustomDetectionRuleAssociation.md +28 -0
- package/dist/okf/types/CustomEntityType.md +4 -9
- package/dist/okf/types/Customization.md +22 -0
- package/dist/okf/types/CwIntegration.md +31 -0
- package/dist/okf/types/DAXParameterGroup.md +3 -8
- package/dist/okf/types/DAXSubnetGroup.md +0 -5
- package/dist/okf/types/DBClusterEndpoint.md +31 -0
- package/dist/okf/types/DBProxyTargetGroup.md +1 -0
- package/dist/okf/types/DBSnapshot.md +62 -0
- package/dist/okf/types/DLMLifecyclePolicy.md +12 -12
- package/dist/okf/types/DLPSetting.md +31 -0
- package/dist/okf/types/DMSInstanceProfile.md +1 -1
- package/dist/okf/types/DRSLaunchConfigurationTemplate.md +28 -0
- package/dist/okf/types/Daemon.md +1 -0
- package/dist/okf/types/DataExchangeDataSet.md +29 -0
- package/dist/okf/types/DataIntegrationFlow.md +27 -0
- package/dist/okf/types/DataMigration.md +1 -1
- package/dist/okf/types/DataProvider.md +2 -1
- package/dist/okf/types/DataQualityRuleset.md +6 -11
- package/dist/okf/types/DataSource.md +23 -0
- package/dist/okf/types/Dataset.md +20 -0
- package/dist/okf/types/DatasetIntegration.md +23 -0
- package/dist/okf/types/DbCluster.md +1 -1
- package/dist/okf/types/DbInstance.md +8 -2
- package/dist/okf/types/DeadlineBudget.md +29 -0
- package/dist/okf/types/DelegationSet.md +23 -0
- package/dist/okf/types/DeliveryChannel.md +6 -11
- package/dist/okf/types/DevOpsAgentAgentSpace.md +4 -0
- package/dist/okf/types/DevOpsAgentService.md +1 -0
- package/dist/okf/types/DevOpsAgentTrigger.md +28 -0
- package/dist/okf/types/DirectConnectGatewayAttachment.md +2 -0
- package/dist/okf/types/Directory.md +60 -0
- package/dist/okf/types/DocDBDBClusterParameterGroup.md +5 -10
- package/dist/okf/types/DocDBDBSubnetGroup.md +4 -9
- package/dist/okf/types/DocDBElasticClusterSnapshot.md +36 -0
- package/dist/okf/types/DocumentClassifierEndpoint.md +27 -0
- package/dist/okf/types/Domain.md +27 -0
- package/dist/okf/types/EKSCertificateAuthority.md +42 -0
- package/dist/okf/types/EKSCluster.md +8 -0
- package/dist/okf/types/EcSnapshot.md +66 -0
- package/dist/okf/types/EmailIdentityCertificate.md +15 -0
- package/dist/okf/types/EndpointConfig.md +14 -13
- package/dist/okf/types/EntityRecognizer.md +27 -0
- package/dist/okf/types/EntityRecognizerEndpoint.md +31 -0
- package/dist/okf/types/EnvironmentEC2.md +13 -13
- package/dist/okf/types/EvaluationForm.md +1 -0
- package/dist/okf/types/Evaluator.md +6 -2
- package/dist/okf/types/EventAction.md +26 -0
- package/dist/okf/types/EventRule.md +2 -0
- package/dist/okf/types/EventSource.md +30 -0
- package/dist/okf/types/EventTracker.md +22 -0
- package/dist/okf/types/EventsV2EventBus.md +28 -0
- package/dist/okf/types/EventsV2ResourcePolicy.md +19 -0
- package/dist/okf/types/EventsV2Subscriber.md +39 -0
- package/dist/okf/types/ExperimentDefinition.md +39 -0
- package/dist/okf/types/ExperimentRun.md +33 -0
- package/dist/okf/types/ExperimentTrialComponent.md +13 -11
- package/dist/okf/types/FHIRDatastore.md +3 -0
- package/dist/okf/types/FSxSnapshot.md +5 -5
- package/dist/okf/types/FSxVolume.md +9 -9
- package/dist/okf/types/FeaturedResultsSet.md +26 -0
- package/dist/okf/types/Feed.md +1 -0
- package/dist/okf/types/FieldLevelEncryptionConfig.md +25 -0
- package/dist/okf/types/FieldLevelEncryptionProfile.md +22 -0
- package/dist/okf/types/FileCache.md +45 -0
- package/dist/okf/types/Filter.md +27 -0
- package/dist/okf/types/Firewall.md +6 -0
- package/dist/okf/types/FlowMediaStream.md +28 -0
- package/dist/okf/types/FlowOutput.md +1 -0
- package/dist/okf/types/FpgaImage.md +38 -0
- package/dist/okf/types/Function.md +2 -2
- package/dist/okf/types/Gateway.md +41 -0
- package/dist/okf/types/GatewayClusterAssociations.md +23 -0
- package/dist/okf/types/GatewayRateLimit.md +26 -0
- package/dist/okf/types/GatewayRule.md +32 -0
- package/dist/okf/types/GlobalReplicationGroup.md +3 -0
- package/dist/okf/types/GlobalResolver.md +1 -1
- package/dist/okf/types/GlobalTable.md +1 -0
- package/dist/okf/types/GlueConnection.md +5 -4
- package/dist/okf/types/GlueSecurityConfiguration.md +1 -6
- package/dist/okf/types/GlueSession.md +38 -0
- package/dist/okf/types/GlueTable.md +5 -10
- package/dist/okf/types/GlueWorkflow.md +5 -10
- package/dist/okf/types/Group.md +27 -0
- package/dist/okf/types/Harness.md +1 -0
- package/dist/okf/types/HostKey.md +33 -0
- package/dist/okf/types/HostedZone.md +1 -0
- package/dist/okf/types/HttpApi.md +2 -0
- package/dist/okf/types/HttpNamespace.md +5 -5
- package/dist/okf/types/HubV2.md +1 -0
- package/dist/okf/types/HumanTaskUi.md +22 -0
- package/dist/okf/types/IPv4Pool.md +28 -0
- package/dist/okf/types/ImageBuilder.md +1 -0
- package/dist/okf/types/ImageBuilderImage.md +1 -1
- package/dist/okf/types/ImagePipeline.md +1 -1
- package/dist/okf/types/InferenceComponent.md +5 -1
- package/dist/okf/types/InfluxDBBackup.md +65 -0
- package/dist/okf/types/InfluxDBCluster.md +3 -0
- package/dist/okf/types/InfrastructureConfiguration.md +2 -0
- package/dist/okf/types/IngestionDestination.md +28 -0
- package/dist/okf/types/InputSecurityGroup.md +6 -4
- package/dist/okf/types/InspectorV2Connector.md +38 -0
- package/dist/okf/types/InstanceEventWindow.md +25 -0
- package/dist/okf/types/InstanceFleetConfig.md +10 -10
- package/dist/okf/types/InstanceGroupConfig.md +3 -3
- package/dist/okf/types/InstrumentationConfig.md +31 -0
- package/dist/okf/types/IntegrationAssociation.md +3 -0
- package/dist/okf/types/IoTSiteWiseApplication.md +34 -0
- package/dist/okf/types/IoTSiteWiseDataset.md +5 -2
- package/dist/okf/types/IoTSiteWiseTask.md +24 -0
- package/dist/okf/types/IpamExternalResourceVerificationToken.md +35 -0
- package/dist/okf/types/IpamInternetRegistryAssociation.md +32 -0
- package/dist/okf/types/Job.md +35 -0
- package/dist/okf/types/JobTemplate.md +26 -0
- package/dist/okf/types/KinesisChannel.md +31 -0
- package/dist/okf/types/KinesisStream.md +1 -0
- package/dist/okf/types/LambdaResourcePolicy.md +14 -0
- package/dist/okf/types/Lexicon.md +34 -0
- package/dist/okf/types/LicenseAssetGroup.md +23 -0
- package/dist/okf/types/LicenseConfiguration.md +33 -0
- package/dist/okf/types/LicenseServerEndpoint.md +32 -0
- package/dist/okf/types/LightsailKeyPair.md +29 -0
- package/dist/okf/types/LimitsProfile.md +27 -0
- package/dist/okf/types/LocationAzureBlob.md +2 -1
- package/dist/okf/types/LocationObjectStorage.md +1 -0
- package/dist/okf/types/LogAlarm.md +2 -0
- package/dist/okf/types/MGNConnector.md +23 -0
- package/dist/okf/types/MGNLaunchConfigurationTemplate.md +37 -0
- package/dist/okf/types/MLTransform.md +15 -15
- package/dist/okf/types/MWAAServerlessWorkflow.md +3 -0
- package/dist/okf/types/ManagedNotificationAccountContactAssociation.md +1 -0
- package/dist/okf/types/ManagedNotificationAdditionalChannelAssociation.md +1 -0
- package/dist/okf/types/MediaConvertJobTemplate.md +11 -13
- package/dist/okf/types/MediaConvertQueue.md +8 -10
- package/dist/okf/types/MediaInsightsPipelineConfiguration.md +28 -0
- package/dist/okf/types/MediaLiveInput.md +41 -18
- package/dist/okf/types/MediaPackageV2Channel.md +3 -0
- package/dist/okf/types/MediaPackageV2OriginEndpoint.md +1 -0
- package/dist/okf/types/MediaPipelineKinesisVideoStreamPool.md +28 -0
- package/dist/okf/types/MediaTailorFunction.md +27 -0
- package/dist/okf/types/MedicalVocabulary.md +21 -0
- package/dist/okf/types/Member.md +26 -0
- package/dist/okf/types/Memory.md +6 -0
- package/dist/okf/types/MemoryDBSnapshot.md +29 -0
- package/dist/okf/types/Metric.md +59 -0
- package/dist/okf/types/MetricAttribution.md +23 -0
- package/dist/okf/types/MicrosoftAD.md +11 -11
- package/dist/okf/types/MigrationProject.md +8 -1
- package/dist/okf/types/Monitor.md +26 -0
- package/dist/okf/types/NFSFileShare.md +44 -0
- package/dist/okf/types/NeptuneGraphGraph.md +1 -0
- package/dist/okf/types/NetworkConnector.md +4 -0
- package/dist/okf/types/NetworkFlowMonitorScope.md +23 -0
- package/dist/okf/types/NetworkMigrationDefinition.md +31 -0
- package/dist/okf/types/NetworkSecurityManagerDeployment.md +31 -0
- package/dist/okf/types/NetworkSecurityManagerPolicy.md +32 -0
- package/dist/okf/types/NetworkSecurityManagerScope.md +29 -0
- package/dist/okf/types/NotebookInstance.md +18 -18
- package/dist/okf/types/NotebookInstanceLifecycleConfig.md +6 -5
- package/dist/okf/types/NotifyConfiguration.md +35 -0
- package/dist/okf/types/OTelEnrichment.md +2 -0
- package/dist/okf/types/OnlineEvaluationConfig.md +0 -1
- package/dist/okf/types/OrganizationConfigRule.md +7 -7
- package/dist/okf/types/Outpost.md +32 -0
- package/dist/okf/types/ParallelData.md +40 -0
- package/dist/okf/types/Partition.md +5 -5
- package/dist/okf/types/PaymentConnector.md +4 -1
- package/dist/okf/types/Pentest.md +1 -0
- package/dist/okf/types/PerfReports.md +28 -0
- package/dist/okf/types/PermissionAssociation.md +30 -0
- package/dist/okf/types/PersonalizeDataset.md +1 -0
- package/dist/okf/types/PersonalizeDatasetGroup.md +1 -0
- package/dist/okf/types/PersonalizeSchema.md +1 -0
- package/dist/okf/types/Pipeline.md +25 -0
- package/dist/okf/types/PlaybackConfiguration.md +1 -0
- package/dist/okf/types/PolicyAssociation.md +1 -1
- package/dist/okf/types/PolicyGrant.md +2 -2
- package/dist/okf/types/PolicyPrincipalAttachment.md +2 -7
- package/dist/okf/types/PortalProduct.md +24 -0
- package/dist/okf/types/PrefetchSchedule.md +25 -0
- package/dist/okf/types/PricingPlanManagerSubscription.md +31 -0
- package/dist/okf/types/PrincipalAssociation.md +27 -0
- package/dist/okf/types/PrivateDnsNamespace.md +8 -8
- package/dist/okf/types/PrivateVirtualInterface.md +1 -0
- package/dist/okf/types/ProcurementPortalPreference.md +45 -0
- package/dist/okf/types/Program.md +33 -0
- package/dist/okf/types/ProjectMembership.md +1 -1
- package/dist/okf/types/ProtocolsList.md +26 -0
- package/dist/okf/types/PublicDnsNamespace.md +7 -7
- package/dist/okf/types/PublicVirtualInterface.md +1 -0
- package/dist/okf/types/QEV2IdcApplication.md +25 -0
- package/dist/okf/types/QueryLoggingConfig.md +21 -0
- package/dist/okf/types/QuerySuggestionsBlockList.md +25 -0
- package/dist/okf/types/QuickSightAssignment.md +24 -0
- package/dist/okf/types/RAMResourceAssociation.md +27 -0
- package/dist/okf/types/RDSClusterSnapshot.md +54 -0
- package/dist/okf/types/RDSDBParameterGroup.md +5 -0
- package/dist/okf/types/RDSDeployment.md +41 -0
- package/dist/okf/types/RcsAgent.md +38 -0
- package/dist/okf/types/ReceiptRule.md +5 -5
- package/dist/okf/types/ReceiptRuleSet.md +1 -6
- package/dist/okf/types/RecommenderFilter.md +27 -0
- package/dist/okf/types/RecommenderSchema.md +25 -0
- package/dist/okf/types/RecordSet.md +16 -22
- package/dist/okf/types/RecoveryPlan.md +28 -0
- package/dist/okf/types/RedshiftIdcApplication.md +31 -0
- package/dist/okf/types/RedshiftSnapshot.md +59 -0
- package/dist/okf/types/RegistrationAttachment.md +28 -0
- package/dist/okf/types/Registry.md +41 -0
- package/dist/okf/types/RegistryRecord.md +38 -0
- package/dist/okf/types/RelatedItem.md +24 -0
- package/dist/okf/types/ReplicationConfigurationTemplate.md +35 -0
- package/dist/okf/types/ReplicationSubnetGroup.md +4 -9
- package/dist/okf/types/ReplicationTask.md +14 -14
- package/dist/okf/types/ReportGenerator.md +29 -0
- package/dist/okf/types/ReportGroup.md +1 -3
- package/dist/okf/types/ResilienceHubV2Policy.md +1 -0
- package/dist/okf/types/ResilienceHubV2Service.md +1 -0
- package/dist/okf/types/ResourceConfiguration.md +1 -1
- package/dist/okf/types/ResourceMetricsConfiguration.md +21 -0
- package/dist/okf/types/RestApi.md +1 -0
- package/dist/okf/types/RetrievalInstruction.md +32 -0
- package/dist/okf/types/RouterOutput.md +1 -0
- package/dist/okf/types/Rule.md +31 -0
- package/dist/okf/types/RunCache.md +29 -0
- package/dist/okf/types/Runtime.md +2 -1
- package/dist/okf/types/SCNInstance.md +33 -0
- package/dist/okf/types/SDBDomain.md +2 -2
- package/dist/okf/types/SMBFileShare.md +49 -0
- package/dist/okf/types/SageMakerArtifact.md +27 -0
- package/dist/okf/types/SageMakerEndpoint.md +0 -1
- package/dist/okf/types/ScalableTarget.md +1 -0
- package/dist/okf/types/ScalingPlan.md +6 -6
- package/dist/okf/types/ScheduledReport.md +31 -0
- package/dist/okf/types/SecondaryNetwork.md +26 -0
- package/dist/okf/types/SecurityAgentArtifact.md +25 -0
- package/dist/okf/types/SecurityAgentIntegration.md +31 -0
- package/dist/okf/types/Server.md +1 -0
- package/dist/okf/types/ServerlessCache.md +2 -0
- package/dist/okf/types/ServerlessCacheSnapshot.md +31 -0
- package/dist/okf/types/ServerlessRepoApplication.md +32 -0
- package/dist/okf/types/ServiceDiscoveryInstance.md +3 -7
- package/dist/okf/types/SipMediaApplication.md +27 -0
- package/dist/okf/types/SiteToSiteVpnAttachment.md +2 -0
- package/dist/okf/types/SnapshotCopyGrant.md +20 -0
- package/dist/okf/types/Solution.md +1 -0
- package/dist/okf/types/SourceAssociation.md +25 -0
- package/dist/okf/types/SourceCredential.md +6 -6
- package/dist/okf/types/SourceNetwork.md +23 -0
- package/dist/okf/types/StackFleetAssociation.md +2 -7
- package/dist/okf/types/StorageTierPolicy.md +20 -0
- package/dist/okf/types/StorageVirtualMachine.md +9 -9
- package/dist/okf/types/Stream.md +28 -0
- package/dist/okf/types/SubnetCidrReservation.md +26 -0
- package/dist/okf/types/SubscriptionProvider.md +26 -0
- package/dist/okf/types/SupportPermit.md +29 -0
- package/dist/okf/types/Table.md +2 -1
- package/dist/okf/types/TableOptimizer.md +5 -10
- package/dist/okf/types/Tape.md +31 -0
- package/dist/okf/types/Template.md +36 -0
- package/dist/okf/types/Tenant.md +2 -0
- package/dist/okf/types/Terminology.md +39 -0
- package/dist/okf/types/Thesaurus.md +25 -0
- package/dist/okf/types/ThingPrincipalAttachment.md +3 -8
- package/dist/okf/types/Topic.md +1 -0
- package/dist/okf/types/TopicRuleDestination.md +1 -0
- package/dist/okf/types/TrafficPolicy.md +26 -0
- package/dist/okf/types/TrafficPolicyInstance.md +28 -0
- package/dist/okf/types/TranscribeVocabulary.md +27 -0
- package/dist/okf/types/TransitGatewayRouteTableAttachment.md +2 -0
- package/dist/okf/types/TransitVirtualInterface.md +1 -0
- package/dist/okf/types/Tunnel.md +25 -0
- package/dist/okf/types/UsageLimit.md +26 -0
- package/dist/okf/types/UseCase.md +23 -0
- package/dist/okf/types/User.md +47 -0
- package/dist/okf/types/VPCEndpoint.md +1 -1
- package/dist/okf/types/VPCEndpointService.md +6 -0
- package/dist/okf/types/VPCPeeringConnection.md +2 -2
- package/dist/okf/types/VPNConcentrator.md +1 -1
- package/dist/okf/types/VPNConnection.md +1 -1
- package/dist/okf/types/VerifiedDestinationNumber.md +25 -0
- package/dist/okf/types/View.md +27 -0
- package/dist/okf/types/VoiceConnector.md +30 -0
- package/dist/okf/types/Volume.md +44 -0
- package/dist/okf/types/Vpc.md +1 -1
- package/dist/okf/types/VpcAttachment.md +2 -0
- package/dist/okf/types/WebFunction.md +27 -0
- package/dist/okf/types/WebFunctionEndpoint.md +44 -0
- package/dist/okf/types/WebFunctionRevision.md +32 -0
- package/dist/okf/types/WickrNetwork.md +27 -0
- package/dist/okf/types/Worker.md +29 -0
- package/dist/okf/types/Workforce.md +26 -0
- package/dist/okf/types/Workload.md +35 -0
- package/dist/okf/types/WorkloadEstimate.md +35 -0
- package/dist/okf/types/Workspace.md +28 -0
- package/dist/okf/types/Workteam.md +8 -8
- package/dist/op/activities/aws-apply.js +214 -0
- package/dist/op/activities/floci.js +97 -0
- package/dist/op/activities/index.js +32 -0
- package/dist/op/builders.js +50 -0
- package/dist/ownership.js +52 -0
- package/dist/package-cli.js +25 -0
- package/dist/parameter.js +19 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +1006 -0
- package/dist/properties.js +166 -0
- package/dist/pseudo.js +25 -0
- package/dist/receipt-store.d.ts.map +1 -1
- package/dist/receipt-store.js +233 -0
- package/dist/reference-catalog.js +106 -0
- package/dist/rules/ext001.ts +3 -3
- package/dist/rules/waw016.ts +2 -2
- package/dist/serializer.js +529 -0
- package/dist/spec/fetch.js +193 -0
- package/dist/spec/parse.js +259 -0
- package/dist/spec/pin.js +185 -0
- package/dist/spec/pinned-types.json +203 -0
- package/dist/stack-errors.js +14 -0
- package/dist/taggable.d.ts.map +1 -1
- package/dist/taggable.js +33 -0
- package/dist/teardown.js +199 -0
- package/dist/template-sections.js +53 -0
- package/dist/template-transform.js +50 -0
- package/dist/types/index.d.ts +18847 -1124
- package/dist/validate-cli.js +16 -0
- package/dist/validate.js +33 -0
- package/package.json +9 -9
- package/src/agentcore/trace-fetch.ts +2 -1
- package/src/api/credential-chain.ts +119 -9
- package/src/api/credential-isolation.test.ts +72 -0
- package/src/api/read-client-chain.test.ts +159 -0
- package/src/api/read-client.ts +42 -6
- package/src/api/sigv4.ts +4 -4
- package/src/caller-identity.ts +3 -5
- package/src/codegen/any-budget.test.ts +12 -2
- package/src/codegen/generate.ts +9 -0
- package/src/codegen/package.ts +2 -2
- package/src/codegen/patches.test.ts +95 -0
- package/src/codegen/patches.ts +53 -9
- package/src/codegen/property-overlay.json +1 -16
- package/src/components/apply.ts +218 -6
- package/src/components/cfn-plan-floci.e2e.test.ts +76 -0
- package/src/components/cfn-plan.test.ts +225 -16
- package/src/components/cloud-executor.ts +73 -25
- package/src/deep-observe.ts +2 -1
- package/src/disruption.ts +2 -1
- package/src/generated/index.d.ts +18847 -1124
- package/src/generated/index.ts +1376 -161
- package/src/generated/lexicon-aws.json +17359 -784
- package/src/identity-observe.ts +2 -1
- package/src/lint/post-synth/ext001.ts +3 -3
- package/src/lint/post-synth/waw016.ts +2 -2
- package/src/lsp/completions.ts +2 -1
- package/src/lsp/hover.ts +2 -1
- package/src/plugin.ts +2 -1
- package/src/receipt-store.ts +2 -1
- package/src/spec/pin.ts +3 -3
- package/src/spec/pinned-types.json +203 -0
- package/src/taggable.ts +2 -2
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render an AgentCore session history as dogwood replay-trace text (#1685).
|
|
3
|
+
*
|
|
4
|
+
* This module is pure: normalized events in, text out, no transport and no
|
|
5
|
+
* filesystem. It exists separately from `./trace-fetch.ts` for two reasons.
|
|
6
|
+
* The Bedrock AgentCore observability surface is in preview and moving, so the
|
|
7
|
+
* thing most likely to be rewritten is the fetch, and the grammar it renders
|
|
8
|
+
* into is the thing least likely to move. And the line grammar has two traps in
|
|
9
|
+
* it that are worth testing byte-for-byte without a mock HTTP stack in the way.
|
|
10
|
+
*
|
|
11
|
+
* ## The grammar
|
|
12
|
+
*
|
|
13
|
+
* From the #1657 verification (§6, read from
|
|
14
|
+
* `dogwood-language/src/interpreter/log_parse.rs` at the pinned SHA
|
|
15
|
+
* `5063bcc2d6d6cf5024d1b0498e6cc8ef52cbcf0c`), one event per line:
|
|
16
|
+
*
|
|
17
|
+
* ```
|
|
18
|
+
* @<timestamp> [scope(principal: <uid>, resource: <uid>)]
|
|
19
|
+
* [entities(<uid>: { <attrs> } [in [<uid>, …]], …)]
|
|
20
|
+
* [request_context(<group>: { … }, …)]
|
|
21
|
+
* <Ns>::Action::"<Name>"::<kind>(<field>: <value>, …)
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* The three envelopes are optional and must appear in that order; the trailing
|
|
25
|
+
* group is the logged record. Blank lines are skipped and there is no comment
|
|
26
|
+
* syntax, so a `//` inside a value survives.
|
|
27
|
+
*
|
|
28
|
+
* ## The two traps
|
|
29
|
+
*
|
|
30
|
+
* 1. **`request_context(…)` and the logged record are different bags.** The
|
|
31
|
+
* Cedar request is built from the first, temporal predicates match against
|
|
32
|
+
* the second, and a field supplied to only one weakens either the Cedar
|
|
33
|
+
* check or the temporal check while the replay still exits 0 with a verdict
|
|
34
|
+
* that looks authoritative. So every payload group an event carries is
|
|
35
|
+
* written to *both*, always — there is no per-event opt-out here, because an
|
|
36
|
+
* AgentCore history has no way to express "this field is deliberately
|
|
37
|
+
* Cedar-invisible". A decision-kind event with no payload at all is a
|
|
38
|
+
* refusal, not a shrug: see {@link renderAgentCoreTrace}.
|
|
39
|
+
* 2. **Actions must be fully qualified.** `AgentCore::Action::"Transfer"`,
|
|
40
|
+
* never `Transfer` — a short name leaves the temporal predicate unmatched
|
|
41
|
+
* while Cedar still authorizes. A bare tool name from the history is
|
|
42
|
+
* qualified here; an already-qualified one is validated and passed through.
|
|
43
|
+
*
|
|
44
|
+
* ## Decoupling
|
|
45
|
+
*
|
|
46
|
+
* Nothing here imports the cedar lexicon, and the cedar lexicon imports nothing
|
|
47
|
+
* from here. The contract between them is the text. The value and event types
|
|
48
|
+
* below are deliberately shaped so an object built here is *structurally*
|
|
49
|
+
* assignable to the cedar side's `TraceValue`/`TraceEvent` for anyone who wants
|
|
50
|
+
* that, but neither package depends on the other to get it, and the rendering
|
|
51
|
+
* is implemented twice on purpose. Where a choice was free — the space inside
|
|
52
|
+
* `{ … }`, the `, ` between fields, the order of the record's own injections —
|
|
53
|
+
* it matches `lexicons/cedar/src/dogwood/trace.ts` byte for byte, so a trace
|
|
54
|
+
* fetched from AWS and a trace built by hand look the same to a reader and to
|
|
55
|
+
* the parser.
|
|
56
|
+
*/
|
|
57
|
+
/**
|
|
58
|
+
* Which objects are *really* tagged values.
|
|
59
|
+
*
|
|
60
|
+
* Identity, not shape. A tagged value renders as surface text — an `entity`
|
|
61
|
+
* becomes a bare uid, a `raw` becomes its `text` verbatim — so if membership
|
|
62
|
+
* were decided by a `traceValue` key, any agent that wrote
|
|
63
|
+
* `{"traceValue": "raw", "text": "…"}` into a payload could inject arbitrary
|
|
64
|
+
* unescaped text into both bags of the trace: a forged `callerPrincipal`, an
|
|
65
|
+
* unbalanced paren, a whole extra field. The payloads this module reads are
|
|
66
|
+
* written by the agent under observation, which is the last party that should
|
|
67
|
+
* get to decide what its own trace says. So only the three constructors below
|
|
68
|
+
* confer the tag, and {@link renderValue} refuses a record that merely looks
|
|
69
|
+
* tagged rather than rendering it either way.
|
|
70
|
+
*/
|
|
71
|
+
const TAGGED = new WeakSet();
|
|
72
|
+
function tag(value) {
|
|
73
|
+
TAGGED.add(value);
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
/** `Ns::Type::"id"`, `Ns::Action::"Name"` — a fully qualified uid. */
|
|
77
|
+
const QUALIFIED_UID = /^[A-Za-z_][A-Za-z0-9_]*(::[A-Za-z_][A-Za-z0-9_]*)+::"[^"]*"$/;
|
|
78
|
+
/** A bare field, group, namespace or event-kind name. */
|
|
79
|
+
const IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
80
|
+
/**
|
|
81
|
+
* A history that cannot become an honest trace.
|
|
82
|
+
*
|
|
83
|
+
* Thrown rather than worked around. Every case this covers is one where the
|
|
84
|
+
* alternative is a trace that replays green and proves less than it looks like
|
|
85
|
+
* it proves, which is the failure mode the whole module is arranged against.
|
|
86
|
+
*/
|
|
87
|
+
export class AgentCoreTraceError extends Error {
|
|
88
|
+
constructor(message,
|
|
89
|
+
/** 0-based position in the event list, when one event is to blame. */
|
|
90
|
+
index) {
|
|
91
|
+
super(message);
|
|
92
|
+
this.index = index;
|
|
93
|
+
this.name = "AgentCoreTraceError";
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function assertUid(value, what, index) {
|
|
97
|
+
if (!QUALIFIED_UID.test(value)) {
|
|
98
|
+
throw new AgentCoreTraceError(`agentcore trace: ${what} must be fully qualified, like Ns::Type::"id" — got "${value}"`, index);
|
|
99
|
+
}
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
function assertIdent(value, what, index) {
|
|
103
|
+
if (!IDENT.test(value)) {
|
|
104
|
+
throw new AgentCoreTraceError(`agentcore trace: ${what} must be an identifier — got "${value}"`, index);
|
|
105
|
+
}
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
/** `Ns::Type::"id"`. Validated at construction, so a short name cannot slip through. */
|
|
109
|
+
export function agentCoreEntityRef(uid) {
|
|
110
|
+
return tag({ traceValue: "entity", uid: assertUid(uid, "an entity reference") });
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A Cedar decimal, written as it should appear (`"1.50"`).
|
|
114
|
+
*
|
|
115
|
+
* `context` names the field it came from when there is one, so a payload that
|
|
116
|
+
* cannot be represented says *where* rather than only *what*.
|
|
117
|
+
*/
|
|
118
|
+
export function agentCoreDecimal(text, context) {
|
|
119
|
+
if (!/^-?\d+\.\d+$/.test(text)) {
|
|
120
|
+
const where = context ? ` at ${context}` : "";
|
|
121
|
+
throw new AgentCoreTraceError(`agentcore trace: a decimal looks like "1.50" — got "${text}"${where}`);
|
|
122
|
+
}
|
|
123
|
+
return tag({ traceValue: "decimal", text });
|
|
124
|
+
}
|
|
125
|
+
/** Surface text, rendered verbatim. For values this module has no shape for. */
|
|
126
|
+
export function agentCoreRaw(text) {
|
|
127
|
+
return tag({ traceValue: "raw", text });
|
|
128
|
+
}
|
|
129
|
+
function isTagged(value) {
|
|
130
|
+
return typeof value === "object" && value !== null && TAGGED.has(value);
|
|
131
|
+
}
|
|
132
|
+
/** The five escapes a Cedar string literal needs. Mirrors the cedar lexicon's. */
|
|
133
|
+
function escapeString(value) {
|
|
134
|
+
return value
|
|
135
|
+
.replace(/\\/g, "\\\\")
|
|
136
|
+
.replace(/"/g, '\\"')
|
|
137
|
+
.replace(/\n/g, "\\n")
|
|
138
|
+
.replace(/\r/g, "\\r")
|
|
139
|
+
.replace(/\t/g, "\\t");
|
|
140
|
+
}
|
|
141
|
+
/** Render one value in the Cedar surface form the trace parser reads. */
|
|
142
|
+
export function renderValue(value) {
|
|
143
|
+
if (typeof value === "string")
|
|
144
|
+
return `"${escapeString(value)}"`;
|
|
145
|
+
if (typeof value === "boolean")
|
|
146
|
+
return value ? "true" : "false";
|
|
147
|
+
if (typeof value === "number") {
|
|
148
|
+
if (!Number.isInteger(value)) {
|
|
149
|
+
throw new AgentCoreTraceError(`agentcore trace: ${String(value)} is not an integer — a decimal must be written with agentCoreDecimal("1.50") so its scale survives`);
|
|
150
|
+
}
|
|
151
|
+
// Beyond 2^53 a JS number has already lost the digits an i64 would keep,
|
|
152
|
+
// and `String(1e21)` is `"1e+21"`, which is not a Cedar integer literal at
|
|
153
|
+
// all. Either way the trace would carry a number that is not the number the
|
|
154
|
+
// agent saw.
|
|
155
|
+
if (!Number.isSafeInteger(value)) {
|
|
156
|
+
throw new AgentCoreTraceError(`agentcore trace: ${String(value)} is outside the range a JS number represents exactly, so the trace would carry a different number than the history did — carry it as a string`);
|
|
157
|
+
}
|
|
158
|
+
return String(value);
|
|
159
|
+
}
|
|
160
|
+
if (Array.isArray(value))
|
|
161
|
+
return `[${value.map(renderValue).join(", ")}]`;
|
|
162
|
+
if (isTagged(value))
|
|
163
|
+
return value.traceValue === "entity" ? value.uid : value.text;
|
|
164
|
+
if ("traceValue" in value) {
|
|
165
|
+
// See TAGGED. Rendering it as a record would be a lie about what the agent
|
|
166
|
+
// wrote; rendering it as a tagged value would let the agent write its own
|
|
167
|
+
// trace. Neither is on offer.
|
|
168
|
+
throw new AgentCoreTraceError(`agentcore trace: a payload carries a "traceValue" field, which is the marker this module uses for entity refs, decimals and raw surface text. ` +
|
|
169
|
+
"Rendering it either way would let the observed agent decide what its own trace says, so it is refused — rename the field at the source, " +
|
|
170
|
+
"or build the value with agentCoreEntityRef/agentCoreDecimal/agentCoreRaw.");
|
|
171
|
+
}
|
|
172
|
+
return renderFields(value);
|
|
173
|
+
}
|
|
174
|
+
/** `{ a: 1, b: "x" }` — a record body, braces included. */
|
|
175
|
+
export function renderFields(fields) {
|
|
176
|
+
const parts = Object.entries(fields).map(([key, value]) => `${assertIdent(key, "a trace field name")}: ${renderValue(value)}`);
|
|
177
|
+
return `{ ${parts.join(", ")} }`;
|
|
178
|
+
}
|
|
179
|
+
const DEFAULTS = {
|
|
180
|
+
namespace: "AgentCore",
|
|
181
|
+
principalType: "Actor",
|
|
182
|
+
resourceType: "Runtime",
|
|
183
|
+
origin: "epoch-seconds",
|
|
184
|
+
decisionKinds: ["request"],
|
|
185
|
+
};
|
|
186
|
+
/** A payload group name → the field on the normalized event. Order is the render order. */
|
|
187
|
+
const GROUPS = ["input", "output", "error", "attributes"];
|
|
188
|
+
function payloadGroups(event) {
|
|
189
|
+
const out = {};
|
|
190
|
+
for (const group of GROUPS) {
|
|
191
|
+
const fields = event[group];
|
|
192
|
+
if (fields && Object.keys(fields).length > 0)
|
|
193
|
+
out[group] = fields;
|
|
194
|
+
}
|
|
195
|
+
return out;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* `Ns::Action::"Name"` from a bare tool name, or a qualified action validated.
|
|
199
|
+
*
|
|
200
|
+
* The fully-qualified requirement is the second §6 trap: a short name leaves
|
|
201
|
+
* every temporal predicate unmatched while Cedar still authorizes, so the
|
|
202
|
+
* replay is green and blind.
|
|
203
|
+
*/
|
|
204
|
+
export function qualifyAction(action, namespace, index) {
|
|
205
|
+
if (action.includes("::"))
|
|
206
|
+
return assertUid(action, "a trace action", index);
|
|
207
|
+
if (action.length === 0 || action.includes('"')) {
|
|
208
|
+
throw new AgentCoreTraceError(`agentcore trace: a bare action name cannot be empty or contain a quote — got "${action}"`, index);
|
|
209
|
+
}
|
|
210
|
+
return `${assertIdent(namespace, "a namespace", index)}::Action::"${action}"`;
|
|
211
|
+
}
|
|
212
|
+
/** `Ns::Type::"id"` from a bare id, or a qualified uid validated. */
|
|
213
|
+
export function qualifyUid(id, namespace, type, what, index) {
|
|
214
|
+
if (id.includes("::"))
|
|
215
|
+
return assertUid(id, what, index);
|
|
216
|
+
if (id.length === 0 || id.includes('"')) {
|
|
217
|
+
throw new AgentCoreTraceError(`agentcore trace: ${what} cannot be empty or contain a quote — got "${id}"`, index);
|
|
218
|
+
}
|
|
219
|
+
return `${assertIdent(namespace, "a namespace", index)}::${assertIdent(type, "an entity type", index)}::"${id}"`;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Order the history the way the interpreter reads it.
|
|
223
|
+
*
|
|
224
|
+
* dogwood accumulates history in *file* order, so an out-of-order line changes
|
|
225
|
+
* what a temporal window sees. A fetch that pages backwards (CloudWatch Logs
|
|
226
|
+
* hands out the newest first) would otherwise produce a trace whose windows are
|
|
227
|
+
* quietly wrong, so ordering is settled here rather than being a caller's
|
|
228
|
+
* problem. Ties keep their original relative order.
|
|
229
|
+
*/
|
|
230
|
+
function sortByTime(events) {
|
|
231
|
+
return events.map((event, index) => ({ event, index }))
|
|
232
|
+
.sort((a, b) => a.event.timeMs - b.event.timeMs || a.index - b.index)
|
|
233
|
+
.map(({ event }) => event);
|
|
234
|
+
}
|
|
235
|
+
function assertWellFormed(event, index) {
|
|
236
|
+
if (typeof event.timeMs !== "number" || !Number.isFinite(event.timeMs)) {
|
|
237
|
+
throw new AgentCoreTraceError(`agentcore trace: event ${index} has no usable timestamp (${String(event.timeMs)}) — a trace timepoint is an i64 and there is no honest default for a missing one`, index);
|
|
238
|
+
}
|
|
239
|
+
for (const [field, value] of [
|
|
240
|
+
["sessionId", event.sessionId],
|
|
241
|
+
["eventId", event.eventId],
|
|
242
|
+
["actor", event.actor],
|
|
243
|
+
["target", event.target],
|
|
244
|
+
["action", event.action],
|
|
245
|
+
["kind", event.kind],
|
|
246
|
+
]) {
|
|
247
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
248
|
+
throw new AgentCoreTraceError(`agentcore trace: event ${index} has no ${field} — the history is malformed, and a trace with a guessed ${field} replays green while proving nothing`, index);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* The weakening checks, applied to a normalized history.
|
|
254
|
+
*
|
|
255
|
+
* Everything here is something that makes a replay *weaker* rather than
|
|
256
|
+
* something that makes it fail, which is exactly the class a green replay run
|
|
257
|
+
* hides. Structural malformation throws instead: see {@link AgentCoreTraceError}.
|
|
258
|
+
*/
|
|
259
|
+
export function auditAgentCoreEvents(events, options = {}) {
|
|
260
|
+
const decisionKinds = new Set(options.decisionKinds ?? DEFAULTS.decisionKinds);
|
|
261
|
+
const issues = [];
|
|
262
|
+
const seen = new Set();
|
|
263
|
+
sortByTime(events).forEach((event, index) => {
|
|
264
|
+
assertWellFormed(event, index);
|
|
265
|
+
const at = { index, timeMs: event.timeMs };
|
|
266
|
+
if (decisionKinds.has(event.kind) && Object.keys(payloadGroups(event)).length === 0) {
|
|
267
|
+
issues.push({
|
|
268
|
+
...at,
|
|
269
|
+
kind: "no-request-context",
|
|
270
|
+
message: `${event.action}::${event.kind} carries no input, output, error or attributes, so its request_context envelope would be empty and every context.* test in a policy silently misses`,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
const key = `${event.sessionId}${event.eventId}`;
|
|
274
|
+
if (seen.has(key)) {
|
|
275
|
+
issues.push({
|
|
276
|
+
...at,
|
|
277
|
+
kind: "duplicate-event-id",
|
|
278
|
+
message: `session ${event.sessionId} reports eventId "${event.eventId}" twice, so requestId no longer identifies a decision point and an expectation written against one addresses both`,
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
seen.add(key);
|
|
282
|
+
});
|
|
283
|
+
return issues;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Resolve one normalized event into the envelopes and the logged record.
|
|
287
|
+
*
|
|
288
|
+
* Both bags get every payload group; the record additionally gets the event
|
|
289
|
+
* schema's own injections (`callerPrincipal`, `callerResource`, `sessionId`,
|
|
290
|
+
* `requestId`), which are never part of the Cedar request. Field order matches
|
|
291
|
+
* the §6 example line: groups first, then the injections.
|
|
292
|
+
*/
|
|
293
|
+
export function toTraceLine(event, timestamp, options = {}, index) {
|
|
294
|
+
const namespace = options.namespace ?? DEFAULTS.namespace;
|
|
295
|
+
const principal = qualifyUid(event.actor, namespace, options.principalType ?? DEFAULTS.principalType, "an actor", index);
|
|
296
|
+
const resource = qualifyUid(event.target, namespace, options.resourceType ?? DEFAULTS.resourceType, "a target", index);
|
|
297
|
+
const groups = payloadGroups(event);
|
|
298
|
+
return {
|
|
299
|
+
timestamp,
|
|
300
|
+
action: qualifyAction(event.action, namespace, index),
|
|
301
|
+
kind: assertIdent(event.kind, "an event kind", index),
|
|
302
|
+
scope: { principal, resource },
|
|
303
|
+
requestContext: groups,
|
|
304
|
+
record: {
|
|
305
|
+
...groups,
|
|
306
|
+
callerPrincipal: agentCoreEntityRef(principal),
|
|
307
|
+
callerResource: agentCoreEntityRef(resource),
|
|
308
|
+
sessionId: event.sessionId,
|
|
309
|
+
requestId: event.eventId,
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
/** One line as the trace parser reads it. Never ends in a newline. */
|
|
314
|
+
export function renderTraceLine(line) {
|
|
315
|
+
if (!Number.isSafeInteger(line.timestamp)) {
|
|
316
|
+
throw new AgentCoreTraceError(`agentcore trace: a timepoint is an i64 — got ${String(line.timestamp)}`);
|
|
317
|
+
}
|
|
318
|
+
const parts = [`@${line.timestamp}`];
|
|
319
|
+
parts.push(`scope(principal: ${line.scope.principal}, resource: ${line.scope.resource})`);
|
|
320
|
+
const context = Object.entries(line.requestContext).map(([group, value]) => `${assertIdent(group, "a request-context group")}: ${renderValue(value)}`);
|
|
321
|
+
if (context.length > 0)
|
|
322
|
+
parts.push(`request_context(${context.join(", ")})`);
|
|
323
|
+
const record = Object.entries(line.record).map(([key, value]) => `${assertIdent(key, "a trace field name")}: ${renderValue(value)}`);
|
|
324
|
+
parts.push(`${line.action}::${line.kind}(${record.join(", ")})`);
|
|
325
|
+
return parts.join(" ");
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Render a normalized AgentCore history as dogwood trace text.
|
|
329
|
+
*
|
|
330
|
+
* The inversion of the §6 traps: every payload group lands in both bags, every
|
|
331
|
+
* action comes out fully qualified, the history is ordered the way the
|
|
332
|
+
* interpreter reads it, and a history that would produce a weakened trace
|
|
333
|
+
* throws instead. Naming a kind in `allow` is how a caller says the weakening
|
|
334
|
+
* is the point — the alternative was a trace that replays green and proves
|
|
335
|
+
* less than it looks like it proves.
|
|
336
|
+
*/
|
|
337
|
+
export function renderAgentCoreTrace(events, options = {}) {
|
|
338
|
+
const sorted = sortByTime(events);
|
|
339
|
+
// The audit runs `assertWellFormed` over the same sorted list, so a
|
|
340
|
+
// structurally broken history throws here before anything is rendered.
|
|
341
|
+
const issues = auditAgentCoreEvents(sorted, options);
|
|
342
|
+
const allow = new Set(options.allow ?? []);
|
|
343
|
+
const blocking = issues.filter((issue) => !allow.has(issue.kind));
|
|
344
|
+
if (blocking.length > 0) {
|
|
345
|
+
const detail = blocking.map((i) => ` [${i.kind}] event ${i.index}: ${i.message}`).join("\n");
|
|
346
|
+
const kinds = [...new Set(blocking.map((i) => `"${i.kind}"`))].join(", ");
|
|
347
|
+
throw new AgentCoreTraceError(`agentcore trace: this history would weaken its own replay rather than fail it:\n${detail}\n` +
|
|
348
|
+
`Fix the history, or pass { allow: [${kinds}] } to say the weakening is the point.`);
|
|
349
|
+
}
|
|
350
|
+
const origin = options.origin ?? DEFAULTS.origin;
|
|
351
|
+
const base = origin === "relative-seconds" && sorted.length > 0 ? (sorted[0]?.timeMs ?? 0) : 0;
|
|
352
|
+
const lines = sorted.map((event, index) => toTraceLine(event, Math.floor((event.timeMs - base) / 1000), options, index));
|
|
353
|
+
// An empty history renders as empty text, not as a bare newline: dogwood
|
|
354
|
+
// skips blank lines, so the two replay identically, and "" is the honest
|
|
355
|
+
// answer to "what did this session do". Whether an empty trace is worth
|
|
356
|
+
// replaying is the caller's call — see `trace-fetch.ts`'s `requireEvents`.
|
|
357
|
+
const text = lines.length > 0 ? lines.map(renderTraceLine).join("\n") + "\n" : "";
|
|
358
|
+
return { text, lines, issues };
|
|
359
|
+
}
|
package/dist/ambient.js
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resources that are simply *there* (#1278).
|
|
3
|
+
*
|
|
4
|
+
* `describeResources` answers "what do I manage" and `observeDependencies`
|
|
5
|
+
* answers "what do I rely on". Both resolve outward from the declared estate,
|
|
6
|
+
* so neither can see a resource nothing points at — and "which of my security
|
|
7
|
+
* groups are unused" is precisely a question about resources nothing points at.
|
|
8
|
+
*
|
|
9
|
+
* A state file cannot answer this at all: it knows what it created, and an
|
|
10
|
+
* unused resource is by definition not something it created and attached. A
|
|
11
|
+
* lexicon that can enumerate a kind can.
|
|
12
|
+
*
|
|
13
|
+
* Bounded by the kinds the project declares. A project managing security groups
|
|
14
|
+
* is asked about security groups, not about the account.
|
|
15
|
+
*/
|
|
16
|
+
import { applyAwsEndpointArgv } from "./components/cloud-executor.js";
|
|
17
|
+
/** Enumerable kinds, and how to list them. Extending this is the way to widen. */
|
|
18
|
+
const ENUMERABLE = {
|
|
19
|
+
"AWS::EC2::SecurityGroup": {
|
|
20
|
+
argv: ["ec2", "describe-security-groups"],
|
|
21
|
+
key: "SecurityGroups",
|
|
22
|
+
id: "GroupId",
|
|
23
|
+
name: "GroupName",
|
|
24
|
+
},
|
|
25
|
+
// The account's default VPC is the archetype: nothing declares it, nothing
|
|
26
|
+
// in the declared estate points at it, and "which instances are outside a
|
|
27
|
+
// default VPC" cannot be answered without it.
|
|
28
|
+
"AWS::EC2::VPC": {
|
|
29
|
+
argv: ["ec2", "describe-vpcs"],
|
|
30
|
+
key: "Vpcs",
|
|
31
|
+
id: "VpcId",
|
|
32
|
+
},
|
|
33
|
+
// Nobody writes a network interface: EC2 creates one per instance. But the
|
|
34
|
+
// ENI is where a security group is actually attached, so "which of my
|
|
35
|
+
// security groups are unused" is an ENI question and cannot be answered
|
|
36
|
+
// without them. Asked exactly that, an agent queried
|
|
37
|
+
// `kind:EC2::NetworkInterface`, got nothing, and rebuilt the attachment map
|
|
38
|
+
// by hand from twenty-nine raw provider calls.
|
|
39
|
+
"AWS::EC2::NetworkInterface": {
|
|
40
|
+
argv: ["ec2", "describe-network-interfaces"],
|
|
41
|
+
key: "NetworkInterfaces",
|
|
42
|
+
id: "NetworkInterfaceId",
|
|
43
|
+
},
|
|
44
|
+
// A subnet holding nothing is the same shape as an unused security group, and
|
|
45
|
+
// it was reachable by neither of the other paths. Both resolve outward from
|
|
46
|
+
// what is declared, so a subnet gets recorded only when something in it does —
|
|
47
|
+
// and the empty ones are exactly what "which of my subnets are empty" asks
|
|
48
|
+
// for.
|
|
49
|
+
//
|
|
50
|
+
// Found by measuring a snapshot rather than by reading the code: an estate
|
|
51
|
+
// with seven subnets recorded five, and the two it dropped were the two with
|
|
52
|
+
// nothing in them. The default VPC's subnets are the archetype again — nothing
|
|
53
|
+
// declares them, and the only one ever recorded was the one that happened to
|
|
54
|
+
// hold an instance.
|
|
55
|
+
"AWS::EC2::Subnet": {
|
|
56
|
+
argv: ["ec2", "describe-subnets"],
|
|
57
|
+
key: "Subnets",
|
|
58
|
+
id: "SubnetId",
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Kinds a declared kind implies, though nobody writes them.
|
|
63
|
+
*
|
|
64
|
+
* The scan is bounded by what the project declares — a project managing
|
|
65
|
+
* security groups is asked about security groups, not about the account. That
|
|
66
|
+
* bound is right, and it excluded exactly the resource that answers the
|
|
67
|
+
* question: EC2 creates a network interface per instance, and the ENI is where
|
|
68
|
+
* a security group is actually attached. So an estate full of instances had no
|
|
69
|
+
* ENIs recorded, and "which of my security groups are unused" — definitionally
|
|
70
|
+
* an ENI question — could not be answered from the snapshot at all.
|
|
71
|
+
*
|
|
72
|
+
* Declaring an instance is declaring its network interface. This widens the
|
|
73
|
+
* bound by implication rather than abandoning it: still nothing about the
|
|
74
|
+
* account at large.
|
|
75
|
+
*/
|
|
76
|
+
const IMPLIED = {
|
|
77
|
+
"AWS::EC2::Instance": ["AWS::EC2::NetworkInterface"],
|
|
78
|
+
};
|
|
79
|
+
/** The requested kinds, plus the ones they imply. */
|
|
80
|
+
export function withImplied(kinds) {
|
|
81
|
+
return [...new Set(kinds.flatMap((k) => [k, ...(IMPLIED[k] ?? [])]))];
|
|
82
|
+
}
|
|
83
|
+
/** The kinds this reader can enumerate. Declared so a caller can mention
|
|
84
|
+
* `--ambient` without paying for a scan to discover it is relevant. */
|
|
85
|
+
export const AMBIENT_KINDS = Object.keys(ENUMERABLE);
|
|
86
|
+
/** True when this lexicon can enumerate the kind, so a caller can say what it skipped. */
|
|
87
|
+
export function canEnumerate(kind) {
|
|
88
|
+
return kind in ENUMERABLE;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* List resources of the declared kinds that exist in the account but are
|
|
92
|
+
* neither managed nor already observed.
|
|
93
|
+
*
|
|
94
|
+
* Attachment is deliberately NOT decided here. Whether a security group is
|
|
95
|
+
* "unused" is a graph question — does anything reference it — and the graph
|
|
96
|
+
* answers it once the group is a node. Deciding it in the reader would put a
|
|
97
|
+
* conclusion in the observation, which is the mistake `liveInternetFacing` made
|
|
98
|
+
* and #1271 undid.
|
|
99
|
+
*/
|
|
100
|
+
export async function observeAwsAmbient(options) {
|
|
101
|
+
const kinds = withImplied(options.kinds).filter(canEnumerate);
|
|
102
|
+
if (kinds.length === 0)
|
|
103
|
+
return {};
|
|
104
|
+
const { getRuntime } = await import("@intentius/chant/runtime-adapter");
|
|
105
|
+
const rt = getRuntime();
|
|
106
|
+
const regionArgs = options.region ? ["--region", options.region] : [];
|
|
107
|
+
// Physical ids already accounted for, so a managed resource is never also
|
|
108
|
+
// reported as ambient.
|
|
109
|
+
const known = new Set(Object.values(options.observed)
|
|
110
|
+
.map((m) => m.physicalId)
|
|
111
|
+
.filter((id) => typeof id === "string"));
|
|
112
|
+
const ambient = {};
|
|
113
|
+
for (const kind of kinds) {
|
|
114
|
+
const spec = ENUMERABLE[kind];
|
|
115
|
+
try {
|
|
116
|
+
const result = await rt.spawn(applyAwsEndpointArgv(["aws", ...spec.argv, ...regionArgs, "--output", "json"], process.env.AWS_ENDPOINT_URL));
|
|
117
|
+
if (result.exitCode !== 0)
|
|
118
|
+
continue;
|
|
119
|
+
const rows = (JSON.parse(result.stdout)[spec.key] ?? []);
|
|
120
|
+
for (const row of rows) {
|
|
121
|
+
const id = row[spec.id];
|
|
122
|
+
if (typeof id !== "string" || known.has(id))
|
|
123
|
+
continue;
|
|
124
|
+
ambient[id] = {
|
|
125
|
+
type: kind,
|
|
126
|
+
status: "OBSERVED",
|
|
127
|
+
physicalId: id,
|
|
128
|
+
// The whole payload, so the graph can decide what "unused" means
|
|
129
|
+
// rather than the reader pre-deciding it.
|
|
130
|
+
attributes: row,
|
|
131
|
+
ownership: "foreign",
|
|
132
|
+
ambient: true,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Best-effort per kind: one unreadable kind does not sink the others, and
|
|
138
|
+
// the managed observation is already complete without any of this.
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Same stamps the managed path applies, so one query shape works across both
|
|
143
|
+
// (#1279). Defaults matter most here: a default VPC or security group is
|
|
144
|
+
// ambient by definition — nobody declared it.
|
|
145
|
+
const { stampRegion } = await import("./properties.js");
|
|
146
|
+
const { stampProviderDefaults } = await import("./defaults.js");
|
|
147
|
+
return stampProviderDefaults(stampRegion(ambient, options.region));
|
|
148
|
+
}
|
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
* than keys: `AWS_PROFILE=dev` with an SSO session came back as "no identity
|
|
9
9
|
* is configured" while `aws sts get-caller-identity` answered. This module is
|
|
10
10
|
* the asynchronous half: it resolves what the CLI would sign with and hands
|
|
11
|
-
* back literal credentials plus a label for where they came from.
|
|
11
|
+
* back literal credentials plus a label for where they came from. The read
|
|
12
|
+
* transport uses the same walk through {@link transportCredentials} (#3958),
|
|
13
|
+
* so whoami and `describeResources` sign as the same principal.
|
|
12
14
|
*
|
|
13
15
|
* There is still no `@aws-sdk/*` here, for the reason the read transport gives:
|
|
14
16
|
* a lexicon keeps that tree out. The chain is small enough to state.
|
|
@@ -16,8 +18,7 @@
|
|
|
16
18
|
* ## Order
|
|
17
19
|
*
|
|
18
20
|
* 1. `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` (+ `AWS_SESSION_TOKEN`).
|
|
19
|
-
* They win over `AWS_PROFILE`, as they do in the AWS CLI
|
|
20
|
-
* in chant's own read transport, which signs with nothing else. (The JS
|
|
21
|
+
* They win over `AWS_PROFILE`, as they do in the AWS CLI. (The JS
|
|
21
22
|
* SDK v3 skips the environment when `AWS_PROFILE` is set; the CLI does
|
|
22
23
|
* not, and the CLI is what an operator checks whoami against.) When both
|
|
23
24
|
* are set, the label says the profile was not used.
|
|
@@ -86,6 +87,8 @@ export interface ResolvedChainCredentials {
|
|
|
86
87
|
source: string;
|
|
87
88
|
/** The profile that resolved them, when one did. */
|
|
88
89
|
profile?: string;
|
|
90
|
+
/** When the credentials stop working, for role, SSO and `credential_process` credentials that say so. */
|
|
91
|
+
expiration?: Date;
|
|
89
92
|
}
|
|
90
93
|
export interface UnresolvedChainCredentials {
|
|
91
94
|
reason: "no-credentials" | "read-failed";
|
|
@@ -110,5 +113,29 @@ export declare function parseIni(text: string): Record<string, Section>;
|
|
|
110
113
|
* and their source, or a typed refusal that says what to do about it.
|
|
111
114
|
*/
|
|
112
115
|
export declare function resolveCredentialChain(options?: CredentialChainOptions): Promise<CredentialChainResult>;
|
|
116
|
+
/** Cached credentials are re-resolved this long before they expire. */
|
|
117
|
+
export declare const TRANSPORT_REFRESH_MARGIN_MS: number;
|
|
118
|
+
/**
|
|
119
|
+
* How long "nothing resolves" is kept before the chain is walked again, so a
|
|
120
|
+
* long-running process picks up an `aws sso login` done after it started.
|
|
121
|
+
*/
|
|
122
|
+
export declare const TRANSPORT_UNRESOLVED_TTL_MS: number;
|
|
123
|
+
/** Forget every cached walk. For tests, and for a process that changed its profile. */
|
|
124
|
+
export declare function resetTransportCredentials(): void;
|
|
125
|
+
/**
|
|
126
|
+
* What the native read transport signs with when the caller injected nothing:
|
|
127
|
+
* the same chain whoami walks, so `lifecycle diff --live` signs as the
|
|
128
|
+
* principal whoami reports. The signing seam (`AwsCredentialResolver` in
|
|
129
|
+
* ./sigv4.ts) is synchronous and the chain is not, so the transport awaits
|
|
130
|
+
* this once before a request and passes the literal credentials in.
|
|
131
|
+
*
|
|
132
|
+
* Environment keys answer directly, as in the chain. Otherwise the walk is
|
|
133
|
+
* cached per process, keyed by the profile and the shared-file locations, and
|
|
134
|
+
* walked again within {@link TRANSPORT_REFRESH_MARGIN_MS} of the expiry the
|
|
135
|
+
* role, SSO or `credential_process` answer carried. A refusal or a failure is
|
|
136
|
+
* `undefined`, which leaves the request unsigned exactly as before; it is kept
|
|
137
|
+
* for {@link TRANSPORT_UNRESOLVED_TTL_MS}.
|
|
138
|
+
*/
|
|
139
|
+
export declare function transportCredentials(options?: CredentialChainOptions): Promise<AwsCredentials | undefined>;
|
|
113
140
|
export {};
|
|
114
141
|
//# sourceMappingURL=credential-chain.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-chain.d.ts","sourceRoot":"","sources":["../../src/api/credential-chain.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"credential-chain.d.ts","sourceRoot":"","sources":["../../src/api/credential-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAOH,OAAO,EAA4B,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAC7E,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE/C,mEAAmE;AACnE,MAAM,MAAM,uBAAuB,GAAG,CACpC,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,oFAAoF;IACpF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAChD,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,sFAAsF;IACtF,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,cAAc,CAAC;IAC5B,6FAA6F;IAC7F,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yGAAyG;IACzG,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,gBAAgB,GAAG,aAAa,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,EAAE,wBAAwB,CAAA;CAAE,GACtC;IAAE,UAAU,EAAE,0BAA0B,CAAA;CAAE,CAAC;AAE/C,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAgBtC;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsB9D;AAgFD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAyCjH;AAqSD,uEAAuE;AACvE,eAAO,MAAM,2BAA2B,QAAa,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,2BAA2B,QAAa,CAAC;AAetD,uFAAuF;AACvF,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAiBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAoBpH"}
|