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,118 @@
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_event/types'
20
+ require 'pangea/resource_registry'
21
+
22
+ module Pangea
23
+ module Resources
24
+ # Cloudflare Waiting Room Event resource module that self-registers
25
+ module CloudflareWaitingRoomEvent
26
+ # Create a Cloudflare Waiting Room Event
27
+ #
28
+ # Events temporarily change waiting room behavior during specified time periods.
29
+ # Only one event can be active at a time (events cannot overlap).
30
+ #
31
+ # Available only for Waiting Room Advanced subscription.
32
+ #
33
+ # @param name [Symbol] The resource name
34
+ # @param attributes [Hash] Event attributes
35
+ # @option attributes [String] :zone_id Zone ID (required)
36
+ # @option attributes [String] :waiting_room_id Waiting room ID (required)
37
+ # @option attributes [String] :name Event identifier (required)
38
+ # @option attributes [String] :event_start_time ISO 8601 start time (required)
39
+ # @option attributes [String] :event_end_time ISO 8601 end time (required)
40
+ # @option attributes [String] :description Event description
41
+ # @option attributes [String] :prequeue_start_time ISO 8601 prequeue start
42
+ # @option attributes [Integer] :new_users_per_minute Override rate limit
43
+ # @option attributes [Integer] :total_active_users Override max users
44
+ # @option attributes [String] :queueing_method Override queue method
45
+ # @option attributes [Integer] :session_duration Override session minutes
46
+ # @option attributes [Boolean] :disable_session_renewal Override renewal
47
+ # @option attributes [Boolean] :shuffle_at_event_start Shuffle prequeue
48
+ # @option attributes [Boolean] :suspended Suspend event
49
+ # @option attributes [String] :custom_page_html Custom HTML
50
+ #
51
+ # @return [ResourceReference] Reference object with outputs
52
+ #
53
+ # @example Flash sale event
54
+ # cloudflare_waiting_room_event(:flash_sale, {
55
+ # zone_id: "023e105f4ecef8ad9ca31a8372d0c353",
56
+ # waiting_room_id: "699d98642c564d2e855e9661899b7252",
57
+ # name: "flash_sale_event",
58
+ # event_start_time: "2025-11-15T12:00:00Z",
59
+ # event_end_time: "2025-11-15T14:00:00Z",
60
+ # new_users_per_minute: 1000,
61
+ # total_active_users: 5000
62
+ # })
63
+ #
64
+ # @example Event with prequeue
65
+ # cloudflare_waiting_room_event(:webinar, {
66
+ # zone_id: "023e105f4ecef8ad9ca31a8372d0c353",
67
+ # waiting_room_id: "699d98642c564d2e855e9661899b7252",
68
+ # name: "webinar_event",
69
+ # event_start_time: "2025-11-20T14:00:00Z",
70
+ # event_end_time: "2025-11-20T16:00:00Z",
71
+ # prequeue_start_time: "2025-11-20T13:30:00Z",
72
+ # shuffle_at_event_start: true
73
+ # })
74
+ def cloudflare_waiting_room_event(name, attributes = {})
75
+ # Validate attributes using dry-struct
76
+ event_attrs = Cloudflare::Types::WaitingRoomEventAttributes.new(attributes)
77
+
78
+ # Generate terraform resource block via terraform-synthesizer
79
+ resource(:cloudflare_waiting_room_event, name) do
80
+ zone_id event_attrs.zone_id
81
+ waiting_room_id event_attrs.waiting_room_id
82
+ name event_attrs.name
83
+ event_start_time event_attrs.event_start_time
84
+ event_end_time event_attrs.event_end_time
85
+
86
+ description event_attrs.description if event_attrs.description
87
+ prequeue_start_time event_attrs.prequeue_start_time if event_attrs.prequeue_start_time
88
+ new_users_per_minute event_attrs.new_users_per_minute if event_attrs.new_users_per_minute
89
+ total_active_users event_attrs.total_active_users if event_attrs.total_active_users
90
+ queueing_method event_attrs.queueing_method if event_attrs.queueing_method
91
+ session_duration event_attrs.session_duration if event_attrs.session_duration
92
+ disable_session_renewal event_attrs.disable_session_renewal if event_attrs.disable_session_renewal
93
+ shuffle_at_event_start event_attrs.shuffle_at_event_start if event_attrs.shuffle_at_event_start
94
+ suspended event_attrs.suspended if event_attrs.suspended
95
+ custom_page_html event_attrs.custom_page_html if event_attrs.custom_page_html
96
+ end
97
+
98
+ # Return resource reference with available outputs
99
+ ResourceReference.new(
100
+ type: 'cloudflare_waiting_room_event',
101
+ name: name,
102
+ resource_attributes: event_attrs.to_h,
103
+ outputs: {
104
+ id: "${cloudflare_waiting_room_event.#{name}.id}"
105
+ }
106
+ )
107
+ end
108
+ end
109
+
110
+ # Maintain backward compatibility by extending Cloudflare module
111
+ module Cloudflare
112
+ include CloudflareWaitingRoomEvent
113
+ end
114
+ end
115
+ end
116
+
117
+ # Auto-register this module when it's loaded
118
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,153 @@
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
+ require 'pangea/resources/cloudflare_waiting_room/types'
20
+
21
+ module Pangea
22
+ module Resources
23
+ module Cloudflare
24
+ module Types
25
+ # Type-safe attributes for Cloudflare Waiting Room Event
26
+ #
27
+ # Events temporarily change waiting room behavior during specified time periods.
28
+ # Only one event can be active at a time (events cannot overlap).
29
+ #
30
+ # Available only for Waiting Room Advanced subscription.
31
+ #
32
+ # @example Flash sale event
33
+ # WaitingRoomEventAttributes.new(
34
+ # zone_id: "023e105f4ecef8ad9ca31a8372d0c353",
35
+ # waiting_room_id: "699d98642c564d2e855e9661899b7252",
36
+ # name: "flash_sale_event",
37
+ # event_start_time: "2025-11-15T12:00:00Z",
38
+ # event_end_time: "2025-11-15T14:00:00Z",
39
+ # new_users_per_minute: 1000
40
+ # )
41
+ class WaitingRoomEventAttributes < Dry::Struct
42
+ transform_keys(&:to_sym)
43
+
44
+ # @!attribute zone_id
45
+ # @return [String] The zone ID
46
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
47
+
48
+ # @!attribute waiting_room_id
49
+ # @return [String] The waiting room ID
50
+ attribute :waiting_room_id, Dry::Types['strict.string'].constrained(
51
+ format: /\A[a-f0-9]{32}\z/
52
+ )
53
+
54
+ # @!attribute name
55
+ # @return [String] Event identifier
56
+ attribute :name, Dry::Types['strict.string'].constrained(min_size: 1)
57
+
58
+ # @!attribute event_start_time
59
+ # @return [String] ISO 8601 timestamp for event start
60
+ attribute :event_start_time, Dry::Types['strict.string'].constrained(
61
+ format: /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z\z/
62
+ )
63
+
64
+ # @!attribute event_end_time
65
+ # @return [String] ISO 8601 timestamp for event end
66
+ attribute :event_end_time, Dry::Types['strict.string'].constrained(
67
+ format: /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z\z/
68
+ )
69
+
70
+ # @!attribute description
71
+ # @return [String, nil] Event description
72
+ attribute :description, Dry::Types['strict.string'].optional.default(nil)
73
+
74
+ # @!attribute prequeue_start_time
75
+ # @return [String, nil] ISO 8601 timestamp when prequeue begins
76
+ attribute :prequeue_start_time, Dry::Types['strict.string']
77
+ .constrained(format: /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z\z/)
78
+ .optional
79
+ .default(nil)
80
+
81
+ # @!attribute new_users_per_minute
82
+ # @return [Integer, nil] Override rate limit for event
83
+ attribute :new_users_per_minute, Dry::Types['coercible.integer']
84
+ .constrained(gteq: 200, lteq: 60_000)
85
+ .optional
86
+ .default(nil)
87
+
88
+ # @!attribute total_active_users
89
+ # @return [Integer, nil] Override max concurrent users for event
90
+ attribute :total_active_users, Dry::Types['coercible.integer']
91
+ .constrained(gteq: 200, lteq: 1_000_000)
92
+ .optional
93
+ .default(nil)
94
+
95
+ # @!attribute queueing_method
96
+ # @return [String, nil] Override queueing method for event
97
+ attribute :queueing_method, CloudflareWaitingRoomQueueingMethod.optional.default(nil)
98
+
99
+ # @!attribute session_duration
100
+ # @return [Integer, nil] Override session duration in minutes
101
+ attribute :session_duration, Dry::Types['coercible.integer']
102
+ .constrained(gteq: 1, lteq: 43_200)
103
+ .optional
104
+ .default(nil)
105
+
106
+ # @!attribute disable_session_renewal
107
+ # @return [Boolean, nil] Override session renewal setting
108
+ attribute :disable_session_renewal, ::Pangea::Resources::Types::Bool.optional.default(nil)
109
+
110
+ # @!attribute shuffle_at_event_start
111
+ # @return [Boolean, nil] Shuffle prequeued users at event start
112
+ attribute :shuffle_at_event_start, ::Pangea::Resources::Types::Bool.optional.default(nil)
113
+
114
+ # @!attribute suspended
115
+ # @return [Boolean, nil] Suspend the event
116
+ attribute :suspended, ::Pangea::Resources::Types::Bool.optional.default(nil)
117
+
118
+ # @!attribute custom_page_html
119
+ # @return [String, nil] Custom HTML for event waiting page
120
+ attribute :custom_page_html, Dry::Types['strict.string'].optional.default(nil)
121
+
122
+ # Validate event times
123
+ def self.new(attributes)
124
+ attrs = attributes.transform_keys(&:to_sym)
125
+ super(attrs).tap do |instance|
126
+ # Ensure event_end_time is after event_start_time
127
+ if instance.event_end_time <= instance.event_start_time
128
+ raise Dry::Struct::Error, "event_end_time must be after event_start_time"
129
+ end
130
+
131
+ # Ensure prequeue_start_time is before event_start_time if specified
132
+ if instance.prequeue_start_time && instance.prequeue_start_time >= instance.event_start_time
133
+ raise Dry::Struct::Error, "prequeue_start_time must be before event_start_time"
134
+ end
135
+ end
136
+ end
137
+
138
+ # Check if event has prequeue
139
+ # @return [Boolean] true if prequeue is configured
140
+ def has_prequeue?
141
+ !prequeue_start_time.nil?
142
+ end
143
+
144
+ # Check if event shuffles prequeue
145
+ # @return [Boolean] true if shuffle enabled
146
+ def shuffles_prequeue?
147
+ shuffle_at_event_start == true
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+ # Copyright 2025 The Pangea Authors
3
+
4
+ require 'pangea/resources/base'
5
+ require 'pangea/resources/reference'
6
+ require 'pangea/resources/cloudflare_waiting_room_rules/types'
7
+ require 'pangea/resource_registry'
8
+
9
+ module Pangea
10
+ module Resources
11
+ module CloudflareWaitingRoomRules
12
+ def cloudflare_waiting_room_rules(name, attributes = {})
13
+ rules_attrs = Cloudflare::Types::WaitingRoomRulesAttributes.new(attributes)
14
+
15
+ resource(:cloudflare_waiting_room_rules, name) do
16
+ zone_id rules_attrs.zone_id
17
+ waiting_room_id rules_attrs.waiting_room_id
18
+
19
+ # Waiting room rules as array (terraform-synthesizer handles array → blocks conversion)
20
+ if rules_attrs.rules.any?
21
+ rules rules_attrs.rules.map { |r| r.to_h }
22
+ end
23
+ end
24
+
25
+ ResourceReference.new(
26
+ type: 'cloudflare_waiting_room_rules',
27
+ name: name,
28
+ resource_attributes: rules_attrs.to_h,
29
+ outputs: { id: "${cloudflare_waiting_room_rules.#{name}.id}" }
30
+ )
31
+ end
32
+ end
33
+
34
+ module Cloudflare
35
+ include CloudflareWaitingRoomRules
36
+ end
37
+ end
38
+ end
39
+
40
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ # Copyright 2025 The Pangea Authors
3
+
4
+ require 'dry-struct'
5
+ require 'pangea/resources/types'
6
+
7
+ module Pangea
8
+ module Resources
9
+ module Cloudflare
10
+ module Types
11
+ # Waiting room rule
12
+ class WaitingRoomRule < Dry::Struct
13
+ transform_keys(&:to_sym)
14
+
15
+ attribute :expression, Dry::Types['strict.string'].constrained(min_size: 1)
16
+ attribute :action, Dry::Types['strict.string'].constrained(min_size: 1)
17
+ attribute :description, Dry::Types['strict.string'].optional.default(nil)
18
+ attribute :status, Dry::Types['strict.string'].optional.default(nil)
19
+ end
20
+
21
+ # Waiting room rules attributes
22
+ class WaitingRoomRulesAttributes < Dry::Struct
23
+ transform_keys(&:to_sym)
24
+
25
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
26
+ attribute :waiting_room_id, Dry::Types['strict.string'].constrained(min_size: 1)
27
+ attribute :rules, Dry::Types['strict.array'].of(WaitingRoomRule).constrained(min_size: 1)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ 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_waiting_room_settings/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareWaitingRoomSettings
9
+ def cloudflare_waiting_room_settings(name, attributes = {})
10
+ attrs = Cloudflare::Types::WaitingRoomSettingsAttributes.new(attributes)
11
+ resource(:cloudflare_waiting_room_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_waiting_room_settings',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_waiting_room_settings.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareWaitingRoomSettings
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 WaitingRoomSettingsAttributes < 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_web3_hostname/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareWeb3Hostname
9
+ def cloudflare_web3_hostname(name, attributes = {})
10
+ attrs = Cloudflare::Types::Web3HostnameAttributes.new(attributes)
11
+ resource(:cloudflare_web3_hostname, 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_web3_hostname',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_web3_hostname.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareWeb3Hostname
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 Web3HostnameAttributes < 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_web_analytics_rule/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareWebAnalyticsRule
9
+ def cloudflare_web_analytics_rule(name, attributes = {})
10
+ attrs = Cloudflare::Types::WebAnalyticsRuleAttributes.new(attributes)
11
+ resource(:cloudflare_web_analytics_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_web_analytics_rule',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_web_analytics_rule.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareWebAnalyticsRule
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 WebAnalyticsRuleAttributes < 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,33 @@
1
+ # frozen_string_literal: true
2
+ require 'pangea/resources/base'
3
+ require 'pangea/resources/reference'
4
+ require 'pangea/resources/cloudflare_web_analytics_site/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareWebAnalyticsSite
9
+ def cloudflare_web_analytics_site(name, attributes = {})
10
+ attrs = Cloudflare::Types::WebAnalyticsSiteAttributes.new(attributes)
11
+ resource(:cloudflare_web_analytics_site, name) do
12
+ account_id attrs.account_id
13
+ auto_install attrs.auto_install
14
+ host attrs.host if attrs.host
15
+ zone_tag attrs.zone_tag if attrs.zone_tag
16
+ end
17
+ ResourceReference.new(
18
+ type: 'cloudflare_web_analytics_site',
19
+ name: name,
20
+ resource_attributes: attrs.to_h,
21
+ outputs: {
22
+ id: "${cloudflare_web_analytics_site.#{name}.id}",
23
+ site_tag: "${cloudflare_web_analytics_site.#{name}.site_tag}",
24
+ site_token: "${cloudflare_web_analytics_site.#{name}.site_token}"
25
+ }
26
+ )
27
+ end
28
+ end
29
+ module Cloudflare
30
+ include CloudflareWebAnalyticsSite
31
+ end
32
+ end
33
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ require 'dry-struct'
3
+ require 'pangea/resources/types'
4
+
5
+ module Pangea::Resources::Cloudflare::Types
6
+ class WebAnalyticsSiteAttributes < Dry::Struct
7
+ transform_keys(&:to_sym)
8
+ attribute :account_id, ::Pangea::Resources::Types::CloudflareAccountId
9
+ attribute :auto_install, Dry::Types['strict.bool']
10
+ attribute :host, Dry::Types['strict.string'].optional.default(nil)
11
+ attribute :zone_tag, Dry::Types['strict.string'].optional.default(nil)
12
+ end
13
+ 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_worker/types'
5
+ require 'pangea/resource_registry'
6
+
7
+ module Pangea::Resources
8
+ module CloudflareWorker
9
+ def cloudflare_worker(name, attributes = {})
10
+ attrs = Cloudflare::Types::WorkerAttributes.new(attributes)
11
+ resource(:cloudflare_worker, 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_worker',
17
+ name: name,
18
+ resource_attributes: attrs.to_h,
19
+ outputs: { id: "${cloudflare_worker.\#{name}.id}" }
20
+ )
21
+ end
22
+ end
23
+ module Cloudflare
24
+ include CloudflareWorker
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 WorkerAttributes < 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,62 @@
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_worker_route/types'
20
+ require 'pangea/resource_registry'
21
+
22
+ module Pangea
23
+ module Resources
24
+ # Cloudflare Worker Route resource module
25
+ module CloudflareWorkerRoute
26
+ # Create a Cloudflare Worker Route with type-safe attributes
27
+ #
28
+ # @param name [Symbol] The resource name
29
+ # @param attributes [Hash] Worker route attributes
30
+ # @return [ResourceReference] Reference object with outputs and computed properties
31
+ def cloudflare_worker_route(name, attributes = {})
32
+ # Validate attributes using dry-struct
33
+ route_attrs = Cloudflare::Types::WorkerRouteAttributes.new(attributes)
34
+
35
+ # Generate terraform resource block via terraform-synthesizer
36
+ resource(:cloudflare_worker_route, name) do
37
+ zone_id route_attrs.zone_id
38
+ pattern route_attrs.pattern
39
+ script_name route_attrs.script_name if route_attrs.script_name
40
+ end
41
+
42
+ # Return resource reference with available outputs
43
+ ResourceReference.new(
44
+ type: 'cloudflare_worker_route',
45
+ name: name,
46
+ resource_attributes: route_attrs.to_h,
47
+ outputs: {
48
+ id: "${cloudflare_worker_route.#{name}.id}"
49
+ }
50
+ )
51
+ end
52
+ end
53
+
54
+ # Extend Cloudflare module
55
+ module Cloudflare
56
+ include CloudflareWorkerRoute
57
+ end
58
+ end
59
+ end
60
+
61
+ # Auto-register this module when it's loaded
62
+ Pangea::ResourceRegistry.register_module(Pangea::Resources::Cloudflare)
@@ -0,0 +1,50 @@
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
+ include Dry.Types()
25
+
26
+ # Cloudflare Worker Route resource attributes with validation
27
+ class WorkerRouteAttributes < Dry::Struct
28
+ transform_keys(&:to_sym)
29
+
30
+ attribute :zone_id, ::Pangea::Resources::Types::CloudflareZoneId
31
+ attribute :pattern, ::Pangea::Resources::Types::CloudflareWorkerRoutePattern
32
+ attribute :script_name, ::Pangea::Resources::Types::String.optional.default(nil)
33
+
34
+ # Computed properties
35
+ def is_catch_all?
36
+ pattern.end_with?('/*')
37
+ end
38
+
39
+ def has_script?
40
+ !script_name.nil?
41
+ end
42
+
43
+ def matches_subdomain?
44
+ pattern.include?('*.')
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end