@go-to-k/cdkd 0.290.30 → 0.290.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{asg-provider-De5KONKr.js → asg-provider-BuEvX2d9.js} +3 -3
- package/dist/{asg-provider-De5KONKr.js.map → asg-provider-BuEvX2d9.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-mI1Xv1oi.js → deploy-engine-CfOsVRQB.js} +511 -175
- package/dist/deploy-engine-CfOsVRQB.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{logger-BjWM-UVj.js → logger-BX4pJk0T.js} +53 -2
- package/dist/logger-BX4pJk0T.js.map +1 -0
- package/dist/{program-qSSjqstP.js → program-DdmCUgOP.js} +159 -77
- package/dist/{program-qSSjqstP.js.map → program-DdmCUgOP.js.map} +1 -1
- package/dist/{version-C15BftsD.js → version-F41ektvu.js} +2 -2
- package/dist/{version-C15BftsD.js.map → version-F41ektvu.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-mI1Xv1oi.js.map +0 -1
- package/dist/logger-BjWM-UVj.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { $ as secretBearing, $n as recordMaskOnlyValue, $r as AssetManifestLoader, $t as s3BucketArn, A as extractDeploymentEventError, Ai as getAwsClients, An as refuseMalformedState, Ar as BOOTSTRAP_MARKER_PREFIX, At as isImpossibleEmptyStoredAttribute, B as toCfnInteger, Bi as IntrinsicResolutionRefusalError, Bn as STATE_SOURCED_BASELINE_RULES, Br as buildDockerImage, Bt as coerceCfnBoolean, C as buildFinalSnapshotIdentifier, Ci as canonicalizeRegion, Cn as producerRecordKey, Cr as stringifyValue, Ct as isTerminationProtectionPropagationError, D as refusesFinalSnapshot, Dn as refuseMalformedOutputsForDestroy, Dr as loadPublishableAssetManifest, Dt as cfnRefValueFromPhysicalId, E as isFinalSnapshotError, Ei as processStackMessages, En as refuseMalformedOutputs, Er as createAssetRedirectResolver, Et as carriesFetchableDynamicReference, F as isStatefulRecreateTargetSync, Fn as findSilentDropProperties, Fr as parseBootstrapMarker, Ft as isSettledInstanceState, G as gray, Gi as NestedStackChildDirectDestroyError, Gn as createSecretMasker, Gr as formatDockerLoginError, Gt as readConfigString, H as formatResourceLine, Hi as LocalStartServiceError, Hn as STATE_SOURCED_READBACK_RULES, Hr as describeDockerExecFailure, Ht as configBooleanRefusal, I as renderStatefulReason, Ii as CrossAccountSecretRefusalError, In as describeTypeWithThrottleRetry, Ir as readBootstrapMarkerBody, It as WAFv2WebACLProvider, J as yellow, Ji as ResourceTimeoutError, Jn as identityKeyFor, Jr as redactDockerArgvValues, Jt as requireConfigObject, K as green, Ki as PartialFailureError, Kn as dynamicReferenceTokens, Kr as getDockerCmd, Kt as replayWarn, L as WARM_THROUGHPUT_MEMBERS, Ln as withRetry, Lr as validateAssetBucketName, Lt as normalizeAwsTagsToCfn, M as planOrphanAdoption, Mi as setAwsClients, Mn as repairMalformedResourcePropertiesForReadOnly, Mr as ensureAssetStorage, Mt as isUnboundTemplateParameter, N as MULTI_REGION_RECREATE_BLOCKED_TYPES, Nn as repairMalformedResourcesForReadOnly, Nr as getBootstrapMarkerKey, Nt as parameterTypeMayLoseSecretIdentity, O as unsupportedFinalSnapshotError, Oi as resolveBucketRegion, On as refuseMalformedResourcePropertiesForOrphan, Or as rewriteTemplateAssetReferences, Ot as coerceParameterTypedValue, P as isStatefulRecreateTargetForReplace, Pi as CdkdError, Pn as findActionableSilentDrops, Pr as isCrossRegionRedirect, Pt as refStateLookupFromResource, Q as isExportAliasCollision, Qn as maskSecretsInText, Qr as stripControlChars, Qt as withSharedDrainBudget, R as coerceWarmThroughput$1, Ri as DeployCancelledError, Rn as DagBuilder, Rr as validateContainerRepoName, Rt as resolveExplicitPhysicalId, S as PRE_DELETE_SNAPSHOT_TYPES, Si as PARTITION_TABLE, Sn as malformedStateRefusalMessage, Sr as AssetPublisher, St as disableInstanceApiTermination, T as createPreDeleteFinalSnapshot, Ti as AssemblyReader, Tn as refuseMalformedNestedChildOutputs, Tr as buildAssetRedirectMap, Tt as carriesDynamicReference, U as bold, Un as TEMPLATE_SOURCED_RULES, Ur as describeDockerFailure, Ut as configIntegerRefusal, V as toFiniteNumber, Vi as LocalInvokeBuildError$1, Vn as STATE_SOURCED_CROSS_GENERATION_RULES, Vr as describeDockerCapturedOutput, Vt as coerceCfnInteger, W as cyan, Wi as MalformedProducerRecordRefusalError, Wn as carriesSecretMask, Wr as dockerSpawnEnvWithSensitive, Wt as configStringRefusal, X as collectPublishedOutputNames, Xi as StackHasActiveImportsError, Xn as markSameGenerationBag, Xr as runDockerStreaming, Xt as classifyReplaySecretRegion, Y as collectDeclaredOutputNames, Yi as ResourceUpdateNotSupportedError, Yn as isSingleDynamicReferenceToken, Yr as runDockerForeground, Yt as requireConfigString, Z as exportAliasCollisionScrubWarning, Zi as StackTerminationProtectionError, Zn as maskSecretsInError, Zr as escapeRegExp, Zt as producerRegionsFromState, _ as isSecretBearingReferenceString, _i as findLargeInlineResources, _n as malformedOutputsRefusalMessage, _r as importableOutputs, _t as isWaitAbandonedError, a as DeploymentEventsStore, aa as isRetryableTransientError, ai as resolveApp, an as AWS_CREDENTIAL_ENV_KEYS, ar as rebuildClientForBucketRegion, at as clearOnUpdateRemoval, b as bindingSkippedOutputs, bi as decodeListingKey, bn as malformedResourcePropertiesWarning, br as orphansCarriedFrom, bt as deleteIndeterminateGuards, c as replayFailedOperations, ca as markNonRetryable, ci as resolveSkipPrefix, cn as envCredentialsAreAssumedRole, cr as buildLockContentionMessage, ct as createMaskedRetryLogger, d as updatePartialReason, da as describeAwsFailure, di as resolveUseCdkBootstrapAssets, dn as STATE_RESOURCES_MALFORMED, dr as shellQuote, dt as beginCommandInterruptScope, ei as getDockerImageBySourceHash, en as s3BucketDomainName, er as recoverMaskedOutput, et as secretBearingStateKeyWarning, f as withResourceDeadline, fa as safeStringify, fi as stateBucketExistenceConfirmed, fn as hasReadableOutputs, fr as CUSTOM_RESOURCE_RESPONSE_PREFIX, ft as endCommandInterruptScope, g as bagHoldsSecretExpression, gi as MIGRATE_TMP_PREFIX, gn as malformedLocalOutputsWarning, gr as importableOutputKeys, gt as CloudControlProvider, h as computeImplicitDeleteEdges, hi as CFN_TEMPLATE_URL_LIMIT, hn as malformedExportSourceWarning, hr as hasReadableExportSet, ht as startInterruptWatch, i as DeploymentEventsReader, ia as isMarkedNonRetryable, ii as getLegacyStateBucketName, in as applyRoleArnIfSet, ir as S3StateBackend, it as collectInlinePolicyNamesManagedBySiblings, j as makeSiblingClaimReader, ji as resetAwsClients, jn as repairMalformedOutputsForReadOnly, jr as assertAssetBucketRegion, jt as isNamelessDynamicReferenceError, k as makeCanonicalizePropertiesFn, ki as AwsClients, kn as refuseMalformedResourcesForDestroy, kr as AssetModeResolver, kt as getAccountInfo, l as replayRollback, la as markRedactedCause, li as resolveStateBucketWithDefault, ln as DiffCalculator, lr as forceQuitRecoveryClause, lt as maskDeep, m as IMPLICIT_DELETE_DEPENDENCIES, mi as CFN_TEMPLATE_BODY_LIMIT, mn as malformedExportNamesWarning, mr as exportNamesCarriedFrom, mt as isInterruptedWaitError, n as DEFAULT_RESOURCE_WARN_AFTER_MS, na as normalizeAwsError, ni as synthesisStatusMessage, nn as s3BucketRegionalDomainName, nr as scrubResourceRecord, nt as getCurrentResourceSecrets, o as planFailedOps, oa as isThrottlingError, oi as resolveAutoAssetStorage, on as applyCallerIdentityCredentials, or as UNREPRODUCIBLE_LOCK_CLAUSE, ot as ProviderRegistry, p as maskingRetryLogger, pi as warnDeprecatedNoPrefixCliFlag, pn as hasReadableResources, pr as DEFAULT_STATE_PREFIX, pt as interruptWatchListenerCount, q as red, qi as ProvisioningError, qn as errorCauseChain, qr as partitionSensitiveEnv, qt as requireConfigArray, r as DeployEngine, ra as withErrorHandling, ri as getDefaultStateBucketName, rn as s3BucketWebsiteUrl, rr as LockManager, rt as IAMRoleProvider, s as planRollback, sa as isTransientServerError, si as resolveCaptureObservedState, sn as callerEnvCredentials, sr as buildForceUnlockCommand, st as wouldReturnToSdkProvider, t as DEFAULT_RESOURCE_TIMEOUT_MS, ti as Synthesizer, tn as s3BucketDualStackDomainName, tr as redactSecretsForState, tt as secretSafeKeyDisplay, u as updatePartialMessage, ua as retryClassificationText, ui as resolveStateBucketWithDefaultAndSource, un as INTRINSIC_KEYS, ur as formatLockExpiry, ut as maskerOrIdentity, v as keptWholeReasonText, vi as uploadCfnTemplate, vn as malformedOutputsWarning, vr as isReadableBag, vt as slowCcOperationTimeoutMs, w as ccRoutedFinalSnapshotError, wi as derivePartitionAndUrlSuffix, wn as refuseDivergentRecordRegionForDestroy, wr as WorkGraph, wt as IntrinsicFunctionResolver, x as ATOMIC_FINAL_SNAPSHOT_TYPES, xi as expectedOwnerParam, xn as malformedResourcesWarning, xr as shouldRetainResource, xt as deleteSkipReason, y as mergeNoChangeOutputs, yi as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, yn as malformedRenderedContainersWarning, yr as orphansAfterRollback, yt as UNSPECIFIED_SKIP_REASON, z as isWarmThroughputDecrease, zi as DynamicReferenceRegionAmbiguousError, zn as TemplateParser, zr as buildDenyExternalAccessPolicy, zt as assertRegionMatch } from "./deploy-engine-
|
|
2
|
-
import { C as displayAwsMessage,
|
|
1
|
+
import { $ as secretBearing, $n as recordMaskOnlyValue, $r as AssetManifestLoader, $t as s3BucketArn, A as extractDeploymentEventError, Ai as getAwsClients, An as refuseMalformedState, Ar as BOOTSTRAP_MARKER_PREFIX, At as isImpossibleEmptyStoredAttribute, B as toCfnInteger, Bi as IntrinsicResolutionRefusalError, Bn as STATE_SOURCED_BASELINE_RULES, Br as buildDockerImage, Bt as coerceCfnBoolean, C as buildFinalSnapshotIdentifier, Ci as canonicalizeRegion, Cn as producerRecordKey, Cr as stringifyValue, Ct as isTerminationProtectionPropagationError, D as refusesFinalSnapshot, Dn as refuseMalformedOutputsForDestroy, Dr as loadPublishableAssetManifest, Dt as cfnRefValueFromPhysicalId, E as isFinalSnapshotError, Ei as processStackMessages, En as refuseMalformedOutputs, Er as createAssetRedirectResolver, Et as carriesFetchableDynamicReference, F as isStatefulRecreateTargetSync, Fn as findSilentDropProperties, Fr as parseBootstrapMarker, Ft as isSettledInstanceState, G as gray, Gi as NestedStackChildDirectDestroyError, Gn as createSecretMasker, Gr as formatDockerLoginError, Gt as readConfigString, H as formatResourceLine, Hi as LocalStartServiceError, Hn as STATE_SOURCED_READBACK_RULES, Hr as describeDockerExecFailure, Ht as configBooleanRefusal, I as renderStatefulReason, Ii as CrossAccountSecretRefusalError, In as describeTypeWithThrottleRetry, Ir as readBootstrapMarkerBody, It as WAFv2WebACLProvider, J as yellow, Ji as ResourceTimeoutError, Jn as identityKeyFor, Jr as redactDockerArgvValues, Jt as requireConfigObject, K as green, Ki as PartialFailureError, Kn as dynamicReferenceTokens, Kr as getDockerCmd, Kt as replayWarn, L as WARM_THROUGHPUT_MEMBERS, Ln as withRetry, Lr as validateAssetBucketName, Lt as normalizeAwsTagsToCfn, M as planOrphanAdoption, Mi as setAwsClients, Mn as repairMalformedResourcePropertiesForReadOnly, Mr as ensureAssetStorage, Mt as isUnboundTemplateParameter, N as MULTI_REGION_RECREATE_BLOCKED_TYPES, Nn as repairMalformedResourcesForReadOnly, Nr as getBootstrapMarkerKey, Nt as parameterTypeMayLoseSecretIdentity, O as unsupportedFinalSnapshotError, Oi as resolveBucketRegion, On as refuseMalformedResourcePropertiesForOrphan, Or as rewriteTemplateAssetReferences, Ot as coerceParameterTypedValue, P as isStatefulRecreateTargetForReplace, Pi as CdkdError, Pn as findActionableSilentDrops, Pr as isCrossRegionRedirect, Pt as refStateLookupFromResource, Q as isExportAliasCollision, Qn as maskSecretsInText, Qr as stripControlChars, Qt as withSharedDrainBudget, R as coerceWarmThroughput$1, Ri as DeployCancelledError, Rn as DagBuilder, Rr as validateContainerRepoName, Rt as resolveExplicitPhysicalId, S as PRE_DELETE_SNAPSHOT_TYPES, Si as PARTITION_TABLE, Sn as malformedStateRefusalMessage, Sr as AssetPublisher, St as disableInstanceApiTermination, T as createPreDeleteFinalSnapshot, Ti as AssemblyReader, Tn as refuseMalformedNestedChildOutputs, Tr as buildAssetRedirectMap, Tt as carriesDynamicReference, U as bold, Un as TEMPLATE_SOURCED_RULES, Ur as describeDockerFailure, Ut as configIntegerRefusal, V as toFiniteNumber, Vi as LocalInvokeBuildError$1, Vn as STATE_SOURCED_CROSS_GENERATION_RULES, Vr as describeDockerCapturedOutput, Vt as coerceCfnInteger, W as cyan, Wi as MalformedProducerRecordRefusalError, Wn as carriesSecretMask, Wr as dockerSpawnEnvWithSensitive, Wt as configStringRefusal, X as collectPublishedOutputNames, Xi as StackHasActiveImportsError, Xn as markSameGenerationBag, Xr as runDockerStreaming, Xt as classifyReplaySecretRegion, Y as collectDeclaredOutputNames, Yi as ResourceUpdateNotSupportedError, Yn as isSingleDynamicReferenceToken, Yr as runDockerForeground, Yt as requireConfigString, Z as exportAliasCollisionScrubWarning, Zi as StackTerminationProtectionError, Zn as maskSecretsInError, Zr as escapeRegExp, Zt as producerRegionsFromState, _ as isSecretBearingReferenceString, _i as findLargeInlineResources, _n as malformedOutputsRefusalMessage, _r as importableOutputs, _t as isWaitAbandonedError, a as DeploymentEventsStore, aa as isRetryableTransientError, ai as resolveApp, an as AWS_CREDENTIAL_ENV_KEYS, ar as rebuildClientForBucketRegion, at as clearOnUpdateRemoval, b as bindingSkippedOutputs, bi as decodeListingKey, bn as malformedResourcePropertiesWarning, br as orphansCarriedFrom, bt as deleteIndeterminateGuards, c as replayFailedOperations, ca as markNonRetryable, ci as resolveSkipPrefix, cn as envCredentialsAreAssumedRole, cr as buildLockContentionMessage, ct as createMaskedRetryLogger, d as updatePartialReason, da as describeAwsFailure, di as resolveUseCdkBootstrapAssets, dn as STATE_RESOURCES_MALFORMED, dr as shellQuote, dt as beginCommandInterruptScope, ei as getDockerImageBySourceHash, en as s3BucketDomainName, er as recoverMaskedOutput, et as secretBearingStateKeyWarning, f as withResourceDeadline, fa as safeStringify, fi as stateBucketExistenceConfirmed, fn as hasReadableOutputs, fr as CUSTOM_RESOURCE_RESPONSE_PREFIX, ft as endCommandInterruptScope, g as bagHoldsSecretExpression, gi as MIGRATE_TMP_PREFIX, gn as malformedLocalOutputsWarning, gr as importableOutputKeys, gt as CloudControlProvider, h as computeImplicitDeleteEdges, hi as CFN_TEMPLATE_URL_LIMIT, hn as malformedExportSourceWarning, hr as hasReadableExportSet, ht as startInterruptWatch, i as DeploymentEventsReader, ia as isMarkedNonRetryable, ii as getLegacyStateBucketName, in as applyRoleArnIfSet, ir as S3StateBackend, it as collectInlinePolicyNamesManagedBySiblings, j as makeSiblingClaimReader, ji as resetAwsClients, jn as repairMalformedOutputsForReadOnly, jr as assertAssetBucketRegion, jt as isNamelessDynamicReferenceError, k as makeCanonicalizePropertiesFn, ki as AwsClients, kn as refuseMalformedResourcesForDestroy, kr as AssetModeResolver, kt as getAccountInfo, l as replayRollback, la as markRedactedCause, li as resolveStateBucketWithDefault, ln as DiffCalculator, lr as forceQuitRecoveryClause, lt as maskDeep, m as IMPLICIT_DELETE_DEPENDENCIES, mi as CFN_TEMPLATE_BODY_LIMIT, mn as malformedExportNamesWarning, mr as exportNamesCarriedFrom, mt as isInterruptedWaitError, n as DEFAULT_RESOURCE_WARN_AFTER_MS, na as normalizeAwsError, ni as synthesisStatusMessage, nn as s3BucketRegionalDomainName, nr as scrubResourceRecord, nt as getCurrentResourceSecrets, o as planFailedOps, oa as isThrottlingError, oi as resolveAutoAssetStorage, on as applyCallerIdentityCredentials, or as UNREPRODUCIBLE_LOCK_CLAUSE, ot as ProviderRegistry, p as maskingRetryLogger, pi as warnDeprecatedNoPrefixCliFlag, pn as hasReadableResources, pr as DEFAULT_STATE_PREFIX, pt as interruptWatchListenerCount, q as red, qi as ProvisioningError, qn as errorCauseChain, qr as partitionSensitiveEnv, qt as requireConfigArray, r as DeployEngine, ra as withErrorHandling, ri as getDefaultStateBucketName, rn as s3BucketWebsiteUrl, rr as LockManager, rt as IAMRoleProvider, s as planRollback, sa as isTransientServerError, si as resolveCaptureObservedState, sn as callerEnvCredentials, sr as buildForceUnlockCommand, st as wouldReturnToSdkProvider, t as DEFAULT_RESOURCE_TIMEOUT_MS, ti as Synthesizer, tn as s3BucketDualStackDomainName, tr as redactSecretsForState, tt as secretSafeKeyDisplay, u as updatePartialMessage, ua as retryClassificationText, ui as resolveStateBucketWithDefaultAndSource, un as INTRINSIC_KEYS, ur as formatLockExpiry, ut as maskerOrIdentity, v as keptWholeReasonText, vi as uploadCfnTemplate, vn as malformedOutputsWarning, vr as isReadableBag, vt as slowCcOperationTimeoutMs, w as ccRoutedFinalSnapshotError, wi as derivePartitionAndUrlSuffix, wn as refuseDivergentRecordRegionForDestroy, wr as WorkGraph, wt as IntrinsicFunctionResolver, x as ATOMIC_FINAL_SNAPSHOT_TYPES, xi as expectedOwnerParam, xn as malformedResourcesWarning, xr as shouldRetainResource, xt as deleteSkipReason, y as mergeNoChangeOutputs, yi as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, yn as malformedRenderedContainersWarning, yr as orphansAfterRollback, yt as UNSPECIFIED_SKIP_REASON, z as isWarmThroughputDecrease, zi as DynamicReferenceRegionAmbiguousError, zn as TemplateParser, zr as buildDenyExternalAccessPolicy, zt as assertRegionMatch } from "./deploy-engine-CfOsVRQB.js";
|
|
2
|
+
import { C as displayAwsMessage, D as truncateCodePoints, E as isPasteableIdent, S as UNRENDERABLE, T as displaySafe, _ as withSkipPrefix, b as SECRET_REF_MAX_CODE_POINTS, c as PATTERN_B_NAME_OPTIONS, f as explicitNamePropertyFor, h as getCurrentStackName, i as reserveStdoutForPayload, l as PATTERN_B_NAME_PROPERTIES, m as generateResourceNameWithFallback, n as getLogger, o as runStackBuffered, p as generateResourceName, s as getLiveRenderer, u as PATTERN_B_RESOURCE_TYPES, v as withStackName, w as displayIdent, x as STACK_REF_MAX_CODE_POINTS } from "./logger-BX4pJk0T.js";
|
|
3
3
|
import { n as awsClientDefaults } from "./aws-client-defaults-BoIxyCir.js";
|
|
4
|
-
import { t as getCdkdVersion } from "./version-
|
|
5
|
-
import { a as renderDisableCommand, i as protectedReplacementAdvice, r as UNNAMEABLE_ID_CLAUSE, t as ASGProvider } from "./asg-provider-
|
|
4
|
+
import { t as getCdkdVersion } from "./version-F41ektvu.js";
|
|
5
|
+
import { a as renderDisableCommand, i as protectedReplacementAdvice, r as UNNAMEABLE_ID_CLAUSE, t as ASGProvider } from "./asg-provider-BuEvX2d9.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, DeleteBucketEncryptionCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketOwnershipControlsCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketOwnershipControlsCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, NotFound, 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";
|
|
@@ -270,35 +270,6 @@ function describeStateKey(key, suffix = STATE_FILE_SUFFIX, knownPrefix) {
|
|
|
270
270
|
return region === void 0 ? name : `${name} (${displayIdent(region)})`;
|
|
271
271
|
}
|
|
272
272
|
/**
|
|
273
|
-
* The shape a state-key segment must have before it may be interpolated into a
|
|
274
|
-
* command cdkd invites an operator to PASTE.
|
|
275
|
-
*
|
|
276
|
-
* An ALLOW-LIST, and deliberately so: the first cut of this predicate was a
|
|
277
|
-
* deny-list that refused a leading `-`, and review defeated it with a leading
|
|
278
|
-
* `~`. A deny-list has to enumerate every character a shell treats specially
|
|
279
|
-
* BEFORE cdkd sees the word, and the set of things nobody thought of is
|
|
280
|
-
* unbounded. The repo already settled this once — `rollback-executor.ts`'s
|
|
281
|
-
* `PASTEABLE_LOGICAL_ID` is `/^[A-Za-z0-9]{1,255}$/`, with a comment naming
|
|
282
|
-
* `~user` and `=x` by name.
|
|
283
|
-
*
|
|
284
|
-
* This one is wider than that because the values here are not logical ids: a
|
|
285
|
-
* cdkd state record's stack name carries `~` (a nested-stack child is minted
|
|
286
|
-
* `${parent}~${logicalId}`) and a region carries `-`. What it keeps from the
|
|
287
|
-
* precedent is the LEADING character, which is where the danger is. MEASURED
|
|
288
|
-
* in bash on a real host rather than reasoned:
|
|
289
|
-
*
|
|
290
|
-
* ~root -> /var/root ~/x -> $HOME/x ~- -> $OLDPWD
|
|
291
|
-
* a=~/x -> a=$HOME/x
|
|
292
|
-
* Parent~Child -> inert a:~/x -> inert
|
|
293
|
-
*
|
|
294
|
-
* So `~` is dangerous only in the leading position or straight after `=`,
|
|
295
|
-
* which is why a medial `~` stays in the set and `=` stays out of it entirely.
|
|
296
|
-
* A leading digit or letter also closes the option case: `--state-bucket=x`
|
|
297
|
-
* cannot match, and that one is NOT about shell quoting — it is still an
|
|
298
|
-
* OPTION after quoting, which is why the answer is refusal rather than quoting.
|
|
299
|
-
*/
|
|
300
|
-
const PASTEABLE_STATE_IDENT = /^[A-Za-z0-9][A-Za-z0-9~_.-]*$/;
|
|
301
|
-
/**
|
|
302
273
|
* The cap for rendering a whole state or lock KEY, as opposed to one segment.
|
|
303
274
|
*
|
|
304
275
|
* A key CONTAINS a stack name, so capping it at `STACK_REF_MAX_CODE_POINTS`
|
|
@@ -314,28 +285,6 @@ const PASTEABLE_STATE_IDENT = /^[A-Za-z0-9][A-Za-z0-9~_.-]*$/;
|
|
|
314
285
|
* BUDGET, not an enforced bound. Nothing in `src/` validates key length.
|
|
315
286
|
*/
|
|
316
287
|
const STATE_KEY_MAX_CODE_POINTS = STACK_REF_MAX_CODE_POINTS + 64;
|
|
317
|
-
/**
|
|
318
|
-
* Is this value safe to interpolate into a command we tell an operator to RUN?
|
|
319
|
-
*
|
|
320
|
-
* Two independent tests, and BOTH are load-bearing:
|
|
321
|
-
*
|
|
322
|
-
* 1. {@link PASTEABLE_STATE_IDENT}, which decides the shell question — see its
|
|
323
|
-
* own note for why it is an allow-list and what was measured.
|
|
324
|
-
* 2. It renders byte-identically through `displayIdent`, which adds the LENGTH
|
|
325
|
-
* cap and the ASCII rule the regex does not carry, asked through the public
|
|
326
|
-
* API rather than by re-spelling `PLAIN_IDENT` (a second spelling of a
|
|
327
|
-
* security predicate is how the two drift).
|
|
328
|
-
*
|
|
329
|
-
* Deliberately NOT shell-quoting instead. Quoting answers test 2's population
|
|
330
|
-
* and none of the option case — `'--state-bucket=attacker'` is still parsed as
|
|
331
|
-
* a flag — and a command that LOOKS runnable is the thing being handed over, so
|
|
332
|
-
* the honest answer for a value failing either test is to print the S3 key and
|
|
333
|
-
* let the operator decide.
|
|
334
|
-
*/
|
|
335
|
-
function isPasteableIdent(value) {
|
|
336
|
-
if (!PASTEABLE_STATE_IDENT.test(value)) return false;
|
|
337
|
-
return displayIdent(value, { maxCodePoints: STACK_REF_MAX_CODE_POINTS }) === value;
|
|
338
|
-
}
|
|
339
288
|
|
|
340
289
|
//#endregion
|
|
341
290
|
//#region src/cli/options.ts
|
|
@@ -69750,6 +69699,33 @@ function isTemplateShapeResolutionFailure(err) {
|
|
|
69750
69699
|
*
|
|
69751
69700
|
* Per-pattern throw sites, and the fence that keeps them true, are in
|
|
69752
69701
|
* `tests/unit/cli/scrub-abandoned-scan-origin.test.ts`.
|
|
69702
|
+
*
|
|
69703
|
+
* TWO CLASSIFICATION CHANGES, recorded because they are a GATE and this file
|
|
69704
|
+
* does not otherwise mention them. go-to-k/cdkd#3426 routed the `Ref <id> not
|
|
69705
|
+
* found` throw through the resolver's display builder, which strips control
|
|
69706
|
+
* characters and trims — so an id carrying a CR or padding, which `\S+` could
|
|
69707
|
+
* not match before, matches now, and such a unit moves from `count` (gateable
|
|
69708
|
+
* by `cdkd scrub --dry-run --fail`) to `warn` (not). go-to-k/cdkd#3432 did the
|
|
69709
|
+
* same to `Resource <id> not found for Fn::GetAtt`, the SECOND pattern below,
|
|
69710
|
+
* for the same reason and with the same effect. Both are listed here rather
|
|
69711
|
+
* than one, because a note naming a single pattern reads as a property of that
|
|
69712
|
+
* pattern instead of a property of every id-bearing shape in the list. THE
|
|
69713
|
+
* THIRD moved too, in go-to-k/cdkd#3432's own review round: `Parameter <name>
|
|
69714
|
+
* is required ...` carried the same premise one expression name over — a
|
|
69715
|
+
* `Parameters` KEY is arbitrary JSON just as a `Resources` key is — and a
|
|
69716
|
+
* reviewer measured it putting a live terminal-rewriting sequence on that
|
|
69717
|
+
* throw. So all THREE patterns now see a sanitized id, and this note names no
|
|
69718
|
+
* exception; an earlier revision of it described the third as the one still
|
|
69719
|
+
* rendered raw, which would have shipped as a standing description of a live
|
|
69720
|
+
* exposure.
|
|
69721
|
+
*
|
|
69722
|
+
* The SAFE direction would have been the other one, and it is accepted for a
|
|
69723
|
+
* reason: a plain dangling `Ref`, `Fn::GetAtt` or unbound parameter already
|
|
69724
|
+
* warned, so this adds no NEW bypass — it extends an existing classification to
|
|
69725
|
+
* ids that differ from an ordinary one only by characters nobody can see. The
|
|
69726
|
+
* alternative is a gate whose verdict depends on invisible bytes in a logical
|
|
69727
|
+
* id, which is worse to reason about. All three are pinned by
|
|
69728
|
+
* `tests/unit/cli/scrub-abandoned-scan-origin.test.ts`.
|
|
69753
69729
|
*/
|
|
69754
69730
|
const TEMPLATE_SHAPE_FAILURE_PATTERNS = [
|
|
69755
69731
|
/^Ref \S+ not found$/,
|
|
@@ -84085,19 +84061,20 @@ async function orphanCommand(pathArgs, options) {
|
|
|
84085
84061
|
})).stacks);
|
|
84086
84062
|
const stackInfo = resolved.stack;
|
|
84087
84063
|
const orphanLogicalIds = resolved.logicalIds;
|
|
84088
|
-
const targetRegion = await pickStackRegion(stateBackend, stackInfo.stackName, stackInfo.region, options.stackRegion);
|
|
84064
|
+
const { region: targetRegion, recordRegion } = await pickStackRegion(stateBackend, stackInfo.stackName, stackInfo.region, options.stackRegion);
|
|
84089
84065
|
logger.info(`Target: ${stackInfo.stackName} (${targetRegion}); orphaning ${orphanLogicalIds.length} resource(s): ${orphanLogicalIds.join(", ")}`);
|
|
84090
84066
|
const owner = `${process.env["USER"] || "unknown"}@${process.env["HOSTNAME"] || "host"}:${process.pid}`;
|
|
84067
|
+
const recovery = {
|
|
84068
|
+
profile: options.profile,
|
|
84069
|
+
stateBucket,
|
|
84070
|
+
statePrefix: options.statePrefix
|
|
84071
|
+
};
|
|
84091
84072
|
if (!options.dryRun) {
|
|
84092
84073
|
if (!await lockManager.acquireLock(stackInfo.stackName, targetRegion, owner, "orphan")) throw new Error(await buildLockContentionMessage({
|
|
84093
84074
|
lockManager,
|
|
84094
84075
|
stackName: stackInfo.stackName,
|
|
84095
84076
|
region: targetRegion,
|
|
84096
|
-
recovery
|
|
84097
|
-
profile: options.profile,
|
|
84098
|
-
stateBucket,
|
|
84099
|
-
statePrefix: options.statePrefix
|
|
84100
|
-
}
|
|
84077
|
+
recovery
|
|
84101
84078
|
}));
|
|
84102
84079
|
}
|
|
84103
84080
|
try {
|
|
@@ -84106,7 +84083,7 @@ async function orphanCommand(pathArgs, options) {
|
|
|
84106
84083
|
const { state, etag, migrationPending } = stateData;
|
|
84107
84084
|
refuseMalformedState(state, stackInfo.stackName, targetRegion);
|
|
84108
84085
|
refuseMalformedOutputs(state, stackInfo.stackName, targetRegion);
|
|
84109
|
-
refuseMalformedResourcePropertiesForOrphan(state, orphanLogicalIds, stackInfo.stackName,
|
|
84086
|
+
refuseMalformedResourcePropertiesForOrphan(state, orphanLogicalIds, stackInfo.stackName, recordRegion, recovery);
|
|
84110
84087
|
const missing = orphanLogicalIds.filter((id) => !(id in state.resources));
|
|
84111
84088
|
if (missing.length > 0) {
|
|
84112
84089
|
const have = Object.keys(state.resources ?? {}).join(", ");
|
|
@@ -84201,8 +84178,14 @@ function resolveConstructPaths(paths, stacks) {
|
|
|
84201
84178
|
async function pickStackRegion(stateBackend, stackName, synthRegion, flag) {
|
|
84202
84179
|
const refs = (await stateBackend.listStacks()).filter((r) => r.stackName === stackName);
|
|
84203
84180
|
if (refs.length === 0) {
|
|
84204
|
-
if (flag) return
|
|
84205
|
-
|
|
84181
|
+
if (flag) return {
|
|
84182
|
+
region: flag,
|
|
84183
|
+
recordRegion: flag
|
|
84184
|
+
};
|
|
84185
|
+
if (synthRegion) return {
|
|
84186
|
+
region: synthRegion,
|
|
84187
|
+
recordRegion: synthRegion
|
|
84188
|
+
};
|
|
84206
84189
|
throw new Error(`No state found for stack '${stackName}'. Run 'cdkd state list' to see available stacks.`);
|
|
84207
84190
|
}
|
|
84208
84191
|
if (flag) {
|
|
@@ -84210,12 +84193,24 @@ async function pickStackRegion(stateBackend, stackName, synthRegion, flag) {
|
|
|
84210
84193
|
const seen = refs.map((r) => r.region ?? "(legacy)").join(", ");
|
|
84211
84194
|
throw new Error(`No state found for stack '${stackName}' in region '${flag}'. Available regions: ${seen}.`);
|
|
84212
84195
|
}
|
|
84213
|
-
return
|
|
84196
|
+
return {
|
|
84197
|
+
region: flag,
|
|
84198
|
+
recordRegion: flag
|
|
84199
|
+
};
|
|
84214
84200
|
}
|
|
84215
84201
|
if (synthRegion) {
|
|
84216
|
-
if (refs.find((r) => r.region === synthRegion)) return
|
|
84202
|
+
if (refs.find((r) => r.region === synthRegion)) return {
|
|
84203
|
+
region: synthRegion,
|
|
84204
|
+
recordRegion: synthRegion
|
|
84205
|
+
};
|
|
84206
|
+
}
|
|
84207
|
+
if (refs.length === 1) {
|
|
84208
|
+
const recordRegion = refs[0].region;
|
|
84209
|
+
return {
|
|
84210
|
+
region: recordRegion ?? synthRegion ?? "",
|
|
84211
|
+
recordRegion
|
|
84212
|
+
};
|
|
84217
84213
|
}
|
|
84218
|
-
if (refs.length === 1) return refs[0].region ?? synthRegion ?? "";
|
|
84219
84214
|
const regions = refs.map((r) => r.region ?? "(legacy)").join(", ");
|
|
84220
84215
|
throw new Error(`Stack '${stackName}' has state in multiple regions: ${regions}. Re-run with --stack-region <region> to disambiguate.`);
|
|
84221
84216
|
}
|
|
@@ -88985,11 +88980,12 @@ const CONTAINER_AWS_CREDENTIALS_PATH = "/cdkd-aws/credentials";
|
|
|
88985
88980
|
* file behind in `/tmp` is a security smell (temp credentials live on
|
|
88986
88981
|
* disk).
|
|
88987
88982
|
*/
|
|
88988
|
-
async function writeProfileCredentialsFile(profileName, creds) {
|
|
88983
|
+
async function writeProfileCredentialsFile(profileName, creds, opts) {
|
|
88989
88984
|
if (profileName === "") throw new Error("writeProfileCredentialsFile: profile name must not be empty.");
|
|
88990
88985
|
if (/[\r\n[\]]/.test(profileName)) throw new Error(`writeProfileCredentialsFile: profile name ${displayIdent(profileName)} contains a forbidden character (any of CR, LF, '[', ']' would corrupt the INI file or the docker -e env var).`);
|
|
88991
88986
|
const dir = await mkdtemp(path.join(tmpdir(), "cdkd-profile-creds-"));
|
|
88992
88987
|
const hostPath = path.join(dir, "credentials");
|
|
88988
|
+
opts?.onDirCreated?.(hostPath);
|
|
88993
88989
|
const lines = [
|
|
88994
88990
|
`[${profileName}]`,
|
|
88995
88991
|
`aws_access_key_id = ${creds.accessKeyId}`,
|
|
@@ -88999,10 +88995,16 @@ async function writeProfileCredentialsFile(profileName, creds) {
|
|
|
88999
88995
|
try {
|
|
89000
88996
|
await writeFile(hostPath, lines.join("\n") + "\n", { mode: 384 });
|
|
89001
88997
|
} catch (err) {
|
|
88998
|
+
let removed = true;
|
|
89002
88999
|
await rm(dir, {
|
|
89003
89000
|
recursive: true,
|
|
89004
89001
|
force: true
|
|
89005
|
-
}).catch(() => {
|
|
89002
|
+
}).catch(() => {
|
|
89003
|
+
removed = false;
|
|
89004
|
+
});
|
|
89005
|
+
if (removed) try {
|
|
89006
|
+
opts?.onDirRemoved?.(hostPath);
|
|
89007
|
+
} catch {}
|
|
89006
89008
|
throw err;
|
|
89007
89009
|
}
|
|
89008
89010
|
return {
|
|
@@ -89017,6 +89019,46 @@ async function writeProfileCredentialsFile(profileName, creds) {
|
|
|
89017
89019
|
}
|
|
89018
89020
|
};
|
|
89019
89021
|
}
|
|
89022
|
+
/**
|
|
89023
|
+
* The sentence an exit path owes when it leaves this file on disk
|
|
89024
|
+
* (issue [#3410](https://github.com/go-to-k/cdkd/issues/3410)).
|
|
89025
|
+
*
|
|
89026
|
+
* Takes the PATH rather than the `ProfileCredentialsFile` (go-to-k/cdkd#3435
|
|
89027
|
+
* review): a caller on a signal path may hold the path from
|
|
89028
|
+
* `writeProfileCredentialsFile`'s `onDirCreated` hook while the file object
|
|
89029
|
+
* itself is still an unresolved promise, and the sentence is the same either
|
|
89030
|
+
* way. `undefined` renders nothing, so a run that passed no `--profile` is not
|
|
89031
|
+
* told about a path that does not exist.
|
|
89032
|
+
*
|
|
89033
|
+
* ## Why the remedy is to NAME the path rather than to remove it
|
|
89034
|
+
*
|
|
89035
|
+
* Every exit path that can reach this notice leaves the CONTAINERS running with
|
|
89036
|
+
* this file bind-mounted, and that is the premise `local-run-task.ts`'s detach
|
|
89037
|
+
* arm already records: the file cannot be disposed there precisely because the
|
|
89038
|
+
* containers outlive the process. A force-exit is the same situation reached a
|
|
89039
|
+
* different way -- "container cleanup skipped" is what it announces -- so the
|
|
89040
|
+
* synchronous `rmSync` that suggests itself would be removing a mount the
|
|
89041
|
+
* surviving containers are still reading, on the strength of a premise this
|
|
89042
|
+
* repo has not measured either way. What the file is instead is INVISIBLE: it
|
|
89043
|
+
* is mode-0600 in `$TMPDIR`, nothing reports it, and one accumulates per
|
|
89044
|
+
* force-quit. Naming it is what the operator can act on, and it is what the
|
|
89045
|
+
* detach arm already does.
|
|
89046
|
+
*
|
|
89047
|
+
* ONE BUILDER FOR ALL THREE SITES, not three sentences that agree today. They
|
|
89048
|
+
* say the same thing for the same reason -- the two force-exit arms
|
|
89049
|
+
* (`local-run-task.ts`, `local-start-api.ts`) and the detach notice -- and a
|
|
89050
|
+
* wording that drifts between them is how an operator learns to read one shape
|
|
89051
|
+
* and miss another. Each CALLER supplies its own cause clause; this supplies
|
|
89052
|
+
* the remedy.
|
|
89053
|
+
*
|
|
89054
|
+
* `displayIdent` for the same reason the detach arm gives: the path is cdkd's
|
|
89055
|
+
* own `mkdtemp` output, so sanitization is the identity on it, but the rule
|
|
89056
|
+
* belongs to the SURFACE rather than to the value.
|
|
89057
|
+
*/
|
|
89058
|
+
function strandedProfileCredentialsNotice(hostPath) {
|
|
89059
|
+
if (hostPath === void 0) return void 0;
|
|
89060
|
+
return `The AWS credentials file mounted into the containers is NOT removed: delete ${displayIdent(hostPath)} once you tear them down.`;
|
|
89061
|
+
}
|
|
89020
89062
|
|
|
89021
89063
|
//#endregion
|
|
89022
89064
|
//#region src/local/websocket-body.ts
|
|
@@ -89894,6 +89936,7 @@ async function localStartApiCommand(target, options) {
|
|
|
89894
89936
|
const inlineTmpDirs = /* @__PURE__ */ new Set();
|
|
89895
89937
|
const layerTmpDirs = /* @__PURE__ */ new Set();
|
|
89896
89938
|
let profileCredsFile;
|
|
89939
|
+
let credsHostPath;
|
|
89897
89940
|
const authorizerCache = createAuthorizerCache();
|
|
89898
89941
|
const jwksCache = createJwksCache();
|
|
89899
89942
|
const jwksWarnedAt = /* @__PURE__ */ new Map();
|
|
@@ -89971,7 +90014,14 @@ async function localStartApiCommand(target, options) {
|
|
|
89971
90014
|
}
|
|
89972
90015
|
const stateByStack = options.fromState || isCfnFlagPresent(options) ? await loadStateForRoutedStacks(targetStacks, routes, routesWithAuth, options) : /* @__PURE__ */ new Map();
|
|
89973
90016
|
const profileCredentials = options.profile ? await resolveProfileCredentials(options.profile) : void 0;
|
|
89974
|
-
if (options.profile && profileCredentials && !profileCredsFile) profileCredsFile = await writeProfileCredentialsFile(options.profile, profileCredentials
|
|
90017
|
+
if (options.profile && profileCredentials && !profileCredsFile) profileCredsFile = await writeProfileCredentialsFile(options.profile, profileCredentials, {
|
|
90018
|
+
onDirCreated: (hostPath) => {
|
|
90019
|
+
credsHostPath = hostPath;
|
|
90020
|
+
},
|
|
90021
|
+
onDirRemoved: () => {
|
|
90022
|
+
credsHostPath = void 0;
|
|
90023
|
+
}
|
|
90024
|
+
});
|
|
89975
90025
|
const lambdaIds = uniqueLambdaIds(routes, routesWithAuth, webSocketApis);
|
|
89976
90026
|
const specs = /* @__PURE__ */ new Map();
|
|
89977
90027
|
for (let i = 0; i < lambdaIds.length; i++) {
|
|
@@ -90257,7 +90307,7 @@ async function localStartApiCommand(target, options) {
|
|
|
90257
90307
|
if (shutdownStarted) {
|
|
90258
90308
|
if (!forceExitArmed) {
|
|
90259
90309
|
forceExitArmed = true;
|
|
90260
|
-
logger.warn(
|
|
90310
|
+
logger.warn(forceExitShutdownWarning(signal, credsHostPath));
|
|
90261
90311
|
process.exit(130);
|
|
90262
90312
|
}
|
|
90263
90313
|
return;
|
|
@@ -91032,6 +91082,28 @@ async function resolveProfileCredentials(profile) {
|
|
|
91032
91082
|
}
|
|
91033
91083
|
}
|
|
91034
91084
|
/**
|
|
91085
|
+
* The line the force-exit arm of {@link localStartApiCommand}'s shutdown
|
|
91086
|
+
* prints (go-to-k/cdkd#3435 review).
|
|
91087
|
+
*
|
|
91088
|
+
* PURE and EXPORTED for one reason: nothing stands this long-running server
|
|
91089
|
+
* command up in a unit test, so the force-exit arm's only fence was a
|
|
91090
|
+
* source-shape rule over the file — "does it CALL the notice builder". A
|
|
91091
|
+
* reviewer measured that predicate: mutating the rendered line to drop
|
|
91092
|
+
* `stranded` while keeping the call left the entire suite green, with the
|
|
91093
|
+
* operator never told the mode-0600 credentials tmpdir exists. That is exactly
|
|
91094
|
+
* go-to-k/cdkd#3410's defect, re-openable inside its own fix. The
|
|
91095
|
+
* CONCATENATION is what has to be asserted, so it lives here rather than
|
|
91096
|
+
* inline.
|
|
91097
|
+
*
|
|
91098
|
+
* `hostPath` is the credentials tmpdir's path or `undefined`; a run that passed
|
|
91099
|
+
* no `--profile` gets the container sentence alone, with no trailing space and
|
|
91100
|
+
* no mention of a file that does not exist.
|
|
91101
|
+
*/
|
|
91102
|
+
function forceExitShutdownWarning(signal, hostPath) {
|
|
91103
|
+
const stranded = strandedProfileCredentialsNotice(hostPath);
|
|
91104
|
+
return `Received second ${signal}; force-exiting. Orphan containers may remain — run 'docker ps --filter name=cdkd-local-' and 'docker rm -f' to clean up.` + (stranded === void 0 ? "" : ` ${stranded}`);
|
|
91105
|
+
}
|
|
91106
|
+
/**
|
|
91035
91107
|
* Issue an STS AssumeRole and return temporary credentials. Mirrors
|
|
91036
91108
|
* `cdkd local invoke`'s helper byte-for-byte; lifted here so the
|
|
91037
91109
|
* start-api command stays self-contained.
|
|
@@ -92293,6 +92365,7 @@ async function localRunTaskCommand(target, options) {
|
|
|
92293
92365
|
let detachedSuccessfully = false;
|
|
92294
92366
|
let stateProvider;
|
|
92295
92367
|
let channels;
|
|
92368
|
+
let credsHostPath;
|
|
92296
92369
|
let cleanupPromise;
|
|
92297
92370
|
const cleanup = async () => {
|
|
92298
92371
|
if (!cleanupPromise) cleanupPromise = (async () => {
|
|
@@ -92353,7 +92426,8 @@ async function localRunTaskCommand(target, options) {
|
|
|
92353
92426
|
sigintHandler = () => {
|
|
92354
92427
|
sigintCount += 1;
|
|
92355
92428
|
if (sigintCount >= 2) {
|
|
92356
|
-
|
|
92429
|
+
const stranded = strandedProfileCredentialsNotice(credsHostPath);
|
|
92430
|
+
process.stderr.write(`Force-exit on second ^C; container cleanup skipped.${stranded ? ` ${stranded}` : ""}\n`);
|
|
92357
92431
|
process.exit(130);
|
|
92358
92432
|
}
|
|
92359
92433
|
logger.info("Stopping task...");
|
|
@@ -92370,7 +92444,14 @@ async function localRunTaskCommand(target, options) {
|
|
|
92370
92444
|
resolvedRoleArn = options.assumeTaskRole;
|
|
92371
92445
|
assumedCredentials = await assumeTaskRole(resolvedRoleArn, options.region);
|
|
92372
92446
|
}
|
|
92373
|
-
channels = await resolveTaskCredentialChannels(options, assumedCredentials
|
|
92447
|
+
channels = await resolveTaskCredentialChannels(options, assumedCredentials, {
|
|
92448
|
+
onDirCreated: (hostPath) => {
|
|
92449
|
+
credsHostPath = hostPath;
|
|
92450
|
+
},
|
|
92451
|
+
onDirRemoved: () => {
|
|
92452
|
+
credsHostPath = void 0;
|
|
92453
|
+
}
|
|
92454
|
+
});
|
|
92374
92455
|
const envOverrides = readEnvOverridesFile$2(options.envVars);
|
|
92375
92456
|
const runOpts = buildRunEcsTaskOptions(options, channels, {
|
|
92376
92457
|
...envOverrides !== void 0 && { envOverrides },
|
|
@@ -92382,7 +92463,8 @@ async function localRunTaskCommand(target, options) {
|
|
|
92382
92463
|
if (options.detach) {
|
|
92383
92464
|
logger.info("Task containers started in detached mode; cdkd is exiting.");
|
|
92384
92465
|
logger.info(`Use 'docker ps -a --filter network=${result.state.network?.networkName ?? "<network>"}' to inspect; tear down with 'docker rm -f' and 'docker network rm'.`);
|
|
92385
|
-
|
|
92466
|
+
const detachedNotice = strandedProfileCredentialsNotice(channels.profileCredsFile?.hostPath);
|
|
92467
|
+
if (detachedNotice) logger.info(`Detached mode leaves the mounted credentials file behind. ${detachedNotice}`);
|
|
92386
92468
|
detachedSuccessfully = true;
|
|
92387
92469
|
sigintCount = 99;
|
|
92388
92470
|
return;
|
|
@@ -92664,11 +92746,11 @@ async function resolveSidecarCredentials(options, assumedCredentials) {
|
|
|
92664
92746
|
* never the `--role-arn` role — and never an `--assume-task-role` STS result,
|
|
92665
92747
|
* which wins earlier and is served by the metadata sidecar instead.
|
|
92666
92748
|
*/
|
|
92667
|
-
async function resolveTaskCredentialChannels(options, assumedCredentials) {
|
|
92749
|
+
async function resolveTaskCredentialChannels(options, assumedCredentials, opts) {
|
|
92668
92750
|
const sidecarCredentials = await resolveSidecarCredentials(options, assumedCredentials);
|
|
92669
92751
|
if (options.profile && sidecarCredentials && !assumedCredentials) return {
|
|
92670
92752
|
sidecarCredentials,
|
|
92671
|
-
profileCredsFile: await writeProfileCredentialsFile(options.profile, sidecarCredentials)
|
|
92753
|
+
profileCredsFile: await writeProfileCredentialsFile(options.profile, sidecarCredentials, opts)
|
|
92672
92754
|
};
|
|
92673
92755
|
return {
|
|
92674
92756
|
sidecarCredentials,
|
|
@@ -95533,4 +95615,4 @@ function buildProgram() {
|
|
|
95533
95615
|
|
|
95534
95616
|
//#endregion
|
|
95535
95617
|
export { buildProgram };
|
|
95536
|
-
//# sourceMappingURL=program-
|
|
95618
|
+
//# sourceMappingURL=program-DdmCUgOP.js.map
|