@fjall/deploy-core 0.89.5 → 0.89.6

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 (198) hide show
  1. package/LICENSE +50 -21
  2. package/README.md +25 -0
  3. package/dist/.minified +1 -0
  4. package/dist/src/__test-utils__/awsMockHelpers.d.ts +20 -0
  5. package/dist/src/__test-utils__/awsMockHelpers.js +1 -0
  6. package/dist/src/__test-utils__/index.d.ts +1 -0
  7. package/dist/src/__test-utils__/index.js +1 -0
  8. package/dist/src/aws/AwsProvider.js +0 -1
  9. package/dist/src/aws/SimpleAwsProvider.js +1 -70
  10. package/dist/src/aws/index.d.ts +4 -2
  11. package/dist/src/aws/index.js +1 -3
  12. package/dist/src/aws/organisations/accounts.js +10 -10
  13. package/dist/src/aws/organisations/backup.js +4 -2
  14. package/dist/src/aws/organisations/costAllocation.js +4 -2
  15. package/dist/src/aws/organisations/delegatedAdmin.d.ts +9 -0
  16. package/dist/src/aws/organisations/delegatedAdmin.js +43 -0
  17. package/dist/src/aws/organisations/identityCentre.d.ts +1 -1
  18. package/dist/src/aws/organisations/identityCentre.js +6 -2
  19. package/dist/src/aws/organisations/index.d.ts +4 -3
  20. package/dist/src/aws/organisations/index.js +1 -12
  21. package/dist/src/aws/organisations/ipam.js +4 -2
  22. package/dist/src/aws/organisations/organisation.js +27 -18
  23. package/dist/src/aws/organisations/organisationalUnits.d.ts +26 -6
  24. package/dist/src/aws/organisations/organisationalUnits.js +149 -35
  25. package/dist/src/aws/organisations/policies.js +4 -3
  26. package/dist/src/aws/organisations/ram.js +6 -2
  27. package/dist/src/aws/organisations/serviceAccess.js +12 -6
  28. package/dist/src/aws/organisations/trustedAccess.js +6 -2
  29. package/dist/src/aws/organisations/types.d.ts +23 -1
  30. package/dist/src/aws/organisations/types.js +1 -16
  31. package/dist/src/aws/utils/__tests__/cloudformationTestHelpers.d.ts +6 -0
  32. package/dist/src/aws/utils/__tests__/cloudformationTestHelpers.js +1 -0
  33. package/dist/src/aws/utils/cloudformationEventHelpers.d.ts +48 -0
  34. package/dist/src/aws/utils/cloudformationEventHelpers.js +1 -0
  35. package/dist/src/aws/utils/cloudformationEventTypes.d.ts +45 -0
  36. package/dist/src/aws/utils/cloudformationEventTypes.js +1 -0
  37. package/dist/src/aws/utils/cloudformationEvents.d.ts +8 -54
  38. package/dist/src/aws/utils/cloudformationEvents.js +1 -596
  39. package/dist/src/aws/utils/index.d.ts +5 -0
  40. package/dist/src/aws/utils/index.js +1 -0
  41. package/dist/src/aws/utils/stackStatus.js +1 -90
  42. package/dist/src/events/index.d.ts +13 -0
  43. package/dist/src/events/index.js +1 -0
  44. package/dist/src/index.d.ts +34 -17
  45. package/dist/src/index.js +41 -21
  46. package/dist/src/orchestration/__tests__/cascadeTestHelpers.d.ts +12 -0
  47. package/dist/src/orchestration/__tests__/cascadeTestHelpers.js +78 -0
  48. package/dist/src/orchestration/activeDeploymentGuard.d.ts +10 -0
  49. package/dist/src/orchestration/activeDeploymentGuard.js +39 -0
  50. package/dist/src/orchestration/applicationDeploy.js +46 -229
  51. package/dist/src/orchestration/applicationDeployHelpers.d.ts +39 -0
  52. package/dist/src/orchestration/applicationDeployHelpers.js +223 -0
  53. package/dist/src/orchestration/applicationDestroy.d.ts +14 -0
  54. package/dist/src/orchestration/applicationDestroy.js +131 -0
  55. package/dist/src/orchestration/builders/dockerBuilder.d.ts +17 -0
  56. package/dist/src/orchestration/builders/dockerBuilder.js +98 -0
  57. package/dist/src/orchestration/builders/frameworkRegistry.d.ts +23 -0
  58. package/dist/src/orchestration/builders/frameworkRegistry.js +1 -0
  59. package/dist/src/orchestration/builders/index.d.ts +4 -0
  60. package/dist/src/orchestration/builders/index.js +1 -0
  61. package/dist/src/orchestration/builders/openNextBuilder.d.ts +21 -0
  62. package/dist/src/orchestration/builders/openNextBuilder.js +144 -0
  63. package/dist/src/orchestration/cascadeDestroyHelpers.d.ts +30 -0
  64. package/dist/src/orchestration/cascadeDestroyHelpers.js +1 -0
  65. package/dist/src/orchestration/cascadeHelpers.d.ts +46 -0
  66. package/dist/src/orchestration/cascadeHelpers.js +160 -0
  67. package/dist/src/orchestration/contextHelpers.d.ts +46 -2
  68. package/dist/src/orchestration/contextHelpers.js +93 -1
  69. package/dist/src/orchestration/destroy.d.ts +13 -0
  70. package/dist/src/orchestration/destroy.js +67 -0
  71. package/dist/src/orchestration/detectionPipeline.d.ts +2 -11
  72. package/dist/src/orchestration/detectionPipeline.js +29 -10
  73. package/dist/src/orchestration/dockerBuildHelper.d.ts +10 -0
  74. package/dist/src/orchestration/dockerBuildHelper.js +49 -0
  75. package/dist/src/orchestration/dockerInterface.d.ts +4 -2
  76. package/dist/src/orchestration/index.d.ts +8 -1
  77. package/dist/src/orchestration/index.js +1 -3
  78. package/dist/src/orchestration/manifestSecretParser.d.ts +11 -0
  79. package/dist/src/orchestration/manifestSecretParser.js +1 -0
  80. package/dist/src/orchestration/openNextBuild.d.ts +28 -0
  81. package/dist/src/orchestration/openNextBuild.js +243 -0
  82. package/dist/src/orchestration/organisationDeploy.js +110 -233
  83. package/dist/src/orchestration/organisationDestroy.d.ts +24 -0
  84. package/dist/src/orchestration/organisationDestroy.js +189 -0
  85. package/dist/src/orchestration/organisationSetup.d.ts +6 -4
  86. package/dist/src/orchestration/organisationSetup.js +28 -8
  87. package/dist/src/orchestration/resolveOperation.js +68 -6
  88. package/dist/src/orchestration/serviceFactory.d.ts +4 -0
  89. package/dist/src/orchestration/serviceFactory.js +1 -16
  90. package/dist/src/orchestration/spawnHelpers.d.ts +47 -0
  91. package/dist/src/orchestration/spawnHelpers.js +1 -0
  92. package/dist/src/orchestration/stackCleanup.d.ts +39 -0
  93. package/dist/src/orchestration/stackCleanup.js +1 -0
  94. package/dist/src/orchestration/welcomeImageHelper.d.ts +15 -0
  95. package/dist/src/orchestration/welcomeImageHelper.js +64 -0
  96. package/dist/src/services/application/ApplicationStackService.d.ts +21 -30
  97. package/dist/src/services/application/ApplicationStackService.js +16 -234
  98. package/dist/src/services/application/applicationStackHelpers.d.ts +46 -0
  99. package/dist/src/services/application/applicationStackHelpers.js +248 -0
  100. package/dist/src/services/application/index.d.ts +1 -0
  101. package/dist/src/services/application/index.js +1 -1
  102. package/dist/src/services/index.d.ts +6 -0
  103. package/dist/src/services/index.js +1 -0
  104. package/dist/src/services/infrastructure/CdkArgumentBuilder.js +1 -67
  105. package/dist/src/services/infrastructure/CdkCommandRunner.d.ts +10 -2
  106. package/dist/src/services/infrastructure/CdkCommandRunner.js +18 -15
  107. package/dist/src/services/infrastructure/CdkErrorFormatter.js +16 -194
  108. package/dist/src/services/infrastructure/CdkEventMonitoring.js +1 -41
  109. package/dist/src/services/infrastructure/CdkOutputAnalyser.js +1 -1
  110. package/dist/src/services/infrastructure/CdkOutputParser.js +2 -33
  111. package/dist/src/services/infrastructure/CdkProcessManager.d.ts +5 -0
  112. package/dist/src/services/infrastructure/CdkProcessManager.js +81 -47
  113. package/dist/src/services/infrastructure/CdkService.d.ts +7 -53
  114. package/dist/src/services/infrastructure/CdkService.js +41 -83
  115. package/dist/src/services/infrastructure/CdkServiceTypes.d.ts +50 -0
  116. package/dist/src/services/infrastructure/CdkServiceTypes.js +0 -0
  117. package/dist/src/services/infrastructure/CloudFormationService.js +9 -10
  118. package/dist/src/services/infrastructure/ICdkProcessManager.d.ts +27 -0
  119. package/dist/src/services/infrastructure/ICdkProcessManager.js +1 -0
  120. package/dist/src/services/infrastructure/__tests__/cloudFormationTestHelpers.d.ts +9 -0
  121. package/dist/src/services/infrastructure/__tests__/cloudFormationTestHelpers.js +1 -0
  122. package/dist/src/services/infrastructure/cdkServiceHelpers.d.ts +9 -0
  123. package/dist/src/services/infrastructure/cdkServiceHelpers.js +1 -0
  124. package/dist/src/services/infrastructure/constructMapEnrichment.d.ts +7 -0
  125. package/dist/src/services/infrastructure/constructMapEnrichment.js +1 -0
  126. package/dist/src/services/infrastructure/index.d.ts +3 -1
  127. package/dist/src/services/infrastructure/index.js +1 -7
  128. package/dist/src/services/supporting/TemplateHashService.js +1 -1
  129. package/dist/src/services/supporting/helpers.js +1 -81
  130. package/dist/src/services/supporting/index.js +1 -3
  131. package/dist/src/steps/index.d.ts +1 -0
  132. package/dist/src/steps/index.js +1 -0
  133. package/dist/src/steps/stepRegistry.d.ts +71 -0
  134. package/dist/src/steps/stepRegistry.js +505 -0
  135. package/dist/src/types/FjallState.js +1 -118
  136. package/dist/src/types/ProgressEvent.js +1 -48
  137. package/dist/src/types/application/ApplicationServiceTypes.js +1 -30
  138. package/dist/src/types/application/index.js +1 -1
  139. package/dist/src/types/callbacks.d.ts +76 -4
  140. package/dist/src/types/callbacks.js +0 -1
  141. package/dist/src/types/constants.d.ts +2 -0
  142. package/dist/src/types/constants.js +1 -6
  143. package/dist/src/types/credentials.js +0 -1
  144. package/dist/src/types/deployment/DeploymentServiceTypes.d.ts +5 -2
  145. package/dist/src/types/deployment/DeploymentServiceTypes.js +1 -1
  146. package/dist/src/types/deployment/DeploymentTypes.js +0 -1
  147. package/dist/src/types/deployment/cloudformation.js +0 -1
  148. package/dist/src/types/deployment/index.d.ts +3 -1
  149. package/dist/src/types/deployment/index.js +1 -1
  150. package/dist/src/types/deployment/parallel.js +1 -10
  151. package/dist/src/types/deploymentEventSchema.d.ts +158 -0
  152. package/dist/src/types/deploymentEventSchema.js +1 -0
  153. package/dist/src/types/detection.d.ts +22 -0
  154. package/dist/src/types/detection.js +1 -0
  155. package/dist/src/types/entitlements.d.ts +31 -0
  156. package/dist/src/types/entitlements.js +0 -0
  157. package/dist/src/types/errors/CdkError.js +1 -20
  158. package/dist/src/types/errors/ServiceError.d.ts +2 -1
  159. package/dist/src/types/errors/ServiceError.js +1 -119
  160. package/dist/src/types/errors/index.d.ts +2 -0
  161. package/dist/src/types/errors/index.js +1 -0
  162. package/dist/src/types/events.d.ts +3 -9
  163. package/dist/src/types/events.js +0 -5
  164. package/dist/src/types/frameworkBuilder.d.ts +96 -0
  165. package/dist/src/types/frameworkBuilder.js +8 -0
  166. package/dist/src/types/index.d.ts +19 -4
  167. package/dist/src/types/index.js +1 -9
  168. package/dist/src/types/operations.d.ts +3 -2
  169. package/dist/src/types/operations.js +1 -285
  170. package/dist/src/types/orgConfig.d.ts +2 -10
  171. package/dist/src/types/orgConfig.js +0 -11
  172. package/dist/src/types/params.d.ts +60 -1
  173. package/dist/src/types/patternDetection.d.ts +14 -16
  174. package/dist/src/types/patternDetection.js +14 -18
  175. package/dist/src/types/patternTypes.d.ts +19 -0
  176. package/dist/src/types/patternTypes.js +1 -0
  177. package/dist/src/types/stepDefinitions.d.ts +163 -0
  178. package/dist/src/types/stepDefinitions.js +98 -0
  179. package/dist/src/types/validation.js +0 -1
  180. package/dist/src/util/dockerfileDetection.d.ts +5 -0
  181. package/dist/src/util/dockerfileDetection.js +1 -0
  182. package/dist/src/util/index.d.ts +4 -3
  183. package/dist/src/util/index.js +1 -3
  184. package/dist/src/util/sequencedCallbacks.d.ts +44 -0
  185. package/dist/src/util/sequencedCallbacks.js +1 -0
  186. package/package.json +49 -8
  187. package/dist/src/aws/utils/CloudFormationFailureAnalyser.d.ts +0 -32
  188. package/dist/src/aws/utils/CloudFormationFailureAnalyser.js +0 -228
  189. package/dist/src/aws/utils/errors.d.ts +0 -26
  190. package/dist/src/aws/utils/errors.js +0 -59
  191. package/dist/src/util/fsHelpers.d.ts +0 -4
  192. package/dist/src/util/fsHelpers.js +0 -16
  193. package/dist/src/util/securityHelpers.d.ts +0 -31
  194. package/dist/src/util/securityHelpers.js +0 -124
  195. package/dist/src/util/singleton.d.ts +0 -2
  196. package/dist/src/util/singleton.js +0 -9
  197. package/dist/src/util/sleep.d.ts +0 -4
  198. package/dist/src/util/sleep.js +0 -4
@@ -1,30 +1 @@
1
- import { BaseServiceError } from "../errors/ServiceError.js";
2
- import { getErrorMessage } from "@fjall/util";
3
- /**
4
- * Wraps an error into an ApplicationError with consistent formatting.
5
- */
6
- export function wrapApplicationError(message, errorType, appName, operation, error) {
7
- const errorMsg = getErrorMessage(error);
8
- return new ApplicationError(`${message}: ${errorMsg}`, {
9
- errorType,
10
- appName,
11
- operation,
12
- details: error
13
- });
14
- }
15
- /**
16
- * Application-specific error with typed error categories
17
- */
18
- export class ApplicationError extends BaseServiceError {
19
- errorType;
20
- appName;
21
- operation;
22
- stackType;
23
- constructor(message, options) {
24
- super(`APPLICATION_${options.errorType.toUpperCase()}`, message, options.details, options.recoverable ?? false);
25
- this.errorType = options.errorType;
26
- this.appName = options.appName;
27
- this.operation = options.operation;
28
- this.stackType = options.stackType;
29
- }
30
- }
1
+ import{BaseServiceError as s}from"../errors/ServiceError.js";import{getErrorMessage as c}from"@fjall/util";function m(a,e,r,t,p){const o=c(p);return new i(`${a}: ${o}`,{errorType:e,appName:r,operation:t,details:p})}class i extends s{errorType;appName;operation;stackType;constructor(e,r){super(`APPLICATION_${r.errorType.toUpperCase()}`,e,r.details,r.recoverable??!1),this.errorType=r.errorType,this.appName=r.appName,this.operation=r.operation,this.stackType=r.stackType}}export{i as ApplicationError,m as wrapApplicationError};
@@ -1 +1 @@
1
- export { ApplicationError, wrapApplicationError } from "./ApplicationServiceTypes.js";
1
+ import{ApplicationError as p,wrapApplicationError as i}from"./ApplicationServiceTypes.js";export{p as ApplicationError,i as wrapApplicationError};
@@ -1,4 +1,5 @@
1
1
  import type { ProgressEvent, ResourceEvent, AwsAuthResult, CascadeDeploymentResult, CascadePhase } from "./events.js";
2
+ import type { DetectionResult } from "./detection.js";
2
3
  export type StepCompleteStatus = "completed" | "skipped" | "error";
3
4
  /**
4
5
  * Unified callback interface for deployment progress.
@@ -8,29 +9,100 @@ export type StepCompleteStatus = "completed" | "skipped" | "error";
8
9
  *
9
10
  * All callbacks are optional. Omitting a callback means that
10
11
  * event type is silently ignored.
12
+ *
13
+ * Each callback is annotated with `@emittedBy` to indicate whether the
14
+ * engine (deploy-core) or the caller (CLI/webapp) is responsible for
15
+ * invoking it.
11
16
  */
12
17
  export interface DeployCallbacks {
18
+ /** @emittedBy engine — fired for each infrastructure stack start. */
13
19
  onStepStart?: (stepId: string, stepName: string, stepIndex?: number, stepTotal?: number) => void;
20
+ /** @emittedBy engine — fired for each infrastructure stack completion. */
14
21
  onStepComplete?: (stepId: string, stepName: string, status: StepCompleteStatus, stepIndex?: number, stepTotal?: number) => void;
22
+ /** @emittedBy engine */
15
23
  onProgress?: (event: ProgressEvent) => void;
24
+ /** @emittedBy engine */
16
25
  onLog?: (message: string, level?: "info" | "debug" | "warn") => void;
26
+ /** @emittedBy engine */
17
27
  onOutput?: (chunk: string) => void;
28
+ /** @emittedBy engine — per-resource CFN events during sequential stack deployment. */
18
29
  onResourceProgress?: (event: ResourceEvent) => void;
30
+ /** @emittedBy engine — fired when the engine begins a parallel phase (multiple stacks at once). */
31
+ onParallelPhaseStart?: (stacks: readonly string[], description: string) => void;
32
+ /** @emittedBy engine — fired when a parallel phase completes. */
33
+ onParallelPhaseComplete?: (results: Array<{
34
+ stack: string;
35
+ success: boolean;
36
+ error?: Error;
37
+ }>) => void;
38
+ /**
39
+ * @emittedBy engine — per-stack resource progress during a parallel phase.
40
+ * Includes the stack identifier so consumers can route events
41
+ * to the correct panel.
42
+ */
43
+ onParallelStackResourceProgress?: (stack: string, event: ResourceEvent) => void;
44
+ /**
45
+ * @emittedBy engine — Docker build/push progress.
46
+ * deploy-core wires this through to DockerProvider.buildAndPush().
47
+ */
19
48
  onDockerProgress?: (message: string, percentage?: number, layerId?: string, status?: string) => void;
49
+ /**
50
+ * @emittedBy caller — ECS rolling update status.
51
+ * ECS service stabilisation is a post-CDK-deploy concern.
52
+ * deploy-core does not monitor ECS services.
53
+ */
20
54
  onECSUpdate?: (status: string, service?: string) => void;
55
+ /**
56
+ * @emittedBy caller — ECS rolling update progress with percentage.
57
+ * deploy-core does not monitor ECS services.
58
+ */
21
59
  onECSProgress?: (message: string, percentage?: number) => void;
60
+ /** @emittedBy engine */
22
61
  onCDKBootstrap?: (status: string) => void;
23
- onCDKDiff?: (hasDifferences: boolean) => void;
62
+ /** @emittedBy engine */
24
63
  onCdkOutput?: (output: string, type: "synth" | "diff") => void;
64
+ /** @emittedBy engine */
25
65
  onCascadeStart?: () => void;
66
+ /** @emittedBy engine */
26
67
  onCascadePhaseStart?: (phase: CascadePhase) => void;
27
- onCascadeAccountStart?: (operationKey: string, accountId: string, region: string) => void;
28
- onCascadeAccountPhaseChange?: (operationKey: string, phase: "synth" | "deploy" | "destroy", region?: string) => void;
68
+ /** @emittedBy engine fired when a cascade phase completes. */
69
+ onCascadePhaseComplete?: (phase: CascadePhase) => void;
70
+ /** @emittedBy engine */
71
+ onCascadeAccountStart?: (operationKey: string, accountId: string, region: string, deployType?: string) => void;
72
+ /** @emittedBy engine — per-account bootstrap/synth/deploy/destroy phase transitions. */
73
+ onCascadeAccountPhaseChange?: (operationKey: string, phase: "bootstrap" | "synth" | "deploy" | "destroy", region?: string) => void;
74
+ /** @emittedBy engine — per-account CFN resource events during cascade. */
29
75
  onCascadeAccountResourceProgress?: (operationKey: string, event: ResourceEvent, region?: string) => void;
30
- onCascadeAccountComplete?: (operationKey: string, success: boolean, error?: string, region?: string) => void;
76
+ /** @emittedBy engine */
77
+ onCascadeAccountComplete?: (operationKey: string, success: boolean, error?: string, region?: string, outputs?: Record<string, string>) => void;
78
+ /** @emittedBy engine */
31
79
  onCascadeComplete?: (result: CascadeDeploymentResult) => void;
80
+ /** @emittedBy engine — progress during failed-state stack cleanup (S3 emptying, deletion). */
81
+ onStackCleanupProgress?: (stackName: string, phase: "emptying-bucket" | "deleting-stack" | "waiting" | "complete" | "error") => void;
82
+ /**
83
+ * @emittedBy engine — fired after the detection pipeline completes with full analysis results.
84
+ * May be async — engine awaits the return value so callers can run post-detection
85
+ * hooks (e.g. secrets validation) before deployment begins.
86
+ */
87
+ onDetectionComplete?: (result: DetectionResult) => void | Promise<void>;
88
+ /**
89
+ * @emittedBy engine — fired at each phase boundary of the detection pipeline.
90
+ * Replaces fragile string matching on onLog messages for pre-deployment progress.
91
+ */
92
+ onDetectionPhaseChange?: (phase: "detect" | "synth" | "hash" | "validate", status: "started" | "completed") => void;
93
+ /** @emittedBy caller — CLI fires during SSO/OIDC auth flows. */
32
94
  onSSOUrl?: (url: string | null) => void;
95
+ /** @emittedBy caller — CLI fires after credential resolution. */
33
96
  onAuthComplete?: (result: AwsAuthResult | null) => void;
97
+ /** @emittedBy engine — fired when OpenNext build starts (Next.js/Payload apps). */
98
+ onOpenNextBuildStart?: () => void;
99
+ /** @emittedBy engine — OpenNext build progress output. */
100
+ onOpenNextProgress?: (message: string) => void;
101
+ /** @emittedBy engine — fired when OpenNext build completes successfully. */
102
+ onOpenNextBuildComplete?: () => void;
103
+ /** @emittedBy engine — fired when OpenNext build fails. */
104
+ onOpenNextBuildError?: (error: string) => void;
105
+ /** @emittedBy engine */
34
106
  onError?: (error: Error) => void;
35
107
  verbose?: boolean;
36
108
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1,5 +1,7 @@
1
1
  /** CloudFormation error pattern indicating a stack doesn't exist */
2
2
  export declare const STACK_NOT_FOUND_PATTERN = "does not exist";
3
+ /** CDK error pattern indicating a stack is in a failed state */
4
+ export declare const STACK_FAILED_STATE_PATTERN = "is in a failed state";
3
5
  /** CDK error pattern indicating no stacks matched the provided name */
4
6
  export declare const CDK_NO_STACKS_MATCH = "No stacks match the name(s)";
5
7
  /** The canonical name for generated infrastructure files */
@@ -1,6 +1 @@
1
- /** CloudFormation error pattern indicating a stack doesn't exist */
2
- export const STACK_NOT_FOUND_PATTERN = "does not exist";
3
- /** CDK error pattern indicating no stacks matched the provided name */
4
- export const CDK_NO_STACKS_MATCH = "No stacks match the name(s)";
5
- /** The canonical name for generated infrastructure files */
6
- export const INFRASTRUCTURE_FILENAME = "infrastructure.ts";
1
+ const t="does not exist",s="is in a failed state",T="No stacks match the name(s)",e="infrastructure.ts";export{T as CDK_NO_STACKS_MATCH,e as INFRASTRUCTURE_FILENAME,s as STACK_FAILED_STATE_PATTERN,t as STACK_NOT_FOUND_PATTERN};
@@ -1 +0,0 @@
1
- export {};
@@ -1,6 +1,5 @@
1
1
  import type { DeploymentContext } from "./DeploymentTypes.js";
2
2
  import type { StackOutputsRecord } from "./cloudformation.js";
3
- export type { StackOutput, StackOutputsRecord } from "./cloudformation.js";
4
3
  /**
5
4
  * Extended deployment context for application deployments
6
5
  */
@@ -20,4 +19,8 @@ export interface CallerIdentity {
20
19
  UserId: string;
21
20
  Arn: string;
22
21
  }
23
- export type { ValidationResult } from "../validation.js";
22
+ /**
23
+ * Build a stub CallerIdentity with only the Account field populated.
24
+ * Used when the full STS identity isn't available (e.g. cascade accounts).
25
+ */
26
+ export declare function stubCallerIdentity(accountId: string): CallerIdentity;
@@ -1 +1 @@
1
- export {};
1
+ function n(t){return{Account:t,Arn:"",UserId:""}}export{n as stubCallerIdentity};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,5 +1,7 @@
1
1
  export type { StackOutput, StackOutputsRecord } from "./cloudformation.js";
2
2
  export type { DeploymentContext, StepOutput } from "./DeploymentTypes.js";
3
- export type { ApplicationDeploymentContext, CallerIdentity, ValidationResult } from "./DeploymentServiceTypes.js";
3
+ export type { ApplicationDeploymentContext, CallerIdentity } from "./DeploymentServiceTypes.js";
4
+ export type { ValidationResult } from "../validation.js";
5
+ export { stubCallerIdentity } from "./DeploymentServiceTypes.js";
4
6
  export type { ParallelDeploymentResult, ParallelDeployGroup, ParallelOperation, ParallelOperationType, ParallelOperationState } from "./parallel.js";
5
7
  export { PARALLEL_OPERATION_TYPES } from "./parallel.js";
@@ -1 +1 @@
1
- export { PARALLEL_OPERATION_TYPES } from "./parallel.js";
1
+ import{stubCallerIdentity as e}from"./DeploymentServiceTypes.js";import{PARALLEL_OPERATION_TYPES as A}from"./parallel.js";export{A as PARALLEL_OPERATION_TYPES,e as stubCallerIdentity};
@@ -1,10 +1 @@
1
- /**
2
- * Type definitions for parallel deployment operations
3
- */
4
- /**
5
- * Special parallel operations that aren't CloudFormation stacks
6
- */
7
- export const PARALLEL_OPERATION_TYPES = {
8
- BUILD: "build",
9
- DOCKER: "docker"
10
- };
1
+ const E={BUILD:"build",DOCKER:"docker"};export{E as PARALLEL_OPERATION_TYPES};
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Canonical deployment event schema — the single source of truth for events
3
+ * sent between the deployment engine, CLI, and webapp.
4
+ *
5
+ * Both CLI and webapp previously maintained independent copies of this schema.
6
+ * This unified version is the UNION of all event types from both, with the
7
+ * webapp's .max() security constraints preserved for safe server-side parsing.
8
+ *
9
+ * Usage:
10
+ * - Server-side (validation): import { DeploymentEventSchema } from "@fjall/deploy-core"
11
+ * - Client-side (types only): import type { DeploymentEvent } from "@fjall/deploy-core"
12
+ */
13
+ import { z } from "zod";
14
+ export declare const DEPLOYMENT_EVENT_RESOURCE_CATEGORIES: readonly ["security", "network", "compute", "database", "storage", "monitoring", "dns", "identity", "bootstrap", "events", "registry", "backup"];
15
+ export type DeploymentEventResourceCategory = (typeof DEPLOYMENT_EVENT_RESOURCE_CATEGORIES)[number];
16
+ export declare const CASCADE_PHASES: readonly ["platform", "domains", "accounts"];
17
+ export declare const CASCADE_ACCOUNT_STATUSES: readonly ["started", "deploying", "completed", "failed"];
18
+ export declare const DEPLOYMENT_EVENT_TYPES: readonly ["step", "resource", "docker", "ecs", "error", "complete", "cascade_phase", "cascade_account", "parallel_phase", "detection", "log"];
19
+ export type DeploymentEventType = (typeof DEPLOYMENT_EVENT_TYPES)[number];
20
+ export type DeploymentEventCascadePhase = (typeof CASCADE_PHASES)[number];
21
+ export type DeploymentEventCascadeAccountStatus = (typeof CASCADE_ACCOUNT_STATUSES)[number];
22
+ export declare const DeploymentEventSchema: z.ZodObject<{
23
+ type: z.ZodEnum<{
24
+ step: "step";
25
+ resource: "resource";
26
+ docker: "docker";
27
+ ecs: "ecs";
28
+ error: "error";
29
+ complete: "complete";
30
+ cascade_phase: "cascade_phase";
31
+ cascade_account: "cascade_account";
32
+ parallel_phase: "parallel_phase";
33
+ detection: "detection";
34
+ log: "log";
35
+ }>;
36
+ timestamp: z.ZodString;
37
+ sequence: z.ZodOptional<z.ZodNumber>;
38
+ step: z.ZodOptional<z.ZodObject<{
39
+ id: z.ZodString;
40
+ name: z.ZodString;
41
+ index: z.ZodNumber;
42
+ total: z.ZodNumber;
43
+ status: z.ZodString;
44
+ }, z.core.$strict>>;
45
+ resource: z.ZodOptional<z.ZodObject<{
46
+ logicalId: z.ZodString;
47
+ resourceType: z.ZodString;
48
+ category: z.ZodEnum<{
49
+ security: "security";
50
+ network: "network";
51
+ compute: "compute";
52
+ database: "database";
53
+ storage: "storage";
54
+ monitoring: "monitoring";
55
+ dns: "dns";
56
+ identity: "identity";
57
+ bootstrap: "bootstrap";
58
+ events: "events";
59
+ registry: "registry";
60
+ backup: "backup";
61
+ }>;
62
+ group: z.ZodOptional<z.ZodString>;
63
+ constructPath: z.ZodOptional<z.ZodString>;
64
+ displayName: z.ZodString;
65
+ status: z.ZodString;
66
+ statusReason: z.ZodOptional<z.ZodString>;
67
+ physicalId: z.ZodOptional<z.ZodString>;
68
+ expectedDurationSeconds: z.ZodOptional<z.ZodNumber>;
69
+ stack: z.ZodOptional<z.ZodString>;
70
+ }, z.core.$strict>>;
71
+ docker: z.ZodOptional<z.ZodObject<{
72
+ message: z.ZodString;
73
+ percentage: z.ZodOptional<z.ZodNumber>;
74
+ }, z.core.$strict>>;
75
+ ecs: z.ZodOptional<z.ZodObject<{
76
+ status: z.ZodString;
77
+ message: z.ZodOptional<z.ZodString>;
78
+ percentage: z.ZodOptional<z.ZodNumber>;
79
+ }, z.core.$strict>>;
80
+ error: z.ZodOptional<z.ZodObject<{
81
+ message: z.ZodString;
82
+ category: z.ZodOptional<z.ZodString>;
83
+ remediation: z.ZodOptional<z.ZodArray<z.ZodString>>;
84
+ }, z.core.$strict>>;
85
+ message: z.ZodOptional<z.ZodString>;
86
+ cascadePhase: z.ZodOptional<z.ZodObject<{
87
+ phase: z.ZodEnum<{
88
+ platform: "platform";
89
+ domains: "domains";
90
+ accounts: "accounts";
91
+ }>;
92
+ status: z.ZodEnum<{
93
+ started: "started";
94
+ completed: "completed";
95
+ }>;
96
+ }, z.core.$strict>>;
97
+ cascadeAccount: z.ZodOptional<z.ZodObject<{
98
+ accountId: z.ZodString;
99
+ region: z.ZodString;
100
+ operationKey: z.ZodString;
101
+ status: z.ZodEnum<{
102
+ started: "started";
103
+ deploying: "deploying";
104
+ completed: "completed";
105
+ failed: "failed";
106
+ }>;
107
+ error: z.ZodOptional<z.ZodString>;
108
+ phase: z.ZodOptional<z.ZodEnum<{
109
+ bootstrap: "bootstrap";
110
+ synth: "synth";
111
+ deploy: "deploy";
112
+ destroy: "destroy";
113
+ }>>;
114
+ cascadePhase: z.ZodOptional<z.ZodEnum<{
115
+ platform: "platform";
116
+ domains: "domains";
117
+ accounts: "accounts";
118
+ }>>;
119
+ }, z.core.$strict>>;
120
+ parallelPhase: z.ZodOptional<z.ZodObject<{
121
+ stacks: z.ZodArray<z.ZodString>;
122
+ status: z.ZodEnum<{
123
+ started: "started";
124
+ completed: "completed";
125
+ }>;
126
+ results: z.ZodOptional<z.ZodArray<z.ZodObject<{
127
+ stack: z.ZodString;
128
+ success: z.ZodBoolean;
129
+ error: z.ZodOptional<z.ZodString>;
130
+ }, z.core.$strict>>>;
131
+ }, z.core.$strict>>;
132
+ detection: z.ZodOptional<z.ZodObject<{
133
+ pattern: z.ZodNullable<z.ZodString>;
134
+ hasDockerfile: z.ZodBoolean;
135
+ hasDifferences: z.ZodBoolean;
136
+ resources: z.ZodObject<{
137
+ hasNetwork: z.ZodBoolean;
138
+ hasCompute: z.ZodBoolean;
139
+ hasDatabase: z.ZodBoolean;
140
+ hasStorage: z.ZodBoolean;
141
+ hasMessaging: z.ZodBoolean;
142
+ hasCdn: z.ZodBoolean;
143
+ }, z.core.$strict>;
144
+ requiredSecrets: z.ZodOptional<z.ZodArray<z.ZodString>>;
145
+ }, z.core.$strict>>;
146
+ log: z.ZodOptional<z.ZodObject<{
147
+ message: z.ZodString;
148
+ level: z.ZodEnum<{
149
+ info: "info";
150
+ debug: "debug";
151
+ warn: "warn";
152
+ }>;
153
+ }, z.core.$strict>>;
154
+ }, z.core.$strict>;
155
+ /** Inferred type — safe for client-side import via `import type`. */
156
+ export type DeploymentEvent = z.infer<typeof DeploymentEventSchema>;
157
+ /** Map a deploy type to its cascade phase value for event emission. */
158
+ export declare function toCascadePhase(deployType: string): DeploymentEventCascadePhase | undefined;
@@ -0,0 +1 @@
1
+ import{z as e}from"zod";const r=["security","network","compute","database","storage","monitoring","dns","identity","bootstrap","events","registry","backup"],n=["platform","domains","accounts"],c=["started","deploying","completed","failed"],i=["step","resource","docker","ecs","error","complete","cascade_phase","cascade_account","parallel_phase","detection","log"],l={step:"step",resource:"resource",docker:"docker",ecs:"ecs",error:"error",complete:null,cascade_phase:"cascadePhase",cascade_account:"cascadeAccount",parallel_phase:"parallelPhase",detection:"detection",log:"log"},m=e.object({type:e.enum(i),timestamp:e.string().max(64),sequence:e.number().int().nonnegative().optional(),step:e.object({id:e.string().max(256),name:e.string().max(256),index:e.number(),total:e.number(),status:e.string().max(64)}).strict().optional(),resource:e.object({logicalId:e.string().max(256),resourceType:e.string().max(256),category:e.enum(r),group:e.string().max(128).optional(),constructPath:e.string().max(512).optional(),displayName:e.string().max(256),status:e.string().max(64),statusReason:e.string().max(2048).optional(),physicalId:e.string().max(2048).optional(),expectedDurationSeconds:e.number().optional(),stack:e.string().max(256).optional()}).strict().optional(),docker:e.object({message:e.string().max(2048),percentage:e.number().optional()}).strict().optional(),ecs:e.object({status:e.string().max(64),message:e.string().max(2048).optional(),percentage:e.number().optional()}).strict().optional(),error:e.object({message:e.string().max(4096),category:e.string().max(128).optional(),remediation:e.array(e.string().max(1024)).max(10).optional()}).strict().optional(),message:e.string().max(2048).optional(),cascadePhase:e.object({phase:e.enum(n),status:e.enum(["started","completed"])}).strict().optional(),cascadeAccount:e.object({accountId:e.string().max(32),region:e.string().max(32),operationKey:e.string().max(256),status:e.enum(c),error:e.string().max(2048).optional(),phase:e.enum(["bootstrap","synth","deploy","destroy"]).optional(),cascadePhase:e.enum(n).optional()}).strict().optional(),parallelPhase:e.object({stacks:e.array(e.string().max(256)).max(20),status:e.enum(["started","completed"]),results:e.array(e.object({stack:e.string().max(256),success:e.boolean(),error:e.string().max(2048).optional()}).strict()).max(20).optional()}).strict().optional(),detection:e.object({pattern:e.string().max(128).nullable(),hasDockerfile:e.boolean(),hasDifferences:e.boolean(),resources:e.object({hasNetwork:e.boolean(),hasCompute:e.boolean(),hasDatabase:e.boolean(),hasStorage:e.boolean(),hasMessaging:e.boolean(),hasCdn:e.boolean()}).strict(),requiredSecrets:e.array(e.string().max(512)).max(100).optional()}).strict().optional(),log:e.object({message:e.string().max(2048),level:e.enum(["info","debug","warn"])}).strict().optional()}).strict().superRefine((t,o)=>{const a=l[t.type],s=a?t[a]:void 0;a&&s==null&&o.addIssue({code:e.ZodIssueCode.custom,message:`"${a}" is required when type is "${t.type}"`,path:[a]}),t.type==="complete"&&!t.message&&o.addIssue({code:e.ZodIssueCode.custom,message:'"message" is required when type is "complete"',path:["message"]})});function u(t){if(t==="platform")return"platform";if(t==="account")return"accounts"}export{c as CASCADE_ACCOUNT_STATUSES,n as CASCADE_PHASES,r as DEPLOYMENT_EVENT_RESOURCE_CATEGORIES,i as DEPLOYMENT_EVENT_TYPES,m as DeploymentEventSchema,u as toCascadePhase};
@@ -0,0 +1,22 @@
1
+ import type { PatternType } from "@fjall/generator";
2
+ import type { AppResourceFlags } from "./patternTypes.js";
3
+ /**
4
+ * Result of the pre-deployment detection pipeline.
5
+ *
6
+ * Contains pattern, resource flags, hash comparison, and Dockerfile detection.
7
+ * Used by applicationDeploy to decide deploy order and by callers (via
8
+ * onDetectionComplete callback) to update UI step lists.
9
+ */
10
+ export interface DetectionResult {
11
+ pattern: PatternType | null;
12
+ hasDatabase: boolean;
13
+ hasDifferences: boolean;
14
+ stackChanges: Map<string, boolean>;
15
+ currentHashes: Map<string, string>;
16
+ resources: AppResourceFlags;
17
+ hasDockerfile: boolean;
18
+ /** SSM parameter paths required by the application, parsed from the CDK manifest. */
19
+ requiredSecrets: string[];
20
+ /** Name of the framework builder that resolved this app (e.g. "opennext", "docker"). */
21
+ builderName?: string;
22
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Full entitlements contract returned by GET /api/entitlements.
3
+ *
4
+ * Single source of truth — imported by both the CLI (API consumer)
5
+ * and the webapp (API producer). See also EntitlementsData in
6
+ * apiClient.ts which is a minimal subset used by the deploy engine.
7
+ */
8
+ export interface Entitlements {
9
+ plan: "free" | "trial" | "starter" | "pro" | "enterprise";
10
+ limits: {
11
+ applications: number;
12
+ users: number;
13
+ awsAccounts: number;
14
+ maxOrganisations: number;
15
+ };
16
+ usage?: {
17
+ applications: number;
18
+ awsAccounts: number;
19
+ };
20
+ features: {
21
+ organisations: boolean;
22
+ allowedTiers: string[];
23
+ assetManagement: boolean;
24
+ complianceAudit: "none" | "basic" | "full";
25
+ };
26
+ metricsRetentionHours: number;
27
+ /** "full" = all visible, "limited" = top 1 only, rest blurred */
28
+ costRecommendations: "full" | "limited";
29
+ /** "full" = all details visible, "limited" = top 1 detail only, rest title-only */
30
+ warningDetail: "full" | "limited";
31
+ }
File without changes
@@ -1,20 +1 @@
1
- /**
2
- * CDK-specific error types
3
- */
4
- import { BaseServiceError } from "./ServiceError.js";
5
- /**
6
- * CDK operation error
7
- */
8
- export class CdkError extends BaseServiceError {
9
- errorType;
10
- stackName;
11
- exitCode;
12
- output;
13
- constructor(message, errorType, stackName, exitCode, output, details, recoverable = false) {
14
- super(`CDK_${errorType.toUpperCase()}`, message, details, recoverable);
15
- this.errorType = errorType;
16
- this.stackName = stackName;
17
- this.exitCode = exitCode;
18
- this.output = output;
19
- }
20
- }
1
+ import{BaseServiceError as p}from"./ServiceError.js";class C extends p{errorType;stackName;exitCode;output;constructor(t,e,r,s,o,a,i=!1){super(`CDK_${e.toUpperCase()}`,t,a,i),this.errorType=e,this.stackName=r,this.exitCode=s,this.output=o}}export{C as CdkError};
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * Standardised error details type used across all services.
3
+ * Typically an Error, Record, or string — but accepts unknown for catch blocks.
3
4
  */
4
- export type ServiceErrorDetails = Error | Record<string, unknown> | string | unknown | undefined;
5
+ export type ServiceErrorDetails = unknown;
5
6
  /**
6
7
  * Base service error with full context
7
8
  */
@@ -1,119 +1 @@
1
- /**
2
- * Base implementation of ServiceError
3
- */
4
- export class BaseServiceError extends Error {
5
- code;
6
- details;
7
- recoverable;
8
- cause;
9
- constructor(code, message, details, recoverable = false, cause) {
10
- super(message);
11
- this.code = code;
12
- this.details = details;
13
- this.recoverable = recoverable;
14
- this.cause = cause;
15
- this.name = this.constructor.name;
16
- // Maintain proper stack trace
17
- if (Error.captureStackTrace) {
18
- Error.captureStackTrace(this, this.constructor);
19
- }
20
- }
21
- }
22
- /**
23
- * Validation-specific errors
24
- */
25
- export class ValidationError extends BaseServiceError {
26
- fields;
27
- rules;
28
- constructor(message, fields, rules, details) {
29
- super("VALIDATION_ERROR", message, details, false);
30
- this.fields = fields;
31
- this.rules = rules;
32
- }
33
- }
34
- /**
35
- * Authentication/Authorization errors
36
- */
37
- export class AuthError extends BaseServiceError {
38
- account;
39
- reason;
40
- constructor(message, account, reason, details) {
41
- super("AUTH_ERROR", message, details, false);
42
- this.account = account;
43
- this.reason = reason;
44
- }
45
- }
46
- /**
47
- * AWS-specific errors
48
- */
49
- export class AwsError extends BaseServiceError {
50
- service;
51
- operation;
52
- awsErrorCode;
53
- constructor(message, service, operation, awsErrorCode, details, recoverable = false) {
54
- super("AWS_ERROR", message, details, recoverable);
55
- this.service = service;
56
- this.operation = operation;
57
- this.awsErrorCode = awsErrorCode;
58
- }
59
- }
60
- /**
61
- * CDK/CloudFormation errors
62
- */
63
- export class DeploymentError extends BaseServiceError {
64
- stackName;
65
- deploymentPhase;
66
- constructor(message, stackName, deploymentPhase, details, recoverable = false) {
67
- super("DEPLOYMENT_ERROR", message, details, recoverable);
68
- this.stackName = stackName;
69
- this.deploymentPhase = deploymentPhase;
70
- }
71
- }
72
- /**
73
- * Network/connectivity errors
74
- */
75
- export class NetworkError extends BaseServiceError {
76
- endpoint;
77
- statusCode;
78
- constructor(message, endpoint, statusCode, cause) {
79
- super("NETWORK_ERROR", message, undefined, true, cause);
80
- this.endpoint = endpoint;
81
- this.statusCode = statusCode;
82
- }
83
- }
84
- /**
85
- * File system errors
86
- */
87
- export class FileSystemError extends BaseServiceError {
88
- path;
89
- operation;
90
- constructor(message, path, operation, cause) {
91
- super("FILESYSTEM_ERROR", message, { path, operation }, false, cause);
92
- this.path = path;
93
- this.operation = operation;
94
- }
95
- }
96
- /**
97
- * Configuration errors
98
- */
99
- export class ConfigError extends BaseServiceError {
100
- configKey;
101
- configPath;
102
- constructor(message, configKey, configPath, details) {
103
- super("CONFIG_ERROR", message, details, false);
104
- this.configKey = configKey;
105
- this.configPath = configPath;
106
- }
107
- }
108
- /**
109
- * Convert unknown errors to ServiceError
110
- */
111
- export function toServiceError(error, code = "UNKNOWN_ERROR") {
112
- if (error instanceof BaseServiceError) {
113
- return error;
114
- }
115
- if (error instanceof Error) {
116
- return new BaseServiceError(code, error.message, { name: error.name }, false, error);
117
- }
118
- return new BaseServiceError(code, String(error), { rawError: error }, false);
119
- }
1
+ class a extends Error{code;details;recoverable;cause;constructor(e,t,r,o=!1,c){super(t),this.code=e,this.details=r,this.recoverable=o,this.cause=c,this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}class i extends a{fields;rules;constructor(e,t,r,o){super("VALIDATION_ERROR",e,o,!1),this.fields=t,this.rules=r}}class u extends a{account;reason;constructor(e,t,r,o){super("AUTH_ERROR",e,o,!1),this.account=t,this.reason=r}}class l extends a{service;operation;awsErrorCode;constructor(e,t,r,o,c,n=!1){super("AWS_ERROR",e,c,n),this.service=t,this.operation=r,this.awsErrorCode=o}}class h extends a{stackName;deploymentPhase;constructor(e,t,r,o,c=!1){super("DEPLOYMENT_ERROR",e,o,c),this.stackName=t,this.deploymentPhase=r}}class E extends a{endpoint;statusCode;constructor(e,t,r,o){super("NETWORK_ERROR",e,void 0,!0,o),this.endpoint=t,this.statusCode=r}}class p extends a{path;operation;constructor(e,t,r,o){super("FILESYSTEM_ERROR",e,{path:t,operation:r},!1,o),this.path=t,this.operation=r}}class R extends a{configKey;configPath;constructor(e,t,r,o){super("CONFIG_ERROR",e,o,!1),this.configKey=t,this.configPath=r}}function d(s,e="UNKNOWN_ERROR"){return s instanceof a?s:s instanceof Error?new a(e,s.message,{name:s.name},!1,s):new a(e,String(s),{rawError:s},!1)}export{u as AuthError,l as AwsError,a as BaseServiceError,R as ConfigError,h as DeploymentError,p as FileSystemError,E as NetworkError,i as ValidationError,d as toServiceError};
@@ -0,0 +1,2 @@
1
+ export { CdkError } from "./CdkError.js";
2
+ export { type ServiceErrorDetails, type ServiceError, BaseServiceError, ValidationError, AuthError, AwsError, DeploymentError, NetworkError, FileSystemError, ConfigError, toServiceError } from "./ServiceError.js";
@@ -0,0 +1 @@
1
+ import{CdkError as e}from"./CdkError.js";import{BaseServiceError as t,ValidationError as i,AuthError as m,AwsError as a,DeploymentError as f,NetworkError as l,FileSystemError as n,ConfigError as p,toServiceError as s}from"./ServiceError.js";export{m as AuthError,a as AwsError,t as BaseServiceError,e as CdkError,p as ConfigError,f as DeploymentError,n as FileSystemError,l as NetworkError,i as ValidationError,s as toServiceError};
@@ -2,6 +2,7 @@
2
2
  * Progress event types emitted by the deployment engine.
3
3
  * These flow to the caller via DeployCallbacks.
4
4
  */
5
+ import type { DeploymentEventCascadePhase } from "./deploymentEventSchema.js";
5
6
  export type ProgressEventType = "step" | "info" | "spinner" | "warning" | "debug" | "error";
6
7
  export interface ProgressEvent {
7
8
  type: ProgressEventType;
@@ -14,14 +15,7 @@ export interface ProgressEvent {
14
15
  totalSteps?: number;
15
16
  };
16
17
  }
17
- export interface ResourceEvent {
18
- logicalId: string;
19
- physicalId?: string;
20
- resourceType: string;
21
- status: string;
22
- statusReason?: string;
23
- timestamp: Date;
24
- }
18
+ export type { ResourceEvent } from "@fjall/util/aws";
25
19
  export interface AwsAuthResult {
26
20
  accountId: string;
27
21
  region: string;
@@ -37,4 +31,4 @@ export interface CascadeDeploymentResult {
37
31
  error: string;
38
32
  }>;
39
33
  }
40
- export type CascadePhase = "platform" | "domains" | "accounts";
34
+ export type CascadePhase = DeploymentEventCascadePhase;