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,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
4
+
5
+ module Pangea
6
+ module Resources
7
+ module CloudflarePagesProject
8
+ private
9
+
10
+ def synthesize_deployment_config(context, config)
11
+ context.instance_eval do
12
+ compatibility_date config.compatibility_date if config.compatibility_date
13
+ compatibility_flags config.compatibility_flags if config.compatibility_flags
14
+ build_image_major_version config.build_image_major_version if config.build_image_major_version
15
+ always_use_latest_compatibility_date config.always_use_latest_compatibility_date if config.always_use_latest_compatibility_date
16
+ fail_open config.fail_open if config.fail_open
17
+ usage_model config.usage_model if config.usage_model
18
+
19
+ config.env_vars&.each do |var_name, var_config|
20
+ env_vars { name var_name; value var_config.value; type var_config.type }
21
+ end
22
+
23
+ config.kv_namespaces&.each do |binding_name, binding_config|
24
+ kv_namespaces { name binding_name; namespace_id binding_config[:namespace_id] || binding_config['namespace_id'] }
25
+ end
26
+
27
+ config.d1_databases&.each do |binding_name, binding_config|
28
+ d1_databases { name binding_name; id binding_config[:id] || binding_config['id'] }
29
+ end
30
+
31
+ config.durable_object_namespaces&.each do |binding_name, binding_config|
32
+ durable_object_namespaces { name binding_name; namespace_id binding_config[:namespace_id] || binding_config['namespace_id'] }
33
+ end
34
+
35
+ config.r2_buckets&.each do |binding_name, binding_config|
36
+ r2_buckets { name binding_name; bucket_name binding_config.bucket_name; jurisdiction binding_config.jurisdiction if binding_config.jurisdiction }
37
+ end
38
+
39
+ config.services&.each do |binding_name, binding_config|
40
+ services { name binding_name; service binding_config.service; environment binding_config.environment if binding_config.environment; entrypoint binding_config.entrypoint if binding_config.entrypoint }
41
+ end
42
+
43
+ config.analytics_engine_datasets&.each do |binding_name, binding_config|
44
+ analytics_engine_datasets { name binding_name; dataset binding_config[:dataset] || binding_config['dataset'] }
45
+ end
46
+
47
+ config.queue_producers&.each do |binding_name, binding_config|
48
+ queue_producers { name binding_name; binding_name binding_config[:name] || binding_config['name'] || binding_name }
49
+ end
50
+
51
+ config.hyperdrive_bindings&.each do |binding_name, binding_config|
52
+ hyperdrive_bindings { name binding_name; id binding_config[:id] || binding_config['id'] }
53
+ end
54
+
55
+ config.vectorize_bindings&.each do |binding_name, binding_config|
56
+ vectorize_bindings { name binding_name; index_name binding_config[:index_name] || binding_config['index_name'] }
57
+ end
58
+
59
+ config.ai_bindings&.each do |binding_name, binding_config|
60
+ ai_bindings { name binding_name; project_id binding_config[:project_id] || binding_config['project_id'] if binding_config[:project_id] || binding_config['project_id'] }
61
+ end
62
+
63
+ config.browsers&.each { |binding_name, _| browsers { name binding_name } }
64
+
65
+ config.mtls_certificates&.each do |binding_name, binding_config|
66
+ mtls_certificates { name binding_name; certificate_id binding_config[:certificate_id] || binding_config['certificate_id'] }
67
+ end
68
+
69
+ if config.limits
70
+ limits { cpu_ms config.limits.cpu_ms if config.limits.cpu_ms }
71
+ end
72
+
73
+ if config.placement
74
+ placement { mode config.placement.mode }
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
4
+
5
+ require 'pangea/resources/base'
6
+ require 'pangea/resources/reference'
7
+ require 'pangea/resources/cloudflare_pages_project/types'
8
+
9
+ module Pangea
10
+ module Resources
11
+ module CloudflarePagesProject
12
+ # Create a Cloudflare Pages Project
13
+ def cloudflare_pages_project(name, attributes = {})
14
+ project_attrs = Cloudflare::Types::PagesProjectAttributes.new(attributes)
15
+
16
+ resource(:cloudflare_pages_project, name) do
17
+ account_id project_attrs.account_id
18
+ name project_attrs.name
19
+ production_branch project_attrs.production_branch if project_attrs.production_branch
20
+
21
+ if project_attrs.build_config
22
+ build_config do
23
+ build_command project_attrs.build_config.build_command if project_attrs.build_config.build_command
24
+ destination_dir project_attrs.build_config.destination_dir if project_attrs.build_config.destination_dir
25
+ root_dir project_attrs.build_config.root_dir if project_attrs.build_config.root_dir
26
+ build_caching project_attrs.build_config.build_caching if project_attrs.build_config.build_caching
27
+ web_analytics_tag project_attrs.build_config.web_analytics_tag if project_attrs.build_config.web_analytics_tag
28
+ web_analytics_token project_attrs.build_config.web_analytics_token if project_attrs.build_config.web_analytics_token
29
+ end
30
+ end
31
+
32
+ if project_attrs.source
33
+ source do
34
+ type project_attrs.source.type
35
+ config do
36
+ owner project_attrs.source.config.owner
37
+ repo_name project_attrs.source.config.repo_name
38
+ production_branch project_attrs.source.config.production_branch if project_attrs.source.config.production_branch
39
+ production_deployments_enabled project_attrs.source.config.production_deployments_enabled if project_attrs.source.config.production_deployments_enabled
40
+ deployments_enabled project_attrs.source.config.deployments_enabled if project_attrs.source.config.deployments_enabled
41
+ pr_comments_enabled project_attrs.source.config.pr_comments_enabled if project_attrs.source.config.pr_comments_enabled
42
+ preview_deployment_setting project_attrs.source.config.preview_deployment_setting if project_attrs.source.config.preview_deployment_setting
43
+ preview_branch_includes project_attrs.source.config.preview_branch_includes if project_attrs.source.config.preview_branch_includes
44
+ preview_branch_excludes project_attrs.source.config.preview_branch_excludes if project_attrs.source.config.preview_branch_excludes
45
+ end
46
+ end
47
+ end
48
+
49
+ if project_attrs.deployment_configs
50
+ deployment_configs do
51
+ if project_attrs.deployment_configs.production
52
+ production { synthesize_deployment_config(self, project_attrs.deployment_configs.production) }
53
+ end
54
+ if project_attrs.deployment_configs.preview
55
+ preview { synthesize_deployment_config(self, project_attrs.deployment_configs.preview) }
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ ResourceReference.new(
62
+ type: 'cloudflare_pages_project',
63
+ name: name,
64
+ resource_attributes: project_attrs.to_h,
65
+ outputs: {
66
+ id: "${cloudflare_pages_project.#{name}.id}",
67
+ subdomain: "${cloudflare_pages_project.#{name}.subdomain}",
68
+ domains: "${cloudflare_pages_project.#{name}.domains}",
69
+ created_on: "${cloudflare_pages_project.#{name}.created_on}"
70
+ }
71
+ )
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
4
+
5
+ require 'pangea/resource_registry'
6
+ require_relative 'resource/main'
7
+ require_relative 'resource/deployment_config'
8
+
9
+ module Pangea
10
+ module Resources
11
+ # Maintain backward compatibility by extending Cloudflare module
12
+ module Cloudflare
13
+ include CloudflarePagesProject
14
+ end
15
+ end
16
+ end
17
+
18
+ # Auto-register this module when it's loaded
19
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
4
+
5
+ require_relative 'build_config'
6
+ require_relative 'deployment_config'
7
+
8
+ module Pangea
9
+ module Resources
10
+ module Cloudflare
11
+ module Types
12
+ # Type-safe attributes for Cloudflare Pages Project
13
+ class PagesProjectAttributes < Dry::Struct
14
+ transform_keys(&:to_sym)
15
+
16
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId
17
+ attribute :name, Dry::Types['strict.string'].constrained(min_size: 1)
18
+ attribute :production_branch, Dry::Types['strict.string'].optional.default(nil)
19
+ attribute :build_config, PagesBuildConfig.optional.default(nil)
20
+ attribute :source, PagesSource.optional.default(nil)
21
+ attribute :deployment_configs, PagesDeploymentConfigs.optional.default(nil)
22
+
23
+ # Check if project has source configured
24
+ def has_source?
25
+ !source.nil?
26
+ end
27
+
28
+ # Check if project has build configuration
29
+ def has_build_config?
30
+ !build_config.nil?
31
+ end
32
+
33
+ # Check if project has deployment configs
34
+ def has_deployment_configs?
35
+ !deployment_configs.nil?
36
+ end
37
+
38
+ # Check if GitHub source
39
+ def github_source?
40
+ source&.type == 'github'
41
+ end
42
+
43
+ # Check if GitLab source
44
+ def gitlab_source?
45
+ source&.type == 'gitlab'
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
4
+
5
+ module Pangea
6
+ module Resources
7
+ module Cloudflare
8
+ module Types
9
+ # Service binding for Pages deployment
10
+ class PagesServiceBinding < Dry::Struct
11
+ transform_keys(&:to_sym)
12
+
13
+ attribute :name, Dry::Types['strict.string']
14
+ attribute :service, Dry::Types['strict.string']
15
+ attribute :environment, Dry::Types['strict.string'].optional.default(nil)
16
+ attribute :entrypoint, Dry::Types['strict.string'].optional.default(nil)
17
+ end
18
+
19
+ # R2 bucket binding
20
+ class PagesR2Binding < Dry::Struct
21
+ transform_keys(&:to_sym)
22
+
23
+ attribute :name, Dry::Types['strict.string']
24
+ attribute :bucket_name, Dry::Types['strict.string']
25
+ attribute :jurisdiction, Dry::Types['strict.string'].optional.default(nil)
26
+ end
27
+
28
+ # Environment variable configuration
29
+ class PagesEnvVar < Dry::Struct
30
+ transform_keys(&:to_sym)
31
+
32
+ attribute :type, Dry::Types['strict.string'].enum('plain_text', 'secret_text')
33
+ attribute :value, Dry::Types['strict.string']
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
4
+
5
+ module Pangea
6
+ module Resources
7
+ module Cloudflare
8
+ module Types
9
+ # Build configuration for Pages project
10
+ class PagesBuildConfig < Dry::Struct
11
+ transform_keys(&:to_sym)
12
+
13
+ attribute :build_command, Dry::Types['strict.string'].optional.default(nil)
14
+ attribute :destination_dir, Dry::Types['strict.string'].optional.default(nil)
15
+ attribute :root_dir, Dry::Types['strict.string'].optional.default(nil)
16
+ attribute :build_caching, Dry::Types['strict.bool'].optional.default(nil)
17
+ attribute :web_analytics_tag, Dry::Types['strict.string'].optional.default(nil)
18
+ attribute :web_analytics_token, Dry::Types['strict.string'].optional.default(nil)
19
+ end
20
+
21
+ # Source repository configuration
22
+ class PagesSourceConfig < Dry::Struct
23
+ transform_keys(&:to_sym)
24
+
25
+ attribute :owner, Dry::Types['strict.string']
26
+ attribute :repo_name, Dry::Types['strict.string']
27
+ attribute :production_branch, Dry::Types['strict.string'].optional.default(nil)
28
+ attribute :production_deployments_enabled, Dry::Types['strict.bool'].optional.default(nil)
29
+ attribute :deployments_enabled, Dry::Types['strict.bool'].optional.default(nil)
30
+ attribute :pr_comments_enabled, Dry::Types['strict.bool'].optional.default(nil)
31
+ attribute :preview_deployment_setting, Dry::Types['strict.string']
32
+ .enum('none', 'all', 'custom')
33
+ .optional
34
+ .default(nil)
35
+ attribute :preview_branch_includes, Dry::Types['strict.array']
36
+ .of(Dry::Types['strict.string'])
37
+ .optional
38
+ .default(nil)
39
+ attribute :preview_branch_excludes, Dry::Types['strict.array']
40
+ .of(Dry::Types['strict.string'])
41
+ .optional
42
+ .default(nil)
43
+ end
44
+
45
+ # Source repository definition
46
+ class PagesSource < Dry::Struct
47
+ transform_keys(&:to_sym)
48
+
49
+ attribute :type, Dry::Types['strict.string'].enum('github', 'gitlab')
50
+ attribute :config, PagesSourceConfig
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
4
+
5
+ require_relative 'bindings'
6
+
7
+ module Pangea
8
+ module Resources
9
+ module Cloudflare
10
+ module Types
11
+ # Resource limits for deployment
12
+ class PagesDeploymentLimits < Dry::Struct
13
+ transform_keys(&:to_sym)
14
+
15
+ attribute :cpu_ms, Dry::Types['coercible.integer'].constrained(gteq: 1).optional.default(nil)
16
+ end
17
+
18
+ # Placement configuration
19
+ class PagesDeploymentPlacement < Dry::Struct
20
+ transform_keys(&:to_sym)
21
+
22
+ attribute :mode, Dry::Types['strict.string'].enum('smart')
23
+ end
24
+
25
+ # Deployment configuration (for preview or production)
26
+ class PagesDeploymentConfig < Dry::Struct
27
+ transform_keys(&:to_sym)
28
+
29
+ attribute :compatibility_date, Dry::Types['strict.string']
30
+ .constrained(format: /\A\d{4}-\d{2}-\d{2}\z/)
31
+ .optional
32
+ .default(nil)
33
+ attribute :compatibility_flags, Dry::Types['strict.array']
34
+ .of(Dry::Types['strict.string'])
35
+ .optional
36
+ .default(nil)
37
+ attribute :build_image_major_version, Dry::Types['coercible.integer']
38
+ .constrained(gteq: 1)
39
+ .optional
40
+ .default(nil)
41
+ attribute :always_use_latest_compatibility_date, Dry::Types['strict.bool'].optional.default(nil)
42
+ attribute :fail_open, Dry::Types['strict.bool'].optional.default(nil)
43
+ attribute :usage_model, Dry::Types['strict.string']
44
+ .enum('standard', 'bundled', 'unbound')
45
+ .optional
46
+ .default(nil)
47
+ attribute :env_vars, Dry::Types['strict.hash']
48
+ .map(Dry::Types['strict.string'], PagesEnvVar)
49
+ .optional
50
+ .default(nil)
51
+ attribute :kv_namespaces, Dry::Types['strict.hash'].optional.default(nil)
52
+ attribute :d1_databases, Dry::Types['strict.hash'].optional.default(nil)
53
+ attribute :durable_object_namespaces, Dry::Types['strict.hash'].optional.default(nil)
54
+ attribute :r2_buckets, Dry::Types['strict.hash']
55
+ .map(Dry::Types['strict.string'], PagesR2Binding)
56
+ .optional
57
+ .default(nil)
58
+ attribute :services, Dry::Types['strict.hash']
59
+ .map(Dry::Types['strict.string'], PagesServiceBinding)
60
+ .optional
61
+ .default(nil)
62
+ attribute :analytics_engine_datasets, Dry::Types['strict.hash'].optional.default(nil)
63
+ attribute :queue_producers, Dry::Types['strict.hash'].optional.default(nil)
64
+ attribute :hyperdrive_bindings, Dry::Types['strict.hash'].optional.default(nil)
65
+ attribute :vectorize_bindings, Dry::Types['strict.hash'].optional.default(nil)
66
+ attribute :ai_bindings, Dry::Types['strict.hash'].optional.default(nil)
67
+ attribute :browsers, Dry::Types['strict.hash'].optional.default(nil)
68
+ attribute :mtls_certificates, Dry::Types['strict.hash'].optional.default(nil)
69
+ attribute :limits, PagesDeploymentLimits.optional.default(nil)
70
+ attribute :placement, PagesDeploymentPlacement.optional.default(nil)
71
+ end
72
+
73
+ # Deployment configurations container
74
+ class PagesDeploymentConfigs < Dry::Struct
75
+ transform_keys(&:to_sym)
76
+
77
+ attribute :production, PagesDeploymentConfig.optional.default(nil)
78
+ attribute :preview, PagesDeploymentConfig.optional.default(nil)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2025 The Pangea Authors. Licensed under Apache 2.0.
4
+
5
+ require 'dry-struct'
6
+ require 'pangea/resources/types'
7
+ require_relative 'types/attributes'
8
+
9
+ module Pangea
10
+ module Resources
11
+ module Cloudflare
12
+ module Types
13
+ # PagesBuildConfig is defined in types/build_config.rb
14
+ # PagesSourceConfig is defined in types/build_config.rb
15
+ # PagesSource is defined in types/build_config.rb
16
+ # PagesServiceBinding is defined in types/bindings.rb
17
+ # PagesR2Binding is defined in types/bindings.rb
18
+ # PagesEnvVar is defined in types/bindings.rb
19
+ # PagesDeploymentLimits is defined in types/deployment_config.rb
20
+ # PagesDeploymentPlacement is defined in types/deployment_config.rb
21
+ # PagesDeploymentConfig is defined in types/deployment_config.rb
22
+ # PagesDeploymentConfigs is defined in types/deployment_config.rb
23
+ # PagesProjectAttributes is defined in types/attributes.rb
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,108 @@
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_queue/types'
20
+ require 'pangea/resource_registry'
21
+
22
+ module Pangea
23
+ module Resources
24
+ # Cloudflare Queue resource module that self-registers
25
+ module CloudflareQueue
26
+ # Create a Cloudflare Queue
27
+ #
28
+ # Queues provide message queuing for asynchronous task processing.
29
+ # Messages are delivered to Workers with configurable retry and
30
+ # concurrency settings.
31
+ #
32
+ # @param name [Symbol] The resource name
33
+ # @param attributes [Hash] Queue attributes
34
+ # @option attributes [String] :account_id Cloudflare account ID (required)
35
+ # @option attributes [String] :queue_name Queue name (required)
36
+ # @option attributes [Integer] :max_concurrency Maximum concurrent consumers (1-100)
37
+ # @option attributes [Integer] :max_retries Maximum retry attempts (0-100)
38
+ # @option attributes [Integer] :max_wait_time_ms Maximum wait time before retry in ms
39
+ # @option attributes [Integer] :retry_delay Delay between retries in seconds
40
+ # @option attributes [Integer] :visibility_timeout_ms Message visibility timeout in ms
41
+ # @option attributes [Integer] :message_retention_period Retention period in seconds (60-1209600)
42
+ #
43
+ # @return [ResourceReference] Reference object with outputs
44
+ #
45
+ # @example Create a basic task queue
46
+ # cloudflare_queue(:tasks, {
47
+ # account_id: "a" * 32,
48
+ # queue_name: "background-tasks"
49
+ # })
50
+ #
51
+ # @example Create queue with concurrency and retry settings
52
+ # cloudflare_queue(:email_queue, {
53
+ # account_id: "a" * 32,
54
+ # queue_name: "email-delivery",
55
+ # max_concurrency: 20,
56
+ # max_retries: 5,
57
+ # retry_delay: 60,
58
+ # message_retention_period: 86400 # 1 day
59
+ # })
60
+ #
61
+ # @example Create high-throughput queue
62
+ # cloudflare_queue(:analytics, {
63
+ # account_id: "a" * 32,
64
+ # queue_name: "analytics-events",
65
+ # max_concurrency: 100,
66
+ # max_retries: 3,
67
+ # visibility_timeout_ms: 30000,
68
+ # message_retention_period: 604800 # 7 days
69
+ # })
70
+ def cloudflare_queue(name, attributes = {})
71
+ # Validate attributes using dry-struct
72
+ queue_attrs = Cloudflare::Types::QueueAttributes.new(attributes)
73
+
74
+ # Generate terraform resource block via terraform-synthesizer
75
+ resource(:cloudflare_queue, name) do
76
+ account_id queue_attrs.account_id
77
+ name queue_attrs.queue_name
78
+ max_concurrency queue_attrs.max_concurrency if queue_attrs.max_concurrency
79
+ max_retries queue_attrs.max_retries if queue_attrs.max_retries
80
+ max_wait_time_ms queue_attrs.max_wait_time_ms if queue_attrs.max_wait_time_ms
81
+ retry_delay queue_attrs.retry_delay if queue_attrs.retry_delay
82
+ visibility_timeout_ms queue_attrs.visibility_timeout_ms if queue_attrs.visibility_timeout_ms
83
+ message_retention_period queue_attrs.message_retention_period if queue_attrs.message_retention_period
84
+ end
85
+
86
+ # Return resource reference with available outputs
87
+ ResourceReference.new(
88
+ type: 'cloudflare_queue',
89
+ name: name,
90
+ resource_attributes: queue_attrs.to_h,
91
+ outputs: {
92
+ id: "${cloudflare_queue.#{name}.id}",
93
+ queue_id: "${cloudflare_queue.#{name}.id}",
94
+ queue_name: "${cloudflare_queue.#{name}.name}"
95
+ }
96
+ )
97
+ end
98
+ end
99
+
100
+ # Maintain backward compatibility by extending Cloudflare module
101
+ module Cloudflare
102
+ include CloudflareQueue
103
+ end
104
+ end
105
+ end
106
+
107
+ # Auto-register this module when it's loaded
108
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,132 @@
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
+ # Type-safe attributes for Cloudflare Queue
25
+ #
26
+ # Queues provide message queuing for asynchronous processing.
27
+ # Messages are delivered to Workers with configurable retry and
28
+ # concurrency settings.
29
+ #
30
+ # @example Create a task queue
31
+ # QueueAttributes.new(
32
+ # account_id: "a" * 32,
33
+ # queue_name: "email-tasks",
34
+ # max_concurrency: 10,
35
+ # max_retries: 3
36
+ # )
37
+ class QueueAttributes < Dry::Struct
38
+ transform_keys(&:to_sym)
39
+
40
+ # @!attribute account_id
41
+ # @return [String] The Cloudflare account ID
42
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId
43
+
44
+ # @!attribute queue_name
45
+ # @return [String] Queue name (unique identifier)
46
+ attribute :queue_name, Dry::Types['strict.string'].constrained(
47
+ min_size: 1,
48
+ max_size: 256
49
+ )
50
+
51
+ # @!attribute max_concurrency
52
+ # @return [Integer, nil] Maximum concurrent consumers (1-100)
53
+ attribute :max_concurrency, Dry::Types['coercible.integer']
54
+ .constrained(gteq: 1, lteq: 100)
55
+ .optional
56
+ .default(nil)
57
+
58
+ # @!attribute max_retries
59
+ # @return [Integer, nil] Maximum retry attempts (0-100)
60
+ attribute :max_retries, Dry::Types['coercible.integer']
61
+ .constrained(gteq: 0, lteq: 100)
62
+ .optional
63
+ .default(nil)
64
+
65
+ # @!attribute max_wait_time_ms
66
+ # @return [Integer, nil] Maximum wait time before retry in milliseconds
67
+ attribute :max_wait_time_ms, Dry::Types['coercible.integer']
68
+ .constrained(gteq: 0)
69
+ .optional
70
+ .default(nil)
71
+
72
+ # @!attribute retry_delay
73
+ # @return [Integer, nil] Delay between retries in seconds
74
+ attribute :retry_delay, Dry::Types['coercible.integer']
75
+ .constrained(gteq: 0)
76
+ .optional
77
+ .default(nil)
78
+
79
+ # @!attribute visibility_timeout_ms
80
+ # @return [Integer, nil] Message visibility timeout in milliseconds
81
+ attribute :visibility_timeout_ms, Dry::Types['coercible.integer']
82
+ .constrained(gteq: 0)
83
+ .optional
84
+ .default(nil)
85
+
86
+ # @!attribute message_retention_period
87
+ # @return [Integer, nil] Message retention period in seconds (60-1209600)
88
+ attribute :message_retention_period, Dry::Types['coercible.integer']
89
+ .constrained(gteq: 60, lteq: 1209600) # 1 min to 14 days
90
+ .optional
91
+ .default(nil)
92
+
93
+ # Check if queue has high concurrency configured
94
+ # @return [Boolean] true if max_concurrency >= 10
95
+ def high_concurrency?
96
+ max_concurrency && max_concurrency >= 10
97
+ end
98
+
99
+ # Check if queue has retry configured
100
+ # @return [Boolean] true if max_retries > 0
101
+ def retries_enabled?
102
+ max_retries && max_retries > 0
103
+ end
104
+
105
+ # Get retention period in days
106
+ # @return [Float, nil] Retention period in days
107
+ def retention_days
108
+ return nil unless message_retention_period
109
+ message_retention_period / 86400.0
110
+ end
111
+
112
+ # Extract environment from queue name if present
113
+ # @return [String, nil] Environment name if detected
114
+ def environment
115
+ case queue_name.downcase
116
+ when /production|prod/
117
+ 'production'
118
+ when /staging|stage/
119
+ 'staging'
120
+ when /development|dev/
121
+ 'development'
122
+ when /test/
123
+ 'test'
124
+ else
125
+ nil
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end