@go-to-k/cdkd 0.231.0 → 0.231.2
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/{asg-provider-Dgj3loIG.js → asg-provider-Dd9Xze-T.js} +2 -2
- package/dist/{asg-provider-Dgj3loIG.js.map → asg-provider-Dd9Xze-T.js.map} +1 -1
- package/dist/cli.js +88 -370
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-IqXCHYxE.js → deploy-engine-B9NOJeGf.js} +360 -8
- package/dist/deploy-engine-B9NOJeGf.js.map +1 -0
- package/dist/{import-helpers-DayvBD4T.js → ec2-termination-protection-uvVnteGl.js} +32 -32
- package/dist/ec2-termination-protection-uvVnteGl.js.map +1 -0
- package/dist/index.js +2 -2
- package/package.json +1 -1
- package/dist/deploy-engine-IqXCHYxE.js.map +0 -1
- package/dist/import-helpers-DayvBD4T.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { A as withErrorHandling, B as generateResourceName, C as StackHasActiveImportsError, F as getLiveRenderer, H as withSkipPrefix, I as PATTERN_B_NAME_OPTIONS, L as PATTERN_B_NAME_PROPERTIES, M as getLogger, P as runStackBuffered, R as PATTERN_B_RESOURCE_TYPES, S as ResourceUpdateNotSupportedError, U as withStackName, V as generateResourceNameWithFallback, _ as MissingCdkCliError, a as
|
|
2
|
+
import { A as withErrorHandling, B as generateResourceName, C as StackHasActiveImportsError, F as getLiveRenderer, H as withSkipPrefix, I as PATTERN_B_NAME_OPTIONS, L as PATTERN_B_NAME_PROPERTIES, M as getLogger, P as runStackBuffered, R as PATTERN_B_RESOURCE_TYPES, S as ResourceUpdateNotSupportedError, U as withStackName, V as generateResourceNameWithFallback, _ as MissingCdkCliError, a as normalizeAwsTagsToCfn, b as ProvisioningError, f as LocalInvokeBuildError$1, i as matchesCdkPath, k as normalizeAwsError, l as CdkdError, m as LocalStartServiceError, n as isTerminationProtectionPropagationError, o as resolveExplicitPhysicalId, p as LocalMigrateError, r as CDK_PATH_TAG, s as assertRegionMatch, t as disableInstanceApiTermination, v as NestedStackChildDirectDestroyError, w as StackTerminationProtectionError, x as ResourceTimeoutError, y as PartialFailureError } from "./ec2-termination-protection-uvVnteGl.js";
|
|
3
3
|
import { a as setAwsClients, i as resetAwsClients, r as getAwsClients, t as AwsClients } from "./aws-clients-pjPwZz1r.js";
|
|
4
|
-
import { $ as
|
|
5
|
-
import { t as ASGProvider } from "./asg-provider-
|
|
4
|
+
import { $ as resolveStateBucketWithDefault, A as DagBuilder, B as formatDockerLoginError, C as findActionableSilentDrops, D as WAFv2WebACLProvider, E as cfnRefValueFromPhysicalId, F as shouldRetainResource, G as getDockerImageBySourceHash, H as runDockerForeground, I as AssetPublisher, J as getDefaultStateBucketName, K as Synthesizer, L as stringifyValue, M as LockManager, N as S3StateBackend, O as applyRoleArnIfSet, P as rebuildClientForBucketRegion, Q as resolveSkipPrefix, R as WorkGraph, S as ProviderRegistry, T as IntrinsicFunctionResolver, U as runDockerStreaming, V as getDockerCmd, W as AssetManifestLoader, X as resolveApp, Y as getLegacyStateBucketName, Z as resolveCaptureObservedState, _ as green, a as withRetry, at as findLargeInlineResources, b as IAMRoleProvider, c as computeImplicitDeleteEdges, d as isStatefulRecreateTargetSync, et as resolveStateBucketWithDefaultAndSource, f as renderStatefulReason, g as gray, h as cyan, i as withResourceDeadline, it as MIGRATE_TMP_PREFIX, j as TemplateParser, k as DiffCalculator, l as extractDeploymentEventError, lt as resolveBucketRegion, m as bold, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nt as CFN_TEMPLATE_BODY_LIMIT, o as isRetryableTransientError, ot as uploadCfnTemplate, p as formatResourceLine, q as synthesisStatusMessage, r as DeployEngine, rt as CFN_TEMPLATE_URL_LIMIT, s as IMPLICIT_DELETE_DEPENDENCIES, st as AssemblyReader, t as DEFAULT_RESOURCE_TIMEOUT_MS, tt as warnDeprecatedNoPrefixCliFlag, u as MULTI_REGION_RECREATE_BLOCKED_TYPES, v as red, w as CloudControlProvider, x as collectInlinePolicyNamesManagedBySiblings, y as yellow, z as buildDockerImage } from "./deploy-engine-B9NOJeGf.js";
|
|
5
|
+
import { t as ASGProvider } from "./asg-provider-Dd9Xze-T.js";
|
|
6
6
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
7
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
8
8
|
import { CopyObjectCommand, CreateBucketCommand, DeleteBucketAnalyticsConfigurationCommand, DeleteBucketCommand, DeleteBucketCorsCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListBucketsCommand, ListDirectoryBucketsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -48,20 +48,19 @@ import { CreateStateMachineCommand, DeleteStateMachineCommand, DescribeStateMach
|
|
|
48
48
|
import { CreateClusterCommand, CreateServiceCommand, DeleteClusterCommand, DeleteServiceCommand, DeregisterTaskDefinitionCommand, DescribeClustersCommand, DescribeServicesCommand, DescribeTaskDefinitionCommand, ECSClient, ListClustersCommand, ListServicesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$11, PutClusterCapacityProvidersCommand, RegisterTaskDefinitionCommand, TagResourceCommand as TagResourceCommand$12, UntagResourceCommand as UntagResourceCommand$11, UpdateClusterCommand, UpdateServiceCommand } from "@aws-sdk/client-ecs";
|
|
49
49
|
import { AddTagsToResourceCommand as AddTagsToResourceCommand$3, CreateDBClusterCommand as CreateDBClusterCommand$1, CreateDBInstanceCommand as CreateDBInstanceCommand$1, CreateDBSubnetGroupCommand as CreateDBSubnetGroupCommand$1, DeleteDBClusterCommand as DeleteDBClusterCommand$1, DeleteDBInstanceCommand as DeleteDBInstanceCommand$1, DeleteDBSubnetGroupCommand as DeleteDBSubnetGroupCommand$1, DescribeDBClustersCommand as DescribeDBClustersCommand$1, DescribeDBInstancesCommand as DescribeDBInstancesCommand$1, DescribeDBSubnetGroupsCommand as DescribeDBSubnetGroupsCommand$1, DocDBClient, ListTagsForResourceCommand as ListTagsForResourceCommand$12, ModifyDBClusterCommand as ModifyDBClusterCommand$1, ModifyDBInstanceCommand as ModifyDBInstanceCommand$1, ModifyDBSubnetGroupCommand as ModifyDBSubnetGroupCommand$1, RemoveTagsFromResourceCommand as RemoveTagsFromResourceCommand$3 } from "@aws-sdk/client-docdb";
|
|
50
50
|
import { AddTagsToResourceCommand as AddTagsToResourceCommand$4, CreateDBClusterCommand as CreateDBClusterCommand$2, CreateDBInstanceCommand as CreateDBInstanceCommand$2, CreateDBSubnetGroupCommand as CreateDBSubnetGroupCommand$2, DeleteDBClusterCommand as DeleteDBClusterCommand$2, DeleteDBInstanceCommand as DeleteDBInstanceCommand$2, DeleteDBSubnetGroupCommand as DeleteDBSubnetGroupCommand$2, DescribeDBClustersCommand as DescribeDBClustersCommand$2, DescribeDBInstancesCommand as DescribeDBInstancesCommand$2, DescribeDBSubnetGroupsCommand as DescribeDBSubnetGroupsCommand$2, ListTagsForResourceCommand as ListTagsForResourceCommand$13, ModifyDBClusterCommand as ModifyDBClusterCommand$2, ModifyDBInstanceCommand as ModifyDBInstanceCommand$2, ModifyDBSubnetGroupCommand as ModifyDBSubnetGroupCommand$2, NeptuneClient, RemoveTagsFromResourceCommand as RemoveTagsFromResourceCommand$4 } from "@aws-sdk/client-neptune";
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
53
|
-
import {
|
|
54
|
-
import { AppSyncClient, CreateApiKeyCommand, CreateDataSourceCommand, CreateGraphqlApiCommand, CreateResolverCommand, DeleteApiKeyCommand, DeleteDataSourceCommand, DeleteGraphqlApiCommand, DeleteResolverCommand, GetDataSourceCommand, GetGraphqlApiCommand, GetIntrospectionSchemaCommand, GetResolverCommand, ListApiKeysCommand, ListGraphqlApisCommand, NotFoundException as NotFoundException$4, StartSchemaCreationCommand, TagResourceCommand as TagResourceCommand$14, UntagResourceCommand as UntagResourceCommand$13, UpdateApiKeyCommand, UpdateDataSourceCommand, UpdateGraphqlApiCommand, UpdateResolverCommand } from "@aws-sdk/client-appsync";
|
|
51
|
+
import { AddCustomAttributesCommand, CognitoIdentityProviderClient, CreateUserPoolCommand, DeleteUserPoolCommand, DescribeUserPoolCommand, GetUserPoolMfaConfigCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$14, ListUserPoolsCommand, ResourceNotFoundException as ResourceNotFoundException$7, SetUserPoolMfaConfigCommand, UpdateUserPoolCommand } from "@aws-sdk/client-cognito-identity-provider";
|
|
52
|
+
import { CreatePrivateDnsNamespaceCommand, CreateServiceCommand as CreateServiceCommand$1, DeleteNamespaceCommand, DeleteServiceAttributesCommand, DeleteServiceCommand as DeleteServiceCommand$1, GetNamespaceCommand, GetOperationCommand, GetServiceAttributesCommand, GetServiceCommand, ListNamespacesCommand, ListServicesCommand as ListServicesCommand$1, ListTagsForResourceCommand as ListTagsForResourceCommand$15, NamespaceNotFound, ServiceDiscoveryClient, ServiceNotFound, UpdatePrivateDnsNamespaceCommand, UpdateServiceAttributesCommand, UpdateServiceCommand as UpdateServiceCommand$1 } from "@aws-sdk/client-servicediscovery";
|
|
53
|
+
import { AppSyncClient, CreateApiKeyCommand, CreateDataSourceCommand, CreateGraphqlApiCommand, CreateResolverCommand, DeleteApiKeyCommand, DeleteDataSourceCommand, DeleteGraphqlApiCommand, DeleteResolverCommand, GetDataSourceCommand, GetGraphqlApiCommand, GetIntrospectionSchemaCommand, GetResolverCommand, ListApiKeysCommand, ListGraphqlApisCommand, NotFoundException as NotFoundException$4, StartSchemaCreationCommand, TagResourceCommand as TagResourceCommand$13, UntagResourceCommand as UntagResourceCommand$12, UpdateApiKeyCommand, UpdateDataSourceCommand, UpdateGraphqlApiCommand, UpdateResolverCommand } from "@aws-sdk/client-appsync";
|
|
55
54
|
import { parse, print } from "graphql";
|
|
56
55
|
import { CrawlerRunningException, CreateConnectionCommand, CreateCrawlerCommand, CreateDatabaseCommand, CreateJobCommand, CreateSecurityConfigurationCommand, CreateTableCommand as CreateTableCommand$1, CreateTriggerCommand, CreateWorkflowCommand, DeleteConnectionCommand, DeleteCrawlerCommand, DeleteDatabaseCommand, DeleteJobCommand, DeleteSecurityConfigurationCommand, DeleteTableCommand as DeleteTableCommand$1, DeleteTriggerCommand, DeleteWorkflowCommand, EntityNotFoundException, GetConnectionCommand, GetCrawlerCommand, GetDatabaseCommand, GetDatabasesCommand, GetJobCommand, GetSecurityConfigurationCommand, GetSecurityConfigurationsCommand, GetTableCommand, GetTablesCommand, GetTagsCommand, GetTriggerCommand, GetWorkflowCommand, GlueClient, ListWorkflowsCommand, StartCrawlerScheduleCommand, StartTriggerCommand, StopCrawlerCommand, StopCrawlerScheduleCommand, StopTriggerCommand, UpdateConnectionCommand, UpdateCrawlerCommand, UpdateDatabaseCommand, UpdateJobCommand, UpdateTableCommand as UpdateTableCommand$1, UpdateTriggerCommand, UpdateWorkflowCommand } from "@aws-sdk/client-glue";
|
|
57
|
-
import { AddTagsToStreamCommand, CreateStreamCommand, DecreaseStreamRetentionPeriodCommand, DeleteStreamCommand, DeregisterStreamConsumerCommand, DescribeStreamCommand, DescribeStreamConsumerCommand, DescribeStreamSummaryCommand, IncreaseStreamRetentionPeriodCommand, KinesisClient, ListStreamsCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$
|
|
56
|
+
import { AddTagsToStreamCommand, CreateStreamCommand, DecreaseStreamRetentionPeriodCommand, DeleteStreamCommand, DeregisterStreamConsumerCommand, DescribeStreamCommand, DescribeStreamConsumerCommand, DescribeStreamSummaryCommand, IncreaseStreamRetentionPeriodCommand, KinesisClient, ListStreamsCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$16, ListTagsForStreamCommand, RegisterStreamConsumerCommand, RemoveTagsFromStreamCommand, ResourceNotFoundException as ResourceNotFoundException$8, StartStreamEncryptionCommand, StopStreamEncryptionCommand, TagResourceCommand as TagResourceCommand$14, UntagResourceCommand as UntagResourceCommand$13, UpdateShardCountCommand, UpdateStreamModeCommand } from "@aws-sdk/client-kinesis";
|
|
58
57
|
import { CreateScheduleCommand, DeleteScheduleCommand, GetScheduleCommand, ResourceNotFoundException as ResourceNotFoundException$9, SchedulerClient, UpdateScheduleCommand } from "@aws-sdk/client-scheduler";
|
|
59
58
|
import { AccessPointNotFound, CreateAccessPointCommand, CreateFileSystemCommand, CreateMountTargetCommand, DeleteAccessPointCommand, DeleteFileSystemCommand, DeleteMountTargetCommand, DescribeAccessPointsCommand, DescribeBackupPolicyCommand, DescribeFileSystemPolicyCommand, DescribeFileSystemsCommand, DescribeLifecycleConfigurationCommand, DescribeMountTargetSecurityGroupsCommand, DescribeMountTargetsCommand, EFSClient, FileSystemNotFound, ModifyMountTargetSecurityGroupsCommand, MountTargetNotFound, PutBackupPolicyCommand, PutFileSystemPolicyCommand, PutLifecycleConfigurationCommand, UpdateFileSystemCommand, UpdateFileSystemProtectionCommand } from "@aws-sdk/client-efs";
|
|
60
59
|
import { CreateDeliveryStreamCommand, DeleteDeliveryStreamCommand, DescribeDeliveryStreamCommand, FirehoseClient, ListDeliveryStreamsCommand, ListTagsForDeliveryStreamCommand, ResourceNotFoundException as ResourceNotFoundException$10, TagDeliveryStreamCommand, UntagDeliveryStreamCommand, UpdateDestinationCommand } from "@aws-sdk/client-firehose";
|
|
61
60
|
import { AddTagsCommand as AddTagsCommand$1, CloudTrailClient, CreateTrailCommand, DeleteTrailCommand, GetEventSelectorsCommand, GetInsightSelectorsCommand, GetTrailCommand, GetTrailStatusCommand, ListTagsCommand as ListTagsCommand$1, ListTrailsCommand, PutEventSelectorsCommand, PutInsightSelectorsCommand, RemoveTagsCommand as RemoveTagsCommand$1, StartLoggingCommand, StopLoggingCommand, TrailNotFoundException, UpdateTrailCommand } from "@aws-sdk/client-cloudtrail";
|
|
62
61
|
import { BatchGetProjectsCommand, CodeBuildClient, CreateProjectCommand, DeleteProjectCommand, ListProjectsCommand, ResourceNotFoundException as ResourceNotFoundException$11, UpdateProjectCommand } from "@aws-sdk/client-codebuild";
|
|
63
|
-
import { CreateVectorBucketCommand, DeleteIndexCommand, DeleteVectorBucketCommand, GetVectorBucketCommand, ListIndexesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$
|
|
64
|
-
import { CreateNamespaceCommand, CreateTableBucketCommand, CreateTableCommand as CreateTableCommand$2, DeleteNamespaceCommand as DeleteNamespaceCommand$1, DeleteTableBucketCommand, DeleteTableCommand as DeleteTableCommand$2, GetTableBucketCommand, GetTableCommand as GetTableCommand$1, ListNamespacesCommand as ListNamespacesCommand$1, ListTableBucketsCommand, ListTablesCommand as ListTablesCommand$1, ListTagsForResourceCommand as ListTagsForResourceCommand$
|
|
62
|
+
import { CreateVectorBucketCommand, DeleteIndexCommand, DeleteVectorBucketCommand, GetVectorBucketCommand, ListIndexesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$17, ListVectorBucketsCommand, S3VectorsClient, TagResourceCommand as TagResourceCommand$15, UntagResourceCommand as UntagResourceCommand$14 } from "@aws-sdk/client-s3vectors";
|
|
63
|
+
import { CreateNamespaceCommand, CreateTableBucketCommand, CreateTableCommand as CreateTableCommand$2, DeleteNamespaceCommand as DeleteNamespaceCommand$1, DeleteTableBucketCommand, DeleteTableCommand as DeleteTableCommand$2, GetTableBucketCommand, GetTableCommand as GetTableCommand$1, ListNamespacesCommand as ListNamespacesCommand$1, ListTableBucketsCommand, ListTablesCommand as ListTablesCommand$1, ListTagsForResourceCommand as ListTagsForResourceCommand$18, NotFoundException as NotFoundException$5, S3TablesClient, TagResourceCommand as TagResourceCommand$16, UntagResourceCommand as UntagResourceCommand$15 } from "@aws-sdk/client-s3tables";
|
|
65
64
|
import { Document, Pair, Scalar, YAMLMap, YAMLSeq, parse as parse$1, stringify } from "yaml";
|
|
66
65
|
import { createLocalStartAgentCoreCommand, createLocalStartCloudFrontCommand, createLocalStateProvider, getEmbedConfig, isCfnFlagPresent, listTargets, rejectExplicitCfnStackWithMultipleStacks, resolveCfnFallbackRegion, setEmbedConfig, substituteAgainstState, substituteAgainstStateAsync, substituteEnvVarsFromState, substituteEnvVarsFromStateAsync } from "cdk-local";
|
|
67
66
|
import { A2A_CONTAINER_PORT, A2A_PATH, AGENTCORE_A2A_PROTOCOL, AGENTCORE_AGUI_PROTOCOL, AGENTCORE_MCP_PROTOCOL, ConnectionRegistry, EcsTaskResolutionError, HOST_GATEWAY_MIN_VERSION, LocalInvokeBuildError, MCP_CONTAINER_PORT, MCP_PATH, a2aInvokeOnce, addAlbSpecificOptions, addCommonEcsServiceOptions, addStartServiceSpecificOptions, albStrategy, architectureToPlatform, attachAuthorizers, attachStageContext, availableApiIdentifiers, bufferToBody, buildAgentCoreCodeImage, buildCognitoJwksUrl, buildConnectEvent, buildContainerImage, buildCorsConfigByApiId, buildCorsConfigFromCloudFrontChain, buildDisconnectEvent, buildJwksUrlFromIssuer, buildMessageEvent, buildMgmtEndpointEnvUrl, buildStageMap, classifySourceChange, createAuthorizerCache, createFileWatcher, createFileWatcher as createFileWatcher$1, createJwksCache, createWatchPredicates, defaultCredentialsLoader, derivePseudoParametersFromRegion, discoverRoutes, discoverWebSocketApis, downloadAndExtractS3Bundle, filterRoutesByApiIdentifier, groupRoutesByServer, handleConnectionsRequest, invokeAgentCore, invokeAgentCoreWs, materializeLayerFromArn, mcpInvokeOnce, parseConnectionsPath, parseSelectionExpressionPath, pickAgentCoreCandidateStack, pickAgentCoreCandidateStack as pickAgentCoreCandidateStack$1, probeHostGatewaySupport, readMtlsMaterialsFromDisk, resolveAgentCoreTarget, resolveEnvVars, resolveHostGatewayExtraHosts, resolveRuntimeCodeMountPath, resolveRuntimeFileExtension, resolveRuntimeImage, resolveSingleTarget, resolveWatchConfig, runEcsServiceEmulator, signAgentCoreInvocation, startApiServer, substituteImagePlaceholders, tryResolveImageFnJoin, verifyJwtViaDiscovery, waitForAgentCorePing } from "cdk-local/internal";
|
|
@@ -1446,7 +1445,7 @@ const FLUSH_INTERVAL_MS = 2e3;
|
|
|
1446
1445
|
const FLUSH_EVENT_THRESHOLD = 50;
|
|
1447
1446
|
/** Build-time cdkd version, with a dev fallback for non-built contexts. */
|
|
1448
1447
|
function getCdkdVersion() {
|
|
1449
|
-
return "0.231.
|
|
1448
|
+
return "0.231.2";
|
|
1450
1449
|
}
|
|
1451
1450
|
/**
|
|
1452
1451
|
* Generate a time-sortable unique run id, e.g.
|
|
@@ -9153,6 +9152,25 @@ function classifyEventSource(resp) {
|
|
|
9153
9152
|
if (arn.startsWith("arn:aws:rds:") || arn.startsWith("arn:aws-cn:rds:")) return "documentdb";
|
|
9154
9153
|
return "unknown";
|
|
9155
9154
|
}
|
|
9155
|
+
/**
|
|
9156
|
+
* Classify an event source mapping from its CFn property bag (as opposed to
|
|
9157
|
+
* `classifyEventSource`, which reads an AWS `GetEventSourceMapping` response).
|
|
9158
|
+
* The discriminating keys are identical in both shapes (`EventSourceArn` plus
|
|
9159
|
+
* the four `*EventSourceConfig` / `SelfManagedEventSource` markers), so this
|
|
9160
|
+
* is a thin type-narrowing adapter over the same logic. Used by `update()`'s
|
|
9161
|
+
* removal-clear path (issue #976) to gate source-kind-specific clears
|
|
9162
|
+
* (`FunctionResponseTypes` / `SourceAccessConfigurations` /
|
|
9163
|
+
* `MaximumBatchingWindowInSeconds`).
|
|
9164
|
+
*/
|
|
9165
|
+
function classifyEventSourceFromProperties(properties) {
|
|
9166
|
+
return classifyEventSource({
|
|
9167
|
+
EventSourceArn: properties["EventSourceArn"],
|
|
9168
|
+
SelfManagedEventSource: properties["SelfManagedEventSource"],
|
|
9169
|
+
AmazonManagedKafkaEventSourceConfig: properties["AmazonManagedKafkaEventSourceConfig"],
|
|
9170
|
+
SelfManagedKafkaEventSourceConfig: properties["SelfManagedKafkaEventSourceConfig"],
|
|
9171
|
+
DocumentDBEventSourceConfig: properties["DocumentDBEventSourceConfig"]
|
|
9172
|
+
});
|
|
9173
|
+
}
|
|
9156
9174
|
const KINDS_WITH_FUNCTION_RESPONSE_TYPES = new Set([
|
|
9157
9175
|
"sqs",
|
|
9158
9176
|
"kinesis",
|
|
@@ -9164,6 +9182,28 @@ const KINDS_WITH_SOURCE_ACCESS_CONFIGURATIONS = new Set([
|
|
|
9164
9182
|
"documentdb"
|
|
9165
9183
|
]);
|
|
9166
9184
|
/**
|
|
9185
|
+
* Source kinds whose `MaximumBatchingWindowInSeconds` default is `0` seconds
|
|
9186
|
+
* (SQS / Kinesis / DynamoDB). The poll-based kinds (Kafka / MSK / MQ /
|
|
9187
|
+
* DocumentDB) default to 500 ms, which cannot be restored via
|
|
9188
|
+
* `UpdateEventSourceMapping` (the field only accepts whole-second increments),
|
|
9189
|
+
* so the removal-on-UPDATE path only restores `0` for these kinds — see the
|
|
9190
|
+
* comment at the `MaximumBatchingWindowInSeconds` clear in `update()`.
|
|
9191
|
+
*/
|
|
9192
|
+
const KINDS_WITH_ZERO_BATCHING_WINDOW_DEFAULT = new Set([
|
|
9193
|
+
"sqs",
|
|
9194
|
+
"kinesis",
|
|
9195
|
+
"dynamodb"
|
|
9196
|
+
]);
|
|
9197
|
+
/**
|
|
9198
|
+
* Source kinds that accept the stream-processing numeric parameters
|
|
9199
|
+
* (`MaximumRetryAttempts` / `MaximumRecordAgeInSeconds` /
|
|
9200
|
+
* `ParallelizationFactor` / `TumblingWindowInSeconds`) — Kinesis / DynamoDB
|
|
9201
|
+
* streams only. AWS rejects these on SQS / Kafka / MQ / DocumentDB, so the
|
|
9202
|
+
* removal-on-UPDATE default-restore path is gated on this set (see the numeric
|
|
9203
|
+
* restores in `update()`).
|
|
9204
|
+
*/
|
|
9205
|
+
const KINDS_WITH_STREAM_NUMERICS = new Set(["kinesis", "dynamodb"]);
|
|
9206
|
+
/**
|
|
9167
9207
|
* AWS Lambda Event Source Mapping Provider
|
|
9168
9208
|
*
|
|
9169
9209
|
* Implements resource provisioning for AWS::Lambda::EventSourceMapping using the Lambda SDK.
|
|
@@ -9288,6 +9328,22 @@ var LambdaEventSourceMappingProvider = class {
|
|
|
9288
9328
|
if (properties["LoggingConfig"] !== void 0) updateParams.LoggingConfig = properties["LoggingConfig"];
|
|
9289
9329
|
if (properties["MetricsConfig"] !== void 0) updateParams.MetricsConfig = properties["MetricsConfig"];
|
|
9290
9330
|
if (properties["ProvisionedPollerConfig"] !== void 0) updateParams.ProvisionedPollerConfig = properties["ProvisionedPollerConfig"];
|
|
9331
|
+
const wasSet = (key) => previousProperties[key] !== void 0 && properties[key] === void 0;
|
|
9332
|
+
const prevKind = classifyEventSourceFromProperties(previousProperties);
|
|
9333
|
+
if (wasSet("FilterCriteria")) updateParams.FilterCriteria = {};
|
|
9334
|
+
if (wasSet("ScalingConfig")) updateParams.ScalingConfig = {};
|
|
9335
|
+
if (wasSet("DestinationConfig")) updateParams.DestinationConfig = {};
|
|
9336
|
+
if (wasSet("FunctionResponseTypes") && KINDS_WITH_FUNCTION_RESPONSE_TYPES.has(prevKind)) updateParams.FunctionResponseTypes = [];
|
|
9337
|
+
if (wasSet("SourceAccessConfigurations") && KINDS_WITH_SOURCE_ACCESS_CONFIGURATIONS.has(prevKind)) updateParams.SourceAccessConfigurations = [];
|
|
9338
|
+
if (wasSet("MetricsConfig")) updateParams.MetricsConfig = { Metrics: [] };
|
|
9339
|
+
if (wasSet("KmsKeyArn")) updateParams.KMSKeyArn = "";
|
|
9340
|
+
if (KINDS_WITH_STREAM_NUMERICS.has(prevKind)) {
|
|
9341
|
+
if (wasSet("MaximumRetryAttempts")) updateParams.MaximumRetryAttempts = -1;
|
|
9342
|
+
if (wasSet("MaximumRecordAgeInSeconds")) updateParams.MaximumRecordAgeInSeconds = -1;
|
|
9343
|
+
if (wasSet("ParallelizationFactor")) updateParams.ParallelizationFactor = 1;
|
|
9344
|
+
if (wasSet("TumblingWindowInSeconds")) updateParams.TumblingWindowInSeconds = 0;
|
|
9345
|
+
}
|
|
9346
|
+
if (wasSet("MaximumBatchingWindowInSeconds") && KINDS_WITH_ZERO_BATCHING_WINDOW_DEFAULT.has(prevKind)) updateParams.MaximumBatchingWindowInSeconds = 0;
|
|
9291
9347
|
const eventSourceMappingArn = (await this.lambdaClient.send(new UpdateEventSourceMappingCommand(updateParams))).EventSourceMappingArn;
|
|
9292
9348
|
if (eventSourceMappingArn) await this.applyTagDiff(eventSourceMappingArn, previousProperties["Tags"], properties["Tags"]);
|
|
9293
9349
|
this.logger.debug(`Successfully updated event source mapping ${logicalId}`);
|
|
@@ -26016,344 +26072,6 @@ var Route53Provider = class {
|
|
|
26016
26072
|
}
|
|
26017
26073
|
};
|
|
26018
26074
|
|
|
26019
|
-
//#endregion
|
|
26020
|
-
//#region src/provisioning/providers/wafv2-provider.ts
|
|
26021
|
-
/**
|
|
26022
|
-
* Translate the empty-string placeholder `readCurrentState` emits for an
|
|
26023
|
-
* absent `Description` to `undefined` before shipping it to AWS.
|
|
26024
|
-
*
|
|
26025
|
-
* `readCurrentState` always-emits `Description: ''` on a WebACL with no
|
|
26026
|
-
* description (the comparator's top-level walk is state-keys-only, so
|
|
26027
|
-
* the placeholder is required to detect a console-side description add).
|
|
26028
|
-
* AWS WAFv2 `CreateWebACL` / `UpdateWebACL` reject `Description: ''`
|
|
26029
|
-
* with `Member must have length greater than or equal to 1` (min 1 / max
|
|
26030
|
-
* 256). On `cdkd drift --revert` the placeholder would round-trip
|
|
26031
|
-
* through `update()` and surface as a hard AWS rejection, so we sanitize
|
|
26032
|
-
* the wire-layer payload while keeping the read-side placeholder
|
|
26033
|
-
* intact. This is the Class 2 pattern from
|
|
26034
|
-
* `docs/provider-development.md § 3b`.
|
|
26035
|
-
*/
|
|
26036
|
-
function sanitizeDescription(value) {
|
|
26037
|
-
if (value === void 0 || value === null) return void 0;
|
|
26038
|
-
if (typeof value === "string" && value.length === 0) return void 0;
|
|
26039
|
-
return value;
|
|
26040
|
-
}
|
|
26041
|
-
/**
|
|
26042
|
-
* Parse WAFv2 WebACL ARN to extract Id, Name, and Scope.
|
|
26043
|
-
*
|
|
26044
|
-
* ARN format:
|
|
26045
|
-
* arn:aws:wafv2:{region}:{account}:regional/webacl/{name}/{id}
|
|
26046
|
-
* arn:aws:wafv2:{region}:{account}:global/webacl/{name}/{id}
|
|
26047
|
-
*/
|
|
26048
|
-
function parseWebACLArn(arn) {
|
|
26049
|
-
const segments = arn.split(":").slice(5).join(":").split("/");
|
|
26050
|
-
const scopeRaw = segments[0];
|
|
26051
|
-
const name = segments[2];
|
|
26052
|
-
return {
|
|
26053
|
-
id: segments[3],
|
|
26054
|
-
name,
|
|
26055
|
-
scope: scopeRaw === "global" ? "CLOUDFRONT" : "REGIONAL"
|
|
26056
|
-
};
|
|
26057
|
-
}
|
|
26058
|
-
/**
|
|
26059
|
-
* AWS WAFv2 WebACL Provider
|
|
26060
|
-
*
|
|
26061
|
-
* Implements resource provisioning for AWS::WAFv2::WebACL using the WAFv2 SDK.
|
|
26062
|
-
* WHY: WAFv2 CreateWebACL is synchronous - the CC API adds unnecessary polling
|
|
26063
|
-
* overhead for an operation that completes immediately.
|
|
26064
|
-
* This SDK provider eliminates that polling and returns instantly.
|
|
26065
|
-
*/
|
|
26066
|
-
var WAFv2WebACLProvider = class {
|
|
26067
|
-
wafv2Client;
|
|
26068
|
-
providerRegion = process.env["AWS_REGION"];
|
|
26069
|
-
logger = getLogger().child("WAFv2WebACLProvider");
|
|
26070
|
-
handledProperties = new Map([["AWS::WAFv2::WebACL", new Set([
|
|
26071
|
-
"Name",
|
|
26072
|
-
"Scope",
|
|
26073
|
-
"Tags",
|
|
26074
|
-
"DefaultAction",
|
|
26075
|
-
"Description",
|
|
26076
|
-
"Rules",
|
|
26077
|
-
"VisibilityConfig",
|
|
26078
|
-
"CustomResponseBodies",
|
|
26079
|
-
"CaptchaConfig",
|
|
26080
|
-
"ChallengeConfig",
|
|
26081
|
-
"TokenDomains",
|
|
26082
|
-
"AssociationConfig"
|
|
26083
|
-
])]]);
|
|
26084
|
-
getClient() {
|
|
26085
|
-
if (!this.wafv2Client) this.wafv2Client = new WAFV2Client(this.providerRegion ? { region: this.providerRegion } : {});
|
|
26086
|
-
return this.wafv2Client;
|
|
26087
|
-
}
|
|
26088
|
-
/**
|
|
26089
|
-
* Create a WAFv2 WebACL
|
|
26090
|
-
*/
|
|
26091
|
-
async create(logicalId, resourceType, properties) {
|
|
26092
|
-
this.logger.debug(`Creating WAFv2 WebACL ${logicalId}`);
|
|
26093
|
-
const name = properties["Name"] || generateResourceName(logicalId, { maxLength: 128 });
|
|
26094
|
-
const scope = properties["Scope"] || "REGIONAL";
|
|
26095
|
-
try {
|
|
26096
|
-
const tags = [];
|
|
26097
|
-
if (properties["Tags"]) {
|
|
26098
|
-
const tagList = properties["Tags"];
|
|
26099
|
-
for (const tag of tagList) tags.push({
|
|
26100
|
-
Key: tag.Key,
|
|
26101
|
-
Value: tag.Value
|
|
26102
|
-
});
|
|
26103
|
-
}
|
|
26104
|
-
const summary = (await this.getClient().send(new CreateWebACLCommand({
|
|
26105
|
-
Name: name,
|
|
26106
|
-
Scope: scope,
|
|
26107
|
-
DefaultAction: properties["DefaultAction"],
|
|
26108
|
-
Description: sanitizeDescription(properties["Description"]),
|
|
26109
|
-
Rules: properties["Rules"] || [],
|
|
26110
|
-
VisibilityConfig: properties["VisibilityConfig"],
|
|
26111
|
-
...tags.length > 0 && { Tags: tags },
|
|
26112
|
-
CustomResponseBodies: properties["CustomResponseBodies"],
|
|
26113
|
-
CaptchaConfig: properties["CaptchaConfig"],
|
|
26114
|
-
ChallengeConfig: properties["ChallengeConfig"],
|
|
26115
|
-
TokenDomains: properties["TokenDomains"],
|
|
26116
|
-
AssociationConfig: properties["AssociationConfig"]
|
|
26117
|
-
}))).Summary;
|
|
26118
|
-
if (!summary?.ARN || !summary?.Id) throw new Error("CreateWebACL did not return Summary with ARN and Id");
|
|
26119
|
-
this.logger.debug(`Successfully created WAFv2 WebACL ${logicalId}: ${summary.ARN}`);
|
|
26120
|
-
return {
|
|
26121
|
-
physicalId: summary.ARN,
|
|
26122
|
-
attributes: {
|
|
26123
|
-
Arn: summary.ARN,
|
|
26124
|
-
Id: summary.Id,
|
|
26125
|
-
LabelNamespace: summary["LabelNamespace"]
|
|
26126
|
-
}
|
|
26127
|
-
};
|
|
26128
|
-
} catch (error) {
|
|
26129
|
-
if (error instanceof ProvisioningError) throw error;
|
|
26130
|
-
const cause = error instanceof Error ? error : void 0;
|
|
26131
|
-
throw new ProvisioningError(`Failed to create WAFv2 WebACL ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, void 0, cause);
|
|
26132
|
-
}
|
|
26133
|
-
}
|
|
26134
|
-
/**
|
|
26135
|
-
* Update a WAFv2 WebACL
|
|
26136
|
-
*
|
|
26137
|
-
* Name and Scope are immutable - changes to those require replacement.
|
|
26138
|
-
* UpdateWebACL requires LockToken obtained from GetWebACL.
|
|
26139
|
-
*/
|
|
26140
|
-
async update(logicalId, physicalId, resourceType, properties, previousProperties) {
|
|
26141
|
-
this.logger.debug(`Updating WAFv2 WebACL ${logicalId}: ${physicalId}`);
|
|
26142
|
-
try {
|
|
26143
|
-
const { id, name, scope } = parseWebACLArn(physicalId);
|
|
26144
|
-
const getResponse = await this.getClient().send(new GetWebACLCommand({
|
|
26145
|
-
Name: name,
|
|
26146
|
-
Scope: scope,
|
|
26147
|
-
Id: id
|
|
26148
|
-
}));
|
|
26149
|
-
const lockToken = getResponse.LockToken;
|
|
26150
|
-
if (!lockToken) throw new Error("GetWebACL did not return LockToken");
|
|
26151
|
-
await this.getClient().send(new UpdateWebACLCommand({
|
|
26152
|
-
Name: name,
|
|
26153
|
-
Scope: scope,
|
|
26154
|
-
Id: id,
|
|
26155
|
-
LockToken: lockToken,
|
|
26156
|
-
DefaultAction: properties["DefaultAction"],
|
|
26157
|
-
Description: sanitizeDescription(properties["Description"]),
|
|
26158
|
-
Rules: properties["Rules"] || [],
|
|
26159
|
-
VisibilityConfig: properties["VisibilityConfig"],
|
|
26160
|
-
CustomResponseBodies: properties["CustomResponseBodies"],
|
|
26161
|
-
CaptchaConfig: properties["CaptchaConfig"],
|
|
26162
|
-
ChallengeConfig: properties["ChallengeConfig"],
|
|
26163
|
-
TokenDomains: properties["TokenDomains"],
|
|
26164
|
-
AssociationConfig: properties["AssociationConfig"]
|
|
26165
|
-
}));
|
|
26166
|
-
await this.applyTagDiff(physicalId, previousProperties["Tags"], properties["Tags"]);
|
|
26167
|
-
this.logger.debug(`Successfully updated WAFv2 WebACL ${logicalId}`);
|
|
26168
|
-
return {
|
|
26169
|
-
physicalId,
|
|
26170
|
-
wasReplaced: false,
|
|
26171
|
-
attributes: {
|
|
26172
|
-
Arn: physicalId,
|
|
26173
|
-
Id: id,
|
|
26174
|
-
LabelNamespace: getResponse.WebACL?.LabelNamespace
|
|
26175
|
-
}
|
|
26176
|
-
};
|
|
26177
|
-
} catch (error) {
|
|
26178
|
-
if (error instanceof ProvisioningError) throw error;
|
|
26179
|
-
const cause = error instanceof Error ? error : void 0;
|
|
26180
|
-
throw new ProvisioningError(`Failed to update WAFv2 WebACL ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, physicalId, cause);
|
|
26181
|
-
}
|
|
26182
|
-
}
|
|
26183
|
-
/**
|
|
26184
|
-
* Delete a WAFv2 WebACL
|
|
26185
|
-
*
|
|
26186
|
-
* DeleteWebACL requires LockToken obtained from GetWebACL.
|
|
26187
|
-
* WAFNonexistentItemException is treated as success (idempotent delete).
|
|
26188
|
-
*/
|
|
26189
|
-
async delete(logicalId, physicalId, resourceType, _properties, context) {
|
|
26190
|
-
this.logger.debug(`Deleting WAFv2 WebACL ${logicalId}: ${physicalId}`);
|
|
26191
|
-
try {
|
|
26192
|
-
const { id, name, scope } = parseWebACLArn(physicalId);
|
|
26193
|
-
const lockToken = (await this.getClient().send(new GetWebACLCommand({
|
|
26194
|
-
Name: name,
|
|
26195
|
-
Scope: scope,
|
|
26196
|
-
Id: id
|
|
26197
|
-
}))).LockToken;
|
|
26198
|
-
if (!lockToken) throw new Error("GetWebACL did not return LockToken");
|
|
26199
|
-
await this.getClient().send(new DeleteWebACLCommand({
|
|
26200
|
-
Name: name,
|
|
26201
|
-
Scope: scope,
|
|
26202
|
-
Id: id,
|
|
26203
|
-
LockToken: lockToken
|
|
26204
|
-
}));
|
|
26205
|
-
this.logger.debug(`Successfully deleted WAFv2 WebACL ${logicalId}`);
|
|
26206
|
-
} catch (error) {
|
|
26207
|
-
if (error instanceof WAFNonexistentItemException) {
|
|
26208
|
-
assertRegionMatch(await this.getClient().config.region(), context?.expectedRegion, resourceType, logicalId, physicalId);
|
|
26209
|
-
this.logger.debug(`WAFv2 WebACL ${physicalId} does not exist, skipping deletion`);
|
|
26210
|
-
return;
|
|
26211
|
-
}
|
|
26212
|
-
const cause = error instanceof Error ? error : void 0;
|
|
26213
|
-
throw new ProvisioningError(`Failed to delete WAFv2 WebACL ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, physicalId, cause);
|
|
26214
|
-
}
|
|
26215
|
-
}
|
|
26216
|
-
/**
|
|
26217
|
-
* Apply a diff between old and new CFn-shape Tags arrays via WAFv2's
|
|
26218
|
-
* `TagResource` / `UntagResource` APIs (keyed by `ResourceARN`).
|
|
26219
|
-
*/
|
|
26220
|
-
async applyTagDiff(arn, oldTagsRaw, newTagsRaw) {
|
|
26221
|
-
const toMap = (tags) => {
|
|
26222
|
-
const m = /* @__PURE__ */ new Map();
|
|
26223
|
-
for (const t of tags ?? []) if (t.Key !== void 0 && t.Value !== void 0) m.set(t.Key, t.Value);
|
|
26224
|
-
return m;
|
|
26225
|
-
};
|
|
26226
|
-
const oldMap = toMap(oldTagsRaw);
|
|
26227
|
-
const newMap = toMap(newTagsRaw);
|
|
26228
|
-
const tagsToAdd = [];
|
|
26229
|
-
for (const [k, v] of newMap) if (oldMap.get(k) !== v) tagsToAdd.push({
|
|
26230
|
-
Key: k,
|
|
26231
|
-
Value: v
|
|
26232
|
-
});
|
|
26233
|
-
const tagsToRemove = [];
|
|
26234
|
-
for (const k of oldMap.keys()) if (!newMap.has(k)) tagsToRemove.push(k);
|
|
26235
|
-
if (tagsToRemove.length > 0) {
|
|
26236
|
-
await this.getClient().send(new UntagResourceCommand$12({
|
|
26237
|
-
ResourceARN: arn,
|
|
26238
|
-
TagKeys: tagsToRemove
|
|
26239
|
-
}));
|
|
26240
|
-
this.logger.debug(`Removed ${tagsToRemove.length} tag(s) from WAFv2 WebACL ${arn}`);
|
|
26241
|
-
}
|
|
26242
|
-
if (tagsToAdd.length > 0) {
|
|
26243
|
-
await this.getClient().send(new TagResourceCommand$13({
|
|
26244
|
-
ResourceARN: arn,
|
|
26245
|
-
Tags: tagsToAdd
|
|
26246
|
-
}));
|
|
26247
|
-
this.logger.debug(`Added/updated ${tagsToAdd.length} tag(s) on WAFv2 WebACL ${arn}`);
|
|
26248
|
-
}
|
|
26249
|
-
}
|
|
26250
|
-
/**
|
|
26251
|
-
* Read the AWS-current WAFv2 WebACL configuration in CFn-property shape.
|
|
26252
|
-
*
|
|
26253
|
-
* The cdkd physicalId is the WebACL ARN; we parse it back to
|
|
26254
|
-
* `(id, name, scope)` and call `GetWebACL`. The response holds Name,
|
|
26255
|
-
* Description, DefaultAction, Rules, VisibilityConfig,
|
|
26256
|
-
* CustomResponseBodies, CaptchaConfig, ChallengeConfig, TokenDomains,
|
|
26257
|
-
* and AssociationConfig — every key cdkd state declares as
|
|
26258
|
-
* `handledProperties`. `Scope` is recovered from the ARN parse.
|
|
26259
|
-
*
|
|
26260
|
-
* Tags are surfaced via a follow-up `ListTagsForResource(ResourceARN)`
|
|
26261
|
-
* call. CDK's `aws:*` auto-tags are filtered out and the result key is
|
|
26262
|
-
* omitted when AWS reports no user tags. Returns `undefined`
|
|
26263
|
-
* when the ARN can't be parsed or the WebACL is gone
|
|
26264
|
-
* (`WAFNonexistentItemException`).
|
|
26265
|
-
*/
|
|
26266
|
-
async readCurrentState(physicalId, _logicalId, _resourceType) {
|
|
26267
|
-
let id;
|
|
26268
|
-
let name;
|
|
26269
|
-
let scope;
|
|
26270
|
-
try {
|
|
26271
|
-
({id, name, scope} = parseWebACLArn(physicalId));
|
|
26272
|
-
} catch {
|
|
26273
|
-
return;
|
|
26274
|
-
}
|
|
26275
|
-
let webACL;
|
|
26276
|
-
try {
|
|
26277
|
-
webACL = (await this.getClient().send(new GetWebACLCommand({
|
|
26278
|
-
Id: id,
|
|
26279
|
-
Name: name,
|
|
26280
|
-
Scope: scope
|
|
26281
|
-
}))).WebACL;
|
|
26282
|
-
} catch (err) {
|
|
26283
|
-
if (err instanceof WAFNonexistentItemException) return void 0;
|
|
26284
|
-
throw err;
|
|
26285
|
-
}
|
|
26286
|
-
if (!webACL) return void 0;
|
|
26287
|
-
const result = {};
|
|
26288
|
-
if (webACL.Name !== void 0) result["Name"] = webACL.Name;
|
|
26289
|
-
result["Scope"] = scope;
|
|
26290
|
-
result["Description"] = webACL.Description ?? "";
|
|
26291
|
-
if (webACL.DefaultAction) result["DefaultAction"] = webACL.DefaultAction;
|
|
26292
|
-
result["Rules"] = (webACL.Rules ?? []).map((r) => r);
|
|
26293
|
-
if (webACL.VisibilityConfig) result["VisibilityConfig"] = webACL.VisibilityConfig;
|
|
26294
|
-
result["CustomResponseBodies"] = webACL.CustomResponseBodies ?? {};
|
|
26295
|
-
if (webACL.CaptchaConfig) result["CaptchaConfig"] = webACL.CaptchaConfig;
|
|
26296
|
-
if (webACL.ChallengeConfig) result["ChallengeConfig"] = webACL.ChallengeConfig;
|
|
26297
|
-
result["TokenDomains"] = webACL.TokenDomains ? [...webACL.TokenDomains] : [];
|
|
26298
|
-
if (webACL.AssociationConfig) result["AssociationConfig"] = webACL.AssociationConfig;
|
|
26299
|
-
try {
|
|
26300
|
-
result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$14({ ResourceARN: physicalId }))).TagInfoForResource?.TagList);
|
|
26301
|
-
} catch (err) {
|
|
26302
|
-
this.logger.debug(`WAFv2 ListTagsForResource(${physicalId}) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
26303
|
-
}
|
|
26304
|
-
return result;
|
|
26305
|
-
}
|
|
26306
|
-
/**
|
|
26307
|
-
* Adopt an existing WAFv2 WebACL into cdkd state.
|
|
26308
|
-
*
|
|
26309
|
-
* Lookup order:
|
|
26310
|
-
* 1. `--resource <id>=<arn>` override → verify with `GetWebACL` (parses
|
|
26311
|
-
* Name/Id/Scope back out of the ARN).
|
|
26312
|
-
* 2. Walk `ListWebACLs(Scope)` → match `aws:cdk:path` via
|
|
26313
|
-
* `ListTagsForResource(ResourceARN)` (returns
|
|
26314
|
-
* `TagInfoForResource.TagList`, standard `Key`/`Value` shape).
|
|
26315
|
-
*
|
|
26316
|
-
* `Scope` is required by `ListWebACLs` — read from
|
|
26317
|
-
* `Properties.Scope` (`REGIONAL` is the default).
|
|
26318
|
-
*/
|
|
26319
|
-
async import(input) {
|
|
26320
|
-
if (input.knownPhysicalId) try {
|
|
26321
|
-
const { id, name, scope } = parseWebACLArn(input.knownPhysicalId);
|
|
26322
|
-
await this.getClient().send(new GetWebACLCommand({
|
|
26323
|
-
Id: id,
|
|
26324
|
-
Name: name,
|
|
26325
|
-
Scope: scope
|
|
26326
|
-
}));
|
|
26327
|
-
return {
|
|
26328
|
-
physicalId: input.knownPhysicalId,
|
|
26329
|
-
attributes: {}
|
|
26330
|
-
};
|
|
26331
|
-
} catch (err) {
|
|
26332
|
-
if (err instanceof WAFNonexistentItemException) return null;
|
|
26333
|
-
throw err;
|
|
26334
|
-
}
|
|
26335
|
-
if (!input.cdkPath) return null;
|
|
26336
|
-
const scope = input.properties["Scope"] || "REGIONAL";
|
|
26337
|
-
let nextMarker;
|
|
26338
|
-
do {
|
|
26339
|
-
const list = await this.getClient().send(new ListWebACLsCommand({
|
|
26340
|
-
Scope: scope,
|
|
26341
|
-
...nextMarker && { NextMarker: nextMarker }
|
|
26342
|
-
}));
|
|
26343
|
-
for (const item of list.WebACLs ?? []) {
|
|
26344
|
-
if (!item.ARN) continue;
|
|
26345
|
-
const tagList = (await this.getClient().send(new ListTagsForResourceCommand$14({ ResourceARN: item.ARN }))).TagInfoForResource?.TagList;
|
|
26346
|
-
if (matchesCdkPath(tagList, input.cdkPath)) return {
|
|
26347
|
-
physicalId: item.ARN,
|
|
26348
|
-
attributes: {}
|
|
26349
|
-
};
|
|
26350
|
-
}
|
|
26351
|
-
nextMarker = list.NextMarker;
|
|
26352
|
-
} while (nextMarker);
|
|
26353
|
-
return null;
|
|
26354
|
-
}
|
|
26355
|
-
};
|
|
26356
|
-
|
|
26357
26075
|
//#endregion
|
|
26358
26076
|
//#region src/provisioning/providers/cognito-provider.ts
|
|
26359
26077
|
/**
|
|
@@ -26908,7 +26626,7 @@ var CognitoUserPoolProvider = class {
|
|
|
26908
26626
|
if (input.cdkPath) try {
|
|
26909
26627
|
const arn = (await this.getClient().send(new DescribeUserPoolCommand({ UserPoolId: pool.Id }))).UserPool?.Arn;
|
|
26910
26628
|
if (!arn) continue;
|
|
26911
|
-
if ((await this.getClient().send(new ListTagsForResourceCommand$
|
|
26629
|
+
if ((await this.getClient().send(new ListTagsForResourceCommand$14({ ResourceArn: arn }))).Tags?.["aws:cdk:path"] === input.cdkPath) return {
|
|
26912
26630
|
physicalId: pool.Id,
|
|
26913
26631
|
attributes: {}
|
|
26914
26632
|
};
|
|
@@ -27896,7 +27614,7 @@ var ServiceDiscoveryProvider = class {
|
|
|
27896
27614
|
/** Best-effort tag fetch via `ListTagsForResource(ResourceARN)`. */
|
|
27897
27615
|
async attachTags(result, arn) {
|
|
27898
27616
|
try {
|
|
27899
|
-
result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$
|
|
27617
|
+
result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$15({ ResourceARN: arn }))).Tags);
|
|
27900
27618
|
} catch (err) {
|
|
27901
27619
|
this.logger.debug(`ServiceDiscovery ListTagsForResource(${arn}) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
27902
27620
|
}
|
|
@@ -27930,7 +27648,7 @@ var ServiceDiscoveryProvider = class {
|
|
|
27930
27648
|
attributes: {}
|
|
27931
27649
|
};
|
|
27932
27650
|
if (input.cdkPath) try {
|
|
27933
|
-
if (matchesCdkPath((await this.getClient().send(new ListTagsForResourceCommand$
|
|
27651
|
+
if (matchesCdkPath((await this.getClient().send(new ListTagsForResourceCommand$15({ ResourceARN: ns.Arn }))).Tags, input.cdkPath)) return {
|
|
27934
27652
|
physicalId: ns.Id,
|
|
27935
27653
|
attributes: {}
|
|
27936
27654
|
};
|
|
@@ -27961,7 +27679,7 @@ var ServiceDiscoveryProvider = class {
|
|
|
27961
27679
|
for (const svc of list.Services ?? []) {
|
|
27962
27680
|
if (!svc.Id || !svc.Arn) continue;
|
|
27963
27681
|
try {
|
|
27964
|
-
if (matchesCdkPath((await this.getClient().send(new ListTagsForResourceCommand$
|
|
27682
|
+
if (matchesCdkPath((await this.getClient().send(new ListTagsForResourceCommand$15({ ResourceARN: svc.Arn }))).Tags, input.cdkPath)) return {
|
|
27965
27683
|
physicalId: svc.Id,
|
|
27966
27684
|
attributes: {}
|
|
27967
27685
|
};
|
|
@@ -28351,7 +28069,7 @@ var AppSyncProvider = class {
|
|
|
28351
28069
|
const tagsToAdd = {};
|
|
28352
28070
|
for (const [k, v] of Object.entries(newMap)) if (oldMap[k] !== v) tagsToAdd[k] = v;
|
|
28353
28071
|
if (tagKeysToRemove.length > 0) try {
|
|
28354
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
28072
|
+
await this.getClient().send(new UntagResourceCommand$12({
|
|
28355
28073
|
resourceArn: arn,
|
|
28356
28074
|
tagKeys: tagKeysToRemove
|
|
28357
28075
|
}));
|
|
@@ -28359,7 +28077,7 @@ var AppSyncProvider = class {
|
|
|
28359
28077
|
throw this.wrapUpdateError(error, resourceType, logicalId, apiId, "GraphqlApi (untag)");
|
|
28360
28078
|
}
|
|
28361
28079
|
if (Object.keys(tagsToAdd).length > 0) try {
|
|
28362
|
-
await this.getClient().send(new TagResourceCommand$
|
|
28080
|
+
await this.getClient().send(new TagResourceCommand$13({
|
|
28363
28081
|
resourceArn: arn,
|
|
28364
28082
|
tags: tagsToAdd
|
|
28365
28083
|
}));
|
|
@@ -31711,7 +31429,7 @@ var KinesisStreamConsumerProvider = class {
|
|
|
31711
31429
|
if (desc.ConsumerName !== void 0) result["ConsumerName"] = desc.ConsumerName;
|
|
31712
31430
|
if (desc.StreamARN !== void 0) result["StreamARN"] = desc.StreamARN;
|
|
31713
31431
|
try {
|
|
31714
|
-
result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$
|
|
31432
|
+
result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$16({ ResourceARN: physicalId }))).Tags);
|
|
31715
31433
|
} catch (err) {
|
|
31716
31434
|
if (err instanceof ResourceNotFoundException$8) return void 0;
|
|
31717
31435
|
this.logger.debug(`ListTagsForResource(${physicalId}) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -31735,14 +31453,14 @@ var KinesisStreamConsumerProvider = class {
|
|
|
31735
31453
|
const tagsToRemove = [];
|
|
31736
31454
|
for (const k of Object.keys(oldMap)) if (!(k in newMap)) tagsToRemove.push(k);
|
|
31737
31455
|
if (tagsToRemove.length > 0) {
|
|
31738
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
31456
|
+
await this.getClient().send(new UntagResourceCommand$13({
|
|
31739
31457
|
ResourceARN: consumerArn,
|
|
31740
31458
|
TagKeys: tagsToRemove
|
|
31741
31459
|
}));
|
|
31742
31460
|
this.logger.debug(`Removed ${tagsToRemove.length} tag(s) from Kinesis stream consumer ${consumerArn}`);
|
|
31743
31461
|
}
|
|
31744
31462
|
if (Object.keys(tagsToAdd).length > 0) {
|
|
31745
|
-
await this.getClient().send(new TagResourceCommand$
|
|
31463
|
+
await this.getClient().send(new TagResourceCommand$14({
|
|
31746
31464
|
ResourceARN: consumerArn,
|
|
31747
31465
|
Tags: tagsToAdd
|
|
31748
31466
|
}));
|
|
@@ -34808,11 +34526,11 @@ var S3VectorsProvider = class {
|
|
|
34808
34526
|
}
|
|
34809
34527
|
if (!resourceArn) throw new ProvisioningError(`Could not resolve ARN for S3 VectorBucket ${logicalId} (${physicalId}); cannot apply tag update.`, resourceType, logicalId, physicalId);
|
|
34810
34528
|
try {
|
|
34811
|
-
if (Object.keys(toSet).length > 0) await this.getClient().send(new TagResourceCommand$
|
|
34529
|
+
if (Object.keys(toSet).length > 0) await this.getClient().send(new TagResourceCommand$15({
|
|
34812
34530
|
resourceArn,
|
|
34813
34531
|
tags: toSet
|
|
34814
34532
|
}));
|
|
34815
|
-
if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$
|
|
34533
|
+
if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$14({
|
|
34816
34534
|
resourceArn,
|
|
34817
34535
|
tagKeys: toRemove
|
|
34818
34536
|
}));
|
|
@@ -34940,7 +34658,7 @@ var S3VectorsProvider = class {
|
|
|
34940
34658
|
if (Object.keys(enc).length > 0) result["EncryptionConfiguration"] = enc;
|
|
34941
34659
|
}
|
|
34942
34660
|
if (bucket?.vectorBucketArn) try {
|
|
34943
|
-
result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$
|
|
34661
|
+
result["Tags"] = normalizeAwsTagsToCfn((await this.getClient().send(new ListTagsForResourceCommand$17({ resourceArn: bucket.vectorBucketArn }))).tags);
|
|
34944
34662
|
} catch (err) {
|
|
34945
34663
|
this.logger.debug(`S3Vectors ListTagsForResource(${bucket.vectorBucketArn}) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
34946
34664
|
result["Tags"] = [];
|
|
@@ -34976,7 +34694,7 @@ var S3VectorsProvider = class {
|
|
|
34976
34694
|
for (const bucket of list.vectorBuckets ?? []) {
|
|
34977
34695
|
if (!bucket.vectorBucketName || !bucket.vectorBucketArn) continue;
|
|
34978
34696
|
try {
|
|
34979
|
-
if ((await this.getClient().send(new ListTagsForResourceCommand$
|
|
34697
|
+
if ((await this.getClient().send(new ListTagsForResourceCommand$17({ resourceArn: bucket.vectorBucketArn }))).tags?.["aws:cdk:path"] === input.cdkPath) return {
|
|
34980
34698
|
physicalId: bucket.vectorBucketName,
|
|
34981
34699
|
attributes: {}
|
|
34982
34700
|
};
|
|
@@ -35586,7 +35304,7 @@ var S3TablesProvider = class {
|
|
|
35586
35304
|
attributes: {}
|
|
35587
35305
|
};
|
|
35588
35306
|
if (input.cdkPath) try {
|
|
35589
|
-
if ((await this.getClient().send(new ListTagsForResourceCommand$
|
|
35307
|
+
if ((await this.getClient().send(new ListTagsForResourceCommand$18({ resourceArn: bucket.arn }))).tags?.["aws:cdk:path"] === input.cdkPath) return {
|
|
35590
35308
|
physicalId: bucket.arn,
|
|
35591
35309
|
attributes: {}
|
|
35592
35310
|
};
|
|
@@ -35653,7 +35371,7 @@ var S3TablesProvider = class {
|
|
|
35653
35371
|
for (const table of tables.tables ?? []) {
|
|
35654
35372
|
if (!table.name || !table.tableARN) continue;
|
|
35655
35373
|
try {
|
|
35656
|
-
if ((await this.getClient().send(new ListTagsForResourceCommand$
|
|
35374
|
+
if ((await this.getClient().send(new ListTagsForResourceCommand$18({ resourceArn: table.tableARN }))).tags?.["aws:cdk:path"] === input.cdkPath) return {
|
|
35657
35375
|
physicalId: `${bucket.arn}|${namespaceName}|${table.name}`,
|
|
35658
35376
|
attributes: {}
|
|
35659
35377
|
};
|
|
@@ -35749,7 +35467,7 @@ var S3TablesProvider = class {
|
|
|
35749
35467
|
*/
|
|
35750
35468
|
async readTagsBestEffort(resourceArn) {
|
|
35751
35469
|
try {
|
|
35752
|
-
const tags = (await this.getClient().send(new ListTagsForResourceCommand$
|
|
35470
|
+
const tags = (await this.getClient().send(new ListTagsForResourceCommand$18({ resourceArn }))).tags ?? {};
|
|
35753
35471
|
const out = [];
|
|
35754
35472
|
for (const [Key, Value] of Object.entries(tags)) out.push({
|
|
35755
35473
|
Key,
|
|
@@ -35803,7 +35521,7 @@ var S3TablesProvider = class {
|
|
|
35803
35521
|
const resourceArn = await this.lookupTableArn(tableBucketARN, namespace, name);
|
|
35804
35522
|
if (!resourceArn) throw new ProvisioningError(`applyTableTagsDiff: GetTable returned no tableARN for ${physicalId} — table is gone or state is out-of-sync. Refusing to silently drop the tag update (run 'cdkd state orphan ${logicalId}' to clean up if the table was deleted out-of-band).`, resourceType, logicalId, physicalId);
|
|
35805
35523
|
if (removedKeys.length > 0) try {
|
|
35806
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
35524
|
+
await this.getClient().send(new UntagResourceCommand$15({
|
|
35807
35525
|
resourceArn,
|
|
35808
35526
|
tagKeys: removedKeys
|
|
35809
35527
|
}));
|
|
@@ -35812,7 +35530,7 @@ var S3TablesProvider = class {
|
|
|
35812
35530
|
throw new ProvisioningError(`applyTableTagsDiff: UntagResource failed for ${resourceArn} (keys: ${removedKeys.join(", ")}): ${err instanceof Error ? err.message : String(err)}. State has NOT been updated so the next deploy will retry the tag-diff.`, resourceType, logicalId, physicalId, cause);
|
|
35813
35531
|
}
|
|
35814
35532
|
if (Object.keys(upserts).length > 0) try {
|
|
35815
|
-
await this.getClient().send(new TagResourceCommand$
|
|
35533
|
+
await this.getClient().send(new TagResourceCommand$16({
|
|
35816
35534
|
resourceArn,
|
|
35817
35535
|
tags: upserts
|
|
35818
35536
|
}));
|
|
@@ -35844,7 +35562,7 @@ var S3TablesProvider = class {
|
|
|
35844
35562
|
if (removedKeys.length === 0 && Object.keys(upserts).length === 0) return;
|
|
35845
35563
|
const resourceArn = physicalId;
|
|
35846
35564
|
if (removedKeys.length > 0) try {
|
|
35847
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
35565
|
+
await this.getClient().send(new UntagResourceCommand$15({
|
|
35848
35566
|
resourceArn,
|
|
35849
35567
|
tagKeys: removedKeys
|
|
35850
35568
|
}));
|
|
@@ -35853,7 +35571,7 @@ var S3TablesProvider = class {
|
|
|
35853
35571
|
throw new ProvisioningError(`applyTableBucketTagsDiff: UntagResource failed for ${resourceArn} (keys: ${removedKeys.join(", ")}): ${err instanceof Error ? err.message : String(err)}. State has NOT been updated so the next deploy will retry the tag-diff.`, resourceType, logicalId, physicalId, cause);
|
|
35854
35572
|
}
|
|
35855
35573
|
if (Object.keys(upserts).length > 0) try {
|
|
35856
|
-
await this.getClient().send(new TagResourceCommand$
|
|
35574
|
+
await this.getClient().send(new TagResourceCommand$16({
|
|
35857
35575
|
resourceArn,
|
|
35858
35576
|
tags: upserts
|
|
35859
35577
|
}));
|
|
@@ -55796,7 +55514,7 @@ function reorderArgs(argv) {
|
|
|
55796
55514
|
async function main() {
|
|
55797
55515
|
installPipeCloseHandler();
|
|
55798
55516
|
const program = new Command();
|
|
55799
|
-
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.231.
|
|
55517
|
+
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.231.2");
|
|
55800
55518
|
program.addCommand(createBootstrapCommand());
|
|
55801
55519
|
program.addCommand(createSynthCommand());
|
|
55802
55520
|
program.addCommand(createListCommand());
|