volcano-sdk 0.5.2

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 (458) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +203 -0
  3. data/README.md +758 -0
  4. data/lib/volcano/auth.rb +113 -0
  5. data/lib/volcano/auth_anonymous.rb +51 -0
  6. data/lib/volcano/auth_confirm_email.rb +19 -0
  7. data/lib/volcano/auth_email_change.rb +75 -0
  8. data/lib/volcano/auth_get_user.rb +110 -0
  9. data/lib/volcano/auth_hosted.rb +43 -0
  10. data/lib/volcano/auth_oauth.rb +102 -0
  11. data/lib/volcano/auth_oauth_api.rb +51 -0
  12. data/lib/volcano/auth_oauth_sign_in.rb +61 -0
  13. data/lib/volcano/auth_oauth_token.rb +51 -0
  14. data/lib/volcano/auth_refresh.rb +117 -0
  15. data/lib/volcano/auth_resend_confirmation.rb +19 -0
  16. data/lib/volcano/auth_reset_password.rb +23 -0
  17. data/lib/volcano/auth_reset_password_for_email.rb +19 -0
  18. data/lib/volcano/auth_sessions.rb +139 -0
  19. data/lib/volcano/auth_sign_up.rb +40 -0
  20. data/lib/volcano/auth_state.rb +148 -0
  21. data/lib/volcano/auth_update_user.rb +32 -0
  22. data/lib/volcano/client.rb +121 -0
  23. data/lib/volcano/connection_string.rb +85 -0
  24. data/lib/volcano/database.rb +243 -0
  25. data/lib/volcano/errors.rb +38 -0
  26. data/lib/volcano/function_resolution.rb +120 -0
  27. data/lib/volcano/function_response.rb +26 -0
  28. data/lib/volcano/functions.rb +136 -0
  29. data/lib/volcano/generated/lib/volcano-generated/api/anon_keys_api.rb +471 -0
  30. data/lib/volcano/generated/lib/volcano-generated/api/auth_admin_api.rb +739 -0
  31. data/lib/volcano/generated/lib/volcano-generated/api/auth_configuration_api.rb +1798 -0
  32. data/lib/volcano/generated/lib/volcano-generated/api/authentication_api.rb +1523 -0
  33. data/lib/volcano/generated/lib/volcano-generated/api/database_backups_api.rb +791 -0
  34. data/lib/volcano/generated/lib/volcano-generated/api/database_branches_api.rb +665 -0
  35. data/lib/volcano/generated/lib/volcano-generated/api/database_queries_api.rb +905 -0
  36. data/lib/volcano/generated/lib/volcano-generated/api/databases_api.rb +819 -0
  37. data/lib/volcano/generated/lib/volcano-generated/api/frontends_api.rb +913 -0
  38. data/lib/volcano/generated/lib/volcano-generated/api/functions_api.rb +1355 -0
  39. data/lib/volcano/generated/lib/volcano-generated/api/git_connections_api.rb +1012 -0
  40. data/lib/volcano/generated/lib/volcano-generated/api/locks_api.rb +480 -0
  41. data/lib/volcano/generated/lib/volcano-generated/api/logs_api.rb +250 -0
  42. data/lib/volcano/generated/lib/volcano-generated/api/o_auth_authentication_api.rb +962 -0
  43. data/lib/volcano/generated/lib/volcano-generated/api/o_auth_configuration_api.rb +452 -0
  44. data/lib/volcano/generated/lib/volcano-generated/api/project_imports_api.rb +599 -0
  45. data/lib/volcano/generated/lib/volcano-generated/api/projects_api.rb +1862 -0
  46. data/lib/volcano/generated/lib/volcano-generated/api/realtime_api.rb +222 -0
  47. data/lib/volcano/generated/lib/volcano-generated/api/service_keys_api.rb +402 -0
  48. data/lib/volcano/generated/lib/volcano-generated/api/storage_admin_api.rb +189 -0
  49. data/lib/volcano/generated/lib/volcano-generated/api/storage_buckets_api.rb +437 -0
  50. data/lib/volcano/generated/lib/volcano-generated/api/storage_objects_api.rb +857 -0
  51. data/lib/volcano/generated/lib/volcano-generated/api/storage_policies_api.rb +277 -0
  52. data/lib/volcano/generated/lib/volcano-generated/api/system_api.rb +79 -0
  53. data/lib/volcano/generated/lib/volcano-generated/api/variables_api.rb +454 -0
  54. data/lib/volcano/generated/lib/volcano-generated/api_client.rb +393 -0
  55. data/lib/volcano/generated/lib/volcano-generated/api_error.rb +58 -0
  56. data/lib/volcano/generated/lib/volcano-generated/api_model_base.rb +88 -0
  57. data/lib/volcano/generated/lib/volcano-generated/configuration.rb +337 -0
  58. data/lib/volcano/generated/lib/volcano-generated/models/anon_key.rb +257 -0
  59. data/lib/volcano/generated/lib/volcano-generated/models/auth_config.rb +728 -0
  60. data/lib/volcano/generated/lib/volcano-generated/models/auth_confirm_email200_response.rb +181 -0
  61. data/lib/volcano/generated/lib/volcano-generated/models/auth_confirm_email_change200_response.rb +156 -0
  62. data/lib/volcano/generated/lib/volcano-generated/models/auth_confirm_email_change_request.rb +164 -0
  63. data/lib/volcano/generated/lib/volcano-generated/models/auth_confirm_email_request.rb +165 -0
  64. data/lib/volcano/generated/lib/volcano-generated/models/auth_convert_anonymous200_response.rb +147 -0
  65. data/lib/volcano/generated/lib/volcano-generated/models/auth_device_authorize_request.rb +165 -0
  66. data/lib/volcano/generated/lib/volcano-generated/models/auth_device_token_request.rb +240 -0
  67. data/lib/volcano/generated/lib/volcano-generated/models/auth_device_verify200_response.rb +156 -0
  68. data/lib/volcano/generated/lib/volcano-generated/models/auth_device_verify_request.rb +209 -0
  69. data/lib/volcano/generated/lib/volcano-generated/models/auth_forgot_password200_response.rb +147 -0
  70. data/lib/volcano/generated/lib/volcano-generated/models/auth_forgot_password_request.rb +164 -0
  71. data/lib/volcano/generated/lib/volcano-generated/models/auth_get_my_sessions200_response.rb +231 -0
  72. data/lib/volcano/generated/lib/volcano-generated/models/auth_hosted_page.rb +225 -0
  73. data/lib/volcano/generated/lib/volcano-generated/models/auth_hosted_page_defaults.rb +193 -0
  74. data/lib/volcano/generated/lib/volcano-generated/models/auth_hosted_page_response.rb +203 -0
  75. data/lib/volcano/generated/lib/volcano-generated/models/auth_hosted_page_runtime.rb +220 -0
  76. data/lib/volcano/generated/lib/volcano-generated/models/auth_identities_response.rb +166 -0
  77. data/lib/volcano/generated/lib/volcano-generated/models/auth_identity.rb +273 -0
  78. data/lib/volcano/generated/lib/volcano-generated/models/auth_insights_interval.rb +41 -0
  79. data/lib/volcano/generated/lib/volcano-generated/models/auth_insights_response.rb +270 -0
  80. data/lib/volcano/generated/lib/volcano-generated/models/auth_insights_series_point.rb +263 -0
  81. data/lib/volcano/generated/lib/volcano-generated/models/auth_insights_summary.rb +210 -0
  82. data/lib/volcano/generated/lib/volcano-generated/models/auth_insights_window.rb +238 -0
  83. data/lib/volcano/generated/lib/volcano-generated/models/auth_link_o_auth_provider200_response.rb +147 -0
  84. data/lib/volcano/generated/lib/volcano-generated/models/auth_list_o_auth_providers200_response.rb +149 -0
  85. data/lib/volcano/generated/lib/volcano-generated/models/auth_list_o_auth_providers200_response_providers_inner.rb +165 -0
  86. data/lib/volcano/generated/lib/volcano-generated/models/auth_method_summary.rb +370 -0
  87. data/lib/volcano/generated/lib/volcano-generated/models/auth_methods_response.rb +166 -0
  88. data/lib/volcano/generated/lib/volcano-generated/models/auth_o_auth_exchange_request.rb +190 -0
  89. data/lib/volcano/generated/lib/volcano-generated/models/auth_page_appearance_defaults.rb +212 -0
  90. data/lib/volcano/generated/lib/volcano-generated/models/auth_page_appearance_options.rb +306 -0
  91. data/lib/volcano/generated/lib/volcano-generated/models/auth_page_appearance_response.rb +299 -0
  92. data/lib/volcano/generated/lib/volcano-generated/models/auth_page_density.rb +41 -0
  93. data/lib/volcano/generated/lib/volcano-generated/models/auth_page_font.rb +43 -0
  94. data/lib/volcano/generated/lib/volcano-generated/models/auth_page_layout.rb +41 -0
  95. data/lib/volcano/generated/lib/volcano-generated/models/auth_page_radius.rb +42 -0
  96. data/lib/volcano/generated/lib/volcano-generated/models/auth_page_scale.rb +41 -0
  97. data/lib/volcano/generated/lib/volcano-generated/models/auth_page_theme.rb +318 -0
  98. data/lib/volcano/generated/lib/volcano-generated/models/auth_page_theme_colors.rb +323 -0
  99. data/lib/volcano/generated/lib/volcano-generated/models/auth_password_policy.rb +409 -0
  100. data/lib/volcano/generated/lib/volcano-generated/models/auth_platform_exchange_request.rb +164 -0
  101. data/lib/volcano/generated/lib/volcano-generated/models/auth_refresh_request.rb +190 -0
  102. data/lib/volcano/generated/lib/volcano-generated/models/auth_request_email_change200_response.rb +156 -0
  103. data/lib/volcano/generated/lib/volcano-generated/models/auth_request_email_change_request.rb +164 -0
  104. data/lib/volcano/generated/lib/volcano-generated/models/auth_reset_password200_response.rb +147 -0
  105. data/lib/volcano/generated/lib/volcano-generated/models/auth_reset_password_request.rb +192 -0
  106. data/lib/volcano/generated/lib/volcano-generated/models/auth_session.rb +393 -0
  107. data/lib/volcano/generated/lib/volcano-generated/models/auth_signin_request.rb +233 -0
  108. data/lib/volcano/generated/lib/volcano-generated/models/auth_signup_anonymous_request.rb +150 -0
  109. data/lib/volcano/generated/lib/volcano-generated/models/auth_signup_request.rb +202 -0
  110. data/lib/volcano/generated/lib/volcano-generated/models/auth_signup_response.rb +193 -0
  111. data/lib/volcano/generated/lib/volcano-generated/models/auth_token_response.rb +254 -0
  112. data/lib/volcano/generated/lib/volcano-generated/models/auth_update_user_request.rb +160 -0
  113. data/lib/volcano/generated/lib/volcano-generated/models/auth_user.rb +330 -0
  114. data/lib/volcano/generated/lib/volcano-generated/models/ban_auth_user_request.rb +148 -0
  115. data/lib/volcano/generated/lib/volcano-generated/models/ban_user_response.rb +278 -0
  116. data/lib/volcano/generated/lib/volcano-generated/models/batch_function_deploy_failure.rb +242 -0
  117. data/lib/volcano/generated/lib/volcano-generated/models/batch_function_deploy_response.rb +205 -0
  118. data/lib/volcano/generated/lib/volcano-generated/models/call_o_auth_provider_api200_response.rb +272 -0
  119. data/lib/volcano/generated/lib/volcano-generated/models/call_o_auth_provider_api_request.rb +223 -0
  120. data/lib/volcano/generated/lib/volcano-generated/models/complete_upload_session_response.rb +148 -0
  121. data/lib/volcano/generated/lib/volcano-generated/models/configure_auth_methods_request.rb +167 -0
  122. data/lib/volcano/generated/lib/volcano-generated/models/configure_auth_methods_request_oauth_providers_inner.rb +156 -0
  123. data/lib/volcano/generated/lib/volcano-generated/models/connect_project_git_request.rb +250 -0
  124. data/lib/volcano/generated/lib/volcano-generated/models/create_anon_key_request.rb +228 -0
  125. data/lib/volcano/generated/lib/volcano-generated/models/create_database_backup_request.rb +185 -0
  126. data/lib/volcano/generated/lib/volcano-generated/models/create_database_branch_request.rb +223 -0
  127. data/lib/volcano/generated/lib/volcano-generated/models/create_database_request.rb +290 -0
  128. data/lib/volcano/generated/lib/volcano-generated/models/create_database_restore_request.rb +187 -0
  129. data/lib/volcano/generated/lib/volcano-generated/models/create_email_template_request.rb +270 -0
  130. data/lib/volcano/generated/lib/volcano-generated/models/create_frontend_custom_domain_request.rb +191 -0
  131. data/lib/volcano/generated/lib/volcano-generated/models/create_function_scheduler_request.rb +252 -0
  132. data/lib/volcano/generated/lib/volcano-generated/models/create_o_auth_config_request.rb +230 -0
  133. data/lib/volcano/generated/lib/volcano-generated/models/create_project_request.rb +219 -0
  134. data/lib/volcano/generated/lib/volcano-generated/models/create_service_key_request.rb +206 -0
  135. data/lib/volcano/generated/lib/volcano-generated/models/create_storage_bucket_request.rb +216 -0
  136. data/lib/volcano/generated/lib/volcano-generated/models/create_storage_policy_request.rb +243 -0
  137. data/lib/volcano/generated/lib/volcano-generated/models/create_upload_session_request.rb +276 -0
  138. data/lib/volcano/generated/lib/volcano-generated/models/create_upload_session_response.rb +179 -0
  139. data/lib/volcano/generated/lib/volcano-generated/models/create_variable_request.rb +219 -0
  140. data/lib/volcano/generated/lib/volcano-generated/models/database.rb +442 -0
  141. data/lib/volcano/generated/lib/volcano-generated/models/database_backup.rb +283 -0
  142. data/lib/volcano/generated/lib/volcano-generated/models/database_backup_list.rb +175 -0
  143. data/lib/volcano/generated/lib/volcano-generated/models/database_backup_schedule.rb +167 -0
  144. data/lib/volcano/generated/lib/volcano-generated/models/database_backup_schedule_entry.rb +301 -0
  145. data/lib/volcano/generated/lib/volcano-generated/models/database_branch.rb +480 -0
  146. data/lib/volcano/generated/lib/volcano-generated/models/database_branch_list.rb +166 -0
  147. data/lib/volcano/generated/lib/volcano-generated/models/database_branch_storage.rb +228 -0
  148. data/lib/volcano/generated/lib/volcano-generated/models/database_delete_request.rb +203 -0
  149. data/lib/volcano/generated/lib/volcano-generated/models/database_insert_request.rb +194 -0
  150. data/lib/volcano/generated/lib/volcano-generated/models/database_query_filter.rb +242 -0
  151. data/lib/volcano/generated/lib/volcano-generated/models/database_query_filter_value.rb +106 -0
  152. data/lib/volcano/generated/lib/volcano-generated/models/database_query_filter_value_one_of_inner.rb +105 -0
  153. data/lib/volcano/generated/lib/volcano-generated/models/database_query_order.rb +187 -0
  154. data/lib/volcano/generated/lib/volcano-generated/models/database_query_performance_database.rb +190 -0
  155. data/lib/volcano/generated/lib/volcano-generated/models/database_query_performance_item.rb +411 -0
  156. data/lib/volcano/generated/lib/volcano-generated/models/database_query_performance_response.rb +166 -0
  157. data/lib/volcano/generated/lib/volcano-generated/models/database_query_result.rb +161 -0
  158. data/lib/volcano/generated/lib/volcano-generated/models/database_restore.rb +388 -0
  159. data/lib/volcano/generated/lib/volcano-generated/models/database_restore_list.rb +166 -0
  160. data/lib/volcano/generated/lib/volcano-generated/models/database_restore_window.rb +159 -0
  161. data/lib/volcano/generated/lib/volcano-generated/models/database_select_request.rb +268 -0
  162. data/lib/volcano/generated/lib/volcano-generated/models/database_stats.rb +447 -0
  163. data/lib/volcano/generated/lib/volcano-generated/models/database_update_request.rb +232 -0
  164. data/lib/volcano/generated/lib/volcano-generated/models/delete_database202_response.rb +156 -0
  165. data/lib/volcano/generated/lib/volcano-generated/models/delete_database_backup200_response.rb +190 -0
  166. data/lib/volcano/generated/lib/volcano-generated/models/delete_database_branch202_response.rb +190 -0
  167. data/lib/volcano/generated/lib/volcano-generated/models/deployment_phase.rb +263 -0
  168. data/lib/volcano/generated/lib/volcano-generated/models/deployment_progress.rb +324 -0
  169. data/lib/volcano/generated/lib/volcano-generated/models/deployment_reference.rb +165 -0
  170. data/lib/volcano/generated/lib/volcano-generated/models/device_authorization_response.rb +296 -0
  171. data/lib/volcano/generated/lib/volcano-generated/models/email_template.rb +305 -0
  172. data/lib/volcano/generated/lib/volcano-generated/models/error.rb +174 -0
  173. data/lib/volcano/generated/lib/volcano-generated/models/export_project_source_request.rb +174 -0
  174. data/lib/volcano/generated/lib/volcano-generated/models/frontend.rb +504 -0
  175. data/lib/volcano/generated/lib/volcano-generated/models/frontend_custom_domain_response.rb +370 -0
  176. data/lib/volcano/generated/lib/volcano-generated/models/frontend_custom_domain_tls_config.rb +253 -0
  177. data/lib/volcano/generated/lib/volcano-generated/models/frontend_deployment.rb +487 -0
  178. data/lib/volcano/generated/lib/volcano-generated/models/frontend_domain_routing_record.rb +240 -0
  179. data/lib/volcano/generated/lib/volcano-generated/models/frontend_domain_verification_record.rb +216 -0
  180. data/lib/volcano/generated/lib/volcano-generated/models/frontend_usage_daily_entry.rb +247 -0
  181. data/lib/volcano/generated/lib/volcano-generated/models/frontend_usage_data.rb +204 -0
  182. data/lib/volcano/generated/lib/volcano-generated/models/frontend_usage_history_response.rb +298 -0
  183. data/lib/volcano/generated/lib/volcano-generated/models/function.rb +565 -0
  184. data/lib/volcano/generated/lib/volcano-generated/models/function_deployment.rb +477 -0
  185. data/lib/volcano/generated/lib/volcano-generated/models/function_http_auth_mode.rb +40 -0
  186. data/lib/volcano/generated/lib/volcano-generated/models/function_invocation_mode.rb +40 -0
  187. data/lib/volcano/generated/lib/volcano-generated/models/function_invocation_request.rb +150 -0
  188. data/lib/volcano/generated/lib/volcano-generated/models/function_region.rb +219 -0
  189. data/lib/volcano/generated/lib/volcano-generated/models/function_runtime_deployment.rb +250 -0
  190. data/lib/volcano/generated/lib/volcano-generated/models/function_runtime_option.rb +245 -0
  191. data/lib/volcano/generated/lib/volcano-generated/models/function_runtimes_response.rb +166 -0
  192. data/lib/volcano/generated/lib/volcano-generated/models/function_scheduler.rb +330 -0
  193. data/lib/volcano/generated/lib/volcano-generated/models/function_scheduler_list_response.rb +290 -0
  194. data/lib/volcano/generated/lib/volcano-generated/models/get_auth_methods200_response.rb +178 -0
  195. data/lib/volcano/generated/lib/volcano-generated/models/get_auth_methods200_response_email_password.rb +165 -0
  196. data/lib/volcano/generated/lib/volcano-generated/models/get_auth_methods200_response_oauth_providers_inner.rb +194 -0
  197. data/lib/volcano/generated/lib/volcano-generated/models/git_connect_start_response.rb +164 -0
  198. data/lib/volcano/generated/lib/volcano-generated/models/git_connection.rb +346 -0
  199. data/lib/volcano/generated/lib/volcano-generated/models/git_connections_response.rb +166 -0
  200. data/lib/volcano/generated/lib/volcano-generated/models/git_installation.rb +242 -0
  201. data/lib/volcano/generated/lib/volcano-generated/models/git_installations_response.rb +166 -0
  202. data/lib/volcano/generated/lib/volcano-generated/models/git_repositories_response.rb +166 -0
  203. data/lib/volcano/generated/lib/volcano-generated/models/git_repository.rb +270 -0
  204. data/lib/volcano/generated/lib/volcano-generated/models/hosted_auth_page_type.rb +44 -0
  205. data/lib/volcano/generated/lib/volcano-generated/models/hosted_login_email_check_request.rb +164 -0
  206. data/lib/volcano/generated/lib/volcano-generated/models/hosted_login_email_check_response.rb +147 -0
  207. data/lib/volcano/generated/lib/volcano-generated/models/hosted_login_options_response.rb +185 -0
  208. data/lib/volcano/generated/lib/volcano-generated/models/hosted_renderable_page_type.rb +43 -0
  209. data/lib/volcano/generated/lib/volcano-generated/models/import_connect_start_response.rb +164 -0
  210. data/lib/volcano/generated/lib/volcano-generated/models/import_connection.rb +432 -0
  211. data/lib/volcano/generated/lib/volcano-generated/models/import_connections_response.rb +166 -0
  212. data/lib/volcano/generated/lib/volcano-generated/models/import_provider.rb +39 -0
  213. data/lib/volcano/generated/lib/volcano-generated/models/import_source.rb +242 -0
  214. data/lib/volcano/generated/lib/volcano-generated/models/import_sources_response.rb +166 -0
  215. data/lib/volcano/generated/lib/volcano-generated/models/list_anon_keys200_response.rb +189 -0
  216. data/lib/volcano/generated/lib/volcano-generated/models/list_available_o_auth_providers200_response.rb +149 -0
  217. data/lib/volcano/generated/lib/volcano-generated/models/list_available_o_auth_providers200_response_providers_inner.rb +167 -0
  218. data/lib/volcano/generated/lib/volcano-generated/models/list_database_regions200_response_inner.rb +158 -0
  219. data/lib/volcano/generated/lib/volcano-generated/models/list_email_templates200_response.rb +149 -0
  220. data/lib/volcano/generated/lib/volcano-generated/models/list_o_auth_configs200_response.rb +149 -0
  221. data/lib/volcano/generated/lib/volcano-generated/models/list_postgres_versions200_response_inner.rb +178 -0
  222. data/lib/volcano/generated/lib/volcano-generated/models/list_storage_buckets200_response.rb +104 -0
  223. data/lib/volcano/generated/lib/volcano-generated/models/list_storage_objects_admin200_response.rb +205 -0
  224. data/lib/volcano/generated/lib/volcano-generated/models/live_log_level.rb +44 -0
  225. data/lib/volcano/generated/lib/volcano-generated/models/log_activity_bucket.rb +246 -0
  226. data/lib/volcano/generated/lib/volcano-generated/models/log_activity_bucket_counts.rb +226 -0
  227. data/lib/volcano/generated/lib/volcano-generated/models/log_activity_request.rb +252 -0
  228. data/lib/volcano/generated/lib/volcano-generated/models/log_activity_response.rb +194 -0
  229. data/lib/volcano/generated/lib/volcano-generated/models/log_database_request_resource.rb +221 -0
  230. data/lib/volcano/generated/lib/volcano-generated/models/log_deployment.rb +210 -0
  231. data/lib/volcano/generated/lib/volcano-generated/models/log_deployment_request_selector.rb +170 -0
  232. data/lib/volcano/generated/lib/volcano-generated/models/log_event.rb +257 -0
  233. data/lib/volcano/generated/lib/volcano-generated/models/log_event_body.rb +108 -0
  234. data/lib/volcano/generated/lib/volcano-generated/models/log_frontend_request_resource.rb +230 -0
  235. data/lib/volcano/generated/lib/volcano-generated/models/log_function_request_resource.rb +230 -0
  236. data/lib/volcano/generated/lib/volcano-generated/models/log_request_resource.rb +58 -0
  237. data/lib/volcano/generated/lib/volcano-generated/models/log_resource.rb +227 -0
  238. data/lib/volcano/generated/lib/volcano-generated/models/log_search_event.rb +297 -0
  239. data/lib/volcano/generated/lib/volcano-generated/models/log_search_request.rb +264 -0
  240. data/lib/volcano/generated/lib/volcano-generated/models/log_search_response.rb +232 -0
  241. data/lib/volcano/generated/lib/volcano-generated/models/log_stream_request.rb +244 -0
  242. data/lib/volcano/generated/lib/volcano-generated/models/metric_usage_data.rb +278 -0
  243. data/lib/volcano/generated/lib/volcano-generated/models/o_auth_config.rb +256 -0
  244. data/lib/volcano/generated/lib/volcano-generated/models/o_auth_error_response.rb +173 -0
  245. data/lib/volcano/generated/lib/volcano-generated/models/paginated_auth_users.rb +284 -0
  246. data/lib/volcano/generated/lib/volcano-generated/models/paginated_databases.rb +304 -0
  247. data/lib/volcano/generated/lib/volcano-generated/models/paginated_frontend_deployments.rb +284 -0
  248. data/lib/volcano/generated/lib/volcano-generated/models/paginated_frontends.rb +304 -0
  249. data/lib/volcano/generated/lib/volcano-generated/models/paginated_function_deployments.rb +284 -0
  250. data/lib/volcano/generated/lib/volcano-generated/models/paginated_functions.rb +304 -0
  251. data/lib/volcano/generated/lib/volcano-generated/models/paginated_project_custom_domains.rb +284 -0
  252. data/lib/volcano/generated/lib/volcano-generated/models/paginated_project_deployments.rb +306 -0
  253. data/lib/volcano/generated/lib/volcano-generated/models/paginated_projects.rb +368 -0
  254. data/lib/volcano/generated/lib/volcano-generated/models/paginated_service_keys.rb +304 -0
  255. data/lib/volcano/generated/lib/volcano-generated/models/paginated_storage_buckets.rb +251 -0
  256. data/lib/volcano/generated/lib/volcano-generated/models/paginated_variables.rb +304 -0
  257. data/lib/volcano/generated/lib/volcano-generated/models/platform_exchange_response.rb +242 -0
  258. data/lib/volcano/generated/lib/volcano-generated/models/preview_auth_page_request.rb +221 -0
  259. data/lib/volcano/generated/lib/volcano-generated/models/preview_auth_page_response.rb +190 -0
  260. data/lib/volcano/generated/lib/volcano-generated/models/project.rb +419 -0
  261. data/lib/volcano/generated/lib/volcano-generated/models/project_config.rb +273 -0
  262. data/lib/volcano/generated/lib/volcano-generated/models/project_config_apply_result.rb +261 -0
  263. data/lib/volcano/generated/lib/volcano-generated/models/project_config_apply_result_entry.rb +245 -0
  264. data/lib/volcano/generated/lib/volcano-generated/models/project_config_apply_summary.rb +320 -0
  265. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth.rb +238 -0
  266. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_cors.rb +176 -0
  267. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_email.rb +175 -0
  268. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_email_from.rb +156 -0
  269. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_email_password_provider.rb +147 -0
  270. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_email_smtp.rb +184 -0
  271. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_email_verification.rb +158 -0
  272. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_managed_pages.rb +175 -0
  273. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_page_appearance.rb +156 -0
  274. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_page_layouts.rb +214 -0
  275. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_password.rb +211 -0
  276. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_password_reset.rb +167 -0
  277. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_providers.rb +159 -0
  278. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_rate_limits.rb +175 -0
  279. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_redirects.rb +180 -0
  280. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_sessions.rb +158 -0
  281. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_signup.rb +232 -0
  282. data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_tokens.rb +175 -0
  283. data/lib/volcano/generated/lib/volcano-generated/models/project_config_bucket.rb +226 -0
  284. data/lib/volcano/generated/lib/volcano-generated/models/project_config_bucket_policy.rb +250 -0
  285. data/lib/volcano/generated/lib/volcano-generated/models/project_config_custom_domain.rb +175 -0
  286. data/lib/volcano/generated/lib/volcano-generated/models/project_config_database.rb +274 -0
  287. data/lib/volcano/generated/lib/volcano-generated/models/project_config_email_template.rb +205 -0
  288. data/lib/volcano/generated/lib/volcano-generated/models/project_config_email_templates.rb +175 -0
  289. data/lib/volcano/generated/lib/volcano-generated/models/project_config_frontend.rb +183 -0
  290. data/lib/volcano/generated/lib/volcano-generated/models/project_config_function.rb +248 -0
  291. data/lib/volcano/generated/lib/volcano-generated/models/project_config_hosted_page.rb +203 -0
  292. data/lib/volcano/generated/lib/volcano-generated/models/project_config_hosted_pages.rb +193 -0
  293. data/lib/volcano/generated/lib/volcano-generated/models/project_config_missing_resource.rb +214 -0
  294. data/lib/volcano/generated/lib/volcano-generated/models/project_config_o_auth_provider.rb +238 -0
  295. data/lib/volcano/generated/lib/volcano-generated/models/project_config_project.rb +209 -0
  296. data/lib/volcano/generated/lib/volcano-generated/models/project_config_realtime.rb +174 -0
  297. data/lib/volcano/generated/lib/volcano-generated/models/project_config_scheduler.rb +229 -0
  298. data/lib/volcano/generated/lib/volcano-generated/models/project_config_skipped_resource.rb +240 -0
  299. data/lib/volcano/generated/lib/volcano-generated/models/project_config_validation_error.rb +201 -0
  300. data/lib/volcano/generated/lib/volcano-generated/models/project_config_validation_error_response.rb +193 -0
  301. data/lib/volcano/generated/lib/volcano-generated/models/project_config_variable.rb +199 -0
  302. data/lib/volcano/generated/lib/volcano-generated/models/project_deployment.rb +412 -0
  303. data/lib/volcano/generated/lib/volcano-generated/models/project_deployment_resource.rb +241 -0
  304. data/lib/volcano/generated/lib/volcano-generated/models/project_deployment_summary.rb +312 -0
  305. data/lib/volcano/generated/lib/volcano-generated/models/project_frontend_custom_domain.rb +403 -0
  306. data/lib/volcano/generated/lib/volcano-generated/models/project_frontend_custom_domain_all_of_frontend.rb +191 -0
  307. data/lib/volcano/generated/lib/volcano-generated/models/project_git_connection.rb +296 -0
  308. data/lib/volcano/generated/lib/volcano-generated/models/project_git_connection_summary.rb +294 -0
  309. data/lib/volcano/generated/lib/volcano-generated/models/project_git_deploy_settings.rb +239 -0
  310. data/lib/volcano/generated/lib/volcano-generated/models/project_health_category.rb +40 -0
  311. data/lib/volcano/generated/lib/volcano-generated/models/project_health_check.rb +316 -0
  312. data/lib/volcano/generated/lib/volcano-generated/models/project_health_data_status.rb +42 -0
  313. data/lib/volcano/generated/lib/volcano-generated/models/project_health_evidence.rb +251 -0
  314. data/lib/volcano/generated/lib/volcano-generated/models/project_health_resource.rb +240 -0
  315. data/lib/volcano/generated/lib/volcano-generated/models/project_health_response.rb +356 -0
  316. data/lib/volcano/generated/lib/volcano-generated/models/project_health_scope.rb +164 -0
  317. data/lib/volcano/generated/lib/volcano-generated/models/project_health_status.rb +42 -0
  318. data/lib/volcano/generated/lib/volcano-generated/models/project_health_summary.rb +186 -0
  319. data/lib/volcano/generated/lib/volcano-generated/models/project_import_action.rb +238 -0
  320. data/lib/volcano/generated/lib/volcano-generated/models/project_import_action_code.rb +42 -0
  321. data/lib/volcano/generated/lib/volcano-generated/models/project_import_destination.rb +238 -0
  322. data/lib/volcano/generated/lib/volcano-generated/models/project_import_destination_mode.rb +39 -0
  323. data/lib/volcano/generated/lib/volcano-generated/models/project_import_disposition.rb +42 -0
  324. data/lib/volcano/generated/lib/volcano-generated/models/project_import_finding.rb +327 -0
  325. data/lib/volcano/generated/lib/volcano-generated/models/project_import_impact.rb +41 -0
  326. data/lib/volcano/generated/lib/volcano-generated/models/project_import_preflight_request.rb +305 -0
  327. data/lib/volcano/generated/lib/volcano-generated/models/project_import_readiness.rb +41 -0
  328. data/lib/volcano/generated/lib/volcano-generated/models/project_import_report.rb +476 -0
  329. data/lib/volcano/generated/lib/volcano-generated/models/project_import_resource.rb +270 -0
  330. data/lib/volcano/generated/lib/volcano-generated/models/project_import_resource_kind.rb +43 -0
  331. data/lib/volcano/generated/lib/volcano-generated/models/project_import_run.rb +412 -0
  332. data/lib/volcano/generated/lib/volcano-generated/models/project_import_run_status.rb +43 -0
  333. data/lib/volcano/generated/lib/volcano-generated/models/project_import_start_request.rb +365 -0
  334. data/lib/volcano/generated/lib/volcano-generated/models/project_import_summary.rb +348 -0
  335. data/lib/volcano/generated/lib/volcano-generated/models/project_import_target.rb +39 -0
  336. data/lib/volcano/generated/lib/volcano-generated/models/project_lock_lease.rb +192 -0
  337. data/lib/volcano/generated/lib/volcano-generated/models/project_lock_lease_request.rb +183 -0
  338. data/lib/volcano/generated/lib/volcano-generated/models/project_lock_state.rb +185 -0
  339. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_data_status.rb +41 -0
  340. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_dimensions.rb +190 -0
  341. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_group_by.rb +40 -0
  342. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_metric.rb +42 -0
  343. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_query.rb +250 -0
  344. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_query_request.rb +210 -0
  345. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_query_response.rb +227 -0
  346. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_query_time_range.rb +188 -0
  347. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_result.rb +292 -0
  348. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_unit.rb +41 -0
  349. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_value.rb +199 -0
  350. data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_window.rb +190 -0
  351. data/lib/volcano/generated/lib/volcano-generated/models/project_source_export.rb +302 -0
  352. data/lib/volcano/generated/lib/volcano-generated/models/project_source_export_omission.rb +218 -0
  353. data/lib/volcano/generated/lib/volcano-generated/models/project_source_export_skip.rb +217 -0
  354. data/lib/volcano/generated/lib/volcano-generated/models/project_source_export_state.rb +228 -0
  355. data/lib/volcano/generated/lib/volcano-generated/models/project_usage_response.rb +234 -0
  356. data/lib/volcano/generated/lib/volcano-generated/models/realtime_config.rb +217 -0
  357. data/lib/volcano/generated/lib/volcano-generated/models/realtime_plan_limits.rb +189 -0
  358. data/lib/volcano/generated/lib/volcano-generated/models/realtime_stats.rb +178 -0
  359. data/lib/volcano/generated/lib/volcano-generated/models/refresh_o_auth_provider_token200_response.rb +165 -0
  360. data/lib/volcano/generated/lib/volcano-generated/models/reset_database_password200_response.rb +177 -0
  361. data/lib/volcano/generated/lib/volcano-generated/models/resolve_function_response.rb +248 -0
  362. data/lib/volcano/generated/lib/volcano-generated/models/resource_reference.rb +241 -0
  363. data/lib/volcano/generated/lib/volcano-generated/models/schedule_request.rb +210 -0
  364. data/lib/volcano/generated/lib/volcano-generated/models/service_key.rb +294 -0
  365. data/lib/volcano/generated/lib/volcano-generated/models/set_project_git_production_branch_request.rb +183 -0
  366. data/lib/volcano/generated/lib/volcano-generated/models/storage_bucket.rb +282 -0
  367. data/lib/volcano/generated/lib/volcano-generated/models/storage_copy_request.rb +192 -0
  368. data/lib/volcano/generated/lib/volcano-generated/models/storage_list_response.rb +159 -0
  369. data/lib/volcano/generated/lib/volcano-generated/models/storage_move_request.rb +192 -0
  370. data/lib/volcano/generated/lib/volcano-generated/models/storage_object.rb +359 -0
  371. data/lib/volcano/generated/lib/volcano-generated/models/storage_object_with_bucket.rb +383 -0
  372. data/lib/volcano/generated/lib/volcano-generated/models/storage_policy.rb +313 -0
  373. data/lib/volcano/generated/lib/volcano-generated/models/storage_stats.rb +220 -0
  374. data/lib/volcano/generated/lib/volcano-generated/models/storage_visibility_request.rb +165 -0
  375. data/lib/volcano/generated/lib/volcano-generated/models/test_email_request.rb +234 -0
  376. data/lib/volcano/generated/lib/volcano-generated/models/test_email_response.rb +164 -0
  377. data/lib/volcano/generated/lib/volcano-generated/models/unban_user_response.rb +267 -0
  378. data/lib/volcano/generated/lib/volcano-generated/models/update_auth_config_request.rb +626 -0
  379. data/lib/volcano/generated/lib/volcano-generated/models/update_auth_hosted_page_request.rb +175 -0
  380. data/lib/volcano/generated/lib/volcano-generated/models/update_auth_page_layout_request.rb +186 -0
  381. data/lib/volcano/generated/lib/volcano-generated/models/update_auth_page_theme_request.rb +164 -0
  382. data/lib/volcano/generated/lib/volcano-generated/models/update_database_branch_request.rb +184 -0
  383. data/lib/volcano/generated/lib/volcano-generated/models/update_database_type_request.rb +190 -0
  384. data/lib/volcano/generated/lib/volcano-generated/models/update_email_template_request.rb +165 -0
  385. data/lib/volcano/generated/lib/volcano-generated/models/update_function_request.rb +201 -0
  386. data/lib/volcano/generated/lib/volcano-generated/models/update_function_scheduler_request.rb +225 -0
  387. data/lib/volcano/generated/lib/volcano-generated/models/update_o_auth_config_request.rb +187 -0
  388. data/lib/volcano/generated/lib/volcano-generated/models/update_project_git_deploy_settings_request.rb +211 -0
  389. data/lib/volcano/generated/lib/volcano-generated/models/update_project_request.rb +198 -0
  390. data/lib/volcano/generated/lib/volcano-generated/models/update_realtime_config_request.rb +179 -0
  391. data/lib/volcano/generated/lib/volcano-generated/models/update_storage_bucket_request.rb +158 -0
  392. data/lib/volcano/generated/lib/volcano-generated/models/update_variable_request.rb +164 -0
  393. data/lib/volcano/generated/lib/volcano-generated/models/upload_session_part.rb +169 -0
  394. data/lib/volcano/generated/lib/volcano-generated/models/upload_session_status_response.rb +295 -0
  395. data/lib/volcano/generated/lib/volcano-generated/models/upload_storage_object201_response.rb +104 -0
  396. data/lib/volcano/generated/lib/volcano-generated/models/usage_data_point.rb +193 -0
  397. data/lib/volcano/generated/lib/volcano-generated/models/variable.rb +389 -0
  398. data/lib/volcano/generated/lib/volcano-generated/version.rb +15 -0
  399. data/lib/volcano/generated/lib/volcano-generated.rb +405 -0
  400. data/lib/volcano/generated_transport.rb +131 -0
  401. data/lib/volcano/generated_transport_anonymous.rb +34 -0
  402. data/lib/volcano/generated_transport_auth.rb +108 -0
  403. data/lib/volcano/generated_transport_confirmation.rb +30 -0
  404. data/lib/volcano/generated_transport_database.rb +54 -0
  405. data/lib/volcano/generated_transport_email_change.rb +44 -0
  406. data/lib/volcano/generated_transport_functions.rb +108 -0
  407. data/lib/volcano/generated_transport_logs.rb +31 -0
  408. data/lib/volcano/generated_transport_oauth.rb +64 -0
  409. data/lib/volcano/generated_transport_sessions.rb +27 -0
  410. data/lib/volcano/generated_transport_storage.rb +86 -0
  411. data/lib/volcano/generated_transport_support.rb +221 -0
  412. data/lib/volcano/generated_transport_upload_session_api.rb +69 -0
  413. data/lib/volcano/generated_transport_upload_sessions.rb +67 -0
  414. data/lib/volcano/lock_auto_renewal.rb +51 -0
  415. data/lib/volcano/lock_guard.rb +135 -0
  416. data/lib/volcano/lock_lease_clock.rb +39 -0
  417. data/lib/volcano/lock_renewer.rb +73 -0
  418. data/lib/volcano/lock_session.rb +70 -0
  419. data/lib/volcano/locks.rb +109 -0
  420. data/lib/volcano/log_responses.rb +39 -0
  421. data/lib/volcano/logs.rb +82 -0
  422. data/lib/volcano/models.rb +115 -0
  423. data/lib/volcano/realtime/blocking_call.rb +32 -0
  424. data/lib/volcano/realtime/broadcast_delivery.rb +63 -0
  425. data/lib/volcano/realtime/channel_callbacks.rb +127 -0
  426. data/lib/volcano/realtime/channel_lifecycle.rb +133 -0
  427. data/lib/volcano/realtime/connection.rb +114 -0
  428. data/lib/volcano/realtime/connection_callbacks.rb +126 -0
  429. data/lib/volcano/realtime/lifecycle.rb +46 -0
  430. data/lib/volcano/realtime/postgres_batch.rb +89 -0
  431. data/lib/volcano/realtime/postgres_changes.rb +107 -0
  432. data/lib/volcano/realtime/postgres_database.rb +63 -0
  433. data/lib/volcano/realtime/postgres_delivery.rb +113 -0
  434. data/lib/volcano/realtime/postgres_expansion.rb +66 -0
  435. data/lib/volcano/realtime/presence.rb +122 -0
  436. data/lib/volcano/realtime/presence_state.rb +61 -0
  437. data/lib/volcano/realtime/protocol.rb +150 -0
  438. data/lib/volcano/realtime/protocol_dispatch.rb +114 -0
  439. data/lib/volcano/realtime/protocol_io.rb +96 -0
  440. data/lib/volcano/realtime/protocol_lifecycle.rb +122 -0
  441. data/lib/volcano/realtime/protocol_publication_dispatch.rb +121 -0
  442. data/lib/volcano/realtime/protocol_recovery.rb +117 -0
  443. data/lib/volcano/realtime/protocol_recovery_dispatch.rb +106 -0
  444. data/lib/volcano/realtime/protocol_recovery_position.rb +95 -0
  445. data/lib/volcano/realtime/reconnect.rb +88 -0
  446. data/lib/volcano/realtime.rb +260 -0
  447. data/lib/volcano/redaction.rb +60 -0
  448. data/lib/volcano/sign_up_result.rb +9 -0
  449. data/lib/volcano/storage.rb +120 -0
  450. data/lib/volcano/storage_models.rb +121 -0
  451. data/lib/volcano/storage_mutations.rb +81 -0
  452. data/lib/volcano/storage_public_url.rb +64 -0
  453. data/lib/volcano/storage_resumable_upload.rb +90 -0
  454. data/lib/volcano/storage_upload_sessions.rb +116 -0
  455. data/lib/volcano/transport.rb +60 -0
  456. data/lib/volcano/version.rb +5 -0
  457. data/lib/volcano.rb +58 -0
  458. metadata +580 -0
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+
5
+ module Volcano
6
+ # Owns renewal and cleanup for one block-scoped lock lease.
7
+ class LockSession
8
+ def initialize(locks, key, guard, renewer, delay)
9
+ @locks = locks
10
+ @key = key
11
+ @guard = guard
12
+ @renewer = renewer
13
+ @delay = delay
14
+ @renewer_started = false
15
+ end
16
+
17
+ def run
18
+ prepare
19
+ start
20
+ yield @guard
21
+ ensure
22
+ cleanup($ERROR_INFO.nil?)
23
+ end
24
+
25
+ private
26
+
27
+ def prepare
28
+ return unless @guard.renewal_delay(@delay).zero?
29
+
30
+ started_at = LockLeaseClock.capture
31
+ lease = @locks.renew(@key, @guard.lease, ttl: @guard.ttl)
32
+ replaced = @guard.replace_lease(lease, started_at: started_at)
33
+ return if replaced && @guard.renewal_delay(@delay).positive?
34
+
35
+ failure = Timeout::Error.new(LockGuard::UNSAFE_RENEWAL_MESSAGE)
36
+ @guard.mark_lost(failure)
37
+ raise failure
38
+ end
39
+
40
+ def start
41
+ @guard.start_expiry_watch
42
+ @renewer.start
43
+ @renewer_started = true
44
+ end
45
+
46
+ def cleanup(completed)
47
+ failure = nil
48
+ @guard.stop_expiry_watch
49
+ failure = @guard.failure
50
+ @renewer.stop if @renewer_started
51
+ ensure
52
+ finish(completed, failure)
53
+ end
54
+
55
+ def finish(completed, failure)
56
+ release_error = release_safely
57
+ return unless completed
58
+
59
+ raise failure if failure
60
+ raise release_error if release_error
61
+ end
62
+
63
+ def release_safely
64
+ @locks.release(@key, @guard.lease)
65
+ nil
66
+ rescue StandardError => e
67
+ e
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+ require 'time'
5
+
6
+ module Volcano
7
+ # Acquires and releases project-scoped distributed locks.
8
+ class Locks
9
+ include LockAutoRenewal
10
+
11
+ def initialize(client, transport)
12
+ @client = client
13
+ @transport = transport
14
+ end
15
+
16
+ def get(key)
17
+ payload = Transport.body(get_response(key), 200)
18
+ LockState.new(
19
+ held: payload.fetch('held'),
20
+ expires_at: parse_time(payload['expires_at']),
21
+ fencing_token: payload['fencing_token']
22
+ )
23
+ end
24
+
25
+ def acquire(key, ttl:)
26
+ token = SecureRandom.uuid
27
+ payload = Transport.body(acquire_response(key, ttl, token), 201)
28
+ LockLease.new(
29
+ key: key,
30
+ token: token,
31
+ expires_at: parse_time(payload['expires_at']),
32
+ fencing_token: payload['fencing_token']
33
+ )
34
+ end
35
+
36
+ def renew(key, lease, ttl:)
37
+ payload = Transport.body(renew_response(key, lease, ttl), 200)
38
+ LockLease.new(
39
+ key: key,
40
+ token: lease.token,
41
+ expires_at: parse_time(payload['expires_at']),
42
+ fencing_token: payload['fencing_token']
43
+ )
44
+ end
45
+
46
+ def release(key, lease)
47
+ response = Transport.invoke do
48
+ @transport.release_project_lock(
49
+ authorization: @client.service_token,
50
+ key: key,
51
+ token: lease.token
52
+ )
53
+ end
54
+ Transport.body(response, 204)
55
+ nil
56
+ end
57
+
58
+ def force_release(key)
59
+ Transport.body(force_release_response(key), 204)
60
+ nil
61
+ end
62
+
63
+ private
64
+
65
+ def get_response(key)
66
+ Transport.invoke do
67
+ @transport.get_project_lock(
68
+ authorization: @client.service_token,
69
+ key: key
70
+ )
71
+ end
72
+ end
73
+
74
+ def force_release_response(key)
75
+ Transport.invoke do
76
+ @transport.force_release_project_lock(
77
+ authorization: @client.service_token,
78
+ key: key
79
+ )
80
+ end
81
+ end
82
+
83
+ def acquire_response(key, ttl, token)
84
+ Transport.invoke do
85
+ @transport.acquire_project_lock(
86
+ authorization: @client.service_token,
87
+ key: key,
88
+ ttl: ttl,
89
+ token: token
90
+ )
91
+ end
92
+ end
93
+
94
+ def renew_response(key, lease, ttl)
95
+ Transport.invoke do
96
+ @transport.renew_project_lock(
97
+ authorization: @client.service_token,
98
+ key: key,
99
+ ttl: ttl,
100
+ token: lease.token
101
+ )
102
+ end
103
+ end
104
+
105
+ def parse_time(value)
106
+ value.is_a?(String) ? Time.iso8601(value) : value
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Volcano
4
+ # Captures immutable JSON for log requests and responses.
5
+ module ImmutableLogJSON
6
+ private
7
+
8
+ def immutable_json(value)
9
+ case value
10
+ when Hash then value.to_h { |key, item| [immutable_json(key), immutable_json(item)] }.freeze
11
+ when Array then value.map { |item| immutable_json(item) }.freeze
12
+ when Time, String then value.dup.freeze
13
+ else value
14
+ end
15
+ end
16
+ end
17
+ private_constant :ImmutableLogJSON
18
+
19
+ # Immutable page returned by a project log search.
20
+ LogSearchResponse = Data.define(:data, :limit, :has_more, :next_cursor) do
21
+ include ImmutableLogJSON
22
+
23
+ def initialize(data:, limit:, has_more:, next_cursor: nil)
24
+ super(
25
+ data: immutable_json(data), limit: limit, has_more: has_more,
26
+ next_cursor: next_cursor&.dup&.freeze
27
+ )
28
+ end
29
+ end
30
+
31
+ # Immutable bucketed project log activity.
32
+ LogActivityResponse = Data.define(:data, :total) do
33
+ include ImmutableLogJSON
34
+
35
+ def initialize(data:, total:)
36
+ super(data: immutable_json(data), total: total)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Volcano
4
+ # Searches retained project logs and activity.
5
+ class Logs
6
+ include ImmutableLogJSON
7
+
8
+ def initialize(client, transport)
9
+ @client = client
10
+ @transport = transport
11
+ end
12
+
13
+ def search(project_id, request)
14
+ project_id, request = log_request(project_id, request)
15
+ response = @client.session_request do |token|
16
+ Transport.invoke do
17
+ @transport.search_project_logs(
18
+ authorization: token,
19
+ project_id: project_id,
20
+ request: request
21
+ )
22
+ end
23
+ end
24
+ search_response(Transport.body(response, 200))
25
+ end
26
+
27
+ def activity(project_id, request)
28
+ project_id, request = log_request(project_id, request)
29
+ response = @client.session_request do |token|
30
+ Transport.invoke do
31
+ @transport.get_project_log_activity(
32
+ authorization: token,
33
+ project_id: project_id,
34
+ request: request
35
+ )
36
+ end
37
+ end
38
+ activity_response(Transport.body(response, 200))
39
+ end
40
+
41
+ private
42
+
43
+ def log_request(project_id, request)
44
+ unless project_id.is_a?(String) && !project_id.strip.empty?
45
+ raise ArgumentError, 'project_id must be a non-empty String'
46
+ end
47
+ raise TypeError, 'Log request must be a Hash' unless request.is_a?(Hash)
48
+
49
+ [project_id.dup.freeze, immutable_json(request)]
50
+ end
51
+
52
+ def search_response(body)
53
+ data = response_data(body)
54
+ limit = body['limit']
55
+ has_more = body['has_more']
56
+ next_cursor = body['next_cursor']
57
+ unless limit.is_a?(Integer) && [true, false].include?(has_more) &&
58
+ (next_cursor.nil? || next_cursor.is_a?(String))
59
+ raise TypeError, 'Expected a complete log response'
60
+ end
61
+
62
+ LogSearchResponse.new(
63
+ data: data, limit: limit, has_more: has_more, next_cursor: next_cursor
64
+ )
65
+ end
66
+
67
+ def activity_response(body)
68
+ data = response_data(body)
69
+ total = body['total']
70
+ raise TypeError, 'Expected a complete log response' unless total.is_a?(Integer)
71
+
72
+ LogActivityResponse.new(data: data, total: total)
73
+ end
74
+
75
+ def response_data(body)
76
+ data = body['data'] if body.is_a?(Hash)
77
+ raise TypeError, 'Expected a complete log response' unless data.is_a?(Array) && data.all?(Hash)
78
+
79
+ data
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Volcano
4
+ Session = Data.define(:access_token, :refresh_token, :user_id)
5
+ AUTH_SESSION_ATTRIBUTES = %i[
6
+ id user_id provider expires_at is_active is_current user_agent ip_address last_ip_address
7
+ last_activity_at session_started_at created_at updated_at
8
+ ].freeze
9
+ private_constant :AUTH_SESSION_ATTRIBUTES
10
+
11
+ AuthSession = Data.define(*AUTH_SESSION_ATTRIBUTES) do
12
+ def initialize(**attributes)
13
+ unknown = attributes.keys - AUTH_SESSION_ATTRIBUTES
14
+ raise ArgumentError, "unknown keywords: #{unknown.join(', ')}" unless unknown.empty?
15
+
16
+ missing = AUTH_SESSION_ATTRIBUTES.first(6) - attributes.keys
17
+ raise ArgumentError, "missing keywords: #{missing.join(', ')}" unless missing.empty?
18
+
19
+ values = AUTH_SESSION_ATTRIBUTES.to_h do |name|
20
+ [name, freeze_session_value(attributes[name])]
21
+ end
22
+ super(**values)
23
+ end
24
+
25
+ private
26
+
27
+ def freeze_session_value(value)
28
+ value.frozen? ? value : value.dup.freeze
29
+ end
30
+ end
31
+
32
+ SessionPage = Data.define(:sessions, :total, :page, :limit, :total_pages) do
33
+ def initialize(sessions:, total:, page:, limit:, total_pages:)
34
+ super(sessions: sessions.to_a.dup.freeze, total: total, page: page, limit: limit,
35
+ total_pages: total_pages)
36
+ end
37
+ end
38
+ LinkedOAuthProvider = Data.define(:provider, :linked_at, :updated_at) do
39
+ def initialize(provider:, linked_at:, updated_at:)
40
+ super(
41
+ provider: immutable_value(provider),
42
+ linked_at: immutable_value(linked_at),
43
+ updated_at: immutable_value(updated_at)
44
+ )
45
+ end
46
+
47
+ private
48
+
49
+ def immutable_value(value)
50
+ value.frozen? ? value : value.dup.freeze
51
+ end
52
+ end
53
+ OAuthProviderTokenStatus = Data.define(:message, :provider, :expires_in) do
54
+ def initialize(message:, provider:, expires_in:)
55
+ values = [message, provider]
56
+ valid = values.all? { |value| value.is_a?(String) && !value.strip.empty? }
57
+ raise TypeError, 'Expected complete OAuth provider token status' unless valid && expires_in.is_a?(Integer)
58
+
59
+ super(message: message.dup.freeze, provider: provider.dup.freeze, expires_in: expires_in)
60
+ end
61
+ end
62
+ EmailChangeResult = Data.define(:message, :new_email)
63
+ USER_OPTIONAL_ATTRIBUTES = %i[
64
+ project_id email_confirmed user_metadata app_metadata avatar_url banned_until
65
+ last_sign_in_at created_at updated_at
66
+ ].freeze
67
+ private_constant :USER_OPTIONAL_ATTRIBUTES
68
+
69
+ User = Data.define(
70
+ :id, :project_id, :email, :email_confirmed, :user_metadata, :app_metadata,
71
+ :avatar_url, :status, :banned_until, :last_sign_in_at, :created_at, :updated_at
72
+ ) do
73
+ def initialize(id:, email:, status:, **attributes)
74
+ validate_optional_attributes(attributes)
75
+ super(
76
+ id: freeze_value(id),
77
+ email: freeze_value(email),
78
+ status: freeze_value(status),
79
+ **USER_OPTIONAL_ATTRIBUTES.to_h { |name| [name, freeze_value(attributes[name])] }
80
+ )
81
+ end
82
+
83
+ private
84
+
85
+ def validate_optional_attributes(attributes)
86
+ unknown = attributes.keys - USER_OPTIONAL_ATTRIBUTES
87
+ raise ArgumentError, "unknown keywords: #{unknown.join(', ')}" unless unknown.empty?
88
+ end
89
+
90
+ def freeze_value(value)
91
+ case value
92
+ when Hash then value.to_h { |key, item| [freeze_value(key), freeze_value(item)] }.freeze
93
+ when Array then value.map { |item| freeze_value(item) }.freeze
94
+ when String then value.dup.freeze
95
+ else value.frozen? ? value : value.dup.freeze
96
+ end
97
+ end
98
+ end
99
+ LockLease = Data.define(:key, :token, :expires_at, :fencing_token) do
100
+ def initialize(key:, token:, expires_at:, fencing_token:)
101
+ super(
102
+ key: key.dup.freeze,
103
+ token: token.dup.freeze,
104
+ expires_at: expires_at&.dup&.freeze,
105
+ fencing_token: fencing_token
106
+ )
107
+ end
108
+ end
109
+ LockState = Data.define(:held, :expires_at, :fencing_token) do
110
+ def initialize(held:, expires_at:, fencing_token:)
111
+ immutable_expiry = expires_at&.then { |value| value.frozen? ? value : value.dup.freeze }
112
+ super(held: held, expires_at: immutable_expiry, fencing_token: fencing_token)
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Volcano
4
+ class Realtime
5
+ # Runs one blocking operation off the Async reactor and returns its result.
6
+ module BlockingCall
7
+ Result = Data.define(:value, :error)
8
+ private_constant :Result
9
+
10
+ module_function
11
+
12
+ def call(&operation)
13
+ results = ::Queue.new
14
+ worker = Thread.new { execute(results, operation) }
15
+ worker.report_on_exception = false
16
+ result = results.pop
17
+ worker.join
18
+ raise result.error if result.error
19
+
20
+ result.value
21
+ end
22
+
23
+ def execute(results, operation)
24
+ results << Result.new(value: operation.call, error: nil)
25
+ rescue StandardError => e
26
+ results << Result.new(value: nil, error: e)
27
+ end
28
+ private_class_method :execute
29
+ end
30
+ private_constant :BlockingCall
31
+ end
32
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Volcano
4
+ class Realtime
5
+ # Delivers broadcasts only while their subscription generation is current.
6
+ module BroadcastDelivery
7
+ PublicationContext = Data.define(:protocol, :publication, :generation, :recovered) do
8
+ def initialize(protocol:, publication:, generation:, recovered:)
9
+ super(protocol:, publication: Immutable.call(publication), generation:, recovered:)
10
+ end
11
+ end
12
+ private_constant :PublicationContext
13
+
14
+ private
15
+
16
+ def deliver_broadcast(event, data, context)
17
+ return reject_broadcast(context) unless broadcast_message?(event, data)
18
+
19
+ emit(
20
+ 'message', Immutable.call(data),
21
+ before_delivery: -> { complete_broadcast(context) }
22
+ )
23
+ end
24
+
25
+ def broadcast_message?(event, data)
26
+ event == 'message' && data.is_a?(Hash) && @callbacks['message'].any?
27
+ end
28
+
29
+ def publication_context(protocol, publication, generation, recovered)
30
+ PublicationContext.new(protocol:, publication:, generation:, recovered:)
31
+ end
32
+
33
+ def reject_broadcast(context)
34
+ with_current_publication(context) do
35
+ context.protocol.__send__(:drop_publication, @name, context.publication)
36
+ end
37
+ end
38
+
39
+ def complete_broadcast(context)
40
+ with_current_publication(context) do
41
+ context.protocol.__send__(:complete_publication, @name, context.publication)
42
+ end
43
+ end
44
+
45
+ def with_current_publication(context)
46
+ with_lifecycle_lock do
47
+ next false unless context.generation == @publication_generation
48
+
49
+ yield
50
+ true
51
+ end
52
+ end
53
+
54
+ def clear_broadcast_recovery_state
55
+ return unless broadcast? && @publication_protocol
56
+
57
+ @publication_protocol.__send__(:delete_recovery_state, @name)
58
+ @publication_protocol = nil
59
+ end
60
+ end
61
+ private_constant :BroadcastDelivery
62
+ end
63
+ end
@@ -0,0 +1,127 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Volcano
4
+ class Realtime
5
+ # Registers channel callbacks and connects them to protocol pushes.
6
+ module ChannelCallbacks
7
+ def on(event, callback = nil, &block)
8
+ raise ArgumentError, "unsupported realtime event: #{event}" unless allowed_event?(event)
9
+
10
+ @callbacks[event] << (callback || block || raise(ArgumentError, 'callback or block is required'))
11
+ self
12
+ end
13
+
14
+ private
15
+
16
+ def initialize_callback_dispatch
17
+ @callbacks = Hash.new { |hash, key| hash[key] = [] }
18
+ @publication_handler = @callback_lock = @callback_task = nil
19
+ @publication_protocol = nil
20
+ @publication_generation = 0
21
+ @deferred_callback_deliveries = []
22
+ end
23
+
24
+ def allowed_event?(event)
25
+ event == 'message' || (presence? && %w[join leave presence_sync].include?(event)) ||
26
+ (postgres? && PostgresChanges::EVENTS.include?(event))
27
+ end
28
+
29
+ def register_handlers(protocol, epoch)
30
+ register_publication_handler(protocol)
31
+ register_presence_handler(protocol, epoch)
32
+ end
33
+
34
+ def register_publication_handler(protocol)
35
+ return if @handler_registered
36
+
37
+ generation = @publication_generation
38
+ @publication_protocol = protocol if broadcast?
39
+ @publication_handler = protocol.on_publication(
40
+ @name, on_rejection: publication_rejection(protocol, generation)
41
+ ) do |event, data, publication, recovered:|
42
+ next deliver_publication(event, data) unless broadcast?
43
+
44
+ context = publication_context(protocol, publication, generation, recovered)
45
+ deliver_broadcast(event, data, context)
46
+ end
47
+ @handler_registered = true
48
+ end
49
+
50
+ def publication_rejection(protocol, generation)
51
+ return unless broadcast?
52
+
53
+ lambda do |publication|
54
+ reject_broadcast(publication_context(protocol, publication, generation, false))
55
+ end
56
+ end
57
+
58
+ def deliver_publication(event, data)
59
+ if postgres?
60
+ dispatch_postgres_change(data)
61
+ elsif event == 'message'
62
+ emit('message', data)
63
+ end
64
+ end
65
+
66
+ def emit(event, data, before_delivery: nil)
67
+ callbacks = @callbacks[event].dup
68
+ return if callbacks.empty?
69
+
70
+ delivery = [event, data, callbacks, before_delivery]
71
+ return defer_callback_delivery(delivery) if callback_dispatching?
72
+
73
+ callback_lock.acquire { dispatch_callback_delivery(delivery) }
74
+ nil
75
+ end
76
+
77
+ def callback_dispatching?
78
+ @callback_task.equal?(Async::Task.current)
79
+ end
80
+
81
+ def defer_callback_delivery(delivery)
82
+ @deferred_callback_deliveries << delivery
83
+ nil
84
+ end
85
+
86
+ def dispatch_callback_delivery(delivery)
87
+ @callback_task = Async::Task.current
88
+ @deferred_callback_deliveries << delivery
89
+ dispatch_deferred_callbacks until @deferred_callback_deliveries.empty?
90
+ ensure
91
+ @callback_task = nil
92
+ end
93
+
94
+ def dispatch_deferred_callbacks
95
+ event, data, callbacks, before_delivery = @deferred_callback_deliveries.shift
96
+ return if before_delivery && !before_delivery.call
97
+
98
+ dispatch_callbacks(event, data, callbacks)
99
+ end
100
+
101
+ def dispatch_callbacks(event, data, callbacks)
102
+ callbacks.each do |callback|
103
+ next unless @callbacks[event].include?(callback)
104
+
105
+ callback.call(data)
106
+ rescue StandardError
107
+ next
108
+ end
109
+ end
110
+
111
+ def detach_publication_handler(protocol)
112
+ if @publication_handler
113
+ protocol.off_publication(@name, @publication_handler)
114
+ @publication_generation += 1 if broadcast?
115
+ end
116
+ detach_presence_handler(protocol)
117
+ @publication_handler = nil
118
+ end
119
+
120
+ def callback_lock
121
+ require 'async/semaphore'
122
+ @callback_lock ||= Async::Semaphore.new(1)
123
+ end
124
+ end
125
+ private_constant :ChannelCallbacks
126
+ end
127
+ end