@stacksjs/ts-cloud-aws-types 0.1.3 → 0.1.4
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/README.md +98 -13
- package/package.json +2 -1
- package/src/acm.ts +0 -20
- package/src/alb.ts +0 -73
- package/src/apigateway.ts +0 -85
- package/src/appsync.ts +0 -246
- package/src/athena.ts +0 -102
- package/src/autoscaling.ts +0 -201
- package/src/backup.ts +0 -187
- package/src/cloudwatch.ts +0 -98
- package/src/codedeploy.ts +0 -132
- package/src/cognito.ts +0 -216
- package/src/common.ts +0 -20
- package/src/connect.ts +0 -243
- package/src/dynamodb.ts +0 -64
- package/src/ec2.ts +0 -171
- package/src/ecr.ts +0 -129
- package/src/ecs.ts +0 -129
- package/src/efs.ts +0 -57
- package/src/elasticache.ts +0 -92
- package/src/eventbridge.ts +0 -140
- package/src/globalaccelerator.ts +0 -57
- package/src/glue.ts +0 -241
- package/src/iam.ts +0 -142
- package/src/index.ts +0 -328
- package/src/kinesis.ts +0 -261
- package/src/kms.ts +0 -35
- package/src/lambda.ts +0 -42
- package/src/opensearch.ts +0 -147
- package/src/pinpoint.ts +0 -438
- package/src/rds-proxy.ts +0 -67
- package/src/rds.ts +0 -61
- package/src/route53.ts +0 -32
- package/src/secrets-manager.ts +0 -110
- package/src/ses.ts +0 -66
- package/src/sns.ts +0 -45
- package/src/sqs.ts +0 -54
- package/src/ssm.ts +0 -268
- package/src/waf.ts +0 -81
- package/tsconfig.json +0 -12
package/README.md
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
<!-- [![npm downloads][npm-downloads-src]][npm-downloads-href] -->
|
|
7
7
|
<!-- [![Codecov][codecov-src]][codecov-href] -->
|
|
8
8
|
|
|
9
|
-
# ts-cloud
|
|
9
|
+
# @stacksjs/ts-cloud
|
|
10
10
|
|
|
11
11
|
> Zero-dependency AWS infrastructure as TypeScript. Deploy production-ready cloud infrastructure without AWS SDK or CLI.
|
|
12
12
|
|
|
13
13
|
## Overview
|
|
14
14
|
|
|
15
|
-
ts-cloud is a modern infrastructure-as-code framework that lets you define AWS infrastructure using TypeScript configuration files. Unlike AWS CDK or Terraform, ts-cloud:
|
|
15
|
+
@stacksjs/ts-cloud is a modern infrastructure-as-code framework that lets you define AWS infrastructure using TypeScript configuration files. Unlike AWS CDK or Terraform, @stacksjs/ts-cloud:
|
|
16
16
|
|
|
17
17
|
- **Zero AWS Dependencies** - No AWS SDK, no AWS CLI. Direct AWS API calls only.
|
|
18
18
|
- **Type-Safe Configuration** - Full TypeScript types for all AWS resources
|
|
@@ -55,6 +55,23 @@ Complete CloudFormation template builders for:
|
|
|
55
55
|
- **Monitoring** - CloudWatch dashboards, alarms, and log groups
|
|
56
56
|
- **Security** - ACM certificates, WAF rules, security groups
|
|
57
57
|
|
|
58
|
+
### 🔒 Pre-Deployment Security Scanning
|
|
59
|
+
|
|
60
|
+
Built-in secret detection to prevent accidental credential exposure:
|
|
61
|
+
|
|
62
|
+
- **35+ Secret Patterns** - AWS keys, API tokens, private keys, database credentials
|
|
63
|
+
- **Automatic Scanning** - Runs before every deployment
|
|
64
|
+
- **Configurable Severity** - Block on critical, high, medium, or low findings
|
|
65
|
+
- **CI/CD Ready** - Integrate security checks into your pipeline
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Scan for secrets before deploying
|
|
69
|
+
cloud deploy:security-scan --source ./dist
|
|
70
|
+
|
|
71
|
+
# Deploy with automatic security scanning
|
|
72
|
+
cloud deploy # Scans automatically before deployment
|
|
73
|
+
```
|
|
74
|
+
|
|
58
75
|
### ☁️ Direct AWS Integration
|
|
59
76
|
|
|
60
77
|
No SDK, no CLI - pure AWS Signature V4 API calls:
|
|
@@ -69,7 +86,7 @@ No SDK, no CLI - pure AWS Signature V4 API calls:
|
|
|
69
86
|
### Installation
|
|
70
87
|
|
|
71
88
|
```bash
|
|
72
|
-
bun add ts-cloud
|
|
89
|
+
bun add @stacksjs/ts-cloud
|
|
73
90
|
```
|
|
74
91
|
|
|
75
92
|
### Your First Deployment
|
|
@@ -77,7 +94,7 @@ bun add ts-cloud
|
|
|
77
94
|
Create a `cloud.config.ts`:
|
|
78
95
|
|
|
79
96
|
```typescript
|
|
80
|
-
import { createStaticSitePreset } from 'ts-cloud/presets'
|
|
97
|
+
import { createStaticSitePreset } from '@stacksjs/ts-cloud/presets'
|
|
81
98
|
|
|
82
99
|
export default createStaticSitePreset({
|
|
83
100
|
name: 'My Website',
|
|
@@ -104,7 +121,7 @@ That's it! You now have:
|
|
|
104
121
|
#### Full-Stack Application
|
|
105
122
|
|
|
106
123
|
```typescript
|
|
107
|
-
import { createFullStackAppPreset } from 'ts-cloud/presets'
|
|
124
|
+
import { createFullStackAppPreset } from '@stacksjs/ts-cloud/presets'
|
|
108
125
|
|
|
109
126
|
export default createFullStackAppPreset({
|
|
110
127
|
name: 'My App',
|
|
@@ -125,7 +142,7 @@ Includes:
|
|
|
125
142
|
#### Serverless API
|
|
126
143
|
|
|
127
144
|
```typescript
|
|
128
|
-
import { createApiBackendPreset } from 'ts-cloud/presets'
|
|
145
|
+
import { createApiBackendPreset } from '@stacksjs/ts-cloud/presets'
|
|
129
146
|
|
|
130
147
|
export default createApiBackendPreset({
|
|
131
148
|
name: 'My API',
|
|
@@ -148,7 +165,7 @@ Includes:
|
|
|
148
165
|
You can extend any preset with custom configuration:
|
|
149
166
|
|
|
150
167
|
```typescript
|
|
151
|
-
import { createNodeJsServerPreset, extendPreset } from 'ts-cloud/presets'
|
|
168
|
+
import { createNodeJsServerPreset, extendPreset } from '@stacksjs/ts-cloud/presets'
|
|
152
169
|
|
|
153
170
|
export default extendPreset(
|
|
154
171
|
createNodeJsServerPreset({
|
|
@@ -175,7 +192,7 @@ export default extendPreset(
|
|
|
175
192
|
Combine multiple presets:
|
|
176
193
|
|
|
177
194
|
```typescript
|
|
178
|
-
import { composePresets, createStaticSitePreset, createApiBackendPreset } from 'ts-cloud/presets'
|
|
195
|
+
import { composePresets, createStaticSitePreset, createApiBackendPreset } from '@stacksjs/ts-cloud/presets'
|
|
179
196
|
|
|
180
197
|
export default composePresets(
|
|
181
198
|
createStaticSitePreset({ name: 'Frontend', slug: 'frontend', domain: 'example.com' }),
|
|
@@ -198,7 +215,7 @@ export default composePresets(
|
|
|
198
215
|
Generate templates programmatically:
|
|
199
216
|
|
|
200
217
|
```typescript
|
|
201
|
-
import { CloudFormationBuilder } from 'ts-cloud/cloudformation'
|
|
218
|
+
import { CloudFormationBuilder } from '@stacksjs/ts-cloud/cloudformation'
|
|
202
219
|
|
|
203
220
|
const builder = new CloudFormationBuilder(config)
|
|
204
221
|
const template = builder.build()
|
|
@@ -211,7 +228,7 @@ console.log(JSON.stringify(template, null, 2))
|
|
|
211
228
|
Use the AWS clients directly:
|
|
212
229
|
|
|
213
230
|
```typescript
|
|
214
|
-
import { CloudFormationClient, S3Client, CloudFrontClient } from 'ts-cloud/aws'
|
|
231
|
+
import { CloudFormationClient, S3Client, CloudFrontClient } from '@stacksjs/ts-cloud/aws'
|
|
215
232
|
|
|
216
233
|
// CloudFormation
|
|
217
234
|
const cfn = new CloudFormationClient('us-east-1')
|
|
@@ -236,6 +253,74 @@ await cloudfront.createInvalidation({
|
|
|
236
253
|
})
|
|
237
254
|
```
|
|
238
255
|
|
|
256
|
+
## DNS Providers
|
|
257
|
+
|
|
258
|
+
@stacksjs/ts-cloud supports multiple DNS providers for domain management and SSL certificate validation:
|
|
259
|
+
|
|
260
|
+
### Cloudflare
|
|
261
|
+
|
|
262
|
+
1. Log in to your [Cloudflare Dashboard](https://dash.cloudflare.com/)
|
|
263
|
+
2. Go to **My Profile** → **API Tokens** (or visit https://dash.cloudflare.com/profile/api-tokens)
|
|
264
|
+
3. Click **Create Token**
|
|
265
|
+
4. Use the **Edit zone DNS** template, or create a custom token with:
|
|
266
|
+
- **Permissions**: Zone → DNS → Edit
|
|
267
|
+
- **Zone Resources**: Include → All zones (or specific zones)
|
|
268
|
+
5. Copy the generated token
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
export CLOUDFLARE_API_TOKEN="your-api-token-here"
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Porkbun
|
|
275
|
+
|
|
276
|
+
1. Log in to your [Porkbun Dashboard](https://porkbun.com/account/api)
|
|
277
|
+
2. Enable API access for your domain(s)
|
|
278
|
+
3. Generate an API key pair
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
export PORKBUN_API_KEY="your-api-key"
|
|
282
|
+
export PORKBUN_SECRET_KEY="your-secret-key"
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### GoDaddy
|
|
286
|
+
|
|
287
|
+
1. Log in to [GoDaddy Developer Portal](https://developer.godaddy.com/)
|
|
288
|
+
2. Create a new API key
|
|
289
|
+
3. Note both the key and secret
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
export GODADDY_API_KEY="your-api-key"
|
|
293
|
+
export GODADDY_API_SECRET="your-api-secret"
|
|
294
|
+
export GODADDY_ENVIRONMENT="production" # or "ote" for testing
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Route53
|
|
298
|
+
|
|
299
|
+
Uses AWS credentials from environment or ~/.aws/credentials:
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
export AWS_ACCESS_KEY_ID="your-access-key"
|
|
303
|
+
export AWS_SECRET_ACCESS_KEY="your-secret-key"
|
|
304
|
+
export AWS_REGION="us-east-1"
|
|
305
|
+
export AWS_HOSTED_ZONE_ID="Z1234567890" # Optional
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### CLI Usage
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
# List domains
|
|
312
|
+
cloud domain:list --provider cloudflare
|
|
313
|
+
|
|
314
|
+
# List DNS records
|
|
315
|
+
cloud dns:records example.com --provider cloudflare
|
|
316
|
+
|
|
317
|
+
# Add a DNS record
|
|
318
|
+
cloud dns:add example.com A 192.168.1.1 --name api --provider cloudflare
|
|
319
|
+
|
|
320
|
+
# Generate SSL certificate with DNS validation
|
|
321
|
+
cloud domain:ssl example.com --provider cloudflare
|
|
322
|
+
```
|
|
323
|
+
|
|
239
324
|
## Development
|
|
240
325
|
|
|
241
326
|
```bash
|
|
@@ -264,7 +349,7 @@ bun run typecheck
|
|
|
264
349
|
|
|
265
350
|
### No Dependencies
|
|
266
351
|
|
|
267
|
-
ts-cloud uses **zero external dependencies** for AWS operations:
|
|
352
|
+
@stacksjs/ts-cloud uses **zero external dependencies** for AWS operations:
|
|
268
353
|
|
|
269
354
|
- **AWS Signature V4** - Manual request signing for authentication
|
|
270
355
|
- **Direct HTTPS** - Native `fetch()` for API calls
|
|
@@ -312,8 +397,8 @@ The MIT License (MIT). Please see [LICENSE](LICENSE.md) for more information.
|
|
|
312
397
|
Made with 💙
|
|
313
398
|
|
|
314
399
|
<!-- Badges -->
|
|
315
|
-
[npm-version-src]: https://img.shields.io/npm/v/ts-cloud?style=flat-square
|
|
316
|
-
[npm-version-href]: https://npmjs.com/package/ts-cloud
|
|
400
|
+
[npm-version-src]: https://img.shields.io/npm/v/@stacksjs/ts-cloud?style=flat-square
|
|
401
|
+
[npm-version-href]: https://npmjs.com/package/@stacksjs/ts-cloud
|
|
317
402
|
[github-actions-src]: https://img.shields.io/github/actions/workflow/status/stacksjs/ts-cloud/ci.yml?style=flat-square&branch=main
|
|
318
403
|
[github-actions-href]: https://github.com/stacksjs/ts-cloud/actions?query=workflow%3Aci
|
|
319
404
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/ts-cloud-aws-types",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AWS CloudFormation resource type definitions (without AWS SDK)",
|
|
6
6
|
"author": "Chris Breuer <chris@stacksjs.com>",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
],
|
|
20
20
|
"scripts": {
|
|
21
21
|
"build": "bun build src/index.ts --outdir dist --target bun",
|
|
22
|
+
"prepublishOnly": "bun --bun run build",
|
|
22
23
|
"typecheck": "tsc --noEmit"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
package/src/acm.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { CloudFormationResource } from './index'
|
|
2
|
-
|
|
3
|
-
export interface ACMCertificate extends CloudFormationResource {
|
|
4
|
-
Type: 'AWS::CertificateManager::Certificate'
|
|
5
|
-
Properties: {
|
|
6
|
-
DomainName: string
|
|
7
|
-
SubjectAlternativeNames?: string[]
|
|
8
|
-
DomainValidationOptions?: Array<{
|
|
9
|
-
DomainName: string
|
|
10
|
-
HostedZoneId?: string
|
|
11
|
-
ValidationDomain?: string
|
|
12
|
-
}>
|
|
13
|
-
ValidationMethod?: 'DNS' | 'EMAIL'
|
|
14
|
-
CertificateTransparencyLoggingPreference?: 'ENABLED' | 'DISABLED'
|
|
15
|
-
Tags?: Array<{
|
|
16
|
-
Key: string
|
|
17
|
-
Value: string
|
|
18
|
-
}>
|
|
19
|
-
}
|
|
20
|
-
}
|
package/src/alb.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import type { CloudFormationResource } from './index'
|
|
2
|
-
|
|
3
|
-
export interface ApplicationLoadBalancer extends CloudFormationResource {
|
|
4
|
-
Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
|
|
5
|
-
Properties: {
|
|
6
|
-
Name?: string
|
|
7
|
-
Scheme?: 'internet-facing' | 'internal'
|
|
8
|
-
Type?: 'application' | 'network' | 'gateway'
|
|
9
|
-
IpAddressType?: 'ipv4' | 'dualstack'
|
|
10
|
-
Subnets?: string[]
|
|
11
|
-
SecurityGroups?: string[]
|
|
12
|
-
Tags?: Array<{
|
|
13
|
-
Key: string
|
|
14
|
-
Value: string
|
|
15
|
-
}>
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface TargetGroup extends CloudFormationResource {
|
|
20
|
-
Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'
|
|
21
|
-
Properties: {
|
|
22
|
-
Name?: string
|
|
23
|
-
Port: number
|
|
24
|
-
Protocol: 'HTTP' | 'HTTPS' | 'TCP' | 'TLS' | 'UDP' | 'TCP_UDP'
|
|
25
|
-
VpcId: string | { Ref: string }
|
|
26
|
-
TargetType?: 'instance' | 'ip' | 'lambda' | 'alb'
|
|
27
|
-
HealthCheckEnabled?: boolean
|
|
28
|
-
HealthCheckProtocol?: 'HTTP' | 'HTTPS' | 'TCP' | 'TLS' | 'UDP' | 'TCP_UDP'
|
|
29
|
-
HealthCheckPath?: string
|
|
30
|
-
HealthCheckIntervalSeconds?: number
|
|
31
|
-
HealthCheckTimeoutSeconds?: number
|
|
32
|
-
HealthyThresholdCount?: number
|
|
33
|
-
UnhealthyThresholdCount?: number
|
|
34
|
-
Matcher?: {
|
|
35
|
-
HttpCode?: string
|
|
36
|
-
GrpcCode?: string
|
|
37
|
-
}
|
|
38
|
-
Tags?: Array<{
|
|
39
|
-
Key: string
|
|
40
|
-
Value: string
|
|
41
|
-
}>
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface Listener extends CloudFormationResource {
|
|
46
|
-
Type: 'AWS::ElasticLoadBalancingV2::Listener'
|
|
47
|
-
Properties: {
|
|
48
|
-
LoadBalancerArn: string | { Ref: string }
|
|
49
|
-
Port: number
|
|
50
|
-
Protocol: 'HTTP' | 'HTTPS' | 'TCP' | 'TLS' | 'UDP' | 'TCP_UDP'
|
|
51
|
-
Certificates?: Array<{
|
|
52
|
-
CertificateArn: string
|
|
53
|
-
}>
|
|
54
|
-
SslPolicy?: string
|
|
55
|
-
DefaultActions: Array<{
|
|
56
|
-
Type: 'forward' | 'redirect' | 'fixed-response' | 'authenticate-cognito' | 'authenticate-oidc'
|
|
57
|
-
TargetGroupArn?: string | { Ref: string }
|
|
58
|
-
RedirectConfig?: {
|
|
59
|
-
Protocol?: string
|
|
60
|
-
Port?: string
|
|
61
|
-
Host?: string
|
|
62
|
-
Path?: string
|
|
63
|
-
Query?: string
|
|
64
|
-
StatusCode: 'HTTP_301' | 'HTTP_302'
|
|
65
|
-
}
|
|
66
|
-
FixedResponseConfig?: {
|
|
67
|
-
StatusCode: string
|
|
68
|
-
ContentType?: string
|
|
69
|
-
MessageBody?: string
|
|
70
|
-
}
|
|
71
|
-
}>
|
|
72
|
-
}
|
|
73
|
-
}
|
package/src/apigateway.ts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import type { CloudFormationResource } from './index'
|
|
2
|
-
|
|
3
|
-
export interface ApiGatewayRestApi extends CloudFormationResource {
|
|
4
|
-
Type: 'AWS::ApiGateway::RestApi'
|
|
5
|
-
Properties: {
|
|
6
|
-
Name: string
|
|
7
|
-
Description?: string
|
|
8
|
-
EndpointConfiguration?: {
|
|
9
|
-
Types: ('EDGE' | 'REGIONAL' | 'PRIVATE')[]
|
|
10
|
-
}
|
|
11
|
-
Policy?: unknown
|
|
12
|
-
BinaryMediaTypes?: string[]
|
|
13
|
-
MinimumCompressionSize?: number
|
|
14
|
-
Tags?: Array<{
|
|
15
|
-
Key: string
|
|
16
|
-
Value: string
|
|
17
|
-
}>
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface ApiGatewayHttpApi extends CloudFormationResource {
|
|
22
|
-
Type: 'AWS::ApiGatewayV2::Api'
|
|
23
|
-
Properties: {
|
|
24
|
-
Name: string
|
|
25
|
-
Description?: string
|
|
26
|
-
ProtocolType: 'HTTP' | 'WEBSOCKET'
|
|
27
|
-
CorsConfiguration?: {
|
|
28
|
-
AllowOrigins?: string[]
|
|
29
|
-
AllowMethods?: string[]
|
|
30
|
-
AllowHeaders?: string[]
|
|
31
|
-
ExposeHeaders?: string[]
|
|
32
|
-
MaxAge?: number
|
|
33
|
-
AllowCredentials?: boolean
|
|
34
|
-
}
|
|
35
|
-
Tags?: Record<string, string>
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface ApiGatewayStage extends CloudFormationResource {
|
|
40
|
-
Type: 'AWS::ApiGateway::Stage'
|
|
41
|
-
Properties: {
|
|
42
|
-
StageName: string
|
|
43
|
-
RestApiId: string | { Ref: string }
|
|
44
|
-
DeploymentId: string | { Ref: string }
|
|
45
|
-
Description?: string
|
|
46
|
-
CacheClusterEnabled?: boolean
|
|
47
|
-
CacheClusterSize?: string
|
|
48
|
-
Variables?: Record<string, string>
|
|
49
|
-
MethodSettings?: Array<{
|
|
50
|
-
HttpMethod: string
|
|
51
|
-
ResourcePath: string
|
|
52
|
-
CachingEnabled?: boolean
|
|
53
|
-
CacheTtlInSeconds?: number
|
|
54
|
-
ThrottlingBurstLimit?: number
|
|
55
|
-
ThrottlingRateLimit?: number
|
|
56
|
-
}>
|
|
57
|
-
Tags?: Array<{
|
|
58
|
-
Key: string
|
|
59
|
-
Value: string
|
|
60
|
-
}>
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export interface ApiGatewayDeployment extends CloudFormationResource {
|
|
65
|
-
Type: 'AWS::ApiGateway::Deployment'
|
|
66
|
-
Properties: {
|
|
67
|
-
RestApiId: string | { Ref: string }
|
|
68
|
-
Description?: string
|
|
69
|
-
StageName?: string
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export interface ApiGatewayAuthorizer extends CloudFormationResource {
|
|
74
|
-
Type: 'AWS::ApiGateway::Authorizer'
|
|
75
|
-
Properties: {
|
|
76
|
-
Name: string
|
|
77
|
-
Type: 'TOKEN' | 'REQUEST' | 'COGNITO_USER_POOLS'
|
|
78
|
-
RestApiId: string | { Ref: string }
|
|
79
|
-
AuthorizerUri?: string
|
|
80
|
-
AuthorizerCredentials?: string
|
|
81
|
-
IdentitySource?: string
|
|
82
|
-
ProviderARNs?: string[]
|
|
83
|
-
AuthorizerResultTtlInSeconds?: number
|
|
84
|
-
}
|
|
85
|
-
}
|
package/src/appsync.ts
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AWS AppSync Types
|
|
3
|
-
* CloudFormation resource types for AWS AppSync (GraphQL)
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { Tag } from './common'
|
|
7
|
-
|
|
8
|
-
export interface GraphQLApi {
|
|
9
|
-
Type: 'AWS::AppSync::GraphQLApi'
|
|
10
|
-
Properties: {
|
|
11
|
-
Name: string
|
|
12
|
-
AuthenticationType: 'API_KEY' | 'AWS_IAM' | 'AMAZON_COGNITO_USER_POOLS' | 'OPENID_CONNECT' | 'AWS_LAMBDA'
|
|
13
|
-
|
|
14
|
-
// Optional authentication providers
|
|
15
|
-
AdditionalAuthenticationProviders?: Array<{
|
|
16
|
-
AuthenticationType: 'API_KEY' | 'AWS_IAM' | 'AMAZON_COGNITO_USER_POOLS' | 'OPENID_CONNECT' | 'AWS_LAMBDA'
|
|
17
|
-
UserPoolConfig?: {
|
|
18
|
-
UserPoolId: string | { Ref: string }
|
|
19
|
-
AwsRegion?: string
|
|
20
|
-
AppIdClientRegex?: string
|
|
21
|
-
}
|
|
22
|
-
OpenIDConnectConfig?: {
|
|
23
|
-
Issuer: string
|
|
24
|
-
ClientId?: string
|
|
25
|
-
IatTTL?: number
|
|
26
|
-
AuthTTL?: number
|
|
27
|
-
}
|
|
28
|
-
LambdaAuthorizerConfig?: {
|
|
29
|
-
AuthorizerUri: string | { Ref: string }
|
|
30
|
-
AuthorizerResultTtlInSeconds?: number
|
|
31
|
-
IdentityValidationExpression?: string
|
|
32
|
-
}
|
|
33
|
-
}>
|
|
34
|
-
|
|
35
|
-
// Cognito User Pool config (if using AMAZON_COGNITO_USER_POOLS)
|
|
36
|
-
UserPoolConfig?: {
|
|
37
|
-
UserPoolId: string | { Ref: string }
|
|
38
|
-
AwsRegion?: string
|
|
39
|
-
DefaultAction: 'ALLOW' | 'DENY'
|
|
40
|
-
AppIdClientRegex?: string
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// OpenID Connect config (if using OPENID_CONNECT)
|
|
44
|
-
OpenIDConnectConfig?: {
|
|
45
|
-
Issuer: string
|
|
46
|
-
ClientId?: string
|
|
47
|
-
IatTTL?: number
|
|
48
|
-
AuthTTL?: number
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Lambda authorizer config (if using AWS_LAMBDA)
|
|
52
|
-
LambdaAuthorizerConfig?: {
|
|
53
|
-
AuthorizerUri: string | { Ref: string }
|
|
54
|
-
AuthorizerResultTtlInSeconds?: number
|
|
55
|
-
IdentityValidationExpression?: string
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Logging
|
|
59
|
-
LogConfig?: {
|
|
60
|
-
CloudWatchLogsRoleArn: string | { Ref: string }
|
|
61
|
-
FieldLogLevel: 'NONE' | 'ERROR' | 'ALL'
|
|
62
|
-
ExcludeVerboseContent?: boolean
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// X-Ray tracing
|
|
66
|
-
XrayEnabled?: boolean
|
|
67
|
-
|
|
68
|
-
Tags?: Tag[]
|
|
69
|
-
}
|
|
70
|
-
DeletionPolicy?: 'Delete' | 'Retain'
|
|
71
|
-
UpdateReplacePolicy?: 'Delete' | 'Retain'
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export interface GraphQLSchema {
|
|
75
|
-
Type: 'AWS::AppSync::GraphQLSchema'
|
|
76
|
-
Properties: {
|
|
77
|
-
ApiId: string | { Ref: string }
|
|
78
|
-
Definition?: string
|
|
79
|
-
DefinitionS3Location?: string
|
|
80
|
-
}
|
|
81
|
-
DependsOn?: string | string[]
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export interface DataSource {
|
|
85
|
-
Type: 'AWS::AppSync::DataSource'
|
|
86
|
-
Properties: {
|
|
87
|
-
ApiId: string | { Ref: string }
|
|
88
|
-
Name: string
|
|
89
|
-
Type: 'AWS_LAMBDA' | 'AMAZON_DYNAMODB' | 'AMAZON_ELASTICSEARCH' | 'AMAZON_OPENSEARCH_SERVICE' | 'HTTP' | 'RELATIONAL_DATABASE' | 'NONE'
|
|
90
|
-
ServiceRoleArn?: string | { Ref: string }
|
|
91
|
-
|
|
92
|
-
// Lambda config (if Type = AWS_LAMBDA)
|
|
93
|
-
LambdaConfig?: {
|
|
94
|
-
LambdaFunctionArn: string | { Ref: string }
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// DynamoDB config (if Type = AMAZON_DYNAMODB)
|
|
98
|
-
DynamoDBConfig?: {
|
|
99
|
-
TableName: string | { Ref: string }
|
|
100
|
-
AwsRegion: string
|
|
101
|
-
UseCallerCredentials?: boolean
|
|
102
|
-
DeltaSyncConfig?: {
|
|
103
|
-
BaseTableTTL: number
|
|
104
|
-
DeltaSyncTableName: string | { Ref: string }
|
|
105
|
-
DeltaSyncTableTTL: number
|
|
106
|
-
}
|
|
107
|
-
Versioned?: boolean
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// OpenSearch config (if Type = AMAZON_OPENSEARCH_SERVICE)
|
|
111
|
-
OpenSearchServiceConfig?: {
|
|
112
|
-
AwsRegion: string
|
|
113
|
-
Endpoint: string | { 'Fn::GetAtt': [string, string] }
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// HTTP config (if Type = HTTP)
|
|
117
|
-
HttpConfig?: {
|
|
118
|
-
Endpoint: string
|
|
119
|
-
AuthorizationConfig?: {
|
|
120
|
-
AuthorizationType: 'AWS_IAM'
|
|
121
|
-
AwsIamConfig?: {
|
|
122
|
-
SigningRegion?: string
|
|
123
|
-
SigningServiceName?: string
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// RDS config (if Type = RELATIONAL_DATABASE)
|
|
129
|
-
RelationalDatabaseConfig?: {
|
|
130
|
-
RelationalDatabaseSourceType: 'RDS_HTTP_ENDPOINT'
|
|
131
|
-
RdsHttpEndpointConfig?: {
|
|
132
|
-
AwsRegion: string
|
|
133
|
-
DbClusterIdentifier: string | { Ref: string }
|
|
134
|
-
DatabaseName?: string
|
|
135
|
-
Schema?: string
|
|
136
|
-
AwsSecretStoreArn: string | { Ref: string }
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
Description?: string
|
|
141
|
-
}
|
|
142
|
-
DependsOn?: string | string[]
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
export interface Resolver {
|
|
146
|
-
Type: 'AWS::AppSync::Resolver'
|
|
147
|
-
Properties: {
|
|
148
|
-
ApiId: string | { Ref: string }
|
|
149
|
-
TypeName: string // e.g., 'Query', 'Mutation', 'Subscription'
|
|
150
|
-
FieldName: string
|
|
151
|
-
DataSourceName?: string | { Ref: string }
|
|
152
|
-
|
|
153
|
-
// Request/Response mapping templates (VTL)
|
|
154
|
-
RequestMappingTemplate?: string
|
|
155
|
-
ResponseMappingTemplate?: string
|
|
156
|
-
|
|
157
|
-
// Or use S3 location
|
|
158
|
-
RequestMappingTemplateS3Location?: string
|
|
159
|
-
ResponseMappingTemplateS3Location?: string
|
|
160
|
-
|
|
161
|
-
// Pipeline resolvers
|
|
162
|
-
Kind?: 'UNIT' | 'PIPELINE'
|
|
163
|
-
PipelineConfig?: {
|
|
164
|
-
Functions?: Array<string | { Ref: string }>
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Caching
|
|
168
|
-
CachingConfig?: {
|
|
169
|
-
CachingKeys?: string[]
|
|
170
|
-
Ttl?: number
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Sync config (for subscriptions)
|
|
174
|
-
SyncConfig?: {
|
|
175
|
-
ConflictDetection: 'VERSION' | 'NONE'
|
|
176
|
-
ConflictHandler?: 'OPTIMISTIC_CONCURRENCY' | 'LAMBDA' | 'AUTOMERGE'
|
|
177
|
-
LambdaConflictHandlerConfig?: {
|
|
178
|
-
LambdaConflictHandlerArn: string | { Ref: string }
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Code (for JavaScript resolvers)
|
|
183
|
-
Code?: string
|
|
184
|
-
CodeS3Location?: string
|
|
185
|
-
Runtime?: {
|
|
186
|
-
Name: 'APPSYNC_JS'
|
|
187
|
-
RuntimeVersion: string
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
DependsOn?: string | string[]
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
export interface FunctionConfiguration {
|
|
194
|
-
Type: 'AWS::AppSync::FunctionConfiguration'
|
|
195
|
-
Properties: {
|
|
196
|
-
ApiId: string | { Ref: string }
|
|
197
|
-
Name: string
|
|
198
|
-
DataSourceName: string | { Ref: string }
|
|
199
|
-
FunctionVersion?: string
|
|
200
|
-
|
|
201
|
-
// Request/Response mapping templates
|
|
202
|
-
RequestMappingTemplate?: string
|
|
203
|
-
ResponseMappingTemplate?: string
|
|
204
|
-
RequestMappingTemplateS3Location?: string
|
|
205
|
-
ResponseMappingTemplateS3Location?: string
|
|
206
|
-
|
|
207
|
-
// Code (for JavaScript functions)
|
|
208
|
-
Code?: string
|
|
209
|
-
CodeS3Location?: string
|
|
210
|
-
Runtime?: {
|
|
211
|
-
Name: 'APPSYNC_JS'
|
|
212
|
-
RuntimeVersion: string
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
Description?: string
|
|
216
|
-
}
|
|
217
|
-
DependsOn?: string | string[]
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
export interface ApiKey {
|
|
221
|
-
Type: 'AWS::AppSync::ApiKey'
|
|
222
|
-
Properties: {
|
|
223
|
-
ApiId: string | { Ref: string }
|
|
224
|
-
Description?: string
|
|
225
|
-
Expires?: number // Unix timestamp
|
|
226
|
-
}
|
|
227
|
-
DependsOn?: string | string[]
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
export interface DomainName {
|
|
231
|
-
Type: 'AWS::AppSync::DomainName'
|
|
232
|
-
Properties: {
|
|
233
|
-
DomainName: string
|
|
234
|
-
CertificateArn: string | { Ref: string }
|
|
235
|
-
Description?: string
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
export interface DomainNameApiAssociation {
|
|
240
|
-
Type: 'AWS::AppSync::DomainNameApiAssociation'
|
|
241
|
-
Properties: {
|
|
242
|
-
DomainName: string | { Ref: string }
|
|
243
|
-
ApiId: string | { Ref: string }
|
|
244
|
-
}
|
|
245
|
-
DependsOn?: string | string[]
|
|
246
|
-
}
|