@stacksjs/ts-cloud 0.1.9 → 0.1.14

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 (150) hide show
  1. package/README.md +39 -377
  2. package/dist/bin/cli.js +1047 -424
  3. package/dist/index.d.ts +36 -3
  4. package/dist/index.js +76430 -7096
  5. package/package.json +7 -8
  6. package/dist/aws/acm.d.ts +0 -129
  7. package/dist/aws/application-autoscaling.d.ts +0 -282
  8. package/dist/aws/bedrock.d.ts +0 -2292
  9. package/dist/aws/client.d.ts +0 -79
  10. package/dist/aws/cloudformation.d.ts +0 -105
  11. package/dist/aws/cloudfront.d.ts +0 -265
  12. package/dist/aws/cloudwatch-logs.d.ts +0 -48
  13. package/dist/aws/comprehend.d.ts +0 -505
  14. package/dist/aws/connect.d.ts +0 -377
  15. package/dist/aws/deploy-imap.d.ts +0 -14
  16. package/dist/aws/dynamodb.d.ts +0 -176
  17. package/dist/aws/ec2.d.ts +0 -272
  18. package/dist/aws/ecr.d.ts +0 -149
  19. package/dist/aws/ecs.d.ts +0 -162
  20. package/dist/aws/elasticache.d.ts +0 -71
  21. package/dist/aws/elbv2.d.ts +0 -248
  22. package/dist/aws/email.d.ts +0 -175
  23. package/dist/aws/eventbridge.d.ts +0 -142
  24. package/dist/aws/iam.d.ts +0 -638
  25. package/dist/aws/imap-server.d.ts +0 -119
  26. package/dist/aws/index.d.ts +0 -192
  27. package/dist/aws/kendra.d.ts +0 -782
  28. package/dist/aws/lambda.d.ts +0 -232
  29. package/dist/aws/opensearch.d.ts +0 -87
  30. package/dist/aws/personalize.d.ts +0 -516
  31. package/dist/aws/polly.d.ts +0 -214
  32. package/dist/aws/rds.d.ts +0 -240
  33. package/dist/aws/rekognition.d.ts +0 -543
  34. package/dist/aws/route53-domains.d.ts +0 -113
  35. package/dist/aws/route53.d.ts +0 -215
  36. package/dist/aws/s3.d.ts +0 -212
  37. package/dist/aws/scheduler.d.ts +0 -140
  38. package/dist/aws/secrets-manager.d.ts +0 -170
  39. package/dist/aws/ses.d.ts +0 -288
  40. package/dist/aws/setup-phone.d.ts +0 -0
  41. package/dist/aws/setup-sms.d.ts +0 -115
  42. package/dist/aws/sms.d.ts +0 -304
  43. package/dist/aws/smtp-server.d.ts +0 -61
  44. package/dist/aws/sns.d.ts +0 -117
  45. package/dist/aws/sqs.d.ts +0 -65
  46. package/dist/aws/ssm.d.ts +0 -179
  47. package/dist/aws/sts.d.ts +0 -15
  48. package/dist/aws/support.d.ts +0 -104
  49. package/dist/aws/test-imap.d.ts +0 -0
  50. package/dist/aws/textract.d.ts +0 -403
  51. package/dist/aws/transcribe.d.ts +0 -60
  52. package/dist/aws/translate.d.ts +0 -358
  53. package/dist/aws/voice.d.ts +0 -219
  54. package/dist/config.d.ts +0 -7
  55. package/dist/deploy/index.d.ts +0 -2
  56. package/dist/deploy/static-site-external-dns.d.ts +0 -51
  57. package/dist/deploy/static-site.d.ts +0 -71
  58. package/dist/dns/cloudflare.d.ts +0 -52
  59. package/dist/dns/godaddy.d.ts +0 -38
  60. package/dist/dns/index.d.ts +0 -45
  61. package/dist/dns/porkbun.d.ts +0 -18
  62. package/dist/dns/route53-adapter.d.ts +0 -38
  63. package/dist/dns/types.d.ts +0 -77
  64. package/dist/dns/validator.d.ts +0 -78
  65. package/dist/generators/index.d.ts +0 -1
  66. package/dist/generators/infrastructure.d.ts +0 -30
  67. package/dist/push/apns.d.ts +0 -60
  68. package/dist/push/fcm.d.ts +0 -117
  69. package/dist/push/index.d.ts +0 -14
  70. package/dist/security/pre-deploy-scanner.d.ts +0 -69
  71. package/dist/ssl/acme-client.d.ts +0 -67
  72. package/dist/ssl/index.d.ts +0 -2
  73. package/dist/ssl/letsencrypt.d.ts +0 -48
  74. package/dist/types.d.ts +0 -1
  75. package/dist/utils/cli.d.ts +0 -123
  76. package/dist/validation/index.d.ts +0 -1
  77. package/dist/validation/template.d.ts +0 -23
  78. package/src/aws/acm.ts +0 -768
  79. package/src/aws/application-autoscaling.ts +0 -845
  80. package/src/aws/bedrock.ts +0 -4074
  81. package/src/aws/client.ts +0 -891
  82. package/src/aws/cloudformation.ts +0 -896
  83. package/src/aws/cloudfront.ts +0 -1531
  84. package/src/aws/cloudwatch-logs.ts +0 -154
  85. package/src/aws/comprehend.ts +0 -839
  86. package/src/aws/connect.ts +0 -1056
  87. package/src/aws/deploy-imap.ts +0 -384
  88. package/src/aws/dynamodb.ts +0 -340
  89. package/src/aws/ec2.ts +0 -1385
  90. package/src/aws/ecr.ts +0 -621
  91. package/src/aws/ecs.ts +0 -615
  92. package/src/aws/elasticache.ts +0 -301
  93. package/src/aws/elbv2.ts +0 -942
  94. package/src/aws/email.ts +0 -928
  95. package/src/aws/eventbridge.ts +0 -248
  96. package/src/aws/iam.ts +0 -1689
  97. package/src/aws/imap-server.ts +0 -2100
  98. package/src/aws/index.ts +0 -213
  99. package/src/aws/kendra.ts +0 -1097
  100. package/src/aws/lambda.ts +0 -786
  101. package/src/aws/opensearch.ts +0 -158
  102. package/src/aws/personalize.ts +0 -977
  103. package/src/aws/polly.ts +0 -559
  104. package/src/aws/rds.ts +0 -888
  105. package/src/aws/rekognition.ts +0 -846
  106. package/src/aws/route53-domains.ts +0 -359
  107. package/src/aws/route53.ts +0 -1046
  108. package/src/aws/s3.ts +0 -2334
  109. package/src/aws/scheduler.ts +0 -571
  110. package/src/aws/secrets-manager.ts +0 -769
  111. package/src/aws/ses.ts +0 -1081
  112. package/src/aws/setup-phone.ts +0 -104
  113. package/src/aws/setup-sms.ts +0 -580
  114. package/src/aws/sms.ts +0 -1735
  115. package/src/aws/smtp-server.ts +0 -531
  116. package/src/aws/sns.ts +0 -758
  117. package/src/aws/sqs.ts +0 -382
  118. package/src/aws/ssm.ts +0 -807
  119. package/src/aws/sts.ts +0 -92
  120. package/src/aws/support.ts +0 -391
  121. package/src/aws/test-imap.ts +0 -86
  122. package/src/aws/textract.ts +0 -780
  123. package/src/aws/transcribe.ts +0 -108
  124. package/src/aws/translate.ts +0 -641
  125. package/src/aws/voice.ts +0 -1379
  126. package/src/config.ts +0 -35
  127. package/src/deploy/index.ts +0 -7
  128. package/src/deploy/static-site-external-dns.ts +0 -945
  129. package/src/deploy/static-site.ts +0 -1175
  130. package/src/dns/cloudflare.ts +0 -548
  131. package/src/dns/godaddy.ts +0 -412
  132. package/src/dns/index.ts +0 -205
  133. package/src/dns/porkbun.ts +0 -362
  134. package/src/dns/route53-adapter.ts +0 -414
  135. package/src/dns/types.ts +0 -119
  136. package/src/dns/validator.ts +0 -369
  137. package/src/generators/index.ts +0 -5
  138. package/src/generators/infrastructure.ts +0 -1660
  139. package/src/index.ts +0 -163
  140. package/src/push/apns.ts +0 -452
  141. package/src/push/fcm.ts +0 -506
  142. package/src/push/index.ts +0 -58
  143. package/src/security/pre-deploy-scanner.ts +0 -655
  144. package/src/ssl/acme-client.ts +0 -478
  145. package/src/ssl/index.ts +0 -7
  146. package/src/ssl/letsencrypt.ts +0 -747
  147. package/src/types.ts +0 -2
  148. package/src/utils/cli.ts +0 -398
  149. package/src/validation/index.ts +0 -5
  150. package/src/validation/template.ts +0 -405
@@ -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
- }
package/src/dns/types.ts DELETED
@@ -1,119 +0,0 @@
1
- /**
2
- * DNS Provider Types
3
- * Common interfaces for DNS provider abstraction
4
- */
5
-
6
- export type DnsRecordType = 'A' | 'AAAA' | 'CNAME' | 'TXT' | 'MX' | 'NS' | 'SRV' | 'CAA'
7
-
8
- export interface DnsRecord {
9
- name: string
10
- type: DnsRecordType
11
- content: string
12
- /** Alias for content - some providers use 'value' instead */
13
- value?: string
14
- ttl?: number
15
- priority?: number // For MX and SRV records
16
- weight?: number // For SRV records
17
- port?: number // For SRV records
18
- }
19
-
20
- export interface DnsRecordResult extends DnsRecord {
21
- id?: string
22
- }
23
-
24
- export interface CreateRecordResult {
25
- success: boolean
26
- id?: string
27
- message?: string
28
- }
29
-
30
- export interface DeleteRecordResult {
31
- success: boolean
32
- message?: string
33
- }
34
-
35
- export interface ListRecordsResult {
36
- success: boolean
37
- records: DnsRecordResult[]
38
- message?: string
39
- }
40
-
41
- /**
42
- * Common DNS Provider interface
43
- * All DNS providers (Route53, Porkbun, GoDaddy, etc.) implement this
44
- */
45
- export interface DnsProvider {
46
- /**
47
- * Provider name for logging/identification
48
- */
49
- readonly name: string
50
-
51
- /**
52
- * Create a DNS record
53
- */
54
- createRecord(domain: string, record: DnsRecord): Promise<CreateRecordResult>
55
-
56
- /**
57
- * Update an existing DNS record (upsert behavior)
58
- */
59
- upsertRecord(domain: string, record: DnsRecord): Promise<CreateRecordResult>
60
-
61
- /**
62
- * Delete a DNS record
63
- */
64
- deleteRecord(domain: string, record: DnsRecord): Promise<DeleteRecordResult>
65
-
66
- /**
67
- * List all DNS records for a domain
68
- */
69
- listRecords(domain: string, type?: DnsRecordType): Promise<ListRecordsResult>
70
-
71
- /**
72
- * Check if the provider can manage this domain
73
- */
74
- canManageDomain(domain: string): Promise<boolean>
75
-
76
- /**
77
- * List all domains managed by this provider
78
- * Returns an array of domain names (e.g., ['example.com', 'mysite.org'])
79
- */
80
- listDomains(): Promise<string[]>
81
- }
82
-
83
- /**
84
- * DNS Provider configuration types
85
- */
86
- export interface Route53ProviderConfig {
87
- provider: 'route53'
88
- region?: string
89
- hostedZoneId?: string // Optional - will be auto-discovered if not provided
90
- }
91
-
92
- export interface PorkbunProviderConfig {
93
- provider: 'porkbun'
94
- apiKey: string
95
- secretKey: string
96
- }
97
-
98
- export interface GoDaddyProviderConfig {
99
- provider: 'godaddy'
100
- apiKey: string
101
- apiSecret: string
102
- environment?: 'production' | 'ote' // OTE = test environment
103
- }
104
-
105
- export interface CloudflareProviderConfig {
106
- provider: 'cloudflare'
107
- apiToken: string // API Token (recommended) - create at https://dash.cloudflare.com/profile/api-tokens
108
- }
109
-
110
- export type DnsProviderConfig = Route53ProviderConfig | PorkbunProviderConfig | GoDaddyProviderConfig | CloudflareProviderConfig
111
-
112
- /**
113
- * Extended configuration for certificate validation
114
- */
115
- export interface CertificateValidationConfig {
116
- provider: DnsProviderConfig
117
- waitForValidation?: boolean
118
- maxWaitMinutes?: number
119
- }