@stacksjs/ts-cloud 0.1.3 → 0.1.6

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 (187) hide show
  1. package/README.md +98 -13
  2. package/dist/aws/acm.d.ts +129 -0
  3. package/dist/aws/application-autoscaling.d.ts +282 -0
  4. package/dist/aws/bedrock.d.ts +2292 -0
  5. package/dist/aws/client.d.ts +79 -0
  6. package/dist/aws/cloudformation.d.ts +105 -0
  7. package/dist/aws/cloudfront.d.ts +265 -0
  8. package/dist/aws/cloudwatch-logs.d.ts +48 -0
  9. package/dist/aws/comprehend.d.ts +505 -0
  10. package/dist/aws/connect.d.ts +377 -0
  11. package/dist/aws/deploy-imap.d.ts +14 -0
  12. package/dist/aws/dynamodb.d.ts +176 -0
  13. package/dist/aws/ec2.d.ts +272 -0
  14. package/dist/aws/ecr.d.ts +149 -0
  15. package/dist/aws/ecs.d.ts +162 -0
  16. package/dist/aws/elasticache.d.ts +71 -0
  17. package/dist/aws/elbv2.d.ts +248 -0
  18. package/dist/aws/email.d.ts +175 -0
  19. package/dist/aws/eventbridge.d.ts +142 -0
  20. package/dist/aws/iam.d.ts +638 -0
  21. package/dist/aws/imap-server.d.ts +119 -0
  22. package/{src/aws/index.ts → dist/aws/index.d.ts} +62 -83
  23. package/{src/aws/kendra.ts → dist/aws/kendra.d.ts} +71 -386
  24. package/dist/aws/lambda.d.ts +232 -0
  25. package/dist/aws/opensearch.d.ts +87 -0
  26. package/dist/aws/personalize.d.ts +516 -0
  27. package/dist/aws/polly.d.ts +214 -0
  28. package/dist/aws/rds.d.ts +240 -0
  29. package/dist/aws/rekognition.d.ts +543 -0
  30. package/dist/aws/route53-domains.d.ts +113 -0
  31. package/dist/aws/route53.d.ts +215 -0
  32. package/dist/aws/s3.d.ts +212 -0
  33. package/dist/aws/scheduler.d.ts +140 -0
  34. package/dist/aws/secrets-manager.d.ts +170 -0
  35. package/dist/aws/ses.d.ts +288 -0
  36. package/dist/aws/setup-phone.d.ts +0 -0
  37. package/dist/aws/setup-sms.d.ts +115 -0
  38. package/dist/aws/sms.d.ts +304 -0
  39. package/dist/aws/smtp-server.d.ts +61 -0
  40. package/dist/aws/sns.d.ts +117 -0
  41. package/dist/aws/sqs.d.ts +65 -0
  42. package/dist/aws/ssm.d.ts +179 -0
  43. package/dist/aws/sts.d.ts +15 -0
  44. package/dist/aws/support.d.ts +104 -0
  45. package/dist/aws/test-imap.d.ts +0 -0
  46. package/dist/aws/textract.d.ts +403 -0
  47. package/dist/aws/transcribe.d.ts +60 -0
  48. package/dist/aws/translate.d.ts +358 -0
  49. package/dist/aws/voice.d.ts +219 -0
  50. package/dist/bin/cli.js +1724 -0
  51. package/dist/config.d.ts +7 -0
  52. package/dist/deploy/index.d.ts +2 -0
  53. package/dist/deploy/static-site-external-dns.d.ts +51 -0
  54. package/dist/deploy/static-site.d.ts +71 -0
  55. package/dist/dns/cloudflare.d.ts +52 -0
  56. package/dist/dns/godaddy.d.ts +38 -0
  57. package/dist/dns/index.d.ts +45 -0
  58. package/dist/dns/porkbun.d.ts +18 -0
  59. package/dist/dns/route53-adapter.d.ts +38 -0
  60. package/{src/dns/types.ts → dist/dns/types.d.ts} +26 -63
  61. package/dist/dns/validator.d.ts +78 -0
  62. package/dist/generators/index.d.ts +1 -0
  63. package/dist/generators/infrastructure.d.ts +30 -0
  64. package/{src/index.ts → dist/index.d.ts} +70 -93
  65. package/dist/index.js +7881 -0
  66. package/dist/push/apns.d.ts +60 -0
  67. package/dist/push/fcm.d.ts +117 -0
  68. package/dist/push/index.d.ts +14 -0
  69. package/dist/security/pre-deploy-scanner.d.ts +69 -0
  70. package/dist/ssl/acme-client.d.ts +67 -0
  71. package/dist/ssl/index.d.ts +2 -0
  72. package/dist/ssl/letsencrypt.d.ts +48 -0
  73. package/dist/types.d.ts +1 -0
  74. package/dist/utils/cli.d.ts +123 -0
  75. package/dist/validation/index.d.ts +1 -0
  76. package/dist/validation/template.d.ts +23 -0
  77. package/package.json +8 -8
  78. package/bin/cli.ts +0 -133
  79. package/bin/commands/analytics.ts +0 -328
  80. package/bin/commands/api.ts +0 -379
  81. package/bin/commands/assets.ts +0 -221
  82. package/bin/commands/audit.ts +0 -501
  83. package/bin/commands/backup.ts +0 -682
  84. package/bin/commands/cache.ts +0 -294
  85. package/bin/commands/cdn.ts +0 -281
  86. package/bin/commands/config.ts +0 -202
  87. package/bin/commands/container.ts +0 -105
  88. package/bin/commands/cost.ts +0 -208
  89. package/bin/commands/database.ts +0 -401
  90. package/bin/commands/deploy.ts +0 -674
  91. package/bin/commands/domain.ts +0 -397
  92. package/bin/commands/email.ts +0 -423
  93. package/bin/commands/environment.ts +0 -285
  94. package/bin/commands/events.ts +0 -424
  95. package/bin/commands/firewall.ts +0 -145
  96. package/bin/commands/function.ts +0 -116
  97. package/bin/commands/generate.ts +0 -280
  98. package/bin/commands/git.ts +0 -139
  99. package/bin/commands/iam.ts +0 -464
  100. package/bin/commands/index.ts +0 -48
  101. package/bin/commands/init.ts +0 -120
  102. package/bin/commands/logs.ts +0 -148
  103. package/bin/commands/network.ts +0 -579
  104. package/bin/commands/notify.ts +0 -489
  105. package/bin/commands/queue.ts +0 -407
  106. package/bin/commands/scheduler.ts +0 -370
  107. package/bin/commands/secrets.ts +0 -54
  108. package/bin/commands/server.ts +0 -629
  109. package/bin/commands/shared.ts +0 -97
  110. package/bin/commands/ssl.ts +0 -138
  111. package/bin/commands/stack.ts +0 -325
  112. package/bin/commands/status.ts +0 -385
  113. package/bin/commands/storage.ts +0 -450
  114. package/bin/commands/team.ts +0 -96
  115. package/bin/commands/tunnel.ts +0 -489
  116. package/bin/commands/utils.ts +0 -202
  117. package/build.ts +0 -15
  118. package/cloud +0 -2
  119. package/src/aws/acm.ts +0 -768
  120. package/src/aws/application-autoscaling.ts +0 -845
  121. package/src/aws/bedrock.ts +0 -4074
  122. package/src/aws/client.ts +0 -878
  123. package/src/aws/cloudformation.ts +0 -896
  124. package/src/aws/cloudfront.ts +0 -1531
  125. package/src/aws/cloudwatch-logs.ts +0 -154
  126. package/src/aws/comprehend.ts +0 -839
  127. package/src/aws/connect.ts +0 -1056
  128. package/src/aws/deploy-imap.ts +0 -384
  129. package/src/aws/dynamodb.ts +0 -340
  130. package/src/aws/ec2.ts +0 -1385
  131. package/src/aws/ecr.ts +0 -621
  132. package/src/aws/ecs.ts +0 -615
  133. package/src/aws/elasticache.ts +0 -301
  134. package/src/aws/elbv2.ts +0 -942
  135. package/src/aws/email.ts +0 -928
  136. package/src/aws/eventbridge.ts +0 -248
  137. package/src/aws/iam.ts +0 -1689
  138. package/src/aws/imap-server.ts +0 -2100
  139. package/src/aws/lambda.ts +0 -786
  140. package/src/aws/opensearch.ts +0 -158
  141. package/src/aws/personalize.ts +0 -977
  142. package/src/aws/polly.ts +0 -559
  143. package/src/aws/rds.ts +0 -888
  144. package/src/aws/rekognition.ts +0 -846
  145. package/src/aws/route53-domains.ts +0 -359
  146. package/src/aws/route53.ts +0 -1046
  147. package/src/aws/s3.ts +0 -2318
  148. package/src/aws/scheduler.ts +0 -571
  149. package/src/aws/secrets-manager.ts +0 -769
  150. package/src/aws/ses.ts +0 -1081
  151. package/src/aws/setup-phone.ts +0 -104
  152. package/src/aws/setup-sms.ts +0 -580
  153. package/src/aws/sms.ts +0 -1735
  154. package/src/aws/smtp-server.ts +0 -531
  155. package/src/aws/sns.ts +0 -758
  156. package/src/aws/sqs.ts +0 -382
  157. package/src/aws/ssm.ts +0 -807
  158. package/src/aws/sts.ts +0 -92
  159. package/src/aws/support.ts +0 -391
  160. package/src/aws/test-imap.ts +0 -86
  161. package/src/aws/textract.ts +0 -780
  162. package/src/aws/transcribe.ts +0 -108
  163. package/src/aws/translate.ts +0 -641
  164. package/src/aws/voice.ts +0 -1379
  165. package/src/config.ts +0 -35
  166. package/src/deploy/index.ts +0 -7
  167. package/src/deploy/static-site-external-dns.ts +0 -906
  168. package/src/deploy/static-site.ts +0 -1125
  169. package/src/dns/godaddy.ts +0 -412
  170. package/src/dns/index.ts +0 -183
  171. package/src/dns/porkbun.ts +0 -362
  172. package/src/dns/route53-adapter.ts +0 -414
  173. package/src/dns/validator.ts +0 -369
  174. package/src/generators/index.ts +0 -5
  175. package/src/generators/infrastructure.ts +0 -1660
  176. package/src/push/apns.ts +0 -452
  177. package/src/push/fcm.ts +0 -506
  178. package/src/push/index.ts +0 -58
  179. package/src/ssl/acme-client.ts +0 -478
  180. package/src/ssl/index.ts +0 -7
  181. package/src/ssl/letsencrypt.ts +0 -747
  182. package/src/types.ts +0 -2
  183. package/src/utils/cli.ts +0 -398
  184. package/src/validation/index.ts +0 -5
  185. package/src/validation/template.ts +0 -405
  186. package/test/index.test.ts +0 -128
  187. package/tsconfig.json +0 -18
@@ -1,414 +0,0 @@
1
- /**
2
- * Route53 DNS Provider Adapter
3
- * Wraps the existing Route53Client to implement the DnsProvider interface
4
- */
5
-
6
- import { Route53Client } from '../aws/route53'
7
- import type {
8
- CreateRecordResult,
9
- DeleteRecordResult,
10
- DnsProvider,
11
- DnsRecord,
12
- DnsRecordResult,
13
- DnsRecordType,
14
- ListRecordsResult,
15
- } from './types'
16
-
17
- export class Route53Provider implements DnsProvider {
18
- readonly name = 'route53'
19
- private client: Route53Client
20
- private hostedZoneCache: Map<string, string> = new Map()
21
- private providedHostedZoneId?: string
22
-
23
- constructor(region: string = 'us-east-1', hostedZoneId?: string) {
24
- this.client = new Route53Client(region)
25
- this.providedHostedZoneId = hostedZoneId
26
- }
27
-
28
- /**
29
- * Get the root domain from a full domain name
30
- */
31
- private getRootDomain(domain: string): string {
32
- const parts = domain.replace(/\.$/, '').split('.')
33
- if (parts.length >= 2) {
34
- return parts.slice(-2).join('.')
35
- }
36
- return domain
37
- }
38
-
39
- /**
40
- * Get the hosted zone ID for a domain
41
- */
42
- private async getHostedZoneId(domain: string): Promise<string | null> {
43
- // If a hosted zone ID was provided, use it
44
- if (this.providedHostedZoneId) {
45
- return this.providedHostedZoneId
46
- }
47
-
48
- const rootDomain = this.getRootDomain(domain)
49
-
50
- // Check cache
51
- const cached = this.hostedZoneCache.get(rootDomain)
52
- if (cached) {
53
- return cached
54
- }
55
-
56
- // Find the hosted zone
57
- const zone = await this.client.findHostedZoneForDomain(domain)
58
- if (zone) {
59
- const zoneId = zone.Id.replace('/hostedzone/', '')
60
- this.hostedZoneCache.set(rootDomain, zoneId)
61
- return zoneId
62
- }
63
-
64
- return null
65
- }
66
-
67
- /**
68
- * Ensure domain name ends with a dot (Route53 requirement)
69
- */
70
- private normalizeName(name: string): string {
71
- return name.endsWith('.') ? name : `${name}.`
72
- }
73
-
74
- async createRecord(domain: string, record: DnsRecord): Promise<CreateRecordResult> {
75
- try {
76
- const hostedZoneId = await this.getHostedZoneId(domain)
77
- if (!hostedZoneId) {
78
- return {
79
- success: false,
80
- message: `No hosted zone found for domain: ${domain}`,
81
- }
82
- }
83
-
84
- const recordName = this.normalizeName(record.name)
85
- let recordValue = record.content
86
-
87
- // TXT records need to be quoted
88
- if (record.type === 'TXT' && !recordValue.startsWith('"')) {
89
- recordValue = `"${recordValue}"`
90
- }
91
-
92
- // MX records need priority prefix
93
- if (record.type === 'MX' && record.priority !== undefined) {
94
- recordValue = `${record.priority} ${recordValue}`
95
- }
96
-
97
- const result = await this.client.changeResourceRecordSets({
98
- HostedZoneId: hostedZoneId,
99
- ChangeBatch: {
100
- Comment: `Created by ts-cloud DNS provider`,
101
- Changes: [{
102
- Action: 'CREATE',
103
- ResourceRecordSet: {
104
- Name: recordName,
105
- Type: record.type,
106
- TTL: record.ttl || 300,
107
- ResourceRecords: [{ Value: recordValue }],
108
- },
109
- }],
110
- },
111
- })
112
-
113
- return {
114
- success: true,
115
- id: result.ChangeInfo?.Id,
116
- message: 'Record created successfully',
117
- }
118
- }
119
- catch (error) {
120
- return {
121
- success: false,
122
- message: error instanceof Error ? error.message : 'Unknown error',
123
- }
124
- }
125
- }
126
-
127
- async upsertRecord(domain: string, record: DnsRecord): Promise<CreateRecordResult> {
128
- try {
129
- const hostedZoneId = await this.getHostedZoneId(domain)
130
- if (!hostedZoneId) {
131
- return {
132
- success: false,
133
- message: `No hosted zone found for domain: ${domain}`,
134
- }
135
- }
136
-
137
- const recordName = this.normalizeName(record.name)
138
- let recordValue = record.content
139
-
140
- // TXT records need to be quoted
141
- if (record.type === 'TXT' && !recordValue.startsWith('"')) {
142
- recordValue = `"${recordValue}"`
143
- }
144
-
145
- // MX records need priority prefix
146
- if (record.type === 'MX' && record.priority !== undefined) {
147
- recordValue = `${record.priority} ${recordValue}`
148
- }
149
-
150
- const result = await this.client.changeResourceRecordSets({
151
- HostedZoneId: hostedZoneId,
152
- ChangeBatch: {
153
- Comment: `Upserted by ts-cloud DNS provider`,
154
- Changes: [{
155
- Action: 'UPSERT',
156
- ResourceRecordSet: {
157
- Name: recordName,
158
- Type: record.type,
159
- TTL: record.ttl || 300,
160
- ResourceRecords: [{ Value: recordValue }],
161
- },
162
- }],
163
- },
164
- })
165
-
166
- return {
167
- success: true,
168
- id: result.ChangeInfo?.Id,
169
- message: 'Record upserted successfully',
170
- }
171
- }
172
- catch (error) {
173
- return {
174
- success: false,
175
- message: error instanceof Error ? error.message : 'Unknown error',
176
- }
177
- }
178
- }
179
-
180
- async deleteRecord(domain: string, record: DnsRecord): Promise<DeleteRecordResult> {
181
- try {
182
- const hostedZoneId = await this.getHostedZoneId(domain)
183
- if (!hostedZoneId) {
184
- return {
185
- success: false,
186
- message: `No hosted zone found for domain: ${domain}`,
187
- }
188
- }
189
-
190
- const recordName = this.normalizeName(record.name)
191
- let recordValue = record.content
192
-
193
- // TXT records need to be quoted
194
- if (record.type === 'TXT' && !recordValue.startsWith('"')) {
195
- recordValue = `"${recordValue}"`
196
- }
197
-
198
- // MX records need priority prefix
199
- if (record.type === 'MX' && record.priority !== undefined) {
200
- recordValue = `${record.priority} ${recordValue}`
201
- }
202
-
203
- await this.client.changeResourceRecordSets({
204
- HostedZoneId: hostedZoneId,
205
- ChangeBatch: {
206
- Comment: `Deleted by ts-cloud DNS provider`,
207
- Changes: [{
208
- Action: 'DELETE',
209
- ResourceRecordSet: {
210
- Name: recordName,
211
- Type: record.type,
212
- TTL: record.ttl || 300,
213
- ResourceRecords: [{ Value: recordValue }],
214
- },
215
- }],
216
- },
217
- })
218
-
219
- return {
220
- success: true,
221
- message: 'Record deleted successfully',
222
- }
223
- }
224
- catch (error) {
225
- return {
226
- success: false,
227
- message: error instanceof Error ? error.message : 'Unknown error',
228
- }
229
- }
230
- }
231
-
232
- async listRecords(domain: string, type?: DnsRecordType): Promise<ListRecordsResult> {
233
- try {
234
- const hostedZoneId = await this.getHostedZoneId(domain)
235
- if (!hostedZoneId) {
236
- return {
237
- success: false,
238
- records: [],
239
- message: `No hosted zone found for domain: ${domain}`,
240
- }
241
- }
242
-
243
- const result = await this.client.listResourceRecordSets({
244
- HostedZoneId: hostedZoneId,
245
- StartRecordType: type,
246
- })
247
-
248
- const records: DnsRecordResult[] = []
249
-
250
- for (const rs of result.ResourceRecordSets) {
251
- // Filter by type if specified
252
- if (type && rs.Type !== type) {
253
- continue
254
- }
255
-
256
- // Skip alias records for now (they don't have ResourceRecords)
257
- if (rs.AliasTarget) {
258
- continue
259
- }
260
-
261
- for (const rr of rs.ResourceRecords || []) {
262
- let content = rr.Value
263
- let priority: number | undefined
264
-
265
- // Extract MX priority
266
- if (rs.Type === 'MX') {
267
- const parts = content.split(' ')
268
- if (parts.length >= 2) {
269
- priority = Number.parseInt(parts[0], 10)
270
- content = parts.slice(1).join(' ')
271
- }
272
- }
273
-
274
- // Remove TXT record quotes
275
- if (rs.Type === 'TXT' && content.startsWith('"') && content.endsWith('"')) {
276
- content = content.slice(1, -1)
277
- }
278
-
279
- records.push({
280
- name: rs.Name.replace(/\.$/, ''),
281
- type: rs.Type as DnsRecordType,
282
- content,
283
- ttl: rs.TTL,
284
- priority,
285
- })
286
- }
287
- }
288
-
289
- return {
290
- success: true,
291
- records,
292
- }
293
- }
294
- catch (error) {
295
- return {
296
- success: false,
297
- records: [],
298
- message: error instanceof Error ? error.message : 'Unknown error',
299
- }
300
- }
301
- }
302
-
303
- async canManageDomain(domain: string): Promise<boolean> {
304
- const hostedZoneId = await this.getHostedZoneId(domain)
305
- return hostedZoneId !== null
306
- }
307
-
308
- /**
309
- * List all domains (hosted zones) managed in Route53
310
- */
311
- async listDomains(): Promise<string[]> {
312
- try {
313
- const result = await this.client.listHostedZones()
314
- return result.HostedZones.map(z => z.Name.replace(/\.$/, ''))
315
- }
316
- catch {
317
- return []
318
- }
319
- }
320
-
321
- /**
322
- * Get the underlying Route53Client for advanced operations
323
- */
324
- getRoute53Client(): Route53Client {
325
- return this.client
326
- }
327
-
328
- /**
329
- * Create an alias record (Route53-specific feature)
330
- * Useful for CloudFront, ALB, etc.
331
- */
332
- async createAliasRecord(params: {
333
- domain: string
334
- name: string
335
- targetHostedZoneId: string
336
- targetDnsName: string
337
- evaluateTargetHealth?: boolean
338
- type?: 'A' | 'AAAA'
339
- }): Promise<CreateRecordResult> {
340
- try {
341
- const hostedZoneId = await this.getHostedZoneId(params.domain)
342
- if (!hostedZoneId) {
343
- return {
344
- success: false,
345
- message: `No hosted zone found for domain: ${params.domain}`,
346
- }
347
- }
348
-
349
- const result = await this.client.createAliasRecord({
350
- HostedZoneId: hostedZoneId,
351
- Name: this.normalizeName(params.name),
352
- TargetHostedZoneId: params.targetHostedZoneId,
353
- TargetDNSName: params.targetDnsName,
354
- EvaluateTargetHealth: params.evaluateTargetHealth,
355
- Type: params.type,
356
- })
357
-
358
- return {
359
- success: true,
360
- id: result.ChangeInfo?.Id,
361
- message: 'Alias record created successfully',
362
- }
363
- }
364
- catch (error) {
365
- return {
366
- success: false,
367
- message: error instanceof Error ? error.message : 'Unknown error',
368
- }
369
- }
370
- }
371
-
372
- /**
373
- * Create CloudFront alias record (convenience method)
374
- */
375
- async createCloudFrontAlias(params: {
376
- domain: string
377
- name: string
378
- cloudFrontDomainName: string
379
- }): Promise<CreateRecordResult> {
380
- return this.createAliasRecord({
381
- domain: params.domain,
382
- name: params.name,
383
- targetHostedZoneId: Route53Client.CloudFrontHostedZoneId,
384
- targetDnsName: params.cloudFrontDomainName,
385
- evaluateTargetHealth: false,
386
- })
387
- }
388
-
389
- /**
390
- * Create ALB alias record (convenience method)
391
- */
392
- async createAlbAlias(params: {
393
- domain: string
394
- name: string
395
- albDnsName: string
396
- region: string
397
- }): Promise<CreateRecordResult> {
398
- const hostedZoneId = Route53Client.ALBHostedZoneIds[params.region]
399
- if (!hostedZoneId) {
400
- return {
401
- success: false,
402
- message: `Unknown region for ALB: ${params.region}`,
403
- }
404
- }
405
-
406
- return this.createAliasRecord({
407
- domain: params.domain,
408
- name: params.name,
409
- targetHostedZoneId: hostedZoneId,
410
- targetDnsName: params.albDnsName,
411
- evaluateTargetHealth: true,
412
- })
413
- }
414
- }