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,74 @@
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
+ # Tiered cache toggle enum
25
+ CloudflareTieredCacheValue = Dry::Types['strict.string'].enum(
26
+ 'on',
27
+ 'off'
28
+ )
29
+
30
+ # Type-safe attributes for Cloudflare Tiered Cache
31
+ #
32
+ # Smart Tiered Cache topology configuration for improved cache hit ratios.
33
+ # Uses Cloudflare's network topology to serve cached content from optimal locations.
34
+ #
35
+ # Replaces deprecated tiered_caching attribute in cloudflare_argo resource.
36
+ #
37
+ # @example Enable Smart Tiered Cache
38
+ # TieredCacheAttributes.new(
39
+ # zone_id: "023e105f4ecef8ad9ca31a8372d0c353",
40
+ # value: "on"
41
+ # )
42
+ #
43
+ # @example Disable Smart Tiered Cache
44
+ # TieredCacheAttributes.new(
45
+ # zone_id: "023e105f4ecef8ad9ca31a8372d0c353",
46
+ # value: "off"
47
+ # )
48
+ class TieredCacheAttributes < Dry::Struct
49
+ transform_keys(&:to_sym)
50
+
51
+ # @!attribute zone_id
52
+ # @return [String] The zone ID
53
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
54
+
55
+ # @!attribute value
56
+ # @return [String] Enable or disable Smart Tiered Cache ("on" or "off")
57
+ attribute :value, CloudflareTieredCacheValue
58
+
59
+ # Check if Tiered Cache is enabled
60
+ # @return [Boolean] true if enabled
61
+ def enabled?
62
+ value == 'on'
63
+ end
64
+
65
+ # Check if Tiered Cache is disabled
66
+ # @return [Boolean] true if disabled
67
+ def disabled?
68
+ value == 'off'
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ 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_total_tls/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareTotalTls
9
+ def cloudflare_total_tls(name, attributes = {})
10
+ attrs = Cloudflare::Types::TotalTlsAttributes.new(attributes)
11
+ resource(:cloudflare_total_tls, name) do
12
+ zone_id attrs.zone_id
13
+ end
14
+ ResourceReference.new(
15
+ type: 'cloudflare_total_tls',
16
+ name: name,
17
+ resource_attributes: attrs.to_h,
18
+ outputs: { id: "${cloudflare_total_tls.\#{name}.id}" }
19
+ )
20
+ end
21
+ end
22
+ module Cloudflare
23
+ include CloudflareTotalTls
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 TotalTlsAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
9
+ end
10
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_turnstile_widget/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareTurnstileWidget
9
+ def cloudflare_turnstile_widget(name, attributes = {})
10
+ attrs = Cloudflare::Types::TurnstileWidgetAttributes.new(attributes)
11
+ resource(:cloudflare_turnstile_widget, name) do
12
+ account_id attrs.account_id
13
+ name attrs.name
14
+ domains attrs.domains
15
+ mode attrs.mode
16
+ region attrs.region if attrs.region
17
+ offlabel attrs.offlabel if attrs.offlabel
18
+ end
19
+ ResourceReference.new(
20
+ type: 'cloudflare_turnstile_widget',
21
+ name: name,
22
+ resource_attributes: attrs.to_h,
23
+ outputs: {
24
+ id: "${cloudflare_turnstile_widget.#{name}.id}",
25
+ secret: "${cloudflare_turnstile_widget.#{name}.secret}"
26
+ }
27
+ )
28
+ end
29
+ end
30
+ module Cloudflare
31
+ include CloudflareTurnstileWidget
32
+ end
33
+ end
34
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class TurnstileWidgetAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId
9
+ attribute :name, Dry::Types['strict.string']
10
+ attribute :domains, Dry::Types['strict.array'].of(Dry::Types['strict.string'])
11
+ attribute :mode, Dry::Types['strict.string']
12
+ attribute :region, Dry::Types['strict.string'].optional.default(nil)
13
+ attribute :offlabel, Dry::Types['strict.bool'].optional.default(nil)
14
+ end
15
+ 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_url_normalization_settings/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareURLNormalizationSettings
9
+ def cloudflare_url_normalization_settings(name, attributes = {})
10
+ attrs = Cloudflare::Types::URLNormalizationSettingsAttributes.new(attributes)
11
+ resource(:cloudflare_url_normalization_settings, 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_url_normalization_settings',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_url_normalization_settings.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareURLNormalizationSettings
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 URLNormalizationSettingsAttributes < 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_user/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareUser
9
+ def cloudflare_user(name, attributes = {})
10
+ attrs = Cloudflare::Types::UserAttributes.new(attributes)
11
+ resource(:cloudflare_user, name) do
12
+ account_id attrs.account_id if attrs.account_id
13
+ zone_id attrs.zone_id if attrs.zone_id
14
+ end
15
+ ResourceReference.new(
16
+ type: 'cloudflare_user',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_user.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareUser
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 UserAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId.optional.default(nil)
9
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId.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_user_agent_blocking_rule/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareUserAgentBlockingRule
9
+ def cloudflare_user_agent_blocking_rule(name, attributes = {})
10
+ attrs = Cloudflare::Types::UserAgentBlockingRuleAttributes.new(attributes)
11
+ resource(:cloudflare_user_agent_blocking_rule, 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_user_agent_blocking_rule',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_user_agent_blocking_rule.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareUserAgentBlockingRule
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 UserAgentBlockingRuleAttributes < 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,122 @@
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_waiting_room/types'
20
+ require 'pangea/resource_registry'
21
+
22
+ module Pangea
23
+ module Resources
24
+ # Cloudflare Waiting Room resource module that self-registers
25
+ module CloudflareWaitingRoom
26
+ # Create a Cloudflare Waiting Room
27
+ #
28
+ # Manage traffic surges by queueing excess visitors in a customizable
29
+ # waiting room before allowing them to proceed to your application.
30
+ #
31
+ # @param name [Symbol] The resource name
32
+ # @param attributes [Hash] Waiting room attributes
33
+ # @option attributes [String] :zone_id Zone ID (required)
34
+ # @option attributes [String] :host Domain for waiting room (required)
35
+ # @option attributes [String] :name Waiting room identifier (required)
36
+ # @option attributes [Integer] :new_users_per_minute Rate limit (200-60,000, required)
37
+ # @option attributes [Integer] :total_active_users Max concurrent users (200-1,000,000, required)
38
+ # @option attributes [String] :path URL path to protect
39
+ # @option attributes [Boolean] :queue_all Queue all traffic
40
+ # @option attributes [String] :queueing_method Queue type (fifo/random/passthrough/reject)
41
+ # @option attributes [String] :description Description
42
+ # @option attributes [Integer] :session_duration Session duration in minutes
43
+ # @option attributes [Boolean] :disable_session_renewal Disable session renewal
44
+ # @option attributes [Boolean] :suspended Suspend waiting room
45
+ # @option attributes [String] :custom_page_html Custom HTML
46
+ # @option attributes [Hash] :cookie_attributes Cookie configuration
47
+ #
48
+ # @return [ResourceReference] Reference object with outputs
49
+ #
50
+ # @example Basic waiting room
51
+ # cloudflare_waiting_room(:shop, {
52
+ # zone_id: "023e105f4ecef8ad9ca31a8372d0c353",
53
+ # host: "shop.example.com",
54
+ # name: "shop_queue",
55
+ # new_users_per_minute: 200,
56
+ # total_active_users: 300
57
+ # })
58
+ #
59
+ # @example Advanced waiting room with path
60
+ # cloudflare_waiting_room(:checkout, {
61
+ # zone_id: "023e105f4ecef8ad9ca31a8372d0c353",
62
+ # host: "shop.example.com",
63
+ # path: "/checkout",
64
+ # name: "checkout_queue",
65
+ # new_users_per_minute: 500,
66
+ # total_active_users: 1000,
67
+ # queueing_method: "fifo",
68
+ # session_duration: 10
69
+ # })
70
+ def cloudflare_waiting_room(name, attributes = {})
71
+ # Validate attributes using dry-struct
72
+ wr_attrs = Cloudflare::Types::WaitingRoomAttributes.new(attributes)
73
+
74
+ # Generate terraform resource block via terraform-synthesizer
75
+ resource(:cloudflare_waiting_room, name) do
76
+ zone_id wr_attrs.zone_id
77
+ host wr_attrs.host
78
+ name wr_attrs.name
79
+ new_users_per_minute wr_attrs.new_users_per_minute
80
+ total_active_users wr_attrs.total_active_users
81
+
82
+ path wr_attrs.path if wr_attrs.path
83
+ queue_all wr_attrs.queue_all if wr_attrs.queue_all
84
+ queueing_method wr_attrs.queueing_method if wr_attrs.queueing_method
85
+ description wr_attrs.description if wr_attrs.description
86
+ session_duration wr_attrs.session_duration if wr_attrs.session_duration
87
+ disable_session_renewal wr_attrs.disable_session_renewal unless wr_attrs.disable_session_renewal.nil?
88
+ suspended wr_attrs.suspended if wr_attrs.suspended
89
+ custom_page_html wr_attrs.custom_page_html if wr_attrs.custom_page_html
90
+ default_template_language wr_attrs.default_template_language if wr_attrs.default_template_language
91
+ json_response_enabled wr_attrs.json_response_enabled if wr_attrs.json_response_enabled
92
+ queueing_status_code wr_attrs.queueing_status_code if wr_attrs.queueing_status_code
93
+
94
+ if wr_attrs.cookie_attributes
95
+ cookie_attributes do
96
+ samesite wr_attrs.cookie_attributes.samesite if wr_attrs.cookie_attributes.samesite
97
+ secure wr_attrs.cookie_attributes.secure if wr_attrs.cookie_attributes.secure
98
+ end
99
+ end
100
+ end
101
+
102
+ # Return resource reference with available outputs
103
+ ResourceReference.new(
104
+ type: 'cloudflare_waiting_room',
105
+ name: name,
106
+ resource_attributes: wr_attrs.to_h,
107
+ outputs: {
108
+ id: "${cloudflare_waiting_room.#{name}.id}"
109
+ }
110
+ )
111
+ end
112
+ end
113
+
114
+ # Maintain backward compatibility by extending Cloudflare module
115
+ module Cloudflare
116
+ include CloudflareWaitingRoom
117
+ end
118
+ end
119
+ end
120
+
121
+ # Auto-register this module when it's loaded
122
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,171 @@
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
+ # Queueing method enum for waiting rooms
25
+ CloudflareWaitingRoomQueueingMethod = Dry::Types['strict.string'].enum(
26
+ 'fifo', # First-in-first-out
27
+ 'random', # Random selection
28
+ 'passthrough', # Let all through
29
+ 'reject' # Reject all
30
+ )
31
+
32
+ # Cookie SameSite attribute enum
33
+ CloudflareCookieSameSite = Dry::Types['strict.string'].enum(
34
+ 'auto',
35
+ 'lax',
36
+ 'none',
37
+ 'strict'
38
+ )
39
+
40
+ # Cookie Secure attribute enum
41
+ CloudflareCookieSecure = Dry::Types['strict.string'].enum(
42
+ 'auto',
43
+ 'always',
44
+ 'never'
45
+ )
46
+
47
+ # Cookie attributes configuration
48
+ class WaitingRoomCookieAttributes < Dry::Struct
49
+ transform_keys(&:to_sym)
50
+
51
+ # @!attribute samesite
52
+ # @return [String, nil] Cookie SameSite attribute
53
+ attribute :samesite, CloudflareCookieSameSite.optional.default(nil)
54
+
55
+ # @!attribute secure
56
+ # @return [String, nil] Cookie Secure attribute
57
+ attribute :secure, CloudflareCookieSecure.optional.default(nil)
58
+ end
59
+
60
+ # Type-safe attributes for Cloudflare Waiting Room
61
+ #
62
+ # Manage traffic surges by queueing excess visitors in a
63
+ # customizable waiting room before allowing them to proceed.
64
+ #
65
+ # @example Basic waiting room
66
+ # WaitingRoomAttributes.new(
67
+ # zone_id: "023e105f4ecef8ad9ca31a8372d0c353",
68
+ # host: "shop.example.com",
69
+ # name: "shop_queue",
70
+ # new_users_per_minute: 200,
71
+ # total_active_users: 300
72
+ # )
73
+ class WaitingRoomAttributes < Dry::Struct
74
+ transform_keys(&:to_sym)
75
+
76
+ # @!attribute zone_id
77
+ # @return [String] The zone ID
78
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
79
+
80
+ # @!attribute host
81
+ # @return [String] The domain for the waiting room
82
+ attribute :host, Dry::Types['strict.string'].constrained(min_size: 1)
83
+
84
+ # @!attribute name
85
+ # @return [String] Unique waiting room name
86
+ attribute :name, Dry::Types['strict.string'].constrained(min_size: 1)
87
+
88
+ # @!attribute new_users_per_minute
89
+ # @return [Integer] Rate limit for new users entering from queue
90
+ attribute :new_users_per_minute, Dry::Types['coercible.integer'].constrained(gteq: 200, lteq: 60_000)
91
+
92
+ # @!attribute total_active_users
93
+ # @return [Integer] Maximum concurrent active users
94
+ attribute :total_active_users, Dry::Types['coercible.integer'].constrained(gteq: 200, lteq: 1_000_000)
95
+
96
+ # @!attribute path
97
+ # @return [String, nil] Path to enable waiting room on
98
+ attribute :path, Dry::Types['strict.string'].optional.default(nil)
99
+
100
+ # @!attribute queue_all
101
+ # @return [Boolean, nil] Queue all traffic
102
+ attribute :queue_all, ::Pangea::Resources::Types::Bool.optional.default(nil)
103
+
104
+ # @!attribute queueing_method
105
+ # @return [String, nil] Queueing method
106
+ attribute :queueing_method, CloudflareWaitingRoomQueueingMethod.optional.default(nil)
107
+
108
+ # @!attribute description
109
+ # @return [String, nil] Description
110
+ attribute :description, Dry::Types['strict.string'].optional.default(nil)
111
+
112
+ # @!attribute session_duration
113
+ # @return [Integer, nil] Session duration in minutes
114
+ attribute :session_duration, Dry::Types['coercible.integer']
115
+ .constrained(gteq: 1, lteq: 43_200)
116
+ .optional
117
+ .default(nil)
118
+
119
+ # @!attribute disable_session_renewal
120
+ # @return [Boolean, nil] Disable session renewal
121
+ attribute :disable_session_renewal, ::Pangea::Resources::Types::Bool.optional.default(nil)
122
+
123
+ # @!attribute suspended
124
+ # @return [Boolean, nil] Suspend waiting room
125
+ attribute :suspended, ::Pangea::Resources::Types::Bool.optional.default(nil)
126
+
127
+ # @!attribute custom_page_html
128
+ # @return [String, nil] Custom HTML for waiting page
129
+ attribute :custom_page_html, Dry::Types['strict.string'].optional.default(nil)
130
+
131
+ # @!attribute default_template_language
132
+ # @return [String, nil] Default language for template
133
+ attribute :default_template_language, Dry::Types['strict.string'].optional.default(nil)
134
+
135
+ # @!attribute cookie_attributes
136
+ # @return [WaitingRoomCookieAttributes, nil] Cookie configuration
137
+ attribute :cookie_attributes, WaitingRoomCookieAttributes.optional.default(nil)
138
+
139
+ # @!attribute json_response_enabled
140
+ # @return [Boolean, nil] Enable JSON responses
141
+ attribute :json_response_enabled, ::Pangea::Resources::Types::Bool.optional.default(nil)
142
+
143
+ # @!attribute queueing_status_code
144
+ # @return [Integer, nil] HTTP status code for queueing
145
+ attribute :queueing_status_code, Dry::Types['coercible.integer']
146
+ .constrained(included_in: [200, 202, 429])
147
+ .optional
148
+ .default(nil)
149
+
150
+ # Check if waiting room queues all traffic
151
+ # @return [Boolean] true if queuing all
152
+ def queues_all?
153
+ queue_all == true
154
+ end
155
+
156
+ # Check if FIFO queueing
157
+ # @return [Boolean] true if FIFO
158
+ def fifo_queueing?
159
+ queueing_method == 'fifo'
160
+ end
161
+
162
+ # Check if random queueing
163
+ # @return [Boolean] true if random
164
+ def random_queueing?
165
+ queueing_method == 'random'
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end