@stacksjs/ts-cloud-aws-types 0.1.1

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/src/connect.ts ADDED
@@ -0,0 +1,243 @@
1
+ /**
2
+ * AWS Amazon Connect CloudFormation Types
3
+ */
4
+
5
+ import type { ResourceBase, Tags } from './common'
6
+
7
+ /**
8
+ * Amazon Connect Instance
9
+ */
10
+ export interface ConnectInstance extends ResourceBase {
11
+ Type: 'AWS::Connect::Instance'
12
+ Properties: {
13
+ InstanceAlias: string
14
+ IdentityManagementType: 'SAML' | 'CONNECT_MANAGED' | 'EXISTING_DIRECTORY'
15
+ Attributes: {
16
+ InboundCalls: boolean
17
+ OutboundCalls: boolean
18
+ ContactflowLogs?: boolean
19
+ ContactLens?: boolean
20
+ AutoResolveBestVoices?: boolean
21
+ UseCustomTTSVoices?: boolean
22
+ EarlyMedia?: boolean
23
+ }
24
+ DirectoryId?: string
25
+ Tags?: Tags
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Amazon Connect Hours of Operation
31
+ */
32
+ export interface ConnectHoursOfOperation extends ResourceBase {
33
+ Type: 'AWS::Connect::HoursOfOperation'
34
+ Properties: {
35
+ InstanceArn: string
36
+ Name: string
37
+ TimeZone: string
38
+ Config: Array<{
39
+ Day: 'SUNDAY' | 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY'
40
+ StartTime: { Hours: number; Minutes: number }
41
+ EndTime: { Hours: number; Minutes: number }
42
+ }>
43
+ Description?: string
44
+ Tags?: Tags
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Amazon Connect Queue
50
+ */
51
+ export interface ConnectQueue extends ResourceBase {
52
+ Type: 'AWS::Connect::Queue'
53
+ Properties: {
54
+ InstanceArn: string
55
+ Name: string
56
+ HoursOfOperationArn: string
57
+ Description?: string
58
+ MaxContacts?: number
59
+ OutboundCallerConfig?: {
60
+ OutboundCallerIdName?: string
61
+ OutboundCallerIdNumberId?: string
62
+ OutboundFlowId?: string
63
+ }
64
+ QuickConnectArns?: string[]
65
+ Status?: 'ENABLED' | 'DISABLED'
66
+ Tags?: Tags
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Amazon Connect Contact Flow
72
+ */
73
+ export interface ConnectContactFlow extends ResourceBase {
74
+ Type: 'AWS::Connect::ContactFlow'
75
+ Properties: {
76
+ InstanceArn: string
77
+ Name: string
78
+ Type: 'CONTACT_FLOW' | 'CUSTOMER_QUEUE' | 'CUSTOMER_HOLD' | 'CUSTOMER_WHISPER' | 'AGENT_HOLD' | 'AGENT_WHISPER' | 'OUTBOUND_WHISPER' | 'AGENT_TRANSFER' | 'QUEUE_TRANSFER'
79
+ Content: string
80
+ Description?: string
81
+ State?: 'ACTIVE' | 'ARCHIVED'
82
+ Tags?: Tags
83
+ }
84
+ }
85
+
86
+ /**
87
+ * Amazon Connect Contact Flow Module
88
+ */
89
+ export interface ConnectContactFlowModule extends ResourceBase {
90
+ Type: 'AWS::Connect::ContactFlowModule'
91
+ Properties: {
92
+ InstanceArn: string
93
+ Name: string
94
+ Content: string
95
+ Description?: string
96
+ State?: 'ACTIVE' | 'ARCHIVED'
97
+ Tags?: Tags
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Amazon Connect Phone Number
103
+ */
104
+ export interface ConnectPhoneNumber extends ResourceBase {
105
+ Type: 'AWS::Connect::PhoneNumber'
106
+ Properties: {
107
+ TargetArn: string
108
+ Type: 'TOLL_FREE' | 'DID' | 'UIFN' | 'SHARED' | 'THIRD_PARTY_TF' | 'THIRD_PARTY_DID'
109
+ CountryCode: string
110
+ Description?: string
111
+ Prefix?: string
112
+ Tags?: Tags
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Amazon Connect Routing Profile
118
+ */
119
+ export interface ConnectRoutingProfile extends ResourceBase {
120
+ Type: 'AWS::Connect::RoutingProfile'
121
+ Properties: {
122
+ InstanceArn: string
123
+ Name: string
124
+ DefaultOutboundQueueArn: string
125
+ MediaConcurrencies: Array<{
126
+ Channel: 'VOICE' | 'CHAT' | 'TASK'
127
+ Concurrency: number
128
+ CrossChannelBehavior?: {
129
+ BehaviorType: 'ROUTE_CURRENT_CHANNEL_ONLY' | 'ROUTE_ANY_CHANNEL'
130
+ }
131
+ }>
132
+ Description?: string
133
+ QueueConfigs?: Array<{
134
+ QueueReference: {
135
+ QueueArn: string
136
+ Channel: 'VOICE' | 'CHAT' | 'TASK'
137
+ }
138
+ Priority: number
139
+ Delay: number
140
+ }>
141
+ Tags?: Tags
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Amazon Connect User
147
+ */
148
+ export interface ConnectUser extends ResourceBase {
149
+ Type: 'AWS::Connect::User'
150
+ Properties: {
151
+ InstanceArn: string
152
+ Username: string
153
+ PhoneConfig: {
154
+ PhoneType: 'SOFT_PHONE' | 'DESK_PHONE'
155
+ AutoAccept?: boolean
156
+ AfterContactWorkTimeLimit?: number
157
+ DeskPhoneNumber?: string
158
+ }
159
+ RoutingProfileArn: string
160
+ SecurityProfileArns: string[]
161
+ DirectoryUserId?: string
162
+ HierarchyGroupArn?: string
163
+ IdentityInfo?: {
164
+ Email?: string
165
+ FirstName?: string
166
+ LastName?: string
167
+ Mobile?: string
168
+ SecondaryEmail?: string
169
+ }
170
+ Password?: string
171
+ Tags?: Tags
172
+ }
173
+ }
174
+
175
+ /**
176
+ * Amazon Connect Quick Connect
177
+ */
178
+ export interface ConnectQuickConnect extends ResourceBase {
179
+ Type: 'AWS::Connect::QuickConnect'
180
+ Properties: {
181
+ InstanceArn: string
182
+ Name: string
183
+ QuickConnectConfig: {
184
+ QuickConnectType: 'USER' | 'QUEUE' | 'PHONE_NUMBER'
185
+ UserConfig?: {
186
+ ContactFlowArn: string
187
+ UserArn: string
188
+ }
189
+ QueueConfig?: {
190
+ ContactFlowArn: string
191
+ QueueArn: string
192
+ }
193
+ PhoneConfig?: {
194
+ PhoneNumber: string
195
+ }
196
+ }
197
+ Description?: string
198
+ Tags?: Tags
199
+ }
200
+ }
201
+
202
+ /**
203
+ * Amazon Connect Integration Association
204
+ */
205
+ export interface ConnectIntegrationAssociation extends ResourceBase {
206
+ Type: 'AWS::Connect::IntegrationAssociation'
207
+ Properties: {
208
+ InstanceId: string
209
+ IntegrationArn: string
210
+ IntegrationType: 'LEX_BOT' | 'LAMBDA_FUNCTION' | 'APPLICATION'
211
+ }
212
+ }
213
+
214
+ /**
215
+ * Amazon Connect Task Template
216
+ */
217
+ export interface ConnectTaskTemplate extends ResourceBase {
218
+ Type: 'AWS::Connect::TaskTemplate'
219
+ Properties: {
220
+ InstanceArn: string
221
+ Name: string
222
+ Fields?: Array<{
223
+ Id: { Name: string }
224
+ Type: 'NAME' | 'DESCRIPTION' | 'SCHEDULED_TIME' | 'QUICK_CONNECT' | 'URL' | 'NUMBER' | 'TEXT' | 'TEXT_AREA' | 'DATE_TIME' | 'BOOLEAN' | 'SINGLE_SELECT' | 'EMAIL'
225
+ Description?: string
226
+ SingleSelectOptions?: string[]
227
+ }>
228
+ Constraints?: {
229
+ RequiredFields?: Array<{ Id: { Name: string } }>
230
+ ReadOnlyFields?: Array<{ Id: { Name: string } }>
231
+ InvisibleFields?: Array<{ Id: { Name: string } }>
232
+ }
233
+ Defaults?: Array<{
234
+ Id: { Name: string }
235
+ DefaultValue: string
236
+ }>
237
+ Description?: string
238
+ ContactFlowArn?: string
239
+ Status?: 'ACTIVE' | 'INACTIVE'
240
+ ClientToken?: string
241
+ Tags?: Tags
242
+ }
243
+ }
@@ -0,0 +1,64 @@
1
+ import type { CloudFormationResource } from './index'
2
+
3
+ export interface DynamoDBKeySchemaElement {
4
+ AttributeName: string
5
+ KeyType: 'HASH' | 'RANGE'
6
+ }
7
+
8
+ export interface DynamoDBProjection {
9
+ ProjectionType: 'ALL' | 'KEYS_ONLY' | 'INCLUDE'
10
+ NonKeyAttributes?: string[]
11
+ }
12
+
13
+ export interface DynamoDBProvisionedThroughput {
14
+ ReadCapacityUnits: number
15
+ WriteCapacityUnits: number
16
+ }
17
+
18
+ export interface DynamoDBGlobalSecondaryIndex {
19
+ IndexName: string
20
+ KeySchema: DynamoDBKeySchemaElement[]
21
+ Projection: DynamoDBProjection
22
+ ProvisionedThroughput?: DynamoDBProvisionedThroughput
23
+ }
24
+
25
+ export interface DynamoDBLocalSecondaryIndex {
26
+ IndexName: string
27
+ KeySchema: DynamoDBKeySchemaElement[]
28
+ Projection: DynamoDBProjection
29
+ }
30
+
31
+ export interface DynamoDBTable extends CloudFormationResource {
32
+ Type: 'AWS::DynamoDB::Table'
33
+ Properties: {
34
+ TableName?: string
35
+ BillingMode?: 'PROVISIONED' | 'PAY_PER_REQUEST'
36
+ AttributeDefinitions: Array<{
37
+ AttributeName: string
38
+ AttributeType: 'S' | 'N' | 'B'
39
+ }>
40
+ KeySchema: DynamoDBKeySchemaElement[]
41
+ ProvisionedThroughput?: DynamoDBProvisionedThroughput
42
+ GlobalSecondaryIndexes?: DynamoDBGlobalSecondaryIndex[]
43
+ LocalSecondaryIndexes?: DynamoDBLocalSecondaryIndex[]
44
+ StreamSpecification?: {
45
+ StreamViewType: 'NEW_IMAGE' | 'OLD_IMAGE' | 'NEW_AND_OLD_IMAGES' | 'KEYS_ONLY'
46
+ }
47
+ SSESpecification?: {
48
+ SSEEnabled: boolean
49
+ SSEType?: 'AES256' | 'KMS'
50
+ KMSMasterKeyId?: string
51
+ }
52
+ PointInTimeRecoverySpecification?: {
53
+ PointInTimeRecoveryEnabled: boolean
54
+ }
55
+ TimeToLiveSpecification?: {
56
+ AttributeName: string
57
+ Enabled: boolean
58
+ }
59
+ Tags?: Array<{
60
+ Key: string
61
+ Value: string
62
+ }>
63
+ }
64
+ }
package/src/ec2.ts ADDED
@@ -0,0 +1,171 @@
1
+ import type { CloudFormationResource } from './index'
2
+
3
+ export interface EC2Instance extends CloudFormationResource {
4
+ Type: 'AWS::EC2::Instance'
5
+ Properties: {
6
+ ImageId: string
7
+ InstanceType: string
8
+ KeyName?: string
9
+ SecurityGroupIds?: string[]
10
+ SubnetId?: string
11
+ IamInstanceProfile?: string
12
+ UserData?: string
13
+ Tags?: Array<{
14
+ Key: string
15
+ Value: string
16
+ }>
17
+ BlockDeviceMappings?: Array<{
18
+ DeviceName: string
19
+ Ebs?: {
20
+ VolumeSize?: number
21
+ VolumeType?: 'gp2' | 'gp3' | 'io1' | 'io2' | 'sc1' | 'st1'
22
+ Encrypted?: boolean
23
+ DeleteOnTermination?: boolean
24
+ }
25
+ }>
26
+ }
27
+ }
28
+
29
+ export interface EC2SecurityGroup extends CloudFormationResource {
30
+ Type: 'AWS::EC2::SecurityGroup'
31
+ Properties: {
32
+ GroupName?: string
33
+ GroupDescription: string
34
+ VpcId?: string
35
+ SecurityGroupIngress?: Array<{
36
+ IpProtocol: string
37
+ FromPort?: number
38
+ ToPort?: number
39
+ CidrIp?: string
40
+ SourceSecurityGroupId?: string
41
+ Description?: string
42
+ }>
43
+ SecurityGroupEgress?: Array<{
44
+ IpProtocol: string
45
+ FromPort?: number
46
+ ToPort?: number
47
+ CidrIp?: string
48
+ DestinationSecurityGroupId?: string
49
+ Description?: string
50
+ }>
51
+ Tags?: Array<{
52
+ Key: string
53
+ Value: string
54
+ }>
55
+ }
56
+ }
57
+
58
+ export interface EC2VPC extends CloudFormationResource {
59
+ Type: 'AWS::EC2::VPC'
60
+ Properties: {
61
+ CidrBlock: string
62
+ EnableDnsHostnames?: boolean
63
+ EnableDnsSupport?: boolean
64
+ Tags?: Array<{
65
+ Key: string
66
+ Value: string
67
+ }>
68
+ }
69
+ }
70
+
71
+ export interface EC2Subnet extends CloudFormationResource {
72
+ Type: 'AWS::EC2::Subnet'
73
+ Properties: {
74
+ VpcId: string | { Ref: string }
75
+ CidrBlock: string
76
+ AvailabilityZone?: string
77
+ MapPublicIpOnLaunch?: boolean
78
+ Tags?: Array<{
79
+ Key: string
80
+ Value: string
81
+ }>
82
+ }
83
+ }
84
+
85
+ export interface EC2InternetGateway extends CloudFormationResource {
86
+ Type: 'AWS::EC2::InternetGateway'
87
+ Properties?: {
88
+ Tags?: Array<{
89
+ Key: string
90
+ Value: string
91
+ }>
92
+ }
93
+ }
94
+
95
+ export interface EC2NatGateway extends CloudFormationResource {
96
+ Type: 'AWS::EC2::NatGateway'
97
+ Properties: {
98
+ AllocationId: string | { 'Fn::GetAtt': [string, string] }
99
+ SubnetId: string | { Ref: string }
100
+ Tags?: Array<{
101
+ Key: string
102
+ Value: string
103
+ }>
104
+ }
105
+ }
106
+
107
+ export interface EC2RouteTable extends CloudFormationResource {
108
+ Type: 'AWS::EC2::RouteTable'
109
+ Properties: {
110
+ VpcId: string | { Ref: string }
111
+ Tags?: Array<{
112
+ Key: string
113
+ Value: string
114
+ }>
115
+ }
116
+ }
117
+
118
+ export interface EC2Route extends CloudFormationResource {
119
+ Type: 'AWS::EC2::Route'
120
+ Properties: {
121
+ RouteTableId: string | { Ref: string }
122
+ DestinationCidrBlock: string
123
+ GatewayId?: string | { Ref: string }
124
+ NatGatewayId?: string | { Ref: string }
125
+ InstanceId?: string | { Ref: string }
126
+ }
127
+ }
128
+
129
+ export interface EC2SubnetRouteTableAssociation extends CloudFormationResource {
130
+ Type: 'AWS::EC2::SubnetRouteTableAssociation'
131
+ Properties: {
132
+ SubnetId: string | { Ref: string }
133
+ RouteTableId: string | { Ref: string }
134
+ }
135
+ }
136
+
137
+ export interface EC2VPCGatewayAttachment extends CloudFormationResource {
138
+ Type: 'AWS::EC2::VPCGatewayAttachment'
139
+ Properties: {
140
+ VpcId: string | { Ref: string }
141
+ InternetGatewayId: string | { Ref: string }
142
+ }
143
+ }
144
+
145
+ export interface EC2EIP extends CloudFormationResource {
146
+ Type: 'AWS::EC2::EIP'
147
+ Properties: {
148
+ Domain?: 'vpc' | 'standard'
149
+ Tags?: Array<{
150
+ Key: string
151
+ Value: string
152
+ }>
153
+ }
154
+ }
155
+
156
+ export interface EC2FlowLog extends CloudFormationResource {
157
+ Type: 'AWS::EC2::FlowLog'
158
+ Properties: {
159
+ ResourceType: 'VPC' | 'Subnet' | 'NetworkInterface'
160
+ ResourceIds: string[] | Array<{ Ref: string }>
161
+ TrafficType: 'ACCEPT' | 'REJECT' | 'ALL'
162
+ LogDestinationType?: 'cloud-watch-logs' | 's3'
163
+ LogDestination?: string
164
+ LogGroupName?: string
165
+ DeliverLogsPermissionArn?: string
166
+ Tags?: Array<{
167
+ Key: string
168
+ Value: string
169
+ }>
170
+ }
171
+ }
package/src/ecr.ts ADDED
@@ -0,0 +1,129 @@
1
+ import type { CloudFormationResource } from './index'
2
+
3
+ /**
4
+ * IAM Principal type for ECR policies
5
+ * Supports AWS accounts, services, or wildcard
6
+ */
7
+ export interface ECRPrincipal {
8
+ AWS?: string | string[]
9
+ Service?: string | string[]
10
+ }
11
+
12
+ export interface ECRRepository extends CloudFormationResource {
13
+ Type: 'AWS::ECR::Repository'
14
+ Properties?: {
15
+ RepositoryName?: string
16
+ ImageTagMutability?: 'MUTABLE' | 'IMMUTABLE'
17
+ ImageScanningConfiguration?: {
18
+ ScanOnPush?: boolean
19
+ }
20
+ EncryptionConfiguration?: {
21
+ EncryptionType: 'AES256' | 'KMS'
22
+ KmsKey?: string
23
+ }
24
+ LifecyclePolicy?: {
25
+ LifecyclePolicyText?: string
26
+ RegistryId?: string
27
+ }
28
+ RepositoryPolicyText?: {
29
+ Version: string
30
+ Statement: Array<{
31
+ Sid?: string
32
+ Effect: 'Allow' | 'Deny'
33
+ Principal: '*' | ECRPrincipal
34
+ Action: string | string[]
35
+ Condition?: Record<string, any>
36
+ }>
37
+ }
38
+ Tags?: Array<{
39
+ Key: string
40
+ Value: string
41
+ }>
42
+ }
43
+ }
44
+
45
+ export interface ECRLifecyclePolicy {
46
+ rules: Array<{
47
+ rulePriority: number
48
+ description?: string
49
+ selection: {
50
+ tagStatus: 'tagged' | 'untagged' | 'any'
51
+ tagPrefixList?: string[]
52
+ countType: 'imageCountMoreThan' | 'sinceImagePushed'
53
+ countNumber: number
54
+ countUnit?: 'days'
55
+ }
56
+ action: {
57
+ type: 'expire'
58
+ }
59
+ }>
60
+ }
61
+
62
+ export interface ECRReplicationConfiguration extends CloudFormationResource {
63
+ Type: 'AWS::ECR::ReplicationConfiguration'
64
+ Properties: {
65
+ ReplicationConfiguration: {
66
+ Rules: Array<{
67
+ Destinations: Array<{
68
+ Region: string
69
+ RegistryId: string
70
+ }>
71
+ RepositoryFilters?: Array<{
72
+ Filter: string
73
+ FilterType: 'PREFIX_MATCH'
74
+ }>
75
+ }>
76
+ }
77
+ }
78
+ }
79
+
80
+ export interface ECRRegistryPolicy extends CloudFormationResource {
81
+ Type: 'AWS::ECR::RegistryPolicy'
82
+ Properties: {
83
+ PolicyText: {
84
+ Version: string
85
+ Statement: Array<{
86
+ Sid?: string
87
+ Effect: 'Allow' | 'Deny'
88
+ Principal: '*' | { AWS: string | string[] }
89
+ Action: string | string[]
90
+ Resource?: string | string[]
91
+ }>
92
+ }
93
+ }
94
+ }
95
+
96
+ export interface ECRPullThroughCacheRule extends CloudFormationResource {
97
+ Type: 'AWS::ECR::PullThroughCacheRule'
98
+ Properties: {
99
+ EcrRepositoryPrefix?: string
100
+ UpstreamRegistryUrl?: string
101
+ }
102
+ }
103
+
104
+ export interface ECRPublicRepository extends CloudFormationResource {
105
+ Type: 'AWS::ECR::PublicRepository'
106
+ Properties?: {
107
+ RepositoryName?: string
108
+ RepositoryCatalogData?: {
109
+ UsageText?: string
110
+ AboutText?: string
111
+ OperatingSystems?: string[]
112
+ Architectures?: string[]
113
+ RepositoryDescription?: string
114
+ }
115
+ RepositoryPolicyText?: {
116
+ Version: string
117
+ Statement: Array<{
118
+ Sid?: string
119
+ Effect: 'Allow' | 'Deny'
120
+ Principal: '*' | { AWS: string | string[] }
121
+ Action: string | string[]
122
+ }>
123
+ }
124
+ Tags?: Array<{
125
+ Key: string
126
+ Value: string
127
+ }>
128
+ }
129
+ }