@cdkd/cli 0.0.1 → 0.324.0

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.
Files changed (35) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +179 -2
  3. package/dist/asg-provider-D8-GEE_f.js +1277 -0
  4. package/dist/asg-provider-D8-GEE_f.js.map +1 -0
  5. package/dist/aws-client-defaults-BLXFsfMa.js +275 -0
  6. package/dist/aws-client-defaults-BLXFsfMa.js.map +1 -0
  7. package/dist/aws-clients-DWpHZk2l.js +440 -0
  8. package/dist/aws-clients-DWpHZk2l.js.map +1 -0
  9. package/dist/aws-failure-text-DiHodi76.js +1158 -0
  10. package/dist/aws-failure-text-DiHodi76.js.map +1 -0
  11. package/dist/cli.d.ts +1 -0
  12. package/dist/cli.js +135 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/created-resource-sink-CmrPwGge.js +2343 -0
  15. package/dist/created-resource-sink-CmrPwGge.js.map +1 -0
  16. package/dist/db-instance-modify-retry-DCLA_p9I.js +43 -0
  17. package/dist/db-instance-modify-retry-DCLA_p9I.js.map +1 -0
  18. package/dist/deploy-engine-B32kQ3SO.js +55858 -0
  19. package/dist/deploy-engine-B32kQ3SO.js.map +1 -0
  20. package/dist/iam-role-provider-D3th06lJ.js +698 -0
  21. package/dist/iam-role-provider-D3th06lJ.js.map +1 -0
  22. package/dist/index.d.ts +1630 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +7 -0
  25. package/dist/neptune-provider-CN7ptfAK.js +1470 -0
  26. package/dist/neptune-provider-CN7ptfAK.js.map +1 -0
  27. package/dist/program-CcdJAeR0.js +31554 -0
  28. package/dist/program-CcdJAeR0.js.map +1 -0
  29. package/dist/provider-classes-CZnJcera.js +55542 -0
  30. package/dist/provider-classes-CZnJcera.js.map +1 -0
  31. package/dist/rds-provider-YcTAhlgr.js +1749 -0
  32. package/dist/rds-provider-YcTAhlgr.js.map +1 -0
  33. package/dist/version-h1THYe6R.js +11 -0
  34. package/dist/version-h1THYe6R.js.map +1 -0
  35. package/package.json +139 -3
@@ -0,0 +1,1630 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { S3Client } from "@aws-sdk/client-s3";
3
+ import { CloudControlClient } from "@aws-sdk/client-cloudcontrol";
4
+ import { IAMClient } from "@aws-sdk/client-iam";
5
+ import { SQSClient } from "@aws-sdk/client-sqs";
6
+ import { SNSClient } from "@aws-sdk/client-sns";
7
+ import { LambdaClient } from "@aws-sdk/client-lambda";
8
+ import { STSClient } from "@aws-sdk/client-sts";
9
+ import { EC2Client } from "@aws-sdk/client-ec2";
10
+ import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
11
+ import { CloudFormationClient } from "@aws-sdk/client-cloudformation";
12
+ import { APIGatewayClient } from "@aws-sdk/client-api-gateway";
13
+ import { EventBridgeClient } from "@aws-sdk/client-eventbridge";
14
+ import { SecretsManagerClient } from "@aws-sdk/client-secrets-manager";
15
+ import { SSMClient } from "@aws-sdk/client-ssm";
16
+ import { CloudFrontClient } from "@aws-sdk/client-cloudfront";
17
+ import { CloudWatchClient } from "@aws-sdk/client-cloudwatch";
18
+ import { CloudWatchLogsClient } from "@aws-sdk/client-cloudwatch-logs";
19
+ import { BedrockAgentCoreControlClient } from "@aws-sdk/client-bedrock-agentcore-control";
20
+ import { RedshiftClient } from "@aws-sdk/client-redshift";
21
+ import { ElastiCacheClient } from "@aws-sdk/client-elasticache";
22
+ import { ACMClient } from "@aws-sdk/client-acm";
23
+ import { Route53Client } from "@aws-sdk/client-route-53";
24
+ import { LambdaMicrovmsClient } from "@aws-sdk/client-lambda-microvms";
25
+ import { LambdaWebClient } from "@aws-sdk/client-lambda-web";
26
+ import { LambdaCoreClient } from "@aws-sdk/client-lambda-core";
27
+ import { defaultProvider } from "@aws-sdk/credential-provider-node";
28
+ import { NodeHttpHandler } from "@smithy/node-http-handler";
29
+ import { ECRClient } from "@aws-sdk/client-ecr";
30
+ import graphlib from "graphlib";
31
+ type StateSchemaVersion = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15;
32
+ interface StateImportEntry {
33
+ sourceStack: string;
34
+ sourceRegion: string;
35
+ exportName: string;
36
+ }
37
+ interface StateOutputReadEntry {
38
+ sourceStack: string;
39
+ sourceRegion: string;
40
+ outputName: string;
41
+ }
42
+ interface StackState {
43
+ version: StateSchemaVersion;
44
+ stackName: string;
45
+ region?: string;
46
+ resources: Record<string, ResourceState>;
47
+ outputs: Record<string, unknown>;
48
+ imports?: StateImportEntry[];
49
+ outputReads?: StateOutputReadEntry[];
50
+ exportNames?: string[];
51
+ skippedOutputs?: Record<string, string>;
52
+ parentStack?: string;
53
+ parentLogicalId?: string;
54
+ parentRegion?: string;
55
+ orphans?: StackOrphanRecord[];
56
+ supersededResources?: SupersededResourceRecord[];
57
+ conditionVerdicts?: Record<string, RecordedConditionVerdict>;
58
+ outputReferenceProvenance?: Record<string, Record<string, ReferenceProvenance>>;
59
+ stackInstanceId?: string;
60
+ retiredNameGenerations?: Record<string, number>;
61
+ pendingMovesOut?: PendingMoveOut[];
62
+ terminationProtection?: true;
63
+ lastModified: number;
64
+ }
65
+ interface ReferenceProvenance {
66
+ region?: string;
67
+ versions?: string[];
68
+ readVersions?: string[];
69
+ }
70
+ interface PendingMoveOut {
71
+ from: string;
72
+ toStack: string;
73
+ toRegion: string;
74
+ to: string;
75
+ startedAt: number;
76
+ }
77
+ interface RecordedConditionVerdict {
78
+ verdict: boolean;
79
+ fingerprint: string;
80
+ }
81
+ interface StackOrphanRecord {
82
+ logicalId: string;
83
+ orphanedAt: number;
84
+ state: ResourceState;
85
+ }
86
+ interface SupersededResourceRecord {
87
+ logicalId: string;
88
+ supersededAt: number;
89
+ state: ResourceState;
90
+ updateReplacePolicy?: 'Delete' | 'Retain' | 'Snapshot' | 'RetainExceptOnCreate';
91
+ finalSnapshotIdentifier?: string;
92
+ forceDataDelete?: true;
93
+ skipFinalSnapshot?: true;
94
+ }
95
+ interface ResourceState {
96
+ physicalId: string;
97
+ nameGeneration?: number;
98
+ nameGenerationHigh?: number;
99
+ unsettledProperties?: string[];
100
+ unsettledItems?: Record<string, string[]>;
101
+ resourceType: string;
102
+ properties: Record<string, unknown>;
103
+ observedProperties?: Record<string, unknown>;
104
+ attributes?: Record<string, unknown>;
105
+ dependencies?: string[];
106
+ metadata?: Record<string, unknown>;
107
+ constructPath?: string;
108
+ deletionPolicy?: 'Delete' | 'Retain' | 'Snapshot' | 'RetainExceptOnCreate' | undefined;
109
+ updateReplacePolicy?: 'Delete' | 'Retain' | 'Snapshot' | 'RetainExceptOnCreate' | undefined;
110
+ provisionedBy?: 'sdk' | 'cc-api' | undefined;
111
+ observedBaselineRefused?: true | undefined;
112
+ observedBaselineRefusalReason?: 'unverifiable-parameter' | 'incomplete-resolution' | undefined;
113
+ noEchoLeaves?: (string | number)[][] | undefined;
114
+ noEchoExactEchoLeaves?: string[][] | undefined;
115
+ secretNamedAttributes?: string[] | undefined;
116
+ noEchoAttributeNames?: string[] | undefined;
117
+ referenceProvenance?: Record<string, ReferenceProvenance> | undefined;
118
+ acceptedCreateOnlyDrops?: string[] | undefined;
119
+ maskedPropertyFingerprints?: Record<string, string> | undefined;
120
+ maskedPropertyInputFingerprints?: Record<string, string> | undefined;
121
+ }
122
+ interface LockInfo {
123
+ owner: string;
124
+ timestamp: number;
125
+ expiresAt: number;
126
+ operation?: string;
127
+ }
128
+ type ChangeType = 'CREATE' | 'UPDATE' | 'DELETE' | 'NO_CHANGE';
129
+ interface ResourceChange {
130
+ logicalId: string;
131
+ changeType: ChangeType;
132
+ resourceType: string;
133
+ currentProperties?: Record<string, unknown>;
134
+ desiredProperties?: Record<string, unknown>;
135
+ propertyChanges?: PropertyChange[];
136
+ attributeChanges?: AttributeChange[];
137
+ }
138
+ interface AttributeChange {
139
+ attribute: 'DeletionPolicy' | 'UpdateReplacePolicy';
140
+ oldValue: string | undefined;
141
+ newValue: string | undefined;
142
+ }
143
+ interface PropertyChange {
144
+ path: string;
145
+ oldValue: unknown;
146
+ newValue: unknown;
147
+ requiresReplacement: boolean;
148
+ replacementPropagated?: boolean;
149
+ inPlacePropagated?: boolean;
150
+ noEchoPromoted?: true;
151
+ maskedExpressionChanged?: true;
152
+ unsettled?: true;
153
+ readProvenancePromoted?: true;
154
+ }
155
+ type RecordedSecretValues = Map<string, string>;
156
+ type SecretMasker = (text: string) => string;
157
+ type NoEchoCoordinate = readonly (string | number)[];
158
+ interface CdkdConfig {
159
+ app: string;
160
+ stateBucket: string;
161
+ statePrefix?: string;
162
+ stack?: string;
163
+ region?: string;
164
+ profile?: string;
165
+ concurrency?: number;
166
+ verbose?: boolean;
167
+ dryRun?: boolean;
168
+ output?: string;
169
+ }
170
+ interface DeployOptions {
171
+ stackName: string;
172
+ template: string;
173
+ stateBackend: StateBackendConfig;
174
+ concurrency: number;
175
+ dryRun: boolean;
176
+ skipAssets?: boolean;
177
+ }
178
+ interface StateBackendConfig {
179
+ bucket: string;
180
+ prefix: string;
181
+ }
182
+ type LogLevel = 'debug' | 'info' | 'warn' | 'error';
183
+ interface Logger {
184
+ debug(message: string, ...args: unknown[]): void;
185
+ info(message: string, ...args: unknown[]): void;
186
+ warn(message: string, ...args: unknown[]): void;
187
+ error(message: string, ...args: unknown[]): void;
188
+ }
189
+ type ForeignHolding = {
190
+ kind: 'held';
191
+ by: string;
192
+ } | {
193
+ kind: 'unreadable';
194
+ what: string;
195
+ retryable?: true;
196
+ } | undefined;
197
+ type DeploymentRunCommand = 'deploy' | 'destroy' | 'rollback';
198
+ type DeploymentRunResult = 'SUCCEEDED' | 'FAILED';
199
+ type DeploymentResourceOperation = 'CREATE' | 'UPDATE' | 'DELETE';
200
+ type DeploymentEventType = 'RUN_STARTED' | 'RUN_FINISHED' | 'RESOURCE_STARTED' | 'RESOURCE_SUCCEEDED' | 'RESOURCE_FAILED' | 'RESOURCE_RETAINED' | 'RESOURCE_SKIPPED' | 'RESOURCE_GUARD_INDETERMINATE' | 'ROLLBACK_STARTED' | 'ROLLBACK_RESOURCE_SUCCEEDED' | 'ROLLBACK_RESOURCE_FAILED' | 'ROLLBACK_RESOURCE_SKIPPED' | 'ROLLBACK_FINISHED';
201
+ interface DeploymentEventError {
202
+ name: string;
203
+ message: string;
204
+ awsErrorCode?: string;
205
+ requestId?: string;
206
+ ownLines?: boolean;
207
+ }
208
+ interface DeploymentEvent {
209
+ timestamp: string;
210
+ eventType: DeploymentEventType;
211
+ stackName: string;
212
+ command?: DeploymentRunCommand;
213
+ region?: string;
214
+ cdkdVersion?: string;
215
+ result?: DeploymentRunResult;
216
+ operation?: DeploymentResourceOperation;
217
+ logicalId?: string;
218
+ resourceType?: string;
219
+ physicalId?: string;
220
+ provisionedBy?: 'sdk' | 'cc-api';
221
+ durationMs?: number;
222
+ counts?: {
223
+ created: number;
224
+ updated: number;
225
+ deleted: number;
226
+ failed?: number;
227
+ skipped?: number;
228
+ };
229
+ guard?: string;
230
+ reason?: string;
231
+ error?: DeploymentEventError;
232
+ }
233
+ interface DeploymentEventRecorder {
234
+ record(event: Omit<DeploymentEvent, 'timestamp'>): void;
235
+ readonly runId?: string;
236
+ }
237
+ export declare class CdkdError extends Error {
238
+ readonly code: string;
239
+ readonly cause: Error | undefined;
240
+ constructor(message: string, code: string, cause?: Error);
241
+ }
242
+ export declare class StateError extends CdkdError {
243
+ constructor(message: string, cause?: Error);
244
+ }
245
+ export declare class LockError extends CdkdError {
246
+ constructor(message: string, cause?: Error);
247
+ }
248
+ export declare class SynthesisError extends CdkdError {
249
+ constructor(message: string, cause?: Error);
250
+ }
251
+ export declare class AssetError extends CdkdError {
252
+ constructor(message: string, cause?: Error);
253
+ }
254
+ export declare class ProvisioningError extends CdkdError {
255
+ readonly resourceType: string;
256
+ readonly logicalId: string;
257
+ readonly physicalId: string | undefined;
258
+ constructor(message: string, resourceType: string, logicalId: string, physicalId?: string, cause?: Error);
259
+ }
260
+ export declare class DependencyError extends CdkdError {
261
+ constructor(message: string, cause?: Error);
262
+ }
263
+ export declare class ConfigError extends CdkdError {
264
+ constructor(message: string, cause?: Error);
265
+ }
266
+ export declare function isCdkdError(error: unknown): error is CdkdError;
267
+ export declare function formatError(error: unknown): string;
268
+ interface NormalizeAwsErrorContext {
269
+ bucket?: string;
270
+ operation?: string;
271
+ }
272
+ export declare function normalizeAwsError(err: unknown, context?: NormalizeAwsErrorContext): Error;
273
+ type AbandonedRequestOutcome = {
274
+ status: 'succeeded';
275
+ identifier: string;
276
+ } | {
277
+ status: 'failed';
278
+ remnant?: string;
279
+ } | {
280
+ status: 'cancelled';
281
+ remnant?: string;
282
+ } | {
283
+ status: 'not-found';
284
+ } | {
285
+ status: 'unresolved';
286
+ error: unknown;
287
+ };
288
+ export declare class CloudControlProvider implements ResourceProvider {
289
+ private cloudControlClient;
290
+ private readonly baseLogger;
291
+ private get logger();
292
+ private patchGenerator;
293
+ private readonly warnedUnresolvableSchemaTypes;
294
+ private readonly protectionFlips;
295
+ private readonly MAX_WAIT_TIME_MS;
296
+ private readonly INITIAL_POLL_INTERVAL_MS;
297
+ private readonly MAX_POLL_INTERVAL_MS;
298
+ private readonly POLL_TRANSIENT_GRACE_MS;
299
+ private readonly PROTECTION_FLIP_TRANSIENT_GRACE_MS;
300
+ private readonly sdkDeleteDelegates;
301
+ private readonly asgDeleteDelegates;
302
+ constructor();
303
+ create(logicalId: string, resourceType: string, properties: Record<string, unknown>, context?: CreateContext): Promise<ResourceCreateResult>;
304
+ private createInIdLogScope;
305
+ private cleanupFailedCreateRemnant;
306
+ update(logicalId: string, physicalId: string, resourceType: string, properties: Record<string, unknown>, previousProperties: Record<string, unknown>, context?: UpdateContext): Promise<ResourceUpdateResult>;
307
+ private updateInIdLogScope;
308
+ private reimportApiGatewayV2;
309
+ private readApiGatewayV2DefinitionObject;
310
+ delete(logicalId: string, physicalId: string, resourceType: string, properties?: Record<string, unknown>, context?: DeleteContext): Promise<void | ResourceDeleteResult>;
311
+ private deleteInIdLogScope;
312
+ private deleteThroughCloudControl;
313
+ private sdkDeleteDelegateInCcRegion;
314
+ private ec2ClientInCcRegion;
315
+ private assertRecordedRegionAgainstClient;
316
+ private confirmDeleteTargetIdentity;
317
+ private disableCcProtection;
318
+ private observeThenDisableCcProtection;
319
+ private reEnableCcProtection;
320
+ private warnGuardLeftOff;
321
+ private ccClientRegion;
322
+ getResourceState(resourceType: string, physicalId: string): Promise<Record<string, unknown> | null>;
323
+ private waitForOperation;
324
+ resumeCreatedResource(logicalId: string, resourceType: string, identifier: string, properties: Record<string, unknown>, context?: CreateContext): Promise<ResourceCreateResult>;
325
+ resumeAbandonedRequest(requestToken: string, logicalId: string, resourceType: string): Promise<AbandonedRequestOutcome>;
326
+ private abandonWait;
327
+ buildResumeCommand(requestToken: string): Promise<string>;
328
+ private parseResourceModel;
329
+ private accountInfoForSynthesizedArn;
330
+ private enrichResourceAttributes;
331
+ private mergeSparseModelReadback;
332
+ private isSparseAttributeMap;
333
+ private readCcResourceModel;
334
+ private handleError;
335
+ private sleep;
336
+ static isSupportedResourceType(resourceType: string): boolean;
337
+ readCurrentState(physicalId: string, _logicalId: string, resourceType: string, _properties?: Record<string, unknown>): Promise<Record<string, unknown> | ResourceNotFound | undefined>;
338
+ private maskDeployedNonAttributeKeys;
339
+ import(input: ResourceImportInput): Promise<ResourceImportResult | null>;
340
+ private maskUncertifiedModelValues;
341
+ }
342
+ type ProvisionedBy = 'sdk' | 'cc-api';
343
+ interface ProviderRoutingDecision {
344
+ provider: ResourceProvider;
345
+ provisionedBy: ProvisionedBy;
346
+ ccRouteReason?: {
347
+ properties: string[];
348
+ };
349
+ sdkMigration?: true;
350
+ }
351
+ interface GetProviderForInput {
352
+ resourceType: string;
353
+ properties?: Record<string, unknown> | undefined;
354
+ provisionedBy?: ProvisionedBy | undefined;
355
+ previousProperties?: Record<string, unknown> | undefined;
356
+ quiet?: boolean;
357
+ forceCcApi?: boolean | undefined;
358
+ }
359
+ interface AutoRouteHit {
360
+ logicalId: string;
361
+ resourceType: string;
362
+ properties: string[];
363
+ }
364
+ export declare class ProviderRegistry {
365
+ private logger;
366
+ private providers;
367
+ private cloudControlProvider;
368
+ private customResourceProvider;
369
+ private skipResourceTypes;
370
+ private allowedUnsupportedTypes;
371
+ private allowedUnsupportedProperties;
372
+ constructor();
373
+ allowUnsupportedTypes(resourceTypes: Iterable<string>): void;
374
+ allowUnsupportedProperties(entries: Iterable<string>): void;
375
+ getAllowedUnsupportedProperties(): ReadonlySet<string>;
376
+ setCustomResourceResponseBucket(bucket: string): void;
377
+ skipResourceType(resourceType: string): void;
378
+ register(resourceType: string, provider: ResourceProvider): void;
379
+ unregister(resourceType: string): void;
380
+ getProviderFor(input: GetProviderForInput): ProviderRoutingDecision;
381
+ ccRouteUnavailableReason(resourceType: string): string | undefined;
382
+ private buildUnroutableSdkUnwiredMessage;
383
+ getProvider(resourceType: string): ResourceProvider;
384
+ shouldSkipResource(resourceType: string): boolean;
385
+ hasProvider(resourceType: string): boolean;
386
+ getCloudControlProvider(): CloudControlProvider;
387
+ getRegisteredTypes(): string[];
388
+ getProviderType(resourceType: string): 'sdk' | 'cloud-control' | null;
389
+ validateResourceTypes(resourceTypes: Set<string>): void;
390
+ validateResourceProperties(resources: Iterable<{
391
+ logicalId: string;
392
+ resourceType: string;
393
+ properties: Record<string, unknown> | undefined;
394
+ provisionedBy?: 'sdk' | 'cc-api' | undefined;
395
+ previousProperties?: Record<string, unknown> | undefined;
396
+ }>): void;
397
+ validateMutuallyExclusiveProperties(resources: Iterable<{
398
+ logicalId: string;
399
+ resourceType: string;
400
+ properties: Record<string, unknown> | undefined;
401
+ }>): void;
402
+ validateNestedRequiredProperties(resources: Iterable<{
403
+ logicalId: string;
404
+ resourceType: string;
405
+ properties: Record<string, unknown> | undefined;
406
+ }>): void;
407
+ validateCustomResourceSecureReferences(resources: Iterable<{
408
+ logicalId: string;
409
+ resourceType: string;
410
+ properties: Record<string, unknown> | undefined;
411
+ }>): void;
412
+ reportSdkUnwiredDecisions(resources: Iterable<{
413
+ logicalId: string;
414
+ resourceType: string;
415
+ properties: Record<string, unknown> | undefined;
416
+ provisionedBy?: 'sdk' | 'cc-api' | undefined;
417
+ previousProperties?: Record<string, unknown> | undefined;
418
+ }>): void;
419
+ private reportUnrecognizedProperties;
420
+ findAutoRouteHits(resources: Iterable<{
421
+ logicalId: string;
422
+ resourceType: string;
423
+ properties: Record<string, unknown> | undefined;
424
+ previousProperties?: Record<string, unknown> | undefined;
425
+ }>): AutoRouteHit[];
426
+ }
427
+ interface PreDeleteSnapshotClients {
428
+ ec2: EC2Client;
429
+ redshift: RedshiftClient;
430
+ elastiCache: ElastiCacheClient;
431
+ }
432
+ interface CompletedOperation {
433
+ logicalId: string;
434
+ changeType: 'CREATE' | 'UPDATE' | 'DELETE';
435
+ resourceType: string;
436
+ provisionedBy?: 'sdk' | 'cc-api' | undefined;
437
+ previousState?: ResourceState | undefined;
438
+ physicalId?: string | undefined;
439
+ properties?: Record<string, unknown> | undefined;
440
+ oldResourceRetained?: boolean | undefined;
441
+ oldResourceMaySurvive?: 'kept' | 'unconfirmed' | undefined;
442
+ previousResourceType?: string | undefined;
443
+ wasReplaced?: boolean | undefined;
444
+ oldDeletedBeforeCreate?: boolean | undefined;
445
+ nameGeneration?: number | undefined;
446
+ }
447
+ interface PendingCloudControlRequest {
448
+ requestToken: string;
449
+ abandonedAt: number;
450
+ }
451
+ interface FailedOperation {
452
+ logicalId: string;
453
+ changeType: 'CREATE' | 'UPDATE' | 'DELETE';
454
+ resourceType: string;
455
+ provisionedBy?: 'sdk' | 'cc-api' | undefined;
456
+ previousState?: ResourceState | undefined;
457
+ physicalId?: string | undefined;
458
+ physicalIdRecoveredFromError?: boolean | undefined;
459
+ createdResourceIdentity?: string | undefined;
460
+ deletionPolicy?: 'Delete' | 'Retain' | 'Snapshot' | 'RetainExceptOnCreate' | undefined;
461
+ pendingCloudControlRequest?: PendingCloudControlRequest | undefined;
462
+ createdIdentifierUnique?: boolean | undefined;
463
+ replacedPhysicalId?: string | undefined;
464
+ replacedResourceType?: string | undefined;
465
+ replacedResourceDeleted?: boolean | undefined;
466
+ replacementOrphaned?: 'create-first' | 'delete-first' | undefined;
467
+ oldDeletedBeforeCreate?: boolean | undefined;
468
+ nameGeneration?: number | undefined;
469
+ attemptedProperties?: Record<string, unknown> | undefined;
470
+ }
471
+ type MaskerFn = (text: string) => string;
472
+ interface ProducerRegionEvidence {
473
+ readonly regions: readonly string[];
474
+ readonly complete: boolean;
475
+ }
476
+ type RollbackSegmentReason = 'no-rollback-failure' | 'interrupted' | 'auto-rollback-started' | 'auto-rollback-clean' | 'nested-pending-parent';
477
+ interface RollbackJournalSegment {
478
+ runId?: string;
479
+ timestamp: number;
480
+ reason: RollbackSegmentReason;
481
+ initialDeploy: boolean;
482
+ roleArn?: string;
483
+ cdkdVersion?: string;
484
+ skipPrefix?: boolean;
485
+ operations: CompletedOperation[];
486
+ failedOperations?: FailedOperation[];
487
+ previousOutputs?: {
488
+ outputs: Record<string, unknown>;
489
+ exportNames?: string[];
490
+ };
491
+ previousCrossStackReads?: Pick<StackState, 'imports' | 'outputReads'>;
492
+ supersededLogicalIds?: string[];
493
+ importedResources?: ImportedResourceMark[];
494
+ }
495
+ interface ImportedResourceMark {
496
+ logicalId: string;
497
+ physicalId: string;
498
+ resourceType: string;
499
+ }
500
+ interface RollbackJournal {
501
+ journalVersion: number;
502
+ stackName: string;
503
+ region: string;
504
+ segments: RollbackJournalSegment[];
505
+ }
506
+ interface SentCreateToken {
507
+ base: string;
508
+ token: string;
509
+ firstSentAt: number;
510
+ failedAt?: number;
511
+ }
512
+ interface CreateTokenLedgerDoc {
513
+ ledgerVersion: number;
514
+ nonce: string;
515
+ sent: Record<string, SentCreateToken>;
516
+ stateRecorded?: boolean;
517
+ abandonedAt?: number;
518
+ }
519
+ interface LockManagerOptions {
520
+ ttlMinutes?: number;
521
+ disableRenewal?: boolean;
522
+ deferReleasePurge?: boolean;
523
+ }
524
+ export declare class LockManager {
525
+ private logger;
526
+ private wrapS3Failure;
527
+ private s3Client;
528
+ private config;
529
+ private readonly ttlMs;
530
+ private readonly renewalIntervalMs;
531
+ private readonly renewalDisabled;
532
+ private readonly heldLocks;
533
+ private readonly abandonedLocks;
534
+ private clientResolved;
535
+ private resolveInFlight;
536
+ private readonly deferReleasePurge;
537
+ private readonly deferredPurges;
538
+ constructor(s3Client: S3Client, config: StateBackendConfig, options?: LockManagerOptions);
539
+ settleDeferredPurges(): Promise<void>;
540
+ private ownerParam;
541
+ private ensureClientForBucket;
542
+ private getLockKey;
543
+ private getDefaultOwner;
544
+ private isLockExpired;
545
+ private formatDuration;
546
+ acquireLock(stackName: string, region: string, owner?: string, operation?: string): Promise<boolean>;
547
+ private putLockObject;
548
+ getLockInfo(stackName: string, region: string | undefined): Promise<LockInfo | null>;
549
+ private getLockRecord;
550
+ isLocked(stackName: string, region: string | undefined): Promise<boolean>;
551
+ releaseLock(stackName: string, region: string): Promise<void>;
552
+ private doReleaseLock;
553
+ private stillOursByBody;
554
+ private sameLockIdentity;
555
+ abandonedRunEndedBy(stackName: string, region: string | undefined): number | undefined;
556
+ forceReleaseLock(stackName: string, region: string | undefined, beforeDelete?: (horizon: number) => Promise<void>): Promise<number | undefined>;
557
+ private deleteLock;
558
+ private purgeLockVersions;
559
+ private trackHeldLock;
560
+ private startRenewal;
561
+ private stopRenewal;
562
+ private renewLock;
563
+ private doRenewLock;
564
+ private adoptOwnWrite;
565
+ private isForeignLockError;
566
+ private isGoneError;
567
+ private isConditionUnsupportedError;
568
+ private isNotOursError;
569
+ acquireLockWithRetry(stackName: string, region: string, owner?: string, operation?: string, maxRetries?: number, retryDelay?: number): Promise<void>;
570
+ }
571
+ interface LockRecoveryContext {
572
+ profile?: string | undefined;
573
+ stateBucket?: string | undefined;
574
+ statePrefix?: string | undefined;
575
+ }
576
+ type RecordUnderPrefix = 'absent' | 'empty' | 'holder';
577
+ interface EarlierStateRecord {
578
+ resources: Record<string, unknown>;
579
+ writtenAt?: number;
580
+ }
581
+ interface NoncurrentVersionPurgeOptions {
582
+ requestFields?: {
583
+ ExpectedBucketOwner?: string;
584
+ };
585
+ listPrefix?: string;
586
+ logger?: {
587
+ warn: (m: string) => void;
588
+ debug?: (m: string) => void;
589
+ };
590
+ objectDescription?: string;
591
+ }
592
+ interface PrefixPurgeResult {
593
+ deletedBodies: number;
594
+ complete: boolean;
595
+ }
596
+ interface StackStateRef {
597
+ stackName: string;
598
+ region?: string;
599
+ }
600
+ interface S3ClientOptions {
601
+ region?: string;
602
+ profile?: string;
603
+ credentials?: {
604
+ accessKeyId: string;
605
+ secretAccessKey: string;
606
+ sessionToken?: string;
607
+ };
608
+ }
609
+ interface VerifyBucketExistsOptions {
610
+ existenceAlreadyProbed?: boolean;
611
+ }
612
+ export declare class S3StateBackend {
613
+ private logger;
614
+ private s3Client;
615
+ private config;
616
+ private clientOpts;
617
+ private clientResolved;
618
+ private scanClient;
619
+ private resolveInFlight;
620
+ private readonly journalsReadAbsent;
621
+ private readonly journalTouches;
622
+ private readonly pendingStackInstanceSiblings;
623
+ private readonly siblingPrefetches;
624
+ private readonly siblingVersionsWritten;
625
+ constructor(s3Client: S3Client, config: StateBackendConfig, clientOpts?: S3ClientOptions);
626
+ destroyClient(): void;
627
+ private clientForScan;
628
+ get prefix(): string;
629
+ private getStateKey;
630
+ private getLegacyStateKey;
631
+ private getRollbackJournalKey;
632
+ private rollbackJournalKey;
633
+ rollbackJournalReadAbsent(stackName: string, region: string): boolean;
634
+ warmConnections(stackName: string, region: string, count: number): Promise<void>;
635
+ purgeRollbackJournalVersions(stackName: string, region: string): Promise<void>;
636
+ private getStackInstanceKey;
637
+ private getCreateTokenLedgerKey;
638
+ private ensureClientForBucket;
639
+ private ownerParam;
640
+ verifyBucketExists(options?: VerifyBucketExistsOptions): Promise<void>;
641
+ stateExists(stackName: string, region: string): Promise<boolean>;
642
+ stateExistsOwnedBy(stackName: string, region: string, regionlessOwner: string): Promise<boolean>;
643
+ rawObjectExists(key: string): Promise<boolean>;
644
+ getState(stackName: string, region: string): Promise<{
645
+ state: StackState;
646
+ etag: string;
647
+ migrationPending?: boolean;
648
+ divergentBodyRegion?: unknown;
649
+ } | null>;
650
+ saveState(stackName: string, region: string, state: StackState, options?: {
651
+ expectedEtag?: string;
652
+ migrateLegacy?: boolean;
653
+ deferCleanup?: (cleanup: Promise<void>) => void;
654
+ }): Promise<string>;
655
+ deleteState(stackName: string, region: string): Promise<void>;
656
+ purgeDeletedStateHistory(stackName: string, region: string): Promise<void>;
657
+ private otherRegionHistoryState;
658
+ deleteLegacyState(stackName: string): Promise<void>;
659
+ listStacks(): Promise<StackStateRef[]>;
660
+ listTopLevelPrefixes(): Promise<string[]>;
661
+ recordUnderPrefix(prefix: string, stackName: string, region: string): Promise<RecordUnderPrefix>;
662
+ putRawObject(key: string, body: string, contentType?: string): Promise<void>;
663
+ earlierStateResources(stackName: string, region: string, max?: number): Promise<EarlierStateRecord[]>;
664
+ private getRetainedKey;
665
+ loadRetainedResources(stackName: string, region: string): Promise<RetainedResource[]>;
666
+ loadRetainedRecord(stackName: string, region: string): Promise<RetainedResource[] | null>;
667
+ ensureRetainedTombstone(stackName: string, region: string): Promise<void>;
668
+ saveRetainedResources(stackName: string, region: string, entries: readonly RetainedResource[]): Promise<void>;
669
+ refactorMarkerKey(): string;
670
+ getRefactorMarker(): Promise<{
671
+ body: unknown;
672
+ etag: string;
673
+ } | null>;
674
+ saveRefactorMarker(body: {
675
+ moves: unknown[];
676
+ }, etag: string | null): Promise<'saved' | 'conflict'>;
677
+ registryMarkerKey(stackName: string, region: string): string;
678
+ getRegistryMarker(stackName: string, region: string): Promise<{
679
+ prefix: string;
680
+ etag: string;
681
+ } | null>;
682
+ claimRegistryMarker(stackName: string, region: string, ifMatch?: string): Promise<'claimed' | 'conflict'>;
683
+ releaseRegistryMarker(stackName: string, region: string, known?: {
684
+ prefix: string;
685
+ etag: string;
686
+ } | null): Promise<'released' | 'absent' | 'elsewhere'>;
687
+ lockUnderPrefix(prefix: string, stackName: string, region: string): Promise<boolean>;
688
+ getRawObject(key: string): Promise<string | null>;
689
+ listRawKeys(keyPrefix: string): Promise<string[]>;
690
+ listRawObjects(keyPrefix: string): Promise<Array<{
691
+ key: string;
692
+ lastModified: Date;
693
+ size: number;
694
+ }>>;
695
+ deleteRawObjects(keys: string[]): Promise<void>;
696
+ purgeNoncurrentVersions(keys: string[], options?: Omit<NoncurrentVersionPurgeOptions, 'requestFields' | 'logger'>): Promise<void>;
697
+ purgeNoncurrentVersionsUnderPrefix(keyPrefix: string, options?: Pick<NoncurrentVersionPurgeOptions, 'objectDescription'>): Promise<PrefixPurgeResult>;
698
+ loadCreateTokenLedger(stackName: string, region: string): Promise<CreateTokenLedgerDoc | null>;
699
+ saveCreateTokenLedger(stackName: string, region: string, ledger: CreateTokenLedgerDoc): Promise<void>;
700
+ rotateCreateTokenNonce(stackName: string, region: string, logicalIds: readonly string[]): Promise<void>;
701
+ deleteCreateTokenLedger(stackName: string, region: string): Promise<void>;
702
+ stackInstanceIdForFirstWrite(stackName: string, region: string, options: {
703
+ writeAhead: boolean;
704
+ }): Promise<string>;
705
+ private stackInstanceSiblingError;
706
+ prefetchStackInstanceSibling(stackName: string, region: string): void;
707
+ private readSiblingId;
708
+ readStackInstanceSibling(stackName: string, region: string): Promise<string | undefined>;
709
+ deleteStackInstanceSibling(stackName: string, region: string): Promise<void>;
710
+ private dropStackInstanceSiblingAfterSave;
711
+ loadRollbackJournal(stackName: string, region: string): Promise<RollbackJournal | null>;
712
+ appendRollbackJournalSegment(stackName: string, region: string, segment: RollbackJournalSegment): Promise<void>;
713
+ setRollbackJournalFailedOperations(stackName: string, region: string, remaining: FailedOperation[]): Promise<void>;
714
+ dropRollbackJournalFailedOperations(stackName: string, region: string, drop: (op: FailedOperation, segment: RollbackJournalSegment) => boolean): Promise<number>;
715
+ rewriteRollbackJournalFailedOperations(stackName: string, region: string, rewrite: (op: FailedOperation, segment: RollbackJournalSegment) => FailedOperation | null): Promise<number>;
716
+ reduceRollbackJournalToFailedOperations(stackName: string, region: string, keep: (op: FailedOperation, segment: RollbackJournalSegment) => boolean, supersededLogicalIds?: readonly string[], demote?: (op: FailedOperation, segment: RollbackJournalSegment) => boolean): Promise<number>;
717
+ popRollbackJournalSegment(stackName: string, region: string): Promise<number>;
718
+ markRollbackJournalSuperseded(stackName: string, region: string, logicalIds: readonly string[]): Promise<void>;
719
+ markRollbackJournalImported(stackName: string, region: string, marks: readonly ImportedResourceMark[]): Promise<string[]>;
720
+ dropRollbackJournalSegments(stackName: string, region: string, drop: (segment: RollbackJournalSegment) => boolean): Promise<number>;
721
+ deleteRollbackJournal(stackName: string, region: string): Promise<boolean>;
722
+ private headObject;
723
+ private wrapS3Failure;
724
+ private displayName;
725
+ private stackRef;
726
+ private adoptKeyRegion;
727
+ private probeLegacyState;
728
+ private readLegacyRegion;
729
+ private legacyBelongsToRegion;
730
+ private tryGetLegacy;
731
+ private parseStateBody;
732
+ }
733
+ interface RetainedResource {
734
+ logicalId: string;
735
+ resourceType: string;
736
+ physicalId: string;
737
+ keptAt?: number;
738
+ }
739
+ interface ExportIndexEntry {
740
+ value: unknown;
741
+ producerStack: string;
742
+ producerRegion: string;
743
+ }
744
+ interface ExportIndexStoreOptions {
745
+ maxWriteRetries?: number;
746
+ initialBackoffMs?: number;
747
+ maxBackoffMs?: number;
748
+ profile?: string | undefined;
749
+ }
750
+ declare class ExportIndexStore {
751
+ private logger;
752
+ private s3Client;
753
+ private bucket;
754
+ private prefix;
755
+ private region;
756
+ private stateBackend;
757
+ private loadState;
758
+ private opts;
759
+ private profile;
760
+ private writeChain;
761
+ private clientResolved;
762
+ private resolveInFlight;
763
+ constructor(s3Client: S3Client, bucket: string, prefix: string, region: string, stateBackend: S3StateBackend, opts?: ExportIndexStoreOptions);
764
+ private indexKey;
765
+ private ownerParam;
766
+ private ensureClientForBucket;
767
+ lookup(exportName: string): Promise<ExportIndexEntry | undefined>;
768
+ prefetch(): Promise<void>;
769
+ updateForStack(stackName: string, producerRegion: string, outputs: Record<string, unknown>): Promise<void>;
770
+ readPersistedEntries(): Promise<ReadonlyMap<string, ExportIndexEntry> | undefined>;
771
+ patchEntry(exportName: string, entry: ExportIndexEntry, opts?: {
772
+ requireOwner?: {
773
+ producerStack: string;
774
+ producerRegion: string;
775
+ };
776
+ }): Promise<boolean>;
777
+ removeStack(stackName: string, producerRegion: string): Promise<void>;
778
+ removeStackIfPresent(stackName: string, producerRegion: string): Promise<void>;
779
+ private enqueueWrite;
780
+ rebuild(): Promise<void>;
781
+ private ensureLoaded;
782
+ private loadPersisted;
783
+ private doLoad;
784
+ private readIndexRaw;
785
+ private writeIndex;
786
+ private rebuildFromStateBackend;
787
+ private applyStackUpdate;
788
+ private warnOnForeignOverwrite;
789
+ private applyPatch;
790
+ private applyRemoveStack;
791
+ private persist;
792
+ private runWithRetry;
793
+ private isNoSuchKey;
794
+ private isPreconditionFailed;
795
+ }
796
+ interface AwsClientConfig {
797
+ region?: string;
798
+ profile?: string;
799
+ credentials?: {
800
+ accessKeyId: string;
801
+ secretAccessKey: string;
802
+ sessionToken?: string;
803
+ };
804
+ }
805
+ export declare class AwsClients {
806
+ private s3Client?;
807
+ private cloudControlClient?;
808
+ private iamClient?;
809
+ private sqsClient?;
810
+ private snsClient?;
811
+ private lambdaClient?;
812
+ private stsClient?;
813
+ private ec2Client?;
814
+ private ec2SingleSendClient?;
815
+ private dynamoDBClient?;
816
+ private cloudFormationClient?;
817
+ private apiGatewayClient?;
818
+ private eventBridgeClient?;
819
+ private secretsManagerClient?;
820
+ private ssmClient?;
821
+ private cloudFrontClient?;
822
+ private cloudWatchClient?;
823
+ private cloudWatchLogsClient?;
824
+ private bedrockAgentCoreControlClient?;
825
+ private redshiftClient?;
826
+ private elastiCacheClient?;
827
+ private acmClient?;
828
+ private route53Client?;
829
+ private lambdaMicrovmsClient?;
830
+ private lambdaWebClient?;
831
+ private lambdaCoreClient?;
832
+ private config;
833
+ constructor(config?: AwsClientConfig);
834
+ private get clientOptions();
835
+ get configuredRegion(): string | undefined;
836
+ get credentialConfig(): Omit<AwsClientConfig, 'region'>;
837
+ withRegion(region: string): AwsClients;
838
+ getS3Client(): S3Client;
839
+ getCloudControlClient(): CloudControlClient;
840
+ getIAMClient(): IAMClient;
841
+ get s3(): S3Client;
842
+ get cloudControl(): CloudControlClient;
843
+ get iam(): IAMClient;
844
+ getSQSClient(): SQSClient;
845
+ get sqs(): SQSClient;
846
+ getSNSClient(): SNSClient;
847
+ get sns(): SNSClient;
848
+ getLambdaClient(): LambdaClient;
849
+ get lambda(): LambdaClient;
850
+ getEC2Client(): EC2Client;
851
+ get ec2(): EC2Client;
852
+ getEC2SingleSendClient(): EC2Client;
853
+ get ec2SingleSend(): EC2Client;
854
+ getSTSClient(): STSClient;
855
+ get sts(): STSClient;
856
+ getDynamoDBClient(): DynamoDBClient;
857
+ get dynamoDB(): DynamoDBClient;
858
+ getCloudFormationClient(): CloudFormationClient;
859
+ get cloudFormation(): CloudFormationClient;
860
+ getAPIGatewayClient(): APIGatewayClient;
861
+ get apiGateway(): APIGatewayClient;
862
+ getEventBridgeClient(): EventBridgeClient;
863
+ get eventBridge(): EventBridgeClient;
864
+ getSecretsManagerClient(): SecretsManagerClient;
865
+ get secretsManager(): SecretsManagerClient;
866
+ getSSMClient(): SSMClient;
867
+ get ssm(): SSMClient;
868
+ getCloudFrontClient(): CloudFrontClient;
869
+ get cloudFront(): CloudFrontClient;
870
+ getACMClient(): ACMClient;
871
+ get acm(): ACMClient;
872
+ getRoute53Client(): Route53Client;
873
+ get route53(): Route53Client;
874
+ getLambdaMicrovmsClient(): LambdaMicrovmsClient;
875
+ get lambdaMicrovms(): LambdaMicrovmsClient;
876
+ getLambdaWebClient(): LambdaWebClient;
877
+ get lambdaWeb(): LambdaWebClient;
878
+ getLambdaCoreClient(): LambdaCoreClient;
879
+ get lambdaCore(): LambdaCoreClient;
880
+ getCloudWatchClient(): CloudWatchClient;
881
+ get cloudWatch(): CloudWatchClient;
882
+ getCloudWatchLogsClient(): CloudWatchLogsClient;
883
+ get cloudWatchLogs(): CloudWatchLogsClient;
884
+ getBedrockAgentCoreControlClient(): BedrockAgentCoreControlClient;
885
+ get bedrockAgentCoreControl(): BedrockAgentCoreControlClient;
886
+ getRedshiftClient(): RedshiftClient;
887
+ get redshift(): RedshiftClient;
888
+ getElastiCacheClient(): ElastiCacheClient;
889
+ get elastiCache(): ElastiCacheClient;
890
+ destroy(): void;
891
+ }
892
+ export declare function getAwsClients(config?: AwsClientConfig): AwsClients;
893
+ export declare function setAwsClients(clients: AwsClients): void;
894
+ export declare function resetAwsClients(): void;
895
+ interface ProducerArtifact {
896
+ readonly stackName: string;
897
+ readonly account?: string | undefined;
898
+ readonly region?: string | undefined;
899
+ readonly template: CloudFormationTemplate;
900
+ readonly lookupRoleArn?: string | undefined;
901
+ }
902
+ type ProducerLookup = (stackName: string, account: string, region: string) => ProducerArtifact | undefined;
903
+ interface ResolvedSecretPrincipals<K extends string> {
904
+ lists: Record<K, string[]>;
905
+ mask: SecretMasker;
906
+ maskError: <T>(error: T) => T;
907
+ resolvedNames: Record<K, ReadonlySet<string>>;
908
+ }
909
+ interface SecretPrincipalRetryMemo {
910
+ resolved?: ResolvedSecretPrincipals<string>;
911
+ readonly detached: Set<string>;
912
+ }
913
+ type ParameterInput = {
914
+ kind: 'value';
915
+ value: unknown;
916
+ } | {
917
+ kind: 'secret';
918
+ } | {
919
+ kind: 'unknown';
920
+ };
921
+ interface MaskedInputSources {
922
+ template: CloudFormationTemplate;
923
+ parameterInput(name: string): ParameterInput;
924
+ conditions?: Readonly<Record<string, boolean>> | undefined;
925
+ resolve(node: unknown): Promise<{
926
+ value: unknown;
927
+ secrets?: RecordedSecretValues;
928
+ keepAsWritten?: boolean;
929
+ }>;
930
+ childTemplate?: ChildTemplateLoader | undefined;
931
+ }
932
+ interface NestedTemplate {
933
+ template: CloudFormationTemplate;
934
+ identity: string;
935
+ childTemplate: ChildTemplateLoader;
936
+ }
937
+ type ChildTemplateLoader = (logicalId: string) => NestedTemplate | undefined;
938
+ type PassedParameterClass = 'clean' | 'secret' | 'unknown';
939
+ interface NoEchoDeleteValues {
940
+ readonly leaves: readonly {
941
+ readonly coordinate: NoEchoCoordinate;
942
+ readonly value: unknown;
943
+ }[];
944
+ readonly maskSecrets: (text: string) => string;
945
+ }
946
+ interface TemplateNoEchoReresolverOptions {
947
+ template: CloudFormationTemplate;
948
+ stackName: string;
949
+ region: string;
950
+ nestedTemplates?: Readonly<Record<string, string>> | undefined;
951
+ parameters?: Record<string, string> | undefined;
952
+ inheritedNoEchoParameters?: ReadonlySet<string> | undefined;
953
+ maskedParameters?: ReadonlySet<string> | undefined;
954
+ inheritedSecrets?: RecordedSecretValues | undefined;
955
+ passedClasses?: ReadonlyMap<string, PassedParameterClass> | undefined;
956
+ printingSeed?: RecordedSecretValues | undefined;
957
+ }
958
+ declare class TemplateNoEchoReresolver {
959
+ private readonly logger;
960
+ private readonly resolver;
961
+ private parametersPromise;
962
+ private printingNoEchoPromise;
963
+ private readonly noEchoParameters;
964
+ private readonly options;
965
+ constructor(options: TemplateNoEchoReresolverOptions);
966
+ static usable(template: CloudFormationTemplate | undefined): template is CloudFormationTemplate;
967
+ private newBag;
968
+ private boundParameters;
969
+ private inputSources;
970
+ private noEchoNeedles;
971
+ printingNoEchoValues(): Promise<RecordedSecretValues | undefined>;
972
+ private printingNeedles;
973
+ recordedNoEchoValuesFor(logicalId: string, record: ResourceState | undefined): RecordedSecretValues;
974
+ valuesFor(logicalId: string, record: ResourceState): Promise<NoEchoDeleteValues | undefined>;
975
+ forNestedChild(logicalId: string, row: {
976
+ properties: Record<string, unknown> | undefined;
977
+ noEchoLeaves: readonly NoEchoCoordinate[] | undefined;
978
+ values: NoEchoDeleteValues | undefined;
979
+ }, childStackName: string, load: (templatePath: string) => {
980
+ template: CloudFormationTemplate;
981
+ nestedTemplates: Record<string, string>;
982
+ }, extractParameters: (properties: Record<string, unknown>) => Record<string, string>): Promise<TemplateNoEchoReresolver | undefined>;
983
+ }
984
+ interface DeleteContext extends SecretMaskingContext {
985
+ expectedRegion?: string | undefined;
986
+ removeProtection?: boolean;
987
+ forceDataDelete?: boolean;
988
+ inlinePolicyClaimed?: InlinePolicyClaimed | undefined;
989
+ finalSnapshotIdentifier?: string;
990
+ deletionPolicy?: string | undefined;
991
+ resolveSecretDerivedPrincipals?: {
992
+ importedProducerRegions: readonly string[];
993
+ producerRegionsIncomplete?: boolean;
994
+ retryMemo?: SecretPrincipalRetryMemo;
995
+ recordedRegions?: ReadonlyMap<string, string>;
996
+ } | undefined;
997
+ skipFinalSnapshot?: boolean | undefined;
998
+ recordedAttributes?: Readonly<Record<string, unknown>> | undefined;
999
+ recordedNoEchoLeaves?: readonly (readonly (string | number)[])[] | undefined;
1000
+ noEchoDeleteValues?: NoEchoDeleteValues | undefined;
1001
+ noEchoReresolver?: TemplateNoEchoReresolver | undefined;
1002
+ stackDestroy?: boolean | undefined;
1003
+ failedCreateOrphan?: boolean | undefined;
1004
+ resolveAttemptedProperties?: (() => Promise<Record<string, unknown> | undefined>) | undefined;
1005
+ writtenThisRun?: ReadonlyArray<{
1006
+ resourceType?: unknown;
1007
+ physicalId?: unknown;
1008
+ attributes?: unknown;
1009
+ properties?: unknown;
1010
+ }> | undefined;
1011
+ }
1012
+ interface CloudFormationTemplate {
1013
+ AWSTemplateFormatVersion?: string;
1014
+ Description?: string;
1015
+ Parameters?: Record<string, TemplateParameter>;
1016
+ Resources: Record<string, TemplateResource>;
1017
+ Outputs?: Record<string, TemplateOutput>;
1018
+ Conditions?: Record<string, unknown>;
1019
+ Mappings?: Record<string, unknown>;
1020
+ Transform?: unknown;
1021
+ Rules?: Record<string, unknown>;
1022
+ }
1023
+ interface TemplateParameter {
1024
+ Type: string;
1025
+ Default?: unknown;
1026
+ Description?: string;
1027
+ AllowedValues?: unknown[];
1028
+ AllowedPattern?: string;
1029
+ ConstraintDescription?: string;
1030
+ NoEcho?: boolean | string;
1031
+ }
1032
+ interface TemplateResource {
1033
+ Type: string;
1034
+ Properties?: Record<string, unknown>;
1035
+ DependsOn?: string | readonly string[];
1036
+ Condition?: string;
1037
+ Metadata?: Record<string, unknown>;
1038
+ CreationPolicy?: Record<string, unknown>;
1039
+ UpdatePolicy?: Record<string, unknown>;
1040
+ DeletionPolicy?: 'Delete' | 'Retain' | 'Snapshot';
1041
+ UpdateReplacePolicy?: 'Delete' | 'Retain' | 'Snapshot';
1042
+ }
1043
+ interface TemplateOutput {
1044
+ Value: unknown;
1045
+ Description?: string;
1046
+ Condition?: string;
1047
+ Export?: {
1048
+ Name: string;
1049
+ };
1050
+ }
1051
+ interface EffectivePropertiesResult {
1052
+ effectiveProperties?: Record<string, unknown> | undefined;
1053
+ }
1054
+ interface NoEchoAttributesResult {
1055
+ noEchoAttributes?: boolean;
1056
+ noEchoAttributeNames?: readonly string[];
1057
+ secretNamedAttributeNames?: readonly string[];
1058
+ }
1059
+ interface ResourceCreateResult extends EffectivePropertiesResult, NoEchoAttributesResult {
1060
+ physicalId: string;
1061
+ attributes?: Record<string, unknown>;
1062
+ }
1063
+ interface ResourceUpdateResultBase extends EffectivePropertiesResult, NoEchoAttributesResult {
1064
+ physicalId: string;
1065
+ wasReplaced: boolean;
1066
+ attributes?: Record<string, unknown>;
1067
+ sentNothing?: true;
1068
+ }
1069
+ type ResourceUpdateOutcome = {
1070
+ readonly outcome?: 'updated';
1071
+ readonly reason?: never;
1072
+ } | {
1073
+ readonly outcome: 'partial';
1074
+ readonly reason: string;
1075
+ readonly oldResourceSurvivor?: 'kept' | 'unconfirmed';
1076
+ };
1077
+ type ResourceUpdateResult = ResourceUpdateResultBase & ResourceUpdateOutcome;
1078
+ interface IndeterminateGuard {
1079
+ readonly guard: string;
1080
+ readonly reason: string;
1081
+ }
1082
+ type ResourceDeleteResult = {
1083
+ readonly outcome: 'deleted';
1084
+ readonly leftInPlace?: string;
1085
+ readonly indeterminateGuards?: readonly IndeterminateGuard[];
1086
+ } | {
1087
+ readonly indeterminateGuards?: readonly IndeterminateGuard[];
1088
+ readonly outcome: 'skipped';
1089
+ readonly reason: string;
1090
+ };
1091
+ interface ResourceImportInput {
1092
+ logicalId: string;
1093
+ resourceType: string;
1094
+ stackName: string;
1095
+ region: string;
1096
+ properties: Record<string, unknown>;
1097
+ knownPhysicalId?: string;
1098
+ }
1099
+ interface ResourceImportResult {
1100
+ physicalId: string;
1101
+ attributes?: Record<string, unknown>;
1102
+ }
1103
+ interface SecretMaskingContext {
1104
+ maskSecrets?: SecretMasker;
1105
+ }
1106
+ interface UpdateContext extends SecretMaskingContext {
1107
+ desiredFromAwsReadback?: boolean;
1108
+ declaredEmptyProperties?: ReadonlySet<string> | undefined;
1109
+ declaredTrueProperties?: ReadonlySet<string> | undefined;
1110
+ replayingState?: boolean;
1111
+ expectedRegion?: string | undefined;
1112
+ recordedAttributes?: Readonly<Record<string, unknown>> | undefined;
1113
+ inlinePolicyClaimed?: InlinePolicyClaimed | undefined;
1114
+ removedProperties?: ReadonlySet<string> | undefined;
1115
+ changedProperties?: ReadonlySet<string> | undefined;
1116
+ markUnsettled?: ((propertyName: string) => void) | undefined;
1117
+ markAttempted?: ((path: string, items: readonly string[]) => void) | undefined;
1118
+ unsettledItems?: ReadonlyMap<string, ReadonlySet<string>> | undefined;
1119
+ unsettledProperties?: ReadonlySet<string> | undefined;
1120
+ }
1121
+ type InlinePolicyPrincipalKind = 'role' | 'group' | 'user';
1122
+ type InlinePolicyClaimed = (kind: InlinePolicyPrincipalKind, principal: string, policyName: string) => boolean;
1123
+ interface CreateContext extends SecretMaskingContext {
1124
+ replayingState?: boolean;
1125
+ }
1126
+ declare const RESOURCE_NOT_FOUND: unique symbol;
1127
+ type ResourceNotFound = typeof RESOURCE_NOT_FOUND;
1128
+ type ResourceIdentityVerdict = 'same' | 'different' | 'unknown';
1129
+ interface ReadCurrentStateContext {
1130
+ siblings?: Record<string, {
1131
+ resourceType: string;
1132
+ physicalId?: string;
1133
+ properties: Record<string, unknown>;
1134
+ attributes?: Record<string, unknown>;
1135
+ }>;
1136
+ afterOwnWrite?: boolean;
1137
+ attributes?: Readonly<Record<string, unknown>>;
1138
+ }
1139
+ interface ResourceProvider {
1140
+ handledProperties?: ReadonlyMap<string, ReadonlySet<string>>;
1141
+ unhandledByDesign?: ReadonlyMap<string, ReadonlyMap<string, string>>;
1142
+ removalDefaults?: ReadonlyMap<string, ReadonlyMap<string, unknown>>;
1143
+ removalHandledInUpdate?: ReadonlyMap<string, ReadonlySet<string>>;
1144
+ disableCcApiFallback?: boolean;
1145
+ disableOuterRetry?: boolean;
1146
+ waitForNameReleased?(logicalId: string, physicalId: string, resourceType: string, context: {
1147
+ isInterrupted: () => boolean;
1148
+ maskSecrets?: (text: string) => string;
1149
+ }): Promise<void>;
1150
+ getMinResourceTimeoutMs?(): number;
1151
+ preparePropertiesForFallback?(logicalId: string, resourceType: string, properties: Record<string, unknown>): Record<string, unknown>;
1152
+ create(logicalId: string, resourceType: string, properties: Record<string, unknown>, context?: CreateContext): Promise<ResourceCreateResult>;
1153
+ update(logicalId: string, physicalId: string, resourceType: string, properties: Record<string, unknown>, previousProperties: Record<string, unknown>, context?: UpdateContext): Promise<ResourceUpdateResult>;
1154
+ delete(logicalId: string, physicalId: string, resourceType: string, properties?: Record<string, unknown>, context?: DeleteContext): Promise<void | ResourceDeleteResult>;
1155
+ getAttribute?(physicalId: string, resourceType: string, attributeName: string, logicalId: string): Promise<unknown>;
1156
+ readCurrentState?(physicalId: string, logicalId: string, resourceType: string, properties?: Record<string, unknown>, context?: ReadCurrentStateContext): Promise<Record<string, unknown> | ResourceNotFound | undefined>;
1157
+ readUnsettled?(physicalId: string, logicalId: string, resourceType: string, names: ReadonlySet<string>, recordedProperties?: Record<string, unknown>, desiredProperties?: Record<string, unknown>, attemptedItems?: ReadonlyMap<string, ReadonlySet<string>>): Promise<Record<string, unknown> | ResourceNotFound | undefined>;
1158
+ canonicalizeUnsettledProperties?(resourceType: string, properties: Record<string, unknown>): Record<string, unknown>;
1159
+ unsettledInTransition?(physicalId: string, logicalId: string, resourceType: string, names: ReadonlySet<string>, recordedProperties?: Record<string, unknown>, desiredProperties?: Record<string, unknown>): Promise<ReadonlySet<string>>;
1160
+ isSameResource?(journaledPhysicalId: string, record: {
1161
+ physicalId: string;
1162
+ provisionedBy?: 'sdk' | 'cc-api' | undefined;
1163
+ }, resourceType: string, context: {
1164
+ expectedRegion: string;
1165
+ }): Promise<ResourceIdentityVerdict>;
1166
+ resourceIdentity?(physicalId: string, resourceType: string, context: {
1167
+ expectedRegion: string;
1168
+ }): Promise<string | ResourceNotFound | undefined>;
1169
+ getDriftUnknownPaths?(resourceType: string, properties?: Record<string, unknown>): string[];
1170
+ canonicalizeDesiredProperties?(resourceType: string, properties: Record<string, unknown>): Record<string, unknown>;
1171
+ getDriftUnorderedPaths?(resourceType: string): string[];
1172
+ canonicalizeDriftProperties?(resourceType: string, properties: Record<string, unknown>): Record<string, unknown>;
1173
+ canonicalizeDriftPair?(resourceType: string, baseline: Record<string, unknown>, aws: Record<string, unknown>, properties?: Record<string, unknown>): Promise<{
1174
+ baseline: Record<string, unknown>;
1175
+ aws: Record<string, unknown>;
1176
+ }>;
1177
+ getDriftAbsentMeansDefaultKeys?(resourceType: string, properties: Record<string, unknown>): readonly string[];
1178
+ getDriftSecretPathAliases?(resourceType: string, properties: Record<string, unknown>, secretPaths: ReadonlySet<string>): string[];
1179
+ import?(input: ResourceImportInput): Promise<ResourceImportResult | null>;
1180
+ generatedCreateName?(resourceType: string, logicalId: string, properties: Record<string, unknown>): string | undefined;
1181
+ lookupNames?(resourceType: string, names: readonly string[], context: {
1182
+ region: string;
1183
+ stackName: string;
1184
+ propertiesByName: ReadonlyMap<string, Record<string, unknown>>;
1185
+ }): Promise<Map<string, string>>;
1186
+ lookupNeedsResolvedProperties?(resourceType: string, properties: Record<string, unknown>): boolean;
1187
+ holderCreatedAt?(resourceType: string, physicalId: string): Promise<number | undefined>;
1188
+ }
1189
+ export declare class ConsoleLogger implements Logger {
1190
+ private level;
1191
+ private useColors;
1192
+ constructor(level?: LogLevel, useColors?: boolean);
1193
+ private shouldLog;
1194
+ private formatMessage;
1195
+ private emit;
1196
+ debug(message: string, ...args: unknown[]): void;
1197
+ info(message: string, ...args: unknown[]): void;
1198
+ warn(message: string, ...args: unknown[]): void;
1199
+ error(message: string, ...args: unknown[]): void;
1200
+ setLevel(level: LogLevel): void;
1201
+ getLevel(): LogLevel;
1202
+ child(prefix: string): ChildLogger;
1203
+ }
1204
+ declare class ChildLogger extends ConsoleLogger {
1205
+ private readonly prefix;
1206
+ constructor(prefix: string, useColors: boolean);
1207
+ private syncLevel;
1208
+ debug(message: string, ...args: unknown[]): void;
1209
+ info(message: string, ...args: unknown[]): void;
1210
+ warn(message: string, ...args: unknown[]): void;
1211
+ error(message: string, ...args: unknown[]): void;
1212
+ }
1213
+ export declare function getLogger(): ConsoleLogger;
1214
+ export declare function setLogger(logger: ConsoleLogger): void;
1215
+ interface ResolveBucketRegionOptions {
1216
+ profile?: string;
1217
+ credentials?: {
1218
+ accessKeyId: string;
1219
+ secretAccessKey: string;
1220
+ sessionToken?: string;
1221
+ };
1222
+ fallbackRegion?: string;
1223
+ region?: string;
1224
+ }
1225
+ export declare function resolveBucketRegion(bucketName: string, opts?: ResolveBucketRegionOptions): Promise<string>;
1226
+ export declare function clearBucketRegionCache(): void;
1227
+ interface AssemblyManifest {
1228
+ version: string;
1229
+ artifacts?: Record<string, ArtifactManifest>;
1230
+ missing?: MissingContext[];
1231
+ runtime?: RuntimeInfo;
1232
+ }
1233
+ interface ArtifactManifest {
1234
+ type: ArtifactType;
1235
+ environment?: string;
1236
+ displayName?: string;
1237
+ properties?: Record<string, unknown>;
1238
+ dependencies?: string[];
1239
+ metadata?: Record<string, MetadataEntry[]>;
1240
+ additionalMetadataFile?: string;
1241
+ }
1242
+ type ArtifactType = 'aws:cloudformation:stack' | 'cdk:asset-manifest' | 'cdk:tree' | 'cdk:cloud-assembly' | 'cdk:feature-flag-report';
1243
+ interface MissingContext {
1244
+ key: string;
1245
+ provider: string;
1246
+ props: ContextQueryProperties;
1247
+ }
1248
+ interface ContextQueryProperties {
1249
+ account: string;
1250
+ region: string;
1251
+ lookupRoleArn?: string;
1252
+ [key: string]: unknown;
1253
+ }
1254
+ interface MetadataEntry {
1255
+ type: string;
1256
+ data?: unknown;
1257
+ trace?: string[];
1258
+ }
1259
+ interface RuntimeInfo {
1260
+ libraries?: Record<string, string>;
1261
+ }
1262
+ type StackMessageLevel = 'error' | 'warning' | 'info';
1263
+ interface StackMessage {
1264
+ level: StackMessageLevel;
1265
+ path: string;
1266
+ message: string;
1267
+ }
1268
+ interface StackInfo {
1269
+ stackName: string;
1270
+ displayName: string;
1271
+ stagePath?: string | undefined;
1272
+ artifactId: string;
1273
+ template: CloudFormationTemplate;
1274
+ assetManifestPath?: string | undefined;
1275
+ assetOutdir?: string | undefined;
1276
+ dependencyNames: string[];
1277
+ region?: string | undefined;
1278
+ account?: string | undefined;
1279
+ terminationProtection?: boolean | undefined;
1280
+ nestedTemplates?: Record<string, string> | undefined;
1281
+ messages?: StackMessage[];
1282
+ lookupRoleArn?: string | undefined;
1283
+ }
1284
+ interface AssemblyContents {
1285
+ stacks: StackInfo[];
1286
+ }
1287
+ export declare class AssemblyReader {
1288
+ private logger;
1289
+ readManifest(assemblyDir: string): AssemblyManifest;
1290
+ readAssembly(assemblyDir: string, manifest: AssemblyManifest, assetOutdir?: string): AssemblyContents;
1291
+ getAllStacks(assemblyDir: string, manifest: AssemblyManifest, assetOutdir?: string): StackInfo[];
1292
+ private collectStacks;
1293
+ getStack(assemblyDir: string, manifest: AssemblyManifest, stackName: string): StackInfo;
1294
+ getTemplate(assemblyDir: string, manifest: AssemblyManifest, stackName: string): CloudFormationTemplate;
1295
+ private buildAssetManifestMap;
1296
+ private extractStackInfo;
1297
+ hasAssets(stackInfo: StackInfo): boolean;
1298
+ }
1299
+ interface CfnUploadS3ClientOpts {
1300
+ profile?: string;
1301
+ credentials?: {
1302
+ accessKeyId: string;
1303
+ secretAccessKey: string;
1304
+ sessionToken?: string;
1305
+ };
1306
+ }
1307
+ interface ExpandMacrosOptions {
1308
+ region: string;
1309
+ stateBucket?: string;
1310
+ cfnClient?: CloudFormationClient;
1311
+ s3ClientOpts?: CfnUploadS3ClientOpts;
1312
+ waiterMaxWaitSeconds?: number;
1313
+ }
1314
+ interface SynthesisOptions {
1315
+ app: string;
1316
+ output?: string;
1317
+ profile?: string;
1318
+ region?: string;
1319
+ context?: Record<string, string>;
1320
+ stateBucket?: string;
1321
+ macroExpandS3ClientOpts?: ExpandMacrosOptions['s3ClientOpts'];
1322
+ deferMacroExpansion?: boolean;
1323
+ }
1324
+ interface SynthesisResult {
1325
+ manifest: AssemblyManifest;
1326
+ assemblyDir: string;
1327
+ stacks: StackInfo[];
1328
+ }
1329
+ export declare class Synthesizer {
1330
+ private logger;
1331
+ private appExecutor;
1332
+ private assemblyReader;
1333
+ private contextStore;
1334
+ synthesize(options: SynthesisOptions): Promise<SynthesisResult>;
1335
+ listStacks(options: SynthesisOptions): Promise<string[]>;
1336
+ expandMacrosForStacks(stacks: StackInfo[], options: SynthesisOptions, resolved?: {
1337
+ region: string | undefined;
1338
+ accountId?: string | undefined;
1339
+ }): Promise<void>;
1340
+ }
1341
+ interface AssetRedirectEntry {
1342
+ source: string;
1343
+ target: string;
1344
+ }
1345
+ interface AssetRedirectMap {
1346
+ buckets: Map<string, string>;
1347
+ repos: Map<string, string>;
1348
+ entries: AssetRedirectEntry[];
1349
+ accountId: string;
1350
+ region: string;
1351
+ partition: string;
1352
+ }
1353
+ type WorkNodeType = 'asset-build' | 'asset-publish' | 'stack';
1354
+ type NodeState = 'pending' | 'queued' | 'running' | 'completed' | 'failed' | 'skipped';
1355
+ interface WorkNode {
1356
+ id: string;
1357
+ type: WorkNodeType;
1358
+ dependencies: Set<string>;
1359
+ state: NodeState;
1360
+ data: unknown;
1361
+ }
1362
+ interface WorkGraphConcurrency {
1363
+ 'asset-build': number;
1364
+ 'asset-publish': number;
1365
+ stack: number;
1366
+ }
1367
+ declare class WorkGraph {
1368
+ private nodes;
1369
+ private logger;
1370
+ addNode(node: WorkNode): void;
1371
+ execute(concurrency: WorkGraphConcurrency, fn: (node: WorkNode) => Promise<void>): Promise<void>;
1372
+ summary(): Record<WorkNodeType, number>;
1373
+ }
1374
+ interface AssetPublisherOptions {
1375
+ profile?: string;
1376
+ region?: string;
1377
+ accountId?: string;
1378
+ assetPublishConcurrency?: number;
1379
+ imageBuildConcurrency?: number;
1380
+ redirect?: AssetRedirectMap;
1381
+ }
1382
+ export declare class AssetPublisher {
1383
+ private logger;
1384
+ private filePublisher;
1385
+ private dockerPublisher;
1386
+ addAssetsToGraph(graph: WorkGraph, manifestPath: string, options: {
1387
+ accountId: string;
1388
+ region: string;
1389
+ profile?: string;
1390
+ nodePrefix?: string;
1391
+ redirect?: AssetRedirectMap;
1392
+ assetOutdir?: string;
1393
+ }): string[];
1394
+ executeNode(node: WorkNode): Promise<void>;
1395
+ publishFromManifest(manifestPath: string, options?: AssetPublisherOptions): Promise<void>;
1396
+ hasAssets(manifestPath: string): boolean;
1397
+ }
1398
+ export declare class TemplateParser {
1399
+ private logger;
1400
+ getResourceIds(template: CloudFormationTemplate): string[];
1401
+ getResource(template: CloudFormationTemplate, logicalId: string): TemplateResource | undefined;
1402
+ extractDependencies(resource: TemplateResource): Set<string>;
1403
+ extractReferences(value: unknown): Set<string>;
1404
+ private extractRefsFromValue;
1405
+ hasProperty(resource: TemplateResource, propertyPath: string): boolean;
1406
+ getProperty(resource: TemplateResource, propertyPath: string): unknown;
1407
+ validateTemplate(template: unknown): template is CloudFormationTemplate;
1408
+ getResourcesByType(template: CloudFormationTemplate, resourceType: string): Map<string, TemplateResource>;
1409
+ countResources(template: CloudFormationTemplate): number;
1410
+ filterResourcesByCondition(template: CloudFormationTemplate, conditions: Record<string, boolean>): CloudFormationTemplate;
1411
+ }
1412
+ type GraphType = graphlib.Graph;
1413
+ interface DagBuilderOptions {
1414
+ relaxCdkVpcDefensiveDeps?: boolean;
1415
+ }
1416
+ export declare class DagBuilder {
1417
+ private logger;
1418
+ private parser;
1419
+ private options;
1420
+ constructor(options?: DagBuilderOptions);
1421
+ buildGraph(template: CloudFormationTemplate): GraphType;
1422
+ getExecutionLevels(graph: GraphType): string[][];
1423
+ private findCycles;
1424
+ getAllDependencies(graph: GraphType, logicalId: string): Set<string>;
1425
+ getAllDependents(graph: GraphType, logicalId: string): Set<string>;
1426
+ getDirectDependencies(graph: GraphType, logicalId: string): string[];
1427
+ getDirectDependents(graph: GraphType, logicalId: string): string[];
1428
+ dependsOn(graph: GraphType, resourceA: string, resourceB: string): boolean;
1429
+ private addCustomResourcePolicyEdges;
1430
+ private addLambdaVpcEdges;
1431
+ private isCustomResourceType;
1432
+ private buildRolePoliciesMap;
1433
+ private extractAttachedRoleIds;
1434
+ private extractLogicalIdFromReference;
1435
+ }
1436
+ interface ReplacementSiblings {
1437
+ readonly oldProperties: Readonly<Record<string, unknown>>;
1438
+ readonly newProperties: Readonly<Record<string, unknown>>;
1439
+ }
1440
+ interface ReadProvenanceSources {
1441
+ inherited?: ReadonlyMap<string, ReferenceProvenance>;
1442
+ crossStackOutputs?: (value: unknown) => Promise<ReadonlyArray<Record<string, ReferenceProvenance>>>;
1443
+ }
1444
+ type IntrinsicResolveFn = (value: unknown) => Promise<unknown>;
1445
+ type CanonicalizePropertiesFn = (resourceType: string, properties: Record<string, unknown>) => Record<string, unknown>;
1446
+ type NoEchoCompareFn = (input: {
1447
+ logicalId: string;
1448
+ resourceType: string;
1449
+ templateProperties: Record<string, unknown>;
1450
+ desired: Record<string, unknown>;
1451
+ current: Record<string, unknown>;
1452
+ }) => {
1453
+ desired: Record<string, unknown>;
1454
+ current: Record<string, unknown>;
1455
+ } | undefined;
1456
+ export declare class DiffCalculator {
1457
+ private logger;
1458
+ private replacementRules;
1459
+ private parser;
1460
+ conditionalReplacementVerdict(resourceType: string, propertyPath: string, oldValue: unknown, newValue: unknown, siblings?: ReplacementSiblings): boolean | undefined;
1461
+ calculateDiff(currentState: StackState, desiredTemplate: CloudFormationTemplate, resolveFn?: IntrinsicResolveFn, canonicalizeProperties?: CanonicalizePropertiesFn, allowedUnsupportedProperties?: ReadonlySet<string>, freshParameters?: ReadonlySet<string>, maskForLog?: MaskerFn, recreateTargets?: ReadonlySet<string>, maskedInputs?: {
1462
+ sources: MaskedInputSources;
1463
+ rebaselined?: Map<string, Record<string, string>>;
1464
+ }, refusalRecovery?: LockRecoveryContext, noEchoCompare?: NoEchoCompareFn, readProvenance?: ReadProvenanceSources): Promise<Map<string, ResourceChange>>;
1465
+ private promoteReadProvenanceDependents;
1466
+ private loadSyntheticCreateOnlyPaths;
1467
+ private syntheticRequiresReplacement;
1468
+ private promoteReplacementDependents;
1469
+ private promoteInPlaceAttributeDependents;
1470
+ private static extractGetAttRefs;
1471
+ private resolveBestEffort;
1472
+ private compareAttributes;
1473
+ private compareProperties;
1474
+ private maskedEditRequiresReplacement;
1475
+ private static readonly INTRINSIC_KEYS;
1476
+ private static isIntrinsic;
1477
+ private valuesEqual;
1478
+ getSummary(changes: Map<string, ResourceChange>): {
1479
+ create: number;
1480
+ update: number;
1481
+ delete: number;
1482
+ noChange: number;
1483
+ total: number;
1484
+ };
1485
+ filterByType(changes: Map<string, ResourceChange>, type: ChangeType): ResourceChange[];
1486
+ hasChanges(changes: Map<string, ResourceChange>): boolean;
1487
+ getReplacementChanges(changes: Map<string, ResourceChange>): ResourceChange[];
1488
+ }
1489
+ export declare class IAMRoleProvider implements ResourceProvider {
1490
+ private iamClient;
1491
+ private readonly createClient;
1492
+ private logger;
1493
+ private wrapMaskedError;
1494
+ handledProperties: Map<string, ReadonlySet<string>>;
1495
+ removalDefaults: Map<string, ReadonlyMap<string, unknown>>;
1496
+ removalHandledInUpdate: Map<string, ReadonlySet<string>>;
1497
+ constructor();
1498
+ create(logicalId: string, resourceType: string, properties: Record<string, unknown>, context?: CreateContext): Promise<ResourceCreateResult>;
1499
+ update(logicalId: string, physicalId: string, resourceType: string, properties: Record<string, unknown>, previousProperties: Record<string, unknown>, context?: UpdateContext): Promise<ResourceUpdateResult>;
1500
+ delete(logicalId: string, physicalId: string, resourceType: string, _properties?: Record<string, unknown>, context?: DeleteContext): Promise<void | ResourceDeleteResult>;
1501
+ private detachAllManagedPolicies;
1502
+ private deleteAllInlinePolicies;
1503
+ private removeFromAllInstanceProfiles;
1504
+ private updateManagedPolicies;
1505
+ private updateInlinePolicies;
1506
+ private updateTags;
1507
+ getAttribute(physicalId: string, _resourceType: string, attributeName: string): Promise<unknown>;
1508
+ isSameResource(journaledPhysicalId: string, record: {
1509
+ physicalId: string;
1510
+ }, resourceType: string, context: {
1511
+ expectedRegion: string;
1512
+ }): Promise<ResourceIdentityVerdict>;
1513
+ resourceIdentity(physicalId: string, resourceType: string, context: {
1514
+ expectedRegion: string;
1515
+ }): Promise<string | ResourceNotFound | undefined>;
1516
+ private readRoleIdIfExists;
1517
+ readCurrentState(physicalId: string, _logicalId: string, _resourceType: string, properties?: Record<string, unknown>, context?: ReadCurrentStateContext): Promise<Record<string, unknown> | ResourceNotFound | undefined>;
1518
+ import(input: ResourceImportInput): Promise<ResourceImportResult | null>;
1519
+ }
1520
+ interface MovedTo {
1521
+ stackName: string;
1522
+ logicalId: string;
1523
+ }
1524
+ type DestructiveImpact = 'WILL_REPLACE' | 'MAY_REPLACE' | 'WILL_DESTROY' | 'WILL_ORPHAN';
1525
+ interface DestructiveChange {
1526
+ stackName: string;
1527
+ logicalId: string;
1528
+ resourceType: string;
1529
+ constructPath?: string;
1530
+ impact: DestructiveImpact;
1531
+ movedTo?: MovedTo;
1532
+ }
1533
+ interface DeployEngineOptions {
1534
+ concurrency?: number;
1535
+ dryRun?: boolean;
1536
+ lockTimeout?: number;
1537
+ parameters?: Record<string, string>;
1538
+ noRollback?: boolean;
1539
+ roleArn?: string;
1540
+ refusalRecovery?: LockRecoveryContext;
1541
+ resourceWarnAfterMs?: number;
1542
+ resourceTimeoutMs?: number;
1543
+ resourceWarnAfterByType?: Record<string, number>;
1544
+ resourceTimeoutByType?: Record<string, number>;
1545
+ unsettledRevertWait?: {
1546
+ timeoutMs: number;
1547
+ pollMs: number;
1548
+ };
1549
+ captureObservedState?: boolean;
1550
+ assetRedirect?: AssetRedirectMap;
1551
+ terminationProtection?: boolean;
1552
+ parentStackInfo?: {
1553
+ parentStack: string;
1554
+ parentLogicalId: string;
1555
+ parentRegion: string;
1556
+ };
1557
+ inheritedSecrets?: RecordedSecretValues;
1558
+ inheritedPhysicalNameCopies?: ReadonlySet<string> | undefined;
1559
+ inheritedReferenceProvenance?: ReadonlyMap<string, ReferenceProvenance> | undefined;
1560
+ passedParameterClasses?: ReadonlyMap<string, 'clean' | 'secret' | 'unknown'>;
1561
+ passedNoEchoParameters?: ReadonlySet<string> | undefined;
1562
+ inheritedProducerRegions?: (() => ProducerRegionEvidence) | undefined;
1563
+ onCurrentStateLoaded?: (stackName: string, state: StackState | undefined) => Promise<void>;
1564
+ onFirstDeployLeftNoRecord?: (stackName: string) => Promise<void>;
1565
+ pinCcApi?: {
1566
+ stackName: string;
1567
+ logicalIds: ReadonlySet<string>;
1568
+ };
1569
+ recreateTargets?: {
1570
+ stackName: string;
1571
+ viaCcApi: ReadonlySet<string>;
1572
+ viaSdkProvider: ReadonlySet<string>;
1573
+ };
1574
+ eventRecorder?: DeploymentEventRecorder;
1575
+ replace?: boolean;
1576
+ forceStatefulRecreation?: boolean;
1577
+ strictGetAtt?: boolean;
1578
+ cfnFallback?: boolean;
1579
+ producerLookup?: ProducerLookup;
1580
+ consumerAccount?: string;
1581
+ skipFinalSnapshot?: boolean;
1582
+ finalSnapshotClients?: PreDeleteSnapshotClients;
1583
+ requireApproval?: RequireApprovalLevel;
1584
+ approveDeployment?: DeploymentApprover;
1585
+ onDestructivePlan?: ((stackName: string, destructive: readonly DestructiveChange[], stage?: 'late') => Promise<void>) | undefined;
1586
+ crossPrefixHolder?: ((stackName: string) => Promise<ForeignHolding>) | undefined;
1587
+ }
1588
+ type RequireApprovalLevel = 'never' | 'any-change' | 'broadening' | 'destructive';
1589
+ type DeploymentApprover = ((request: DeploymentApprovalRequest) => Promise<boolean>) & {
1590
+ readonly autoApproves?: boolean;
1591
+ };
1592
+ interface DeploymentApprovalRequest {
1593
+ stackName: string;
1594
+ level: Exclude<RequireApprovalLevel, 'never'>;
1595
+ counts: {
1596
+ create: number;
1597
+ update: number;
1598
+ delete: number;
1599
+ };
1600
+ destructiveChanges: DestructiveChange[];
1601
+ outputsOnly?: true;
1602
+ securityChanges?: string;
1603
+ }
1604
+ interface DeployResult {
1605
+ stackName: string;
1606
+ created: number;
1607
+ updated: number;
1608
+ deleted: number;
1609
+ deleteSkipped: number;
1610
+ updatePartial: number;
1611
+ nestedUpdatePartial?: number;
1612
+ crossPrefixKept?: number;
1613
+ unchanged: number;
1614
+ durationMs: number;
1615
+ outputs?: Record<string, unknown>;
1616
+ attributeFallbackCount: number;
1617
+ }
1618
+ export declare class DeployEngine {
1619
+ private inlinePolicyWriters;
1620
+ constructor(stateBackend: S3StateBackend, lockManager: LockManager, dagBuilder: DagBuilder, diffCalculator: DiffCalculator, providerRegistry: ProviderRegistry, options: DeployEngineOptions | undefined, stackRegion: string, exportIndexStore?: ExportIndexStore);
1621
+ deploy(stackName: string, template: CloudFormationTemplate): Promise<DeployResult>;
1622
+ private redactStateForPersist;
1623
+ private referenceProvenanceToPersist;
1624
+ private redactCrossStackReads;
1625
+ private doDeploy;
1626
+ private maskSecretsInEvent;
1627
+ private maskingRetryLogger;
1628
+ }
1629
+ export type { AssetPublisherOptions, CdkdConfig, ChangeType, CloudFormationTemplate, DeployEngineOptions, DeployOptions, DeployResult, IndeterminateGuard, LockInfo, LogLevel, Logger, NormalizeAwsErrorContext, PropertyChange, ResolveBucketRegionOptions, ResourceChange, ResourceCreateResult, ResourceDeleteResult, ResourceProvider, ResourceState, ResourceUpdateOutcome, ResourceUpdateResult, StackInfo, StackState, StateBackendConfig, SynthesisOptions, SynthesisResult, TemplateOutput, TemplateParameter, TemplateResource };
1630
+ //# sourceMappingURL=index.d.ts.map