@stacksjs/ts-cloud-core 0.1.7 → 0.1.9
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/package.json +7 -6
- package/src/advanced-features.test.ts +465 -0
- package/src/aws/cloudformation.ts +421 -0
- package/src/aws/cloudfront.ts +158 -0
- package/src/aws/credentials.test.ts +132 -0
- package/src/aws/credentials.ts +545 -0
- package/src/aws/index.ts +87 -0
- package/src/aws/s3.test.ts +188 -0
- package/src/aws/s3.ts +1088 -0
- package/src/aws/signature.test.ts +670 -0
- package/src/aws/signature.ts +1155 -0
- package/src/backup/disaster-recovery.test.ts +726 -0
- package/src/backup/disaster-recovery.ts +500 -0
- package/src/backup/index.ts +34 -0
- package/src/backup/manager.test.ts +498 -0
- package/src/backup/manager.ts +432 -0
- package/src/cicd/circleci.ts +430 -0
- package/src/cicd/github-actions.ts +424 -0
- package/src/cicd/gitlab-ci.ts +255 -0
- package/src/cicd/index.ts +8 -0
- package/src/cli/history.ts +396 -0
- package/src/cli/index.ts +10 -0
- package/src/cli/progress.ts +458 -0
- package/src/cli/repl.ts +454 -0
- package/src/cli/suggestions.ts +327 -0
- package/src/cli/table.test.ts +319 -0
- package/src/cli/table.ts +332 -0
- package/src/cloudformation/builder.test.ts +327 -0
- package/src/cloudformation/builder.ts +378 -0
- package/src/cloudformation/builders/api-gateway.ts +449 -0
- package/src/cloudformation/builders/cache.ts +334 -0
- package/src/cloudformation/builders/cdn.ts +278 -0
- package/src/cloudformation/builders/compute.ts +485 -0
- package/src/cloudformation/builders/database.ts +392 -0
- package/src/cloudformation/builders/functions.ts +343 -0
- package/src/cloudformation/builders/messaging.ts +140 -0
- package/src/cloudformation/builders/monitoring.ts +300 -0
- package/src/cloudformation/builders/network.ts +264 -0
- package/src/cloudformation/builders/queue.ts +147 -0
- package/src/cloudformation/builders/security.ts +399 -0
- package/src/cloudformation/builders/storage.ts +285 -0
- package/src/cloudformation/index.ts +30 -0
- package/src/cloudformation/types.ts +173 -0
- package/src/compliance/aws-config.ts +543 -0
- package/src/compliance/cloudtrail.ts +376 -0
- package/src/compliance/compliance.test.ts +423 -0
- package/src/compliance/guardduty.ts +446 -0
- package/src/compliance/index.ts +66 -0
- package/src/compliance/security-hub.ts +456 -0
- package/src/containers/build-optimization.ts +416 -0
- package/src/containers/containers.test.ts +508 -0
- package/src/containers/image-scanning.ts +360 -0
- package/src/containers/index.ts +9 -0
- package/src/containers/registry.ts +293 -0
- package/src/containers/service-mesh.ts +520 -0
- package/src/database/database.test.ts +762 -0
- package/src/database/index.ts +9 -0
- package/src/database/migrations.ts +444 -0
- package/src/database/performance.ts +528 -0
- package/src/database/replicas.ts +534 -0
- package/src/database/users.ts +494 -0
- package/src/dependency-graph.ts +143 -0
- package/src/deployment/ab-testing.ts +582 -0
- package/src/deployment/blue-green.ts +452 -0
- package/src/deployment/canary.ts +500 -0
- package/src/deployment/deployment.test.ts +526 -0
- package/src/deployment/index.ts +61 -0
- package/src/deployment/progressive.ts +62 -0
- package/src/dns/dns.test.ts +641 -0
- package/src/dns/dnssec.ts +315 -0
- package/src/dns/index.ts +8 -0
- package/src/dns/resolver.ts +496 -0
- package/src/dns/routing.ts +593 -0
- package/src/email/advanced/analytics.ts +445 -0
- package/src/email/advanced/index.ts +11 -0
- package/src/email/advanced/rules.ts +465 -0
- package/src/email/advanced/scheduling.ts +352 -0
- package/src/email/advanced/search.ts +412 -0
- package/src/email/advanced/shared-mailboxes.ts +404 -0
- package/src/email/advanced/templates.ts +455 -0
- package/src/email/advanced/threading.ts +281 -0
- package/src/email/analytics.ts +467 -0
- package/src/email/bounce-handling.ts +425 -0
- package/src/email/email.test.ts +431 -0
- package/src/email/handlers/__tests__/inbound.test.ts +38 -0
- package/src/email/handlers/__tests__/outbound.test.ts +37 -0
- package/src/email/handlers/converter.ts +227 -0
- package/src/email/handlers/feedback.ts +228 -0
- package/src/email/handlers/inbound.ts +169 -0
- package/src/email/handlers/outbound.ts +178 -0
- package/src/email/index.ts +15 -0
- package/src/email/reputation.ts +303 -0
- package/src/email/templates.ts +352 -0
- package/src/errors/index.test.ts +434 -0
- package/src/errors/index.ts +416 -0
- package/src/health-checks/index.ts +40 -0
- package/src/index.ts +360 -0
- package/src/intrinsic-functions.ts +118 -0
- package/src/lambda/concurrency.ts +330 -0
- package/src/lambda/destinations.ts +345 -0
- package/src/lambda/dlq.ts +425 -0
- package/src/lambda/index.ts +11 -0
- package/src/lambda/lambda.test.ts +840 -0
- package/src/lambda/layers.ts +263 -0
- package/src/lambda/versions.ts +376 -0
- package/src/lambda/vpc.ts +399 -0
- package/src/local/config.ts +114 -0
- package/src/local/index.ts +6 -0
- package/src/local/mock-aws.ts +351 -0
- package/src/modules/ai.ts +340 -0
- package/src/modules/api.ts +478 -0
- package/src/modules/auth.ts +805 -0
- package/src/modules/cache.ts +417 -0
- package/src/modules/cdn.ts +1062 -0
- package/src/modules/communication.ts +1094 -0
- package/src/modules/compute.ts +3348 -0
- package/src/modules/database.ts +554 -0
- package/src/modules/deployment.ts +1079 -0
- package/src/modules/dns.ts +337 -0
- package/src/modules/email.ts +1538 -0
- package/src/modules/filesystem.ts +515 -0
- package/src/modules/index.ts +32 -0
- package/src/modules/messaging.ts +486 -0
- package/src/modules/monitoring.ts +2086 -0
- package/src/modules/network.ts +664 -0
- package/src/modules/parameter-store.ts +325 -0
- package/src/modules/permissions.ts +1081 -0
- package/src/modules/phone.ts +494 -0
- package/src/modules/queue.ts +1260 -0
- package/src/modules/redirects.ts +464 -0
- package/src/modules/registry.ts +699 -0
- package/src/modules/search.ts +401 -0
- package/src/modules/secrets.ts +416 -0
- package/src/modules/security.ts +731 -0
- package/src/modules/sms.ts +389 -0
- package/src/modules/storage.ts +1120 -0
- package/src/modules/workflow.ts +680 -0
- package/src/multi-account/config.ts +521 -0
- package/src/multi-account/index.ts +7 -0
- package/src/multi-account/manager.ts +427 -0
- package/src/multi-region/cross-region.ts +410 -0
- package/src/multi-region/index.ts +8 -0
- package/src/multi-region/manager.ts +483 -0
- package/src/multi-region/regions.ts +435 -0
- package/src/network-security/index.ts +48 -0
- package/src/observability/index.ts +9 -0
- package/src/observability/logs.ts +522 -0
- package/src/observability/metrics.ts +460 -0
- package/src/observability/observability.test.ts +782 -0
- package/src/observability/synthetics.ts +568 -0
- package/src/observability/xray.ts +358 -0
- package/src/phone/advanced/analytics.ts +349 -0
- package/src/phone/advanced/callbacks.ts +428 -0
- package/src/phone/advanced/index.ts +8 -0
- package/src/phone/advanced/ivr-builder.ts +504 -0
- package/src/phone/advanced/recording.ts +310 -0
- package/src/phone/handlers/__tests__/incoming-call.test.ts +40 -0
- package/src/phone/handlers/incoming-call.ts +117 -0
- package/src/phone/handlers/missed-call.ts +116 -0
- package/src/phone/handlers/voicemail.ts +179 -0
- package/src/phone/index.ts +9 -0
- package/src/presets/api-backend.ts +134 -0
- package/src/presets/data-pipeline.ts +204 -0
- package/src/presets/extend.test.ts +295 -0
- package/src/presets/extend.ts +297 -0
- package/src/presets/fullstack-app.ts +144 -0
- package/src/presets/index.ts +27 -0
- package/src/presets/jamstack.ts +135 -0
- package/src/presets/microservices.ts +167 -0
- package/src/presets/ml-api.ts +208 -0
- package/src/presets/nodejs-server.ts +104 -0
- package/src/presets/nodejs-serverless.ts +114 -0
- package/src/presets/realtime-app.ts +184 -0
- package/src/presets/static-site.ts +64 -0
- package/src/presets/traditional-web-app.ts +339 -0
- package/src/presets/wordpress.ts +138 -0
- package/src/preview/github.test.ts +249 -0
- package/src/preview/github.ts +297 -0
- package/src/preview/index.ts +37 -0
- package/src/preview/manager.test.ts +440 -0
- package/src/preview/manager.ts +326 -0
- package/src/preview/notifications.test.ts +582 -0
- package/src/preview/notifications.ts +341 -0
- package/src/queue/batch-processing.ts +402 -0
- package/src/queue/dlq-monitoring.ts +402 -0
- package/src/queue/fifo.ts +342 -0
- package/src/queue/index.ts +9 -0
- package/src/queue/management.ts +428 -0
- package/src/queue/queue.test.ts +429 -0
- package/src/resource-mgmt/index.ts +39 -0
- package/src/resource-naming.ts +62 -0
- package/src/s3/index.ts +523 -0
- package/src/schema/cloud-config.schema.json +554 -0
- package/src/schema/index.ts +68 -0
- package/src/security/certificate-manager.ts +492 -0
- package/src/security/index.ts +9 -0
- package/src/security/scanning.ts +545 -0
- package/src/security/secrets-manager.ts +476 -0
- package/src/security/secrets-rotation.ts +456 -0
- package/src/security/security.test.ts +738 -0
- package/src/sms/advanced/ab-testing.ts +389 -0
- package/src/sms/advanced/analytics.ts +336 -0
- package/src/sms/advanced/campaigns.ts +523 -0
- package/src/sms/advanced/chatbot.ts +224 -0
- package/src/sms/advanced/index.ts +10 -0
- package/src/sms/advanced/link-tracking.ts +248 -0
- package/src/sms/advanced/mms.ts +308 -0
- package/src/sms/handlers/__tests__/send.test.ts +40 -0
- package/src/sms/handlers/delivery-status.ts +133 -0
- package/src/sms/handlers/receive.ts +162 -0
- package/src/sms/handlers/send.ts +174 -0
- package/src/sms/index.ts +9 -0
- package/src/stack-diff.ts +389 -0
- package/src/static-site/index.ts +85 -0
- package/src/template-builder.ts +110 -0
- package/src/template-validator.ts +574 -0
- package/src/utils/cache.ts +291 -0
- package/src/utils/diff.ts +269 -0
- package/src/utils/hash.ts +227 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/parallel.ts +294 -0
- package/src/validators/credentials.test.ts +274 -0
- package/src/validators/credentials.ts +233 -0
- package/src/validators/quotas.test.ts +434 -0
- package/src/validators/quotas.ts +217 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import type { Route53HostedZone, Route53RecordSet } from '@stacksjs/ts-cloud-aws-types'
|
|
2
|
+
import { Fn } from '../intrinsic-functions'
|
|
3
|
+
import { generateLogicalId, generateResourceName } from '../resource-naming'
|
|
4
|
+
import type { EnvironmentType } from '@stacksjs/ts-cloud-types'
|
|
5
|
+
|
|
6
|
+
export interface HostedZoneOptions {
|
|
7
|
+
domain: string
|
|
8
|
+
slug: string
|
|
9
|
+
environment: EnvironmentType
|
|
10
|
+
comment?: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface RecordOptions {
|
|
14
|
+
hostedZoneId?: string
|
|
15
|
+
hostedZoneName?: string
|
|
16
|
+
name: string
|
|
17
|
+
type: 'A' | 'AAAA' | 'CNAME' | 'MX' | 'NS' | 'PTR' | 'SOA' | 'SPF' | 'SRV' | 'TXT'
|
|
18
|
+
ttl?: number
|
|
19
|
+
values?: string[]
|
|
20
|
+
aliasTarget?: AliasTarget
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface AliasTarget {
|
|
24
|
+
dnsName: string
|
|
25
|
+
hostedZoneId: string
|
|
26
|
+
evaluateTargetHealth?: boolean
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* DNS Module - Route53 Management
|
|
31
|
+
* Provides clean API for creating and configuring Route53 resources
|
|
32
|
+
*/
|
|
33
|
+
export class DNS {
|
|
34
|
+
/**
|
|
35
|
+
* Create a Route53 hosted zone
|
|
36
|
+
*/
|
|
37
|
+
static createHostedZone(options: HostedZoneOptions): { zone: Route53HostedZone, logicalId: string } {
|
|
38
|
+
const { domain, slug, environment, comment } = options
|
|
39
|
+
|
|
40
|
+
const resourceName = generateResourceName({
|
|
41
|
+
slug,
|
|
42
|
+
environment,
|
|
43
|
+
resourceType: 'hostedzone',
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
const logicalId = generateLogicalId(`${resourceName}-${domain.replace(/\./g, '')}`)
|
|
47
|
+
|
|
48
|
+
const zone: Route53HostedZone = {
|
|
49
|
+
Type: 'AWS::Route53::HostedZone',
|
|
50
|
+
Properties: {
|
|
51
|
+
Name: domain,
|
|
52
|
+
HostedZoneConfig: {
|
|
53
|
+
Comment: comment || `Hosted zone for ${domain}`,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return { zone, logicalId }
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Create a DNS record
|
|
63
|
+
*/
|
|
64
|
+
static createRecord(options: RecordOptions): { record: Route53RecordSet, logicalId: string } {
|
|
65
|
+
const { hostedZoneId, hostedZoneName, name, type, ttl, values, aliasTarget } = options
|
|
66
|
+
|
|
67
|
+
const logicalId = generateLogicalId(`record-${name.replace(/\./g, '')}-${type}`)
|
|
68
|
+
|
|
69
|
+
const record: Route53RecordSet = {
|
|
70
|
+
Type: 'AWS::Route53::RecordSet',
|
|
71
|
+
Properties: {
|
|
72
|
+
Name: name,
|
|
73
|
+
Type: type,
|
|
74
|
+
},
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Set hosted zone reference
|
|
78
|
+
if (hostedZoneId) {
|
|
79
|
+
record.Properties.HostedZoneId = hostedZoneId
|
|
80
|
+
}
|
|
81
|
+
else if (hostedZoneName) {
|
|
82
|
+
record.Properties.HostedZoneName = hostedZoneName
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Configure record based on type
|
|
86
|
+
if (aliasTarget) {
|
|
87
|
+
// Alias record (no TTL, points to AWS resource)
|
|
88
|
+
record.Properties.AliasTarget = {
|
|
89
|
+
DNSName: aliasTarget.dnsName,
|
|
90
|
+
HostedZoneId: aliasTarget.hostedZoneId,
|
|
91
|
+
EvaluateTargetHealth: aliasTarget.evaluateTargetHealth ?? false,
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Standard record (requires TTL and values)
|
|
96
|
+
record.Properties.TTL = ttl || 300
|
|
97
|
+
record.Properties.ResourceRecords = values || []
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return { record, logicalId }
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Create an A record that points to a CloudFront distribution
|
|
105
|
+
*/
|
|
106
|
+
static createCloudFrontAlias(
|
|
107
|
+
domain: string,
|
|
108
|
+
distributionDomainName: string,
|
|
109
|
+
hostedZoneId: string,
|
|
110
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
111
|
+
return DNS.createRecord({
|
|
112
|
+
hostedZoneId,
|
|
113
|
+
name: domain,
|
|
114
|
+
type: 'A',
|
|
115
|
+
aliasTarget: {
|
|
116
|
+
dnsName: distributionDomainName,
|
|
117
|
+
hostedZoneId: 'Z2FDTNDATAQYW2', // CloudFront hosted zone ID (constant)
|
|
118
|
+
evaluateTargetHealth: false,
|
|
119
|
+
},
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Create an A record that points to an Application Load Balancer
|
|
125
|
+
*/
|
|
126
|
+
static createAlbAlias(
|
|
127
|
+
domain: string,
|
|
128
|
+
albDomainName: string,
|
|
129
|
+
albHostedZoneId: string,
|
|
130
|
+
hostedZoneId: string,
|
|
131
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
132
|
+
return DNS.createRecord({
|
|
133
|
+
hostedZoneId,
|
|
134
|
+
name: domain,
|
|
135
|
+
type: 'A',
|
|
136
|
+
aliasTarget: {
|
|
137
|
+
dnsName: albDomainName,
|
|
138
|
+
hostedZoneId: albHostedZoneId,
|
|
139
|
+
evaluateTargetHealth: true,
|
|
140
|
+
},
|
|
141
|
+
})
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Create a CNAME record
|
|
146
|
+
*/
|
|
147
|
+
static createCname(
|
|
148
|
+
name: string,
|
|
149
|
+
target: string,
|
|
150
|
+
hostedZoneId: string,
|
|
151
|
+
ttl = 300,
|
|
152
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
153
|
+
return DNS.createRecord({
|
|
154
|
+
hostedZoneId,
|
|
155
|
+
name,
|
|
156
|
+
type: 'CNAME',
|
|
157
|
+
ttl,
|
|
158
|
+
values: [target],
|
|
159
|
+
})
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Create www → non-www redirect using S3 and Route53
|
|
164
|
+
*/
|
|
165
|
+
static createWwwRedirect(
|
|
166
|
+
domain: string,
|
|
167
|
+
hostedZoneId: string,
|
|
168
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
169
|
+
return DNS.createRecord({
|
|
170
|
+
hostedZoneId,
|
|
171
|
+
name: `www.${domain}`,
|
|
172
|
+
type: 'CNAME',
|
|
173
|
+
ttl: 300,
|
|
174
|
+
values: [domain],
|
|
175
|
+
})
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Create MX records for email
|
|
180
|
+
*/
|
|
181
|
+
static createMxRecords(
|
|
182
|
+
domain: string,
|
|
183
|
+
mailServers: Array<{ priority: number, server: string }>,
|
|
184
|
+
hostedZoneId: string,
|
|
185
|
+
ttl = 300,
|
|
186
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
187
|
+
return DNS.createRecord({
|
|
188
|
+
hostedZoneId,
|
|
189
|
+
name: domain,
|
|
190
|
+
type: 'MX',
|
|
191
|
+
ttl,
|
|
192
|
+
values: mailServers.map(mx => `${mx.priority} ${mx.server}`),
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Create TXT record (useful for domain verification, SPF, DKIM, etc.)
|
|
198
|
+
*/
|
|
199
|
+
static createTxtRecord(
|
|
200
|
+
name: string,
|
|
201
|
+
value: string,
|
|
202
|
+
hostedZoneId: string,
|
|
203
|
+
ttl = 300,
|
|
204
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
205
|
+
return DNS.createRecord({
|
|
206
|
+
hostedZoneId,
|
|
207
|
+
name,
|
|
208
|
+
type: 'TXT',
|
|
209
|
+
ttl,
|
|
210
|
+
values: [`"${value}"`], // TXT values must be quoted
|
|
211
|
+
})
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Create SPF record for email sending
|
|
216
|
+
*/
|
|
217
|
+
static createSpfRecord(
|
|
218
|
+
domain: string,
|
|
219
|
+
spfValue: string,
|
|
220
|
+
hostedZoneId: string,
|
|
221
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
222
|
+
return DNS.createTxtRecord(domain, spfValue, hostedZoneId)
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Create DMARC record for email authentication
|
|
227
|
+
*/
|
|
228
|
+
static createDmarcRecord(
|
|
229
|
+
domain: string,
|
|
230
|
+
policy: 'none' | 'quarantine' | 'reject',
|
|
231
|
+
email: string,
|
|
232
|
+
hostedZoneId: string,
|
|
233
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
234
|
+
const dmarcValue = `v=DMARC1; p=${policy}; rua=mailto:${email}`
|
|
235
|
+
return DNS.createTxtRecord(`_dmarc.${domain}`, dmarcValue, hostedZoneId)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Create an A record pointing to an S3 website redirect bucket
|
|
240
|
+
* Used for www to non-www redirect (or vice versa)
|
|
241
|
+
*/
|
|
242
|
+
static createS3WebsiteAlias(
|
|
243
|
+
domain: string,
|
|
244
|
+
s3WebsiteEndpoint: string,
|
|
245
|
+
s3HostedZoneId: string,
|
|
246
|
+
hostedZoneId: string,
|
|
247
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
248
|
+
return DNS.createRecord({
|
|
249
|
+
hostedZoneId,
|
|
250
|
+
name: domain,
|
|
251
|
+
type: 'A',
|
|
252
|
+
aliasTarget: {
|
|
253
|
+
dnsName: s3WebsiteEndpoint,
|
|
254
|
+
hostedZoneId: s3HostedZoneId,
|
|
255
|
+
evaluateTargetHealth: false,
|
|
256
|
+
},
|
|
257
|
+
})
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* S3 Website Hosted Zone IDs by region
|
|
262
|
+
* These are required for alias records pointing to S3 website endpoints
|
|
263
|
+
*/
|
|
264
|
+
static readonly S3WebsiteHostedZoneIds: Record<string, string> = {
|
|
265
|
+
'us-east-1': 'Z3AQBSTGFYJSTF',
|
|
266
|
+
'us-east-2': 'Z2O1EMRO9K5GLX',
|
|
267
|
+
'us-west-1': 'Z2F56UZL2M1ACD',
|
|
268
|
+
'us-west-2': 'Z3BJ6K6RIION7M',
|
|
269
|
+
'af-south-1': 'Z83WF9RJE8B12',
|
|
270
|
+
'ap-east-1': 'ZNB98KWMFR0R6',
|
|
271
|
+
'ap-south-1': 'Z11RGJOFQNVJUP',
|
|
272
|
+
'ap-south-2': 'Z02976202B4EZMXIPMXF7',
|
|
273
|
+
'ap-northeast-1': 'Z2M4EHUR26P7ZW',
|
|
274
|
+
'ap-northeast-2': 'Z3W03O7B5YMIYP',
|
|
275
|
+
'ap-northeast-3': 'Z2YQB5RD63NC85',
|
|
276
|
+
'ap-southeast-1': 'Z3O0J2DXBE1FTB',
|
|
277
|
+
'ap-southeast-2': 'Z1WCIBER6CPFUU',
|
|
278
|
+
'ap-southeast-3': 'Z01613992JD795ZI93075',
|
|
279
|
+
'ca-central-1': 'Z1QDHH18159H29',
|
|
280
|
+
'eu-central-1': 'Z21DNDUVLTQW6Q',
|
|
281
|
+
'eu-central-2': 'Z030506016YDQGETNASS',
|
|
282
|
+
'eu-west-1': 'Z1BKCTXD74EZPE',
|
|
283
|
+
'eu-west-2': 'Z3GKZC51ZF0DB4',
|
|
284
|
+
'eu-west-3': 'Z3R1K369G5AVDG',
|
|
285
|
+
'eu-north-1': 'Z3BAZG2TWCNX0D',
|
|
286
|
+
'eu-south-1': 'Z30OZKI7KPW7MI',
|
|
287
|
+
'eu-south-2': 'Z0081959F7139GRJC19J',
|
|
288
|
+
'me-south-1': 'Z1MPMWCPA7YB62',
|
|
289
|
+
'me-central-1': 'Z06143092I8HRBER9VXCO',
|
|
290
|
+
'sa-east-1': 'Z7KQH4QJS55SO',
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Get S3 website endpoint for a bucket in a specific region
|
|
295
|
+
*/
|
|
296
|
+
static getS3WebsiteEndpoint(bucketName: string, region: string): string {
|
|
297
|
+
return `${bucketName}.s3-website-${region}.amazonaws.com`
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Create a store subdomain record (e.g., for Lemon Squeezy integration)
|
|
302
|
+
*/
|
|
303
|
+
static createStoreRecord(
|
|
304
|
+
domain: string,
|
|
305
|
+
storeUrl: string,
|
|
306
|
+
hostedZoneId: string,
|
|
307
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
308
|
+
return DNS.createCname(`store.${domain}`, storeUrl, hostedZoneId)
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Create API subdomain record
|
|
313
|
+
*/
|
|
314
|
+
static createApiRecord(
|
|
315
|
+
domain: string,
|
|
316
|
+
apiUrl: string,
|
|
317
|
+
hostedZoneId: string,
|
|
318
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
319
|
+
return DNS.createCname(`api.${domain}`, apiUrl, hostedZoneId)
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Create docs subdomain record
|
|
324
|
+
*/
|
|
325
|
+
static createDocsRecord(
|
|
326
|
+
domain: string,
|
|
327
|
+
docsUrl: string,
|
|
328
|
+
hostedZoneId: string,
|
|
329
|
+
): { record: Route53RecordSet, logicalId: string } {
|
|
330
|
+
return DNS.createCname(`docs.${domain}`, docsUrl, hostedZoneId)
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* CloudFront Hosted Zone ID (constant for all CloudFront distributions)
|
|
335
|
+
*/
|
|
336
|
+
static readonly CloudFrontHostedZoneId = 'Z2FDTNDATAQYW2'
|
|
337
|
+
}
|