volcano-sdk 0.33.0 → 0.35.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.
- checksums.yaml +4 -4
- data/README.md +104 -4
- data/lib/volcano/auth_profile_fields.rb +2 -2
- data/lib/volcano/client.rb +1 -1
- data/lib/volcano/durable.rb +16 -38
- data/lib/volcano/durable_approval_models.rb +171 -0
- data/lib/volcano/durable_approval_responses.rb +222 -0
- data/lib/volcano/durable_approvals.rb +143 -0
- data/lib/volcano/durable_arguments.rb +59 -0
- data/lib/volcano/durable_message_arguments.rb +49 -0
- data/lib/volcano/durable_message_backlog.rb +38 -0
- data/lib/volcano/durable_message_catch_ups.rb +112 -0
- data/lib/volcano/durable_message_models.rb +62 -0
- data/lib/volcano/durable_message_responses.rb +107 -0
- data/lib/volcano/durable_message_session.rb +72 -0
- data/lib/volcano/durable_message_stream.rb +176 -0
- data/lib/volcano/durable_messages.rb +217 -0
- data/lib/volcano/durable_models.rb +32 -7
- data/lib/volcano/errors.rb +5 -0
- data/lib/volcano/generated/lib/volcano-generated/api/anon_keys_api.rb +8 -8
- data/lib/volcano/generated/lib/volcano-generated/api/auth_admin_api.rb +17 -17
- data/lib/volcano/generated/lib/volcano-generated/api/auth_configuration_api.rb +28 -28
- data/lib/volcano/generated/lib/volcano-generated/api/authentication_api.rb +4 -4
- data/lib/volcano/generated/lib/volcano-generated/api/autofix_api.rb +222 -0
- data/lib/volcano/generated/lib/volcano-generated/api/database_backups_api.rb +11 -11
- data/lib/volcano/generated/lib/volcano-generated/api/database_branches_api.rb +9 -9
- data/lib/volcano/generated/lib/volcano-generated/api/database_queries_api.rb +4 -4
- data/lib/volcano/generated/lib/volcano-generated/api/databases_api.rb +18 -18
- data/lib/volcano/generated/lib/volcano-generated/api/durable_functions_api.rb +1327 -51
- data/lib/volcano/generated/lib/volcano-generated/api/frontends_api.rb +337 -21
- data/lib/volcano/generated/lib/volcano-generated/api/functions_api.rb +33 -27
- data/lib/volcano/generated/lib/volcano-generated/api/git_connections_api.rb +19 -11
- data/lib/volcano/generated/lib/volcano-generated/api/issues_api.rb +254 -0
- data/lib/volcano/generated/lib/volcano-generated/api/locks_api.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/api/logs_api.rb +11 -11
- data/lib/volcano/generated/lib/volcano-generated/api/o_auth_authentication_api.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/api/o_auth_configuration_api.rb +8 -8
- data/lib/volcano/generated/lib/volcano-generated/api/project_access_tokens_api.rb +479 -0
- data/lib/volcano/generated/lib/volcano-generated/api/project_imports_api.rb +10 -2
- data/lib/volcano/generated/lib/volcano-generated/api/projects_api.rb +110 -30
- data/lib/volcano/generated/lib/volcano-generated/api/realtime_api.rb +5 -5
- data/lib/volcano/generated/lib/volcano-generated/api/sandboxes_api.rb +377 -18
- data/lib/volcano/generated/lib/volcano-generated/api/service_keys_api.rb +9 -9
- data/lib/volcano/generated/lib/volcano-generated/api/storage_admin_api.rb +4 -4
- data/lib/volcano/generated/lib/volcano-generated/api/storage_buckets_api.rb +7 -7
- data/lib/volcano/generated/lib/volcano-generated/api/storage_objects_api.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/api/storage_policies_api.rb +5 -5
- data/lib/volcano/generated/lib/volcano-generated/api/system_api.rb +367 -2
- data/lib/volcano/generated/lib/volcano-generated/api/variable_environments_api.rb +373 -0
- data/lib/volcano/generated/lib/volcano-generated/api/variables_api.rb +13 -13
- data/lib/volcano/generated/lib/volcano-generated/api/verified_domains_api.rb +214 -0
- data/lib/volcano/generated/lib/volcano-generated/api_client.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/api_error.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/api_model_base.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/configuration.rb +11 -3
- data/lib/volcano/generated/lib/volcano-generated/models/anon_key.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_config.rb +48 -6
- data/lib/volcano/generated/lib/volcano-generated/models/auth_confirm_email200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_confirm_email_change200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_confirm_email_change_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_confirm_email_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_convert_anonymous200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_device_authorize_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_device_token_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_device_verify200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_device_verify_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_forgot_password200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_forgot_password_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_get_my_sessions200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_hosted_page.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_hosted_page_defaults.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_hosted_page_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_hosted_page_runtime.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_identities_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_identity.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_insights_interval.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_insights_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_insights_series_point.rb +175 -4
- data/lib/volcano/generated/lib/volcano-generated/models/auth_insights_summary.rb +77 -5
- data/lib/volcano/generated/lib/volcano-generated/models/auth_insights_window.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_link_o_auth_provider200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_list_o_auth_providers200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_list_o_auth_providers200_response_providers_inner.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_method_summary.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_methods_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_o_auth_exchange_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_page_appearance_defaults.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_page_appearance_options.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_page_appearance_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_page_density.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_page_font.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_page_layout.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_page_radius.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_page_scale.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_page_theme.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_page_theme_colors.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_password_policy.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_platform_exchange_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_refresh_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_request_email_change200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_request_email_change_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_reset_password200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_reset_password_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_session.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_signin_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_signup_anonymous_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_signup_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_signup_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_token_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_update_user_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/auth_user.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/autofix_model.rb +45 -0
- data/lib/volcano/generated/lib/volcano-generated/models/autofix_provider.rb +40 -0
- data/lib/volcano/generated/lib/volcano-generated/models/autofix_settings.rb +385 -0
- data/lib/volcano/generated/lib/volcano-generated/models/autofix_stage.rb +40 -0
- data/lib/volcano/generated/lib/volcano-generated/models/ban_auth_user_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/ban_user_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/batch_function_deploy_failure.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/batch_function_deploy_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/byoc_project_config_frontend_custom_domain_tls_config.rb +270 -0
- data/lib/volcano/generated/lib/volcano-generated/models/byoc_project_config_frontend_custom_domain_tls_config_not.rb +102 -0
- data/lib/volcano/generated/lib/volcano-generated/models/call_mcp200_response.rb +220 -0
- data/lib/volcano/generated/lib/volcano-generated/models/call_mcp200_response_error.rb +190 -0
- data/lib/volcano/generated/lib/volcano-generated/models/call_mcp200_response_id.rb +105 -0
- data/lib/volcano/generated/lib/volcano-generated/models/call_mcp_request.rb +236 -0
- data/lib/volcano/generated/lib/volcano-generated/models/call_mcp_request_id.rb +105 -0
- data/lib/volcano/generated/lib/volcano-generated/models/call_o_auth_provider_api200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/call_o_auth_provider_api_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/capability.rb +214 -0
- data/lib/volcano/generated/lib/volcano-generated/models/capability_list.rb +166 -0
- data/lib/volcano/generated/lib/volcano-generated/models/capability_status.rb +40 -0
- data/lib/volcano/generated/lib/volcano-generated/models/complete_upload_session_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/configure_auth_methods_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/configure_auth_methods_request_oauth_providers_inner.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/connect_project_git_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_anon_key_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_database_backup_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_database_branch_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_database_request.rb +6 -6
- data/lib/volcano/generated/lib/volcano-generated/models/create_database_restore_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_email_template_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_frontend_custom_domain_request.rb +12 -3
- data/lib/volcano/generated/lib/volcano-generated/models/create_frontend_function_route_request.rb +230 -0
- data/lib/volcano/generated/lib/volcano-generated/models/create_function_scheduler_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_o_auth_config_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_project_access_token_request.rb +241 -0
- data/lib/volcano/generated/lib/volcano-generated/models/create_project_request.rb +57 -3
- data/lib/volcano/generated/lib/volcano-generated/models/create_sandbox_session_request.rb +18 -57
- data/lib/volcano/generated/lib/volcano-generated/models/create_sandbox_template_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_service_key_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_storage_bucket_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_storage_policy_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_upload_session_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_upload_session_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/create_variable_environment_request.rb +176 -0
- data/lib/volcano/generated/lib/volcano-generated/models/create_variable_request.rb +3 -2
- data/lib/volcano/generated/lib/volcano-generated/models/created_project_access_token.rb +459 -0
- data/lib/volcano/generated/lib/volcano-generated/models/database.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_backup.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_backup_list.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_backup_schedule.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_backup_schedule_entry.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_branch.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_branch_list.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_branch_storage.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_delete_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_insert_request.rb +3 -3
- data/lib/volcano/generated/lib/volcano-generated/models/database_query_filter.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_query_filter_value.rb +3 -3
- data/lib/volcano/generated/lib/volcano-generated/models/database_query_filter_value_one_of_inner.rb +3 -3
- data/lib/volcano/generated/lib/volcano-generated/models/database_query_order.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_query_performance_database.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_query_performance_item.rb +4 -4
- data/lib/volcano/generated/lib/volcano-generated/models/database_query_performance_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_query_result.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_restore.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_restore_list.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_restore_window.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_select_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_stats.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/database_update_request.rb +3 -3
- data/lib/volcano/generated/lib/volcano-generated/models/delete_database202_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/delete_database_backup200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/delete_database_branch202_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/deployment_phase.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/deployment_progress.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/deployment_reference.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/device_authorization_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval.rb +406 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_counts.rb +295 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_daily_counts.rb +190 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_decider.rb +191 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_decision.rb +203 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_decision_request.rb +167 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_execution.rb +211 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_function.rb +177 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_function_counts.rb +190 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_registration.rb +225 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_stats.rb +339 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_approval_status.rb +43 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_execution.rb +16 -6
- data/lib/volcano/generated/lib/volcano-generated/models/durable_execution_error.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/durable_execution_invocation.rb +191 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_execution_operation.rb +372 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_execution_operation_attempt.rb +271 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_execution_operation_list.rb +234 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_execution_status.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/durable_function.rb +31 -4
- data/lib/volcano/generated/lib/volcano-generated/models/durable_function_config.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/durable_message.rb +396 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_message_direction.rb +40 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_message_list.rb +194 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_message_sender.rb +203 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_message_session_registration.rb +165 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_message_status.rb +43 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_message_wait.rb +278 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_message_wait_list.rb +167 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_message_wait_registration.rb +225 -0
- data/lib/volcano/generated/lib/volcano-generated/models/durable_message_wait_status.rb +43 -0
- data/lib/volcano/generated/lib/volcano-generated/models/email_template.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/error.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/export_project_source_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/frontend.rb +95 -3
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_custom_domain_conflict_error.rb +191 -0
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_custom_domain_response.rb +50 -5
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_custom_domain_tls_config.rb +42 -18
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_custom_domain_tls_config_not.rb +103 -0
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_custom_domain_tls_config_not_any_of.rb +188 -0
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_custom_domain_tls_config_not_any_of1.rb +188 -0
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_deployment.rb +24 -68
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_domain_routing_record.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_domain_verification_record.rb +3 -2
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_function_route.rb +375 -0
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_function_route_list.rb +166 -0
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_usage_daily_entry.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_usage_data.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/frontend_usage_history_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/function.rb +31 -14
- data/lib/volcano/generated/lib/volcano-generated/models/function_deployment.rb +24 -50
- data/lib/volcano/generated/lib/volcano-generated/models/function_http_auth_mode.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/function_invocation_mode.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/function_invocation_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/function_kind.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/function_kind_filter.rb +40 -0
- data/lib/volcano/generated/lib/volcano-generated/models/function_region.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/function_runtime_deployment.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/function_runtime_option.rb +30 -3
- data/lib/volcano/generated/lib/volcano-generated/models/function_runtimes_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/function_scheduler.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/function_scheduler_list_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/function_visibility.rb +41 -0
- data/lib/volcano/generated/lib/volcano-generated/models/get_auth_methods200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/get_auth_methods200_response_email_password.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/get_auth_methods200_response_oauth_providers_inner.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/git_connect_start_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/git_connection.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/git_connections_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/git_installation.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/git_installations_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/git_repositories_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/git_repository.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/hosted_auth_page_type.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/hosted_login_email_check_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/hosted_login_email_check_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/hosted_login_options_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/hosted_renderable_page_type.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/import_connect_start_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/import_connection.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/import_connections_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/import_provider.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/import_source.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/import_sources_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/issue.rb +493 -0
- data/lib/volcano/generated/lib/volcano-generated/models/issue_status.rb +41 -0
- data/lib/volcano/generated/lib/volcano-generated/models/list_anon_keys200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/list_available_o_auth_providers200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/list_available_o_auth_providers200_response_providers_inner.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/list_database_regions200_response_inner.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/list_email_templates200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/list_o_auth_configs200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/list_postgres_versions200_response_inner.rb +14 -4
- data/lib/volcano/generated/lib/volcano-generated/models/list_storage_buckets200_response.rb +3 -3
- data/lib/volcano/generated/lib/volcano-generated/models/list_storage_objects_admin200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/live_log_level.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_activity_bucket.rb +5 -5
- data/lib/volcano/generated/lib/volcano-generated/models/log_activity_bucket_counts.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_activity_request.rb +5 -5
- data/lib/volcano/generated/lib/volcano-generated/models/log_activity_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_database_request_resource.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_deployment.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_deployment_request_selector.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_event.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_event_body.rb +3 -3
- data/lib/volcano/generated/lib/volcano-generated/models/log_frontend_request_resource.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_function_request_resource.rb +13 -3
- data/lib/volcano/generated/lib/volcano-generated/models/log_request_resource.rb +3 -3
- data/lib/volcano/generated/lib/volcano-generated/models/log_resource.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_search_event.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_search_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/log_search_response.rb +4 -4
- data/lib/volcano/generated/lib/volcano-generated/models/log_stream_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/managed_project_config_frontend_custom_domain_tls_config.rb +189 -0
- data/lib/volcano/generated/lib/volcano-generated/models/metric_usage_data.rb +3 -3
- data/lib/volcano/generated/lib/volcano-generated/models/o_auth_config.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/o_auth_error_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/open_durable_message_session_request.rb +228 -0
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_auth_users.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_databases.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_durable_approvals.rb +274 -0
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_durable_executions.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_durable_functions.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_frontend_deployments.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_frontends.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_function_deployments.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_functions.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_issues.rb +230 -0
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_project_access_tokens.rb +279 -0
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_project_custom_domains.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_project_deployments.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_projects.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_service_keys.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_storage_buckets.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/paginated_variables.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/platform_exchange_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/preview_auth_page_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/preview_auth_page_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project.rb +13 -13
- data/lib/volcano/generated/lib/volcano-generated/models/project_access_token.rb +426 -0
- data/lib/volcano/generated/lib/volcano-generated/models/project_access_token_scope.rb +40 -0
- data/lib/volcano/generated/lib/volcano-generated/models/project_access_token_usage.rb +299 -0
- data/lib/volcano/generated/lib/volcano-generated/models/project_access_token_usage_daily_entry.rb +191 -0
- data/lib/volcano/generated/lib/volcano-generated/models/project_config.rb +49 -6
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_apply_result.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_apply_result_entry.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_apply_summary.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_cors.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_email.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_email_from.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_email_password_provider.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_email_smtp.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_email_verification.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_managed_pages.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_page_appearance.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_page_layouts.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_password.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_password_reset.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_providers.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_rate_limits.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_redirects.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_sessions.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_signup.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_auth_tokens.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_autofix.rb +206 -0
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_bucket.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_bucket_policy.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_custom_domain.rb +14 -5
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_database.rb +6 -6
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_email_template.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_email_templates.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_frontend.rb +103 -6
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_frontend_custom_domain_tls_config.rb +105 -0
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_frontend_function_route.rb +240 -0
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_function.rb +13 -4
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_hosted_page.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_hosted_pages.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_missing_resource.rb +4 -4
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_o_auth_provider.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_project.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_realtime.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_sandbox.rb +289 -0
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_scheduler.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_skipped_resource.rb +4 -4
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_validation_error.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_validation_error_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_config_variable.rb +3 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_deployment.rb +3 -12
- data/lib/volcano/generated/lib/volcano-generated/models/project_deployment_resource.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_deployment_summary.rb +3 -3
- data/lib/volcano/generated/lib/volcano-generated/models/project_frontend_custom_domain.rb +50 -5
- data/lib/volcano/generated/lib/volcano-generated/models/project_frontend_custom_domain_all_of_frontend.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_git_connection.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_git_connection_summary.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_git_deploy_settings.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_health_category.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_health_check.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_health_data_status.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_health_evidence.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_health_resource.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_health_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_health_scope.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_health_status.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_health_summary.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_action.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_action_code.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_destination.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_destination_mode.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_disposition.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_finding.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_impact.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_preflight_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_readiness.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_report.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_resource.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_resource_kind.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_run.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_run_status.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_start_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_summary.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_import_target.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_lock_lease.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_lock_lease_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_lock_state.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_data_status.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_dimensions.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_group_by.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_metric.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_query.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_query_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_query_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_query_time_range.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_result.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_unit.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_value.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_metrics_window.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_source_export.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_source_export_omission.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_source_export_skip.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_source_export_state.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/project_template_installation.rb +217 -0
- data/lib/volcano/generated/lib/volcano-generated/models/project_usage_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/publish_durable_message_request.rb +205 -0
- data/lib/volcano/generated/lib/volcano-generated/models/publish_sandbox_preset_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/realtime_config.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/realtime_plan_limits.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/realtime_stats.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/refresh_o_auth_provider_token200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/register_durable_message_wait_request.rb +284 -0
- data/lib/volcano/generated/lib/volcano-generated/models/rename_variable_environment_request.rb +176 -0
- data/lib/volcano/generated/lib/volcano-generated/models/replace_frontend_shared_variables_request.rb +237 -0
- data/lib/volcano/generated/lib/volcano-generated/models/replace_shared_variables_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/request_durable_approval_request.rb +355 -0
- data/lib/volcano/generated/lib/volcano-generated/models/reset_database_password200_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/resolve_function_response.rb +13 -3
- data/lib/volcano/generated/lib/volcano-generated/models/resource_reference.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_access.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_access_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_build_log_page.rb +176 -0
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_build_log_page_data_inner.rb +190 -0
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_capacity.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_capacity_list.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_command_request.rb +13 -14
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_command_result.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_deployment.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_deployment_page.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_execution_request.rb +53 -15
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_execution_result.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_file_read_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_file_result.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_file_write_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_pagination.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_preset.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_preset_list.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_session.rb +6 -32
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_session_page.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_subject_grant_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_template.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/sandbox_template_page.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/schedule_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/send_durable_message_request.rb +205 -0
- data/lib/volcano/generated/lib/volcano-generated/models/service_key.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/set_project_git_production_branch_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/storage_bucket.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/storage_copy_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/storage_list_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/storage_move_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/storage_object.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/storage_object_with_bucket.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/storage_policy.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/storage_stats.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/storage_visibility_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/test_email_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/test_email_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/unban_user_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_auth_config_request.rb +81 -3
- data/lib/volcano/generated/lib/volcano-generated/models/update_auth_hosted_page_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_auth_page_layout_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_auth_page_theme_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_autofix_settings_request.rb +273 -0
- data/lib/volcano/generated/lib/volcano-generated/models/update_database_branch_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_database_type_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_email_template_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_function_request.rb +13 -4
- data/lib/volcano/generated/lib/volcano-generated/models/update_function_scheduler_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_issue_request.rb +186 -0
- data/lib/volcano/generated/lib/volcano-generated/models/update_o_auth_config_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_project_git_deploy_settings_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_project_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_realtime_config_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_sandbox_template_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_storage_bucket_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/update_variable_request.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/upload_session_part.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/upload_session_status_response.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/upload_storage_object201_response.rb +3 -3
- data/lib/volcano/generated/lib/volcano-generated/models/usage_data_point.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated/models/variable.rb +13 -3
- data/lib/volcano/generated/lib/volcano-generated/models/variable_environment.rb +325 -0
- data/lib/volcano/generated/lib/volcano-generated/models/variable_environment_list.rb +175 -0
- data/lib/volcano/generated/lib/volcano-generated/models/verified_domain.rb +192 -0
- data/lib/volcano/generated/lib/volcano-generated/models/verified_domains_response.rb +166 -0
- data/lib/volcano/generated/lib/volcano-generated/models/verify_domain_request.rb +183 -0
- data/lib/volcano/generated/lib/volcano-generated/version.rb +2 -2
- data/lib/volcano/generated/lib/volcano-generated.rb +90 -2
- data/lib/volcano/generated_transport.rb +1 -0
- data/lib/volcano/generated_transport_durable.rb +59 -0
- data/lib/volcano/generated_transport_durable_messages.rb +57 -0
- data/lib/volcano/generated_transport_functions.rb +1 -1
- data/lib/volcano/generated_transport_sandbox.rb +33 -1
- data/lib/volcano/lock_response.rb +2 -2
- data/lib/volcano/realtime/channel_callbacks.rb +5 -1
- data/lib/volcano/realtime/channel_lifecycle.rb +4 -1
- data/lib/volcano/realtime/durable_channel.rb +47 -0
- data/lib/volcano/realtime/lifecycle.rb +37 -1
- data/lib/volcano/realtime/protocol.rb +7 -3
- data/lib/volcano/realtime/protocol_dispatch.rb +1 -1
- data/lib/volcano/realtime/protocol_io.rb +7 -4
- data/lib/volcano/realtime/protocol_lifecycle.rb +7 -0
- data/lib/volcano/realtime/protocol_recovery.rb +23 -12
- data/lib/volcano/realtime.rb +42 -8
- data/lib/volcano/redaction.rb +1 -1
- data/lib/volcano/sandbox_deployment_response.rb +39 -0
- data/lib/volcano/sandbox_deployments.rb +79 -0
- data/lib/volcano/sandbox_models.rb +8 -0
- data/lib/volcano/sandbox_request.rb +6 -0
- data/lib/volcano/sandboxes.rb +2 -0
- data/lib/volcano/storage_mutations.rb +2 -2
- data/lib/volcano/storage_object_response.rb +2 -2
- data/lib/volcano/transport.rb +1 -1
- data/lib/volcano/version.rb +1 -1
- data/lib/volcano.rb +14 -0
- data/sig/core_facades.rbs +29 -0
- data/sig/durable_approval_records.rbs +218 -0
- data/sig/durable_message_records.rbs +68 -0
- data/sig/durable_records.rbs +17 -9
- data/sig/errors.rbs +3 -0
- data/sig/sandboxes.rbs +42 -0
- metadata +115 -9
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module Volcano
|
|
6
|
+
# Lists, reads, and decides the approvals durable workflows request.
|
|
7
|
+
#
|
|
8
|
+
# Every operation takes the project id and the client's platform token.
|
|
9
|
+
# Reads also accept a project access token, including a read-only one.
|
|
10
|
+
# Deciding takes a person: a project access token is refused with
|
|
11
|
+
# Error::PermissionDeniedError.
|
|
12
|
+
class DurableApprovals
|
|
13
|
+
include DurableArguments
|
|
14
|
+
include DurableApprovalResponses
|
|
15
|
+
include DurableApprovalStatsResponses
|
|
16
|
+
|
|
17
|
+
# Bounds mirrored from the wire contract, for the reason DurableArguments gives.
|
|
18
|
+
MAX_FUNCTION_LENGTH = 255
|
|
19
|
+
MAX_COMMENT_LENGTH = 2000
|
|
20
|
+
|
|
21
|
+
def initialize(client, transport)
|
|
22
|
+
@client = client
|
|
23
|
+
@transport = transport
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
LIST_FILTERS = %i[status function execution_id from to page limit].freeze
|
|
27
|
+
private_constant :LIST_FILTERS
|
|
28
|
+
|
|
29
|
+
# Lists approvals, newest first, filtered by any of +status+, +function+,
|
|
30
|
+
# +execution_id+, +from+, +to+, +page+, and +limit+, given as keywords.
|
|
31
|
+
# +function+ is a durable function's id or name; a name also matches
|
|
32
|
+
# approvals from a deleted function of that name. +from+ is inclusive and
|
|
33
|
+
# +to+ exclusive, each a Time or an ISO 8601 string with an offset.
|
|
34
|
+
def list(project_id, filters = {})
|
|
35
|
+
project = identifier(project_id, 'project_id')
|
|
36
|
+
options = list_options(filters)
|
|
37
|
+
response = Transport.invoke do
|
|
38
|
+
@transport.list_durable_approvals(authorization: @client.session_token, project_id: project, options: options)
|
|
39
|
+
end
|
|
40
|
+
durable_approval_page(Transport.body(response, 200))
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def get(project_id, approval_id)
|
|
44
|
+
project = identifier(project_id, 'project_id')
|
|
45
|
+
approval = identifier(approval_id, 'approval_id')
|
|
46
|
+
response = Transport.invoke do
|
|
47
|
+
@transport.get_durable_approval(
|
|
48
|
+
authorization: @client.session_token, project_id: project, approval_id: approval
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
durable_approval(Transport.body(response, 200))
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Counts approvals by outcome, overall, per workflow, and per UTC day of
|
|
55
|
+
# request. The window defaults to the 30 days before +to+, which defaults
|
|
56
|
+
# to now, and covers at most 366 days.
|
|
57
|
+
def stats(project_id, function: nil, from: nil, to: nil)
|
|
58
|
+
project = identifier(project_id, 'project_id')
|
|
59
|
+
options = window(function, from, to).compact
|
|
60
|
+
response = Transport.invoke do
|
|
61
|
+
@transport.get_durable_approval_stats(
|
|
62
|
+
authorization: @client.session_token, project_id: project, options: options
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
durable_approval_stats(Transport.body(response, 200))
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Approves a pending approval; the workflow resumes with the decision.
|
|
69
|
+
# Approving again returns the approval unchanged. Deciding one that was
|
|
70
|
+
# denied, has expired, or was cancelled raises Error::ConflictError, whose
|
|
71
|
+
# +code+ is +approval_decided+, +approval_expired+, or +approval_cancelled+.
|
|
72
|
+
def approve(project_id, approval_id, comment: nil)
|
|
73
|
+
decide(project_id, approval_id, comment) do |token, project, approval, note|
|
|
74
|
+
@transport.approve_durable_approval(
|
|
75
|
+
authorization: token, project_id: project, approval_id: approval, comment: note
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Denies a pending approval. A denial is a value the workflow branches on,
|
|
81
|
+
# not an error in it. Repeats and conflicts behave as for #approve.
|
|
82
|
+
def deny(project_id, approval_id, comment: nil)
|
|
83
|
+
decide(project_id, approval_id, comment) do |token, project, approval, note|
|
|
84
|
+
@transport.deny_durable_approval(
|
|
85
|
+
authorization: token, project_id: project, approval_id: approval, comment: note
|
|
86
|
+
)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
|
|
92
|
+
def decide(project_id, approval_id, comment)
|
|
93
|
+
project = identifier(project_id, 'project_id')
|
|
94
|
+
approval = identifier(approval_id, 'approval_id')
|
|
95
|
+
note = comment_argument(comment)
|
|
96
|
+
response = Transport.invoke { yield(@client.session_token, project, approval, note) }
|
|
97
|
+
durable_approval(Transport.body(response, 200))
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def list_options(filters)
|
|
101
|
+
status, function, execution_id, from, to, page, limit = list_filters(filters).values_at(*LIST_FILTERS)
|
|
102
|
+
validate_paging(page, limit)
|
|
103
|
+
window(function, from, to).merge(
|
|
104
|
+
status: optional_identifier(status, 'status'),
|
|
105
|
+
execution_id: optional_identifier(execution_id, 'execution_id'), page: page, limit: limit
|
|
106
|
+
).compact
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Refuses a misspelled filter, as an unknown keyword would be.
|
|
110
|
+
def list_filters(filters)
|
|
111
|
+
raise TypeError, 'filters must be a Hash' unless filters.is_a?(Hash)
|
|
112
|
+
|
|
113
|
+
unknown = filters.keys - LIST_FILTERS
|
|
114
|
+
raise ArgumentError, "unknown keywords: #{unknown.join(', ')}" unless unknown.empty?
|
|
115
|
+
|
|
116
|
+
filters
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def window(function, from, to)
|
|
120
|
+
{ function: function_filter(function), from: timestamp_argument(from, 'from'), to: timestamp_argument(to, 'to') }
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def optional_identifier(value, field)
|
|
124
|
+
value.nil? ? nil : identifier(value, field)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def function_filter(value)
|
|
128
|
+
return if value.nil?
|
|
129
|
+
|
|
130
|
+
name = value.is_a?(String) ? value.strip : ''
|
|
131
|
+
return name.freeze if !name.empty? && name.length <= MAX_FUNCTION_LENGTH
|
|
132
|
+
|
|
133
|
+
raise ArgumentError, "function must be a durable function id or name of 1 to #{MAX_FUNCTION_LENGTH} characters"
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def comment_argument(value)
|
|
137
|
+
return if value.nil?
|
|
138
|
+
return value.dup.freeze if value.is_a?(String) && value.length <= MAX_COMMENT_LENGTH
|
|
139
|
+
|
|
140
|
+
raise ArgumentError, "comment must be a String of at most #{MAX_COMMENT_LENGTH} characters"
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module Volcano
|
|
6
|
+
# Checks durable arguments before the generated client does. It enforces the
|
|
7
|
+
# same bounds but raises its own message, naming the operation and the option
|
|
8
|
+
# key it knows the value by; checked here, the caller reads a message about
|
|
9
|
+
# the argument they passed, the way Functions#invoke does for a function name.
|
|
10
|
+
module DurableArguments
|
|
11
|
+
# The page size the platform serves at most, mirrored from the wire contract.
|
|
12
|
+
MAX_PAGE_SIZE = 100
|
|
13
|
+
RFC3339_OFFSET = /(?:[Zz]|[+-]\d{2}:\d{2})\z/
|
|
14
|
+
private_constant :RFC3339_OFFSET
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
# An empty path segment would address the collection instead of the
|
|
19
|
+
# resource, which is a different request rather than a failed one.
|
|
20
|
+
def identifier(value, field)
|
|
21
|
+
raise ArgumentError, "#{field} must be a non-empty String" unless value.is_a?(String) && !value.strip.empty?
|
|
22
|
+
|
|
23
|
+
value.strip.freeze
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def validate_paging(page, limit)
|
|
27
|
+
raise ArgumentError, 'page must be a positive Integer' unless page.nil? || positive_integer?(page)
|
|
28
|
+
|
|
29
|
+
validate_page_limit(limit)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def validate_page_limit(limit)
|
|
33
|
+
return if limit.nil? || (limit.is_a?(Integer) && positive_integer?(limit) && limit <= MAX_PAGE_SIZE)
|
|
34
|
+
|
|
35
|
+
raise ArgumentError, "limit must be an Integer between 1 and #{MAX_PAGE_SIZE}"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def positive_integer?(value)
|
|
39
|
+
value.is_a?(Integer) && value.positive?
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Sent in UTC with nanoseconds, so a bound keeps the caller's precision.
|
|
43
|
+
def timestamp_argument(value, field)
|
|
44
|
+
return if value.nil?
|
|
45
|
+
|
|
46
|
+
(value.is_a?(Time) ? value : offset_time(value)).getutc.iso8601(9)
|
|
47
|
+
rescue ArgumentError, TypeError
|
|
48
|
+
raise ArgumentError, "#{field} must be a Time or an ISO 8601 timestamp with an offset", cause: nil
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Time.iso8601 reads a string without an offset in the host's time zone.
|
|
52
|
+
def offset_time(value)
|
|
53
|
+
raise TypeError unless value.is_a?(String) && RFC3339_OFFSET.match?(value)
|
|
54
|
+
|
|
55
|
+
Time.iso8601(value)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
private_constant :DurableArguments
|
|
59
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Volcano
|
|
4
|
+
# Checks durable message arguments before the generated client does, for the
|
|
5
|
+
# reason DurableArguments gives.
|
|
6
|
+
module DurableMessageArguments
|
|
7
|
+
MESSAGE_NAME = /\A[ -~]{1,237}\z/
|
|
8
|
+
HEADER_VALUE = /\A[ -~]+\z/
|
|
9
|
+
MAX_IDEMPOTENCY_KEY_LENGTH = 255
|
|
10
|
+
MAX_CLIENT_TOKEN_LENGTH = 128
|
|
11
|
+
MAX_LIST_LIMIT = 500
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def known_options(options, known)
|
|
16
|
+
unknown = options.keys - known
|
|
17
|
+
raise ArgumentError, "unknown keywords: #{unknown.join(', ')}" unless unknown.empty?
|
|
18
|
+
|
|
19
|
+
options
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def message_name(value)
|
|
23
|
+
return value.dup.freeze if value.is_a?(String) && MESSAGE_NAME.match?(value)
|
|
24
|
+
|
|
25
|
+
raise ArgumentError, 'name must be 1 to 237 printable ASCII characters'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Sent as a header, which carries printable ASCII only.
|
|
29
|
+
def bounded_text(value, field, limit)
|
|
30
|
+
return if value.nil?
|
|
31
|
+
return value.dup.freeze if value.is_a?(String) && HEADER_VALUE.match?(value) && value.length <= limit
|
|
32
|
+
|
|
33
|
+
raise ArgumentError, "#{field} must be 1 to #{limit} printable ASCII characters"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def after_argument(value)
|
|
37
|
+
return value if value.nil? || (value.is_a?(Integer) && !value.negative?)
|
|
38
|
+
|
|
39
|
+
raise ArgumentError, 'after must be a non-negative Integer'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def limit_argument(value)
|
|
43
|
+
return value if value.nil? || (value.is_a?(Integer) && value.between?(1, MAX_LIST_LIMIT))
|
|
44
|
+
|
|
45
|
+
raise ArgumentError, "limit must be an Integer between 1 and #{MAX_LIST_LIMIT}"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
private_constant :DurableMessageArguments
|
|
49
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Volcano
|
|
4
|
+
# The live messages a durable message stream holds until the ones before
|
|
5
|
+
# them are delivered. Past LIMIT the oldest is dropped. Each one held after a
|
|
6
|
+
# dropped one names a predecessor at or past it, so it waits for a read that
|
|
7
|
+
# lists the dropped one.
|
|
8
|
+
class DurableMessageBacklog
|
|
9
|
+
LIMIT = 128
|
|
10
|
+
private_constant :LIMIT
|
|
11
|
+
|
|
12
|
+
def initialize
|
|
13
|
+
@held = []
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def empty? = @held.empty?
|
|
17
|
+
|
|
18
|
+
def clear = @held.clear
|
|
19
|
+
|
|
20
|
+
def hold(held)
|
|
21
|
+
@held << held
|
|
22
|
+
@held.delete(oldest) if @held.size > LIMIT
|
|
23
|
+
nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Takes the oldest held message if the one its broadcast names as the one
|
|
27
|
+
# before it is delivered.
|
|
28
|
+
def take_following(last_seq)
|
|
29
|
+
held = oldest
|
|
30
|
+
@held.delete(held) if held && held.prev_seq <= last_seq
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def oldest = @held.min_by { |candidate| candidate.message.seq }
|
|
36
|
+
end
|
|
37
|
+
private_constant :DurableMessageBacklog
|
|
38
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Volcano
|
|
4
|
+
# Runs a durable message stream's own work one job at a time: the catch-ups
|
|
5
|
+
# it starts itself, the release of the live messages it holds, and the wait
|
|
6
|
+
# before retrying a catch-up that failed, half a second doubling to 30
|
|
7
|
+
# seconds. It runs in a task of its own rather than the realtime
|
|
8
|
+
# connection's, which a reconnect stops midway.
|
|
9
|
+
class DurableMessageCatchUps
|
|
10
|
+
FIRST_RETRY_SECONDS = 0.5
|
|
11
|
+
MAX_RETRY_SECONDS = 30.0
|
|
12
|
+
private_constant :FIRST_RETRY_SECONDS, :MAX_RETRY_SECONDS
|
|
13
|
+
|
|
14
|
+
# +read+ runs a catch-up that was asked for, +release+ delivers the held
|
|
15
|
+
# live messages, +due+ asks for a catch-up once a retry's wait is over, and
|
|
16
|
+
# +on_failure+ hears about a job that failed.
|
|
17
|
+
def initialize(read, release, due, on_failure)
|
|
18
|
+
@read = read
|
|
19
|
+
@release = release
|
|
20
|
+
@due = due
|
|
21
|
+
@on_failure = on_failure
|
|
22
|
+
@backoff = FIRST_RETRY_SECONDS
|
|
23
|
+
@retry_delay = @task = @wake = nil
|
|
24
|
+
@pending = @releasing = @closed = false
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# A transient child of the caller's task, so call it from the task that
|
|
28
|
+
# subscribes. Stopping that task, as a disconnect stops a realtime
|
|
29
|
+
# callback's, does not stop a transient child, and one that ends hands it
|
|
30
|
+
# to its parent.
|
|
31
|
+
def start
|
|
32
|
+
@task ||= Async::Task.current.async(transient: true) { work }
|
|
33
|
+
nil
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def request
|
|
37
|
+
@pending = true
|
|
38
|
+
wake.signal
|
|
39
|
+
nil
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def release
|
|
43
|
+
@releasing = true
|
|
44
|
+
wake.signal
|
|
45
|
+
nil
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Whether a catch-up asked for has yet to start reading.
|
|
49
|
+
def pending? = @pending
|
|
50
|
+
|
|
51
|
+
def retry_later
|
|
52
|
+
return if @closed
|
|
53
|
+
|
|
54
|
+
@retry_delay = @backoff
|
|
55
|
+
@backoff = [@backoff * 2, MAX_RETRY_SECONDS].min
|
|
56
|
+
wake.signal
|
|
57
|
+
nil
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def cancel_retry = @retry_delay = nil
|
|
61
|
+
|
|
62
|
+
def caught_up = @backoff = FIRST_RETRY_SECONDS
|
|
63
|
+
|
|
64
|
+
# Not stopped: the catch-up it is running may be what closed it.
|
|
65
|
+
def close
|
|
66
|
+
@closed = true
|
|
67
|
+
wake.signal
|
|
68
|
+
nil
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
|
|
73
|
+
def work
|
|
74
|
+
until @closed
|
|
75
|
+
job = next_job
|
|
76
|
+
job ? run(job) : await_request
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# A catch-up goes first: it releases the held messages itself.
|
|
81
|
+
def next_job
|
|
82
|
+
if @pending
|
|
83
|
+
@pending = false
|
|
84
|
+
@read
|
|
85
|
+
elsif @releasing
|
|
86
|
+
@releasing = false
|
|
87
|
+
@release
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def run(job)
|
|
92
|
+
job.call
|
|
93
|
+
rescue StandardError => e
|
|
94
|
+
@on_failure.call(e)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def await_request
|
|
98
|
+
delay = @retry_delay
|
|
99
|
+
return wake.wait unless delay
|
|
100
|
+
|
|
101
|
+
Async::Task.current.with_timeout(delay) { wake.wait }
|
|
102
|
+
rescue Async::TimeoutError
|
|
103
|
+
@due.call
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def wake
|
|
107
|
+
require 'async/notification'
|
|
108
|
+
@wake ||= Async::Notification.new
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
private_constant :DurableMessageCatchUps
|
|
112
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Volcano
|
|
4
|
+
DURABLE_MESSAGE_ATTRIBUTES = %i[
|
|
5
|
+
id execution_id direction seq name data sender status sent_at delivered_at
|
|
6
|
+
].freeze
|
|
7
|
+
private_constant :DURABLE_MESSAGE_ATTRIBUTES
|
|
8
|
+
|
|
9
|
+
# Who sent a durable message. `type` is the credential it was sent with:
|
|
10
|
+
# `service_key`, `user`, `anon`, `project` for the owner or a project access
|
|
11
|
+
# token, or `execution` for a message the execution published. `user_id` is
|
|
12
|
+
# nil unless `type` is `user`.
|
|
13
|
+
DurableMessageSender = Data.define(:type, :user_id)
|
|
14
|
+
|
|
15
|
+
# Reopens the generated record for checked initialization.
|
|
16
|
+
class DurableMessageSender
|
|
17
|
+
# @dynamic type, user_id, members, with, to_h, deconstruct, deconstruct_keys
|
|
18
|
+
# @dynamic self.[], self.members
|
|
19
|
+
def initialize(type:, user_id: nil)
|
|
20
|
+
type = type.dup.freeze
|
|
21
|
+
user_id = user_id&.dup&.freeze
|
|
22
|
+
super
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# A message sent to a durable execution (`direction` `in`), or one it
|
|
27
|
+
# published (`out`).
|
|
28
|
+
#
|
|
29
|
+
# `seq` orders an execution's messages in both directions. It increases with
|
|
30
|
+
# every message but can skip numbers; list the ones after it with `after:`.
|
|
31
|
+
# `delivered_at` is nil until the execution receives the message, and for
|
|
32
|
+
# `out` messages. `data` is frozen all the way down.
|
|
33
|
+
DurableMessage = Data.define(*DURABLE_MESSAGE_ATTRIBUTES)
|
|
34
|
+
|
|
35
|
+
# Reopens the generated record for checked initialization.
|
|
36
|
+
class DurableMessage
|
|
37
|
+
# @dynamic id, execution_id, direction, seq, name, data, sender, status, sent_at
|
|
38
|
+
# @dynamic delivered_at, members, with, to_h, deconstruct, deconstruct_keys
|
|
39
|
+
# @dynamic self.[], self.members
|
|
40
|
+
def initialize(**attributes)
|
|
41
|
+
values = DurableApprovalAttributes.capture(
|
|
42
|
+
attributes, DURABLE_MESSAGE_ATTRIBUTES, optional: %i[data delivered_at]
|
|
43
|
+
)
|
|
44
|
+
attributes = values
|
|
45
|
+
super
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Messages after a `seq`, oldest first. `has_more` says whether more follow;
|
|
50
|
+
# read them with `after:` set to the last message's `seq`.
|
|
51
|
+
DurableMessagePage = Data.define(:messages, :has_more)
|
|
52
|
+
|
|
53
|
+
# Reopens the generated record for checked initialization.
|
|
54
|
+
class DurableMessagePage
|
|
55
|
+
# @dynamic messages, has_more, members, with, to_h, deconstruct, deconstruct_keys
|
|
56
|
+
# @dynamic self.[], self.members
|
|
57
|
+
def initialize(messages:, has_more:)
|
|
58
|
+
messages = messages.to_a.dup.freeze
|
|
59
|
+
super
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module Volcano
|
|
6
|
+
# Builds durable messages and message pages from transport payloads.
|
|
7
|
+
module DurableMessageResponses
|
|
8
|
+
INCOMPLETE_MESSAGE = 'Expected a complete durable message'
|
|
9
|
+
INCOMPLETE_PAGE = 'Expected a complete durable message page'
|
|
10
|
+
DIRECTIONS = %w[in out].freeze
|
|
11
|
+
private_constant :INCOMPLETE_MESSAGE, :INCOMPLETE_PAGE, :DIRECTIONS
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def durable_message(payload)
|
|
16
|
+
values = message_object(payload, INCOMPLETE_MESSAGE)
|
|
17
|
+
id, execution_id, name = message_labels(values)
|
|
18
|
+
direction, status = message_states(values)
|
|
19
|
+
DurableMessage.new(
|
|
20
|
+
id: id, execution_id: execution_id, direction: direction, seq: message_seq(values['seq']), name: name,
|
|
21
|
+
data: message_data(values['data']), sender: message_sender(values['sender']), status: status,
|
|
22
|
+
sent_at: message_time(values['sent_at']), delivered_at: optional_message_time(values['delivered_at'])
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def message_labels(values)
|
|
27
|
+
[message_text(values['id']), message_text(values['execution_id']), message_text(values['name'])]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# The stream filters on direction, so it has to be one it knows. A status
|
|
31
|
+
# added later reads as written, as an execution's does.
|
|
32
|
+
def message_states(values)
|
|
33
|
+
[message_choice(values['direction'], DIRECTIONS), message_text(values['status'])]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# The seq a broadcast says the execution published before it, or 0, naming
|
|
37
|
+
# no gap, when it has none.
|
|
38
|
+
def broadcast_prev_seq(payload)
|
|
39
|
+
prev_seq = message_object(payload, INCOMPLETE_MESSAGE)['prev_seq']
|
|
40
|
+
prev_seq.is_a?(Integer) ? prev_seq : 0
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def durable_message_page(payload)
|
|
44
|
+
values = message_object(payload, INCOMPLETE_PAGE)
|
|
45
|
+
data = values['data']
|
|
46
|
+
raise TypeError, INCOMPLETE_PAGE unless data.is_a?(Array)
|
|
47
|
+
|
|
48
|
+
messages = data.map { |entry| durable_message(entry) }
|
|
49
|
+
DurableMessagePage.new(messages: messages, has_more: page_flag(values['has_more']))
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def page_flag(value)
|
|
53
|
+
return value if value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
|
54
|
+
|
|
55
|
+
raise TypeError, INCOMPLETE_PAGE
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def message_object(payload, message)
|
|
59
|
+
raise TypeError, message unless payload.is_a?(Hash)
|
|
60
|
+
|
|
61
|
+
payload
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def message_text(value)
|
|
65
|
+
raise TypeError, INCOMPLETE_MESSAGE unless value.is_a?(String) && !value.empty?
|
|
66
|
+
|
|
67
|
+
value
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def message_choice(value, choices)
|
|
71
|
+
choices.find { |choice| choice == value } || raise(TypeError, INCOMPLETE_MESSAGE)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def message_seq(value)
|
|
75
|
+
raise TypeError, INCOMPLETE_MESSAGE unless value.is_a?(Integer) && value.positive?
|
|
76
|
+
|
|
77
|
+
value
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def message_data(value)
|
|
81
|
+
Transport.json_value(value)
|
|
82
|
+
rescue TypeError
|
|
83
|
+
raise TypeError, INCOMPLETE_MESSAGE, cause: nil
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def message_sender(payload)
|
|
87
|
+
values = message_object(payload, INCOMPLETE_MESSAGE)
|
|
88
|
+
user_id = values['user_id']
|
|
89
|
+
raise TypeError, INCOMPLETE_MESSAGE unless user_id.nil? || user_id.is_a?(String)
|
|
90
|
+
|
|
91
|
+
DurableMessageSender.new(type: message_text(values['type']), user_id: user_id)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def message_time(value)
|
|
95
|
+
raise TypeError, INCOMPLETE_MESSAGE unless value.is_a?(String)
|
|
96
|
+
|
|
97
|
+
Time.iso8601(value)
|
|
98
|
+
rescue ArgumentError
|
|
99
|
+
raise TypeError, INCOMPLETE_MESSAGE, cause: nil
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def optional_message_time(value)
|
|
103
|
+
value.nil? ? nil : message_time(value)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
private_constant :DurableMessageResponses
|
|
107
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Volcano
|
|
4
|
+
# Binds a subscription to the session signed in when it opened, as Postgres
|
|
5
|
+
# delivery does. Signing out, signing in again, or setting another session
|
|
6
|
+
# ends it; refreshing its token does not. Once ended, the stream reads and
|
|
7
|
+
# delivers nothing more, rather than another user's messages, and the
|
|
8
|
+
# subscription leaves the execution's channel.
|
|
9
|
+
#
|
|
10
|
+
# It follows the channel for the stream: a reconnect restores the channel
|
|
11
|
+
# only while the session is the one that subscribed.
|
|
12
|
+
class DurableMessageSession
|
|
13
|
+
CHANGED = "The session that subscribed to the execution's messages has changed; " \
|
|
14
|
+
'the subscription has ended'
|
|
15
|
+
private_constant :CHANGED
|
|
16
|
+
|
|
17
|
+
def initialize(realtime)
|
|
18
|
+
@realtime = realtime
|
|
19
|
+
_, @lineage, = realtime.__send__(:capture_session_binding)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# A stream that delivers to +handler+ and reads with +list_after+ while
|
|
23
|
+
# the session is unchanged, and raises Error::SessionChangedError after.
|
|
24
|
+
def stream(handler, list_after, on_failure)
|
|
25
|
+
@stream = DurableMessageStream.new(bind(handler), bind_read(list_after), on_failure)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Ends +subscription+ once the session changes. Called before the
|
|
29
|
+
# subscription subscribes, so before anything checks the session.
|
|
30
|
+
def end_with(subscription)
|
|
31
|
+
@subscription = subscription
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Asked before a reconnect restores the channel.
|
|
35
|
+
def restoring = require_session
|
|
36
|
+
|
|
37
|
+
# Told when the server refuses to restore the channel for good.
|
|
38
|
+
def refused = @subscription.unsubscribe
|
|
39
|
+
|
|
40
|
+
def resubscribed = @stream.catch_up_in_background
|
|
41
|
+
def dropped = @stream.catch_up_in_background
|
|
42
|
+
def close = @stream.close
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def bind(callable)
|
|
47
|
+
lambda do |argument|
|
|
48
|
+
require_session
|
|
49
|
+
callable.call(argument)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# A page read while the session changed is not delivered, even an empty
|
|
54
|
+
# one, which delivers nothing that would check it.
|
|
55
|
+
def bind_read(list_after)
|
|
56
|
+
lambda do |after|
|
|
57
|
+
require_session
|
|
58
|
+
list_after.call(after).tap { require_session }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def require_session
|
|
63
|
+
_, lineage, session = @realtime.__send__(:capture_session_binding)
|
|
64
|
+
return if session && lineage == @lineage
|
|
65
|
+
|
|
66
|
+
@stream.close
|
|
67
|
+
@subscription.unsubscribe
|
|
68
|
+
raise Error::SessionChangedError, CHANGED
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
private_constant :DurableMessageSession
|
|
72
|
+
end
|