@go-to-k/cdkd 0.283.28 → 0.283.29

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/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { $ as coerceCfnBoolean, $t as resolveApp, A as cyan, An as LocalInvokeBuildError$1, At as createAssetRedirectResolver, B as findSilentDropProperties, Bn as StackHasActiveImportsError, Bt as validateContainerRepoName, C as makeCanonicalizePropertiesFn, Cn as resetAwsClients, Ct as S3StateBackend, D as renderStatefulReason, Dt as stringifyValue, E as isStatefulRecreateTargetSync, En as CdkdError, Et as AssetPublisher, F as IAMRoleProvider, Fn as NestedStackChildDirectDestroyError, Ft as BOOTSTRAP_MARKER_PREFIX, G as IntrinsicFunctionResolver, Gt as runDockerForeground, H as slowCcOperationTimeoutMs, Ht as buildDockerImage, I as collectInlinePolicyNamesManagedBySiblings, In as PartialFailureError, It as ensureAssetStorage, J as refStateLookupFromResource, Jn as isMarkedNonRetryable, Jt as getDockerImageBySourceHash, K as cfnRefValueFromPhysicalId, Kn as normalizeAwsError, Kt as runDockerStreaming, L as clearOnUpdateRemoval, Ln as ProvisioningError, Lt as getBootstrapMarkerKey, M as green, Mn as LocalStartServiceError, Mt as rewriteTemplateAssetReferences, N as red, Nt as escapeRegExp, O as formatResourceLine, Ot as WorkGraph, P as yellow, Pn as MissingCdkCliError, Pt as AssetModeResolver, Q as assertRegionMatch, Qt as getLegacyStateBucketName, R as ProviderRegistry, Rn as ResourceTimeoutError, Rt as parseBootstrapMarker, S as unsupportedFinalSnapshotError, Sn as getAwsClients, St as LockManager, T as MULTI_REGION_RECREATE_BLOCKED_TYPES, Tt as shouldRetainResource, U as disableInstanceApiTermination, Ut as formatDockerLoginError, V as CloudControlProvider, Vn as StackTerminationProtectionError, Vt as buildDenyExternalAccessPolicy, W as isTerminationProtectionPropagationError, Wt as getDockerCmd, X as normalizeAwsTagsToCfn, Xn as isThrottlingError, Xt as synthesisStatusMessage, Y as WAFv2WebACLProvider, Yn as isRetryableTransientError, Yt as Synthesizer, Z as resolveExplicitPhysicalId, Zn as markNonRetryable, Zt as getDefaultStateBucketName, _ as buildFinalSnapshotIdentifier, _n as AssemblyReader, _t as INTRINSIC_KEYS, a as DeploymentEventsStore, an as resolveUseCdkBootstrapAssets, at as requireConfigObject, b as isFinalSnapshotError, bn as resolveBucketRegion, bt as DagBuilder, c as replayFailedOperations, cn as CFN_TEMPLATE_BODY_LIMIT, ct as redactSecretsForState, d as deleteSkipReason, dn as findLargeInlineResources, dt as s3BucketDomainName, en as resolveAutoAssetStorage, et as configBooleanRefusal, f as withResourceDeadline, fn as uploadCfnTemplate, ft as s3BucketDualStackDomainName, g as PRE_DELETE_SNAPSHOT_TYPES, gn as derivePartitionAndUrlSuffix, gt as DiffCalculator, h as ATOMIC_FINAL_SNAPSHOT_TYPES, hn as canonicalizeRegion, ht as applyRoleArnIfSet, i as DeploymentEventsReader, in as resolveStateBucketWithDefaultAndSource, it as requireConfigArray, j as gray, jn as LocalMigrateError, jt as loadPublishableAssetManifest, k as bold, kn as DeployCancelledError, kt as buildAssetRedirectMap, l as replayRollback, ln as CFN_TEMPLATE_URL_LIMIT, lt as scrubResourceRecord, m as computeImplicitDeleteEdges, mn as PARTITION_TABLE, mt as s3BucketWebsiteUrl, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as resolveSkipPrefix, nt as readConfigString, o as planFailedOps, on as stateBucketExistenceConfirmed, ot as requireConfigString, p as IMPLICIT_DELETE_DEPENDENCIES, pn as expectedOwnerParam, pt as s3BucketRegionalDomainName, q as getAccountInfo, qn as withErrorHandling, qt as AssetManifestLoader, r as DeployEngine, rn as resolveStateBucketWithDefault, rt as replayWarn, s as planRollback, sn as warnDeprecatedNoPrefixCliFlag, st as TEMPLATE_SOURCED_READBACK_RULES, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as resolveCaptureObservedState, tt as configStringRefusal, u as UNSPECIFIED_SKIP_REASON, un as MIGRATE_TMP_PREFIX, ut as s3BucketArn, v as ccRoutedFinalSnapshotError, vn as processStackMessages, vt as describeTypeWithThrottleRetry, w as extractDeploymentEventError, wn as setAwsClients, wt as rebuildClientForBucketRegion, x as refusesFinalSnapshot, xn as AwsClients, xt as TemplateParser, y as createPreDeleteFinalSnapshot, yt as withRetry, z as findActionableSilentDrops, zn as ResourceUpdateNotSupportedError, zt as validateAssetBucketName } from "./deploy-engine-5rA6lMn8.js";
2
+ import { $ as coerceCfnBoolean, $t as resolveApp, A as cyan, An as LocalInvokeBuildError$1, At as createAssetRedirectResolver, B as findSilentDropProperties, Bn as StackHasActiveImportsError, Bt as validateContainerRepoName, C as makeCanonicalizePropertiesFn, Cn as resetAwsClients, Ct as S3StateBackend, D as renderStatefulReason, Dt as stringifyValue, E as isStatefulRecreateTargetSync, En as CdkdError, Et as AssetPublisher, F as IAMRoleProvider, Fn as NestedStackChildDirectDestroyError, Ft as BOOTSTRAP_MARKER_PREFIX, G as IntrinsicFunctionResolver, Gt as runDockerForeground, H as slowCcOperationTimeoutMs, Ht as buildDockerImage, I as collectInlinePolicyNamesManagedBySiblings, In as PartialFailureError, It as ensureAssetStorage, J as refStateLookupFromResource, Jn as isMarkedNonRetryable, Jt as getDockerImageBySourceHash, K as cfnRefValueFromPhysicalId, Kn as normalizeAwsError, Kt as runDockerStreaming, L as clearOnUpdateRemoval, Ln as ProvisioningError, Lt as getBootstrapMarkerKey, M as green, Mn as LocalStartServiceError, Mt as rewriteTemplateAssetReferences, N as red, Nt as escapeRegExp, O as formatResourceLine, Ot as WorkGraph, P as yellow, Pn as MissingCdkCliError, Pt as AssetModeResolver, Q as assertRegionMatch, Qt as getLegacyStateBucketName, R as ProviderRegistry, Rn as ResourceTimeoutError, Rt as parseBootstrapMarker, S as unsupportedFinalSnapshotError, Sn as getAwsClients, St as LockManager, T as MULTI_REGION_RECREATE_BLOCKED_TYPES, Tt as shouldRetainResource, U as disableInstanceApiTermination, Ut as formatDockerLoginError, V as CloudControlProvider, Vn as StackTerminationProtectionError, Vt as buildDenyExternalAccessPolicy, W as isTerminationProtectionPropagationError, Wt as getDockerCmd, X as normalizeAwsTagsToCfn, Xn as isThrottlingError, Xt as synthesisStatusMessage, Y as WAFv2WebACLProvider, Yn as isRetryableTransientError, Yt as Synthesizer, Z as resolveExplicitPhysicalId, Zn as markNonRetryable, Zt as getDefaultStateBucketName, _ as buildFinalSnapshotIdentifier, _n as AssemblyReader, _t as INTRINSIC_KEYS, a as DeploymentEventsStore, an as resolveUseCdkBootstrapAssets, at as requireConfigObject, b as isFinalSnapshotError, bn as resolveBucketRegion, bt as DagBuilder, c as replayFailedOperations, cn as CFN_TEMPLATE_BODY_LIMIT, ct as redactSecretsForState, d as deleteSkipReason, dn as findLargeInlineResources, dt as s3BucketDomainName, en as resolveAutoAssetStorage, et as configBooleanRefusal, f as withResourceDeadline, fn as uploadCfnTemplate, ft as s3BucketDualStackDomainName, g as PRE_DELETE_SNAPSHOT_TYPES, gn as derivePartitionAndUrlSuffix, gt as DiffCalculator, h as ATOMIC_FINAL_SNAPSHOT_TYPES, hn as canonicalizeRegion, ht as applyRoleArnIfSet, i as DeploymentEventsReader, in as resolveStateBucketWithDefaultAndSource, it as requireConfigArray, j as gray, jn as LocalMigrateError, jt as loadPublishableAssetManifest, k as bold, kn as DeployCancelledError, kt as buildAssetRedirectMap, l as replayRollback, ln as CFN_TEMPLATE_URL_LIMIT, lt as scrubResourceRecord, m as computeImplicitDeleteEdges, mn as PARTITION_TABLE, mt as s3BucketWebsiteUrl, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as resolveSkipPrefix, nt as readConfigString, o as planFailedOps, on as stateBucketExistenceConfirmed, ot as requireConfigString, p as IMPLICIT_DELETE_DEPENDENCIES, pn as expectedOwnerParam, pt as s3BucketRegionalDomainName, q as getAccountInfo, qn as withErrorHandling, qt as AssetManifestLoader, r as DeployEngine, rn as resolveStateBucketWithDefault, rt as replayWarn, s as planRollback, sn as warnDeprecatedNoPrefixCliFlag, st as TEMPLATE_SOURCED_READBACK_RULES, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as resolveCaptureObservedState, tt as configStringRefusal, u as UNSPECIFIED_SKIP_REASON, un as MIGRATE_TMP_PREFIX, ut as s3BucketArn, v as ccRoutedFinalSnapshotError, vn as processStackMessages, vt as describeTypeWithThrottleRetry, w as extractDeploymentEventError, wn as setAwsClients, wt as rebuildClientForBucketRegion, x as refusesFinalSnapshot, xn as AwsClients, xt as TemplateParser, y as createPreDeleteFinalSnapshot, yt as withRetry, z as findActionableSilentDrops, zn as ResourceUpdateNotSupportedError, zt as validateAssetBucketName } from "./deploy-engine-BZ4SAIK7.js";
3
3
  import { a as getLiveRenderer, c as PATTERN_B_RESOURCE_TYPES, d as generateResourceNameWithFallback, h as withStackName, i as runStackBuffered, m as withSkipPrefix, n as getLogger, o as PATTERN_B_NAME_OPTIONS, s as PATTERN_B_NAME_PROPERTIES, u as generateResourceName } from "./logger-zRrlbaQt.js";
4
- import { t as ASGProvider } from "./asg-provider-DzaowTd_.js";
4
+ import { t as ASGProvider } from "./asg-provider-r0-peaiL.js";
5
5
  import { AsyncLocalStorage } from "node:async_hooks";
6
6
  import { createHash, randomBytes, randomUUID } from "node:crypto";
7
7
  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, 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";
@@ -38659,6 +38659,56 @@ const MFA_FACTOR_SMS = "SMS_MFA";
38659
38659
  const MFA_FACTOR_SOFTWARE_TOKEN = "SOFTWARE_TOKEN_MFA";
38660
38660
  const MFA_FACTOR_EMAIL_OTP = "EMAIL_OTP";
38661
38661
  /**
38662
+ * Read `EnabledMfas` as the pair (recognized list, "the template asked for a
38663
+ * factor at all").
38664
+ *
38665
+ * The second half exists because `Array.isArray` is not the same question as
38666
+ * "did the user declare a factor". A hand-written YAML scalar
38667
+ * (`EnabledMfas: SOFTWARE_TOKEN_MFA`) or an intrinsic that resolves to a String
38668
+ * parameter is a factor DECLARATION that happens to be mis-shaped. Treating it
38669
+ * as absence lets the MfaConfiguration default resolve to `OFF`, which AWS
38670
+ * ACCEPTS — so the pool ships with MFA disabled and the declared factor
38671
+ * dropped, silently. Treating it as intent keeps the default at `OPTIONAL`
38672
+ * instead, which AWS refuses loudly — unless the template pinned
38673
+ * `MfaConfiguration: OFF`, or another factor is enabled. The warning in
38674
+ * `buildMfaConfigRequest` reports which of those three actually happened.
38675
+ * Same reasoning as the unrecognized-spelling case there; this is that hole
38676
+ * reached through the SHAPE instead of the spelling.
38677
+ */
38678
+ function readEnabledMfas(properties) {
38679
+ const raw = properties["EnabledMfas"];
38680
+ if (Array.isArray(raw)) {
38681
+ const factors = raw;
38682
+ return {
38683
+ factors,
38684
+ declaresFactor: factors.length > 0,
38685
+ malformed: false
38686
+ };
38687
+ }
38688
+ const malformed = raw !== void 0 && raw !== null && raw !== "";
38689
+ return {
38690
+ factors: void 0,
38691
+ declaresFactor: malformed,
38692
+ malformed
38693
+ };
38694
+ }
38695
+ /**
38696
+ * True when any MFA-config-API-routed property is present, i.e. a
38697
+ * `SetUserPoolMfaConfig` call will run post-create. When true, `create()` must
38698
+ * NOT forward `MfaConfiguration` to `CreateUserPool`: AWS rejects
38699
+ * `CreateUserPool` with `MfaConfiguration: ON/OPTIONAL` unless the pool already
38700
+ * has SMS configured (+ phone_number auto-verification) OR software-token MFA
38701
+ * enabled — but software-token / email-OTP MFA can only be enabled via the
38702
+ * post-create `SetUserPoolMfaConfig` call, not on `CreateUserPool`. So the
38703
+ * correct sequence is: `CreateUserPool` WITHOUT `MfaConfiguration` (defaults
38704
+ * OFF) -> `SetUserPoolMfaConfig` sets `MfaConfiguration` + the factor blocks
38705
+ * together (the factor satisfies the MFA requirement, no SMS needed). This
38706
+ * mirrors how CloudFormation/CDK sequence the two calls.
38707
+ */
38708
+ function hasMfaConfigProps(properties) {
38709
+ return readEnabledMfas(properties).declaresFactor || !!properties["EmailAuthenticationMessage"] || !!properties["EmailAuthenticationSubject"] || !!properties["WebAuthnRelyingPartyID"] || !!properties["WebAuthnUserVerification"];
38710
+ }
38711
+ /**
38662
38712
  * Build the `SetUserPoolMfaConfig` request from the CFn-level MFA properties,
38663
38713
  * or return `undefined` when none of the MFA-config-API-routed properties are
38664
38714
  * present (so the caller skips the extra control-plane call entirely).
@@ -38674,37 +38724,21 @@ const MFA_FACTOR_EMAIL_OTP = "EMAIL_OTP";
38674
38724
  * omitted `MfaConfiguration` defaults to OFF on the wire — which resets the
38675
38725
  * pool to MFA-disabled and makes AWS reject (or silently drop) the per-factor
38676
38726
  * sub-blocks we are trying to enable. Use the template's `MfaConfiguration`
38677
- * when present; default to `OPTIONAL` when factors are present but the template
38678
- * omitted it (factors are meaningless under OFF, and OPTIONAL enables them
38679
- * without forcing MFA on every user).
38727
+ * when present; when the template omitted it, default by whether this call
38728
+ * enables an MFA FACTOR — `OPTIONAL` if it does, `OFF` (CloudFormation's own
38729
+ * default) if it does not. The body comment on that decision explains why both
38730
+ * halves of the factor test are load-bearing.
38680
38731
  */
38681
- /**
38682
- * True when any MFA-config-API-routed property is present, i.e. a
38683
- * `SetUserPoolMfaConfig` call will run post-create. When true, `create()` must
38684
- * NOT forward `MfaConfiguration` to `CreateUserPool`: AWS rejects
38685
- * `CreateUserPool` with `MfaConfiguration: ON/OPTIONAL` unless the pool already
38686
- * has SMS configured (+ phone_number auto-verification) OR software-token MFA
38687
- * enabled — but software-token / email-OTP MFA can only be enabled via the
38688
- * post-create `SetUserPoolMfaConfig` call, not on `CreateUserPool`. So the
38689
- * correct sequence is: `CreateUserPool` WITHOUT `MfaConfiguration` (defaults
38690
- * OFF) -> `SetUserPoolMfaConfig` sets `MfaConfiguration` + the factor blocks
38691
- * together (the factor satisfies the MFA requirement, no SMS needed). This
38692
- * mirrors how CloudFormation/CDK sequence the two calls.
38693
- */
38694
- function hasMfaConfigProps(properties) {
38695
- const enabledMfas = Array.isArray(properties["EnabledMfas"]) ? properties["EnabledMfas"] : void 0;
38696
- return enabledMfas !== void 0 && enabledMfas.length > 0 || !!properties["EmailAuthenticationMessage"] || !!properties["EmailAuthenticationSubject"] || !!properties["WebAuthnRelyingPartyID"] || !!properties["WebAuthnUserVerification"];
38697
- }
38698
- function buildMfaConfigRequest(physicalId, properties) {
38699
- const enabledMfas = Array.isArray(properties["EnabledMfas"]) ? properties["EnabledMfas"] : void 0;
38732
+ function buildMfaConfigRequest(physicalId, properties, logger) {
38733
+ const { factors: enabledMfas, declaresFactor, malformed: enabledMfasMalformed } = readEnabledMfas(properties);
38700
38734
  const emailMessage = properties["EmailAuthenticationMessage"] || void 0;
38701
38735
  const emailSubject = properties["EmailAuthenticationSubject"] || void 0;
38702
38736
  const webAuthnRpId = properties["WebAuthnRelyingPartyID"] || void 0;
38703
38737
  const webAuthnUserVerification = properties["WebAuthnUserVerification"] || void 0;
38704
38738
  if (!hasMfaConfigProps(properties)) return void 0;
38705
38739
  const request = { UserPoolId: physicalId };
38706
- request.MfaConfiguration = properties["MfaConfiguration"] ?? "OPTIONAL";
38707
38740
  const factors = new Set(enabledMfas ?? []);
38741
+ const unrecognizedFactors = [...factors].filter((factor) => factor !== MFA_FACTOR_SMS && factor !== MFA_FACTOR_SOFTWARE_TOKEN && factor !== MFA_FACTOR_EMAIL_OTP);
38708
38742
  if (factors.has(MFA_FACTOR_SOFTWARE_TOKEN)) request.SoftwareTokenMfaConfiguration = { Enabled: true };
38709
38743
  if (factors.has(MFA_FACTOR_SMS)) request.SmsMfaConfiguration = { ...properties["SmsConfiguration"] ? { SmsConfiguration: properties["SmsConfiguration"] } : {} };
38710
38744
  if (factors.has(MFA_FACTOR_EMAIL_OTP) || emailMessage !== void 0 || emailSubject !== void 0) request.EmailMfaConfiguration = {
@@ -38715,6 +38749,15 @@ function buildMfaConfigRequest(physicalId, properties) {
38715
38749
  ...webAuthnRpId !== void 0 ? { RelyingPartyId: webAuthnRpId } : {},
38716
38750
  ...webAuthnUserVerification !== void 0 ? { UserVerification: webAuthnUserVerification } : {}
38717
38751
  };
38752
+ const enablesMfaFactor = declaresFactor || request.EmailMfaConfiguration !== void 0;
38753
+ request.MfaConfiguration = properties["MfaConfiguration"] ?? (enablesMfaFactor ? "OPTIONAL" : "OFF");
38754
+ const dropped = unrecognizedFactors.map((f) => JSON.stringify(f) ?? String(f));
38755
+ if (enabledMfasMalformed) dropped.push(`${JSON.stringify(properties["EnabledMfas"])} (not a list)`);
38756
+ if (dropped.length > 0) {
38757
+ const anyFactorBlock = request.SmsMfaConfiguration !== void 0 || request.SoftwareTokenMfaConfiguration !== void 0 || request.EmailMfaConfiguration !== void 0;
38758
+ const consequence = request.MfaConfiguration === "OFF" ? `MfaConfiguration is OFF, so this pool deploys with MFA DISABLED` : anyFactorBlock ? `MfaConfiguration is ${request.MfaConfiguration} and another factor block IS sent, so these entries are silently ignored rather than failing the call on their own` : `MfaConfiguration is ${request.MfaConfiguration} with no factor enabled, so AWS rejects this call rather than deploying the pool with MFA disabled`;
38759
+ logger?.warn(`UserPool ${physicalId}: EnabledMfas entries ${dropped.join(", ")} do not map to an MFA factor block (known: ${MFA_FACTOR_SMS}, ${MFA_FACTOR_SOFTWARE_TOKEN}, ${MFA_FACTOR_EMAIL_OTP}); no factor is enabled from them. ${consequence}.`);
38760
+ }
38718
38761
  return request;
38719
38762
  }
38720
38763
  /**
@@ -38852,7 +38895,7 @@ var CognitoUserPoolProvider = class {
38852
38895
  * (mirrors DynamoDBTableProvider.retryOnTransientControlPlane).
38853
38896
  */
38854
38897
  async applyMfaConfig(physicalId, properties) {
38855
- const request = buildMfaConfigRequest(physicalId, properties);
38898
+ const request = buildMfaConfigRequest(physicalId, properties, this.logger);
38856
38899
  if (!request) return;
38857
38900
  await this.retryOnTransientControlPlane(() => this.getClient().send(new SetUserPoolMfaConfigCommand(request)), `SetUserPoolMfaConfig(${physicalId})`);
38858
38901
  }
@@ -80107,7 +80150,7 @@ function createMigrateCommand() {
80107
80150
  */
80108
80151
  function buildProgram() {
80109
80152
  const program = new Command();
80110
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.283.28");
80153
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.283.29");
80111
80154
  program.hook("preAction", (_thisCommand, actionCommand) => {
80112
80155
  const { profile } = actionCommand.optsWithGlobals();
80113
80156
  if (profile !== void 0) process.env["AWS_PROFILE"] = profile;