@go-to-k/cdkd 0.291.18 → 0.291.19
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-DR5gOGbi.js → asg-provider-Dpki2-Xd.js} +5 -5
- package/dist/asg-provider-Dpki2-Xd.js.map +1 -0
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-BwDlgFRs.js → deploy-engine-OgrMdBRR.js} +225 -80
- package/dist/deploy-engine-OgrMdBRR.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{program-DxyHPT8E.js → program-L-XPPVLA.js} +64 -64
- package/dist/{program-DxyHPT8E.js.map → program-L-XPPVLA.js.map} +1 -1
- package/dist/{version-CJkb2usU.js → version-2QIPw29e.js} +2 -2
- package/dist/{version-CJkb2usU.js.map → version-2QIPw29e.js.map} +1 -1
- package/package.json +1 -1
- package/dist/asg-provider-DR5gOGbi.js.map +0 -1
- package/dist/deploy-engine-BwDlgFRs.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { C as displayAwsMessage, D as isPasteableIdent, E as displayStackName, O as truncateCodePoints, S as UNRENDERABLE, T as displaySafe, d as applyDefaultNameForFallback, f as explicitNamePropertyFor, g as looksLikeCdkdGeneratedName, h as getCurrentStackName, m as generateResourceNameWithFallback, n as getLogger, p as generateResourceName, r as isStdoutReservedForPayload, s as getLiveRenderer, v as withStackName, w as displayIdent, x as STACK_REF_MAX_CODE_POINTS, y as withoutGeneratedFallbackName } from "./logger-Bt0RGDfb.js";
|
|
2
2
|
import { a as setAssumedRoleCredentials, c as currentStackAwsScope, i as getPreAssumeEnvCredentials, l as runInStackAwsScope, n as awsClientDefaults, o as setPreAssumeEnvCredentials, r as getAssumedRoleCredentials, s as ambientRegion, t as SECOND_ROLE_PUBLISH_REFUSAL } from "./aws-client-defaults-jISU4PHo.js";
|
|
3
|
-
import { t as getCdkdVersion } from "./version-
|
|
3
|
+
import { t as getCdkdVersion } from "./version-2QIPw29e.js";
|
|
4
4
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
5
5
|
import { createHash, randomUUID } from "node:crypto";
|
|
6
6
|
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -4120,6 +4120,109 @@ var ContextStore = class {
|
|
|
4120
4120
|
}
|
|
4121
4121
|
};
|
|
4122
4122
|
|
|
4123
|
+
//#endregion
|
|
4124
|
+
//#region src/utils/ambient-client-defaults.ts
|
|
4125
|
+
/**
|
|
4126
|
+
* Client config for an SDK client built OUTSIDE `AwsClients` (issue
|
|
4127
|
+
* [#3588](https://github.com/go-to-k/cdkd/issues/3588)).
|
|
4128
|
+
*
|
|
4129
|
+
* `awsClientDefaults()` alone carries the ambient ENVIRONMENT — `AWS_PROFILE`,
|
|
4130
|
+
* a published `--role-arn` role, the proxy handler, a stack scope's region — but
|
|
4131
|
+
* not an explicit `AwsClientConfig.credentials` object, which has no
|
|
4132
|
+
* environment path at all. A LIBRARY caller that installs
|
|
4133
|
+
* `new AwsClients({ credentials })` (`AwsClients` / `setAwsClients` are public
|
|
4134
|
+
* exports) therefore had every client a provider, context provider,
|
|
4135
|
+
* asset publisher or the cross-account STS hop built for itself signing with
|
|
4136
|
+
* the default credential chain: a different identity from the one it
|
|
4137
|
+
* configured. {@link ambientClientDefaults} closes that for every site at once
|
|
4138
|
+
* by reading the ACTIVE clients' {@link AwsClients.credentialConfig}.
|
|
4139
|
+
*
|
|
4140
|
+
* BOUND: a site that caches its client (every SDK provider's lazy
|
|
4141
|
+
* `getClient()`) captures the identity active at its FIRST call. cdkd builds a
|
|
4142
|
+
* provider registry per stack inside that stack's scope, so this is the stack's
|
|
4143
|
+
* identity; a library caller that reuses one registry across `setAwsClients`
|
|
4144
|
+
* switches keeps the first identity's clients.
|
|
4145
|
+
*
|
|
4146
|
+
* SPREAD IT FIRST, exactly where `awsClientDefaults()` was spread:
|
|
4147
|
+
*
|
|
4148
|
+
* `new GlueClient({ ...ambientClientDefaults(), ...(region && { region }) })`
|
|
4149
|
+
*
|
|
4150
|
+
* The site's own keys still win, so a site that names its own `region` or its
|
|
4151
|
+
* own `credentials` keeps them. `scripts/check-aws-client-defaults.ts` accepts
|
|
4152
|
+
* this helper as the defaults spread (it calls `awsClientDefaults` afresh per
|
|
4153
|
+
* call, so each client still gets its own routing agent), and
|
|
4154
|
+
* `tests/unit/utils/ambient-client-defaults-fence.test.ts` refuses a new
|
|
4155
|
+
* `awsClientDefaults()`-only construction under `src/**`.
|
|
4156
|
+
*
|
|
4157
|
+
* Its own module rather than a member of `aws-clients.ts` so that a test which
|
|
4158
|
+
* `vi.mock`s `aws-clients.js` with a `getAwsClients` double still reaches this
|
|
4159
|
+
* code and degrades, instead of losing the export. It is deliberately OUTSIDE
|
|
4160
|
+
* the literal-`.ts` closure `scripts/audit-provider-coverage.ts` resolves
|
|
4161
|
+
* (nothing in that closure imports it), and neither module it imports imports
|
|
4162
|
+
* it back, so there is no cycle.
|
|
4163
|
+
*/
|
|
4164
|
+
/**
|
|
4165
|
+
* The ACTIVE clients' credential configuration: the stack scope's
|
|
4166
|
+
* `AwsClients` inside `runWithStackAwsClients`, else the process-global one.
|
|
4167
|
+
*
|
|
4168
|
+
* `{}` when those clients carry none (every CLI run passes no explicit
|
|
4169
|
+
* `credentials`, and `--profile` alone yields `{ profile }`), and also for a
|
|
4170
|
+
* test double that has no `credentialConfig` getter — degrading to the plain
|
|
4171
|
+
* `awsClientDefaults()` answer rather than throwing.
|
|
4172
|
+
*
|
|
4173
|
+
* Read through `getAwsClients()`, which creates an unconfigured global on first
|
|
4174
|
+
* use when nothing installed one. That is side-effect free here: its service
|
|
4175
|
+
* clients are lazy, no production call passes `getAwsClients(config)` (so no
|
|
4176
|
+
* later configuration is shadowed), and `setAwsClients` replaces it.
|
|
4177
|
+
*/
|
|
4178
|
+
function ambientCredentialConfig() {
|
|
4179
|
+
return getAwsClients()?.credentialConfig ?? {};
|
|
4180
|
+
}
|
|
4181
|
+
/**
|
|
4182
|
+
* `awsClientDefaults(...)` plus `credentialConfig`, in `AwsClients.clientOptions`'
|
|
4183
|
+
* spread order: the defaults FIRST, so an explicit `credentials` outranks a
|
|
4184
|
+
* published `--role-arn` role, then `profile`, then `credentials`.
|
|
4185
|
+
*
|
|
4186
|
+
* Takes the configuration as an argument for the callers that must key a cache
|
|
4187
|
+
* on the SAME reading they build from ({@link credentialFingerprint}); every
|
|
4188
|
+
* other site calls {@link ambientClientDefaults}.
|
|
4189
|
+
*/
|
|
4190
|
+
function clientDefaultsFor(credentialConfig) {
|
|
4191
|
+
return {
|
|
4192
|
+
...awsClientDefaults({ profile: credentialConfig.profile }),
|
|
4193
|
+
...credentialConfig.profile && { profile: credentialConfig.profile },
|
|
4194
|
+
...credentialConfig.credentials && { credentials: { ...credentialConfig.credentials } }
|
|
4195
|
+
};
|
|
4196
|
+
}
|
|
4197
|
+
/**
|
|
4198
|
+
* The config every SDK client built outside `AwsClients` spreads first: the
|
|
4199
|
+
* proxy / role / scope-region defaults plus the ACTIVE clients' profile and
|
|
4200
|
+
* explicit credentials.
|
|
4201
|
+
*/
|
|
4202
|
+
function ambientClientDefaults() {
|
|
4203
|
+
return clientDefaultsFor(ambientCredentialConfig());
|
|
4204
|
+
}
|
|
4205
|
+
/**
|
|
4206
|
+
* A cache-key component naming WHICH identity a credential configuration
|
|
4207
|
+
* selects, for a cache that holds a client (or credentials) built from it.
|
|
4208
|
+
*
|
|
4209
|
+
* `profile` plus the explicit credentials' ACCESS KEY ID — never the secret
|
|
4210
|
+
* key or the session token. The access key id is an identifier rather than a
|
|
4211
|
+
* secret (`expected-bucket-owner.ts` already keys its account cache on it), and
|
|
4212
|
+
* STS issues a distinct one per session, so two different explicit bags are
|
|
4213
|
+
* told apart. The one collision is two bags sharing an access key id with
|
|
4214
|
+
* different secrets, at most one of which can be valid.
|
|
4215
|
+
*
|
|
4216
|
+
* What it does NOT carry, because it is PROCESS-WIDE rather than per
|
|
4217
|
+
* configuration: a published `--role-arn` role (set once, refused a second
|
|
4218
|
+
* time), the proxy, and `AWS_PROFILE` / the environment chain. Two readings
|
|
4219
|
+
* with equal fingerprints within one process therefore resolve to the same
|
|
4220
|
+
* identity. Do not log it.
|
|
4221
|
+
*/
|
|
4222
|
+
function credentialFingerprint(credentialConfig) {
|
|
4223
|
+
return JSON.stringify([credentialConfig.profile ?? null, credentialConfig.credentials?.accessKeyId ?? null]);
|
|
4224
|
+
}
|
|
4225
|
+
|
|
4123
4226
|
//#endregion
|
|
4124
4227
|
//#region src/synthesis/context-providers/az-provider.ts
|
|
4125
4228
|
/**
|
|
@@ -4138,7 +4241,7 @@ var AZContextProvider = class {
|
|
|
4138
4241
|
const region = props["region"] || this.awsConfig?.region;
|
|
4139
4242
|
this.logger.debug(`Fetching availability zones for region: ${region}`);
|
|
4140
4243
|
const client = new EC2Client({
|
|
4141
|
-
...
|
|
4244
|
+
...ambientClientDefaults(),
|
|
4142
4245
|
...region && { region }
|
|
4143
4246
|
});
|
|
4144
4247
|
try {
|
|
@@ -4171,7 +4274,7 @@ var SSMContextProvider = class {
|
|
|
4171
4274
|
if (!parameterName) throw new Error("SSM context provider requires parameterName property");
|
|
4172
4275
|
this.logger.debug(`Reading SSM parameter: ${parameterName} (region: ${region})`);
|
|
4173
4276
|
const client = new SSMClient({
|
|
4174
|
-
...
|
|
4277
|
+
...ambientClientDefaults(),
|
|
4175
4278
|
...region && { region }
|
|
4176
4279
|
});
|
|
4177
4280
|
try {
|
|
@@ -4213,7 +4316,7 @@ var HostedZoneContextProvider = class {
|
|
|
4213
4316
|
if (!domainName) throw new Error("Hosted zone context provider requires domainName property");
|
|
4214
4317
|
this.logger.debug(`Looking up hosted zone: ${domainName} (private: ${privateZone})`);
|
|
4215
4318
|
const client = new Route53Client({
|
|
4216
|
-
...
|
|
4319
|
+
...ambientClientDefaults(),
|
|
4217
4320
|
...region && { region }
|
|
4218
4321
|
});
|
|
4219
4322
|
try {
|
|
@@ -4267,7 +4370,7 @@ var VpcContextProvider = class {
|
|
|
4267
4370
|
const returnVpnGateways = props["returnVpnGateways"];
|
|
4268
4371
|
this.logger.debug(`Looking up VPC (region: ${region}, filter: ${JSON.stringify(filter)})`);
|
|
4269
4372
|
const client = new EC2Client({
|
|
4270
|
-
...
|
|
4373
|
+
...ambientClientDefaults(),
|
|
4271
4374
|
...region && { region }
|
|
4272
4375
|
});
|
|
4273
4376
|
try {
|
|
@@ -4433,7 +4536,7 @@ var CcApiContextProvider = class {
|
|
|
4433
4536
|
if (!typeName) throw new Error("CC API context provider requires typeName property");
|
|
4434
4537
|
this.logger.debug(`CC API lookup: ${typeName}${exactIdentifier ? ` (id: ${exactIdentifier})` : ""} (region: ${region})`);
|
|
4435
4538
|
const client = new CloudControlClient({
|
|
4436
|
-
...
|
|
4539
|
+
...ambientClientDefaults(),
|
|
4437
4540
|
...region && { region }
|
|
4438
4541
|
});
|
|
4439
4542
|
try {
|
|
@@ -4560,7 +4663,7 @@ var AmiContextProvider = class {
|
|
|
4560
4663
|
const filters = props["filters"];
|
|
4561
4664
|
this.logger.debug(`Looking up AMI (region: ${region})`);
|
|
4562
4665
|
const client = new EC2Client({
|
|
4563
|
-
...
|
|
4666
|
+
...ambientClientDefaults(),
|
|
4564
4667
|
...region && { region }
|
|
4565
4668
|
});
|
|
4566
4669
|
try {
|
|
@@ -4603,7 +4706,7 @@ var SecurityGroupContextProvider = class {
|
|
|
4603
4706
|
const vpcId = props["vpcId"];
|
|
4604
4707
|
this.logger.debug(`Looking up security group (id: ${securityGroupId}, name: ${securityGroupName}, region: ${region})`);
|
|
4605
4708
|
const client = new EC2Client({
|
|
4606
|
-
...
|
|
4709
|
+
...ambientClientDefaults(),
|
|
4607
4710
|
...region && { region }
|
|
4608
4711
|
});
|
|
4609
4712
|
try {
|
|
@@ -4657,7 +4760,7 @@ var LoadBalancerContextProvider = class {
|
|
|
4657
4760
|
const loadBalancerType = props["loadBalancerType"];
|
|
4658
4761
|
this.logger.debug(`Looking up load balancer (arn: ${loadBalancerArn}, region: ${region})`);
|
|
4659
4762
|
const client = new ElasticLoadBalancingV2Client({
|
|
4660
|
-
...
|
|
4763
|
+
...ambientClientDefaults(),
|
|
4661
4764
|
...region && { region }
|
|
4662
4765
|
});
|
|
4663
4766
|
try {
|
|
@@ -4699,7 +4802,7 @@ var LoadBalancerListenerContextProvider = class {
|
|
|
4699
4802
|
const listenerProtocol = props["listenerProtocol"];
|
|
4700
4803
|
this.logger.debug(`Looking up load balancer listener (arn: ${listenerArn}, lb: ${loadBalancerArn}, region: ${region})`);
|
|
4701
4804
|
const client = new ElasticLoadBalancingV2Client({
|
|
4702
|
-
...
|
|
4805
|
+
...ambientClientDefaults(),
|
|
4703
4806
|
...region && { region }
|
|
4704
4807
|
});
|
|
4705
4808
|
try {
|
|
@@ -4743,7 +4846,7 @@ var KeyContextProvider = class {
|
|
|
4743
4846
|
if (!aliasName) throw new Error("Key context provider requires aliasName property");
|
|
4744
4847
|
this.logger.debug(`Looking up KMS key by alias: ${aliasName} (region: ${region})`);
|
|
4745
4848
|
const client = new KMSClient({
|
|
4746
|
-
...
|
|
4849
|
+
...ambientClientDefaults(),
|
|
4747
4850
|
...region && { region }
|
|
4748
4851
|
});
|
|
4749
4852
|
try {
|
|
@@ -6647,7 +6750,7 @@ async function expandMacrosAttempt(template, opts, logger) {
|
|
|
6647
6750
|
const parameters = buildParameterValues(template, logger);
|
|
6648
6751
|
ownsClient = opts.cfnClient === void 0;
|
|
6649
6752
|
cfn = opts.cfnClient ?? new CloudFormationClient({
|
|
6650
|
-
...
|
|
6753
|
+
...ambientClientDefaults(),
|
|
6651
6754
|
region
|
|
6652
6755
|
});
|
|
6653
6756
|
let templateInput;
|
|
@@ -7778,7 +7881,7 @@ var FileAssetPublisher = class {
|
|
|
7778
7881
|
const destRegion = dest.region ? this.resolvePlaceholders(dest.region, accountId, region) : region;
|
|
7779
7882
|
this.logger.debug(`Publishing file asset ${asset.displayName || assetHash} → s3://${bucketName}/${objectKey}`);
|
|
7780
7883
|
const client = new S3Client({
|
|
7781
|
-
...
|
|
7884
|
+
...ambientClientDefaults(),
|
|
7782
7885
|
region: destRegion
|
|
7783
7886
|
});
|
|
7784
7887
|
try {
|
|
@@ -9740,7 +9843,7 @@ var DockerAssetPublisher = class {
|
|
|
9740
9843
|
const ecrUri = `${accountId}.dkr.ecr.${destRegion}.${ecrUrlSuffix(destRegion)}/${repositoryName}:${imageTag}`;
|
|
9741
9844
|
this.logger.debug(`Publishing Docker image ${asset.displayName || assetHash} → ${ecrUri}`);
|
|
9742
9845
|
const client = new ECRClient({
|
|
9743
|
-
...
|
|
9846
|
+
...ambientClientDefaults(),
|
|
9744
9847
|
region: destRegion
|
|
9745
9848
|
});
|
|
9746
9849
|
try {
|
|
@@ -9779,7 +9882,7 @@ var DockerAssetPublisher = class {
|
|
|
9779
9882
|
const destRegion = dest.region ? this.resolvePlaceholders(dest.region, accountId, region) : region;
|
|
9780
9883
|
const ecrUri = `${accountId}.dkr.ecr.${destRegion}.${ecrUrlSuffix(destRegion)}/${repositoryName}:${imageTag}`;
|
|
9781
9884
|
const client = new ECRClient({
|
|
9782
|
-
...
|
|
9885
|
+
...ambientClientDefaults(),
|
|
9783
9886
|
region: destRegion
|
|
9784
9887
|
});
|
|
9785
9888
|
try {
|
|
@@ -11322,7 +11425,7 @@ var AssetPublisher = class {
|
|
|
11322
11425
|
if (!accountId) {
|
|
11323
11426
|
const { STSClient, GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
|
|
11324
11427
|
const stsClient = new STSClient({
|
|
11325
|
-
...
|
|
11428
|
+
...ambientClientDefaults(),
|
|
11326
11429
|
region
|
|
11327
11430
|
});
|
|
11328
11431
|
accountId = (await stsClient.send(new GetCallerIdentityCommand({}))).Account;
|
|
@@ -26557,7 +26660,8 @@ function applyCallerIdentityCredentials(env) {
|
|
|
26557
26660
|
//#endregion
|
|
26558
26661
|
//#region src/utils/role-arn.ts
|
|
26559
26662
|
/**
|
|
26560
|
-
* Process-lifetime cache of assumed credentials keyed by RoleArn
|
|
26663
|
+
* Process-lifetime cache of assumed credentials keyed by RoleArn AND the
|
|
26664
|
+
* SOURCE identity the `sts:AssumeRole` hop runs as.
|
|
26561
26665
|
*
|
|
26562
26666
|
* Storing the in-flight `Promise` (rather than the resolved value) collapses
|
|
26563
26667
|
* concurrent first-time callers into a single `sts:AssumeRole` request. After
|
|
@@ -26565,10 +26669,19 @@ function applyCallerIdentityCredentials(env) {
|
|
|
26565
26669
|
* stack that references the same producer N times via `Fn::GetStackOutput`
|
|
26566
26670
|
* only pays the STS hop once.
|
|
26567
26671
|
*
|
|
26568
|
-
*
|
|
26569
|
-
* credentials
|
|
26570
|
-
*
|
|
26571
|
-
*
|
|
26672
|
+
* Not keyed by region, because STS credentials are global — assumed
|
|
26673
|
+
* credentials work against any region's service endpoint. The downstream S3
|
|
26674
|
+
* client built from these credentials picks its own region via
|
|
26675
|
+
* `GetBucketLocation`.
|
|
26676
|
+
*
|
|
26677
|
+
* KEYED BY THE SOURCE IDENTITY TOO (issue
|
|
26678
|
+
* [#3588](https://github.com/go-to-k/cdkd/issues/3588)): the hop runs as the
|
|
26679
|
+
* ACTIVE `AwsClients`' credential configuration, and a library caller can
|
|
26680
|
+
* install (`setAwsClients`) two different explicit credentials in one process,
|
|
26681
|
+
* as can cdkd's own per-stack scopes. Keyed by RoleArn alone, the second would be handed
|
|
26682
|
+
* credentials the FIRST identity obtained — a role the second one may not even
|
|
26683
|
+
* be trusted to assume. The source half is `credentialFingerprint`'s (profile +
|
|
26684
|
+
* access key id, never secret material).
|
|
26572
26685
|
*
|
|
26573
26686
|
* **Expiration handling**: on every cache hit, the cached credentials'
|
|
26574
26687
|
* `expiration` is compared against `Date.now()` with a 60-second safety
|
|
@@ -26628,7 +26741,7 @@ function parseIamRoleArn(roleArn) {
|
|
|
26628
26741
|
* the consumer account's normal credentials). Threading the credentials
|
|
26629
26742
|
* through a fresh `S3Client` via this helper keeps the scope narrow.
|
|
26630
26743
|
*
|
|
26631
|
-
* **Why cache per
|
|
26744
|
+
* **Why cache per RoleArn (and source identity) for the process lifetime.** A multi-resource
|
|
26632
26745
|
* stack typically references `Fn::GetStackOutput` from many template sites
|
|
26633
26746
|
* (every IAM policy / Lambda env / ALB listener that pulls a shared VPC ID
|
|
26634
26747
|
* from a platform stack). Assuming the role once per deploy is sufficient;
|
|
@@ -26651,17 +26764,19 @@ function parseIamRoleArn(roleArn) {
|
|
|
26651
26764
|
* uniformly), but the next caller after rejection gets a clean slate.
|
|
26652
26765
|
*/
|
|
26653
26766
|
async function assumeRoleForCrossAccountStateRead(roleArn) {
|
|
26654
|
-
const
|
|
26767
|
+
const sourceConfig = ambientCredentialConfig();
|
|
26768
|
+
const cacheKey = JSON.stringify([credentialFingerprint(sourceConfig), roleArn]);
|
|
26769
|
+
const cached = crossAccountCredentialsCache.get(cacheKey);
|
|
26655
26770
|
if (cached) {
|
|
26656
26771
|
const cachedCreds = await cached;
|
|
26657
26772
|
if (!cachedCreds.expiration || Date.now() < cachedCreds.expiration.getTime() - CRED_EXPIRY_SAFETY_MS) return cachedCreds;
|
|
26658
|
-
crossAccountCredentialsCache.delete(
|
|
26773
|
+
crossAccountCredentialsCache.delete(cacheKey);
|
|
26659
26774
|
}
|
|
26660
26775
|
const promise = (async () => {
|
|
26661
26776
|
const logger = getLogger().child("role-arn");
|
|
26662
26777
|
const displayRoleArn = displayIdent(roleArn, { maxCodePoints: 613 });
|
|
26663
26778
|
logger.debug(`Assuming role for cross-account state read: ${displayRoleArn}`);
|
|
26664
|
-
const sts = new STSClient({ ...
|
|
26779
|
+
const sts = new STSClient({ ...clientDefaultsFor(sourceConfig) });
|
|
26665
26780
|
try {
|
|
26666
26781
|
let response;
|
|
26667
26782
|
try {
|
|
@@ -26688,10 +26803,10 @@ async function assumeRoleForCrossAccountStateRead(roleArn) {
|
|
|
26688
26803
|
sts.destroy();
|
|
26689
26804
|
}
|
|
26690
26805
|
})().catch((err) => {
|
|
26691
|
-
if (crossAccountCredentialsCache.get(
|
|
26806
|
+
if (crossAccountCredentialsCache.get(cacheKey) === promise) crossAccountCredentialsCache.delete(cacheKey);
|
|
26692
26807
|
throw err;
|
|
26693
26808
|
});
|
|
26694
|
-
crossAccountCredentialsCache.set(
|
|
26809
|
+
crossAccountCredentialsCache.set(cacheKey, promise);
|
|
26695
26810
|
return promise;
|
|
26696
26811
|
}
|
|
26697
26812
|
/**
|
|
@@ -28588,7 +28703,7 @@ var WAFv2WebACLProvider = class {
|
|
|
28588
28703
|
])]]);
|
|
28589
28704
|
getClient() {
|
|
28590
28705
|
if (!this.wafv2Client) this.wafv2Client = new WAFV2Client({
|
|
28591
|
-
...
|
|
28706
|
+
...ambientClientDefaults(),
|
|
28592
28707
|
...this.providerRegion ? { region: this.providerRegion } : {}
|
|
28593
28708
|
});
|
|
28594
28709
|
return this.wafv2Client;
|
|
@@ -30012,6 +30127,18 @@ async function allSettledKeepingFirstRejection(promises, onAbandoned) {
|
|
|
30012
30127
|
}
|
|
30013
30128
|
}
|
|
30014
30129
|
/**
|
|
30130
|
+
* The key for the resolver's per-region SDK client caches ({@link
|
|
30131
|
+
* IntrinsicFunctionResolver}'s `cfnClients`, `regionScopedClients` and
|
|
30132
|
+
* `serviceDiscoveryClients`): the region PLUS the credential fingerprint of the
|
|
30133
|
+
* configuration the cached client was built from (issue
|
|
30134
|
+
* [#3588](https://github.com/go-to-k/cdkd/issues/3588)). Encoded through
|
|
30135
|
+
* {@link injectiveKey}, so no region or profile spelling can forge another
|
|
30136
|
+
* pair's key.
|
|
30137
|
+
*/
|
|
30138
|
+
function clientCacheKey(region, credentialConfig) {
|
|
30139
|
+
return injectiveKey(region, credentialFingerprint(credentialConfig));
|
|
30140
|
+
}
|
|
30141
|
+
/**
|
|
30015
30142
|
* Is `region` safe to build an AWS SDK client from?
|
|
30016
30143
|
*
|
|
30017
30144
|
* This is a SECURITY gate, not an AWS region registry, and the distinction
|
|
@@ -30493,15 +30620,22 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30493
30620
|
* foreign region per resolver, versus the ambient clients which are already
|
|
30494
30621
|
* created and destroyed per stack by `deploy.ts`.
|
|
30495
30622
|
*
|
|
30496
|
-
* KEYED BY REGION
|
|
30497
|
-
*
|
|
30498
|
-
*
|
|
30499
|
-
* is process-wide
|
|
30500
|
-
*
|
|
30501
|
-
*
|
|
30502
|
-
*
|
|
30503
|
-
*
|
|
30504
|
-
*
|
|
30623
|
+
* KEYED BY REGION AND CREDENTIAL FINGERPRINT ({@link clientCacheKey}, issue
|
|
30624
|
+
* [#3588](https://github.com/go-to-k/cdkd/issues/3588)). An entry pins the
|
|
30625
|
+
* credential configuration of the ambient instance it was derived from, and
|
|
30626
|
+
* that half is process-wide only for the CLI (one `--profile`, one
|
|
30627
|
+
* `--role-arn`): a LIBRARY caller can drive one resolver across two
|
|
30628
|
+
* `setAwsClients` installs (or cdkd's per-stack scopes) with different
|
|
30629
|
+
* explicit credentials, and keyed by region alone the second's lookups ran under the first's
|
|
30630
|
+
* identity. {@link cfnClients} and {@link serviceDiscoveryClients} share the
|
|
30631
|
+
* key for the same reason, and the two CloudFormation fallback memos
|
|
30632
|
+
* ({@link cfnExportsPromises}, {@link cfnStackOutputsCache}) carry the
|
|
30633
|
+
* fingerprint too.
|
|
30634
|
+
*
|
|
30635
|
+
* THE CLIENT HALF IS CLOSED, NOT THE WHOLE CLASS: {@link cachedDynamicReferences}
|
|
30636
|
+
* (keyed by the expression alone) and the PROCESS-GLOBAL account identity
|
|
30637
|
+
* behind `getAccountInfo` still assume one identity per resolver and per
|
|
30638
|
+
* process respectively — a value one identity read is served to the next.
|
|
30505
30639
|
*/
|
|
30506
30640
|
regionScopedClients = /* @__PURE__ */ new Map();
|
|
30507
30641
|
/**
|
|
@@ -30568,9 +30702,10 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30568
30702
|
/**
|
|
30569
30703
|
* Per-region CloudFormation clients for the cross-stack fallback
|
|
30570
30704
|
* lookups (issue #1697). Keyed by region because `Fn::GetStackOutput`
|
|
30571
|
-
* may target a region different from the consumer's deploy region
|
|
30705
|
+
* may target a region different from the consumer's deploy region, and by
|
|
30706
|
+
* the credential fingerprint for {@link regionScopedClients}' reason.
|
|
30572
30707
|
*/
|
|
30573
|
-
cfnClients =
|
|
30708
|
+
cfnClients = /* @__PURE__ */ new Map();
|
|
30574
30709
|
/**
|
|
30575
30710
|
* Memoized full `ListExports` listing for the `Fn::ImportValue`
|
|
30576
30711
|
* fallback (issue #1697 review). Without it, EVERY cdkd-miss import
|
|
@@ -30582,14 +30717,18 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30582
30717
|
* deploys. FAILED fetches are not cached (the rejection handler
|
|
30583
30718
|
* clears the slot) so a transient throttle does not poison the rest
|
|
30584
30719
|
* of the deploy's lookups.
|
|
30720
|
+
*
|
|
30721
|
+
* Keyed by the credential fingerprint (issue #3588): a listing is an answer
|
|
30722
|
+
* one identity was allowed to read, so it is never handed to another.
|
|
30585
30723
|
*/
|
|
30586
|
-
|
|
30724
|
+
cfnExportsPromises = /* @__PURE__ */ new Map();
|
|
30587
30725
|
/**
|
|
30588
30726
|
* Memoized per-(region, stack) `DescribeStacks` outputs for the
|
|
30589
30727
|
* `Fn::GetStackOutput` fallback (issue #1697 review) — a stack
|
|
30590
30728
|
* referencing the same CFn producer N times pays one call. Successful
|
|
30591
30729
|
* lookups (including the definitive "stack does not exist" miss) are
|
|
30592
|
-
* cached; lookup FAILURES are evicted so they are retried.
|
|
30730
|
+
* cached; lookup FAILURES are evicted so they are retried. Keyed by the
|
|
30731
|
+
* credential fingerprint as well, for {@link cfnExportsPromises}' reason.
|
|
30593
30732
|
*/
|
|
30594
30733
|
cfnStackOutputsCache = /* @__PURE__ */ new Map();
|
|
30595
30734
|
/**
|
|
@@ -30821,11 +30960,12 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30821
30960
|
const loggedTarget = targetLogText ?? (targetRegion === this.explicitRegion ? this.explicitRegionLogText : void 0) ?? target;
|
|
30822
30961
|
if (!isClientSafeRegion(target)) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Refusing to build AWS clients for the region '${displaySafe(stripControlChars(loggedTarget)).slice(0, 64)}': it is not a valid AWS region name, and a region is substituted into the AWS service hostname.`));
|
|
30823
30962
|
if (typeof ambient.withRegion !== "function") return ambient;
|
|
30824
|
-
const
|
|
30963
|
+
const cacheKey = clientCacheKey(target, ambient.credentialConfig ?? {});
|
|
30964
|
+
const cached = this.regionScopedClients.get(cacheKey);
|
|
30825
30965
|
if (cached) return cached;
|
|
30826
30966
|
if (canonicalizeRegion(ambient.configuredRegion) === target) return ambient;
|
|
30827
30967
|
const scoped = ambient.withRegion(target);
|
|
30828
|
-
this.regionScopedClients.set(
|
|
30968
|
+
this.regionScopedClients.set(cacheKey, scoped);
|
|
30829
30969
|
this.logger.debug(`Using region-scoped AWS clients for ${displaySafe(loggedTarget)}`);
|
|
30830
30970
|
return scoped;
|
|
30831
30971
|
}
|
|
@@ -30856,21 +30996,21 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30856
30996
|
* `getAccountInfo`'s in-flight promise and reach here one at a time, which
|
|
30857
30997
|
* the case says out loud. A REJECTED import is evicted
|
|
30858
30998
|
* so a transient failure does not poison the rest of the deploy, mirroring
|
|
30859
|
-
* `
|
|
30999
|
+
* `cfnExportsPromises`. Lifetime is the resolver's own, like
|
|
30860
31000
|
* {@link regionScopedClients} and {@link cfnClients}: at most one per region
|
|
30861
31001
|
* per resolver, versus the one-per-CALL this replaces.
|
|
30862
31002
|
*/
|
|
30863
31003
|
async serviceDiscoveryClient() {
|
|
30864
31004
|
const scoped = this.clientsForRegion(this.explicitRegion);
|
|
30865
31005
|
const region = scoped.configuredRegion;
|
|
30866
|
-
const
|
|
31006
|
+
const credentialConfig = scoped.credentialConfig ?? {};
|
|
31007
|
+
const key = clientCacheKey(region ?? "", credentialConfig);
|
|
30867
31008
|
const cached = this.serviceDiscoveryClients.get(key);
|
|
30868
31009
|
if (cached) return cached;
|
|
30869
31010
|
const building = (async () => {
|
|
30870
31011
|
const { ServiceDiscoveryClient } = await import("@aws-sdk/client-servicediscovery");
|
|
30871
31012
|
return new ServiceDiscoveryClient({
|
|
30872
|
-
...
|
|
30873
|
-
...scoped.credentialConfig ?? {},
|
|
31013
|
+
...clientDefaultsFor(credentialConfig),
|
|
30874
31014
|
...region ? { region } : {}
|
|
30875
31015
|
});
|
|
30876
31016
|
})();
|
|
@@ -33276,12 +33416,14 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33276
33416
|
* the same not-found error anyway.
|
|
33277
33417
|
*/
|
|
33278
33418
|
async lookupCfnExport(exportName, context) {
|
|
33279
|
-
|
|
33419
|
+
const listingKey = credentialFingerprint(ambientCredentialConfig());
|
|
33420
|
+
let listing = this.cfnExportsPromises.get(listingKey);
|
|
33280
33421
|
if (!listing) {
|
|
33281
|
-
|
|
33282
|
-
|
|
33283
|
-
|
|
33284
|
-
|
|
33422
|
+
const fetched = this.fetchAllCfnExports();
|
|
33423
|
+
listing = fetched;
|
|
33424
|
+
this.cfnExportsPromises.set(listingKey, fetched);
|
|
33425
|
+
fetched.catch(() => {
|
|
33426
|
+
if (this.cfnExportsPromises.get(listingKey) === fetched) this.cfnExportsPromises.delete(listingKey);
|
|
33285
33427
|
});
|
|
33286
33428
|
}
|
|
33287
33429
|
try {
|
|
@@ -33351,7 +33493,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33351
33493
|
* contract as {@link lookupCfnExport}.
|
|
33352
33494
|
*/
|
|
33353
33495
|
async lookupCfnStackOutputs(stackName, region, context, loggedRegionText) {
|
|
33354
|
-
const cacheKey = injectiveKey(region, stackName);
|
|
33496
|
+
const cacheKey = injectiveKey(region, stackName, credentialFingerprint(ambientCredentialConfig()));
|
|
33355
33497
|
let fetch = this.cfnStackOutputsCache.get(cacheKey);
|
|
33356
33498
|
if (!fetch) {
|
|
33357
33499
|
fetch = this.fetchCfnStackOutputs(stackName, region);
|
|
@@ -33402,19 +33544,19 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
33402
33544
|
* Not routed through {@link clientsForRegion}: the region here is always
|
|
33403
33545
|
* the one the caller named, never the ambient's, and a test double without
|
|
33404
33546
|
* `credentialConfig` degrades to the default chain rather than throwing.
|
|
33405
|
-
* Keyed by region
|
|
33406
|
-
*
|
|
33547
|
+
* Keyed by region AND credential fingerprint for the reason
|
|
33548
|
+
* {@link regionScopedClients} gives (issue #3588).
|
|
33407
33549
|
*/
|
|
33408
33550
|
getCfnClient(region) {
|
|
33409
|
-
|
|
33551
|
+
const credentialConfig = ambientCredentialConfig();
|
|
33552
|
+
const key = clientCacheKey(region, credentialConfig);
|
|
33553
|
+
let client = this.cfnClients.get(key);
|
|
33410
33554
|
if (!client) {
|
|
33411
|
-
const credentialConfig = getAwsClients().credentialConfig ?? {};
|
|
33412
33555
|
client = new CloudFormationClient({
|
|
33413
|
-
...
|
|
33414
|
-
...credentialConfig,
|
|
33556
|
+
...clientDefaultsFor(credentialConfig),
|
|
33415
33557
|
region
|
|
33416
33558
|
});
|
|
33417
|
-
this.cfnClients
|
|
33559
|
+
this.cfnClients.set(key, client);
|
|
33418
33560
|
}
|
|
33419
33561
|
return client;
|
|
33420
33562
|
}
|
|
@@ -36756,7 +36898,7 @@ var CloudControlProvider = class {
|
|
|
36756
36898
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
36757
36899
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
36758
36900
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
36759
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
36901
|
+
const { ASGProvider } = await import("./asg-provider-Dpki2-Xd.js").then((n) => n.n);
|
|
36760
36902
|
const asgProvider = new ASGProvider();
|
|
36761
36903
|
return withIndeterminateGuard(await asgProvider.delete(logicalId, physicalId, resourceType, _properties, context), indeterminateGuard);
|
|
36762
36904
|
}
|
|
@@ -37306,7 +37448,7 @@ var CloudControlProvider = class {
|
|
|
37306
37448
|
break;
|
|
37307
37449
|
case "AWS::RDS::DBCluster":
|
|
37308
37450
|
try {
|
|
37309
|
-
const cluster = (await new RDSClient({ ...
|
|
37451
|
+
const cluster = (await new RDSClient({ ...ambientClientDefaults() }).send(new DescribeDBClustersCommand({ DBClusterIdentifier: physicalId }))).DBClusters?.[0];
|
|
37310
37452
|
if (cluster) {
|
|
37311
37453
|
if (cluster.Endpoint) enriched["Endpoint.Address"] = cluster.Endpoint;
|
|
37312
37454
|
if (cluster.Port !== void 0) enriched["Endpoint.Port"] = String(cluster.Port);
|
|
@@ -37321,7 +37463,7 @@ var CloudControlProvider = class {
|
|
|
37321
37463
|
break;
|
|
37322
37464
|
case "AWS::RDS::DBInstance":
|
|
37323
37465
|
try {
|
|
37324
|
-
const inst = (await new RDSClient({ ...
|
|
37466
|
+
const inst = (await new RDSClient({ ...ambientClientDefaults() }).send(new DescribeDBInstancesCommand({ DBInstanceIdentifier: physicalId }))).DBInstances?.[0];
|
|
37325
37467
|
if (inst) {
|
|
37326
37468
|
if (inst.Endpoint?.Address) enriched["Endpoint.Address"] = inst.Endpoint.Address;
|
|
37327
37469
|
if (inst.Endpoint?.Port !== void 0) enriched["Endpoint.Port"] = String(inst.Endpoint.Port);
|
|
@@ -37475,7 +37617,7 @@ var CloudControlProvider = class {
|
|
|
37475
37617
|
break;
|
|
37476
37618
|
case "AWS::ElastiCache::ReplicationGroup":
|
|
37477
37619
|
try {
|
|
37478
|
-
const rg = (await new ElastiCacheClient({ ...
|
|
37620
|
+
const rg = (await new ElastiCacheClient({ ...ambientClientDefaults() }).send(new DescribeReplicationGroupsCommand({ ReplicationGroupId: physicalId }))).ReplicationGroups?.[0];
|
|
37479
37621
|
if (rg) {
|
|
37480
37622
|
const primaryNode = rg.NodeGroups?.[0];
|
|
37481
37623
|
if (primaryNode?.PrimaryEndpoint?.Address) enriched["PrimaryEndPoint.Address"] = primaryNode.PrimaryEndpoint.Address;
|
|
@@ -37497,7 +37639,7 @@ var CloudControlProvider = class {
|
|
|
37497
37639
|
break;
|
|
37498
37640
|
case "AWS::Redshift::Cluster":
|
|
37499
37641
|
try {
|
|
37500
|
-
const cluster = (await new RedshiftClient({ ...
|
|
37642
|
+
const cluster = (await new RedshiftClient({ ...ambientClientDefaults() }).send(new DescribeClustersCommand({ ClusterIdentifier: physicalId }))).Clusters?.[0];
|
|
37501
37643
|
if (cluster?.Endpoint) {
|
|
37502
37644
|
if (cluster.Endpoint.Address) enriched["Endpoint.Address"] = cluster.Endpoint.Address;
|
|
37503
37645
|
if (cluster.Endpoint.Port !== void 0) enriched["Endpoint.Port"] = String(cluster.Endpoint.Port);
|
|
@@ -37509,7 +37651,7 @@ var CloudControlProvider = class {
|
|
|
37509
37651
|
break;
|
|
37510
37652
|
case "AWS::OpenSearchService::Domain":
|
|
37511
37653
|
try {
|
|
37512
|
-
const domain = (await new OpenSearchClient({ ...
|
|
37654
|
+
const domain = (await new OpenSearchClient({ ...ambientClientDefaults() }).send(new DescribeDomainCommand({ DomainName: physicalId }))).DomainStatus;
|
|
37513
37655
|
if (domain) {
|
|
37514
37656
|
const endpoint = domain.Endpoint ?? domain.Endpoints?.["vpc"];
|
|
37515
37657
|
if (endpoint) enriched["DomainEndpoint"] = endpoint;
|
|
@@ -44746,8 +44888,11 @@ async function planOrphanAdoption(params) {
|
|
|
44746
44888
|
const claims = async () => siblingClaims ??= await params.readSiblingClaims();
|
|
44747
44889
|
for (const record of params.records) {
|
|
44748
44890
|
const { logicalId, state } = record;
|
|
44891
|
+
const shownId = displayIdent(logicalId);
|
|
44892
|
+
const shownType = displayIdent(state.resourceType);
|
|
44893
|
+
const shownPhysicalId = displaySafe(state.physicalId);
|
|
44749
44894
|
if (params.managedLogicalIds.has(logicalId)) {
|
|
44750
|
-
params.logger.debug(`orphan ${
|
|
44895
|
+
params.logger.debug(`orphan ${shownId}: already present in state.resources — dropping the stale record`);
|
|
44751
44896
|
continue;
|
|
44752
44897
|
}
|
|
44753
44898
|
let provider;
|
|
@@ -44755,12 +44900,12 @@ async function planOrphanAdoption(params) {
|
|
|
44755
44900
|
provider = params.getProvider(state.resourceType, state.provisionedBy);
|
|
44756
44901
|
} catch (error) {
|
|
44757
44902
|
outcome.remaining.push(record);
|
|
44758
|
-
outcome.notices.push(`${
|
|
44903
|
+
outcome.notices.push(`${shownId} (${shownType}) is still in AWS as ${shownPhysicalId} from an earlier rollback, but this build cannot route that type (${displayAwsMessage(error instanceof Error ? error.message : String(error))}) — cdkd is not adopting it.`);
|
|
44759
44904
|
continue;
|
|
44760
44905
|
}
|
|
44761
44906
|
if (!provider.import) {
|
|
44762
44907
|
outcome.remaining.push(record);
|
|
44763
|
-
outcome.notices.push(`${
|
|
44908
|
+
outcome.notices.push(`${shownId} (${shownType}) was left in AWS by an earlier rollback as ${shownPhysicalId}, but its provider cannot verify it — cdkd is not adopting it.`);
|
|
44764
44909
|
continue;
|
|
44765
44910
|
}
|
|
44766
44911
|
let found;
|
|
@@ -44774,32 +44919,32 @@ async function planOrphanAdoption(params) {
|
|
|
44774
44919
|
knownPhysicalId: state.physicalId
|
|
44775
44920
|
});
|
|
44776
44921
|
} catch (error) {
|
|
44777
|
-
outcome.notices.push(`${
|
|
44922
|
+
outcome.notices.push(`${shownId} (${shownType}) is recorded as left in AWS as ${shownPhysicalId}, but cdkd could not confirm it exists (${displayAwsMessage(error instanceof Error ? error.message : String(error))}) — keeping the record and not adopting it this run.`);
|
|
44778
44923
|
outcome.remaining.push(record);
|
|
44779
44924
|
continue;
|
|
44780
44925
|
}
|
|
44781
44926
|
if (found !== null && found.physicalId !== state.physicalId) {
|
|
44782
44927
|
outcome.remaining.push(record);
|
|
44783
|
-
outcome.notices.push(`${
|
|
44928
|
+
outcome.notices.push(`${shownId} (${shownType}): cdkd asked about ${shownPhysicalId} and its provider answered for ${displaySafe(found.physicalId)} — not adopting.`);
|
|
44784
44929
|
continue;
|
|
44785
44930
|
}
|
|
44786
44931
|
if (found === null) {
|
|
44787
|
-
params.logger.debug(`orphan ${
|
|
44932
|
+
params.logger.debug(`orphan ${shownId}: ${shownPhysicalId} no longer exists in AWS — dropping the record`);
|
|
44788
44933
|
continue;
|
|
44789
44934
|
}
|
|
44790
44935
|
if (params.nameProperties(state.resourceType).length === 0 || ADOPTION_REFUSED_TYPES.has(state.resourceType)) {
|
|
44791
44936
|
outcome.remaining.push(record);
|
|
44792
44937
|
const why = ADOPTION_REFUSED_TYPES.has(state.resourceType) ? "a new deploy of it mints a new resource rather than colliding, and cdkd cannot update one in place — so adopting it would end in a replacement that destroys what DeletionPolicy: Retain preserved" : "cdkd does not derive that resource's physical name, so a new deploy mints a new resource instead of colliding";
|
|
44793
|
-
outcome.notices.push(`${
|
|
44938
|
+
outcome.notices.push(`${shownId} (${shownType}) is still in AWS as ${shownPhysicalId} from an earlier rollback. cdkd does not re-adopt this type: ${why}. Delete it yourself when you no longer need it.`);
|
|
44794
44939
|
continue;
|
|
44795
44940
|
}
|
|
44796
44941
|
if (!templateStillDeclares(params.template, record, params.nameProperties(state.resourceType))) {
|
|
44797
44942
|
outcome.remaining.push(record);
|
|
44798
|
-
outcome.notices.push(`${
|
|
44943
|
+
outcome.notices.push(`${shownId} (${shownType}) is still in AWS as ${shownPhysicalId} from an earlier rollback. This deploy does not create it under that name, so cdkd is leaving it alone.`);
|
|
44799
44944
|
continue;
|
|
44800
44945
|
}
|
|
44801
44946
|
if ((await claims()).has(state.physicalId)) {
|
|
44802
|
-
outcome.refusals.push(`${
|
|
44947
|
+
outcome.refusals.push(`${shownId}: ${shownPhysicalId} is already recorded by another cdkd stack. cdkd will not adopt a resource another stack manages.`);
|
|
44803
44948
|
outcome.remaining.push(record);
|
|
44804
44949
|
continue;
|
|
44805
44950
|
}
|
|
@@ -44852,7 +44997,7 @@ function makeSiblingClaimReader(params) {
|
|
|
44852
44997
|
try {
|
|
44853
44998
|
refs = await stateBackend.listStacks();
|
|
44854
44999
|
} catch (error) {
|
|
44855
|
-
logger.debug(`orphan adoption: could not list sibling stacks — ${error instanceof Error ? error.message : String(error)}`);
|
|
45000
|
+
logger.debug(`orphan adoption: could not list sibling stacks — ${displayAwsMessage(error instanceof Error ? error.message : String(error))}`);
|
|
44856
45001
|
return claimed;
|
|
44857
45002
|
}
|
|
44858
45003
|
for (const ref of refs) {
|
|
@@ -44862,7 +45007,7 @@ function makeSiblingClaimReader(params) {
|
|
|
44862
45007
|
const sibling = await stateBackend.getState(ref.stackName, ref.region);
|
|
44863
45008
|
for (const record of Object.values(sibling?.state.resources ?? {})) claimed.add(record.physicalId);
|
|
44864
45009
|
} catch (error) {
|
|
44865
|
-
logger.debug(`orphan adoption: skipping unreadable state for ${ref.stackName} — ${error instanceof Error ? error.message : String(error)}`);
|
|
45010
|
+
logger.debug(`orphan adoption: skipping unreadable state for ${displayStackName(ref.stackName)} — ${displayAwsMessage(error instanceof Error ? error.message : String(error))}`);
|
|
44866
45011
|
}
|
|
44867
45012
|
}
|
|
44868
45013
|
return claimed;
|
|
@@ -50785,7 +50930,7 @@ var DeployEngine = class DeployEngine {
|
|
|
50785
50930
|
if (plan.refusals.length > 0) throw new Error(`Deploy refused — cdkd left ${plan.refusals.length} resource(s) in AWS that it cannot safely re-adopt:\n ${plan.refusals.join("\n ")}`);
|
|
50786
50931
|
for (const [logicalId, record] of Object.entries(plan.adopted)) {
|
|
50787
50932
|
currentState.resources[logicalId] = record;
|
|
50788
|
-
this.logger.info(`Adopting ${logicalId} (${record.resourceType}) left in AWS by an earlier rollback as ${record.physicalId}`);
|
|
50933
|
+
this.logger.info(`Adopting ${displayIdent(logicalId)} (${displayIdent(record.resourceType)}) left in AWS by an earlier rollback as ${displaySafe(record.physicalId)}`);
|
|
50789
50934
|
}
|
|
50790
50935
|
if (records.length > 0) currentState.orphans = plan.remaining;
|
|
50791
50936
|
return plan;
|
|
@@ -52252,5 +52397,5 @@ var DeployEngine = class DeployEngine {
|
|
|
52252
52397
|
};
|
|
52253
52398
|
|
|
52254
52399
|
//#endregion
|
|
52255
|
-
export { yellow as $, NestedStackChildDirectDestroyError as $a, resolveSkipPrefix as $i, refuseMalformedOutputsForDestroy as $n, hasReadableExportSet as $r, readConfigString as $t, createPreDeleteFinalSnapshot as A, absoluteAssemblyPathEscape as Aa, describeDockerFailure as Ai, malformedExportSourceWarning as An, identityKeyFor as Ar, disableInstanceApiTermination as At, isStatefulRecreateTargetSync as B, setAwsClients as Ba, runDockerStreaming as Bi, malformedResourceEntriesWarning as Bn, redactSecretsForState as Br, isUnboundTemplateParameter as Bt, namesAnyDeclaredParameter as C, globMatches as Ca, validateAssetBucketName as Ci, displayLogicalId as Cn, __exportAll as Co, STATE_SOURCED_CROSS_GENERATION_RULES as Cr, CloudControlProvider as Ct, PRE_DELETE_SNAPSHOT_TYPES as D, hasPlainPrototype$1 as Da, resolveDockerContextDirectory as Di, isReadableOrphanRecord as Dn, createSecretMasker as Dr, deleteIndeterminateGuards as Dt, ATOMIC_FINAL_SNAPSHOT_TYPES as E, hasOwnKey as Ea, buildDockerImage as Ei, hasReadableResources as En, carriesSecretMask as Er, UNSPECIFIED_SKIP_REASON as Et, extractDeploymentEventError as F, resolveBucketRegion as Fa, isDockerClientEnvKey as Fi, malformedOrphansRefusalMessage as Fn, maskSecretsInText as Fr, cfnRefValueFromPhysicalId as Ft, toCfnInteger as G, DependencyError as Ga, getDockerImageBySourceHash as Gi, refuseDivergentRecordRegionForDestroy as Gn, UNREPRODUCIBLE_LOCK_CLAUSE as Gr, normalizeAwsTagsToCfn as Gt, WARM_THROUGHPUT_MEMBERS as H, CdkdError as Ha, escapeRegExp$1 as Hi, malformedResourcesWarning as Hn, LockManager as Hr, refStateLookupFromResource as Ht, makeSiblingClaimReader as I, AwsClients as Ia, isMalformedEnvKey as Ii, malformedOrphansWarning as In, pathCrossesDottedKey as Ir, coerceParameterTypedValue as It, bold as J, IntrinsicResolutionRefusalError as Ja, getDefaultStateBucketName as Ji, refuseMalformedOrphanRecordsForDestroy as Jn, forceQuitRecoveryClause as Jr, coerceCfnBoolean as Jt, toFiniteNumber as K, DeployCancelledError as Ka, Synthesizer as Ki, refuseMalformedNestedChildOutputs as Kn, buildForceUnlockCommand as Kr, resolveExplicitPhysicalId as Kt, planOrphanAdoption as L, getAwsClients as La, partitionSensitiveEnv as Li, malformedOutputsRefusalMessage as Ln, recordMaskOnlyValue as Lr, getAccountInfo as Lt, refusesFinalSnapshot as M, renderAssemblyPathEscape as Ma, finchSecretArgvRefusal as Mi, malformedOrphanRecordsRefusalMessage as Mn, isUncertifiedBaselineMaskPosition as Mr, IntrinsicFunctionResolver as Mt, unsupportedFinalSnapshotError as N, resolveAssemblyPath as Na, formatDockerLoginError as Ni, malformedOrphanRecordsWarning as Nn, markSameGenerationBag as Nr, carriesDynamicReference as Nt, buildFinalSnapshotIdentifier as O, nullPrototypeRecord as Oa, describeDockerCapturedOutput as Oi, isReadableResourceEntry as On, dynamicReferenceTokens as Or, deleteSkipReason as Ot, makeCanonicalizePropertiesFn as P, clearBucketRegionCache as Pa, getDockerCmd as Pi, malformedOrphanRowsKeptWarning as Pn, maskSecretsInError as Pr, carriesFetchableDynamicReference as Pt, red as Q, MalformedProducerRecordRefusalError as Qa, resolveCaptureObservedState as Qi, refuseMalformedOutputs as Qn, exportNamesCarriedFrom as Qr, configStringRefusal as Qt, MULTI_REGION_RECREATE_BLOCKED_TYPES as R, resetAwsClients as Ra, redactDockerArgvValues as Ri, malformedOutputsWarning as Rn, recordMaskOnlyValuesIn as Rr, isImpossibleEmptyStoredAttribute as Rt, computeParameterTaint as S, failedStageNote as Sa, readBootstrapMarkerBody as Si, deployRefusesOrphanRowsReason as Sn, safeStringify$1 as So, STATE_SOURCED_BASELINE_RULES as Sr, startInterruptWatch as St, resourcesNamingDeclaredParameter as T, defineOwnKey as Ta, buildDenyExternalAccessPolicy as Ti, hasReadableOutputs as Tn, TEMPLATE_SOURCED_RULES as Tr, ccProtectionRegistryTypes as Tt, coerceWarmThroughput as U, ConfigError as Ua, stripControlChars as Ui, malformedStateRefusalMessage as Un, S3StateBackend as Ur, isSettledInstanceState as Ut, renderStatefulReason as V, AssetError as Va, warnFinchArgvExposure as Vi, malformedResourcePropertiesWarning as Vn, scrubResourceRecord as Vr, parameterTypeMayLoseSecretIdentity as Vt, isWarmThroughputDecrease as W, CrossAccountSecretRefusalError as Wa, AssetManifestLoader as Wi, previewableOrphanRecords as Wn, rebuildClientForBucketRegion as Wr, WAFv2WebACLProvider as Wt, gray as X, LocalStartServiceError as Xa, resolveApp as Xi, refuseMalformedOrphansForDestroy as Xn, CUSTOM_RESOURCE_RESPONSE_PREFIX as Xr, configBooleanRefusal as Xt, cyan as Y, LocalInvokeBuildError as Ya, getLegacyStateBucketName as Yi, refuseMalformedOrphans as Yn, formatLockExpiry as Yr, coerceCfnInteger as Yt, green as Z, LockError as Za, resolveAutoAssetStorage as Zi, refuseMalformedOrphansForOrphan as Zn, DEFAULT_STATE_PREFIX as Zr, configIntegerRefusal as Zt, bagHoldsSecretExpression as _, expectedOwnerParam as _a, assertAssetBucketRegion as _i, DiffCalculator as _n, isTransientServerError as _o, findSilentDropProperties as _r, maskerOrIdentity as _t, DeploymentEventsStore as a, ssmResolvedValueType as aa, orphansAfterRollback as ai, producerRegionsFromState as an, StackTerminationProtectionError as ao, refuseMalformedState as ar, secretBearingStateKeyWarning as at, mergeNoChangeOutputs as b, derivePartitionAndUrlSuffix as ba, isCrossRegionRedirect as bi, UNREADABLE_ORPHANS_CONTAINER_ROW as bn, retryClassificationText as bo, DagBuilder as br, interruptWatchListenerCount as bt, replayFailedOperations as c, MIGRATE_TMP_PREFIX as ca, AssetPublisher as ci, s3BucketDomainName as cn, formatError as co, repairMalformedOutputsForReadOnly as cr, IAMRoleProvider as ct, updatePartialMessage as d, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as da, buildAssetRedirectMap as di, s3BucketWebsiteUrl as dn, withErrorHandling as do, repairMalformedResourcesForReadOnly as dr, definedAttributes as dt, resolveStateBucketWithDefault as ea, hasReasonlessBaselineRefusal as ei, replayWarn as en, PartialFailureError as eo, refuseMalformedResourceAttributesForOrphan as er, collectDeclaredOutputNames as et, updatePartialReason as f, injectiveKey as fa, createAssetRedirectResolver as fi, applyRoleArnIfSet as fn, pasteableCommand as fo, safeRegion as fr, stringifyIfAssigned as ft, computeImplicitDeleteEdges as g, decodeListingKey as ga, BOOTSTRAP_MARKER_PREFIX as gi, envCredentialsAreAssumedRole as gn, isThrottlingError as go, findActionableSilentDrops as gr, maskDeep as gt, IMPLICIT_DELETE_DEPENDENCIES as h, producerRecordKey as ha, AssetModeResolver as hi, callerEnvCredentials as hn, isRetryableTransientError as ho, unreadableOrphanRecords as hr, createMaskedRetryLogger as ht, DeploymentEventsReader as i, warnDeprecatedNoPrefixCliFlag as ia, isReadableBag as ii, classifyReplaySecretRegion as in, StackHasActiveImportsError as io, refuseMalformedResourcesForDestroy as ir, secretBearing as it, isFinalSnapshotError as j, displayAssemblyPath as ja, dockerSpawnEnvWithSensitive as ji, malformedLocalOutputsWarning as jn, isSingleDynamicReferenceToken as jr, isTerminationProtectionPropagationError as jt, ccRoutedFinalSnapshotError as k, ownValue as ka, describeDockerExecFailure as ki, malformedExportNamesWarning as kn, errorCauseChain as kr, isWaitAbandonedError as kt, replayRollback as l, findLargeInlineResources as la, stringifyValue as li, s3BucketDualStackDomainName as ln, isCdkdError as lo, repairMalformedResourceEntriesForReadOnly as lr, collectInlinePolicyNamesManagedBySiblings as lt, maskingRetryLogger as m, producerCoordinateKey as ma, rewriteTemplateAssetReferences as mi, applyCallerIdentityCredentials as mn, isMarkedNonRetryable as mo, unpreviewableOrphanRecords as mr, wouldReturnToSdkProvider as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, resolveUseCdkBootstrapAssets as na, importableOutputKeys as ni, requireConfigObject as nn, ResourceTimeoutError as no, refuseMalformedResourceEntriesForOrphan as nr, exportAliasCollisionScrubWarning as nt, planFailedOps as o, CFN_TEMPLATE_BODY_LIMIT as oa, orphansCarriedFrom as oi, withSharedDrainBudget as on, StateError as oo, repairMalformedOrphanRecordsForReadOnly as or, secretSafeKeyDisplay as ot, withResourceDeadline as p, injectiveKeyPrefix as pa, loadPublishableAssetManifest as pi, AWS_CREDENTIAL_ENV_KEYS as pn, shellQuote as po, safeStackName as pr, ProviderRegistry as pt, formatResourceLine as q, DynamicReferenceRegionAmbiguousError as qa, synthesisStatusMessage as qi, refuseMalformedOrphanRecords as qn, buildLockContentionMessage as qr, assertRegionMatch as qt, DeployEngine as r, stateBucketExistenceConfirmed as ra, importableOutputs as ri, requireConfigString as rn, ResourceUpdateNotSupportedError as ro, refuseMalformedResourcePropertiesForOrphan as rr, isExportAliasCollision as rt, planRollback as s, CFN_TEMPLATE_URL_LIMIT as sa, shouldRetainResource as si, s3BucketArn as sn, SynthesisError as so, repairMalformedOrphansForReadOnly as sr, getCurrentResourceSecrets as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, resolveStateBucketWithDefaultAndSource as ta, hasUnverifiableParameterRefusal as ti, requireConfigArray as tn, ProvisioningError as to, refuseMalformedResourceEntries as tr, collectPublishedOutputNames as tt, resolveReplacementOldType as u, uploadCfnTemplate as ua, WorkGraph as ui, s3BucketRegionalDomainName as un, normalizeAwsError as uo, repairMalformedResourcePropertiesForReadOnly as ur, clearOnUpdateRemoval as ut, isSecretBearingReferenceString as v, PARTITION_TABLE as va, ensureAssetStorage as vi, INTRINSIC_KEYS as vn, markNonRetryable as vo, describeTypeWithThrottleRetry as vr, beginCommandInterruptScope as vt, reachableDivergentParameters as w, processStackMessages as wa, validateContainerRepoName as wi, hasReadableOrphans as wn, STATE_SOURCED_READBACK_RULES as wr, slowCcOperationTimeoutMs as wt, bindingSkippedOutputs as x, AssemblyReader as xa, parseBootstrapMarker as xi, UNREADABLE_RESOURCES_MAP_ROW as xn, describeAwsFailure as xo, TemplateParser as xr, isInterruptedWaitError as xt, keptWholeReasonText as y, canonicalizeRegion as ya, getBootstrapMarkerKey as yi, STATE_RESOURCES_MALFORMED as yn, markRedactedCause as yo, withRetry as yr, endCommandInterruptScope as yt, isStatefulRecreateTargetForReplace as z, runWithStackAwsClients as za, runDockerForeground as zi, malformedRenderedContainersWarning as zn, recoverMaskedOutput as zr, isNamelessDynamicReferenceError as zt };
|
|
52256
|
-
//# sourceMappingURL=deploy-engine-
|
|
52400
|
+
export { yellow as $, MalformedProducerRecordRefusalError as $a, resolveSkipPrefix as $i, refuseMalformedOutputsForDestroy as $n, hasReadableExportSet as $r, readConfigString as $t, createPreDeleteFinalSnapshot as A, ownValue as Aa, describeDockerFailure as Ai, malformedExportSourceWarning as An, identityKeyFor as Ar, disableInstanceApiTermination as At, isStatefulRecreateTargetSync as B, runWithStackAwsClients as Ba, runDockerStreaming as Bi, malformedResourceEntriesWarning as Bn, redactSecretsForState as Br, isUnboundTemplateParameter as Bt, namesAnyDeclaredParameter as C, failedStageNote as Ca, validateAssetBucketName as Ci, displayLogicalId as Cn, safeStringify$1 as Co, STATE_SOURCED_CROSS_GENERATION_RULES as Cr, CloudControlProvider as Ct, PRE_DELETE_SNAPSHOT_TYPES as D, hasOwnKey as Da, resolveDockerContextDirectory as Di, isReadableOrphanRecord as Dn, createSecretMasker as Dr, deleteIndeterminateGuards as Dt, ATOMIC_FINAL_SNAPSHOT_TYPES as E, defineOwnKey as Ea, buildDockerImage as Ei, hasReadableResources as En, carriesSecretMask as Er, UNSPECIFIED_SKIP_REASON as Et, extractDeploymentEventError as F, clearBucketRegionCache as Fa, isDockerClientEnvKey as Fi, malformedOrphansRefusalMessage as Fn, maskSecretsInText as Fr, cfnRefValueFromPhysicalId as Ft, toCfnInteger as G, CrossAccountSecretRefusalError as Ga, getDockerImageBySourceHash as Gi, refuseDivergentRecordRegionForDestroy as Gn, UNREPRODUCIBLE_LOCK_CLAUSE as Gr, normalizeAwsTagsToCfn as Gt, WARM_THROUGHPUT_MEMBERS as H, AssetError as Ha, escapeRegExp$1 as Hi, malformedResourcesWarning as Hn, LockManager as Hr, refStateLookupFromResource as Ht, makeSiblingClaimReader as I, resolveBucketRegion as Ia, isMalformedEnvKey as Ii, malformedOrphansWarning as In, pathCrossesDottedKey as Ir, coerceParameterTypedValue as It, bold as J, DynamicReferenceRegionAmbiguousError as Ja, getDefaultStateBucketName as Ji, refuseMalformedOrphanRecordsForDestroy as Jn, forceQuitRecoveryClause as Jr, coerceCfnBoolean as Jt, toFiniteNumber as K, DependencyError as Ka, Synthesizer as Ki, refuseMalformedNestedChildOutputs as Kn, buildForceUnlockCommand as Kr, resolveExplicitPhysicalId as Kt, planOrphanAdoption as L, AwsClients as La, partitionSensitiveEnv as Li, malformedOutputsRefusalMessage as Ln, recordMaskOnlyValue as Lr, getAccountInfo as Lt, refusesFinalSnapshot as M, displayAssemblyPath as Ma, finchSecretArgvRefusal as Mi, malformedOrphanRecordsRefusalMessage as Mn, isUncertifiedBaselineMaskPosition as Mr, IntrinsicFunctionResolver as Mt, unsupportedFinalSnapshotError as N, renderAssemblyPathEscape as Na, formatDockerLoginError as Ni, malformedOrphanRecordsWarning as Nn, markSameGenerationBag as Nr, carriesDynamicReference as Nt, buildFinalSnapshotIdentifier as O, hasPlainPrototype$1 as Oa, describeDockerCapturedOutput as Oi, isReadableResourceEntry as On, dynamicReferenceTokens as Or, deleteSkipReason as Ot, makeCanonicalizePropertiesFn as P, resolveAssemblyPath as Pa, getDockerCmd as Pi, malformedOrphanRowsKeptWarning as Pn, maskSecretsInError as Pr, carriesFetchableDynamicReference as Pt, red as Q, LockError as Qa, resolveCaptureObservedState as Qi, refuseMalformedOutputs as Qn, exportNamesCarriedFrom as Qr, configStringRefusal as Qt, MULTI_REGION_RECREATE_BLOCKED_TYPES as R, getAwsClients as Ra, redactDockerArgvValues as Ri, malformedOutputsWarning as Rn, recordMaskOnlyValuesIn as Rr, isImpossibleEmptyStoredAttribute as Rt, computeParameterTaint as S, AssemblyReader as Sa, readBootstrapMarkerBody as Si, deployRefusesOrphanRowsReason as Sn, describeAwsFailure as So, STATE_SOURCED_BASELINE_RULES as Sr, startInterruptWatch as St, resourcesNamingDeclaredParameter as T, processStackMessages as Ta, buildDenyExternalAccessPolicy as Ti, hasReadableOutputs as Tn, TEMPLATE_SOURCED_RULES as Tr, ccProtectionRegistryTypes as Tt, coerceWarmThroughput as U, CdkdError as Ua, stripControlChars as Ui, malformedStateRefusalMessage as Un, S3StateBackend as Ur, isSettledInstanceState as Ut, renderStatefulReason as V, setAwsClients as Va, warnFinchArgvExposure as Vi, malformedResourcePropertiesWarning as Vn, scrubResourceRecord as Vr, parameterTypeMayLoseSecretIdentity as Vt, isWarmThroughputDecrease as W, ConfigError as Wa, AssetManifestLoader as Wi, previewableOrphanRecords as Wn, rebuildClientForBucketRegion as Wr, WAFv2WebACLProvider as Wt, gray as X, LocalInvokeBuildError as Xa, resolveApp as Xi, refuseMalformedOrphansForDestroy as Xn, CUSTOM_RESOURCE_RESPONSE_PREFIX as Xr, configBooleanRefusal as Xt, cyan as Y, IntrinsicResolutionRefusalError as Ya, getLegacyStateBucketName as Yi, refuseMalformedOrphans as Yn, formatLockExpiry as Yr, coerceCfnInteger as Yt, green as Z, LocalStartServiceError as Za, resolveAutoAssetStorage as Zi, refuseMalformedOrphansForOrphan as Zn, DEFAULT_STATE_PREFIX as Zr, configIntegerRefusal as Zt, bagHoldsSecretExpression as _, expectedOwnerParam as _a, assertAssetBucketRegion as _i, DiffCalculator as _n, isThrottlingError as _o, findSilentDropProperties as _r, maskerOrIdentity as _t, DeploymentEventsStore as a, ssmResolvedValueType as aa, orphansAfterRollback as ai, producerRegionsFromState as an, StackHasActiveImportsError as ao, refuseMalformedState as ar, secretBearingStateKeyWarning as at, mergeNoChangeOutputs as b, derivePartitionAndUrlSuffix as ba, isCrossRegionRedirect as bi, UNREADABLE_ORPHANS_CONTAINER_ROW as bn, markRedactedCause as bo, DagBuilder as br, interruptWatchListenerCount as bt, replayFailedOperations as c, MIGRATE_TMP_PREFIX as ca, AssetPublisher as ci, s3BucketDomainName as cn, SynthesisError as co, repairMalformedOutputsForReadOnly as cr, IAMRoleProvider as ct, updatePartialMessage as d, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as da, buildAssetRedirectMap as di, s3BucketWebsiteUrl as dn, normalizeAwsError as do, repairMalformedResourcesForReadOnly as dr, definedAttributes as dt, resolveStateBucketWithDefault as ea, hasReasonlessBaselineRefusal as ei, replayWarn as en, NestedStackChildDirectDestroyError as eo, refuseMalformedResourceAttributesForOrphan as er, collectDeclaredOutputNames as et, updatePartialReason as f, injectiveKey as fa, createAssetRedirectResolver as fi, applyRoleArnIfSet as fn, withErrorHandling as fo, safeRegion as fr, stringifyIfAssigned as ft, computeImplicitDeleteEdges as g, decodeListingKey as ga, BOOTSTRAP_MARKER_PREFIX as gi, envCredentialsAreAssumedRole as gn, isRetryableTransientError as go, findActionableSilentDrops as gr, maskDeep as gt, IMPLICIT_DELETE_DEPENDENCIES as h, producerRecordKey as ha, AssetModeResolver as hi, callerEnvCredentials as hn, isMarkedNonRetryable as ho, unreadableOrphanRecords as hr, createMaskedRetryLogger as ht, DeploymentEventsReader as i, warnDeprecatedNoPrefixCliFlag as ia, isReadableBag as ii, classifyReplaySecretRegion as in, ResourceUpdateNotSupportedError as io, refuseMalformedResourcesForDestroy as ir, secretBearing as it, isFinalSnapshotError as j, absoluteAssemblyPathEscape as ja, dockerSpawnEnvWithSensitive as ji, malformedLocalOutputsWarning as jn, isSingleDynamicReferenceToken as jr, isTerminationProtectionPropagationError as jt, ccRoutedFinalSnapshotError as k, nullPrototypeRecord as ka, describeDockerExecFailure as ki, malformedExportNamesWarning as kn, errorCauseChain as kr, isWaitAbandonedError as kt, replayRollback as l, findLargeInlineResources as la, stringifyValue as li, s3BucketDualStackDomainName as ln, formatError as lo, repairMalformedResourceEntriesForReadOnly as lr, collectInlinePolicyNamesManagedBySiblings as lt, maskingRetryLogger as m, producerCoordinateKey as ma, rewriteTemplateAssetReferences as mi, applyCallerIdentityCredentials as mn, shellQuote as mo, unpreviewableOrphanRecords as mr, wouldReturnToSdkProvider as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, resolveUseCdkBootstrapAssets as na, importableOutputKeys as ni, requireConfigObject as nn, ProvisioningError as no, refuseMalformedResourceEntriesForOrphan as nr, exportAliasCollisionScrubWarning as nt, planFailedOps as o, CFN_TEMPLATE_BODY_LIMIT as oa, orphansCarriedFrom as oi, withSharedDrainBudget as on, StackTerminationProtectionError as oo, repairMalformedOrphanRecordsForReadOnly as or, secretSafeKeyDisplay as ot, withResourceDeadline as p, injectiveKeyPrefix as pa, loadPublishableAssetManifest as pi, AWS_CREDENTIAL_ENV_KEYS as pn, pasteableCommand as po, safeStackName as pr, ProviderRegistry as pt, formatResourceLine as q, DeployCancelledError as qa, synthesisStatusMessage as qi, refuseMalformedOrphanRecords as qn, buildLockContentionMessage as qr, assertRegionMatch as qt, DeployEngine as r, stateBucketExistenceConfirmed as ra, importableOutputs as ri, requireConfigString as rn, ResourceTimeoutError as ro, refuseMalformedResourcePropertiesForOrphan as rr, isExportAliasCollision as rt, planRollback as s, CFN_TEMPLATE_URL_LIMIT as sa, shouldRetainResource as si, s3BucketArn as sn, StateError as so, repairMalformedOrphansForReadOnly as sr, getCurrentResourceSecrets as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, resolveStateBucketWithDefaultAndSource as ta, hasUnverifiableParameterRefusal as ti, requireConfigArray as tn, PartialFailureError as to, refuseMalformedResourceEntries as tr, collectPublishedOutputNames as tt, resolveReplacementOldType as u, uploadCfnTemplate as ua, WorkGraph as ui, s3BucketRegionalDomainName as un, isCdkdError as uo, repairMalformedResourcePropertiesForReadOnly as ur, clearOnUpdateRemoval as ut, isSecretBearingReferenceString as v, PARTITION_TABLE as va, ensureAssetStorage as vi, INTRINSIC_KEYS as vn, isTransientServerError as vo, describeTypeWithThrottleRetry as vr, beginCommandInterruptScope as vt, reachableDivergentParameters as w, globMatches as wa, validateContainerRepoName as wi, hasReadableOrphans as wn, __exportAll as wo, STATE_SOURCED_READBACK_RULES as wr, slowCcOperationTimeoutMs as wt, bindingSkippedOutputs as x, ambientClientDefaults as xa, parseBootstrapMarker as xi, UNREADABLE_RESOURCES_MAP_ROW as xn, retryClassificationText as xo, TemplateParser as xr, isInterruptedWaitError as xt, keptWholeReasonText as y, canonicalizeRegion as ya, getBootstrapMarkerKey as yi, STATE_RESOURCES_MALFORMED as yn, markNonRetryable as yo, withRetry as yr, endCommandInterruptScope as yt, isStatefulRecreateTargetForReplace as z, resetAwsClients as za, runDockerForeground as zi, malformedRenderedContainersWarning as zn, recoverMaskedOutput as zr, isNamelessDynamicReferenceError as zt };
|
|
52401
|
+
//# sourceMappingURL=deploy-engine-OgrMdBRR.js.map
|