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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a17106ab631dea9f34c8efbe196bd1636ceb1dd80f2751f3c93570f925176418
|
|
4
|
+
data.tar.gz: 0d8853a55cadc7f86e34b7c6bf39e751b0474d4f878f9732ed013f6b5715794f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a2d0f334b4dd8b5482e26b9146e66ad44c97af567e0db6a12124f0a715033bd8e0c9307cbd75bab5b1ee1c6866f47212b999f1a6c237297b749b6803912331c8
|
|
7
|
+
data.tar.gz: fdfa815814d401cd36bccfb6bfc1179e9222d0792cc993529d3cd16246942cf5c5d1afaf25c84fb7ea8f642551cb494b394b7884dcba64fe4a8c72946de2ce2e
|
data/README.md
CHANGED
|
@@ -522,10 +522,11 @@ owner_client.durable.stop(project_id, "charge-order", handle.id)
|
|
|
522
522
|
`start` takes a durable function's name or its id and returns a handle, never a
|
|
523
523
|
result: an execution can run for up to 366 days, so its result is read back with `get`.
|
|
524
524
|
It uses the same credential `invoke` does — the active user session, then a
|
|
525
|
-
configured service key, then the anonymous key — and is
|
|
526
|
-
operation an application credential may perform. An
|
|
527
|
-
start idempotent: starting again under the same name
|
|
528
|
-
already exists rather than beginning a second one.
|
|
525
|
+
configured service key, then the anonymous key — and is, with `messages`, the
|
|
526
|
+
only durable operation an application credential may perform. An
|
|
527
|
+
`execution_name` makes the start idempotent: starting again under the same name
|
|
528
|
+
returns the execution that already exists rather than beginning a second one.
|
|
529
|
+
Only the start that creates the execution returns its `client_token`.
|
|
529
530
|
|
|
530
531
|
`get`, `list`, and `stop` are owner-scoped and require the project owner's
|
|
531
532
|
platform user token, because an execution is addressed by its id alone.
|
|
@@ -550,6 +551,105 @@ caller needs.
|
|
|
550
551
|
Ruby remains a fully supported runtime for [standard
|
|
551
552
|
functions](https://volcano.dev/platform/functions/overview).
|
|
552
553
|
|
|
554
|
+
### Decide durable approvals
|
|
555
|
+
|
|
556
|
+
A durable function written in JavaScript or Python can pause until a person
|
|
557
|
+
approves or denies a request. Ruby lists those requests and decides them:
|
|
558
|
+
|
|
559
|
+
```ruby
|
|
560
|
+
approvals = owner_client.durable.approvals
|
|
561
|
+
|
|
562
|
+
page = approvals.list(project_id, status: "pending", function: "refunds", limit: 20)
|
|
563
|
+
page.approvals.each do |approval|
|
|
564
|
+
puts [approval.id, approval.title, approval.details, approval.expires_at]
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
begin
|
|
568
|
+
approval = approvals.approve(project_id, page.approvals.first.id, comment: "Matches the invoice")
|
|
569
|
+
puts approval.decision.decided_at
|
|
570
|
+
rescue Volcano::Error::ConflictError => e
|
|
571
|
+
puts e.code # approval_decided, approval_expired, or approval_cancelled
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
approvals.deny(project_id, "00000000-0000-4000-8000-000000000051")
|
|
575
|
+
|
|
576
|
+
stats = approvals.stats(project_id, from: Time.now - (7 * 86_400))
|
|
577
|
+
puts [stats.counts.pending, stats.approval_rate, stats.median_seconds_to_decision]
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
`list` returns the newest approvals first. Filter by `status` (`pending`,
|
|
581
|
+
`approved`, `denied`, `expired`, or `cancelled`), `function` (a durable
|
|
582
|
+
function's id or name), `execution_id`, and a `from`/`to` window given as a
|
|
583
|
+
`Time` or an ISO 8601 string with an offset, such as `2026-10-01T00:00:00Z`.
|
|
584
|
+
`stats` covers the last 30 days unless you pass a
|
|
585
|
+
window, up to 366 days. It counts approvals by status, gives the approval rate
|
|
586
|
+
and the median and 90th-percentile time to a decision (nil when nothing in the
|
|
587
|
+
window was decided), lists the ten functions that requested the most approvals
|
|
588
|
+
with the rest summed in `other_functions`, and returns `daily` counts keyed by
|
|
589
|
+
`YYYY-MM-DD` UTC dates, omitting days without approvals.
|
|
590
|
+
|
|
591
|
+
An approval keeps its function and execution names after they are deleted;
|
|
592
|
+
their ids become nil. `decision` is nil unless the approval was approved or
|
|
593
|
+
denied, and its `decided_by` is nil once the deciding account is deleted.
|
|
594
|
+
|
|
595
|
+
Reading approvals accepts the project owner's platform user token or a project
|
|
596
|
+
access token. Approving and denying require a person: a project access token
|
|
597
|
+
raises `Volcano::Error::PermissionDeniedError` (HTTP 403, a subclass of
|
|
598
|
+
`AuthenticationError`, so existing rescues still apply). Repeating the same
|
|
599
|
+
decision returns the approval unchanged; a conflicting decision, or deciding an
|
|
600
|
+
expired or cancelled approval, raises `Volcano::Error::ConflictError` (HTTP
|
|
601
|
+
409). An unknown approval, or one in another project, raises
|
|
602
|
+
`Volcano::Error::NotFoundError`. A `comment` is optional, up to 2,000
|
|
603
|
+
characters.
|
|
604
|
+
|
|
605
|
+
### Message a durable execution
|
|
606
|
+
|
|
607
|
+
A durable function written in JavaScript or Python can wait for a named
|
|
608
|
+
message, and publish messages of its own. Ruby sends them, lists them, and
|
|
609
|
+
follows what the execution publishes:
|
|
610
|
+
|
|
611
|
+
```ruby
|
|
612
|
+
require "async"
|
|
613
|
+
|
|
614
|
+
handle = client.durable.start("onboarding", { account_id: "account-7" })
|
|
615
|
+
messages = client.durable.messages
|
|
616
|
+
|
|
617
|
+
messages.send_message("onboarding", handle.id, "documents-uploaded", { count: 3 },
|
|
618
|
+
idempotency_key: "upload-42")
|
|
619
|
+
|
|
620
|
+
page = messages.list("onboarding", handle.id, direction: "out", after: 0)
|
|
621
|
+
puts page.messages.map(&:name), page.has_more
|
|
622
|
+
|
|
623
|
+
Async do
|
|
624
|
+
subscription = messages.subscribe("onboarding", handle.id, client_token: handle.client_token) do |message|
|
|
625
|
+
puts [message.seq, message.name, message.data]
|
|
626
|
+
end
|
|
627
|
+
# ...
|
|
628
|
+
subscription.unsubscribe
|
|
629
|
+
ensure
|
|
630
|
+
client.realtime.disconnect
|
|
631
|
+
end.wait
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
A sent message waits until the execution waits for its name. Repeating a send
|
|
635
|
+
with the same `idempotency_key` returns the stored message; sending to an
|
|
636
|
+
execution that has ended raises `Volcano::Error::ConflictError` with `code`
|
|
637
|
+
`execution_not_running`. `subscribe` delivers each published message once, in
|
|
638
|
+
`seq` order, one block call at a time: those published before the call first,
|
|
639
|
+
then live ones, and after a reconnect or a lost live message the ones it
|
|
640
|
+
missed. It needs a signed-in session and an Async reactor; a client with only a
|
|
641
|
+
client token or the service key raises `Volcano::Error::AuthenticationError`.
|
|
642
|
+
Signing out, signing in again, or setting another session ends the
|
|
643
|
+
subscription; a token refresh does not. So does a reconnect the server refuses
|
|
644
|
+
to restore it on, as when the execution is no longer visible to the session.
|
|
645
|
+
|
|
646
|
+
The service key reaches every execution. A signed-in user reaches the executions
|
|
647
|
+
they started; the anon key, or another user, passes the execution's
|
|
648
|
+
`client_token:`, which only the creating start returns. Pass `project_id:` to
|
|
649
|
+
`send_message`, `list`, or `subscribe` to use the owner's route with a platform
|
|
650
|
+
user token or a project access token; `subscribe` reads back over it. See the
|
|
651
|
+
[functions guide](https://github.com/Kong/volcano-sdk-ruby/blob/main/docs/functions.md#message-a-durable-execution).
|
|
652
|
+
|
|
553
653
|
### Read project logs
|
|
554
654
|
|
|
555
655
|
```ruby
|
|
@@ -80,8 +80,8 @@ module Volcano
|
|
|
80
80
|
|
|
81
81
|
def profile_optional_boolean(value)
|
|
82
82
|
return if value.nil?
|
|
83
|
-
return true if value
|
|
84
|
-
return false if value
|
|
83
|
+
return true if value.equal?(true)
|
|
84
|
+
return false if value.equal?(false)
|
|
85
85
|
|
|
86
86
|
raise Error::AuthenticationError, INVALID_USER
|
|
87
87
|
end
|
data/lib/volcano/client.rb
CHANGED
|
@@ -118,7 +118,6 @@ module Volcano
|
|
|
118
118
|
def initialize_facades(socket_factory, reconnect_delay)
|
|
119
119
|
@auth = Auth.new(self, @transport, api_url: @api_url)
|
|
120
120
|
@functions = Functions.new(self, @transport, api_url: @api_url)
|
|
121
|
-
@durable = Durable.new(self, @transport)
|
|
122
121
|
@logs = Logs.new(self, @transport)
|
|
123
122
|
@storage = Storage.new(self, @transport, api_url: @api_url, anon_key: @anon_key)
|
|
124
123
|
@locks = Locks.new(self, @transport)
|
|
@@ -129,6 +128,7 @@ module Volcano
|
|
|
129
128
|
socket_factory: socket_factory,
|
|
130
129
|
reconnect_delay: reconnect_delay
|
|
131
130
|
)
|
|
131
|
+
@durable = Durable.new(self, @transport, @realtime)
|
|
132
132
|
end
|
|
133
133
|
end
|
|
134
134
|
end
|
data/lib/volcano/durable.rb
CHANGED
|
@@ -3,27 +3,35 @@
|
|
|
3
3
|
module Volcano
|
|
4
4
|
# Starts and follows executions of deployed durable functions.
|
|
5
5
|
class Durable
|
|
6
|
-
# What the platform accepts as an execution name
|
|
7
|
-
#
|
|
8
|
-
# facade's rather than the generated client's.
|
|
6
|
+
# What the platform accepts as an execution name. Mirrored from the wire
|
|
7
|
+
# contract so a refusal is the facade's rather than the generated client's.
|
|
9
8
|
EXECUTION_NAME = /\A[A-Za-z0-9._-]{1,255}\z/
|
|
10
|
-
|
|
9
|
+
include DurableArguments
|
|
11
10
|
include DurableResponses
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
# Lists, reads, and decides the approvals durable workflows request.
|
|
13
|
+
attr_reader :approvals
|
|
14
|
+
|
|
15
|
+
# Sends to, lists, and follows the messages of durable executions.
|
|
16
|
+
attr_reader :messages
|
|
17
|
+
|
|
18
|
+
def initialize(client, transport, realtime)
|
|
14
19
|
@client = client
|
|
15
20
|
@transport = transport
|
|
21
|
+
@approvals = DurableApprovals.new(client, transport)
|
|
22
|
+
@messages = DurableMessages.new(client, transport, realtime)
|
|
16
23
|
end
|
|
17
24
|
|
|
18
25
|
# Starts an execution and returns its handle. A durable function is never
|
|
19
26
|
# invoked synchronously: it can outlive any request a caller could hold
|
|
20
27
|
# open, so its result is read back with #get.
|
|
21
28
|
#
|
|
22
|
-
# Starting
|
|
23
|
-
#
|
|
29
|
+
# Starting takes the token an invoke takes, and is, with #messages, the
|
|
30
|
+
# only durable operation an application credential may perform. Passing an
|
|
24
31
|
# +execution_name+ makes the start idempotent: starting again under the
|
|
25
32
|
# same name returns the execution that already exists rather than
|
|
26
|
-
# beginning a second one.
|
|
33
|
+
# beginning a second one. Only the start that created the execution
|
|
34
|
+
# returns its +client_token+.
|
|
27
35
|
def start(function_name, payload = {}, execution_name: nil)
|
|
28
36
|
# A durable function's id is accepted here as well as its name, so the
|
|
29
37
|
# DNS-safe name pattern an invoke checks would reject half the input.
|
|
@@ -99,18 +107,6 @@ module Volcano
|
|
|
99
107
|
]
|
|
100
108
|
end
|
|
101
109
|
|
|
102
|
-
# An empty path segment would address the collection instead of the
|
|
103
|
-
# execution, which is a different request rather than a failed one.
|
|
104
|
-
def identifier(value, field)
|
|
105
|
-
raise ArgumentError, "#{field} must be a non-empty String" unless value.is_a?(String) && present_string?(value)
|
|
106
|
-
|
|
107
|
-
value.strip.freeze
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
# The generated client validates this header against the same pattern and
|
|
111
|
-
# raises its own message, naming the operation and the option key it knows
|
|
112
|
-
# the header by. Checked here first so the caller reads a message about the
|
|
113
|
-
# argument they passed, the way Functions#invoke does for a function name.
|
|
114
110
|
def execution_name_argument(value)
|
|
115
111
|
name = identifier(value, 'execution_name')
|
|
116
112
|
unless EXECUTION_NAME.match?(name)
|
|
@@ -120,23 +116,5 @@ module Volcano
|
|
|
120
116
|
|
|
121
117
|
name
|
|
122
118
|
end
|
|
123
|
-
|
|
124
|
-
# Same reason: the generated client enforces the page and limit bounds and
|
|
125
|
-
# answers with its own vocabulary.
|
|
126
|
-
def validate_paging(page, limit)
|
|
127
|
-
raise ArgumentError, 'page must be a positive Integer' unless page.nil? || positive_integer?(page)
|
|
128
|
-
|
|
129
|
-
validate_page_limit(limit)
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def validate_page_limit(limit)
|
|
133
|
-
return if limit.nil? || (limit.is_a?(Integer) && positive_integer?(limit) && limit <= MAX_PAGE_SIZE)
|
|
134
|
-
|
|
135
|
-
raise ArgumentError, "limit must be an Integer between 1 and #{MAX_PAGE_SIZE}"
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
def positive_integer?(value)
|
|
139
|
-
value.is_a?(Integer) && value.positive?
|
|
140
|
-
end
|
|
141
119
|
end
|
|
142
120
|
end
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'immutable_request_value'
|
|
4
|
+
|
|
5
|
+
module Volcano
|
|
6
|
+
DURABLE_APPROVAL_ATTRIBUTES = %i[
|
|
7
|
+
id status name title description details function execution requested_at expires_at decision
|
|
8
|
+
].freeze
|
|
9
|
+
DURABLE_APPROVAL_STATS_ATTRIBUTES = %i[
|
|
10
|
+
from to counts approval_rate median_seconds_to_decision p90_seconds_to_decision
|
|
11
|
+
functions other_functions daily
|
|
12
|
+
].freeze
|
|
13
|
+
private_constant :DURABLE_APPROVAL_ATTRIBUTES, :DURABLE_APPROVAL_STATS_ATTRIBUTES
|
|
14
|
+
|
|
15
|
+
# Checks keywords for the durable records with too many fields for an
|
|
16
|
+
# explicit keyword list, and owns immutable copies of their values.
|
|
17
|
+
module DurableApprovalAttributes
|
|
18
|
+
def self.capture(attributes, names, optional:)
|
|
19
|
+
unknown = attributes.keys - names
|
|
20
|
+
raise ArgumentError, "unknown keywords: #{unknown.join(', ')}" unless unknown.empty?
|
|
21
|
+
|
|
22
|
+
missing = names - optional - attributes.keys
|
|
23
|
+
raise ArgumentError, "missing keywords: #{missing.join(', ')}" unless missing.empty?
|
|
24
|
+
|
|
25
|
+
names.to_h { |name| [name, immutable_value(attributes[name])] }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.immutable_value(value)
|
|
29
|
+
case value
|
|
30
|
+
when Hash, Array, Time, String then ImmutableRequestValue.capture(value)
|
|
31
|
+
else value
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
private_constant :DurableApprovalAttributes
|
|
36
|
+
|
|
37
|
+
# The durable function that requested an approval. `id` is nil once the
|
|
38
|
+
# function has been deleted; `name` is kept.
|
|
39
|
+
DurableApprovalFunction = Data.define(:id, :name)
|
|
40
|
+
|
|
41
|
+
# Reopens the generated record for checked initialization.
|
|
42
|
+
class DurableApprovalFunction
|
|
43
|
+
# @dynamic id, name, members, with, to_h, deconstruct, deconstruct_keys, self.[]
|
|
44
|
+
# @dynamic self.members
|
|
45
|
+
def initialize(id:, name:)
|
|
46
|
+
id = id&.dup&.freeze
|
|
47
|
+
name = name.dup.freeze
|
|
48
|
+
super
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# The durable execution that requested an approval. `id` and `status` are
|
|
53
|
+
# nil once the execution is no longer retained; `name` is kept.
|
|
54
|
+
DurableApprovalExecution = Data.define(:id, :name, :status)
|
|
55
|
+
|
|
56
|
+
# Reopens the generated record for checked initialization.
|
|
57
|
+
class DurableApprovalExecution
|
|
58
|
+
# @dynamic id, name, status, members, with, to_h, deconstruct, deconstruct_keys
|
|
59
|
+
# @dynamic self.[], self.members
|
|
60
|
+
def initialize(id:, name:, status:)
|
|
61
|
+
id = id&.dup&.freeze
|
|
62
|
+
name = name.dup.freeze
|
|
63
|
+
status = status&.dup&.freeze
|
|
64
|
+
super
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# The person who decided an approval.
|
|
69
|
+
DurableApprovalDecider = Data.define(:id, :email)
|
|
70
|
+
|
|
71
|
+
# Reopens the generated record for checked initialization.
|
|
72
|
+
class DurableApprovalDecider
|
|
73
|
+
# @dynamic id, email, members, with, to_h, deconstruct, deconstruct_keys, self.[]
|
|
74
|
+
# @dynamic self.members
|
|
75
|
+
def initialize(id:, email:)
|
|
76
|
+
id = id.dup.freeze
|
|
77
|
+
email = email.dup.freeze
|
|
78
|
+
super
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Who decided an approval and when. `decided_by` is nil once that person's
|
|
83
|
+
# account is deleted.
|
|
84
|
+
DurableApprovalDecision = Data.define(:comment, :decided_by, :decided_at)
|
|
85
|
+
|
|
86
|
+
# Reopens the generated record for checked initialization.
|
|
87
|
+
class DurableApprovalDecision
|
|
88
|
+
# @dynamic comment, decided_by, decided_at, members, with, to_h, deconstruct
|
|
89
|
+
# @dynamic deconstruct_keys, self.[], self.members
|
|
90
|
+
def initialize(comment:, decided_by:, decided_at:)
|
|
91
|
+
comment = comment.dup.freeze
|
|
92
|
+
decided_at = decided_at.dup.freeze
|
|
93
|
+
super
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# An approval a durable workflow requested.
|
|
98
|
+
#
|
|
99
|
+
# `decision` is nil unless the approval was approved or denied, and
|
|
100
|
+
# `expires_at` is nil when the workflow set no timeout. `details` is the
|
|
101
|
+
# workflow's own JSON, frozen all the way down.
|
|
102
|
+
DurableApproval = Data.define(*DURABLE_APPROVAL_ATTRIBUTES)
|
|
103
|
+
|
|
104
|
+
# Reopens the generated record for checked initialization.
|
|
105
|
+
class DurableApproval
|
|
106
|
+
# @dynamic id, status, name, title, description, details, function, execution
|
|
107
|
+
# @dynamic requested_at, expires_at, decision, members, with, to_h, deconstruct
|
|
108
|
+
# @dynamic deconstruct_keys, self.[], self.members
|
|
109
|
+
def initialize(**attributes)
|
|
110
|
+
values = DurableApprovalAttributes.capture(
|
|
111
|
+
attributes, DURABLE_APPROVAL_ATTRIBUTES, optional: %i[details expires_at decision]
|
|
112
|
+
)
|
|
113
|
+
attributes = values
|
|
114
|
+
super
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# One page of a project's approvals, newest first.
|
|
119
|
+
DurableApprovalPage = Data.define(:approvals, :page, :limit, :total, :has_more)
|
|
120
|
+
|
|
121
|
+
# Reopens the generated record for checked initialization.
|
|
122
|
+
class DurableApprovalPage
|
|
123
|
+
# @dynamic approvals, page, limit, total, has_more, members, with, to_h, deconstruct
|
|
124
|
+
# @dynamic deconstruct_keys, self.[], self.members
|
|
125
|
+
def initialize(approvals:, page:, limit:, total:, has_more:)
|
|
126
|
+
approvals = approvals.to_a.dup.freeze
|
|
127
|
+
super
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Approvals by status. `requested` counts every approval, whatever its status.
|
|
132
|
+
DurableApprovalCounts = Data.define(:requested, :pending, :approved, :denied, :expired, :cancelled)
|
|
133
|
+
|
|
134
|
+
# One workflow's approval counts.
|
|
135
|
+
DurableApprovalFunctionCounts = Data.define(:function, :counts)
|
|
136
|
+
|
|
137
|
+
# Approval counts for one UTC day, given as `YYYY-MM-DD`.
|
|
138
|
+
DurableApprovalDailyCounts = Data.define(:date, :counts)
|
|
139
|
+
|
|
140
|
+
# Reopens the generated record for checked initialization.
|
|
141
|
+
class DurableApprovalDailyCounts
|
|
142
|
+
# @dynamic date, counts, members, with, to_h, deconstruct, deconstruct_keys, self.[]
|
|
143
|
+
# @dynamic self.members
|
|
144
|
+
def initialize(date:, counts:)
|
|
145
|
+
date = date.dup.freeze
|
|
146
|
+
super
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Approval outcomes over a time window.
|
|
151
|
+
#
|
|
152
|
+
# `functions` holds the ten workflows that requested the most approvals and
|
|
153
|
+
# `other_functions` sums the rest. `daily` omits days without approvals.
|
|
154
|
+
# The rate and decision times are nil when nothing in the window was decided.
|
|
155
|
+
DurableApprovalStats = Data.define(*DURABLE_APPROVAL_STATS_ATTRIBUTES)
|
|
156
|
+
|
|
157
|
+
# Reopens the generated record for checked initialization.
|
|
158
|
+
class DurableApprovalStats
|
|
159
|
+
# @dynamic from, to, counts, approval_rate, median_seconds_to_decision
|
|
160
|
+
# @dynamic p90_seconds_to_decision, functions, other_functions, daily, members, with
|
|
161
|
+
# @dynamic to_h, deconstruct, deconstruct_keys, self.[], self.members
|
|
162
|
+
def initialize(**attributes)
|
|
163
|
+
values = DurableApprovalAttributes.capture(
|
|
164
|
+
attributes, DURABLE_APPROVAL_STATS_ATTRIBUTES,
|
|
165
|
+
optional: %i[approval_rate median_seconds_to_decision p90_seconds_to_decision]
|
|
166
|
+
)
|
|
167
|
+
attributes = values
|
|
168
|
+
super
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module Volcano
|
|
6
|
+
# Checks the fields shared by approval and statistics payloads.
|
|
7
|
+
module DurableApprovalFields
|
|
8
|
+
INCOMPLETE_APPROVAL = 'Expected a complete durable approval'
|
|
9
|
+
INCOMPLETE_PAGE = 'Expected a complete durable approval page'
|
|
10
|
+
INCOMPLETE_STATS = 'Expected complete durable approval statistics'
|
|
11
|
+
private_constant :INCOMPLETE_APPROVAL, :INCOMPLETE_PAGE, :INCOMPLETE_STATS
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def approval_function(payload, message)
|
|
16
|
+
values = approval_object(payload, message)
|
|
17
|
+
DurableApprovalFunction.new(
|
|
18
|
+
id: optional_approval_text(values['id'], message), name: approval_text(values['name'], message)
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def approval_object(payload, message)
|
|
23
|
+
raise TypeError, message unless payload.is_a?(Hash)
|
|
24
|
+
|
|
25
|
+
payload
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def approval_list(value)
|
|
29
|
+
raise TypeError, INCOMPLETE_STATS unless value.is_a?(Array)
|
|
30
|
+
|
|
31
|
+
value
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def approval_text(value, message = INCOMPLETE_APPROVAL)
|
|
35
|
+
raise TypeError, message unless value.is_a?(String) && !value.strip.empty?
|
|
36
|
+
|
|
37
|
+
value
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def optional_approval_text(value, message)
|
|
41
|
+
value.nil? ? nil : approval_text(value, message)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def approval_string(value, message)
|
|
45
|
+
raise TypeError, message unless value.is_a?(String)
|
|
46
|
+
|
|
47
|
+
value
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def approval_time(value, message)
|
|
51
|
+
case value
|
|
52
|
+
when String then Time.iso8601(value)
|
|
53
|
+
when Time then value
|
|
54
|
+
else raise TypeError, message
|
|
55
|
+
end
|
|
56
|
+
rescue ArgumentError
|
|
57
|
+
raise TypeError, message, cause: nil
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def approval_count(value, message = INCOMPLETE_STATS)
|
|
61
|
+
raise TypeError, message unless value.is_a?(Integer)
|
|
62
|
+
|
|
63
|
+
value
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def approval_flag(value)
|
|
67
|
+
return value if value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
|
68
|
+
|
|
69
|
+
raise TypeError, INCOMPLETE_PAGE
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def approval_number(value)
|
|
73
|
+
case value
|
|
74
|
+
when nil then nil
|
|
75
|
+
when Integer, Float then Float(value)
|
|
76
|
+
else raise TypeError, INCOMPLETE_STATS
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
private_constant :DurableApprovalFields
|
|
81
|
+
|
|
82
|
+
# Builds approvals and approval pages from transport payloads.
|
|
83
|
+
module DurableApprovalResponses
|
|
84
|
+
include DurableApprovalFields
|
|
85
|
+
|
|
86
|
+
private
|
|
87
|
+
|
|
88
|
+
def durable_approval(payload)
|
|
89
|
+
values = approval_object(payload, INCOMPLETE_APPROVAL)
|
|
90
|
+
id, status, name, title = approval_labels(values)
|
|
91
|
+
requested_at, expires_at = approval_schedule(values)
|
|
92
|
+
DurableApproval.new(
|
|
93
|
+
id: id, status: status, name: name, title: title,
|
|
94
|
+
description: approval_string(values['description'], INCOMPLETE_APPROVAL),
|
|
95
|
+
details: approval_details(values['details']),
|
|
96
|
+
function: approval_function(values['function'], INCOMPLETE_APPROVAL),
|
|
97
|
+
execution: approval_execution(values['execution']), requested_at: requested_at, expires_at: expires_at,
|
|
98
|
+
decision: approval_decision(values['decision'])
|
|
99
|
+
)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def durable_approval_page(payload)
|
|
103
|
+
values = approval_object(payload, INCOMPLETE_PAGE)
|
|
104
|
+
data = values['data']
|
|
105
|
+
raise TypeError, INCOMPLETE_PAGE unless data.is_a?(Array)
|
|
106
|
+
|
|
107
|
+
DurableApprovalPage.new(
|
|
108
|
+
approvals: data.map { |entry| durable_approval(entry) }, has_more: approval_flag(values['has_more']),
|
|
109
|
+
page: approval_count(values['page'], INCOMPLETE_PAGE), limit: approval_count(values['limit'], INCOMPLETE_PAGE),
|
|
110
|
+
total: approval_count(values['total'], INCOMPLETE_PAGE)
|
|
111
|
+
)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def approval_labels(values)
|
|
115
|
+
[approval_text(values['id']), approval_text(values['status']),
|
|
116
|
+
approval_text(values['name']), approval_text(values['title'])]
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def approval_schedule(values)
|
|
120
|
+
expires_at = values['expires_at']
|
|
121
|
+
[approval_time(values['requested_at'], INCOMPLETE_APPROVAL),
|
|
122
|
+
expires_at.nil? ? nil : approval_time(expires_at, INCOMPLETE_APPROVAL)]
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def approval_execution(payload)
|
|
126
|
+
values = approval_object(payload, INCOMPLETE_APPROVAL)
|
|
127
|
+
DurableApprovalExecution.new(
|
|
128
|
+
id: optional_approval_text(values['id'], INCOMPLETE_APPROVAL), name: approval_text(values['name']),
|
|
129
|
+
status: optional_approval_text(values['status'], INCOMPLETE_APPROVAL)
|
|
130
|
+
)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def approval_decision(payload)
|
|
134
|
+
return if payload.nil?
|
|
135
|
+
|
|
136
|
+
values = approval_object(payload, INCOMPLETE_APPROVAL)
|
|
137
|
+
DurableApprovalDecision.new(
|
|
138
|
+
comment: approval_string(values['comment'], INCOMPLETE_APPROVAL),
|
|
139
|
+
decided_by: approval_decider(values['decided_by']),
|
|
140
|
+
decided_at: approval_time(values['decided_at'], INCOMPLETE_APPROVAL)
|
|
141
|
+
)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def approval_decider(payload)
|
|
145
|
+
return if payload.nil?
|
|
146
|
+
|
|
147
|
+
values = approval_object(payload, INCOMPLETE_APPROVAL)
|
|
148
|
+
DurableApprovalDecider.new(
|
|
149
|
+
id: approval_text(values['id']), email: approval_string(values['email'], INCOMPLETE_APPROVAL)
|
|
150
|
+
)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def approval_details(value)
|
|
154
|
+
Transport.json_value(value)
|
|
155
|
+
rescue TypeError
|
|
156
|
+
raise TypeError, INCOMPLETE_APPROVAL, cause: nil
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
private_constant :DurableApprovalResponses
|
|
160
|
+
|
|
161
|
+
# Builds approval statistics from transport payloads.
|
|
162
|
+
module DurableApprovalStatsResponses
|
|
163
|
+
include DurableApprovalFields
|
|
164
|
+
|
|
165
|
+
DAY = /\A\d{4}-\d{2}-\d{2}\z/
|
|
166
|
+
private_constant :DAY
|
|
167
|
+
|
|
168
|
+
private
|
|
169
|
+
|
|
170
|
+
def durable_approval_stats(payload)
|
|
171
|
+
values = approval_object(payload, INCOMPLETE_STATS)
|
|
172
|
+
from, to = approval_window(values)
|
|
173
|
+
rate, median, p90 = approval_timings(values)
|
|
174
|
+
functions, daily = approval_breakdown(values)
|
|
175
|
+
DurableApprovalStats.new(
|
|
176
|
+
from: from, to: to, counts: approval_counts(values['counts']), approval_rate: rate,
|
|
177
|
+
median_seconds_to_decision: median, p90_seconds_to_decision: p90, functions: functions,
|
|
178
|
+
other_functions: approval_counts(values['other_functions']), daily: daily
|
|
179
|
+
)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def approval_window(values)
|
|
183
|
+
[approval_time(values['from'], INCOMPLETE_STATS), approval_time(values['to'], INCOMPLETE_STATS)]
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def approval_timings(values)
|
|
187
|
+
[approval_number(values['approval_rate']), approval_number(values['median_seconds_to_decision']),
|
|
188
|
+
approval_number(values['p90_seconds_to_decision'])]
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def approval_breakdown(values)
|
|
192
|
+
[approval_list(values['functions']).map { |entry| approval_function_counts(entry) },
|
|
193
|
+
approval_list(values['daily']).map { |entry| approval_daily_counts(entry) }]
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def approval_counts(payload)
|
|
197
|
+
values = approval_object(payload, INCOMPLETE_STATS)
|
|
198
|
+
DurableApprovalCounts.new(
|
|
199
|
+
requested: approval_count(values['requested']), pending: approval_count(values['pending']),
|
|
200
|
+
approved: approval_count(values['approved']), denied: approval_count(values['denied']),
|
|
201
|
+
expired: approval_count(values['expired']), cancelled: approval_count(values['cancelled'])
|
|
202
|
+
)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def approval_function_counts(payload)
|
|
206
|
+
values = approval_object(payload, INCOMPLETE_STATS)
|
|
207
|
+
DurableApprovalFunctionCounts.new(
|
|
208
|
+
function: approval_function(values['function'], INCOMPLETE_STATS), counts: approval_counts(values['counts'])
|
|
209
|
+
)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def approval_daily_counts(payload)
|
|
213
|
+
values = approval_object(payload, INCOMPLETE_STATS)
|
|
214
|
+
date = approval_text(values['date'], INCOMPLETE_STATS)
|
|
215
|
+
valid = DAY.match?(date) && approval_time("#{date}T00:00:00Z", INCOMPLETE_STATS).strftime('%F') == date
|
|
216
|
+
raise TypeError, INCOMPLETE_STATS unless valid
|
|
217
|
+
|
|
218
|
+
DurableApprovalDailyCounts.new(date: date, counts: approval_counts(values['counts']))
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
private_constant :DurableApprovalStatsResponses
|
|
222
|
+
end
|