@intentius/chant-lexicon-aws 0.14.0 → 0.15.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.
- package/dist/components/__tests__/mock-cloud-executor.d.ts +106 -0
- package/dist/components/__tests__/mock-cloud-executor.d.ts.map +1 -0
- package/dist/components/apply.d.ts +242 -0
- package/dist/components/apply.d.ts.map +1 -0
- package/dist/components/builders.d.ts +37 -0
- package/dist/components/builders.d.ts.map +1 -0
- package/dist/components/capability-plugin.d.ts +23 -0
- package/dist/components/capability-plugin.d.ts.map +1 -0
- package/dist/components/cloud-executor.d.ts +350 -0
- package/dist/components/cloud-executor.d.ts.map +1 -0
- package/dist/components/config-bom.d.ts +135 -0
- package/dist/components/config-bom.d.ts.map +1 -0
- package/dist/components/host-delivery.d.ts +110 -0
- package/dist/components/host-delivery.d.ts.map +1 -0
- package/dist/components/index.d.ts +19 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/job-submission.d.ts +89 -0
- package/dist/components/job-submission.d.ts.map +1 -0
- package/dist/components/publish.d.ts +194 -0
- package/dist/components/publish.d.ts.map +1 -0
- package/dist/components/safety.d.ts +49 -0
- package/dist/components/safety.d.ts.map +1 -0
- package/dist/components/wait-aws.d.ts +65 -0
- package/dist/components/wait-aws.d.ts.map +1 -0
- package/dist/generated/index.d.ts +7 -4
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/import/live-export.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/integrity.json +4 -4
- package/dist/lint/audit-catalog.d.ts +10 -0
- package/dist/lint/audit-catalog.d.ts.map +1 -0
- package/dist/manifest.json +1 -1
- package/dist/meta.json +141 -30
- package/dist/op/activities/floci.d.ts +54 -0
- package/dist/op/activities/floci.d.ts.map +1 -0
- package/dist/op/activities/index.d.ts +8 -0
- package/dist/op/activities/index.d.ts.map +1 -0
- package/dist/ownership.d.ts +10 -0
- package/dist/ownership.d.ts.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/serializer.d.ts.map +1 -1
- package/dist/types/index.d.ts +145 -38
- package/package.json +12 -2
- package/src/components/__fixtures__/schemas/cyclonedx-1.5.schema.json +3800 -0
- package/src/components/__fixtures__/schemas/cyclonedx-spdx-license.schema.json +621 -0
- package/src/components/__fixtures__/schemas/jsf-0.82.schema.json +240 -0
- package/src/components/__fixtures__/schemas/spdx-2.3.schema.json +740 -0
- package/src/components/__fixtures__/synthesized-template.json +53 -0
- package/src/components/__tests__/mock-cloud-executor.ts +425 -0
- package/src/components/apply.test.ts +382 -0
- package/src/components/apply.ts +499 -0
- package/src/components/builders.test.ts +49 -0
- package/src/components/builders.ts +59 -0
- package/src/components/capability-plugin.ts +73 -0
- package/src/components/cloud-executor.test.ts +25 -0
- package/src/components/cloud-executor.ts +814 -0
- package/src/components/config-bom.test.ts +273 -0
- package/src/components/config-bom.ts +310 -0
- package/src/components/host-delivery.test.ts +121 -0
- package/src/components/host-delivery.ts +193 -0
- package/src/components/index.ts +19 -0
- package/src/components/job-submission.test.ts +97 -0
- package/src/components/job-submission.ts +138 -0
- package/src/components/pilots-e2e.test.ts +460 -0
- package/src/components/presets-e2e.test.ts +166 -0
- package/src/components/publish.test.ts +318 -0
- package/src/components/publish.ts +356 -0
- package/src/components/safety.test.ts +47 -0
- package/src/components/safety.ts +78 -0
- package/src/components/wait-aws.test.ts +79 -0
- package/src/components/wait-aws.ts +132 -0
- package/src/generated/index.d.ts +145 -38
- package/src/generated/index.ts +12 -9
- package/src/generated/lexicon-aws.json +141 -30
- package/src/import/live-export.ts +2 -1
- package/src/index.ts +5 -0
- package/src/lint/audit-catalog.ts +45 -0
- package/src/op/activities/floci.test.ts +67 -0
- package/src/op/activities/floci.ts +149 -0
- package/src/op/activities/index.ts +16 -0
- package/src/ownership.test.ts +18 -0
- package/src/ownership.ts +15 -0
- package/src/plugin.ts +3 -0
- package/src/serializer.ts +2 -1
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Injectable cloud I/O boundary for the AWS-leaf capability implementations
|
|
3
|
+
* (#557, epic #551), living in the aws lexicon so a project's cloud verbs are
|
|
4
|
+
* contributed by its active lexicon rather than baked into core (see
|
|
5
|
+
* docs/components/cloud-boundary). Every AWS-leaf capability here goes through
|
|
6
|
+
* a `CloudExecutor` instead of shelling out directly, so:
|
|
7
|
+
*
|
|
8
|
+
* - production code gets a real executor that shells out to the `aws` and
|
|
9
|
+
* `docker` CLIs (this codebase shells out to native CLIs rather than
|
|
10
|
+
* depending on AWS SDK v3 packages);
|
|
11
|
+
* - tests get a `MockCloudExecutor` (./__tests__/mock-cloud-executor.ts) that
|
|
12
|
+
* records calls and returns canned results — no live AWS, no live docker.
|
|
13
|
+
*
|
|
14
|
+
* The `docker` client is genuinely agnostic and shared: its type + real
|
|
15
|
+
* implementation (`realDocker`) come from core; only the AWS-specific clients
|
|
16
|
+
* (ECR, CloudFormation, ECS, CodeDeploy, Lambda, EMR, SSM host, S3, CloudFront,
|
|
17
|
+
* snapshot) are defined here.
|
|
18
|
+
*/
|
|
19
|
+
import { type DockerClient } from "@intentius/chant/components/verbs/cloud-executor";
|
|
20
|
+
export type { DockerClient };
|
|
21
|
+
export interface EcrClient {
|
|
22
|
+
/** Authenticate the local docker client against a registry (`aws ecr get-login-password | docker login`). */
|
|
23
|
+
login(registry: string): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export interface CfnChange {
|
|
26
|
+
action: "Add" | "Modify" | "Remove" | "Import" | "Dynamic";
|
|
27
|
+
logicalResourceId: string;
|
|
28
|
+
resourceType: string;
|
|
29
|
+
/** True when CloudFormation must replace (destroy + recreate) this resource to apply the change. */
|
|
30
|
+
replacement: boolean;
|
|
31
|
+
/** Resource-specific detail, when the executor's changeset backend provides it (e.g. property/scope). */
|
|
32
|
+
details?: string[];
|
|
33
|
+
}
|
|
34
|
+
export interface CfnChangeSet {
|
|
35
|
+
changeSetName: string;
|
|
36
|
+
stackName: string;
|
|
37
|
+
status: string;
|
|
38
|
+
/** True the first time this stack is created (no prior stack exists). */
|
|
39
|
+
isCreate: boolean;
|
|
40
|
+
changes: CfnChange[];
|
|
41
|
+
}
|
|
42
|
+
export interface CfnCreateChangeSetArgs {
|
|
43
|
+
stackName: string;
|
|
44
|
+
templatePath: string;
|
|
45
|
+
parameters?: Record<string, string>;
|
|
46
|
+
}
|
|
47
|
+
export interface CfnExecuteChangeSetArgs {
|
|
48
|
+
stackName: string;
|
|
49
|
+
changeSetName: string;
|
|
50
|
+
}
|
|
51
|
+
export interface CfnStackStatus {
|
|
52
|
+
stackStatus: string;
|
|
53
|
+
outputs: Record<string, string>;
|
|
54
|
+
}
|
|
55
|
+
export interface CloudFormationClient {
|
|
56
|
+
/** Create (but do not execute) a changeset, returning its proposed changes for preview/safety checks. */
|
|
57
|
+
createChangeSet(args: CfnCreateChangeSetArgs): Promise<CfnChangeSet>;
|
|
58
|
+
/** Execute a previously created changeset. */
|
|
59
|
+
executeChangeSet(args: CfnExecuteChangeSetArgs): Promise<void>;
|
|
60
|
+
/** Delete a changeset without executing it (used when a safety policy blocks the apply). */
|
|
61
|
+
deleteChangeSet(args: CfnExecuteChangeSetArgs): Promise<void>;
|
|
62
|
+
/** Poll a stack until it reaches a terminal status (`*_COMPLETE`/`*_FAILED`), returning final status + outputs. */
|
|
63
|
+
waitForStack(stackName: string, opts?: {
|
|
64
|
+
intervalMs?: number;
|
|
65
|
+
timeoutMs?: number;
|
|
66
|
+
}): Promise<CfnStackStatus>;
|
|
67
|
+
/** Current stack status + outputs, without waiting. */
|
|
68
|
+
describeStack(stackName: string): Promise<CfnStackStatus>;
|
|
69
|
+
/** Trigger CloudFormation's native rollback-to-last-known-good-state for a stack (saga compensation). */
|
|
70
|
+
rollbackStack(stackName: string): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
export interface EcsUpdateServiceArgs {
|
|
73
|
+
cluster: string;
|
|
74
|
+
service: string;
|
|
75
|
+
taskDefinition?: string;
|
|
76
|
+
desiredCount?: number;
|
|
77
|
+
forceNewDeployment?: boolean;
|
|
78
|
+
}
|
|
79
|
+
export interface EcsServiceState {
|
|
80
|
+
runningCount: number;
|
|
81
|
+
desiredCount: number;
|
|
82
|
+
/** True once `runningCount === desiredCount` and no deployments are in flight. */
|
|
83
|
+
stable: boolean;
|
|
84
|
+
}
|
|
85
|
+
export interface EcsRunTaskArgs {
|
|
86
|
+
cluster: string;
|
|
87
|
+
/** Task definition family (`:revision` optional) to run. */
|
|
88
|
+
taskDefinition: string;
|
|
89
|
+
/** Container to apply the command override to. Defaults to the task def's single container when omitted. */
|
|
90
|
+
container?: string;
|
|
91
|
+
/** Command (argv) override — e.g. the migration runner's invocation. */
|
|
92
|
+
command?: string[];
|
|
93
|
+
/** Launch type. Default: "FARGATE". */
|
|
94
|
+
launchType?: "FARGATE" | "EC2";
|
|
95
|
+
/** awsvpc subnets (required for FARGATE). */
|
|
96
|
+
subnets?: string[];
|
|
97
|
+
/** awsvpc security groups. */
|
|
98
|
+
securityGroups?: string[];
|
|
99
|
+
/** Whether the task gets a public IP (needed for FARGATE tasks in a public subnet pulling images). Default: false. */
|
|
100
|
+
assignPublicIp?: boolean;
|
|
101
|
+
}
|
|
102
|
+
export interface EcsRunTaskResult {
|
|
103
|
+
/** Terminal task status (`STOPPED`). */
|
|
104
|
+
lastStatus: string;
|
|
105
|
+
/** Exit code of the (first) container, once the task has stopped; undefined if the container never started (e.g. image pull failure). */
|
|
106
|
+
exitCode: number | undefined;
|
|
107
|
+
/** Reason the task stopped, when it did not run to a clean container exit. */
|
|
108
|
+
stoppedReason?: string;
|
|
109
|
+
}
|
|
110
|
+
export interface EcsClient {
|
|
111
|
+
/** Roll a new task definition/desired count out to a service; returns the new deployment's id. */
|
|
112
|
+
updateService(args: EcsUpdateServiceArgs): Promise<{
|
|
113
|
+
deploymentId: string;
|
|
114
|
+
}>;
|
|
115
|
+
/** Current running/desired counts for a service, used by `wait-steady-state`. */
|
|
116
|
+
describeService(cluster: string, service: string): Promise<EcsServiceState>;
|
|
117
|
+
/** Roll a service back to a previously recorded task definition/count (saga compensation). */
|
|
118
|
+
rollbackService(args: EcsUpdateServiceArgs): Promise<void>;
|
|
119
|
+
/** Run a one-off task (e.g. a DB migration) and return its arn for `waitForTask`. */
|
|
120
|
+
runTask(args: EcsRunTaskArgs): Promise<{
|
|
121
|
+
taskArn: string;
|
|
122
|
+
}>;
|
|
123
|
+
/** Wait for a one-off task to stop, returning its terminal status and container exit code. */
|
|
124
|
+
waitForTask(cluster: string, taskArn: string): Promise<EcsRunTaskResult>;
|
|
125
|
+
}
|
|
126
|
+
export interface CodeDeployCreateArgs {
|
|
127
|
+
application: string;
|
|
128
|
+
deploymentGroup: string;
|
|
129
|
+
revision: {
|
|
130
|
+
type: "s3";
|
|
131
|
+
uri: string;
|
|
132
|
+
} | {
|
|
133
|
+
type: "github";
|
|
134
|
+
repository: string;
|
|
135
|
+
commitId: string;
|
|
136
|
+
};
|
|
137
|
+
strategy?: "in-place" | "blue-green";
|
|
138
|
+
}
|
|
139
|
+
export interface CodeDeployStatus {
|
|
140
|
+
status: string;
|
|
141
|
+
/** True for a terminal status (`Succeeded`, `Failed`, `Stopped`). */
|
|
142
|
+
terminal: boolean;
|
|
143
|
+
}
|
|
144
|
+
export interface CodeDeployClient {
|
|
145
|
+
/** Create a deployment of a revision to a deployment group; returns the deployment id. */
|
|
146
|
+
createDeployment(args: CodeDeployCreateArgs): Promise<{
|
|
147
|
+
deploymentId: string;
|
|
148
|
+
}>;
|
|
149
|
+
/** Poll a deployment until it reaches a terminal status. */
|
|
150
|
+
waitForDeployment(deploymentId: string, opts?: {
|
|
151
|
+
intervalMs?: number;
|
|
152
|
+
timeoutMs?: number;
|
|
153
|
+
}): Promise<CodeDeployStatus>;
|
|
154
|
+
/** Stop an in-flight deployment and roll the deployment group back to the last known-good revision (native auto-rollback, invoked as saga compensation). */
|
|
155
|
+
stopAndRollback(deploymentId: string): Promise<void>;
|
|
156
|
+
}
|
|
157
|
+
export interface HostCopyFileArgs {
|
|
158
|
+
/** Target host (SSM instance id, hostname, or host group — same identifier space as `copy-to-host`/`remote-exec`). */
|
|
159
|
+
host: string;
|
|
160
|
+
/** Source path of the file to copy (typically an archive-relative image tarball path). */
|
|
161
|
+
from: string;
|
|
162
|
+
/** Destination path on the host. */
|
|
163
|
+
to: string;
|
|
164
|
+
}
|
|
165
|
+
export interface HostDockerLoadArgs {
|
|
166
|
+
/** Target host the tarball was copied to. */
|
|
167
|
+
host: string;
|
|
168
|
+
/** Path of the tarball on the host (matches `HostCopyFileArgs.to`). */
|
|
169
|
+
path: string;
|
|
170
|
+
}
|
|
171
|
+
export interface HostClient {
|
|
172
|
+
/** Copy a file (an image tarball from the build archive) onto a host, via SSM Run Command / SCP-over-SSH depending on config — the same transport `copy-to-host` documents. */
|
|
173
|
+
copyFile(args: HostCopyFileArgs): Promise<void>;
|
|
174
|
+
/** Run `docker load` on the host against a previously copied tarball; returns the digest `docker load` reports, straight into the host's local Docker store (no registry involved). */
|
|
175
|
+
dockerLoad(args: HostDockerLoadArgs): Promise<{
|
|
176
|
+
digest: string;
|
|
177
|
+
}>;
|
|
178
|
+
/** Run a shell command on a host via SSM Run Command, waiting for it to finish; returns captured stdout and exit code (rejects on a non-zero SSM invocation). */
|
|
179
|
+
exec(args: {
|
|
180
|
+
host: string;
|
|
181
|
+
command: string;
|
|
182
|
+
cwd?: string;
|
|
183
|
+
}): Promise<{
|
|
184
|
+
stdout: string;
|
|
185
|
+
exitCode: number;
|
|
186
|
+
}>;
|
|
187
|
+
}
|
|
188
|
+
export interface LambdaUpdateCodeArgs {
|
|
189
|
+
functionName: string;
|
|
190
|
+
/** Container image URI (registry/repo@sha256:...) for an image-package Lambda. */
|
|
191
|
+
imageUri: string;
|
|
192
|
+
}
|
|
193
|
+
export interface LambdaPublishVersionArgs {
|
|
194
|
+
functionName: string;
|
|
195
|
+
}
|
|
196
|
+
export interface LambdaUpdateAliasArgs {
|
|
197
|
+
functionName: string;
|
|
198
|
+
alias: string;
|
|
199
|
+
version: string;
|
|
200
|
+
}
|
|
201
|
+
export interface LambdaClient {
|
|
202
|
+
/** Point the function at a new container image; returns the function ARN (unqualified). */
|
|
203
|
+
updateFunctionCode(args: LambdaUpdateCodeArgs): Promise<{
|
|
204
|
+
functionArn: string;
|
|
205
|
+
}>;
|
|
206
|
+
/** Wait for the function's last update to finish applying (`Successful`/`Failed`). */
|
|
207
|
+
waitForUpdate(functionName: string): Promise<{
|
|
208
|
+
status: string;
|
|
209
|
+
}>;
|
|
210
|
+
/** Publish an immutable numbered version from the function's current `$LATEST`. */
|
|
211
|
+
publishVersion(args: LambdaPublishVersionArgs): Promise<{
|
|
212
|
+
version: string;
|
|
213
|
+
functionArn: string;
|
|
214
|
+
}>;
|
|
215
|
+
/** Repoint a named alias at a published version (e.g. "live" -> "42"). */
|
|
216
|
+
updateAlias(args: LambdaUpdateAliasArgs): Promise<{
|
|
217
|
+
aliasArn: string;
|
|
218
|
+
}>;
|
|
219
|
+
/** Current published version an alias points at, so rollback can restore it. */
|
|
220
|
+
getAliasVersion(functionName: string, alias: string): Promise<string | undefined>;
|
|
221
|
+
/** Synchronously invoke a function (e.g. a migration runner) with an optional JSON payload; returns the status code, response payload text, and any function error. */
|
|
222
|
+
invoke(args: {
|
|
223
|
+
functionName: string;
|
|
224
|
+
payload?: string;
|
|
225
|
+
}): Promise<{
|
|
226
|
+
statusCode: number;
|
|
227
|
+
payload: string;
|
|
228
|
+
functionError?: string;
|
|
229
|
+
}>;
|
|
230
|
+
}
|
|
231
|
+
export interface EmrStartJobRunArgs {
|
|
232
|
+
/** EMR Serverless application id, or EMR-on-EC2 cluster id. */
|
|
233
|
+
clusterOrApplicationId: string;
|
|
234
|
+
/** Entry point artifact reference (resolved by the graph before this executor is called, e.g. an S3 URI). */
|
|
235
|
+
jar: string;
|
|
236
|
+
args?: string[];
|
|
237
|
+
executionRoleArn?: string;
|
|
238
|
+
}
|
|
239
|
+
export interface EmrJobRunStatus {
|
|
240
|
+
/** Terminal job state (`COMPLETED`, `FAILED`, `CANCELLED`), or an in-flight state (`RUNNING`, `PENDING`) while polling. */
|
|
241
|
+
state: string;
|
|
242
|
+
}
|
|
243
|
+
export interface EmrAddStepArgs {
|
|
244
|
+
/** EMR-on-EC2 cluster id to submit the step to. */
|
|
245
|
+
clusterId: string;
|
|
246
|
+
/** Step name (shown in the EMR console). */
|
|
247
|
+
name: string;
|
|
248
|
+
/** Jar the step runs — an S3 jar, or `command-runner.jar` with a `spark-submit …` arg list. */
|
|
249
|
+
jar: string;
|
|
250
|
+
args?: string[];
|
|
251
|
+
/** What EMR does if the step fails. Default: "CONTINUE". */
|
|
252
|
+
actionOnFailure?: "CONTINUE" | "CANCEL_AND_WAIT" | "TERMINATE_CLUSTER";
|
|
253
|
+
}
|
|
254
|
+
export interface EmrClient {
|
|
255
|
+
/** Start a job run (EMR Serverless application or EMR-on-EC2 cluster) against a published artifact; returns the run id for polling. */
|
|
256
|
+
startJobRun(args: EmrStartJobRunArgs): Promise<{
|
|
257
|
+
runId: string;
|
|
258
|
+
}>;
|
|
259
|
+
/** Submit a step to a long-running EMR-on-EC2 cluster; returns the step id for polling. */
|
|
260
|
+
addStep(args: EmrAddStepArgs): Promise<{
|
|
261
|
+
stepId: string;
|
|
262
|
+
}>;
|
|
263
|
+
/** Poll a job run until it reaches a terminal state (`COMPLETED`/`FAILED`/`CANCELLED`). */
|
|
264
|
+
waitForJobRun(runId: string, opts?: {
|
|
265
|
+
intervalMs?: number;
|
|
266
|
+
timeoutMs?: number;
|
|
267
|
+
}): Promise<EmrJobRunStatus>;
|
|
268
|
+
/** Current state of a job run, without waiting. */
|
|
269
|
+
describeJobRun(runId: string): Promise<EmrJobRunStatus>;
|
|
270
|
+
/** Cancel an in-flight job run (saga compensation). */
|
|
271
|
+
cancelJobRun(runId: string): Promise<void>;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* The full injectable cloud I/O surface the AWS-leaf capabilities depend on.
|
|
275
|
+
* A capability module never imports `node:child_process`/an AWS SDK/`net`
|
|
276
|
+
* directly — it takes a `CloudExecutor` (defaulted to `realCloudExecutor()`
|
|
277
|
+
* at module scope, overridable via each capability family's
|
|
278
|
+
* `create*Capability(executor)` factory) so tests can swap in a full mock.
|
|
279
|
+
*/
|
|
280
|
+
export interface S3SyncArgs {
|
|
281
|
+
from: string;
|
|
282
|
+
to: string;
|
|
283
|
+
/** Delete destination keys not present in the source. */
|
|
284
|
+
delete?: boolean;
|
|
285
|
+
}
|
|
286
|
+
export interface S3Client {
|
|
287
|
+
/** `aws s3 sync from to [--delete]`; returns how many objects were uploaded/deleted. */
|
|
288
|
+
sync(args: S3SyncArgs): Promise<{
|
|
289
|
+
uploaded: number;
|
|
290
|
+
deleted: number;
|
|
291
|
+
}>;
|
|
292
|
+
/** `aws s3 cp from to` — upload a single local file to an S3 URI. */
|
|
293
|
+
cp(args: {
|
|
294
|
+
from: string;
|
|
295
|
+
to: string;
|
|
296
|
+
}): Promise<void>;
|
|
297
|
+
}
|
|
298
|
+
export interface CloudFrontInvalidateArgs {
|
|
299
|
+
distributionId: string;
|
|
300
|
+
paths: string[];
|
|
301
|
+
}
|
|
302
|
+
export interface CloudFrontClient {
|
|
303
|
+
/** `aws cloudfront create-invalidation`; returns the invalidation batch id. */
|
|
304
|
+
createInvalidation(args: CloudFrontInvalidateArgs): Promise<{
|
|
305
|
+
invalidationId: string;
|
|
306
|
+
}>;
|
|
307
|
+
}
|
|
308
|
+
export type SnapshotResourceKind = "dynamodb-table" | "rds-instance" | "opensearch-domain" | "ebs-volume";
|
|
309
|
+
export interface SnapshotClient {
|
|
310
|
+
/** Take an on-demand snapshot/backup of a resource, dispatched by kind; returns the backup/snapshot identifier `rollback-previous` restores from. */
|
|
311
|
+
create(args: {
|
|
312
|
+
resource: string;
|
|
313
|
+
resourceKind: SnapshotResourceKind;
|
|
314
|
+
}): Promise<{
|
|
315
|
+
snapshotId: string;
|
|
316
|
+
}>;
|
|
317
|
+
/** Restore a resource from a prior snapshot/backup, dispatched by the snapshot-id shape (DynamoDB/RDS ARN); waits for the restore to become available. */
|
|
318
|
+
restore(args: {
|
|
319
|
+
resource: string;
|
|
320
|
+
snapshotId: string;
|
|
321
|
+
}): Promise<void>;
|
|
322
|
+
}
|
|
323
|
+
export interface CloudExecutor {
|
|
324
|
+
docker: DockerClient;
|
|
325
|
+
ecr: EcrClient;
|
|
326
|
+
cloudformation: CloudFormationClient;
|
|
327
|
+
ecs: EcsClient;
|
|
328
|
+
codeDeploy: CodeDeployClient;
|
|
329
|
+
lambda: LambdaClient;
|
|
330
|
+
emr: EmrClient;
|
|
331
|
+
host: HostClient;
|
|
332
|
+
s3: S3Client;
|
|
333
|
+
cloudfront: CloudFrontClient;
|
|
334
|
+
snapshot: SnapshotClient;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Inject `--endpoint-url` into an `aws …` command when an endpoint is set, so the
|
|
338
|
+
* same component can target a local AWS emulator (Floci, LocalStack, …) or any
|
|
339
|
+
* custom endpoint without a wrapper. We add the flag ourselves rather than rely
|
|
340
|
+
* on the CLI reading `AWS_ENDPOINT_URL` — older `aws` v2 releases (<2.13) don't.
|
|
341
|
+
* Non-`aws` commands (docker, …) pass through untouched.
|
|
342
|
+
*/
|
|
343
|
+
export declare function applyAwsEndpoint(command: string, endpoint: string | undefined): string;
|
|
344
|
+
/** Build a `CloudExecutor` that shells out to real `docker`/`aws` CLIs and probes real bolt ports. Never used in tests. */
|
|
345
|
+
export declare function realCloudExecutor(): CloudExecutor;
|
|
346
|
+
/** The default `CloudExecutor` each capability factory falls back to when none is supplied. */
|
|
347
|
+
export declare function defaultCloudExecutor(): CloudExecutor;
|
|
348
|
+
/** Sleep for `ms`. Shared by every polling capability (`wait-*`) between attempts. */
|
|
349
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
350
|
+
//# sourceMappingURL=cloud-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-executor.d.ts","sourceRoot":"","sources":["../../src/components/cloud-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `extract-config-bom` capability (#613, epic #551 follow-up to #606).
|
|
3
|
+
*
|
|
4
|
+
* chant synthesis is deterministic, so a synthesized IaC template (the
|
|
5
|
+
* CloudFormation JSON `chant build` already produces — see ../../build.ts
|
|
6
|
+
* and lexicons/aws/src/serializer.ts's `CFTemplate`) is itself a
|
|
7
|
+
* reproducible artifact with a legitimate bill-of-materials: it declares
|
|
8
|
+
* resources, may nest child stacks, and references external artifacts
|
|
9
|
+
* (container image digests, AMI ids, other lexicons' versions) that are not
|
|
10
|
+
* declared dependencies in any lockfile. This module is the config-BOM
|
|
11
|
+
* analogue of ./sbom.ts's `generate-sbom`: same archive/manifest wiring,
|
|
12
|
+
* same SPDX/CycloneDX writer (./bom-writer.ts), different subject (a
|
|
13
|
+
* template's structure instead of a lockfile's package list).
|
|
14
|
+
*
|
|
15
|
+
* **Scope.** The extractor is a pure, hermetic AST-ish walk over the
|
|
16
|
+
* template's already-parsed JSON — no cloud calls, no `cfn describe-stacks`,
|
|
17
|
+
* no network. It only reads chant's own synthesized output, so it works
|
|
18
|
+
* identically for any lexicon whose serializer emits a JSON document shaped
|
|
19
|
+
* like CloudFormation's `{ Resources: { name: { Type, Properties } } }` (the
|
|
20
|
+
* ../../serializer.ts `SerializerResult.primary`/`files` convention every
|
|
21
|
+
* lexicon serializer already produces). Non-JSON serializer output (a raw
|
|
22
|
+
* Kubernetes YAML manifest, say) is out of scope for this first cut — see
|
|
23
|
+
* `extractConfigBom`'s doc comment.
|
|
24
|
+
*
|
|
25
|
+
* **Why config-only/infra components get a BOM.** #606 shipped
|
|
26
|
+
* `generate-sbom` keyed to *artifact* types (image/jar/zip/dir); a
|
|
27
|
+
* config-only component (no `build` phase, e.g. a DynamoDB table or an EMR
|
|
28
|
+
* cluster definition — see epic #551's "Infra" archetype) has none of those
|
|
29
|
+
* and so was previously assumed to have nothing to attach a BOM to. That
|
|
30
|
+
* assumption undercounts what's true: the synthesized template *is* that
|
|
31
|
+
* component's build output. Treating it as a first-class archive artifact
|
|
32
|
+
* (a `template`-kind entry with its own content digest, peer to `image`/
|
|
33
|
+
* `asset` — see ./build-archive.ts's `addArchiveTemplate`) means a
|
|
34
|
+
* config-BOM can attach to it exactly the way a software SBOM attaches to
|
|
35
|
+
* an image digest, closing the gap.
|
|
36
|
+
*/
|
|
37
|
+
import type { Capability } from "@intentius/chant/components/capability";
|
|
38
|
+
import { type BuildArchiveManifest } from "@intentius/chant/components/verbs/build-archive";
|
|
39
|
+
import { type BomPackage } from "@intentius/chant/components/verbs/bom-writer";
|
|
40
|
+
import { type SbomDocument, type SbomFormat } from "@intentius/chant/components/verbs/sbom-generator";
|
|
41
|
+
/** One external reference a template's resources point at — an image digest, an AMI id, or another lexicon's declared version. Enumerated separately from declared resources since these aren't things chant itself owns/synthesizes. */
|
|
42
|
+
export interface ExternalReference {
|
|
43
|
+
kind: "image-digest" | "ami" | "lexicon-version";
|
|
44
|
+
/** The reference value itself (a digest, an AMI id, a version string). */
|
|
45
|
+
value: string;
|
|
46
|
+
/** Logical resource name the reference was found on, when known. */
|
|
47
|
+
resourceName?: string;
|
|
48
|
+
}
|
|
49
|
+
/** One nested stack/module a template references (an `AWS::CloudFormation::Stack` resource, or the equivalent nesting concept in another lexicon). */
|
|
50
|
+
export interface NestedStackReference {
|
|
51
|
+
/** Logical name of the nesting resource in the parent template. */
|
|
52
|
+
resourceName: string;
|
|
53
|
+
/** Referenced child template's filename/path, when the parent's `Properties` names one (e.g. CFN's `TemplateURL`). */
|
|
54
|
+
templatePath?: string;
|
|
55
|
+
}
|
|
56
|
+
/** Structural summary produced by walking a synthesized template — the data `extractConfigBom` projects into a `BomPackage[]` for the SPDX/CycloneDX writer. */
|
|
57
|
+
export interface ConfigBomInventory {
|
|
58
|
+
/** Every declared resource, keyed by logical name, with its CFN-style `Type` (e.g. `"AWS::S3::Bucket"`). */
|
|
59
|
+
resources: Array<{
|
|
60
|
+
name: string;
|
|
61
|
+
type: string;
|
|
62
|
+
}>;
|
|
63
|
+
/** Nested stacks/modules this template declares. */
|
|
64
|
+
nestedStacks: NestedStackReference[];
|
|
65
|
+
/** External artifacts referenced by any resource (image digests, AMIs, lexicon versions). */
|
|
66
|
+
externalReferences: ExternalReference[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Walk a synthesized template's parsed JSON, enumerating declared resources,
|
|
70
|
+
* nested stack/module references, and external artifact references (image
|
|
71
|
+
* digests, AMI ids, lexicon versions found in resource properties).
|
|
72
|
+
*
|
|
73
|
+
* Deliberately structural, not semantic: this never talks to AWS/any cloud
|
|
74
|
+
* to resolve what an AMI id or image digest actually *is* — it only records
|
|
75
|
+
* that a resource's properties reference one, the same "surface the
|
|
76
|
+
* reference, don't interpret it" stance ./sbom-generator.ts's module doc
|
|
77
|
+
* takes for SBOM content generally.
|
|
78
|
+
*/
|
|
79
|
+
export declare function inventoryTemplate(templateJson: string): ConfigBomInventory;
|
|
80
|
+
/** Project a `ConfigBomInventory` into the standard-agnostic `BomPackage[]` shape ./bom-writer.ts's writers consume. Every declared resource becomes a `type: "config"` component; every external reference becomes a `type: "external-reference"` component, so a config-BOM reader sees "what chant declared" and "what chant points at but doesn't own" as distinguishable entries rather than a flat, ambiguous list. */
|
|
81
|
+
export declare function inventoryToBomPackages(inventory: ConfigBomInventory): BomPackage[];
|
|
82
|
+
export interface ExtractConfigBomInput {
|
|
83
|
+
/** Archive-relative (or local) path to the synthesized template being scanned — the `template` archive entry's `path`. An `archive:`-prefixed reference is accepted and stripped, matching `generate-sbom`'s `path` convention. */
|
|
84
|
+
path: string;
|
|
85
|
+
/** Serialized template content (the same bytes `addArchiveTemplate`, ./build.ts, was/will be given) — this capability never reads from disk itself, keeping it pure/hermetic and testable with an in-memory fixture. */
|
|
86
|
+
content: string;
|
|
87
|
+
/** Digest of the `template` archive entry this config-BOM describes (see ./build-archive.ts's `contentDigest`). Omitted when scanning a template ahead of it being archived. */
|
|
88
|
+
digest?: string;
|
|
89
|
+
/** BOM format to emit. Defaults to `DEFAULT_SBOM_FORMAT` (SPDX), same precedence story as `generate-sbom` (see ../../config.ts's `resolveSbomFormat`). */
|
|
90
|
+
format?: SbomFormat;
|
|
91
|
+
/** Where the config-BOM document is written inside the build archive. Defaults to `<path>.config-bom.json`. */
|
|
92
|
+
into?: string;
|
|
93
|
+
/** Manifest to extend, so a component's whole build phase (template + config-BOM, alongside any image + software SBOM) accumulates one manifest — same accumulation convention as `generate-sbom`'s `manifest` input. */
|
|
94
|
+
manifest?: BuildArchiveManifest;
|
|
95
|
+
/** Directory to also write the config-BOM document to on disk, mirroring the software SBOM's `sbom.<format>.json` convention (see ./lockfile-sbom-generator.ts's `sbomOutputPath`). Omitted: archive-only, no disk write (useful in tests). */
|
|
96
|
+
outDir?: string;
|
|
97
|
+
/** Clock override for deterministic tests. */
|
|
98
|
+
now?: () => Date;
|
|
99
|
+
}
|
|
100
|
+
export interface ExtractConfigBomOutput {
|
|
101
|
+
/** The generated config-BOM document (format, media type, bytes, package count, generator — reuses `SbomDocument`'s shape since a config-BOM is structurally the same kind of document as a software SBOM). */
|
|
102
|
+
bom: SbomDocument;
|
|
103
|
+
/** Structural inventory this config-BOM was derived from — resources, nested stacks, external references — surfaced directly so a caller/test can assert on template structure without re-parsing the BOM bytes. */
|
|
104
|
+
inventory: ConfigBomInventory;
|
|
105
|
+
/** Where the config-BOM was written inside the build archive. */
|
|
106
|
+
archivePath: string;
|
|
107
|
+
/** Content-addressed digest of the config-BOM document's own bytes. */
|
|
108
|
+
digest: string;
|
|
109
|
+
/** The build archive's manifest, now including this config-BOM's entry (`kind: "sbom"`, `bomKind: "config"`) alongside whatever `input.manifest` already held. */
|
|
110
|
+
manifest: BuildArchiveManifest;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Extract a config-BOM from a synthesized IaC template's declared resources,
|
|
114
|
+
* nested stacks, and external references, and fold the result into the
|
|
115
|
+
* build-archive manifest as an `sbom`-kind entry (`bomKind: "config"`) linked
|
|
116
|
+
* to the template artifact's digest — the config-BOM peer of `generate-sbom`
|
|
117
|
+
* (./sbom.ts). No rollback, for the same reason `generate-sbom` declares
|
|
118
|
+
* none: an already-generated, content-addressed BOM is evidence, not mutable
|
|
119
|
+
* state to compensate.
|
|
120
|
+
*/
|
|
121
|
+
export declare function createExtractConfigBomCapability(): Capability<ExtractConfigBomInput, ExtractConfigBomOutput>;
|
|
122
|
+
/**
|
|
123
|
+
* Default `extract-config-bom` capability. Pure/hermetic — no injectable
|
|
124
|
+
* backend needed since template inventory is a structural walk, not a scan
|
|
125
|
+
* requiring an external tool.
|
|
126
|
+
*
|
|
127
|
+
* Typically composed immediately after `addArchiveTemplate` (./build.ts) in
|
|
128
|
+
* a config-only/infra component's build phase — `addArchiveTemplate` folds
|
|
129
|
+
* the synthesized template into the archive as a first-class `template`-kind
|
|
130
|
+
* entry with its own content digest (#613 — IaC as a first-class build
|
|
131
|
+
* artifact, peer to `image`/`jar`), and this capability attaches the
|
|
132
|
+
* resulting config-BOM to that same digest.
|
|
133
|
+
*/
|
|
134
|
+
export declare const extractConfigBomCapability: Capability<ExtractConfigBomInput, ExtractConfigBomOutput>;
|
|
135
|
+
//# sourceMappingURL=config-bom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-bom.d.ts","sourceRoot":"","sources":["../../src/components/config-bom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAKL,KAAK,oBAAoB,EAC1B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAuB,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,kDAAkD,CAAC;AAgB3H,yOAAyO;AACzO,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,cAAc,GAAG,KAAK,GAAG,iBAAiB,CAAC;IACjD,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,sJAAsJ;AACtJ,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;IACrB,sHAAsH;IACtH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,gKAAgK;AAChK,MAAM,WAAW,kBAAkB;IACjC,4GAA4G;IAC5G,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,oDAAoD;IACpD,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,6FAA6F;IAC7F,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC;AA4DD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAkB1E;AAED,6ZAA6Z;AAC7Z,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,kBAAkB,GAAG,UAAU,EAAE,CAmBlF;AAID,MAAM,WAAW,qBAAqB;IACpC,mOAAmO;IACnO,IAAI,EAAE,MAAM,CAAC;IACb,wNAAwN;IACxN,OAAO,EAAE,MAAM,CAAC;IAChB,gLAAgL;IAChL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0JAA0J;IAC1J,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,+GAA+G;IAC/G,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yNAAyN;IACzN,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,+OAA+O;IAC/O,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,+MAA+M;IAC/M,GAAG,EAAE,YAAY,CAAC;IAClB,oNAAoN;IACpN,SAAS,EAAE,kBAAkB,CAAC;IAC9B,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,kKAAkK;IAClK,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAUD;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,IAAI,UAAU,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CA2C5G;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,EAAE,UAAU,CAAC,qBAAqB,EAAE,sBAAsB,CAC7D,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* host / code delivery family — run against a mutable host.
|
|
3
|
+
*
|
|
4
|
+
* `code-deploy` (AWS CodeDeploy) is the managed, nearly AWS-only leaf: create
|
|
5
|
+
* a deployment of a revision (S3/GitHub) to a deployment group, appspec-driven
|
|
6
|
+
* lifecycle hooks (BeforeInstall/AfterInstall/ApplicationStart/ValidateService),
|
|
7
|
+
* in-place or blue/green, native automatic rollback, wait for terminal status.
|
|
8
|
+
* Pairs with `publish-artifact` — the revision is the published S3 bundle
|
|
9
|
+
* (`@publish.uri`).
|
|
10
|
+
*
|
|
11
|
+
* `copy-to-host` / `remote-exec` (SSM Run Command or SSH) are the portable,
|
|
12
|
+
* lower-level generic verbs for host bootstrap, on-host migrations, and
|
|
13
|
+
* single-host compose where CodeDeploy is not used or not available
|
|
14
|
+
* (no clean Azure/GCP peer — see docs/components/cloud-boundary).
|
|
15
|
+
*
|
|
16
|
+
* `code-deploy` is a real implementation (#557, epic #551) over the
|
|
17
|
+
* injectable `CloudExecutor` (./cloud-executor.ts) — the capability the
|
|
18
|
+
* Neo4j fan-out pilot uses once per instance. `copy-to-host` and `remote-exec`
|
|
19
|
+
* are also real, over the executor's `host.exec` (SSM Run Command, waited to
|
|
20
|
+
* completion); the SSH transport is not yet implemented.
|
|
21
|
+
*/
|
|
22
|
+
import type { Capability } from "@intentius/chant/components/capability";
|
|
23
|
+
import { type CloudExecutor } from "./cloud-executor.js";
|
|
24
|
+
export interface CodeDeployInput {
|
|
25
|
+
/** CodeDeploy application name. Default: derived from `ctx.component` when omitted (per-instance fan-out steps, e.g. the Neo4j pilot, don't repeat it per node). */
|
|
26
|
+
application?: string;
|
|
27
|
+
/** CodeDeploy deployment group name. Default: `<application>-<instance>` when `instance` is given, else `<application>`. */
|
|
28
|
+
deploymentGroup?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Revision location — an S3 bundle (typically `"@publish.uri"`), a GitHub
|
|
31
|
+
* reference, or a bare wired string (e.g. `"@Seed.templateUri"`, as the
|
|
32
|
+
* Neo4j pilot passes) treated as an S3 URI shorthand.
|
|
33
|
+
*/
|
|
34
|
+
revision: {
|
|
35
|
+
type: "s3";
|
|
36
|
+
uri: string;
|
|
37
|
+
} | {
|
|
38
|
+
type: "github";
|
|
39
|
+
repository: string;
|
|
40
|
+
commitId: string;
|
|
41
|
+
} | string;
|
|
42
|
+
/** Deployment strategy. Default: "in-place". */
|
|
43
|
+
strategy?: "in-place" | "blue-green";
|
|
44
|
+
/** Cluster-relative instance index, for a per-instance fan-out step (e.g. one Neo4j node). Folded into the deployment group name when `deploymentGroup` is not given explicitly. */
|
|
45
|
+
instance?: number;
|
|
46
|
+
}
|
|
47
|
+
export interface CodeDeployOutput {
|
|
48
|
+
/** CodeDeploy deployment id, for polling terminal status. */
|
|
49
|
+
deploymentId: string;
|
|
50
|
+
/** Terminal deployment status once complete (`Succeeded`, `Failed`, `Stopped`). */
|
|
51
|
+
status: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Deploy a revision to a host (fleet) via AWS CodeDeploy: create the
|
|
55
|
+
* deployment, then wait for a terminal status. Rollback re-invokes
|
|
56
|
+
* `stopAndRollback` against the deployment id this step created (captured in
|
|
57
|
+
* a closure-scoped map keyed by application/deploymentGroup, since the
|
|
58
|
+
* driver's saga rollback calls `rollback(ctx, sameInput)` rather than passing
|
|
59
|
+
* `run`'s output) — riding CodeDeploy's own native automatic rollback to the
|
|
60
|
+
* last known-good revision rather than a chant-scripted compensation, the
|
|
61
|
+
* "auto" rollback style the Neo4j pilot's docs comment contrasts with the
|
|
62
|
+
* ALB/ECS pilot's component-declared one.
|
|
63
|
+
*/
|
|
64
|
+
export declare function createCodeDeployCapability(executor?: CloudExecutor): Capability<CodeDeployInput, CodeDeployOutput>;
|
|
65
|
+
/** Default `code-deploy` capability, backed by the real `CloudExecutor`. */
|
|
66
|
+
export declare const codeDeployCapability: Capability<CodeDeployInput, CodeDeployOutput>;
|
|
67
|
+
export interface CopyToHostInput {
|
|
68
|
+
/** Source path (local, or archive-relative reference). */
|
|
69
|
+
from: string;
|
|
70
|
+
/** Target host (SSM instance id, hostname, or host group). */
|
|
71
|
+
host: string;
|
|
72
|
+
/** Destination path on the host. */
|
|
73
|
+
to: string;
|
|
74
|
+
}
|
|
75
|
+
export interface CopyToHostOutput {
|
|
76
|
+
/** Number of bytes copied. */
|
|
77
|
+
bytesCopied: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Copy a file to a host via SSM Run Command: the host pulls `from` (an S3 URI)
|
|
81
|
+
* to `to` with `aws s3 cp`, then `stat`s the result for the byte count. `from`
|
|
82
|
+
* must be reachable from the host (typically a prior `publish-artifact`'s URI).
|
|
83
|
+
*/
|
|
84
|
+
export declare function createCopyToHostCapability(executor?: CloudExecutor): Capability<CopyToHostInput, CopyToHostOutput>;
|
|
85
|
+
/** Default `copy-to-host` capability, backed by the real `CloudExecutor`. */
|
|
86
|
+
export declare const copyToHostCapability: Capability<CopyToHostInput, CopyToHostOutput>;
|
|
87
|
+
export interface RemoteExecInput {
|
|
88
|
+
/** Target host (SSM instance id, hostname, or host group). */
|
|
89
|
+
host: string;
|
|
90
|
+
/** Command to run on the host. */
|
|
91
|
+
command: string;
|
|
92
|
+
/** Working directory on the host. */
|
|
93
|
+
cwd?: string;
|
|
94
|
+
/** Transport. Default: "ssm". */
|
|
95
|
+
via?: "ssm" | "ssh";
|
|
96
|
+
}
|
|
97
|
+
export interface RemoteExecOutput {
|
|
98
|
+
/** Process exit code. */
|
|
99
|
+
exitCode: number;
|
|
100
|
+
/** Captured stdout. */
|
|
101
|
+
stdout: string;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Run a command on a remote host via SSM Run Command, waiting for it to finish
|
|
105
|
+
* and returning its stdout + exit code. SSH transport is not yet supported.
|
|
106
|
+
*/
|
|
107
|
+
export declare function createRemoteExecCapability(executor?: CloudExecutor): Capability<RemoteExecInput, RemoteExecOutput>;
|
|
108
|
+
/** Default `remote-exec` capability, backed by the real `CloudExecutor`. */
|
|
109
|
+
export declare const remoteExecCapability: Capability<RemoteExecInput, RemoteExecOutput>;
|
|
110
|
+
//# sourceMappingURL=host-delivery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-delivery.d.ts","sourceRoot":"","sources":["../../src/components/host-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAI5E,MAAM,WAAW,eAAe;IAC9B,oKAAoK;IACpK,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4HAA4H;IAC5H,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC1G,gDAAgD;IAChD,QAAQ,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACrC,oLAAoL;IACpL,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAsBD;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,GAAE,aAAsC,GAC/C,UAAU,CAAC,eAAe,EAAE,gBAAgB,CAAC,CA2B/C;AAED,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,EAAE,UAAU,CAAC,eAAe,EAAE,gBAAgB,CAAgC,CAAC;AAIhH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,GAAE,aAAsC,GAAG,UAAU,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAY1I;AAED,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,EAAE,UAAU,CAAC,eAAe,EAAE,gBAAgB,CAAgC,CAAC;AAIhH,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,GAAE,aAAsC,GAAG,UAAU,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAW1I;AAED,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,EAAE,UAAU,CAAC,eAAe,EAAE,gBAAgB,CAAgC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The aws lexicon's component/release surface: the AWS-leaf capabilities, their
|
|
3
|
+
* typed step-builders, the injectable aws `CloudExecutor`, and the
|
|
4
|
+
* `awsCapabilityPlugin` core loads when a project declares `lexicons: ["aws"]`.
|
|
5
|
+
* Component authors import the AWS verbs' builders from here
|
|
6
|
+
* (`@intentius/chant-lexicon-aws/components`), the way agnostic verbs come from
|
|
7
|
+
* `@intentius/chant/components`.
|
|
8
|
+
*/
|
|
9
|
+
export { awsCapabilityPlugin, AWS_VERB_FAMILIES } from "./capability-plugin.js";
|
|
10
|
+
export * from "./builders.js";
|
|
11
|
+
export * from "./config-bom.js";
|
|
12
|
+
export * from "./apply.js";
|
|
13
|
+
export * from "./job-submission.js";
|
|
14
|
+
export * from "./host-delivery.js";
|
|
15
|
+
export * from "./safety.js";
|
|
16
|
+
export * from "./wait-aws.js";
|
|
17
|
+
export * from "./publish.js";
|
|
18
|
+
export * from "./cloud-executor.js";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
|