pangea-cloudflare 0.1.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 (445) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.rspec_status +504 -0
  4. data/Gemfile +5 -0
  5. data/Gemfile.lock +88 -0
  6. data/LICENSE +201 -0
  7. data/Rakefile +8 -0
  8. data/flake.lock +835 -0
  9. data/flake.nix +60 -0
  10. data/gemset.nix +272 -0
  11. data/lib/pangea/resources/cloudflare.rb +213 -0
  12. data/lib/pangea/resources/cloudflare_access_rule/resource.rb +71 -0
  13. data/lib/pangea/resources/cloudflare_access_rule/types.rb +93 -0
  14. data/lib/pangea/resources/cloudflare_account/resource.rb +28 -0
  15. data/lib/pangea/resources/cloudflare_account/types.rb +12 -0
  16. data/lib/pangea/resources/cloudflare_account_dns_settings/resource.rb +27 -0
  17. data/lib/pangea/resources/cloudflare_account_dns_settings/types.rb +11 -0
  18. data/lib/pangea/resources/cloudflare_account_dns_settings_internal_view/resource.rb +27 -0
  19. data/lib/pangea/resources/cloudflare_account_dns_settings_internal_view/types.rb +11 -0
  20. data/lib/pangea/resources/cloudflare_account_member/resource.rb +29 -0
  21. data/lib/pangea/resources/cloudflare_account_member/types.rb +13 -0
  22. data/lib/pangea/resources/cloudflare_account_subscription/resource.rb +27 -0
  23. data/lib/pangea/resources/cloudflare_account_subscription/types.rb +11 -0
  24. data/lib/pangea/resources/cloudflare_account_token/resource.rb +27 -0
  25. data/lib/pangea/resources/cloudflare_account_token/types.rb +11 -0
  26. data/lib/pangea/resources/cloudflare_address_map/resource.rb +26 -0
  27. data/lib/pangea/resources/cloudflare_address_map/types.rb +10 -0
  28. data/lib/pangea/resources/cloudflare_api_shield/resource.rb +27 -0
  29. data/lib/pangea/resources/cloudflare_api_shield/types.rb +11 -0
  30. data/lib/pangea/resources/cloudflare_api_shield_discovery_operation/resource.rb +27 -0
  31. data/lib/pangea/resources/cloudflare_api_shield_discovery_operation/types.rb +11 -0
  32. data/lib/pangea/resources/cloudflare_api_shield_operation/resource.rb +30 -0
  33. data/lib/pangea/resources/cloudflare_api_shield_operation/types.rb +13 -0
  34. data/lib/pangea/resources/cloudflare_api_shield_operation_schema_validation_settings/resource.rb +27 -0
  35. data/lib/pangea/resources/cloudflare_api_shield_operation_schema_validation_settings/types.rb +11 -0
  36. data/lib/pangea/resources/cloudflare_api_shield_schema/resource.rb +30 -0
  37. data/lib/pangea/resources/cloudflare_api_shield_schema/types.rb +14 -0
  38. data/lib/pangea/resources/cloudflare_api_shield_schema_validation_settings/resource.rb +27 -0
  39. data/lib/pangea/resources/cloudflare_api_shield_schema_validation_settings/types.rb +11 -0
  40. data/lib/pangea/resources/cloudflare_api_token/resource.rb +33 -0
  41. data/lib/pangea/resources/cloudflare_api_token/types.rb +14 -0
  42. data/lib/pangea/resources/cloudflare_argo/resource.rb +91 -0
  43. data/lib/pangea/resources/cloudflare_argo/types.rb +92 -0
  44. data/lib/pangea/resources/cloudflare_authenticated_origin_pulls/resource.rb +29 -0
  45. data/lib/pangea/resources/cloudflare_authenticated_origin_pulls/types.rb +13 -0
  46. data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_certificate/resource.rb +33 -0
  47. data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_certificate/types.rb +13 -0
  48. data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_settings/resource.rb +26 -0
  49. data/lib/pangea/resources/cloudflare_authenticated_origin_pulls_settings/types.rb +10 -0
  50. data/lib/pangea/resources/cloudflare_bot_management/resource.rb +31 -0
  51. data/lib/pangea/resources/cloudflare_bot_management/types.rb +15 -0
  52. data/lib/pangea/resources/cloudflare_byo_ip_prefix/resource.rb +27 -0
  53. data/lib/pangea/resources/cloudflare_byo_ip_prefix/types.rb +11 -0
  54. data/lib/pangea/resources/cloudflare_calls_sfu_app/resource.rb +27 -0
  55. data/lib/pangea/resources/cloudflare_calls_sfu_app/types.rb +11 -0
  56. data/lib/pangea/resources/cloudflare_calls_turn_app/resource.rb +27 -0
  57. data/lib/pangea/resources/cloudflare_calls_turn_app/types.rb +11 -0
  58. data/lib/pangea/resources/cloudflare_certificate_pack/resource.rb +26 -0
  59. data/lib/pangea/resources/cloudflare_certificate_pack/types.rb +10 -0
  60. data/lib/pangea/resources/cloudflare_cloud_connector_rules/resource.rb +27 -0
  61. data/lib/pangea/resources/cloudflare_cloud_connector_rules/types.rb +11 -0
  62. data/lib/pangea/resources/cloudflare_cloudforce_one_request/resource.rb +27 -0
  63. data/lib/pangea/resources/cloudflare_cloudforce_one_request/types.rb +11 -0
  64. data/lib/pangea/resources/cloudflare_cloudforce_one_request_asset/resource.rb +27 -0
  65. data/lib/pangea/resources/cloudflare_cloudforce_one_request_asset/types.rb +11 -0
  66. data/lib/pangea/resources/cloudflare_cloudforce_one_request_message/resource.rb +27 -0
  67. data/lib/pangea/resources/cloudflare_cloudforce_one_request_message/types.rb +11 -0
  68. data/lib/pangea/resources/cloudflare_cloudforce_one_request_priority/resource.rb +27 -0
  69. data/lib/pangea/resources/cloudflare_cloudforce_one_request_priority/types.rb +11 -0
  70. data/lib/pangea/resources/cloudflare_content_scanning/resource.rb +27 -0
  71. data/lib/pangea/resources/cloudflare_content_scanning/types.rb +11 -0
  72. data/lib/pangea/resources/cloudflare_content_scanning_expression/resource.rb +27 -0
  73. data/lib/pangea/resources/cloudflare_content_scanning_expression/types.rb +11 -0
  74. data/lib/pangea/resources/cloudflare_custom_hostname/resource.rb +158 -0
  75. data/lib/pangea/resources/cloudflare_custom_hostname/types/ssl_types.rb +145 -0
  76. data/lib/pangea/resources/cloudflare_custom_hostname/types.rb +107 -0
  77. data/lib/pangea/resources/cloudflare_custom_hostname_fallback_origin/resource.rb +27 -0
  78. data/lib/pangea/resources/cloudflare_custom_hostname_fallback_origin/types.rb +11 -0
  79. data/lib/pangea/resources/cloudflare_custom_pages/resource.rb +27 -0
  80. data/lib/pangea/resources/cloudflare_custom_pages/types.rb +11 -0
  81. data/lib/pangea/resources/cloudflare_custom_ssl/resource.rb +36 -0
  82. data/lib/pangea/resources/cloudflare_custom_ssl/types.rb +16 -0
  83. data/lib/pangea/resources/cloudflare_d1_database/resource.rb +92 -0
  84. data/lib/pangea/resources/cloudflare_d1_database/types.rb +110 -0
  85. data/lib/pangea/resources/cloudflare_dns_firewall/resource.rb +27 -0
  86. data/lib/pangea/resources/cloudflare_dns_firewall/types.rb +11 -0
  87. data/lib/pangea/resources/cloudflare_dns_zone_transfers_acl/resource.rb +27 -0
  88. data/lib/pangea/resources/cloudflare_dns_zone_transfers_acl/types.rb +11 -0
  89. data/lib/pangea/resources/cloudflare_dns_zone_transfers_incoming/resource.rb +27 -0
  90. data/lib/pangea/resources/cloudflare_dns_zone_transfers_incoming/types.rb +11 -0
  91. data/lib/pangea/resources/cloudflare_dns_zone_transfers_outgoing/resource.rb +26 -0
  92. data/lib/pangea/resources/cloudflare_dns_zone_transfers_outgoing/types.rb +10 -0
  93. data/lib/pangea/resources/cloudflare_dns_zone_transfers_peer/resource.rb +26 -0
  94. data/lib/pangea/resources/cloudflare_dns_zone_transfers_peer/types.rb +10 -0
  95. data/lib/pangea/resources/cloudflare_dns_zone_transfers_tsig/resource.rb +26 -0
  96. data/lib/pangea/resources/cloudflare_dns_zone_transfers_tsig/types.rb +10 -0
  97. data/lib/pangea/resources/cloudflare_email_routing_address/resource.rb +26 -0
  98. data/lib/pangea/resources/cloudflare_email_routing_address/types.rb +10 -0
  99. data/lib/pangea/resources/cloudflare_email_routing_catch_all/resource.rb +26 -0
  100. data/lib/pangea/resources/cloudflare_email_routing_catch_all/types.rb +10 -0
  101. data/lib/pangea/resources/cloudflare_email_routing_dns/resource.rb +27 -0
  102. data/lib/pangea/resources/cloudflare_email_routing_dns/types.rb +11 -0
  103. data/lib/pangea/resources/cloudflare_email_routing_rule/resource.rb +26 -0
  104. data/lib/pangea/resources/cloudflare_email_routing_rule/types.rb +10 -0
  105. data/lib/pangea/resources/cloudflare_email_routing_settings/resource.rb +26 -0
  106. data/lib/pangea/resources/cloudflare_email_routing_settings/types.rb +10 -0
  107. data/lib/pangea/resources/cloudflare_email_security_block_sender/resource.rb +27 -0
  108. data/lib/pangea/resources/cloudflare_email_security_block_sender/types.rb +11 -0
  109. data/lib/pangea/resources/cloudflare_email_security_impersonation_registry/resource.rb +27 -0
  110. data/lib/pangea/resources/cloudflare_email_security_impersonation_registry/types.rb +11 -0
  111. data/lib/pangea/resources/cloudflare_email_security_trusted_domains/resource.rb +27 -0
  112. data/lib/pangea/resources/cloudflare_email_security_trusted_domains/types.rb +11 -0
  113. data/lib/pangea/resources/cloudflare_filter/resource.rb +64 -0
  114. data/lib/pangea/resources/cloudflare_filter/types.rb +54 -0
  115. data/lib/pangea/resources/cloudflare_firewall_rule/resource.rb +70 -0
  116. data/lib/pangea/resources/cloudflare_firewall_rule/types.rb +64 -0
  117. data/lib/pangea/resources/cloudflare_healthcheck/resource.rb +139 -0
  118. data/lib/pangea/resources/cloudflare_healthcheck/types.rb +192 -0
  119. data/lib/pangea/resources/cloudflare_hostname_tls_setting/resource.rb +26 -0
  120. data/lib/pangea/resources/cloudflare_hostname_tls_setting/types.rb +10 -0
  121. data/lib/pangea/resources/cloudflare_hyperdrive_config/resource.rb +176 -0
  122. data/lib/pangea/resources/cloudflare_hyperdrive_config/types/attributes.rb +125 -0
  123. data/lib/pangea/resources/cloudflare_hyperdrive_config/types/caching.rb +52 -0
  124. data/lib/pangea/resources/cloudflare_hyperdrive_config/types/enums.rb +37 -0
  125. data/lib/pangea/resources/cloudflare_hyperdrive_config/types/mtls.rb +52 -0
  126. data/lib/pangea/resources/cloudflare_hyperdrive_config/types/origin.rb +89 -0
  127. data/lib/pangea/resources/cloudflare_hyperdrive_config/types.rb +23 -0
  128. data/lib/pangea/resources/cloudflare_image/resource.rb +27 -0
  129. data/lib/pangea/resources/cloudflare_image/types.rb +11 -0
  130. data/lib/pangea/resources/cloudflare_image_variant/resource.rb +26 -0
  131. data/lib/pangea/resources/cloudflare_image_variant/types.rb +10 -0
  132. data/lib/pangea/resources/cloudflare_keyless_certificate/resource.rb +26 -0
  133. data/lib/pangea/resources/cloudflare_keyless_certificate/types.rb +10 -0
  134. data/lib/pangea/resources/cloudflare_leaked_credential_check/resource.rb +27 -0
  135. data/lib/pangea/resources/cloudflare_leaked_credential_check/types.rb +11 -0
  136. data/lib/pangea/resources/cloudflare_leaked_credential_check_rule/resource.rb +27 -0
  137. data/lib/pangea/resources/cloudflare_leaked_credential_check_rule/types.rb +11 -0
  138. data/lib/pangea/resources/cloudflare_list/resource.rb +57 -0
  139. data/lib/pangea/resources/cloudflare_list/types.rb +49 -0
  140. data/lib/pangea/resources/cloudflare_list_item/resource.rb +130 -0
  141. data/lib/pangea/resources/cloudflare_list_item/types.rb +183 -0
  142. data/lib/pangea/resources/cloudflare_load_balancer/resource.rb +97 -0
  143. data/lib/pangea/resources/cloudflare_load_balancer/types.rb +75 -0
  144. data/lib/pangea/resources/cloudflare_load_balancer_monitor/resource.rb +78 -0
  145. data/lib/pangea/resources/cloudflare_load_balancer_monitor/types.rb +62 -0
  146. data/lib/pangea/resources/cloudflare_load_balancer_pool/resource.rb +78 -0
  147. data/lib/pangea/resources/cloudflare_load_balancer_pool/types.rb +81 -0
  148. data/lib/pangea/resources/cloudflare_logpull_retention/resource.rb +27 -0
  149. data/lib/pangea/resources/cloudflare_logpull_retention/types.rb +11 -0
  150. data/lib/pangea/resources/cloudflare_logpush_job/resource.rb +40 -0
  151. data/lib/pangea/resources/cloudflare_logpush_job/types.rb +24 -0
  152. data/lib/pangea/resources/cloudflare_logpush_ownership_challenge/resource.rb +27 -0
  153. data/lib/pangea/resources/cloudflare_logpush_ownership_challenge/types.rb +11 -0
  154. data/lib/pangea/resources/cloudflare_magic_network_monitoring_configuration/resource.rb +27 -0
  155. data/lib/pangea/resources/cloudflare_magic_network_monitoring_configuration/types.rb +11 -0
  156. data/lib/pangea/resources/cloudflare_magic_network_monitoring_rule/resource.rb +27 -0
  157. data/lib/pangea/resources/cloudflare_magic_network_monitoring_rule/types.rb +11 -0
  158. data/lib/pangea/resources/cloudflare_magic_transit_connector/resource.rb +27 -0
  159. data/lib/pangea/resources/cloudflare_magic_transit_connector/types.rb +11 -0
  160. data/lib/pangea/resources/cloudflare_magic_transit_site/resource.rb +27 -0
  161. data/lib/pangea/resources/cloudflare_magic_transit_site/types.rb +11 -0
  162. data/lib/pangea/resources/cloudflare_magic_transit_site_acl/resource.rb +27 -0
  163. data/lib/pangea/resources/cloudflare_magic_transit_site_acl/types.rb +11 -0
  164. data/lib/pangea/resources/cloudflare_magic_transit_site_lan/resource.rb +27 -0
  165. data/lib/pangea/resources/cloudflare_magic_transit_site_lan/types.rb +11 -0
  166. data/lib/pangea/resources/cloudflare_magic_transit_site_wan/resource.rb +27 -0
  167. data/lib/pangea/resources/cloudflare_magic_transit_site_wan/types.rb +11 -0
  168. data/lib/pangea/resources/cloudflare_magic_wan_gre_tunnel/resource.rb +27 -0
  169. data/lib/pangea/resources/cloudflare_magic_wan_gre_tunnel/types.rb +11 -0
  170. data/lib/pangea/resources/cloudflare_magic_wan_ipsec_tunnel/resource.rb +27 -0
  171. data/lib/pangea/resources/cloudflare_magic_wan_ipsec_tunnel/types.rb +11 -0
  172. data/lib/pangea/resources/cloudflare_magic_wan_static_route/resource.rb +27 -0
  173. data/lib/pangea/resources/cloudflare_magic_wan_static_route/types.rb +11 -0
  174. data/lib/pangea/resources/cloudflare_managed_transforms/resource.rb +36 -0
  175. data/lib/pangea/resources/cloudflare_managed_transforms/types.rb +12 -0
  176. data/lib/pangea/resources/cloudflare_mtls_certificate/resource.rb +34 -0
  177. data/lib/pangea/resources/cloudflare_mtls_certificate/types.rb +14 -0
  178. data/lib/pangea/resources/cloudflare_notification_policy/resource.rb +34 -0
  179. data/lib/pangea/resources/cloudflare_notification_policy/types.rb +18 -0
  180. data/lib/pangea/resources/cloudflare_notification_policy_webhooks/resource.rb +27 -0
  181. data/lib/pangea/resources/cloudflare_notification_policy_webhooks/types.rb +11 -0
  182. data/lib/pangea/resources/cloudflare_observatory_scheduled_test/resource.rb +27 -0
  183. data/lib/pangea/resources/cloudflare_observatory_scheduled_test/types.rb +11 -0
  184. data/lib/pangea/resources/cloudflare_organization/resource.rb +27 -0
  185. data/lib/pangea/resources/cloudflare_organization/types.rb +11 -0
  186. data/lib/pangea/resources/cloudflare_organization_profile/resource.rb +27 -0
  187. data/lib/pangea/resources/cloudflare_organization_profile/types.rb +11 -0
  188. data/lib/pangea/resources/cloudflare_origin_ca_certificate/resource.rb +97 -0
  189. data/lib/pangea/resources/cloudflare_origin_ca_certificate/types.rb +125 -0
  190. data/lib/pangea/resources/cloudflare_page_rule/resource.rb +78 -0
  191. data/lib/pangea/resources/cloudflare_page_rule/types.rb +71 -0
  192. data/lib/pangea/resources/cloudflare_page_shield_policy/resource.rb +27 -0
  193. data/lib/pangea/resources/cloudflare_page_shield_policy/types.rb +11 -0
  194. data/lib/pangea/resources/cloudflare_pages_domain/resource.rb +28 -0
  195. data/lib/pangea/resources/cloudflare_pages_domain/types.rb +12 -0
  196. data/lib/pangea/resources/cloudflare_pages_project/resource/deployment_config.rb +80 -0
  197. data/lib/pangea/resources/cloudflare_pages_project/resource/main.rb +75 -0
  198. data/lib/pangea/resources/cloudflare_pages_project/resource.rb +19 -0
  199. data/lib/pangea/resources/cloudflare_pages_project/types/attributes.rb +51 -0
  200. data/lib/pangea/resources/cloudflare_pages_project/types/bindings.rb +38 -0
  201. data/lib/pangea/resources/cloudflare_pages_project/types/build_config.rb +55 -0
  202. data/lib/pangea/resources/cloudflare_pages_project/types/deployment_config.rb +83 -0
  203. data/lib/pangea/resources/cloudflare_pages_project/types.rb +27 -0
  204. data/lib/pangea/resources/cloudflare_queue/resource.rb +108 -0
  205. data/lib/pangea/resources/cloudflare_queue/types.rb +132 -0
  206. data/lib/pangea/resources/cloudflare_queue_consumer/resource.rb +31 -0
  207. data/lib/pangea/resources/cloudflare_queue_consumer/types.rb +15 -0
  208. data/lib/pangea/resources/cloudflare_r2_bucket/resource.rb +91 -0
  209. data/lib/pangea/resources/cloudflare_r2_bucket/types.rb +101 -0
  210. data/lib/pangea/resources/cloudflare_r2_bucket_cors/resource.rb +130 -0
  211. data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/attributes.rb +105 -0
  212. data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/cors_allowed.rb +59 -0
  213. data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/cors_method.rb +34 -0
  214. data/lib/pangea/resources/cloudflare_r2_bucket_cors/types/cors_rule.rb +74 -0
  215. data/lib/pangea/resources/cloudflare_r2_bucket_cors/types.rb +22 -0
  216. data/lib/pangea/resources/cloudflare_r2_bucket_event_notification/resource.rb +31 -0
  217. data/lib/pangea/resources/cloudflare_r2_bucket_event_notification/types.rb +15 -0
  218. data/lib/pangea/resources/cloudflare_r2_bucket_lifecycle/resource.rb +31 -0
  219. data/lib/pangea/resources/cloudflare_r2_bucket_lifecycle/types.rb +26 -0
  220. data/lib/pangea/resources/cloudflare_r2_bucket_lock/resource.rb +29 -0
  221. data/lib/pangea/resources/cloudflare_r2_bucket_lock/types.rb +13 -0
  222. data/lib/pangea/resources/cloudflare_r2_bucket_sippy/resource.rb +26 -0
  223. data/lib/pangea/resources/cloudflare_r2_bucket_sippy/types.rb +10 -0
  224. data/lib/pangea/resources/cloudflare_r2_custom_domain/resource.rb +28 -0
  225. data/lib/pangea/resources/cloudflare_r2_custom_domain/types.rb +12 -0
  226. data/lib/pangea/resources/cloudflare_r2_managed_domain/resource.rb +26 -0
  227. data/lib/pangea/resources/cloudflare_r2_managed_domain/types.rb +10 -0
  228. data/lib/pangea/resources/cloudflare_rate_limit/resource.rb +129 -0
  229. data/lib/pangea/resources/cloudflare_rate_limit/types.rb +143 -0
  230. data/lib/pangea/resources/cloudflare_record/resource.rb +91 -0
  231. data/lib/pangea/resources/cloudflare_record/types.rb +114 -0
  232. data/lib/pangea/resources/cloudflare_regional_hostname/resource.rb +27 -0
  233. data/lib/pangea/resources/cloudflare_regional_hostname/types.rb +11 -0
  234. data/lib/pangea/resources/cloudflare_regional_tiered_cache/resource.rb +82 -0
  235. data/lib/pangea/resources/cloudflare_regional_tiered_cache/types.rb +73 -0
  236. data/lib/pangea/resources/cloudflare_registrar_domain/resource.rb +27 -0
  237. data/lib/pangea/resources/cloudflare_registrar_domain/types.rb +11 -0
  238. data/lib/pangea/resources/cloudflare_ruleset/resource.rb +113 -0
  239. data/lib/pangea/resources/cloudflare_ruleset/types/ruleset_rule.rb +84 -0
  240. data/lib/pangea/resources/cloudflare_ruleset/types.rb +155 -0
  241. data/lib/pangea/resources/cloudflare_schema_validation_operation_settings/resource.rb +27 -0
  242. data/lib/pangea/resources/cloudflare_schema_validation_operation_settings/types.rb +11 -0
  243. data/lib/pangea/resources/cloudflare_schema_validation_schemas/resource.rb +27 -0
  244. data/lib/pangea/resources/cloudflare_schema_validation_schemas/types.rb +11 -0
  245. data/lib/pangea/resources/cloudflare_schema_validation_settings/resource.rb +27 -0
  246. data/lib/pangea/resources/cloudflare_schema_validation_settings/types.rb +11 -0
  247. data/lib/pangea/resources/cloudflare_snippet/resource.rb +27 -0
  248. data/lib/pangea/resources/cloudflare_snippet/types.rb +11 -0
  249. data/lib/pangea/resources/cloudflare_snippet_rules/resource.rb +27 -0
  250. data/lib/pangea/resources/cloudflare_snippet_rules/types.rb +11 -0
  251. data/lib/pangea/resources/cloudflare_spectrum_application/resource.rb +122 -0
  252. data/lib/pangea/resources/cloudflare_spectrum_application/types.rb +147 -0
  253. data/lib/pangea/resources/cloudflare_static_route/resource.rb +119 -0
  254. data/lib/pangea/resources/cloudflare_static_route/types.rb +131 -0
  255. data/lib/pangea/resources/cloudflare_stream/resource.rb +35 -0
  256. data/lib/pangea/resources/cloudflare_stream/types.rb +15 -0
  257. data/lib/pangea/resources/cloudflare_stream_audio_track/resource.rb +27 -0
  258. data/lib/pangea/resources/cloudflare_stream_audio_track/types.rb +11 -0
  259. data/lib/pangea/resources/cloudflare_stream_caption_language/resource.rb +27 -0
  260. data/lib/pangea/resources/cloudflare_stream_caption_language/types.rb +11 -0
  261. data/lib/pangea/resources/cloudflare_stream_download/resource.rb +27 -0
  262. data/lib/pangea/resources/cloudflare_stream_download/types.rb +11 -0
  263. data/lib/pangea/resources/cloudflare_stream_key/resource.rb +27 -0
  264. data/lib/pangea/resources/cloudflare_stream_key/types.rb +11 -0
  265. data/lib/pangea/resources/cloudflare_stream_live_input/resource.rb +27 -0
  266. data/lib/pangea/resources/cloudflare_stream_live_input/types.rb +11 -0
  267. data/lib/pangea/resources/cloudflare_stream_watermark/resource.rb +27 -0
  268. data/lib/pangea/resources/cloudflare_stream_watermark/types.rb +11 -0
  269. data/lib/pangea/resources/cloudflare_stream_webhook/resource.rb +27 -0
  270. data/lib/pangea/resources/cloudflare_stream_webhook/types.rb +11 -0
  271. data/lib/pangea/resources/cloudflare_tiered_cache/resource.rb +83 -0
  272. data/lib/pangea/resources/cloudflare_tiered_cache/types.rb +74 -0
  273. data/lib/pangea/resources/cloudflare_total_tls/resource.rb +26 -0
  274. data/lib/pangea/resources/cloudflare_total_tls/types.rb +10 -0
  275. data/lib/pangea/resources/cloudflare_turnstile_widget/resource.rb +34 -0
  276. data/lib/pangea/resources/cloudflare_turnstile_widget/types.rb +15 -0
  277. data/lib/pangea/resources/cloudflare_url_normalization_settings/resource.rb +27 -0
  278. data/lib/pangea/resources/cloudflare_url_normalization_settings/types.rb +11 -0
  279. data/lib/pangea/resources/cloudflare_user/resource.rb +27 -0
  280. data/lib/pangea/resources/cloudflare_user/types.rb +11 -0
  281. data/lib/pangea/resources/cloudflare_user_agent_blocking_rule/resource.rb +27 -0
  282. data/lib/pangea/resources/cloudflare_user_agent_blocking_rule/types.rb +11 -0
  283. data/lib/pangea/resources/cloudflare_waiting_room/resource.rb +122 -0
  284. data/lib/pangea/resources/cloudflare_waiting_room/types.rb +171 -0
  285. data/lib/pangea/resources/cloudflare_waiting_room_event/resource.rb +118 -0
  286. data/lib/pangea/resources/cloudflare_waiting_room_event/types.rb +153 -0
  287. data/lib/pangea/resources/cloudflare_waiting_room_rules/resource.rb +40 -0
  288. data/lib/pangea/resources/cloudflare_waiting_room_rules/types.rb +32 -0
  289. data/lib/pangea/resources/cloudflare_waiting_room_settings/resource.rb +27 -0
  290. data/lib/pangea/resources/cloudflare_waiting_room_settings/types.rb +11 -0
  291. data/lib/pangea/resources/cloudflare_web3_hostname/resource.rb +27 -0
  292. data/lib/pangea/resources/cloudflare_web3_hostname/types.rb +11 -0
  293. data/lib/pangea/resources/cloudflare_web_analytics_rule/resource.rb +27 -0
  294. data/lib/pangea/resources/cloudflare_web_analytics_rule/types.rb +11 -0
  295. data/lib/pangea/resources/cloudflare_web_analytics_site/resource.rb +33 -0
  296. data/lib/pangea/resources/cloudflare_web_analytics_site/types.rb +13 -0
  297. data/lib/pangea/resources/cloudflare_worker/resource.rb +27 -0
  298. data/lib/pangea/resources/cloudflare_worker/types.rb +11 -0
  299. data/lib/pangea/resources/cloudflare_worker_route/resource.rb +62 -0
  300. data/lib/pangea/resources/cloudflare_worker_route/types.rb +50 -0
  301. data/lib/pangea/resources/cloudflare_worker_script/resource.rb +90 -0
  302. data/lib/pangea/resources/cloudflare_worker_script/types.rb +109 -0
  303. data/lib/pangea/resources/cloudflare_worker_version/resource.rb +27 -0
  304. data/lib/pangea/resources/cloudflare_worker_version/types.rb +11 -0
  305. data/lib/pangea/resources/cloudflare_workers_cron_trigger/resource.rb +94 -0
  306. data/lib/pangea/resources/cloudflare_workers_cron_trigger/types.rb +102 -0
  307. data/lib/pangea/resources/cloudflare_workers_custom_domain/resource.rb +93 -0
  308. data/lib/pangea/resources/cloudflare_workers_custom_domain/types.rb +93 -0
  309. data/lib/pangea/resources/cloudflare_workers_deployment/resource.rb +28 -0
  310. data/lib/pangea/resources/cloudflare_workers_deployment/types.rb +12 -0
  311. data/lib/pangea/resources/cloudflare_workers_for_platforms_dispatch_namespace/resource.rb +27 -0
  312. data/lib/pangea/resources/cloudflare_workers_for_platforms_dispatch_namespace/types.rb +11 -0
  313. data/lib/pangea/resources/cloudflare_workers_kv/resource.rb +98 -0
  314. data/lib/pangea/resources/cloudflare_workers_kv/types.rb +103 -0
  315. data/lib/pangea/resources/cloudflare_workers_kv_namespace/resource.rb +84 -0
  316. data/lib/pangea/resources/cloudflare_workers_kv_namespace/types.rb +74 -0
  317. data/lib/pangea/resources/cloudflare_workers_script_subdomain/resource.rb +27 -0
  318. data/lib/pangea/resources/cloudflare_workers_script_subdomain/types.rb +11 -0
  319. data/lib/pangea/resources/cloudflare_workflow/resource.rb +27 -0
  320. data/lib/pangea/resources/cloudflare_workflow/types.rb +11 -0
  321. data/lib/pangea/resources/cloudflare_zero_trust_access_application/block_builders.rb +116 -0
  322. data/lib/pangea/resources/cloudflare_zero_trust_access_application/resource.rb +161 -0
  323. data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/attributes.rb +102 -0
  324. data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/cors_headers.rb +37 -0
  325. data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/destination.rb +37 -0
  326. data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/enums.rb +31 -0
  327. data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/footer_link.rb +31 -0
  328. data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/landing_page_design.rb +34 -0
  329. data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/saas_app.rb +44 -0
  330. data/lib/pangea/resources/cloudflare_zero_trust_access_application/types/scim_config.rb +35 -0
  331. data/lib/pangea/resources/cloudflare_zero_trust_access_application/types.rb +26 -0
  332. data/lib/pangea/resources/cloudflare_zero_trust_access_custom_page/resource.rb +26 -0
  333. data/lib/pangea/resources/cloudflare_zero_trust_access_custom_page/types.rb +10 -0
  334. data/lib/pangea/resources/cloudflare_zero_trust_access_group/resource.rb +31 -0
  335. data/lib/pangea/resources/cloudflare_zero_trust_access_group/types.rb +15 -0
  336. data/lib/pangea/resources/cloudflare_zero_trust_access_identity_provider/resource.rb +31 -0
  337. data/lib/pangea/resources/cloudflare_zero_trust_access_identity_provider/types.rb +15 -0
  338. data/lib/pangea/resources/cloudflare_zero_trust_access_infrastructure_target/resource.rb +26 -0
  339. data/lib/pangea/resources/cloudflare_zero_trust_access_infrastructure_target/types.rb +10 -0
  340. data/lib/pangea/resources/cloudflare_zero_trust_access_key_configuration/resource.rb +26 -0
  341. data/lib/pangea/resources/cloudflare_zero_trust_access_key_configuration/types.rb +10 -0
  342. data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_certificate/resource.rb +26 -0
  343. data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_certificate/types.rb +10 -0
  344. data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_hostname_settings/resource.rb +26 -0
  345. data/lib/pangea/resources/cloudflare_zero_trust_access_mtls_hostname_settings/types.rb +10 -0
  346. data/lib/pangea/resources/cloudflare_zero_trust_access_policy/resource.rb +39 -0
  347. data/lib/pangea/resources/cloudflare_zero_trust_access_policy/types.rb +23 -0
  348. data/lib/pangea/resources/cloudflare_zero_trust_access_service_token/resource.rb +26 -0
  349. data/lib/pangea/resources/cloudflare_zero_trust_access_service_token/types.rb +10 -0
  350. data/lib/pangea/resources/cloudflare_zero_trust_access_short_lived_certificate/resource.rb +26 -0
  351. data/lib/pangea/resources/cloudflare_zero_trust_access_short_lived_certificate/types.rb +10 -0
  352. data/lib/pangea/resources/cloudflare_zero_trust_access_tag/resource.rb +26 -0
  353. data/lib/pangea/resources/cloudflare_zero_trust_access_tag/types.rb +10 -0
  354. data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile/resource.rb +26 -0
  355. data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile/types.rb +10 -0
  356. data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile_local_domain_fallback/resource.rb +26 -0
  357. data/lib/pangea/resources/cloudflare_zero_trust_device_custom_profile_local_domain_fallback/types.rb +10 -0
  358. data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile/resource.rb +26 -0
  359. data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile/types.rb +10 -0
  360. data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_certificates/resource.rb +26 -0
  361. data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_certificates/types.rb +10 -0
  362. data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_local_domain_fallback/resource.rb +26 -0
  363. data/lib/pangea/resources/cloudflare_zero_trust_device_default_profile_local_domain_fallback/types.rb +10 -0
  364. data/lib/pangea/resources/cloudflare_zero_trust_device_managed_networks/resource.rb +26 -0
  365. data/lib/pangea/resources/cloudflare_zero_trust_device_managed_networks/types.rb +10 -0
  366. data/lib/pangea/resources/cloudflare_zero_trust_device_posture_integration/resource.rb +26 -0
  367. data/lib/pangea/resources/cloudflare_zero_trust_device_posture_integration/types.rb +10 -0
  368. data/lib/pangea/resources/cloudflare_zero_trust_device_posture_rule/resource.rb +26 -0
  369. data/lib/pangea/resources/cloudflare_zero_trust_device_posture_rule/types.rb +10 -0
  370. data/lib/pangea/resources/cloudflare_zero_trust_device_settings/resource.rb +26 -0
  371. data/lib/pangea/resources/cloudflare_zero_trust_device_settings/types.rb +10 -0
  372. data/lib/pangea/resources/cloudflare_zero_trust_dex_test/resource.rb +26 -0
  373. data/lib/pangea/resources/cloudflare_zero_trust_dex_test/types.rb +10 -0
  374. data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_entry/resource.rb +26 -0
  375. data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_entry/types.rb +10 -0
  376. data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_profile/resource.rb +26 -0
  377. data/lib/pangea/resources/cloudflare_zero_trust_dlp_custom_profile/types.rb +10 -0
  378. data/lib/pangea/resources/cloudflare_zero_trust_dlp_dataset/resource.rb +26 -0
  379. data/lib/pangea/resources/cloudflare_zero_trust_dlp_dataset/types.rb +10 -0
  380. data/lib/pangea/resources/cloudflare_zero_trust_dlp_entry/resource.rb +26 -0
  381. data/lib/pangea/resources/cloudflare_zero_trust_dlp_entry/types.rb +10 -0
  382. data/lib/pangea/resources/cloudflare_zero_trust_dlp_integration_entry/resource.rb +26 -0
  383. data/lib/pangea/resources/cloudflare_zero_trust_dlp_integration_entry/types.rb +10 -0
  384. data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_entry/resource.rb +26 -0
  385. data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_entry/types.rb +10 -0
  386. data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_profile/resource.rb +26 -0
  387. data/lib/pangea/resources/cloudflare_zero_trust_dlp_predefined_profile/types.rb +10 -0
  388. data/lib/pangea/resources/cloudflare_zero_trust_dns_location/resource.rb +26 -0
  389. data/lib/pangea/resources/cloudflare_zero_trust_dns_location/types.rb +10 -0
  390. data/lib/pangea/resources/cloudflare_zero_trust_gateway_certificate/resource.rb +26 -0
  391. data/lib/pangea/resources/cloudflare_zero_trust_gateway_certificate/types.rb +10 -0
  392. data/lib/pangea/resources/cloudflare_zero_trust_gateway_logging/resource.rb +26 -0
  393. data/lib/pangea/resources/cloudflare_zero_trust_gateway_logging/types.rb +10 -0
  394. data/lib/pangea/resources/cloudflare_zero_trust_gateway_policy/resource.rb +34 -0
  395. data/lib/pangea/resources/cloudflare_zero_trust_gateway_policy/types.rb +18 -0
  396. data/lib/pangea/resources/cloudflare_zero_trust_gateway_proxy_endpoint/resource.rb +26 -0
  397. data/lib/pangea/resources/cloudflare_zero_trust_gateway_proxy_endpoint/types.rb +10 -0
  398. data/lib/pangea/resources/cloudflare_zero_trust_gateway_settings/resource.rb +26 -0
  399. data/lib/pangea/resources/cloudflare_zero_trust_gateway_settings/types.rb +10 -0
  400. data/lib/pangea/resources/cloudflare_zero_trust_list/resource.rb +26 -0
  401. data/lib/pangea/resources/cloudflare_zero_trust_list/types.rb +10 -0
  402. data/lib/pangea/resources/cloudflare_zero_trust_network_hostname_route/resource.rb +26 -0
  403. data/lib/pangea/resources/cloudflare_zero_trust_network_hostname_route/types.rb +10 -0
  404. data/lib/pangea/resources/cloudflare_zero_trust_organization/resource.rb +26 -0
  405. data/lib/pangea/resources/cloudflare_zero_trust_organization/types.rb +10 -0
  406. data/lib/pangea/resources/cloudflare_zero_trust_risk_behavior/resource.rb +26 -0
  407. data/lib/pangea/resources/cloudflare_zero_trust_risk_behavior/types.rb +10 -0
  408. data/lib/pangea/resources/cloudflare_zero_trust_risk_scoring_integration/resource.rb +26 -0
  409. data/lib/pangea/resources/cloudflare_zero_trust_risk_scoring_integration/types.rb +10 -0
  410. data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared/resource.rb +33 -0
  411. data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared/types.rb +13 -0
  412. data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_config/resource.rb +28 -0
  413. data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_config/types.rb +12 -0
  414. data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_route/resource.rb +30 -0
  415. data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_route/types.rb +14 -0
  416. data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_virtual_network/resource.rb +26 -0
  417. data/lib/pangea/resources/cloudflare_zero_trust_tunnel_cloudflared_virtual_network/types.rb +10 -0
  418. data/lib/pangea/resources/cloudflare_zero_trust_tunnel_warp_connector/resource.rb +26 -0
  419. data/lib/pangea/resources/cloudflare_zero_trust_tunnel_warp_connector/types.rb +10 -0
  420. data/lib/pangea/resources/cloudflare_zone/resource.rb +71 -0
  421. data/lib/pangea/resources/cloudflare_zone/types.rb +62 -0
  422. data/lib/pangea/resources/cloudflare_zone_cache_reserve/resource.rb +27 -0
  423. data/lib/pangea/resources/cloudflare_zone_cache_reserve/types.rb +11 -0
  424. data/lib/pangea/resources/cloudflare_zone_cache_variants/resource.rb +27 -0
  425. data/lib/pangea/resources/cloudflare_zone_cache_variants/types.rb +11 -0
  426. data/lib/pangea/resources/cloudflare_zone_dns_settings/resource.rb +27 -0
  427. data/lib/pangea/resources/cloudflare_zone_dns_settings/types.rb +11 -0
  428. data/lib/pangea/resources/cloudflare_zone_dnssec/resource.rb +96 -0
  429. data/lib/pangea/resources/cloudflare_zone_dnssec/types.rb +81 -0
  430. data/lib/pangea/resources/cloudflare_zone_hold/resource.rb +26 -0
  431. data/lib/pangea/resources/cloudflare_zone_hold/types.rb +10 -0
  432. data/lib/pangea/resources/cloudflare_zone_lockdown/resource.rb +27 -0
  433. data/lib/pangea/resources/cloudflare_zone_lockdown/types.rb +11 -0
  434. data/lib/pangea/resources/cloudflare_zone_settings_override/resource.rb +80 -0
  435. data/lib/pangea/resources/cloudflare_zone_settings_override/types.rb +64 -0
  436. data/lib/pangea/resources/cloudflare_zone_subscription/resource.rb +26 -0
  437. data/lib/pangea/resources/cloudflare_zone_subscription/types.rb +10 -0
  438. data/lib/pangea/resources/types/cloudflare/core.rb +130 -0
  439. data/lib/pangea/resources/types/cloudflare/load_balancing.rb +104 -0
  440. data/lib/pangea/resources/types/cloudflare/security.rb +107 -0
  441. data/lib/pangea/resources/types/cloudflare/workers.rb +60 -0
  442. data/lib/pangea-cloudflare/version.rb +5 -0
  443. data/lib/pangea-cloudflare.rb +215 -0
  444. data/pangea-cloudflare.gemspec +33 -0
  445. metadata +586 -0
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_custom_pages/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareCustomPages
9
+ def cloudflare_custom_pages(name, attributes = {})
10
+ attrs = Cloudflare::Types::CustomPagesAttributes.new(attributes)
11
+ resource(:cloudflare_custom_pages, name) do
12
+ zone_id attrs.zone_id if attrs.zone_id
13
+ account_id attrs.account_id if attrs.account_id
14
+ end
15
+ ResourceReference.new(
16
+ type: 'cloudflare_custom_pages',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_custom_pages.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareCustomPages
25
+ end
26
+ end
27
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class CustomPagesAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId.optional.default(nil)
9
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId.optional.default(nil)
10
+ end
11
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_custom_ssl/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareCustomSsl
9
+ def cloudflare_custom_ssl(name, attributes = {})
10
+ attrs = Cloudflare::Types::CustomSslAttributes.new(attributes)
11
+ resource(:cloudflare_custom_ssl, name) do
12
+ zone_id attrs.zone_id
13
+ certificate attrs.certificate if attrs.certificate
14
+ private_key attrs.private_key if attrs.private_key
15
+ bundle_method attrs.bundle_method if attrs.bundle_method
16
+ geo_restrictions attrs.geo_restrictions if attrs.geo_restrictions
17
+ type attrs.type if attrs.type
18
+ policy attrs.policy if attrs.policy
19
+ end
20
+ ResourceReference.new(
21
+ type: 'cloudflare_custom_ssl',
22
+ name: name,
23
+ resource_attributes: attrs.to_h,
24
+ outputs: {
25
+ id: "${cloudflare_custom_ssl.#{name}.id}",
26
+ status: "${cloudflare_custom_ssl.#{name}.status}",
27
+ expires_on: "${cloudflare_custom_ssl.#{name}.expires_on}"
28
+ }
29
+ )
30
+ end
31
+ end
32
+ module Cloudflare
33
+ include CloudflareCustomSsl
34
+ end
35
+ end
36
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class CustomSslAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
9
+ attribute :certificate, Dry::Types['strict.string'].optional.default(nil)
10
+ attribute :private_key, Dry::Types['strict.string'].optional.default(nil)
11
+ attribute :bundle_method, Dry::Types['strict.string'].enum('ubiquitous', 'optimal', 'force').optional.default(nil)
12
+ attribute :geo_restrictions, Dry::Types['strict.hash'].optional.default(nil)
13
+ attribute :type, Dry::Types['strict.string'].enum('legacy_custom', 'sni_custom').optional.default(nil)
14
+ attribute :policy, Dry::Types['strict.string'].optional.default(nil)
15
+ end
16
+ end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+ # Copyright 2025 The Pangea Authors
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+
17
+ require 'pangea/resources/base'
18
+ require 'pangea/resources/reference'
19
+ require 'pangea/resources/cloudflare_d1_database/types'
20
+ require 'pangea/resource_registry'
21
+
22
+ module Pangea
23
+ module Resources
24
+ # Cloudflare D1 Database resource module that self-registers
25
+ module CloudflareD1Database
26
+ # Create a Cloudflare D1 Database
27
+ #
28
+ # D1 is Cloudflare's serverless SQL database built on SQLite.
29
+ # Provides global low-latency access with automatic replication.
30
+ #
31
+ # @param name [Symbol] The resource name
32
+ # @param attributes [Hash] Database attributes
33
+ # @option attributes [String] :account_id Cloudflare account ID (required)
34
+ # @option attributes [String] :name Database name (required)
35
+ # @option attributes [String] :primary_location_hint Primary region (optional: wnam, enam, weur, eeur, apac, oc)
36
+ #
37
+ # @return [ResourceReference] Reference object with outputs
38
+ #
39
+ # @example Create a production database
40
+ # d1_database(:users_db, {
41
+ # account_id: "a" * 32,
42
+ # name: "users-production",
43
+ # primary_location_hint: "wnam"
44
+ # })
45
+ #
46
+ # @example Create database for EU data residency
47
+ # d1_database(:gdpr_db, {
48
+ # account_id: "a" * 32,
49
+ # name: "eu-customer-data",
50
+ # primary_location_hint: "weur"
51
+ # })
52
+ #
53
+ # @example Create database with automatic location
54
+ # d1_database(:cache_db, {
55
+ # account_id: "a" * 32,
56
+ # name: "edge-cache"
57
+ # })
58
+ def cloudflare_d1_database(name, attributes = {})
59
+ # Validate attributes using dry-struct
60
+ db_attrs = Cloudflare::Types::D1DatabaseAttributes.new(attributes)
61
+
62
+ # Generate terraform resource block via terraform-synthesizer
63
+ resource(:cloudflare_d1_database, name) do
64
+ account_id db_attrs.account_id
65
+ name db_attrs.name
66
+ primary_location_hint db_attrs.primary_location_hint if db_attrs.primary_location_hint
67
+ end
68
+
69
+ # Return resource reference with available outputs
70
+ ResourceReference.new(
71
+ type: 'cloudflare_d1_database',
72
+ name: name,
73
+ resource_attributes: db_attrs.to_h,
74
+ outputs: {
75
+ id: "${cloudflare_d1_database.#{name}.id}",
76
+ database_id: "${cloudflare_d1_database.#{name}.id}",
77
+ database_name: "${cloudflare_d1_database.#{name}.name}",
78
+ version: "${cloudflare_d1_database.#{name}.version}"
79
+ }
80
+ )
81
+ end
82
+ end
83
+
84
+ # Maintain backward compatibility by extending Cloudflare module
85
+ module Cloudflare
86
+ include CloudflareD1Database
87
+ end
88
+ end
89
+ end
90
+
91
+ # Auto-register this module when it's loaded
92
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+ # Copyright 2025 The Pangea Authors
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+
17
+ require 'dry-struct'
18
+ require 'pangea/resources/types'
19
+
20
+ module Pangea
21
+ module Resources
22
+ module Cloudflare
23
+ module Types
24
+ # D1 database primary location hint enum
25
+ CloudflareD1Location = Dry::Types['strict.string'].enum(
26
+ 'wnam', # Western North America
27
+ 'enam', # Eastern North America
28
+ 'weur', # Western Europe
29
+ 'eeur', # Eastern Europe
30
+ 'apac', # Asia-Pacific
31
+ 'oc' # Oceania
32
+ )
33
+
34
+ # Type-safe attributes for Cloudflare D1 Database
35
+ #
36
+ # D1 is Cloudflare's serverless SQL database built on SQLite.
37
+ # Perfect for relational data with global low-latency access.
38
+ #
39
+ # @example Create a D1 database
40
+ # D1DatabaseAttributes.new(
41
+ # account_id: "a" * 32,
42
+ # name: "production-db",
43
+ # primary_location_hint: "wnam"
44
+ # )
45
+ class D1DatabaseAttributes < Dry::Struct
46
+ transform_keys(&:to_sym)
47
+
48
+ # @!attribute account_id
49
+ # @return [String] The Cloudflare account ID
50
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId
51
+
52
+ # @!attribute name
53
+ # @return [String] Database name (human-readable identifier)
54
+ attribute :name, Dry::Types['strict.string'].constrained(
55
+ min_size: 1,
56
+ max_size: 256
57
+ )
58
+
59
+ # @!attribute primary_location_hint
60
+ # @return [String, nil] Primary location hint for database
61
+ attribute :primary_location_hint, CloudflareD1Location.optional.default(nil)
62
+
63
+ # Get the full region name from location code
64
+ # @return [String, nil] Human-readable region name
65
+ def region_name
66
+ case primary_location_hint
67
+ when 'wnam'
68
+ 'Western North America'
69
+ when 'enam'
70
+ 'Eastern North America'
71
+ when 'weur'
72
+ 'Western Europe'
73
+ when 'eeur'
74
+ 'Eastern Europe'
75
+ when 'apac'
76
+ 'Asia-Pacific'
77
+ when 'oc'
78
+ 'Oceania'
79
+ else
80
+ 'Automatic'
81
+ end
82
+ end
83
+
84
+ # Extract environment from name if present
85
+ # @return [String, nil] Environment name if detected
86
+ def environment
87
+ case name.downcase
88
+ when /production|prod/
89
+ 'production'
90
+ when /staging|stage/
91
+ 'staging'
92
+ when /development|dev/
93
+ 'development'
94
+ when /test/
95
+ 'test'
96
+ else
97
+ nil
98
+ end
99
+ end
100
+
101
+ # Check if this is a production database based on naming
102
+ # @return [Boolean] true if appears to be production
103
+ def production?
104
+ environment == 'production'
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_dns_firewall/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareDnsFirewall
9
+ def cloudflare_dns_firewall(name, attributes = {})
10
+ attrs = Cloudflare::Types::DnsFirewallAttributes.new(attributes)
11
+ resource(:cloudflare_dns_firewall, name) do
12
+ zone_id attrs.zone_id if attrs.zone_id
13
+ account_id attrs.account_id if attrs.account_id
14
+ end
15
+ ResourceReference.new(
16
+ type: 'cloudflare_dns_firewall',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_dns_firewall.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareDnsFirewall
25
+ end
26
+ end
27
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class DnsFirewallAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId.optional.default(nil)
9
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId.optional.default(nil)
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_dns_zone_transfers_acl/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareDnsZoneTransfersAcl
9
+ def cloudflare_dns_zone_transfers_acl(name, attributes = {})
10
+ attrs = Cloudflare::Types::DnsZoneTransfersAclAttributes.new(attributes)
11
+ resource(:cloudflare_dns_zone_transfers_acl, name) do
12
+ zone_id attrs.zone_id if attrs.zone_id
13
+ account_id attrs.account_id if attrs.account_id
14
+ end
15
+ ResourceReference.new(
16
+ type: 'cloudflare_dns_zone_transfers_acl',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_dns_zone_transfers_acl.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareDnsZoneTransfersAcl
25
+ end
26
+ end
27
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class DnsZoneTransfersAclAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId.optional.default(nil)
9
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId.optional.default(nil)
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_dns_zone_transfers_incoming/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareDnsZoneTransfersIncoming
9
+ def cloudflare_dns_zone_transfers_incoming(name, attributes = {})
10
+ attrs = Cloudflare::Types::DnsZoneTransfersIncomingAttributes.new(attributes)
11
+ resource(:cloudflare_dns_zone_transfers_incoming, name) do
12
+ zone_id attrs.zone_id if attrs.zone_id
13
+ account_id attrs.account_id if attrs.account_id
14
+ end
15
+ ResourceReference.new(
16
+ type: 'cloudflare_dns_zone_transfers_incoming',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_dns_zone_transfers_incoming.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareDnsZoneTransfersIncoming
25
+ end
26
+ end
27
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class DnsZoneTransfersIncomingAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId.optional.default(nil)
9
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId.optional.default(nil)
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_dns_zone_transfers_outgoing/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareDnsZoneTransfersOutgoing
9
+ def cloudflare_dns_zone_transfers_outgoing(name, attributes = {})
10
+ attrs = Cloudflare::Types::DnsZoneTransfersOutgoingAttributes.new(attributes)
11
+ resource(:cloudflare_dns_zone_transfers_outgoing, name) do
12
+ zone_id attrs.zone_id
13
+ end
14
+ ResourceReference.new(
15
+ type: 'cloudflare_dns_zone_transfers_outgoing',
16
+ name: name,
17
+ resource_attributes: attrs.to_h,
18
+ outputs: { id: "${cloudflare_dns_zone_transfers_outgoing.\#{name}.id}" }
19
+ )
20
+ end
21
+ end
22
+ module Cloudflare
23
+ include CloudflareDnsZoneTransfersOutgoing
24
+ end
25
+ end
26
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class DnsZoneTransfersOutgoingAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
9
+ end
10
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_dns_zone_transfers_peer/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareDnsZoneTransfersPeer
9
+ def cloudflare_dns_zone_transfers_peer(name, attributes = {})
10
+ attrs = Cloudflare::Types::DnsZoneTransfersPeerAttributes.new(attributes)
11
+ resource(:cloudflare_dns_zone_transfers_peer, name) do
12
+ zone_id attrs.zone_id
13
+ end
14
+ ResourceReference.new(
15
+ type: 'cloudflare_dns_zone_transfers_peer',
16
+ name: name,
17
+ resource_attributes: attrs.to_h,
18
+ outputs: { id: "${cloudflare_dns_zone_transfers_peer.\#{name}.id}" }
19
+ )
20
+ end
21
+ end
22
+ module Cloudflare
23
+ include CloudflareDnsZoneTransfersPeer
24
+ end
25
+ end
26
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class DnsZoneTransfersPeerAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
9
+ end
10
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_dns_zone_transfers_tsig/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareDnsZoneTransfersTsig
9
+ def cloudflare_dns_zone_transfers_tsig(name, attributes = {})
10
+ attrs = Cloudflare::Types::DnsZoneTransfersTsigAttributes.new(attributes)
11
+ resource(:cloudflare_dns_zone_transfers_tsig, name) do
12
+ zone_id attrs.zone_id
13
+ end
14
+ ResourceReference.new(
15
+ type: 'cloudflare_dns_zone_transfers_tsig',
16
+ name: name,
17
+ resource_attributes: attrs.to_h,
18
+ outputs: { id: "${cloudflare_dns_zone_transfers_tsig.\#{name}.id}" }
19
+ )
20
+ end
21
+ end
22
+ module Cloudflare
23
+ include CloudflareDnsZoneTransfersTsig
24
+ end
25
+ end
26
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class DnsZoneTransfersTsigAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
9
+ end
10
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_email_routing_address/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareEmailRoutingAddress
9
+ def cloudflare_email_routing_address(name, attributes = {})
10
+ attrs = Cloudflare::Types::EmailRoutingAddressAttributes.new(attributes)
11
+ resource(:cloudflare_email_routing_address, name) do
12
+ zone_id attrs.zone_id
13
+ end
14
+ ResourceReference.new(
15
+ type: 'cloudflare_email_routing_address',
16
+ name: name,
17
+ resource_attributes: attrs.to_h,
18
+ outputs: { id: "${cloudflare_email_routing_address.\#{name}.id}" }
19
+ )
20
+ end
21
+ end
22
+ module Cloudflare
23
+ include CloudflareEmailRoutingAddress
24
+ end
25
+ end
26
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class EmailRoutingAddressAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
9
+ end
10
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_email_routing_catch_all/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareEmailRoutingCatchAll
9
+ def cloudflare_email_routing_catch_all(name, attributes = {})
10
+ attrs = Cloudflare::Types::EmailRoutingCatchAllAttributes.new(attributes)
11
+ resource(:cloudflare_email_routing_catch_all, name) do
12
+ zone_id attrs.zone_id
13
+ end
14
+ ResourceReference.new(
15
+ type: 'cloudflare_email_routing_catch_all',
16
+ name: name,
17
+ resource_attributes: attrs.to_h,
18
+ outputs: { id: "${cloudflare_email_routing_catch_all.\#{name}.id}" }
19
+ )
20
+ end
21
+ end
22
+ module Cloudflare
23
+ include CloudflareEmailRoutingCatchAll
24
+ end
25
+ end
26
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class EmailRoutingCatchAllAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
9
+ end
10
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_email_routing_dns/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareEmailRoutingDns
9
+ def cloudflare_email_routing_dns(name, attributes = {})
10
+ attrs = Cloudflare::Types::EmailRoutingDnsAttributes.new(attributes)
11
+ resource(:cloudflare_email_routing_dns, name) do
12
+ zone_id attrs.zone_id if attrs.zone_id
13
+ account_id attrs.account_id if attrs.account_id
14
+ end
15
+ ResourceReference.new(
16
+ type: 'cloudflare_email_routing_dns',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_email_routing_dns.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareEmailRoutingDns
25
+ end
26
+ end
27
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class EmailRoutingDnsAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId.optional.default(nil)
9
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId.optional.default(nil)
10
+ end
11
+ end