geni-bioinfo 0.1.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 (58) hide show
  1. package/dist/auth.d.ts +8 -0
  2. package/dist/auth.js +76 -0
  3. package/dist/aws/clients.d.ts +18 -0
  4. package/dist/aws/clients.js +34 -0
  5. package/dist/commands/activate.d.ts +2 -0
  6. package/dist/commands/activate.js +20 -0
  7. package/dist/commands/activity-log.d.ts +2 -0
  8. package/dist/commands/activity-log.js +31 -0
  9. package/dist/commands/api-token.d.ts +2 -0
  10. package/dist/commands/api-token.js +96 -0
  11. package/dist/commands/auth.d.ts +2 -0
  12. package/dist/commands/auth.js +55 -0
  13. package/dist/commands/engine.d.ts +2 -0
  14. package/dist/commands/engine.js +83 -0
  15. package/dist/commands/environment.d.ts +2 -0
  16. package/dist/commands/environment.js +69 -0
  17. package/dist/commands/image.d.ts +2 -0
  18. package/dist/commands/image.js +40 -0
  19. package/dist/commands/instance.d.ts +2 -0
  20. package/dist/commands/instance.js +39 -0
  21. package/dist/commands/log.d.ts +3 -0
  22. package/dist/commands/log.js +43 -0
  23. package/dist/commands/login.d.ts +2 -0
  24. package/dist/commands/login.js +24 -0
  25. package/dist/commands/plugin.d.ts +2 -0
  26. package/dist/commands/plugin.js +80 -0
  27. package/dist/commands/queue.d.ts +2 -0
  28. package/dist/commands/queue.js +74 -0
  29. package/dist/commands/registry.d.ts +2 -0
  30. package/dist/commands/registry.js +72 -0
  31. package/dist/commands/setup/create.d.ts +2 -0
  32. package/dist/commands/setup/create.js +254 -0
  33. package/dist/commands/setup/delete.d.ts +2 -0
  34. package/dist/commands/setup/delete.js +97 -0
  35. package/dist/commands/setup/status.d.ts +2 -0
  36. package/dist/commands/setup/status.js +46 -0
  37. package/dist/commands/setup.d.ts +2 -0
  38. package/dist/commands/setup.js +13 -0
  39. package/dist/commands/storage.d.ts +2 -0
  40. package/dist/commands/storage.js +67 -0
  41. package/dist/commands/submission.d.ts +2 -0
  42. package/dist/commands/submission.js +87 -0
  43. package/dist/commands/task.d.ts +2 -0
  44. package/dist/commands/task.js +21 -0
  45. package/dist/commands/tenant.d.ts +2 -0
  46. package/dist/commands/tenant.js +68 -0
  47. package/dist/commands/user.d.ts +2 -0
  48. package/dist/commands/user.js +82 -0
  49. package/dist/commands/workflow.d.ts +2 -0
  50. package/dist/commands/workflow.js +80 -0
  51. package/dist/errors.d.ts +38 -0
  52. package/dist/errors.js +194 -0
  53. package/dist/format.d.ts +22 -0
  54. package/dist/format.js +155 -0
  55. package/dist/index.d.ts +2 -0
  56. package/dist/index.js +91 -0
  57. package/dist/templates/setup.yaml +503 -0
  58. package/package.json +49 -0
@@ -0,0 +1,503 @@
1
+ AWSTemplateFormatVersion: '2010-09-09'
2
+ Description: GENI - Cross-account IAM setup
3
+
4
+ Parameters:
5
+ GeniAccount:
6
+ Type: String
7
+ Description: AWS account ID of the GENI account that will assume the cross-account role
8
+
9
+ Resources:
10
+ GeniCrossAccountRole:
11
+ Type: AWS::IAM::Role
12
+ Properties:
13
+ RoleName: GeniCrossAccountRole
14
+ Description: Cross-account role for GENI to manage CloudFormation stacks
15
+ AssumeRolePolicyDocument:
16
+ Version: '2012-10-17'
17
+ Statement:
18
+ - Effect: Allow
19
+ Principal:
20
+ AWS: !Sub 'arn:aws:iam::${GeniAccount}:root'
21
+ Action: sts:AssumeRole
22
+ Tags:
23
+ - Key: CreatedBy
24
+ Value: GENI
25
+ - Key: GeniName
26
+ Value: GeniCrossAccountRole
27
+ - Key: GeniStack
28
+ Value: !Sub '${AWS::StackName}'
29
+
30
+ GeniCrossAccountPolicy:
31
+ Type: AWS::IAM::ManagedPolicy
32
+ Properties:
33
+ ManagedPolicyName: GeniCrossAccountPolicy
34
+ Description: Permissions policy for GENI app role (CloudFormation management)
35
+ Roles:
36
+ - !Ref GeniCrossAccountRole
37
+ PolicyDocument: !Sub |
38
+ {
39
+ "Version": "2012-10-17",
40
+ "Statement": [
41
+ {
42
+ "Sid": "CFNCreateWithTag",
43
+ "Effect": "Allow",
44
+ "Action": ["cloudformation:CreateStack"],
45
+ "Resource": "*",
46
+ "Condition": {
47
+ "StringEquals": { "aws:RequestTag/CreatedBy": "GENI" }
48
+ }
49
+ },
50
+ {
51
+ "Sid": "CFNManageTagged",
52
+ "Effect": "Allow",
53
+ "Action": [
54
+ "cloudformation:UpdateStack",
55
+ "cloudformation:DeleteStack",
56
+ "cloudformation:TagResource"
57
+ ],
58
+ "Resource": "*",
59
+ "Condition": {
60
+ "StringEquals": { "aws:ResourceTag/CreatedBy": "GENI" }
61
+ }
62
+ },
63
+ {
64
+ "Sid": "CFNReadOnly",
65
+ "Effect": "Allow",
66
+ "Action": [
67
+ "cloudformation:DescribeStacks",
68
+ "cloudformation:DescribeStackEvents",
69
+ "cloudformation:GetTemplate",
70
+ "cloudformation:ListStacks"
71
+ ],
72
+ "Resource": "*"
73
+ },
74
+ {
75
+ "Sid": "EC2DescribeAZs",
76
+ "Effect": "Allow",
77
+ "Action": ["ec2:DescribeAvailabilityZones"],
78
+ "Resource": "*"
79
+ },
80
+ {
81
+ "Sid": "IAMPassCfnServiceRole",
82
+ "Effect": "Allow",
83
+ "Action": ["iam:PassRole"],
84
+ "Resource": "arn:aws:iam::*:role/GeniCfnServiceRole"
85
+ },
86
+ {
87
+ "Sid": "BatchOperations",
88
+ "Effect": "Allow",
89
+ "Action": ["batch:SubmitJob", "batch:DescribeJobs", "batch:TerminateJob"],
90
+ "Resource": "*"
91
+ },
92
+ {
93
+ "Sid": "ECSDescribe",
94
+ "Effect": "Allow",
95
+ "Action": ["ecs:DescribeContainerInstances"],
96
+ "Resource": "*"
97
+ },
98
+ {
99
+ "Sid": "EC2Describe",
100
+ "Effect": "Allow",
101
+ "Action": [
102
+ "ec2:DescribeInstances",
103
+ "ec2:DescribeVolumes",
104
+ "ec2:DescribeSpotPriceHistory"
105
+ ],
106
+ "Resource": "*"
107
+ },
108
+ {
109
+ "Sid": "LogsRead",
110
+ "Effect": "Allow",
111
+ "Action": ["logs:GetLogEvents", "logs:DescribeLogStreams"],
112
+ "Resource": "arn:aws:logs:*:*:log-group:/aws/batch/job/*"
113
+ },
114
+ {
115
+ "Sid": "SQSPoll",
116
+ "Effect": "Allow",
117
+ "Action": [
118
+ "sqs:ReceiveMessage",
119
+ "sqs:DeleteMessage",
120
+ "sqs:GetQueueAttributes"
121
+ ],
122
+ "Resource": [
123
+ "arn:aws:sqs:*:*:geni-queue-batch-*",
124
+ "arn:aws:sqs:*:*:geni-queue-instance-*"
125
+ ]
126
+ }
127
+ ]
128
+ }
129
+
130
+ GeniCfnServiceRole:
131
+ Type: AWS::IAM::Role
132
+ Properties:
133
+ RoleName: GeniCfnServiceRole
134
+ Description: CloudFormation service role for GENI resource provisioning
135
+ AssumeRolePolicyDocument:
136
+ Version: '2012-10-17'
137
+ Statement:
138
+ - Effect: Allow
139
+ Principal:
140
+ Service: cloudformation.amazonaws.com
141
+ Action: sts:AssumeRole
142
+ Tags:
143
+ - Key: CreatedBy
144
+ Value: GENI
145
+ - Key: GeniName
146
+ Value: GeniCfnServiceRole
147
+ - Key: GeniStack
148
+ Value: !Sub '${AWS::StackName}'
149
+
150
+ GeniCfnServicePolicy:
151
+ Type: AWS::IAM::ManagedPolicy
152
+ Properties:
153
+ ManagedPolicyName: GeniCfnServicePolicy
154
+ Description: Permissions policy for GENI CloudFormation service role (resource creation)
155
+ Roles:
156
+ - !Ref GeniCfnServiceRole
157
+ PolicyDocument:
158
+ Version: '2012-10-17'
159
+ Statement:
160
+ - Sid: S3Manage
161
+ Effect: Allow
162
+ Action:
163
+ - s3:CreateBucket
164
+ - s3:DeleteBucket
165
+ - s3:PutBucketTagging
166
+ - s3:PutBucketPolicy
167
+ - s3:DeleteBucketPolicy
168
+ Resource: arn:aws:s3:::geni-*
169
+ - Sid: S3ReadOnly
170
+ Effect: Allow
171
+ Action:
172
+ - s3:ListBucket
173
+ - s3:GetObject
174
+ - s3:GetBucketLocation
175
+ - s3:GetBucketTagging
176
+ - s3:PutObject
177
+ - s3:DeleteObject
178
+ Resource:
179
+ - arn:aws:s3:::geni-*
180
+ - arn:aws:s3:::geni-*/*
181
+ - Sid: IAMManage
182
+ Effect: Allow
183
+ Action:
184
+ - iam:CreateRole
185
+ - iam:CreatePolicy
186
+ - iam:CreateInstanceProfile
187
+ - iam:TagRole
188
+ - iam:TagPolicy
189
+ - iam:TagInstanceProfile
190
+ - iam:AddRoleToInstanceProfile
191
+ - iam:RemoveRoleFromInstanceProfile
192
+ - iam:DeleteRole
193
+ - iam:UpdateRole
194
+ - iam:UpdateAssumeRolePolicy
195
+ - iam:AttachRolePolicy
196
+ - iam:DetachRolePolicy
197
+ - iam:PutRolePolicy
198
+ - iam:DeleteRolePolicy
199
+ - iam:PassRole
200
+ - iam:DeletePolicy
201
+ - iam:CreatePolicyVersion
202
+ - iam:DeletePolicyVersion
203
+ - iam:DeleteInstanceProfile
204
+ Resource: '*'
205
+ - Sid: IAMReadOnly
206
+ Effect: Allow
207
+ Action:
208
+ - iam:ListRoles
209
+ - iam:ListPolicies
210
+ - iam:ListPolicyVersions
211
+ - iam:ListAttachedRolePolicies
212
+ - iam:ListRolePolicies
213
+ - iam:ListInstanceProfiles
214
+ - iam:ListInstanceProfilesForRole
215
+ - iam:GetRole
216
+ - iam:GetRolePolicy
217
+ - iam:GetPolicy
218
+ - iam:GetPolicyVersion
219
+ - iam:GetInstanceProfile
220
+ Resource: '*'
221
+ - Sid: IAMServiceLinkedRoles
222
+ Effect: Allow
223
+ Action: iam:CreateServiceLinkedRole
224
+ Resource: '*'
225
+ Condition:
226
+ StringEquals:
227
+ iam:AWSServiceName:
228
+ - elasticloadbalancing.amazonaws.com
229
+ - batch.amazonaws.com
230
+ - ecs.amazonaws.com
231
+
232
+ GeniCfnComputePolicy:
233
+ Type: AWS::IAM::ManagedPolicy
234
+ Properties:
235
+ ManagedPolicyName: GeniCfnComputePolicy
236
+ Description: Compute permissions for GENI CloudFormation service role
237
+ Roles:
238
+ - !Ref GeniCfnServiceRole
239
+ PolicyDocument:
240
+ Version: '2012-10-17'
241
+ Statement:
242
+ - Sid: BatchManage
243
+ Effect: Allow
244
+ Action:
245
+ - batch:CreateComputeEnvironment
246
+ - batch:UpdateComputeEnvironment
247
+ - batch:DeleteComputeEnvironment
248
+ - batch:CreateJobQueue
249
+ - batch:UpdateJobQueue
250
+ - batch:DeleteJobQueue
251
+ - batch:RegisterJobDefinition
252
+ - batch:DeregisterJobDefinition
253
+ - batch:TagResource
254
+ - batch:SubmitJob
255
+ - batch:TerminateJob
256
+ - batch:CancelJob
257
+ Resource: '*'
258
+ - Sid: BatchReadOnly
259
+ Effect: Allow
260
+ Action:
261
+ - batch:DescribeComputeEnvironments
262
+ - batch:DescribeJobQueues
263
+ - batch:DescribeJobDefinitions
264
+ - batch:DescribeJobs
265
+ - batch:ListJobs
266
+ - batch:ListTagsForResource
267
+ Resource: '*'
268
+ - Sid: EC2Manage
269
+ Effect: Allow
270
+ Action:
271
+ - ec2:CreateLaunchTemplate
272
+ - ec2:DeleteLaunchTemplate
273
+ - ec2:RunInstances
274
+ - ec2:TerminateInstances
275
+ - ec2:CreateTags
276
+ Resource: '*'
277
+ - Sid: EC2ReadOnly
278
+ Effect: Allow
279
+ Action:
280
+ - ec2:DescribeAccountAttributes
281
+ - ec2:DescribeInstances
282
+ - ec2:DescribeInstanceTypes
283
+ - ec2:DescribeInstanceAttribute
284
+ - ec2:DescribeInstanceStatus
285
+ - ec2:DescribeLaunchTemplates
286
+ - ec2:DescribeLaunchTemplateVersions
287
+ - ec2:DescribeSecurityGroups
288
+ - ec2:DescribeSubnets
289
+ - ec2:DescribeVpcs
290
+ - ec2:DescribeKeyPairs
291
+ - ec2:DescribeImages
292
+ - ec2:DescribeAvailabilityZones
293
+ - ec2:DescribeNatGateways
294
+ - ec2:DescribeRouteTables
295
+ - ec2:DescribeInternetGateways
296
+ - ec2:DescribeAddresses
297
+ - ec2:DescribeVpcEndpoints
298
+ Resource: '*'
299
+ - Sid: ECSManage
300
+ Effect: Allow
301
+ Action:
302
+ - ecs:CreateCluster
303
+ - ecs:DeleteCluster
304
+ - ecs:RegisterTaskDefinition
305
+ - ecs:DeregisterTaskDefinition
306
+ - ecs:CreateService
307
+ - ecs:DeleteService
308
+ - ecs:UpdateService
309
+ - ecs:TagResource
310
+ - ecs:UntagResource
311
+ Resource: '*'
312
+ - Sid: ECSReadOnly
313
+ Effect: Allow
314
+ Action:
315
+ - ecs:DescribeClusters
316
+ - ecs:DescribeContainerInstances
317
+ - ecs:DescribeServices
318
+ - ecs:DescribeTaskDefinition
319
+ - ecs:DescribeTasks
320
+ - ecs:ListClusters
321
+ - ecs:ListServices
322
+ - ecs:ListTagsForResource
323
+ - ecs:ListTaskDefinitions
324
+ Resource: '*'
325
+ - Sid: AutoScalingManage
326
+ Effect: Allow
327
+ Action:
328
+ - autoscaling:CreateAutoScalingGroup
329
+ - autoscaling:UpdateAutoScalingGroup
330
+ - autoscaling:DeleteAutoScalingGroup
331
+ - autoscaling:CreateLaunchConfiguration
332
+ - autoscaling:DeleteLaunchConfiguration
333
+ - autoscaling:DescribeAutoScalingGroups
334
+ - autoscaling:DescribeLaunchConfigurations
335
+ - autoscaling:CreateOrUpdateTags
336
+ Resource: '*'
337
+
338
+ GeniCfnNetworkPolicy:
339
+ Type: AWS::IAM::ManagedPolicy
340
+ Properties:
341
+ ManagedPolicyName: GeniCfnNetworkPolicy
342
+ Description: Networking permissions for GENI CloudFormation service role
343
+ Roles:
344
+ - !Ref GeniCfnServiceRole
345
+ PolicyDocument:
346
+ Version: '2012-10-17'
347
+ Statement:
348
+ - Sid: EC2NetworkManage
349
+ Effect: Allow
350
+ Action:
351
+ - ec2:CreateVpc
352
+ - ec2:DeleteVpc
353
+ - ec2:ModifyVpcAttribute
354
+ - ec2:CreateSubnet
355
+ - ec2:DeleteSubnet
356
+ - ec2:ModifySubnetAttribute
357
+ - ec2:CreateInternetGateway
358
+ - ec2:DeleteInternetGateway
359
+ - ec2:AttachInternetGateway
360
+ - ec2:DetachInternetGateway
361
+ - ec2:CreateNatGateway
362
+ - ec2:DeleteNatGateway
363
+ - ec2:CreateRouteTable
364
+ - ec2:DeleteRouteTable
365
+ - ec2:CreateRoute
366
+ - ec2:DeleteRoute
367
+ - ec2:AssociateRouteTable
368
+ - ec2:DisassociateRouteTable
369
+ - ec2:CreateSecurityGroup
370
+ - ec2:DeleteSecurityGroup
371
+ - ec2:AuthorizeSecurityGroupEgress
372
+ - ec2:AuthorizeSecurityGroupIngress
373
+ - ec2:RevokeSecurityGroupEgress
374
+ - ec2:RevokeSecurityGroupIngress
375
+ - ec2:AllocateAddress
376
+ - ec2:ReleaseAddress
377
+ - ec2:CreateVpcEndpoint
378
+ - ec2:DeleteVpcEndpoints
379
+ - ec2:ModifyVpcEndpoint
380
+ Resource: '*'
381
+ - Sid: ELBManage
382
+ Effect: Allow
383
+ Action:
384
+ - elasticloadbalancing:CreateLoadBalancer
385
+ - elasticloadbalancing:DeleteLoadBalancer
386
+ - elasticloadbalancing:ModifyLoadBalancerAttributes
387
+ - elasticloadbalancing:CreateTargetGroup
388
+ - elasticloadbalancing:DeleteTargetGroup
389
+ - elasticloadbalancing:ModifyTargetGroup
390
+ - elasticloadbalancing:ModifyTargetGroupAttributes
391
+ - elasticloadbalancing:CreateListener
392
+ - elasticloadbalancing:DeleteListener
393
+ - elasticloadbalancing:ModifyListener
394
+ - elasticloadbalancing:RegisterTargets
395
+ - elasticloadbalancing:DeregisterTargets
396
+ - elasticloadbalancing:AddTags
397
+ - elasticloadbalancing:RemoveTags
398
+ Resource: '*'
399
+ - Sid: ELBReadOnly
400
+ Effect: Allow
401
+ Action:
402
+ - elasticloadbalancing:DescribeLoadBalancers
403
+ - elasticloadbalancing:DescribeLoadBalancerAttributes
404
+ - elasticloadbalancing:DescribeTargetGroups
405
+ - elasticloadbalancing:DescribeTargetGroupAttributes
406
+ - elasticloadbalancing:DescribeTargetHealth
407
+ - elasticloadbalancing:DescribeListeners
408
+ - elasticloadbalancing:DescribeTags
409
+ Resource: '*'
410
+ - Sid: Route53Manage
411
+ Effect: Allow
412
+ Action:
413
+ - route53:CreateHostedZone
414
+ - route53:DeleteHostedZone
415
+ - route53:AssociateVPCWithHostedZone
416
+ - route53:DisassociateVPCFromHostedZone
417
+ - route53:ChangeResourceRecordSets
418
+ - route53:ChangeTagsForResource
419
+ Resource: '*'
420
+ - Sid: Route53ReadOnly
421
+ Effect: Allow
422
+ Action:
423
+ - route53:GetHostedZone
424
+ - route53:GetChange
425
+ - route53:ListHostedZones
426
+ - route53:ListQueryLoggingConfigs
427
+ - route53:ListResourceRecordSets
428
+ - route53:ListTagsForResource
429
+ Resource: '*'
430
+
431
+ GeniCfnEventsPolicy:
432
+ Type: AWS::IAM::ManagedPolicy
433
+ Properties:
434
+ ManagedPolicyName: GeniCfnEventsPolicy
435
+ Description: Logs, queue, and event permissions for GENI CloudFormation service role
436
+ Roles:
437
+ - !Ref GeniCfnServiceRole
438
+ PolicyDocument:
439
+ Version: '2012-10-17'
440
+ Statement:
441
+ - Sid: ECRReadOnly
442
+ Effect: Allow
443
+ Action:
444
+ - ecr:BatchCheckLayerAvailability
445
+ - ecr:BatchGetImage
446
+ - ecr:DescribeImages
447
+ - ecr:DescribeRepositories
448
+ - ecr:GetAuthorizationToken
449
+ - ecr:GetDownloadUrlForLayer
450
+ - ecr:ListImages
451
+ - ecr:ListTagsForResource
452
+ Resource: '*'
453
+ - Sid: LogsManage
454
+ Effect: Allow
455
+ Action:
456
+ - logs:CreateLogGroup
457
+ - logs:DeleteLogGroup
458
+ - logs:CreateLogStream
459
+ - logs:PutLogEvents
460
+ - logs:PutRetentionPolicy
461
+ - logs:DeleteRetentionPolicy
462
+ - logs:DescribeLogGroups
463
+ - logs:DescribeLogStreams
464
+ - logs:GetLogEvents
465
+ - logs:TagResource
466
+ - logs:UntagResource
467
+ - logs:ListTagsForResource
468
+ Resource: '*'
469
+ - Sid: SQSManage
470
+ Effect: Allow
471
+ Action:
472
+ - sqs:CreateQueue
473
+ - sqs:DeleteQueue
474
+ - sqs:SetQueueAttributes
475
+ - sqs:GetQueueAttributes
476
+ - sqs:GetQueueUrl
477
+ - sqs:AddPermission
478
+ - sqs:RemovePermission
479
+ - sqs:TagQueue
480
+ Resource: "arn:aws:sqs:*:*:geni-queue-*"
481
+ - Sid: EventBridgeManage
482
+ Effect: Allow
483
+ Action:
484
+ - events:PutRule
485
+ - events:PutTargets
486
+ - events:DeleteRule
487
+ - events:RemoveTargets
488
+ - events:DescribeRule
489
+ - events:TagResource
490
+ Resource: '*'
491
+ - Sid: EventBridgeCrossAccount
492
+ Effect: Allow
493
+ Action:
494
+ - events:PutEvents
495
+ Resource:
496
+ - arn:aws:events:*:*:event-bus/geni-batch-events
497
+ - arn:aws:events:*:*:event-bus/geni-ec2-events
498
+
499
+ Outputs:
500
+ CrossAccountRoleArn:
501
+ Value: !GetAtt GeniCrossAccountRole.Arn
502
+ CfnServiceRoleArn:
503
+ Value: !GetAtt GeniCfnServiceRole.Arn
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "geni-bioinfo",
3
+ "version": "0.1.0",
4
+ "description": "CLI for GENI — a control plane for running Nextflow bioinformatics pipelines on AWS",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/wdesouza/geni-workflows.git",
9
+ "directory": "cli"
10
+ },
11
+ "homepage": "https://github.com/wdesouza/geni-workflows#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/wdesouza/geni-workflows/issues"
14
+ },
15
+ "engines": {
16
+ "node": ">=18"
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "bin": {
22
+ "geni": "dist/index.js"
23
+ },
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc && mkdir -p dist/templates && cp src/templates/*.yaml dist/templates/ && chmod +x dist/index.js",
29
+ "prepare": "npm run build",
30
+ "dev": "tsc -w",
31
+ "check": "tsc --noEmit",
32
+ "start": "node dist/index.js"
33
+ },
34
+ "dependencies": {
35
+ "@aws-sdk/client-cloudformation": "^3.800.0",
36
+ "@aws-sdk/client-iam": "^3.800.0",
37
+ "@aws-sdk/client-s3": "^3.800.0",
38
+ "@aws-sdk/client-sts": "^3.800.0",
39
+ "@aws-sdk/credential-providers": "^3.800.0",
40
+ "cli-table3": "^0.6.5",
41
+ "commander": "^12.1.0",
42
+ "form-data": "^4.0.1"
43
+ },
44
+ "devDependencies": {
45
+ "@types/form-data": "^2.5.0",
46
+ "@types/node": "^24.10.1",
47
+ "typescript": "~5.9.3"
48
+ }
49
+ }