@composurecdk/route53 0.6.0 → 0.8.0

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 (242) hide show
  1. package/README.md +54 -4
  2. package/dist/commonjs/a-record-builder.d.ts.map +1 -0
  3. package/dist/commonjs/a-record-builder.js +38 -0
  4. package/dist/commonjs/a-record-builder.js.map +1 -0
  5. package/dist/commonjs/aaaa-record-builder.d.ts.map +1 -0
  6. package/dist/commonjs/aaaa-record-builder.js +39 -0
  7. package/dist/commonjs/aaaa-record-builder.js.map +1 -0
  8. package/dist/commonjs/alias-targets.d.ts.map +1 -0
  9. package/dist/commonjs/alias-targets.js +50 -0
  10. package/dist/commonjs/alias-targets.js.map +1 -0
  11. package/dist/commonjs/caa-record-builder.d.ts.map +1 -0
  12. package/dist/commonjs/caa-record-builder.js +37 -0
  13. package/dist/commonjs/caa-record-builder.js.map +1 -0
  14. package/dist/commonjs/cname-record-builder.d.ts.map +1 -0
  15. package/dist/commonjs/cname-record-builder.js +43 -0
  16. package/dist/commonjs/cname-record-builder.js.map +1 -0
  17. package/dist/{defaults.d.ts → commonjs/defaults.d.ts} +30 -4
  18. package/dist/commonjs/defaults.d.ts.map +1 -0
  19. package/dist/commonjs/defaults.js +159 -0
  20. package/dist/commonjs/defaults.js.map +1 -0
  21. package/dist/commonjs/ds-record-builder.d.ts.map +1 -0
  22. package/dist/commonjs/ds-record-builder.js +37 -0
  23. package/dist/commonjs/ds-record-builder.js.map +1 -0
  24. package/dist/{health-check-alarm-builder.d.ts → commonjs/health-check-alarm-builder.d.ts} +5 -2
  25. package/dist/commonjs/health-check-alarm-builder.d.ts.map +1 -0
  26. package/dist/commonjs/health-check-alarm-builder.js +136 -0
  27. package/dist/commonjs/health-check-alarm-builder.js.map +1 -0
  28. package/dist/commonjs/health-check-alarm-config.d.ts.map +1 -0
  29. package/dist/commonjs/health-check-alarm-config.js +3 -0
  30. package/dist/commonjs/health-check-alarm-config.js.map +1 -0
  31. package/dist/commonjs/health-check-alarm-defaults.d.ts.map +1 -0
  32. package/dist/commonjs/health-check-alarm-defaults.js +29 -0
  33. package/dist/commonjs/health-check-alarm-defaults.js.map +1 -0
  34. package/dist/commonjs/health-check-alarms.d.ts.map +1 -0
  35. package/dist/commonjs/health-check-alarms.js +45 -0
  36. package/dist/commonjs/health-check-alarms.js.map +1 -0
  37. package/dist/{health-check-builder.d.ts → commonjs/health-check-builder.d.ts} +5 -2
  38. package/dist/commonjs/health-check-builder.d.ts.map +1 -0
  39. package/dist/commonjs/health-check-builder.js +56 -0
  40. package/dist/commonjs/health-check-builder.js.map +1 -0
  41. package/dist/{hosted-zone-builder.d.ts → commonjs/hosted-zone-builder.d.ts} +29 -9
  42. package/dist/commonjs/hosted-zone-builder.d.ts.map +1 -0
  43. package/dist/commonjs/hosted-zone-builder.js +60 -0
  44. package/dist/commonjs/hosted-zone-builder.js.map +1 -0
  45. package/dist/commonjs/https-record-builder.d.ts.map +1 -0
  46. package/dist/commonjs/https-record-builder.js +45 -0
  47. package/dist/commonjs/https-record-builder.js.map +1 -0
  48. package/dist/{index.d.ts → commonjs/index.d.ts} +2 -1
  49. package/dist/commonjs/index.d.ts.map +1 -0
  50. package/dist/commonjs/index.js +54 -0
  51. package/dist/commonjs/index.js.map +1 -0
  52. package/dist/commonjs/mx-record-builder.d.ts.map +1 -0
  53. package/dist/commonjs/mx-record-builder.js +37 -0
  54. package/dist/commonjs/mx-record-builder.js.map +1 -0
  55. package/dist/commonjs/ns-record-builder.d.ts.map +1 -0
  56. package/dist/commonjs/ns-record-builder.js +42 -0
  57. package/dist/commonjs/ns-record-builder.js.map +1 -0
  58. package/dist/commonjs/package.json +3 -0
  59. package/dist/commonjs/query-logging.d.ts +60 -0
  60. package/dist/commonjs/query-logging.d.ts.map +1 -0
  61. package/dist/commonjs/query-logging.js +136 -0
  62. package/dist/commonjs/query-logging.js.map +1 -0
  63. package/dist/commonjs/srv-record-builder.d.ts.map +1 -0
  64. package/dist/commonjs/srv-record-builder.js +37 -0
  65. package/dist/commonjs/srv-record-builder.js.map +1 -0
  66. package/dist/commonjs/svcb-record-builder.d.ts.map +1 -0
  67. package/dist/commonjs/svcb-record-builder.js +38 -0
  68. package/dist/commonjs/svcb-record-builder.js.map +1 -0
  69. package/dist/commonjs/txt-record-builder.d.ts.map +1 -0
  70. package/dist/commonjs/txt-record-builder.js +37 -0
  71. package/dist/commonjs/txt-record-builder.js.map +1 -0
  72. package/dist/commonjs/zone/index.d.ts.map +1 -0
  73. package/dist/commonjs/zone/index.js +23 -0
  74. package/dist/commonjs/zone/index.js.map +1 -0
  75. package/dist/commonjs/zone/zone-dsl.d.ts.map +1 -0
  76. package/dist/commonjs/zone/zone-dsl.js +247 -0
  77. package/dist/commonjs/zone/zone-dsl.js.map +1 -0
  78. package/dist/commonjs/zone/zone-records.d.ts.map +1 -0
  79. package/dist/commonjs/zone/zone-records.js +322 -0
  80. package/dist/commonjs/zone/zone-records.js.map +1 -0
  81. package/dist/esm/a-record-builder.d.ts +56 -0
  82. package/dist/esm/a-record-builder.d.ts.map +1 -0
  83. package/dist/{a-record-builder.js → esm/a-record-builder.js} +1 -0
  84. package/dist/esm/a-record-builder.js.map +1 -0
  85. package/dist/esm/aaaa-record-builder.d.ts +44 -0
  86. package/dist/esm/aaaa-record-builder.d.ts.map +1 -0
  87. package/dist/{aaaa-record-builder.js → esm/aaaa-record-builder.js} +1 -0
  88. package/dist/esm/aaaa-record-builder.js.map +1 -0
  89. package/dist/esm/alias-targets.d.ts +34 -0
  90. package/dist/esm/alias-targets.d.ts.map +1 -0
  91. package/dist/esm/alias-targets.js.map +1 -0
  92. package/dist/esm/caa-record-builder.d.ts +44 -0
  93. package/dist/esm/caa-record-builder.d.ts.map +1 -0
  94. package/dist/{caa-record-builder.js → esm/caa-record-builder.js} +1 -0
  95. package/dist/esm/caa-record-builder.js.map +1 -0
  96. package/dist/esm/cname-record-builder.d.ts +42 -0
  97. package/dist/esm/cname-record-builder.d.ts.map +1 -0
  98. package/dist/{cname-record-builder.js → esm/cname-record-builder.js} +1 -0
  99. package/dist/esm/cname-record-builder.js.map +1 -0
  100. package/dist/esm/defaults.d.ts +119 -0
  101. package/dist/esm/defaults.d.ts.map +1 -0
  102. package/dist/{defaults.js → esm/defaults.js} +37 -4
  103. package/dist/esm/defaults.js.map +1 -0
  104. package/dist/esm/ds-record-builder.d.ts +42 -0
  105. package/dist/esm/ds-record-builder.d.ts.map +1 -0
  106. package/dist/{ds-record-builder.js → esm/ds-record-builder.js} +1 -0
  107. package/dist/esm/ds-record-builder.js.map +1 -0
  108. package/dist/esm/health-check-alarm-builder.d.ts +133 -0
  109. package/dist/esm/health-check-alarm-builder.d.ts.map +1 -0
  110. package/dist/{health-check-alarm-builder.js → esm/health-check-alarm-builder.js} +8 -2
  111. package/dist/esm/health-check-alarm-builder.js.map +1 -0
  112. package/dist/esm/health-check-alarm-config.d.ts +39 -0
  113. package/dist/esm/health-check-alarm-config.d.ts.map +1 -0
  114. package/dist/esm/health-check-alarm-config.js.map +1 -0
  115. package/dist/esm/health-check-alarm-defaults.d.ts +13 -0
  116. package/dist/esm/health-check-alarm-defaults.d.ts.map +1 -0
  117. package/dist/esm/health-check-alarm-defaults.js.map +1 -0
  118. package/dist/esm/health-check-alarms.d.ts +15 -0
  119. package/dist/esm/health-check-alarms.d.ts.map +1 -0
  120. package/dist/esm/health-check-alarms.js.map +1 -0
  121. package/dist/esm/health-check-builder.d.ts +103 -0
  122. package/dist/esm/health-check-builder.d.ts.map +1 -0
  123. package/dist/{health-check-builder.js → esm/health-check-builder.js} +7 -2
  124. package/dist/esm/health-check-builder.js.map +1 -0
  125. package/dist/esm/hosted-zone-builder.d.ts +95 -0
  126. package/dist/esm/hosted-zone-builder.d.ts.map +1 -0
  127. package/dist/{hosted-zone-builder.js → esm/hosted-zone-builder.js} +13 -5
  128. package/dist/esm/hosted-zone-builder.js.map +1 -0
  129. package/dist/esm/https-record-builder.d.ts +45 -0
  130. package/dist/esm/https-record-builder.d.ts.map +1 -0
  131. package/dist/{https-record-builder.js → esm/https-record-builder.js} +1 -0
  132. package/dist/esm/https-record-builder.js.map +1 -0
  133. package/dist/esm/index.d.ts +20 -0
  134. package/dist/esm/index.d.ts.map +1 -0
  135. package/dist/{index.js → esm/index.js} +1 -1
  136. package/dist/esm/index.js.map +1 -0
  137. package/dist/esm/mx-record-builder.d.ts +40 -0
  138. package/dist/esm/mx-record-builder.d.ts.map +1 -0
  139. package/dist/{mx-record-builder.js → esm/mx-record-builder.js} +1 -0
  140. package/dist/esm/mx-record-builder.js.map +1 -0
  141. package/dist/esm/ns-record-builder.d.ts +40 -0
  142. package/dist/esm/ns-record-builder.d.ts.map +1 -0
  143. package/dist/{ns-record-builder.js → esm/ns-record-builder.js} +1 -0
  144. package/dist/esm/ns-record-builder.js.map +1 -0
  145. package/dist/esm/package.json +3 -0
  146. package/dist/esm/query-logging.d.ts +60 -0
  147. package/dist/esm/query-logging.d.ts.map +1 -0
  148. package/dist/esm/query-logging.js +133 -0
  149. package/dist/esm/query-logging.js.map +1 -0
  150. package/dist/esm/srv-record-builder.d.ts +40 -0
  151. package/dist/esm/srv-record-builder.d.ts.map +1 -0
  152. package/dist/{srv-record-builder.js → esm/srv-record-builder.js} +1 -0
  153. package/dist/esm/srv-record-builder.js.map +1 -0
  154. package/dist/esm/svcb-record-builder.d.ts +41 -0
  155. package/dist/esm/svcb-record-builder.d.ts.map +1 -0
  156. package/dist/{svcb-record-builder.js → esm/svcb-record-builder.js} +1 -0
  157. package/dist/esm/svcb-record-builder.js.map +1 -0
  158. package/dist/esm/txt-record-builder.d.ts +38 -0
  159. package/dist/esm/txt-record-builder.d.ts.map +1 -0
  160. package/dist/{txt-record-builder.js → esm/txt-record-builder.js} +1 -0
  161. package/dist/esm/txt-record-builder.js.map +1 -0
  162. package/dist/esm/zone/index.d.ts +3 -0
  163. package/dist/esm/zone/index.d.ts.map +1 -0
  164. package/dist/esm/zone/index.js.map +1 -0
  165. package/dist/esm/zone/zone-dsl.d.ts +296 -0
  166. package/dist/esm/zone/zone-dsl.d.ts.map +1 -0
  167. package/dist/esm/zone/zone-dsl.js.map +1 -0
  168. package/dist/esm/zone/zone-records.d.ts +67 -0
  169. package/dist/esm/zone/zone-records.d.ts.map +1 -0
  170. package/dist/esm/zone/zone-records.js.map +1 -0
  171. package/package.json +47 -20
  172. package/dist/a-record-builder.d.ts.map +0 -1
  173. package/dist/a-record-builder.js.map +0 -1
  174. package/dist/aaaa-record-builder.d.ts.map +0 -1
  175. package/dist/aaaa-record-builder.js.map +0 -1
  176. package/dist/alias-targets.d.ts.map +0 -1
  177. package/dist/alias-targets.js.map +0 -1
  178. package/dist/caa-record-builder.d.ts.map +0 -1
  179. package/dist/caa-record-builder.js.map +0 -1
  180. package/dist/cname-record-builder.d.ts.map +0 -1
  181. package/dist/cname-record-builder.js.map +0 -1
  182. package/dist/defaults.d.ts.map +0 -1
  183. package/dist/defaults.js.map +0 -1
  184. package/dist/ds-record-builder.d.ts.map +0 -1
  185. package/dist/ds-record-builder.js.map +0 -1
  186. package/dist/health-check-alarm-builder.d.ts.map +0 -1
  187. package/dist/health-check-alarm-builder.js.map +0 -1
  188. package/dist/health-check-alarm-config.d.ts.map +0 -1
  189. package/dist/health-check-alarm-config.js.map +0 -1
  190. package/dist/health-check-alarm-defaults.d.ts.map +0 -1
  191. package/dist/health-check-alarm-defaults.js.map +0 -1
  192. package/dist/health-check-alarms.d.ts.map +0 -1
  193. package/dist/health-check-alarms.js.map +0 -1
  194. package/dist/health-check-builder.d.ts.map +0 -1
  195. package/dist/health-check-builder.js.map +0 -1
  196. package/dist/hosted-zone-builder.d.ts.map +0 -1
  197. package/dist/hosted-zone-builder.js.map +0 -1
  198. package/dist/https-record-builder.d.ts.map +0 -1
  199. package/dist/https-record-builder.js.map +0 -1
  200. package/dist/index.d.ts.map +0 -1
  201. package/dist/index.js.map +0 -1
  202. package/dist/mx-record-builder.d.ts.map +0 -1
  203. package/dist/mx-record-builder.js.map +0 -1
  204. package/dist/ns-record-builder.d.ts.map +0 -1
  205. package/dist/ns-record-builder.js.map +0 -1
  206. package/dist/srv-record-builder.d.ts.map +0 -1
  207. package/dist/srv-record-builder.js.map +0 -1
  208. package/dist/svcb-record-builder.d.ts.map +0 -1
  209. package/dist/svcb-record-builder.js.map +0 -1
  210. package/dist/txt-record-builder.d.ts.map +0 -1
  211. package/dist/txt-record-builder.js.map +0 -1
  212. package/dist/zone/index.d.ts.map +0 -1
  213. package/dist/zone/index.js.map +0 -1
  214. package/dist/zone/zone-dsl.d.ts.map +0 -1
  215. package/dist/zone/zone-dsl.js.map +0 -1
  216. package/dist/zone/zone-records.d.ts.map +0 -1
  217. package/dist/zone/zone-records.js.map +0 -1
  218. /package/dist/{a-record-builder.d.ts → commonjs/a-record-builder.d.ts} +0 -0
  219. /package/dist/{aaaa-record-builder.d.ts → commonjs/aaaa-record-builder.d.ts} +0 -0
  220. /package/dist/{alias-targets.d.ts → commonjs/alias-targets.d.ts} +0 -0
  221. /package/dist/{caa-record-builder.d.ts → commonjs/caa-record-builder.d.ts} +0 -0
  222. /package/dist/{cname-record-builder.d.ts → commonjs/cname-record-builder.d.ts} +0 -0
  223. /package/dist/{ds-record-builder.d.ts → commonjs/ds-record-builder.d.ts} +0 -0
  224. /package/dist/{health-check-alarm-config.d.ts → commonjs/health-check-alarm-config.d.ts} +0 -0
  225. /package/dist/{health-check-alarm-defaults.d.ts → commonjs/health-check-alarm-defaults.d.ts} +0 -0
  226. /package/dist/{health-check-alarms.d.ts → commonjs/health-check-alarms.d.ts} +0 -0
  227. /package/dist/{https-record-builder.d.ts → commonjs/https-record-builder.d.ts} +0 -0
  228. /package/dist/{mx-record-builder.d.ts → commonjs/mx-record-builder.d.ts} +0 -0
  229. /package/dist/{ns-record-builder.d.ts → commonjs/ns-record-builder.d.ts} +0 -0
  230. /package/dist/{srv-record-builder.d.ts → commonjs/srv-record-builder.d.ts} +0 -0
  231. /package/dist/{svcb-record-builder.d.ts → commonjs/svcb-record-builder.d.ts} +0 -0
  232. /package/dist/{txt-record-builder.d.ts → commonjs/txt-record-builder.d.ts} +0 -0
  233. /package/dist/{zone → commonjs/zone}/index.d.ts +0 -0
  234. /package/dist/{zone → commonjs/zone}/zone-dsl.d.ts +0 -0
  235. /package/dist/{zone → commonjs/zone}/zone-records.d.ts +0 -0
  236. /package/dist/{alias-targets.js → esm/alias-targets.js} +0 -0
  237. /package/dist/{health-check-alarm-config.js → esm/health-check-alarm-config.js} +0 -0
  238. /package/dist/{health-check-alarm-defaults.js → esm/health-check-alarm-defaults.js} +0 -0
  239. /package/dist/{health-check-alarms.js → esm/health-check-alarms.js} +0 -0
  240. /package/dist/{zone → esm/zone}/index.js +0 -0
  241. /package/dist/{zone → esm/zone}/zone-dsl.js +0 -0
  242. /package/dist/{zone → esm/zone}/zone-records.js +0 -0
package/README.md CHANGED
@@ -21,12 +21,56 @@ Every [PublicHostedZoneProps](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cd
21
21
 
22
22
  Route 53 is a global service, but DNS query logs are emitted in `us-east-1` only — the CloudWatch log group that receives them must live there regardless of where the hosted zone is declared. This is an AWS service constraint, not a restriction on where your hosted zone or records can live.
23
23
 
24
- Supply a pre-configured log group via `.queryLogsLogGroupArn(arn)`. The log group must:
24
+ **Query logging is enabled by default.** When you call `createHostedZoneBuilder().zoneName("example.com")` the builder auto-provisions:
25
25
 
26
- - Be in `us-east-1`.
27
- - Have a resource policy granting `route53.amazonaws.com` permission to `logs:PutLogEvents` and `logs:CreateLogStream`.
26
+ 1. A CloudWatch `LogGroup` named `/aws/route53/<zoneName>` with the `@composurecdk/logs` defaults (`RetentionDays.TWO_YEARS`, `RemovalPolicy.RETAIN`).
27
+ 2. A single shared `AWS::Logs::ResourcePolicy` per stack — `ComposureCDK-Route53QueryLogging` — granting `route53.amazonaws.com` permission to `logs:CreateLogStream` and `logs:PutLogEvents` against the `/aws/route53/*` prefix. The policy includes the `aws:SourceAccount` confused-deputy condition.
28
+ 3. The `QueryLoggingConfig` on the hosted zone wired to the auto-created log group's ARN, plus a `DependsOn` so Route 53 cannot race the policy on first write.
28
29
 
29
- Auto-creating the log group and resource policy on the user's behalf is planned see [#44](https://github.com/laazyj/composureCDK/issues/44). Once implemented, enabling query logging will become a single opt-in property with the log group + resource policy wired by default.
30
+ Multiple hosted zones in the same stack share the resource policy you stay well clear of the [10-policy/region soft limit](https://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateQueryLoggingConfig.html). The auto-created log group is exposed as `result.queryLogGroup` for downstream wiring (subscription filters, metric filters).
31
+
32
+ #### `queryLogging` configuration
33
+
34
+ ```ts
35
+ type QueryLoggingConfig =
36
+ | false
37
+ | {
38
+ configure?: (b: ILogGroupBuilder) => ILogGroupBuilder; // tweak the auto-created log group
39
+ logGroupArn?: string; // bring your own us-east-1 log group; you own its resource policy
40
+ };
41
+ ```
42
+
43
+ Customize the auto-created log group:
44
+
45
+ ```ts
46
+ import { RetentionDays } from "aws-cdk-lib/aws-logs";
47
+
48
+ createHostedZoneBuilder()
49
+ .zoneName("example.com")
50
+ .queryLogging({ configure: (lg) => lg.retention(RetentionDays.SIX_MONTHS) });
51
+ ```
52
+
53
+ Bring your own log group (you own the resource policy too):
54
+
55
+ ```ts
56
+ createHostedZoneBuilder()
57
+ .zoneName("example.com")
58
+ .queryLogging({ logGroupArn: "arn:aws:logs:us-east-1:111122223333:log-group:/audit/dns" });
59
+ ```
60
+
61
+ Disable entirely:
62
+
63
+ ```ts
64
+ createHostedZoneBuilder().zoneName("example.com").queryLogging(false);
65
+ ```
66
+
67
+ #### `us-east-1` constraint
68
+
69
+ If the stack's region resolves to a known non-`us-east-1` region, `build()` throws with three remediations: deploy the stack in `us-east-1`, pass `queryLogging({ logGroupArn })`, or set `queryLogging(false)`. Env-agnostic stacks (where the region is an unresolved CDK token) are not blocked. A user-supplied `logGroupArn` outside `us-east-1` emits the synth warning `@composurecdk/route53:query-logging-region` instead of erroring.
70
+
71
+ #### Cost note
72
+
73
+ Default-on query logging adds two long-lived resources per stack: the log group (charged per ingested GB and per stored GB after retention) and the resource policy (free). For high-traffic zones consider lowering retention via the `configure` callback or disabling logging on zones with low security/audit value.
30
74
 
31
75
  ## Record Builders
32
76
 
@@ -76,6 +120,7 @@ Each helper accepts a `Resolvable`, so targets produced by other composed compon
76
120
  | Builder | Property | Default | Rationale |
77
121
  | -------------------------- | ---------------- | --------------------- | ---------------------------------------------------------------------------------------- |
78
122
  | `createHostedZoneBuilder` | `addTrailingDot` | `true` | Matches RFC 1035 and the CDK default; unambiguous apex. |
123
+ | `createHostedZoneBuilder` | `queryLogging` | _auto-managed_ | DNS query logs to a `/aws/route53/<zoneName>` log group with a shared resource policy. |
79
124
  | `createARecordBuilder` | `ttl` | `Duration.minutes(5)` | Balances propagation latency against DNS cache churn; skipped for alias targets.[^alias] |
80
125
  | `createAaaaRecordBuilder` | `ttl` | `Duration.minutes(5)` | Same as A records; skipped for alias targets.[^alias] |
81
126
  | `createCnameRecordBuilder` | `ttl` | `Duration.minutes(5)` | Same rationale as A records. |
@@ -343,6 +388,11 @@ import {
343
388
  } from "@composurecdk/route53";
344
389
  import { ALIAS, APEX, zoneRecords } from "@composurecdk/route53/zone";
345
390
 
391
+ // This composition only synthesises cleanly when `stack` is in `us-east-1`,
392
+ // because the default-on query logging on `zone` requires its auto-created
393
+ // log group to live there. To run the same shape outside `us-east-1`, pass
394
+ // `queryLogging({ logGroupArn })` referencing a us-east-1 log group, or
395
+ // `queryLogging(false)` to opt out.
346
396
  compose(
347
397
  {
348
398
  zone: createHostedZoneBuilder().zoneName("example.com"),
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a-record-builder.d.ts","sourceRoot":"","sources":["../../src/a-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAG5B;;;;;;GAMG;AACH,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAC;IAChF;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAE/B;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AAE5E,cAAM,cAAe,YAAW,SAAS,CAAC,oBAAoB,CAAC;IAC7D,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAM;IAEzC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,oBAAoB;CAuB7F;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAGtD"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createARecordBuilder = createARecordBuilder;
4
+ const aws_route53_1 = require("aws-cdk-lib/aws-route53");
5
+ const core_1 = require("@composurecdk/core");
6
+ const defaults_js_1 = require("./defaults.js");
7
+ class ARecordBuilder {
8
+ props = {};
9
+ build(scope, id, context) {
10
+ const { zone, target, ...rest } = this.props;
11
+ if (!zone) {
12
+ throw new Error(`ARecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
13
+ }
14
+ if (!target) {
15
+ throw new Error(`ARecordBuilder "${id}" requires a target. Call .target() with a RecordTarget.`);
16
+ }
17
+ const resolvedTarget = (0, core_1.resolve)(target, context);
18
+ const isAlias = resolvedTarget.aliasTarget !== undefined;
19
+ const mergedProps = {
20
+ ...(isAlias ? {} : defaults_js_1.A_RECORD_DEFAULTS),
21
+ ...rest,
22
+ zone: (0, core_1.resolve)(zone, context),
23
+ target: resolvedTarget,
24
+ };
25
+ const record = new aws_route53_1.ARecord(scope, id, mergedProps);
26
+ return { record };
27
+ }
28
+ }
29
+ /**
30
+ * Creates a new {@link IARecordBuilder} for configuring a Route53 A record.
31
+ *
32
+ * @returns A fluent builder for a Route53 A record.
33
+ */
34
+ function createARecordBuilder() {
35
+ // eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
36
+ return (0, core_1.Builder)(ARecordBuilder);
37
+ }
38
+ //# sourceMappingURL=a-record-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a-record-builder.js","sourceRoot":"","sources":["../../src/a-record-builder.ts"],"names":[],"mappings":";;AA+FA,oDAGC;AAlGD,yDAKiC;AAEjC,6CAM4B;AAC5B,+CAAkD;AAgDlD,MAAM,cAAc;IAClB,KAAK,GAAiC,EAAE,CAAC;IAEzC,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,sDAAsD,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,mBAAmB,EAAE,0DAA0D,CAChF,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,IAAA,cAAO,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,KAAK,SAAS,CAAC;QACzD,MAAM,WAAW,GAAG;YAClB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,+BAAiB,CAAC;YACrC,GAAG,IAAI;YACP,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC;YAC5B,MAAM,EAAE,cAAc;SACP,CAAC;QAElB,MAAM,MAAM,GAAG,IAAI,qBAAO,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;GAIG;AACH,SAAgB,oBAAoB;IAClC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAAsC,cAAc,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aaaa-record-builder.d.ts","sourceRoot":"","sources":["../../src/aaaa-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAG5B;;;;;;GAMG;AACH,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,QAAQ,CAAC;IACtF,qDAAqD;IACrD,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/B,yBAAyB;IACzB,MAAM,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;;;;GAMG;AAEH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;AAErF,cAAM,iBAAkB,YAAW,SAAS,CAAC,uBAAuB,CAAC;IACnE,KAAK,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAM;IAE5C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,uBAAuB;CAyBhG;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,kBAAkB,CAG5D"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAaaaRecordBuilder = createAaaaRecordBuilder;
4
+ const aws_route53_1 = require("aws-cdk-lib/aws-route53");
5
+ const core_1 = require("@composurecdk/core");
6
+ const defaults_js_1 = require("./defaults.js");
7
+ class AaaaRecordBuilder {
8
+ props = {};
9
+ build(scope, id, context) {
10
+ const { zone, target, ...rest } = this.props;
11
+ if (!zone) {
12
+ throw new Error(`AaaaRecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
13
+ }
14
+ if (!target) {
15
+ throw new Error(`AaaaRecordBuilder "${id}" requires a target. Call .target() with a RecordTarget.`);
16
+ }
17
+ const resolvedTarget = (0, core_1.resolve)(target, context);
18
+ const isAlias = resolvedTarget.aliasTarget !== undefined;
19
+ const mergedProps = {
20
+ ...(isAlias ? {} : defaults_js_1.AAAA_RECORD_DEFAULTS),
21
+ ...rest,
22
+ zone: (0, core_1.resolve)(zone, context),
23
+ target: resolvedTarget,
24
+ };
25
+ const record = new aws_route53_1.AaaaRecord(scope, id, mergedProps);
26
+ return { record };
27
+ }
28
+ }
29
+ /**
30
+ * Creates a new {@link IAaaaRecordBuilder} for configuring a Route53 AAAA
31
+ * (IPv6) record.
32
+ *
33
+ * @returns A fluent builder for a Route53 AAAA record.
34
+ */
35
+ function createAaaaRecordBuilder() {
36
+ // eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
37
+ return (0, core_1.Builder)(AaaaRecordBuilder);
38
+ }
39
+ //# sourceMappingURL=aaaa-record-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aaaa-record-builder.js","sourceRoot":"","sources":["../../src/aaaa-record-builder.ts"],"names":[],"mappings":";;AAoFA,0DAGC;AAvFD,yDAKiC;AAEjC,6CAM4B;AAC5B,+CAAqD;AAkCrD,MAAM,iBAAiB;IACrB,KAAK,GAAoC,EAAE,CAAC;IAE5C,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,sBAAsB,EAAE,sDAAsD,CAC/E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,sBAAsB,EAAE,0DAA0D,CACnF,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,IAAA,cAAO,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,cAAc,CAAC,WAAW,KAAK,SAAS,CAAC;QACzD,MAAM,WAAW,GAAG;YAClB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kCAAoB,CAAC;YACxC,GAAG,IAAI;YACP,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC;YAC5B,MAAM,EAAE,cAAc;SACJ,CAAC;QAErB,MAAM,MAAM,GAAG,IAAI,wBAAU,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB;IACrC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAA4C,iBAAiB,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias-targets.d.ts","sourceRoot":"","sources":["../../src/alias-targets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,UAAU,CAAC,aAAa,CAAC,GACtC,UAAU,CAAC,YAAY,CAAC,CAI1B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,CAI5F;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,GAC9B,UAAU,CAAC,YAAY,CAAC,CAI1B"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cloudfrontAliasTarget = cloudfrontAliasTarget;
4
+ exports.apiGatewayAliasTarget = apiGatewayAliasTarget;
5
+ exports.apiGatewayDomainAliasTarget = apiGatewayDomainAliasTarget;
6
+ const aws_route53_1 = require("aws-cdk-lib/aws-route53");
7
+ const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
8
+ const core_1 = require("@composurecdk/core");
9
+ /**
10
+ * Builds an alias {@link RecordTarget} for a CloudFront distribution, usable
11
+ * as the `target` of an A or AAAA record. Accepts a {@link Resolvable} so a
12
+ * distribution produced by a composed `@composurecdk/cloudfront` component
13
+ * can be wired in via {@link ref}.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * createARecordBuilder()
18
+ * .zone(ref("zone", (r: HostedZoneBuilderResult) => r.hostedZone))
19
+ * .target(cloudfrontAliasTarget(
20
+ * ref("cdn", (r: DistributionBuilderResult) => r.distribution),
21
+ * ));
22
+ * ```
23
+ */
24
+ function cloudfrontAliasTarget(distribution) {
25
+ return (0, core_1.isRef)(distribution)
26
+ ? distribution.map((d) => aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.CloudFrontTarget(d)))
27
+ : aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.CloudFrontTarget(distribution));
28
+ }
29
+ /**
30
+ * Builds an alias {@link RecordTarget} for an API Gateway REST API that has a
31
+ * custom domain name configured via {@link RestApiBase}. Accepts a
32
+ * {@link Resolvable}.
33
+ */
34
+ function apiGatewayAliasTarget(api) {
35
+ return (0, core_1.isRef)(api)
36
+ ? api.map((a) => aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGateway(a)))
37
+ : aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGateway(api));
38
+ }
39
+ /**
40
+ * Builds an alias {@link RecordTarget} for an API Gateway custom domain name
41
+ * (`apigateway.DomainName`). Use this when you manage the domain name resource
42
+ * separately from the REST API (e.g. to share a custom domain across multiple
43
+ * APIs). Accepts a {@link Resolvable}.
44
+ */
45
+ function apiGatewayDomainAliasTarget(domain) {
46
+ return (0, core_1.isRef)(domain)
47
+ ? domain.map((d) => aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGatewayDomain(d)))
48
+ : aws_route53_1.RecordTarget.fromAlias(new aws_route53_targets_1.ApiGatewayDomain(domain));
49
+ }
50
+ //# sourceMappingURL=alias-targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias-targets.js","sourceRoot":"","sources":["../../src/alias-targets.ts"],"names":[],"mappings":";;AAqBA,sDAMC;AAOD,sDAIC;AAQD,kEAMC;AAlDD,yDAAuD;AACvD,yEAAiG;AACjG,6CAA4D;AAE5D;;;;;;;;;;;;;;GAcG;AACH,SAAgB,qBAAqB,CACnC,YAAuC;IAEvC,OAAO,IAAA,YAAK,EAAC,YAAY,CAAC;QACxB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,sCAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,sCAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,GAA4B;IAChE,OAAO,IAAA,YAAK,EAAC,GAAG,CAAC;QACf,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,gCAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,gCAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,2BAA2B,CACzC,MAA+B;IAE/B,OAAO,IAAA,YAAK,EAAC,MAAM,CAAC;QAClB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,sCAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,0BAAY,CAAC,SAAS,CAAC,IAAI,sCAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caa-record-builder.d.ts","sourceRoot":"","sources":["../../src/caa-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAG5B;;;;;GAKG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IACzE,qDAAqD;IACrD,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+DAA+D;IAC/D,MAAM,EAAE,SAAS,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;AAElF,cAAM,gBAAiB,YAAW,SAAS,CAAC,sBAAsB,CAAC;IACjE,KAAK,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAM;IAE3C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,sBAAsB;CAwB/F;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,iBAAiB,CAG1D"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCaaRecordBuilder = createCaaRecordBuilder;
4
+ const aws_route53_1 = require("aws-cdk-lib/aws-route53");
5
+ const core_1 = require("@composurecdk/core");
6
+ const defaults_js_1 = require("./defaults.js");
7
+ class CaaRecordBuilder {
8
+ props = {};
9
+ build(scope, id, context) {
10
+ const { zone, values, ...rest } = this.props;
11
+ if (!zone) {
12
+ throw new Error(`CaaRecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
13
+ }
14
+ if (!values || values.length === 0) {
15
+ throw new Error(`CaaRecordBuilder "${id}" requires non-empty values. ` +
16
+ `Call .values() with one or more { flag, tag, value } entries.`);
17
+ }
18
+ const mergedProps = {
19
+ ...defaults_js_1.CAA_RECORD_DEFAULTS,
20
+ ...rest,
21
+ values,
22
+ zone: (0, core_1.resolve)(zone, context),
23
+ };
24
+ const record = new aws_route53_1.CaaRecord(scope, id, mergedProps);
25
+ return { record };
26
+ }
27
+ }
28
+ /**
29
+ * Creates a new {@link ICaaRecordBuilder} for configuring a Route53 CAA record.
30
+ *
31
+ * @returns A fluent builder for a Route53 CAA record.
32
+ */
33
+ function createCaaRecordBuilder() {
34
+ // eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
35
+ return (0, core_1.Builder)(CaaRecordBuilder);
36
+ }
37
+ //# sourceMappingURL=caa-record-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caa-record-builder.js","sourceRoot":"","sources":["../../src/caa-record-builder.ts"],"names":[],"mappings":";;AA8EA,wDAGC;AAjFD,yDAA2F;AAE3F,6CAM4B;AAC5B,+CAAoD;AAmCpD,MAAM,gBAAgB;IACpB,KAAK,GAAmC,EAAE,CAAC;IAE3C,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,qBAAqB,EAAE,sDAAsD,CAC9E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,qBAAqB,EAAE,+BAA+B;gBACpD,+DAA+D,CAClE,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG;YAClB,GAAG,iCAAmB;YACtB,GAAG,IAAI;YACP,MAAM;YACN,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC;SACX,CAAC;QAEpB,MAAM,MAAM,GAAG,IAAI,uBAAS,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;GAIG;AACH,SAAgB,sBAAsB;IACpC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAA0C,gBAAgB,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cname-record-builder.d.ts","sourceRoot":"","sources":["../../src/cname-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAG5B;;;;;GAKG;AACH,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC7E,qDAAqD;IACrD,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,iEAAiE;IACjE,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;GAOG;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;AAExF,cAAM,kBAAmB,YAAW,SAAS,CAAC,wBAAwB,CAAC;IACrE,KAAK,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAM;IAE7C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,wBAAwB;CA+BjG;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,mBAAmB,CAG9D"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCnameRecordBuilder = createCnameRecordBuilder;
4
+ const aws_route53_1 = require("aws-cdk-lib/aws-route53");
5
+ const core_1 = require("@composurecdk/core");
6
+ const defaults_js_1 = require("./defaults.js");
7
+ class CnameRecordBuilder {
8
+ props = {};
9
+ build(scope, id, context) {
10
+ const { zone, domainName, recordName, ...rest } = this.props;
11
+ if (!zone) {
12
+ throw new Error(`CnameRecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
13
+ }
14
+ if (!domainName) {
15
+ throw new Error(`CnameRecordBuilder "${id}" requires a domainName. ` +
16
+ `Call .domainName() with the target host (what the CNAME points to).`);
17
+ }
18
+ if (!recordName) {
19
+ throw new Error(`CnameRecordBuilder "${id}" requires a recordName. ` +
20
+ `Call .recordName() with the subdomain — CNAME records cannot be at the zone apex.`);
21
+ }
22
+ const mergedProps = {
23
+ ...defaults_js_1.CNAME_RECORD_DEFAULTS,
24
+ ...rest,
25
+ domainName,
26
+ recordName,
27
+ zone: (0, core_1.resolve)(zone, context),
28
+ };
29
+ const record = new aws_route53_1.CnameRecord(scope, id, mergedProps);
30
+ return { record };
31
+ }
32
+ }
33
+ /**
34
+ * Creates a new {@link ICnameRecordBuilder} for configuring a Route53 CNAME
35
+ * record.
36
+ *
37
+ * @returns A fluent builder for a Route53 CNAME record.
38
+ */
39
+ function createCnameRecordBuilder() {
40
+ // eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
41
+ return (0, core_1.Builder)(CnameRecordBuilder);
42
+ }
43
+ //# sourceMappingURL=cname-record-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cname-record-builder.js","sourceRoot":"","sources":["../../src/cname-record-builder.ts"],"names":[],"mappings":";;AAmFA,4DAGC;AAtFD,yDAA+F;AAE/F,6CAM4B;AAC5B,+CAAsD;AAgCtD,MAAM,kBAAkB;IACtB,KAAK,GAAqC,EAAE,CAAC;IAE7C,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,sDAAsD,CAChF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,2BAA2B;gBAClD,qEAAqE,CACxE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,uBAAuB,EAAE,2BAA2B;gBAClD,mFAAmF,CACtF,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG;YAClB,GAAG,mCAAqB;YACxB,GAAG,IAAI;YACP,UAAU;YACV,UAAU;YACV,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC;SACT,CAAC;QAEtB,MAAM,MAAM,GAAG,IAAI,yBAAW,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAgB,wBAAwB;IACtC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAA8C,kBAAkB,CAAC,CAAC;AAClF,CAAC"}
@@ -11,15 +11,41 @@ import type { DsRecordBuilderProps } from "./ds-record-builder.js";
11
11
  import type { HttpsRecordBuilderProps } from "./https-record-builder.js";
12
12
  import type { SvcbRecordBuilderProps } from "./svcb-record-builder.js";
13
13
  import type { HealthCheckBuilderProps } from "./health-check-builder.js";
14
+ /**
15
+ * Naming prefix applied to every auto-created Route 53 query-log group. A
16
+ * single shared resource policy targets `<prefix>/*` so multiple hosted zones
17
+ * in the same stack share one `AWS::Logs::ResourcePolicy` (the per-region
18
+ * soft limit is 10). Matches the prefix the Route 53 console uses.
19
+ *
20
+ * @see https://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateQueryLoggingConfig.html
21
+ */
22
+ export declare const QUERY_LOGGING_LOG_GROUP_NAME_PREFIX = "/aws/route53";
23
+ /**
24
+ * Construct id of the shared `AWS::Logs::ResourcePolicy` materialised once
25
+ * per stack when any hosted zone in that stack uses auto-managed query
26
+ * logging. Package-internal — used by the dedup helper and the unit tests, and
27
+ * intentionally not re-exported from the package barrel; consumers should not
28
+ * reference the policy directly.
29
+ */
30
+ export declare const QUERY_LOGGING_RESOURCE_POLICY_ID = "ComposureCDKRoute53QueryLoggingPolicy";
31
+ /**
32
+ * Stable resource-policy name written into CloudWatch Logs so the policy is
33
+ * deduplicated when the same stack is re-synthesised across deployments.
34
+ */
35
+ export declare const QUERY_LOGGING_RESOURCE_POLICY_NAME = "ComposureCDK-Route53QueryLogging";
14
36
  /**
15
37
  * Secure, AWS-recommended defaults applied to every public hosted zone built
16
38
  * with {@link createHostedZoneBuilder}. Each property can be individually
17
39
  * overridden via the builder's fluent API.
18
40
  *
19
- * Query logging is not enabled by default: Route53 query logs must be written
20
- * to a CloudWatch log group in `us-east-1` with a resource policy granting
21
- * `route53.amazonaws.com` write access. Opt in explicitly by calling
22
- * `.queryLogsLogGroupArn(...)` with a pre-configured log group.
41
+ * Query logging is enabled by default: the builder auto-creates a CloudWatch
42
+ * {@link import("aws-cdk-lib/aws-logs").LogGroup} under
43
+ * `${QUERY_LOGGING_LOG_GROUP_NAME_PREFIX}/<zoneName>` and a single shared
44
+ * `AWS::Logs::ResourcePolicy` granting `route53.amazonaws.com` permission to
45
+ * write log streams. Disable with `.queryLogging(false)` or supply a managed
46
+ * log group via `.queryLogging({ logGroupArn })`.
47
+ *
48
+ * @see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/query-logs.html
23
49
  */
24
50
  export declare const HOSTED_ZONE_DEFAULTS: Partial<HostedZoneBuilderProps>;
25
51
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEzE;;;;;;;GAOG;AACH,eAAO,MAAM,mCAAmC,iBAAiB,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,0CAA0C,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,kCAAkC,qCAAqC,CAAC;AAErF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,sBAAsB,CAahE,CAAC;AAaF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,mBAAmB,CAE1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,sBAAsB,CAEhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,uBAAuB,CAElE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,qBAAqB,CAE9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,CAE5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,qBAAqB,CAE9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,qBAAqB,CAE9D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,CAE5D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,CAE5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,uBAAuB,CAElE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,sBAAsB,CAEhE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,uBAAuB,CAIlE,CAAC"}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HEALTH_CHECK_DEFAULTS = exports.SVCB_RECORD_DEFAULTS = exports.HTTPS_RECORD_DEFAULTS = exports.DS_RECORD_DEFAULTS = exports.NS_RECORD_DEFAULTS = exports.CAA_RECORD_DEFAULTS = exports.SRV_RECORD_DEFAULTS = exports.MX_RECORD_DEFAULTS = exports.TXT_RECORD_DEFAULTS = exports.CNAME_RECORD_DEFAULTS = exports.AAAA_RECORD_DEFAULTS = exports.A_RECORD_DEFAULTS = exports.HOSTED_ZONE_DEFAULTS = exports.QUERY_LOGGING_RESOURCE_POLICY_NAME = exports.QUERY_LOGGING_RESOURCE_POLICY_ID = exports.QUERY_LOGGING_LOG_GROUP_NAME_PREFIX = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ /**
6
+ * Naming prefix applied to every auto-created Route 53 query-log group. A
7
+ * single shared resource policy targets `<prefix>/*` so multiple hosted zones
8
+ * in the same stack share one `AWS::Logs::ResourcePolicy` (the per-region
9
+ * soft limit is 10). Matches the prefix the Route 53 console uses.
10
+ *
11
+ * @see https://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateQueryLoggingConfig.html
12
+ */
13
+ exports.QUERY_LOGGING_LOG_GROUP_NAME_PREFIX = "/aws/route53";
14
+ /**
15
+ * Construct id of the shared `AWS::Logs::ResourcePolicy` materialised once
16
+ * per stack when any hosted zone in that stack uses auto-managed query
17
+ * logging. Package-internal — used by the dedup helper and the unit tests, and
18
+ * intentionally not re-exported from the package barrel; consumers should not
19
+ * reference the policy directly.
20
+ */
21
+ exports.QUERY_LOGGING_RESOURCE_POLICY_ID = "ComposureCDKRoute53QueryLoggingPolicy";
22
+ /**
23
+ * Stable resource-policy name written into CloudWatch Logs so the policy is
24
+ * deduplicated when the same stack is re-synthesised across deployments.
25
+ */
26
+ exports.QUERY_LOGGING_RESOURCE_POLICY_NAME = "ComposureCDK-Route53QueryLogging";
27
+ /**
28
+ * Secure, AWS-recommended defaults applied to every public hosted zone built
29
+ * with {@link createHostedZoneBuilder}. Each property can be individually
30
+ * overridden via the builder's fluent API.
31
+ *
32
+ * Query logging is enabled by default: the builder auto-creates a CloudWatch
33
+ * {@link import("aws-cdk-lib/aws-logs").LogGroup} under
34
+ * `${QUERY_LOGGING_LOG_GROUP_NAME_PREFIX}/<zoneName>` and a single shared
35
+ * `AWS::Logs::ResourcePolicy` granting `route53.amazonaws.com` permission to
36
+ * write log streams. Disable with `.queryLogging(false)` or supply a managed
37
+ * log group via `.queryLogging({ logGroupArn })`.
38
+ *
39
+ * @see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/query-logs.html
40
+ */
41
+ exports.HOSTED_ZONE_DEFAULTS = {
42
+ /**
43
+ * Add a trailing dot to the zone name so the apex is an unambiguous
44
+ * fully-qualified domain. Matches the CDK default and RFC 1035.
45
+ */
46
+ addTrailingDot: true,
47
+ /**
48
+ * Enable DNS query logging out of the box, with the auto-managed log
49
+ * group and shared resource policy described above. Set to `false` or to
50
+ * `{ logGroupArn: '...' }` to deviate.
51
+ * @see https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_detect_investigate_events_app_service_logging.html
52
+ */
53
+ queryLogging: {},
54
+ };
55
+ /**
56
+ * Default TTL applied to records built by this package when no TTL is set.
57
+ *
58
+ * Five minutes balances propagation latency against downstream DNS cache
59
+ * churn. For alias records pointing at dynamic AWS resources (CloudFront,
60
+ * ALB), this matches AWS guidance.
61
+ *
62
+ * @see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html
63
+ */
64
+ const DEFAULT_RECORD_TTL = aws_cdk_lib_1.Duration.minutes(5);
65
+ /**
66
+ * Defaults for {@link createARecordBuilder}. Overridable via the fluent API.
67
+ * The builder skips the `ttl` default for alias targets — AWS ignores TTL on
68
+ * alias records and CDK emits a warning when one is set.
69
+ */
70
+ exports.A_RECORD_DEFAULTS = {
71
+ ttl: DEFAULT_RECORD_TTL,
72
+ };
73
+ /**
74
+ * Defaults for {@link createAaaaRecordBuilder}. Overridable via the fluent API.
75
+ * Same alias-target caveat as {@link A_RECORD_DEFAULTS}.
76
+ */
77
+ exports.AAAA_RECORD_DEFAULTS = {
78
+ ttl: DEFAULT_RECORD_TTL,
79
+ };
80
+ /**
81
+ * Defaults for {@link createCnameRecordBuilder}. Overridable via the fluent API.
82
+ */
83
+ exports.CNAME_RECORD_DEFAULTS = {
84
+ ttl: DEFAULT_RECORD_TTL,
85
+ };
86
+ /**
87
+ * Defaults for {@link createTxtRecordBuilder}. Overridable via the fluent API.
88
+ */
89
+ exports.TXT_RECORD_DEFAULTS = {
90
+ ttl: DEFAULT_RECORD_TTL,
91
+ };
92
+ /**
93
+ * Defaults for {@link createMxRecordBuilder}. Overridable via the fluent API.
94
+ */
95
+ exports.MX_RECORD_DEFAULTS = {
96
+ ttl: DEFAULT_RECORD_TTL,
97
+ };
98
+ /**
99
+ * Defaults for {@link createSrvRecordBuilder}. Overridable via the fluent API.
100
+ */
101
+ exports.SRV_RECORD_DEFAULTS = {
102
+ ttl: DEFAULT_RECORD_TTL,
103
+ };
104
+ /**
105
+ * Defaults for {@link createCaaRecordBuilder}. Overridable via the fluent API.
106
+ */
107
+ exports.CAA_RECORD_DEFAULTS = {
108
+ ttl: DEFAULT_RECORD_TTL,
109
+ };
110
+ /**
111
+ * Defaults for {@link createNsRecordBuilder}. Overridable via the fluent API.
112
+ *
113
+ * A longer TTL is appropriate for delegation records — resolvers cache NS
114
+ * responses, and frequent churn forces parent-side re-delegation lookups.
115
+ */
116
+ exports.NS_RECORD_DEFAULTS = {
117
+ ttl: aws_cdk_lib_1.Duration.hours(24),
118
+ };
119
+ /**
120
+ * Defaults for {@link createDsRecordBuilder}. Overridable via the fluent API.
121
+ *
122
+ * DS records change rarely (key-signing rollovers); a long TTL reduces
123
+ * DNSSEC validation load on resolvers.
124
+ */
125
+ exports.DS_RECORD_DEFAULTS = {
126
+ ttl: aws_cdk_lib_1.Duration.hours(24),
127
+ };
128
+ /**
129
+ * Defaults for {@link createHttpsRecordBuilder}. Overridable via the fluent API.
130
+ * Same alias-target caveat as {@link A_RECORD_DEFAULTS}.
131
+ */
132
+ exports.HTTPS_RECORD_DEFAULTS = {
133
+ ttl: DEFAULT_RECORD_TTL,
134
+ };
135
+ /**
136
+ * Defaults for {@link createSvcbRecordBuilder}. Overridable via the fluent API.
137
+ */
138
+ exports.SVCB_RECORD_DEFAULTS = {
139
+ ttl: DEFAULT_RECORD_TTL,
140
+ };
141
+ /**
142
+ * Defaults for {@link createHealthCheckBuilder}. Overridable via the fluent API.
143
+ *
144
+ * `failureThreshold` and `requestInterval` match CDK's defaults but are set
145
+ * explicitly so the values are surfaced in the package's defaults table and
146
+ * can be reasoned about without consulting CDK source. `measureLatency` is
147
+ * defaulted ON to align with the AWS Well-Architected operational-excellence
148
+ * pillar (per-region latency visibility on the Route 53 Health Checks
149
+ * console). It carries a small additional cost — disable explicitly via
150
+ * `.measureLatency(false)` if cost is a concern.
151
+ *
152
+ * @see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-determining-health-of-endpoints.html
153
+ */
154
+ exports.HEALTH_CHECK_DEFAULTS = {
155
+ failureThreshold: 3,
156
+ requestInterval: aws_cdk_lib_1.Duration.seconds(30),
157
+ measureLatency: true,
158
+ };
159
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AAevC;;;;;;;GAOG;AACU,QAAA,mCAAmC,GAAG,cAAc,CAAC;AAElE;;;;;;GAMG;AACU,QAAA,gCAAgC,GAAG,uCAAuC,CAAC;AAExF;;;GAGG;AACU,QAAA,kCAAkC,GAAG,kCAAkC,CAAC;AAErF;;;;;;;;;;;;;GAaG;AACU,QAAA,oBAAoB,GAAoC;IACnE;;;OAGG;IACH,cAAc,EAAE,IAAI;IACpB;;;;;OAKG;IACH,YAAY,EAAE,EAAE;CACjB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,kBAAkB,GAAG,sBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE/C;;;;GAIG;AACU,QAAA,iBAAiB,GAAiC;IAC7D,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;;GAGG;AACU,QAAA,oBAAoB,GAAoC;IACnE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,qBAAqB,GAAqC;IACrE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,mBAAmB,GAAmC;IACjE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,kBAAkB,GAAkC;IAC/D,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,mBAAmB,GAAmC;IACjE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,mBAAmB,GAAmC;IACjE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;;;;GAKG;AACU,QAAA,kBAAkB,GAAkC;IAC/D,GAAG,EAAE,sBAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACU,QAAA,kBAAkB,GAAkC;IAC/D,GAAG,EAAE,sBAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACU,QAAA,qBAAqB,GAAqC;IACrE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;GAEG;AACU,QAAA,oBAAoB,GAAoC;IACnE,GAAG,EAAE,kBAAkB;CACxB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACU,QAAA,qBAAqB,GAAqC;IACrE,gBAAgB,EAAE,CAAC;IACnB,eAAe,EAAE,sBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,cAAc,EAAE,IAAI;CACrB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-record-builder.d.ts","sourceRoot":"","sources":["../../src/ds-record-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAG5B;;;;;GAKG;AACH,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;IACvE,qDAAqD;IACrD,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;;;;;;;GAQG;AAEH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;AAE/E,cAAM,eAAgB,YAAW,SAAS,CAAC,qBAAqB,CAAC;IAC/D,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAM;IAE1C,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,qBAAqB;CAsB9F;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CAGxD"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDsRecordBuilder = createDsRecordBuilder;
4
+ const aws_route53_1 = require("aws-cdk-lib/aws-route53");
5
+ const core_1 = require("@composurecdk/core");
6
+ const defaults_js_1 = require("./defaults.js");
7
+ class DsRecordBuilder {
8
+ props = {};
9
+ build(scope, id, context) {
10
+ const { zone, values, ...rest } = this.props;
11
+ if (!zone) {
12
+ throw new Error(`DsRecordBuilder "${id}" requires a zone. Call .zone() with an IHostedZone.`);
13
+ }
14
+ if (!values || values.length === 0) {
15
+ throw new Error(`DsRecordBuilder "${id}" requires non-empty values. ` +
16
+ `Call .values() with one or more DS rdata strings (keyTag algorithm digestType digest).`);
17
+ }
18
+ const mergedProps = {
19
+ ...defaults_js_1.DS_RECORD_DEFAULTS,
20
+ ...rest,
21
+ values,
22
+ zone: (0, core_1.resolve)(zone, context),
23
+ };
24
+ const record = new aws_route53_1.DsRecord(scope, id, mergedProps);
25
+ return { record };
26
+ }
27
+ }
28
+ /**
29
+ * Creates a new {@link IDsRecordBuilder} for configuring a Route53 DS record.
30
+ *
31
+ * @returns A fluent builder for a Route53 DS record.
32
+ */
33
+ function createDsRecordBuilder() {
34
+ // eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::Route53::RecordSet has no Tags property
35
+ return (0, core_1.Builder)(DsRecordBuilder);
36
+ }
37
+ //# sourceMappingURL=ds-record-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-record-builder.js","sourceRoot":"","sources":["../../src/ds-record-builder.ts"],"names":[],"mappings":";;AA0EA,sDAGC;AA7ED,yDAAyF;AAEzF,6CAM4B;AAC5B,+CAAmD;AAiCnD,MAAM,eAAe;IACnB,KAAK,GAAkC,EAAE,CAAC;IAE1C,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,OAAgC;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,sDAAsD,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,oBAAoB,EAAE,+BAA+B;gBACnD,wFAAwF,CAC3F,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG;YAClB,GAAG,gCAAkB;YACrB,GAAG,IAAI;YACP,MAAM;YACN,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,OAAO,CAAC;SACZ,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,sBAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;GAIG;AACH,SAAgB,qBAAqB;IACnC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAAwC,eAAe,CAAC,CAAC;AACzE,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { type IHealthCheck } from "aws-cdk-lib/aws-route53";
2
2
  import { type Alarm } from "aws-cdk-lib/aws-cloudwatch";
3
3
  import { type IConstruct } from "constructs";
4
- import { type IBuilder, type Lifecycle, type Resolvable } from "@composurecdk/core";
4
+ import { COPY_STATE, type Lifecycle, type Resolvable } from "@composurecdk/core";
5
+ import { type ITaggedBuilder } from "@composurecdk/cloudformation";
5
6
  import { AlarmDefinitionBuilder } from "@composurecdk/cloudwatch";
6
7
  import type { HealthCheckAlarmConfig } from "./health-check-alarm-config.js";
7
8
  import type { HealthCheckBuilderResult } from "./health-check-builder.js";
@@ -51,7 +52,7 @@ export interface HealthCheckAlarmBuilderResult {
51
52
  *
52
53
  * @see {@link createHealthCheckAlarmBuilder}
53
54
  */
54
- export type IHealthCheckAlarmBuilder = IBuilder<HealthCheckAlarmBuilderProps, HealthCheckAlarmBuilder>;
55
+ export type IHealthCheckAlarmBuilder = ITaggedBuilder<HealthCheckAlarmBuilderProps, HealthCheckAlarmBuilder>;
55
56
  /**
56
57
  * Shared alarm-assembly used by both {@link createHealthCheckBuilder} (in its
57
58
  * own stack) and {@link createHealthCheckAlarmBuilder} (typically in a
@@ -89,6 +90,8 @@ declare class HealthCheckAlarmBuilder implements Lifecycle<HealthCheckAlarmBuild
89
90
  * the recommended ones.
90
91
  */
91
92
  addAlarm(key: string, configure: (alarm: AlarmDefinitionBuilder<IHealthCheck>) => AlarmDefinitionBuilder<IHealthCheck>): this;
93
+ /** @internal — see ADR-0005. */
94
+ [COPY_STATE](target: HealthCheckAlarmBuilder): void;
92
95
  build(scope: IConstruct, id: string, context?: Record<string, object>): HealthCheckAlarmBuilderResult;
93
96
  }
94
97
  /**