volcano-sdk-python 0.6.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (778) hide show
  1. volcano_sdk/__init__.py +91 -0
  2. volcano_sdk/_function_resolution.py +159 -0
  3. volcano_sdk/_generated/__init__.py +8 -0
  4. volcano_sdk/_generated/api/__init__.py +1 -0
  5. volcano_sdk/_generated/api/anon_keys/__init__.py +1 -0
  6. volcano_sdk/_generated/api/anon_keys/create_anon_key.py +192 -0
  7. volcano_sdk/_generated/api/anon_keys/get_anon_key.py +197 -0
  8. volcano_sdk/_generated/api/anon_keys/list_anon_keys.py +297 -0
  9. volcano_sdk/_generated/api/anon_keys/regenerate_anon_key.py +193 -0
  10. volcano_sdk/_generated/api/anon_keys/revoke_anon_key.py +216 -0
  11. volcano_sdk/_generated/api/anon_keys/set_default_anon_key.py +217 -0
  12. volcano_sdk/_generated/api/auth_admin/__init__.py +1 -0
  13. volcano_sdk/_generated/api/auth_admin/ban_auth_user.py +240 -0
  14. volcano_sdk/_generated/api/auth_admin/delete_all_user_sessions.py +132 -0
  15. volcano_sdk/_generated/api/auth_admin/delete_auth_user.py +127 -0
  16. volcano_sdk/_generated/api/auth_admin/delete_user_session.py +139 -0
  17. volcano_sdk/_generated/api/auth_admin/get_auth_insights.py +301 -0
  18. volcano_sdk/_generated/api/auth_admin/get_auth_user.py +185 -0
  19. volcano_sdk/_generated/api/auth_admin/list_auth_users.py +306 -0
  20. volcano_sdk/_generated/api/auth_admin/list_user_sessions.py +365 -0
  21. volcano_sdk/_generated/api/auth_admin/unban_auth_user.py +205 -0
  22. volcano_sdk/_generated/api/auth_configuration/__init__.py +1 -0
  23. volcano_sdk/_generated/api/auth_configuration/configure_auth_methods.py +143 -0
  24. volcano_sdk/_generated/api/auth_configuration/create_email_template.py +246 -0
  25. volcano_sdk/_generated/api/auth_configuration/delete_auth_page_layout.py +219 -0
  26. volcano_sdk/_generated/api/auth_configuration/delete_auth_page_theme.py +197 -0
  27. volcano_sdk/_generated/api/auth_configuration/delete_email_template.py +211 -0
  28. volcano_sdk/_generated/api/auth_configuration/get_auth_config.py +172 -0
  29. volcano_sdk/_generated/api/auth_configuration/get_auth_hosted_page.py +207 -0
  30. volcano_sdk/_generated/api/auth_configuration/get_auth_methods.py +184 -0
  31. volcano_sdk/_generated/api/auth_configuration/get_auth_page_appearance.py +201 -0
  32. volcano_sdk/_generated/api/auth_configuration/get_default_email_template.py +177 -0
  33. volcano_sdk/_generated/api/auth_configuration/get_default_email_templates.py +158 -0
  34. volcano_sdk/_generated/api/auth_configuration/get_email_template.py +191 -0
  35. volcano_sdk/_generated/api/auth_configuration/get_hosted_login_options.py +221 -0
  36. volcano_sdk/_generated/api/auth_configuration/hosted_login_check_email.py +231 -0
  37. volcano_sdk/_generated/api/auth_configuration/list_email_templates.py +180 -0
  38. volcano_sdk/_generated/api/auth_configuration/preview_auth_page.py +243 -0
  39. volcano_sdk/_generated/api/auth_configuration/render_auth_page_preview.py +228 -0
  40. volcano_sdk/_generated/api/auth_configuration/render_default_managed_auth_page.py +261 -0
  41. volcano_sdk/_generated/api/auth_configuration/render_managed_auth_page.py +215 -0
  42. volcano_sdk/_generated/api/auth_configuration/test_email_config.py +292 -0
  43. volcano_sdk/_generated/api/auth_configuration/update_auth_config.py +219 -0
  44. volcano_sdk/_generated/api/auth_configuration/update_auth_hosted_page.py +243 -0
  45. volcano_sdk/_generated/api/auth_configuration/update_auth_page_layout.py +242 -0
  46. volcano_sdk/_generated/api/auth_configuration/update_auth_page_theme.py +227 -0
  47. volcano_sdk/_generated/api/auth_configuration/update_email_template.py +239 -0
  48. volcano_sdk/_generated/api/authentication/__init__.py +1 -0
  49. volcano_sdk/_generated/api/authentication/auth_cancel_email_change.py +158 -0
  50. volcano_sdk/_generated/api/authentication/auth_confirm_email.py +198 -0
  51. volcano_sdk/_generated/api/authentication/auth_confirm_email_change.py +215 -0
  52. volcano_sdk/_generated/api/authentication/auth_convert_anonymous.py +222 -0
  53. volcano_sdk/_generated/api/authentication/auth_delete_all_my_sessions.py +166 -0
  54. volcano_sdk/_generated/api/authentication/auth_delete_my_session.py +195 -0
  55. volcano_sdk/_generated/api/authentication/auth_forgot_password.py +209 -0
  56. volcano_sdk/_generated/api/authentication/auth_get_my_sessions.py +397 -0
  57. volcano_sdk/_generated/api/authentication/auth_get_password_policy.py +181 -0
  58. volcano_sdk/_generated/api/authentication/auth_get_user.py +166 -0
  59. volcano_sdk/_generated/api/authentication/auth_list_identities.py +178 -0
  60. volcano_sdk/_generated/api/authentication/auth_list_methods.py +174 -0
  61. volcano_sdk/_generated/api/authentication/auth_logout.py +138 -0
  62. volcano_sdk/_generated/api/authentication/auth_promote_method.py +221 -0
  63. volcano_sdk/_generated/api/authentication/auth_refresh.py +235 -0
  64. volcano_sdk/_generated/api/authentication/auth_request_email_change.py +226 -0
  65. volcano_sdk/_generated/api/authentication/auth_resend_confirmation.py +210 -0
  66. volcano_sdk/_generated/api/authentication/auth_reset_password.py +206 -0
  67. volcano_sdk/_generated/api/authentication/auth_signin.py +222 -0
  68. volcano_sdk/_generated/api/authentication/auth_signup.py +254 -0
  69. volcano_sdk/_generated/api/authentication/auth_signup_anonymous.py +205 -0
  70. volcano_sdk/_generated/api/authentication/auth_unlink_identity.py +206 -0
  71. volcano_sdk/_generated/api/authentication/auth_update_user.py +211 -0
  72. volcano_sdk/_generated/api/database_backups/__init__.py +1 -0
  73. volcano_sdk/_generated/api/database_backups/create_database_backup.py +265 -0
  74. volcano_sdk/_generated/api/database_backups/create_database_restore.py +305 -0
  75. volcano_sdk/_generated/api/database_backups/delete_database_backup.py +247 -0
  76. volcano_sdk/_generated/api/database_backups/get_database_backup.py +235 -0
  77. volcano_sdk/_generated/api/database_backups/get_database_backup_schedule.py +226 -0
  78. volcano_sdk/_generated/api/database_backups/get_database_restore.py +232 -0
  79. volcano_sdk/_generated/api/database_backups/list_database_backups.py +242 -0
  80. volcano_sdk/_generated/api/database_backups/list_database_restores.py +223 -0
  81. volcano_sdk/_generated/api/database_backups/update_database_backup_schedule.py +272 -0
  82. volcano_sdk/_generated/api/database_branches/__init__.py +1 -0
  83. volcano_sdk/_generated/api/database_branches/create_database_branch.py +285 -0
  84. volcano_sdk/_generated/api/database_branches/delete_database_branch.py +249 -0
  85. volcano_sdk/_generated/api/database_branches/get_database_branch.py +225 -0
  86. volcano_sdk/_generated/api/database_branches/list_database_branches.py +224 -0
  87. volcano_sdk/_generated/api/database_branches/reset_database_branch.py +268 -0
  88. volcano_sdk/_generated/api/database_branches/reset_database_branch_password.py +252 -0
  89. volcano_sdk/_generated/api/database_branches/update_database_branch.py +267 -0
  90. volcano_sdk/_generated/api/database_queries/__init__.py +1 -0
  91. volcano_sdk/_generated/api/database_queries/query_database_branch_delete.py +295 -0
  92. volcano_sdk/_generated/api/database_queries/query_database_branch_insert.py +299 -0
  93. volcano_sdk/_generated/api/database_queries/query_database_branch_ping.py +276 -0
  94. volcano_sdk/_generated/api/database_queries/query_database_branch_select.py +315 -0
  95. volcano_sdk/_generated/api/database_queries/query_database_branch_update.py +303 -0
  96. volcano_sdk/_generated/api/database_queries/query_database_delete.py +259 -0
  97. volcano_sdk/_generated/api/database_queries/query_database_insert.py +263 -0
  98. volcano_sdk/_generated/api/database_queries/query_database_ping.py +240 -0
  99. volcano_sdk/_generated/api/database_queries/query_database_select.py +279 -0
  100. volcano_sdk/_generated/api/database_queries/query_database_update.py +267 -0
  101. volcano_sdk/_generated/api/databases/__init__.py +1 -0
  102. volcano_sdk/_generated/api/databases/create_database.py +236 -0
  103. volcano_sdk/_generated/api/databases/delete_database.py +247 -0
  104. volcano_sdk/_generated/api/databases/get_database.py +185 -0
  105. volcano_sdk/_generated/api/databases/get_database_stats.py +292 -0
  106. volcano_sdk/_generated/api/databases/get_project_database_queries.py +267 -0
  107. volcano_sdk/_generated/api/databases/list_database_regions.py +167 -0
  108. volcano_sdk/_generated/api/databases/list_databases.py +314 -0
  109. volcano_sdk/_generated/api/databases/list_postgres_versions.py +167 -0
  110. volcano_sdk/_generated/api/databases/reset_database_password.py +250 -0
  111. volcano_sdk/_generated/api/databases/update_database_type.py +268 -0
  112. volcano_sdk/_generated/api/frontends/__init__.py +1 -0
  113. volcano_sdk/_generated/api/frontends/create_frontend.py +369 -0
  114. volcano_sdk/_generated/api/frontends/create_frontend_custom_domain.py +278 -0
  115. volcano_sdk/_generated/api/frontends/delete_frontend.py +244 -0
  116. volcano_sdk/_generated/api/frontends/delete_frontend_custom_domain.py +217 -0
  117. volcano_sdk/_generated/api/frontends/get_frontend.py +221 -0
  118. volcano_sdk/_generated/api/frontends/get_frontend_custom_domain.py +234 -0
  119. volcano_sdk/_generated/api/frontends/get_frontend_usage_history.py +283 -0
  120. volcano_sdk/_generated/api/frontends/list_frontend_deployments.py +258 -0
  121. volcano_sdk/_generated/api/frontends/list_frontends.py +329 -0
  122. volcano_sdk/_generated/api/frontends/list_project_custom_domains.py +318 -0
  123. volcano_sdk/_generated/api/frontends/redeploy_frontend.py +267 -0
  124. volcano_sdk/_generated/api/functions/__init__.py +1 -0
  125. volcano_sdk/_generated/api/functions/create_function.py +320 -0
  126. volcano_sdk/_generated/api/functions/create_function_scheduler.py +225 -0
  127. volcano_sdk/_generated/api/functions/create_functions_batch.py +271 -0
  128. volcano_sdk/_generated/api/functions/delete_function.py +209 -0
  129. volcano_sdk/_generated/api/functions/delete_function_scheduler.py +130 -0
  130. volcano_sdk/_generated/api/functions/get_function.py +193 -0
  131. volcano_sdk/_generated/api/functions/get_function_scheduler.py +198 -0
  132. volcano_sdk/_generated/api/functions/invoke_function.py +385 -0
  133. volcano_sdk/_generated/api/functions/list_function_deployments.py +230 -0
  134. volcano_sdk/_generated/api/functions/list_function_regions.py +171 -0
  135. volcano_sdk/_generated/api/functions/list_function_runtimes.py +166 -0
  136. volcano_sdk/_generated/api/functions/list_function_schedulers.py +185 -0
  137. volcano_sdk/_generated/api/functions/list_functions.py +301 -0
  138. volcano_sdk/_generated/api/functions/list_project_schedulers.py +289 -0
  139. volcano_sdk/_generated/api/functions/resolve_function_for_invocation.py +264 -0
  140. volcano_sdk/_generated/api/functions/update_function.py +220 -0
  141. volcano_sdk/_generated/api/functions/update_function_scheduler.py +218 -0
  142. volcano_sdk/_generated/api/git_connections/__init__.py +1 -0
  143. volcano_sdk/_generated/api/git_connections/delete_git_connection.py +204 -0
  144. volcano_sdk/_generated/api/git_connections/git_connect_callback.py +247 -0
  145. volcano_sdk/_generated/api/git_connections/list_git_connections.py +172 -0
  146. volcano_sdk/_generated/api/git_connections/list_git_installation_repositories.py +237 -0
  147. volcano_sdk/_generated/api/git_connections/list_git_installations.py +224 -0
  148. volcano_sdk/_generated/api/git_connections/start_git_connect.py +250 -0
  149. volcano_sdk/_generated/api/locks/__init__.py +1 -0
  150. volcano_sdk/_generated/api/locks/acquire_project_lock.py +289 -0
  151. volcano_sdk/_generated/api/locks/force_release_project_lock.py +254 -0
  152. volcano_sdk/_generated/api/locks/get_project_lock.py +246 -0
  153. volcano_sdk/_generated/api/locks/release_project_lock.py +252 -0
  154. volcano_sdk/_generated/api/locks/renew_project_lock.py +285 -0
  155. volcano_sdk/_generated/api/logs/__init__.py +1 -0
  156. volcano_sdk/_generated/api/logs/get_project_log_activity.py +261 -0
  157. volcano_sdk/_generated/api/logs/search_project_logs.py +265 -0
  158. volcano_sdk/_generated/api/logs/stream_project_logs.py +345 -0
  159. volcano_sdk/_generated/api/o_auth_authentication/__init__.py +1 -0
  160. volcano_sdk/_generated/api/o_auth_authentication/auth_device_authorize.py +266 -0
  161. volcano_sdk/_generated/api/o_auth_authentication/auth_device_token.py +209 -0
  162. volcano_sdk/_generated/api/o_auth_authentication/auth_device_verify.py +230 -0
  163. volcano_sdk/_generated/api/o_auth_authentication/auth_link_o_auth_provider.py +272 -0
  164. volcano_sdk/_generated/api/o_auth_authentication/auth_list_o_auth_providers.py +166 -0
  165. volcano_sdk/_generated/api/o_auth_authentication/auth_o_auth_authorize.py +181 -0
  166. volcano_sdk/_generated/api/o_auth_authentication/auth_o_auth_callback.py +260 -0
  167. volcano_sdk/_generated/api/o_auth_authentication/auth_o_auth_exchange.py +210 -0
  168. volcano_sdk/_generated/api/o_auth_authentication/auth_platform_exchange.py +202 -0
  169. volcano_sdk/_generated/api/o_auth_authentication/auth_unlink_o_auth_provider.py +203 -0
  170. volcano_sdk/_generated/api/o_auth_authentication/call_o_auth_provider_api.py +309 -0
  171. volcano_sdk/_generated/api/o_auth_authentication/get_o_auth_provider_token.py +200 -0
  172. volcano_sdk/_generated/api/o_auth_authentication/refresh_o_auth_provider_token.py +207 -0
  173. volcano_sdk/_generated/api/o_auth_configuration/__init__.py +1 -0
  174. volcano_sdk/_generated/api/o_auth_configuration/create_o_auth_config.py +204 -0
  175. volcano_sdk/_generated/api/o_auth_configuration/delete_o_auth_config.py +142 -0
  176. volcano_sdk/_generated/api/o_auth_configuration/get_o_auth_config.py +209 -0
  177. volcano_sdk/_generated/api/o_auth_configuration/list_available_o_auth_providers.py +180 -0
  178. volcano_sdk/_generated/api/o_auth_configuration/list_o_auth_configs.py +180 -0
  179. volcano_sdk/_generated/api/o_auth_configuration/update_o_auth_config.py +230 -0
  180. volcano_sdk/_generated/api/project_imports/__init__.py +1 -0
  181. volcano_sdk/_generated/api/project_imports/complete_import_connect.py +322 -0
  182. volcano_sdk/_generated/api/project_imports/delete_import_connection.py +211 -0
  183. volcano_sdk/_generated/api/project_imports/get_project_import_run.py +216 -0
  184. volcano_sdk/_generated/api/project_imports/list_import_connections.py +165 -0
  185. volcano_sdk/_generated/api/project_imports/list_import_sources.py +261 -0
  186. volcano_sdk/_generated/api/project_imports/preflight_project_import.py +258 -0
  187. volcano_sdk/_generated/api/project_imports/start_import_connect.py +246 -0
  188. volcano_sdk/_generated/api/project_imports/start_project_import.py +284 -0
  189. volcano_sdk/_generated/api/projects/__init__.py +1 -0
  190. volcano_sdk/_generated/api/projects/apply_project_config.py +342 -0
  191. volcano_sdk/_generated/api/projects/cancel_project_source_export.py +231 -0
  192. volcano_sdk/_generated/api/projects/connect_project_git.py +278 -0
  193. volcano_sdk/_generated/api/projects/create_project.py +205 -0
  194. volcano_sdk/_generated/api/projects/delete_project.py +196 -0
  195. volcano_sdk/_generated/api/projects/delete_project_logo.py +213 -0
  196. volcano_sdk/_generated/api/projects/disconnect_project_git.py +204 -0
  197. volcano_sdk/_generated/api/projects/export_project_source.py +351 -0
  198. volcano_sdk/_generated/api/projects/get_project.py +180 -0
  199. volcano_sdk/_generated/api/projects/get_project_config.py +251 -0
  200. volcano_sdk/_generated/api/projects/get_project_git_connection.py +201 -0
  201. volcano_sdk/_generated/api/projects/get_project_git_deploy_settings.py +201 -0
  202. volcano_sdk/_generated/api/projects/get_project_health.py +221 -0
  203. volcano_sdk/_generated/api/projects/get_project_logo.py +196 -0
  204. volcano_sdk/_generated/api/projects/get_project_source_export.py +276 -0
  205. volcano_sdk/_generated/api/projects/get_project_usage.py +199 -0
  206. volcano_sdk/_generated/api/projects/list_deployments.py +558 -0
  207. volcano_sdk/_generated/api/projects/list_project_deployments.py +358 -0
  208. volcano_sdk/_generated/api/projects/list_projects.py +332 -0
  209. volcano_sdk/_generated/api/projects/query_project_metrics.py +251 -0
  210. volcano_sdk/_generated/api/projects/set_project_git_production_branch.py +291 -0
  211. volcano_sdk/_generated/api/projects/summarize_project_deployments.py +288 -0
  212. volcano_sdk/_generated/api/projects/update_project.py +221 -0
  213. volcano_sdk/_generated/api/projects/update_project_git_deploy_settings.py +287 -0
  214. volcano_sdk/_generated/api/projects/upload_project_logo.py +248 -0
  215. volcano_sdk/_generated/api/realtime/__init__.py +1 -0
  216. volcano_sdk/_generated/api/realtime/get_realtime_config.py +195 -0
  217. volcano_sdk/_generated/api/realtime/get_realtime_stats.py +188 -0
  218. volcano_sdk/_generated/api/realtime/update_realtime_config.py +219 -0
  219. volcano_sdk/_generated/api/service_keys/__init__.py +1 -0
  220. volcano_sdk/_generated/api/service_keys/create_service_key.py +216 -0
  221. volcano_sdk/_generated/api/service_keys/delete_service_key.py +129 -0
  222. volcano_sdk/_generated/api/service_keys/get_service_key.py +197 -0
  223. volcano_sdk/_generated/api/service_keys/list_service_keys.py +285 -0
  224. volcano_sdk/_generated/api/service_keys/regenerate_service_key.py +201 -0
  225. volcano_sdk/_generated/api/storage_admin/__init__.py +1 -0
  226. volcano_sdk/_generated/api/storage_admin/get_storage_stats.py +180 -0
  227. volcano_sdk/_generated/api/storage_admin/list_storage_objects_admin.py +299 -0
  228. volcano_sdk/_generated/api/storage_buckets/__init__.py +1 -0
  229. volcano_sdk/_generated/api/storage_buckets/create_storage_bucket.py +196 -0
  230. volcano_sdk/_generated/api/storage_buckets/delete_storage_bucket.py +123 -0
  231. volcano_sdk/_generated/api/storage_buckets/get_storage_bucket.py +189 -0
  232. volcano_sdk/_generated/api/storage_buckets/list_storage_buckets.py +297 -0
  233. volcano_sdk/_generated/api/storage_buckets/update_storage_bucket.py +205 -0
  234. volcano_sdk/_generated/api/storage_objects/__init__.py +1 -0
  235. volcano_sdk/_generated/api/storage_objects/copy_storage_object.py +203 -0
  236. volcano_sdk/_generated/api/storage_objects/delete_storage_object.py +252 -0
  237. volcano_sdk/_generated/api/storage_objects/download_public_file.py +302 -0
  238. volcano_sdk/_generated/api/storage_objects/download_storage_object.py +283 -0
  239. volcano_sdk/_generated/api/storage_objects/list_storage_objects.py +235 -0
  240. volcano_sdk/_generated/api/storage_objects/move_storage_object.py +203 -0
  241. volcano_sdk/_generated/api/storage_objects/update_storage_object_visibility.py +244 -0
  242. volcano_sdk/_generated/api/storage_objects/upload_part.py +287 -0
  243. volcano_sdk/_generated/api/storage_objects/upload_storage_object.py +380 -0
  244. volcano_sdk/_generated/api/storage_policies/__init__.py +1 -0
  245. volcano_sdk/_generated/api/storage_policies/create_storage_policy.py +205 -0
  246. volcano_sdk/_generated/api/storage_policies/delete_storage_policy.py +130 -0
  247. volcano_sdk/_generated/api/storage_policies/list_storage_policies.py +190 -0
  248. volcano_sdk/_generated/api/system/__init__.py +1 -0
  249. volcano_sdk/_generated/api/system/health_check.py +153 -0
  250. volcano_sdk/_generated/api/variables/__init__.py +1 -0
  251. volcano_sdk/_generated/api/variables/create_variable.py +212 -0
  252. volcano_sdk/_generated/api/variables/delete_variable.py +201 -0
  253. volcano_sdk/_generated/api/variables/get_variable.py +201 -0
  254. volcano_sdk/_generated/api/variables/list_variables.py +285 -0
  255. volcano_sdk/_generated/api/variables/update_variable.py +225 -0
  256. volcano_sdk/_generated/client.py +271 -0
  257. volcano_sdk/_generated/errors.py +14 -0
  258. volcano_sdk/_generated/models/__init__.py +1003 -0
  259. volcano_sdk/_generated/models/anon_key.py +167 -0
  260. volcano_sdk/_generated/models/auth_cancel_email_change_response_200.py +78 -0
  261. volcano_sdk/_generated/models/auth_config.py +559 -0
  262. volcano_sdk/_generated/models/auth_config_allowed_email_domains_mode.py +10 -0
  263. volcano_sdk/_generated/models/auth_confirm_email_body.py +76 -0
  264. volcano_sdk/_generated/models/auth_confirm_email_change_body.py +76 -0
  265. volcano_sdk/_generated/models/auth_confirm_email_change_response_200.py +102 -0
  266. volcano_sdk/_generated/models/auth_confirm_email_response_200.py +92 -0
  267. volcano_sdk/_generated/models/auth_confirm_email_response_200_message.py +10 -0
  268. volcano_sdk/_generated/models/auth_convert_anonymous_body.py +110 -0
  269. volcano_sdk/_generated/models/auth_convert_anonymous_body_user_metadata.py +65 -0
  270. volcano_sdk/_generated/models/auth_convert_anonymous_response_200.py +93 -0
  271. volcano_sdk/_generated/models/auth_device_authorize_body.py +76 -0
  272. volcano_sdk/_generated/models/auth_device_token_body.py +98 -0
  273. volcano_sdk/_generated/models/auth_device_token_body_grant_type.py +10 -0
  274. volcano_sdk/_generated/models/auth_device_verify_body.py +100 -0
  275. volcano_sdk/_generated/models/auth_device_verify_body_action.py +10 -0
  276. volcano_sdk/_generated/models/auth_device_verify_response_200.py +87 -0
  277. volcano_sdk/_generated/models/auth_forgot_password_body.py +76 -0
  278. volcano_sdk/_generated/models/auth_forgot_password_response_200.py +78 -0
  279. volcano_sdk/_generated/models/auth_get_my_sessions_response_200.py +190 -0
  280. volcano_sdk/_generated/models/auth_get_my_sessions_sort.py +10 -0
  281. volcano_sdk/_generated/models/auth_get_my_sessions_status.py +10 -0
  282. volcano_sdk/_generated/models/auth_get_user_response_200.py +93 -0
  283. volcano_sdk/_generated/models/auth_hosted_page.py +188 -0
  284. volcano_sdk/_generated/models/auth_hosted_page_defaults.py +87 -0
  285. volcano_sdk/_generated/models/auth_hosted_page_response.py +133 -0
  286. volcano_sdk/_generated/models/auth_hosted_page_runtime.py +97 -0
  287. volcano_sdk/_generated/models/auth_identities_response.py +94 -0
  288. volcano_sdk/_generated/models/auth_identity.py +119 -0
  289. volcano_sdk/_generated/models/auth_insights_interval.py +10 -0
  290. volcano_sdk/_generated/models/auth_insights_response.py +128 -0
  291. volcano_sdk/_generated/models/auth_insights_series_point.py +87 -0
  292. volcano_sdk/_generated/models/auth_insights_summary.py +67 -0
  293. volcano_sdk/_generated/models/auth_insights_window.py +87 -0
  294. volcano_sdk/_generated/models/auth_link_o_auth_provider_provider.py +10 -0
  295. volcano_sdk/_generated/models/auth_link_o_auth_provider_response_200.py +78 -0
  296. volcano_sdk/_generated/models/auth_link_o_auth_provider_response_mode.py +10 -0
  297. volcano_sdk/_generated/models/auth_list_o_auth_providers_response_200.py +100 -0
  298. volcano_sdk/_generated/models/auth_list_o_auth_providers_response_200_providers_item.py +118 -0
  299. volcano_sdk/_generated/models/auth_logout_body.py +101 -0
  300. volcano_sdk/_generated/models/auth_logout_body_session_mode.py +10 -0
  301. volcano_sdk/_generated/models/auth_method_summary.py +173 -0
  302. volcano_sdk/_generated/models/auth_method_summary_type.py +10 -0
  303. volcano_sdk/_generated/models/auth_methods_response.py +94 -0
  304. volcano_sdk/_generated/models/auth_o_auth_authorize_provider.py +10 -0
  305. volcano_sdk/_generated/models/auth_o_auth_authorize_response_mode.py +10 -0
  306. volcano_sdk/_generated/models/auth_o_auth_callback_provider.py +10 -0
  307. volcano_sdk/_generated/models/auth_o_auth_exchange_body.py +84 -0
  308. volcano_sdk/_generated/models/auth_page_appearance_defaults.py +97 -0
  309. volcano_sdk/_generated/models/auth_page_appearance_options.py +207 -0
  310. volcano_sdk/_generated/models/auth_page_appearance_response.py +148 -0
  311. volcano_sdk/_generated/models/auth_page_appearance_response_layouts.py +78 -0
  312. volcano_sdk/_generated/models/auth_page_appearance_response_parked.py +66 -0
  313. volcano_sdk/_generated/models/auth_page_density.py +10 -0
  314. volcano_sdk/_generated/models/auth_page_font.py +10 -0
  315. volcano_sdk/_generated/models/auth_page_layout.py +10 -0
  316. volcano_sdk/_generated/models/auth_page_radius.py +10 -0
  317. volcano_sdk/_generated/models/auth_page_scale.py +10 -0
  318. volcano_sdk/_generated/models/auth_page_theme.py +131 -0
  319. volcano_sdk/_generated/models/auth_page_theme_colors.py +90 -0
  320. volcano_sdk/_generated/models/auth_page_theme_version.py +10 -0
  321. volcano_sdk/_generated/models/auth_password_policy.py +116 -0
  322. volcano_sdk/_generated/models/auth_platform_exchange_body.py +76 -0
  323. volcano_sdk/_generated/models/auth_refresh_body.py +101 -0
  324. volcano_sdk/_generated/models/auth_refresh_body_session_mode.py +10 -0
  325. volcano_sdk/_generated/models/auth_request_email_change_body.py +76 -0
  326. volcano_sdk/_generated/models/auth_request_email_change_response_200.py +87 -0
  327. volcano_sdk/_generated/models/auth_resend_confirmation_body.py +76 -0
  328. volcano_sdk/_generated/models/auth_resend_confirmation_response_200.py +78 -0
  329. volcano_sdk/_generated/models/auth_reset_password_body.py +85 -0
  330. volcano_sdk/_generated/models/auth_reset_password_response_200.py +78 -0
  331. volcano_sdk/_generated/models/auth_session.py +239 -0
  332. volcano_sdk/_generated/models/auth_session_provider.py +10 -0
  333. volcano_sdk/_generated/models/auth_signin_body.py +108 -0
  334. volcano_sdk/_generated/models/auth_signin_body_session_mode.py +10 -0
  335. volcano_sdk/_generated/models/auth_signup_anonymous_body.py +94 -0
  336. volcano_sdk/_generated/models/auth_signup_anonymous_body_user_metadata.py +69 -0
  337. volcano_sdk/_generated/models/auth_signup_body.py +110 -0
  338. volcano_sdk/_generated/models/auth_signup_body_user_metadata.py +65 -0
  339. volcano_sdk/_generated/models/auth_signup_response.py +90 -0
  340. volcano_sdk/_generated/models/auth_token_response.py +119 -0
  341. volcano_sdk/_generated/models/auth_unlink_o_auth_provider_provider.py +10 -0
  342. volcano_sdk/_generated/models/auth_update_user_body.py +105 -0
  343. volcano_sdk/_generated/models/auth_update_user_body_user_metadata.py +68 -0
  344. volcano_sdk/_generated/models/auth_update_user_response_200.py +93 -0
  345. volcano_sdk/_generated/models/auth_user.py +276 -0
  346. volcano_sdk/_generated/models/auth_user_app_metadata.py +66 -0
  347. volcano_sdk/_generated/models/auth_user_status.py +10 -0
  348. volcano_sdk/_generated/models/auth_user_user_metadata.py +66 -0
  349. volcano_sdk/_generated/models/ban_auth_user_body.py +91 -0
  350. volcano_sdk/_generated/models/ban_user_response.py +146 -0
  351. volcano_sdk/_generated/models/ban_user_response_status.py +10 -0
  352. volcano_sdk/_generated/models/batch_function_deploy_failure.py +128 -0
  353. volcano_sdk/_generated/models/batch_function_deploy_failure_operation.py +10 -0
  354. volcano_sdk/_generated/models/batch_function_deploy_response.py +138 -0
  355. volcano_sdk/_generated/models/call_o_auth_provider_api_body.py +126 -0
  356. volcano_sdk/_generated/models/call_o_auth_provider_api_body_body.py +66 -0
  357. volcano_sdk/_generated/models/call_o_auth_provider_api_body_method.py +10 -0
  358. volcano_sdk/_generated/models/call_o_auth_provider_api_provider.py +10 -0
  359. volcano_sdk/_generated/models/call_o_auth_provider_api_response_200.py +107 -0
  360. volcano_sdk/_generated/models/call_o_auth_provider_api_response_200_provider.py +10 -0
  361. volcano_sdk/_generated/models/complete_upload_session_response.py +94 -0
  362. volcano_sdk/_generated/models/configure_auth_methods_body.py +118 -0
  363. volcano_sdk/_generated/models/configure_auth_methods_body_oauth_providers_item.py +87 -0
  364. volcano_sdk/_generated/models/connect_project_git_request.py +137 -0
  365. volcano_sdk/_generated/models/create_anon_key_body.py +112 -0
  366. volcano_sdk/_generated/models/create_anon_key_body_permissions_item.py +10 -0
  367. volcano_sdk/_generated/models/create_database_backup_request.py +78 -0
  368. volcano_sdk/_generated/models/create_database_branch_request.py +88 -0
  369. volcano_sdk/_generated/models/create_database_request.py +134 -0
  370. volcano_sdk/_generated/models/create_database_request_database_type.py +10 -0
  371. volcano_sdk/_generated/models/create_database_request_pg_version.py +10 -0
  372. volcano_sdk/_generated/models/create_database_request_region.py +10 -0
  373. volcano_sdk/_generated/models/create_database_restore_request.py +109 -0
  374. volcano_sdk/_generated/models/create_email_template_request.py +109 -0
  375. volcano_sdk/_generated/models/create_email_template_request_template_type.py +10 -0
  376. volcano_sdk/_generated/models/create_frontend_body.py +159 -0
  377. volcano_sdk/_generated/models/create_frontend_body_framework.py +10 -0
  378. volcano_sdk/_generated/models/create_frontend_custom_domain_request.py +92 -0
  379. volcano_sdk/_generated/models/create_function_body.py +243 -0
  380. volcano_sdk/_generated/models/create_function_body_runtime.py +10 -0
  381. volcano_sdk/_generated/models/create_function_scheduler_request.py +139 -0
  382. volcano_sdk/_generated/models/create_function_scheduler_request_payload.py +65 -0
  383. volcano_sdk/_generated/models/create_functions_batch_body.py +125 -0
  384. volcano_sdk/_generated/models/create_o_auth_config_request.py +128 -0
  385. volcano_sdk/_generated/models/create_o_auth_config_request_provider.py +10 -0
  386. volcano_sdk/_generated/models/create_project_request.py +109 -0
  387. volcano_sdk/_generated/models/create_service_key_body.py +100 -0
  388. volcano_sdk/_generated/models/create_storage_bucket_request.py +101 -0
  389. volcano_sdk/_generated/models/create_storage_policy_request.py +98 -0
  390. volcano_sdk/_generated/models/create_storage_policy_request_operation.py +10 -0
  391. volcano_sdk/_generated/models/create_upload_session_request.py +103 -0
  392. volcano_sdk/_generated/models/create_upload_session_response.py +119 -0
  393. volcano_sdk/_generated/models/create_variable_request.py +84 -0
  394. volcano_sdk/_generated/models/database.py +255 -0
  395. volcano_sdk/_generated/models/database_backup.py +142 -0
  396. volcano_sdk/_generated/models/database_backup_list.py +123 -0
  397. volcano_sdk/_generated/models/database_backup_schedule.py +96 -0
  398. volcano_sdk/_generated/models/database_backup_schedule_entry.py +114 -0
  399. volcano_sdk/_generated/models/database_backup_schedule_entry_frequency.py +10 -0
  400. volcano_sdk/_generated/models/database_backup_source.py +10 -0
  401. volcano_sdk/_generated/models/database_branch.py +235 -0
  402. volcano_sdk/_generated/models/database_branch_list.py +94 -0
  403. volcano_sdk/_generated/models/database_branch_status.py +10 -0
  404. volcano_sdk/_generated/models/database_branch_storage.py +99 -0
  405. volcano_sdk/_generated/models/database_database_type.py +10 -0
  406. volcano_sdk/_generated/models/database_delete_request.py +103 -0
  407. volcano_sdk/_generated/models/database_insert_request.py +93 -0
  408. volcano_sdk/_generated/models/database_insert_request_values.py +69 -0
  409. volcano_sdk/_generated/models/database_query_filter.py +142 -0
  410. volcano_sdk/_generated/models/database_query_filter_operator.py +10 -0
  411. volcano_sdk/_generated/models/database_query_order.py +96 -0
  412. volcano_sdk/_generated/models/database_query_performance_database.py +88 -0
  413. volcano_sdk/_generated/models/database_query_performance_item.py +156 -0
  414. volcano_sdk/_generated/models/database_query_performance_response.py +94 -0
  415. volcano_sdk/_generated/models/database_query_result.py +111 -0
  416. volcano_sdk/_generated/models/database_query_result_data_item.py +65 -0
  417. volcano_sdk/_generated/models/database_restore.py +221 -0
  418. volcano_sdk/_generated/models/database_restore_kind.py +10 -0
  419. volcano_sdk/_generated/models/database_restore_list.py +94 -0
  420. volcano_sdk/_generated/models/database_restore_status.py +10 -0
  421. volcano_sdk/_generated/models/database_restore_window.py +117 -0
  422. volcano_sdk/_generated/models/database_select_request.py +171 -0
  423. volcano_sdk/_generated/models/database_stats.py +211 -0
  424. volcano_sdk/_generated/models/database_stats_granularity.py +10 -0
  425. volcano_sdk/_generated/models/database_status.py +10 -0
  426. volcano_sdk/_generated/models/database_update_request.py +120 -0
  427. volcano_sdk/_generated/models/database_update_request_values.py +69 -0
  428. volcano_sdk/_generated/models/delete_database_backup_response_200.py +84 -0
  429. volcano_sdk/_generated/models/delete_database_branch_response_202.py +84 -0
  430. volcano_sdk/_generated/models/delete_database_response_202.py +87 -0
  431. volcano_sdk/_generated/models/delete_email_template_type.py +10 -0
  432. volcano_sdk/_generated/models/delete_o_auth_config_provider.py +10 -0
  433. volcano_sdk/_generated/models/deployment_phase.py +145 -0
  434. volcano_sdk/_generated/models/deployment_phase_name.py +10 -0
  435. volcano_sdk/_generated/models/deployment_phase_status.py +10 -0
  436. volcano_sdk/_generated/models/deployment_progress.py +168 -0
  437. volcano_sdk/_generated/models/deployment_progress_current_phase.py +10 -0
  438. volcano_sdk/_generated/models/deployment_reference.py +81 -0
  439. volcano_sdk/_generated/models/device_authorization_response.py +122 -0
  440. volcano_sdk/_generated/models/email_template.py +186 -0
  441. volcano_sdk/_generated/models/email_template_template_type.py +10 -0
  442. volcano_sdk/_generated/models/error.py +86 -0
  443. volcano_sdk/_generated/models/export_project_source_request.py +58 -0
  444. volcano_sdk/_generated/models/frontend.py +293 -0
  445. volcano_sdk/_generated/models/frontend_custom_domain_response.py +203 -0
  446. volcano_sdk/_generated/models/frontend_custom_domain_response_domain_status.py +10 -0
  447. volcano_sdk/_generated/models/frontend_custom_domain_response_tls_mode.py +10 -0
  448. volcano_sdk/_generated/models/frontend_custom_domain_response_verification_status.py +10 -0
  449. volcano_sdk/_generated/models/frontend_custom_domain_status.py +10 -0
  450. volcano_sdk/_generated/models/frontend_custom_domain_tls_config.py +108 -0
  451. volcano_sdk/_generated/models/frontend_custom_domain_tls_config_mode.py +10 -0
  452. volcano_sdk/_generated/models/frontend_deployment.py +304 -0
  453. volcano_sdk/_generated/models/frontend_deployment_deploy_source.py +10 -0
  454. volcano_sdk/_generated/models/frontend_deployment_operation.py +10 -0
  455. volcano_sdk/_generated/models/frontend_deployment_status.py +10 -0
  456. volcano_sdk/_generated/models/frontend_domain_routing_record.py +98 -0
  457. volcano_sdk/_generated/models/frontend_domain_routing_record_record_type.py +10 -0
  458. volcano_sdk/_generated/models/frontend_domain_verification_record.py +92 -0
  459. volcano_sdk/_generated/models/frontend_framework.py +10 -0
  460. volcano_sdk/_generated/models/frontend_status.py +10 -0
  461. volcano_sdk/_generated/models/frontend_usage_daily_entry.py +107 -0
  462. volcano_sdk/_generated/models/frontend_usage_data.py +112 -0
  463. volcano_sdk/_generated/models/frontend_usage_history_response.py +139 -0
  464. volcano_sdk/_generated/models/function.py +341 -0
  465. volcano_sdk/_generated/models/function_deployment.py +313 -0
  466. volcano_sdk/_generated/models/function_deployment_deploy_source.py +10 -0
  467. volcano_sdk/_generated/models/function_deployment_operation.py +10 -0
  468. volcano_sdk/_generated/models/function_deployment_status.py +10 -0
  469. volcano_sdk/_generated/models/function_http_auth_mode.py +10 -0
  470. volcano_sdk/_generated/models/function_invocation_mode.py +10 -0
  471. volcano_sdk/_generated/models/function_invocation_request.py +106 -0
  472. volcano_sdk/_generated/models/function_invocation_request_payload.py +79 -0
  473. volcano_sdk/_generated/models/function_invocation_response.py +66 -0
  474. volcano_sdk/_generated/models/function_openapi_spec_type_0.py +66 -0
  475. volcano_sdk/_generated/models/function_region.py +92 -0
  476. volcano_sdk/_generated/models/function_runtime_deployment.py +109 -0
  477. volcano_sdk/_generated/models/function_runtime_option.py +108 -0
  478. volcano_sdk/_generated/models/function_runtimes_response.py +94 -0
  479. volcano_sdk/_generated/models/function_scheduler.py +338 -0
  480. volcano_sdk/_generated/models/function_scheduler_list_response.py +146 -0
  481. volcano_sdk/_generated/models/function_scheduler_payload.py +65 -0
  482. volcano_sdk/_generated/models/function_scheduler_schedule_kind.py +10 -0
  483. volcano_sdk/_generated/models/function_status.py +10 -0
  484. volcano_sdk/_generated/models/get_auth_methods_response_200.py +158 -0
  485. volcano_sdk/_generated/models/get_auth_methods_response_200_anonymous.py +96 -0
  486. volcano_sdk/_generated/models/get_auth_methods_response_200_email_password.py +96 -0
  487. volcano_sdk/_generated/models/get_auth_methods_response_200_oauth_providers_item.py +129 -0
  488. volcano_sdk/_generated/models/get_database_stats_granularity.py +10 -0
  489. volcano_sdk/_generated/models/get_default_email_template_type.py +10 -0
  490. volcano_sdk/_generated/models/get_default_email_templates_response_200.py +100 -0
  491. volcano_sdk/_generated/models/get_email_template_type.py +10 -0
  492. volcano_sdk/_generated/models/get_o_auth_config_provider.py +10 -0
  493. volcano_sdk/_generated/models/get_o_auth_provider_token_provider.py +10 -0
  494. volcano_sdk/_generated/models/get_o_auth_provider_token_response_200.py +96 -0
  495. volcano_sdk/_generated/models/get_project_config_format.py +10 -0
  496. volcano_sdk/_generated/models/git_connect_start_response.py +76 -0
  497. volcano_sdk/_generated/models/git_connection.py +147 -0
  498. volcano_sdk/_generated/models/git_connections_response.py +94 -0
  499. volcano_sdk/_generated/models/git_installation.py +100 -0
  500. volcano_sdk/_generated/models/git_installations_response.py +94 -0
  501. volcano_sdk/_generated/models/git_repositories_response.py +94 -0
  502. volcano_sdk/_generated/models/git_repository.py +108 -0
  503. volcano_sdk/_generated/models/hosted_auth_page_type.py +10 -0
  504. volcano_sdk/_generated/models/hosted_login_email_check_request.py +76 -0
  505. volcano_sdk/_generated/models/hosted_login_email_check_response.py +78 -0
  506. volcano_sdk/_generated/models/hosted_login_options_response.py +120 -0
  507. volcano_sdk/_generated/models/hosted_renderable_page_type.py +10 -0
  508. volcano_sdk/_generated/models/import_connect_start_response.py +76 -0
  509. volcano_sdk/_generated/models/import_connection.py +205 -0
  510. volcano_sdk/_generated/models/import_connections_response.py +94 -0
  511. volcano_sdk/_generated/models/import_provider.py +10 -0
  512. volcano_sdk/_generated/models/import_source.py +100 -0
  513. volcano_sdk/_generated/models/import_sources_response.py +94 -0
  514. volcano_sdk/_generated/models/list_anon_keys_response_200.py +137 -0
  515. volcano_sdk/_generated/models/list_auth_users_status.py +10 -0
  516. volcano_sdk/_generated/models/list_available_o_auth_providers_response_200.py +100 -0
  517. volcano_sdk/_generated/models/list_available_o_auth_providers_response_200_providers_item.py +102 -0
  518. volcano_sdk/_generated/models/list_database_regions_response_200_item.py +87 -0
  519. volcano_sdk/_generated/models/list_databases_status.py +10 -0
  520. volcano_sdk/_generated/models/list_deployments_operation.py +10 -0
  521. volcano_sdk/_generated/models/list_deployments_order.py +10 -0
  522. volcano_sdk/_generated/models/list_deployments_resource_type.py +10 -0
  523. volcano_sdk/_generated/models/list_deployments_status.py +10 -0
  524. volcano_sdk/_generated/models/list_email_templates_response_200.py +100 -0
  525. volcano_sdk/_generated/models/list_o_auth_configs_response_200.py +100 -0
  526. volcano_sdk/_generated/models/list_postgres_versions_response_200_item.py +105 -0
  527. volcano_sdk/_generated/models/list_project_deployments_resource_type.py +10 -0
  528. volcano_sdk/_generated/models/list_projects_include_item.py +10 -0
  529. volcano_sdk/_generated/models/list_storage_objects_admin_response_200.py +155 -0
  530. volcano_sdk/_generated/models/list_user_sessions_response_200.py +190 -0
  531. volcano_sdk/_generated/models/list_user_sessions_sort.py +10 -0
  532. volcano_sdk/_generated/models/list_user_sessions_status.py +10 -0
  533. volcano_sdk/_generated/models/live_log_level.py +10 -0
  534. volcano_sdk/_generated/models/log_activity_bucket.py +116 -0
  535. volcano_sdk/_generated/models/log_activity_bucket_counts.py +113 -0
  536. volcano_sdk/_generated/models/log_activity_bucket_counts_levels.py +66 -0
  537. volcano_sdk/_generated/models/log_activity_bucket_counts_regions.py +66 -0
  538. volcano_sdk/_generated/models/log_activity_bucket_counts_resource_ids.py +66 -0
  539. volcano_sdk/_generated/models/log_activity_request.py +168 -0
  540. volcano_sdk/_generated/models/log_activity_response.py +103 -0
  541. volcano_sdk/_generated/models/log_database_request_resource.py +94 -0
  542. volcano_sdk/_generated/models/log_database_request_resource_type.py +10 -0
  543. volcano_sdk/_generated/models/log_deployment.py +105 -0
  544. volcano_sdk/_generated/models/log_deployment_request_selector.py +81 -0
  545. volcano_sdk/_generated/models/log_deployment_stage.py +10 -0
  546. volcano_sdk/_generated/models/log_event.py +222 -0
  547. volcano_sdk/_generated/models/log_event_body_type_1.py +65 -0
  548. volcano_sdk/_generated/models/log_frontend_request_resource.py +117 -0
  549. volcano_sdk/_generated/models/log_frontend_request_resource_type.py +10 -0
  550. volcano_sdk/_generated/models/log_function_request_resource.py +117 -0
  551. volcano_sdk/_generated/models/log_function_request_resource_type.py +10 -0
  552. volcano_sdk/_generated/models/log_resource.py +105 -0
  553. volcano_sdk/_generated/models/log_resource_type.py +10 -0
  554. volcano_sdk/_generated/models/log_search_event.py +212 -0
  555. volcano_sdk/_generated/models/log_search_request.py +177 -0
  556. volcano_sdk/_generated/models/log_search_response.py +121 -0
  557. volcano_sdk/_generated/models/log_stream_request.py +148 -0
  558. volcano_sdk/_generated/models/metric_usage_data.py +148 -0
  559. volcano_sdk/_generated/models/o_auth_config.py +201 -0
  560. volcano_sdk/_generated/models/o_auth_config_provider.py +10 -0
  561. volcano_sdk/_generated/models/o_auth_error_response.py +86 -0
  562. volcano_sdk/_generated/models/paginated_auth_users.py +136 -0
  563. volcano_sdk/_generated/models/paginated_databases.py +155 -0
  564. volcano_sdk/_generated/models/paginated_frontend_deployments.py +136 -0
  565. volcano_sdk/_generated/models/paginated_frontends.py +155 -0
  566. volcano_sdk/_generated/models/paginated_function_deployments.py +136 -0
  567. volcano_sdk/_generated/models/paginated_functions.py +155 -0
  568. volcano_sdk/_generated/models/paginated_project_custom_domains.py +136 -0
  569. volcano_sdk/_generated/models/paginated_project_deployments.py +159 -0
  570. volcano_sdk/_generated/models/paginated_projects.py +218 -0
  571. volcano_sdk/_generated/models/paginated_projects_status.py +10 -0
  572. volcano_sdk/_generated/models/paginated_service_keys.py +155 -0
  573. volcano_sdk/_generated/models/paginated_storage_buckets.py +140 -0
  574. volcano_sdk/_generated/models/paginated_variables.py +155 -0
  575. volcano_sdk/_generated/models/platform_exchange_response.py +109 -0
  576. volcano_sdk/_generated/models/preview_auth_page_request.py +89 -0
  577. volcano_sdk/_generated/models/preview_auth_page_response.py +89 -0
  578. volcano_sdk/_generated/models/project.py +255 -0
  579. volcano_sdk/_generated/models/project_config.py +288 -0
  580. volcano_sdk/_generated/models/project_config_apply_result.py +170 -0
  581. volcano_sdk/_generated/models/project_config_apply_result_entry.py +118 -0
  582. volcano_sdk/_generated/models/project_config_apply_result_entry_action.py +10 -0
  583. volcano_sdk/_generated/models/project_config_apply_summary.py +124 -0
  584. volcano_sdk/_generated/models/project_config_auth.py +296 -0
  585. volcano_sdk/_generated/models/project_config_auth_cors.py +93 -0
  586. volcano_sdk/_generated/models/project_config_auth_email.py +132 -0
  587. volcano_sdk/_generated/models/project_config_auth_email_from.py +69 -0
  588. volcano_sdk/_generated/models/project_config_auth_email_password_provider.py +60 -0
  589. volcano_sdk/_generated/models/project_config_auth_email_smtp.py +96 -0
  590. volcano_sdk/_generated/models/project_config_auth_email_verification.py +70 -0
  591. volcano_sdk/_generated/models/project_config_auth_managed_pages.py +129 -0
  592. volcano_sdk/_generated/models/project_config_auth_page_appearance.py +97 -0
  593. volcano_sdk/_generated/models/project_config_auth_page_layouts.py +174 -0
  594. volcano_sdk/_generated/models/project_config_auth_password.py +96 -0
  595. volcano_sdk/_generated/models/project_config_auth_password_reset.py +78 -0
  596. volcano_sdk/_generated/models/project_config_auth_providers.py +105 -0
  597. volcano_sdk/_generated/models/project_config_auth_rate_limits.py +88 -0
  598. volcano_sdk/_generated/models/project_config_auth_redirects.py +93 -0
  599. volcano_sdk/_generated/models/project_config_auth_sessions.py +69 -0
  600. volcano_sdk/_generated/models/project_config_auth_signup.py +118 -0
  601. volcano_sdk/_generated/models/project_config_auth_signup_allowed_email_domains_mode.py +10 -0
  602. volcano_sdk/_generated/models/project_config_auth_tokens.py +88 -0
  603. volcano_sdk/_generated/models/project_config_bucket.py +118 -0
  604. volcano_sdk/_generated/models/project_config_bucket_policy.py +80 -0
  605. volcano_sdk/_generated/models/project_config_bucket_policy_operation.py +10 -0
  606. volcano_sdk/_generated/models/project_config_custom_domain.py +88 -0
  607. volcano_sdk/_generated/models/project_config_database.py +109 -0
  608. volcano_sdk/_generated/models/project_config_database_database_type.py +10 -0
  609. volcano_sdk/_generated/models/project_config_database_pg_version.py +10 -0
  610. volcano_sdk/_generated/models/project_config_email_template.py +78 -0
  611. volcano_sdk/_generated/models/project_config_email_templates.py +136 -0
  612. volcano_sdk/_generated/models/project_config_frontend.py +91 -0
  613. volcano_sdk/_generated/models/project_config_function.py +188 -0
  614. volcano_sdk/_generated/models/project_config_function_openapi_spec_type_0.py +66 -0
  615. volcano_sdk/_generated/models/project_config_hosted_page.py +68 -0
  616. volcano_sdk/_generated/models/project_config_hosted_pages.py +172 -0
  617. volcano_sdk/_generated/models/project_config_missing_resource.py +90 -0
  618. volcano_sdk/_generated/models/project_config_missing_resource_type.py +10 -0
  619. volcano_sdk/_generated/models/project_config_o_auth_provider.py +116 -0
  620. volcano_sdk/_generated/models/project_config_o_auth_provider_provider.py +10 -0
  621. volcano_sdk/_generated/models/project_config_project.py +85 -0
  622. volcano_sdk/_generated/models/project_config_realtime.py +87 -0
  623. volcano_sdk/_generated/models/project_config_scheduler.py +100 -0
  624. volcano_sdk/_generated/models/project_config_scheduler_payload.py +65 -0
  625. volcano_sdk/_generated/models/project_config_skipped_resource.py +98 -0
  626. volcano_sdk/_generated/models/project_config_skipped_resource_type.py +10 -0
  627. volcano_sdk/_generated/models/project_config_validation_error.py +94 -0
  628. volcano_sdk/_generated/models/project_config_validation_error_response.py +103 -0
  629. volcano_sdk/_generated/models/project_config_variable.py +66 -0
  630. volcano_sdk/_generated/models/project_config_version.py +10 -0
  631. volcano_sdk/_generated/models/project_deployment.py +231 -0
  632. volcano_sdk/_generated/models/project_deployment_deploy_source.py +10 -0
  633. volcano_sdk/_generated/models/project_deployment_operation.py +10 -0
  634. volcano_sdk/_generated/models/project_deployment_resource.py +103 -0
  635. volcano_sdk/_generated/models/project_deployment_resource_type.py +10 -0
  636. volcano_sdk/_generated/models/project_deployment_status.py +10 -0
  637. volcano_sdk/_generated/models/project_deployment_summary.py +132 -0
  638. volcano_sdk/_generated/models/project_frontend_custom_domain.py +218 -0
  639. volcano_sdk/_generated/models/project_frontend_custom_domain_frontend.py +90 -0
  640. volcano_sdk/_generated/models/project_git_connection.py +122 -0
  641. volcano_sdk/_generated/models/project_git_connection_summary.py +121 -0
  642. volcano_sdk/_generated/models/project_git_deploy_settings.py +119 -0
  643. volcano_sdk/_generated/models/project_health_category.py +10 -0
  644. volcano_sdk/_generated/models/project_health_check.py +140 -0
  645. volcano_sdk/_generated/models/project_health_data_status.py +10 -0
  646. volcano_sdk/_generated/models/project_health_evidence.py +100 -0
  647. volcano_sdk/_generated/models/project_health_resource.py +102 -0
  648. volcano_sdk/_generated/models/project_health_resource_type.py +10 -0
  649. volcano_sdk/_generated/models/project_health_response.py +176 -0
  650. volcano_sdk/_generated/models/project_health_scope.py +84 -0
  651. volcano_sdk/_generated/models/project_health_status.py +10 -0
  652. volcano_sdk/_generated/models/project_health_summary.py +82 -0
  653. volcano_sdk/_generated/models/project_import_action.py +110 -0
  654. volcano_sdk/_generated/models/project_import_action_code.py +10 -0
  655. volcano_sdk/_generated/models/project_import_destination.py +103 -0
  656. volcano_sdk/_generated/models/project_import_destination_mode.py +10 -0
  657. volcano_sdk/_generated/models/project_import_disposition.py +10 -0
  658. volcano_sdk/_generated/models/project_import_finding.py +134 -0
  659. volcano_sdk/_generated/models/project_import_impact.py +10 -0
  660. volcano_sdk/_generated/models/project_import_preflight_request.py +123 -0
  661. volcano_sdk/_generated/models/project_import_readiness.py +10 -0
  662. volcano_sdk/_generated/models/project_import_report.py +230 -0
  663. volcano_sdk/_generated/models/project_import_resource.py +109 -0
  664. volcano_sdk/_generated/models/project_import_resource_kind.py +10 -0
  665. volcano_sdk/_generated/models/project_import_run.py +190 -0
  666. volcano_sdk/_generated/models/project_import_run_status.py +10 -0
  667. volcano_sdk/_generated/models/project_import_start_request.py +126 -0
  668. volcano_sdk/_generated/models/project_import_summary.py +116 -0
  669. volcano_sdk/_generated/models/project_import_target.py +10 -0
  670. volcano_sdk/_generated/models/project_lock_lease.py +75 -0
  671. volcano_sdk/_generated/models/project_lock_lease_request.py +62 -0
  672. volcano_sdk/_generated/models/project_lock_state.py +90 -0
  673. volcano_sdk/_generated/models/project_metrics_data_status.py +10 -0
  674. volcano_sdk/_generated/models/project_metrics_dimensions.py +83 -0
  675. volcano_sdk/_generated/models/project_metrics_dimensions_resource_type.py +10 -0
  676. volcano_sdk/_generated/models/project_metrics_group_by.py +10 -0
  677. volcano_sdk/_generated/models/project_metrics_metric.py +10 -0
  678. volcano_sdk/_generated/models/project_metrics_query.py +95 -0
  679. volcano_sdk/_generated/models/project_metrics_query_request.py +90 -0
  680. volcano_sdk/_generated/models/project_metrics_query_response.py +122 -0
  681. volcano_sdk/_generated/models/project_metrics_query_time_range.py +64 -0
  682. volcano_sdk/_generated/models/project_metrics_query_time_range_window.py +10 -0
  683. volcano_sdk/_generated/models/project_metrics_result.py +123 -0
  684. volcano_sdk/_generated/models/project_metrics_unit.py +10 -0
  685. volcano_sdk/_generated/models/project_metrics_value.py +74 -0
  686. volcano_sdk/_generated/models/project_metrics_window.py +92 -0
  687. volcano_sdk/_generated/models/project_plan.py +10 -0
  688. volcano_sdk/_generated/models/project_source_export.py +152 -0
  689. volcano_sdk/_generated/models/project_source_export_omission.py +93 -0
  690. volcano_sdk/_generated/models/project_source_export_skip.py +93 -0
  691. volcano_sdk/_generated/models/project_source_export_state.py +171 -0
  692. volcano_sdk/_generated/models/project_source_export_state_mode.py +10 -0
  693. volcano_sdk/_generated/models/project_status.py +10 -0
  694. volcano_sdk/_generated/models/project_usage_response.py +145 -0
  695. volcano_sdk/_generated/models/realtime_config.py +167 -0
  696. volcano_sdk/_generated/models/realtime_plan_limits.py +115 -0
  697. volcano_sdk/_generated/models/realtime_stats.py +132 -0
  698. volcano_sdk/_generated/models/refresh_o_auth_provider_token_provider.py +10 -0
  699. volcano_sdk/_generated/models/refresh_o_auth_provider_token_response_200.py +96 -0
  700. volcano_sdk/_generated/models/render_default_managed_auth_page_action.py +10 -0
  701. volcano_sdk/_generated/models/reset_database_password_response_200.py +106 -0
  702. volcano_sdk/_generated/models/resolve_function_response.py +96 -0
  703. volcano_sdk/_generated/models/resource_reference.py +103 -0
  704. volcano_sdk/_generated/models/resource_reference_type.py +10 -0
  705. volcano_sdk/_generated/models/schedule_request.py +101 -0
  706. volcano_sdk/_generated/models/schedule_request_kind.py +10 -0
  707. volcano_sdk/_generated/models/service_key.py +183 -0
  708. volcano_sdk/_generated/models/set_project_git_production_branch_request.py +77 -0
  709. volcano_sdk/_generated/models/start_git_connect_provider.py +10 -0
  710. volcano_sdk/_generated/models/storage_bucket.py +223 -0
  711. volcano_sdk/_generated/models/storage_copy_request.py +84 -0
  712. volcano_sdk/_generated/models/storage_list_response.py +109 -0
  713. volcano_sdk/_generated/models/storage_move_request.py +84 -0
  714. volcano_sdk/_generated/models/storage_object.py +243 -0
  715. volcano_sdk/_generated/models/storage_object_metadata.py +67 -0
  716. volcano_sdk/_generated/models/storage_object_with_bucket.py +248 -0
  717. volcano_sdk/_generated/models/storage_object_with_bucket_metadata.py +65 -0
  718. volcano_sdk/_generated/models/storage_policy.py +166 -0
  719. volcano_sdk/_generated/models/storage_policy_operation.py +10 -0
  720. volcano_sdk/_generated/models/storage_stats.py +93 -0
  721. volcano_sdk/_generated/models/storage_visibility_request.py +76 -0
  722. volcano_sdk/_generated/models/summarize_project_deployments_resource_type.py +10 -0
  723. volcano_sdk/_generated/models/test_email_request.py +115 -0
  724. volcano_sdk/_generated/models/test_email_response.py +76 -0
  725. volcano_sdk/_generated/models/unban_user_response.py +111 -0
  726. volcano_sdk/_generated/models/unban_user_response_status.py +10 -0
  727. volcano_sdk/_generated/models/update_auth_config_request.py +485 -0
  728. volcano_sdk/_generated/models/update_auth_config_request_allowed_email_domains_mode.py +10 -0
  729. volcano_sdk/_generated/models/update_auth_hosted_page_request.py +86 -0
  730. volcano_sdk/_generated/models/update_auth_page_layout_request.py +64 -0
  731. volcano_sdk/_generated/models/update_auth_page_theme_request.py +66 -0
  732. volcano_sdk/_generated/models/update_database_branch_request.py +77 -0
  733. volcano_sdk/_generated/models/update_database_type_request.py +83 -0
  734. volcano_sdk/_generated/models/update_database_type_request_database_type.py +10 -0
  735. volcano_sdk/_generated/models/update_email_template_request.py +96 -0
  736. volcano_sdk/_generated/models/update_email_template_type.py +10 -0
  737. volcano_sdk/_generated/models/update_function_request.py +149 -0
  738. volcano_sdk/_generated/models/update_function_request_openapi_spec_type_0.py +66 -0
  739. volcano_sdk/_generated/models/update_function_scheduler_request.py +147 -0
  740. volcano_sdk/_generated/models/update_function_scheduler_request_payload.py +65 -0
  741. volcano_sdk/_generated/models/update_o_auth_config_provider.py +10 -0
  742. volcano_sdk/_generated/models/update_o_auth_config_request.py +120 -0
  743. volcano_sdk/_generated/models/update_project_git_deploy_settings_request.py +105 -0
  744. volcano_sdk/_generated/models/update_project_request.py +107 -0
  745. volcano_sdk/_generated/models/update_realtime_config_request.py +107 -0
  746. volcano_sdk/_generated/models/update_storage_bucket_request.py +93 -0
  747. volcano_sdk/_generated/models/update_variable_request.py +76 -0
  748. volcano_sdk/_generated/models/upload_project_logo_body.py +101 -0
  749. volcano_sdk/_generated/models/upload_session_part.py +97 -0
  750. volcano_sdk/_generated/models/upload_session_status_response.py +234 -0
  751. volcano_sdk/_generated/models/upload_session_status_response_status.py +10 -0
  752. volcano_sdk/_generated/models/upload_storage_object_files_body.py +101 -0
  753. volcano_sdk/_generated/models/upload_storage_object_x_upload_complete.py +10 -0
  754. volcano_sdk/_generated/models/usage_data_point.py +90 -0
  755. volcano_sdk/_generated/models/variable.py +216 -0
  756. volcano_sdk/_generated/models/variable_deploy_source.py +10 -0
  757. volcano_sdk/_generated/models/variable_status.py +10 -0
  758. volcano_sdk/_generated/types.py +53 -0
  759. volcano_sdk/_lock_guard.py +159 -0
  760. volcano_sdk/_lock_renewer.py +30 -0
  761. volcano_sdk/_lock_worker.py +104 -0
  762. volcano_sdk/_realtime_fetch_worker.py +265 -0
  763. volcano_sdk/_transport.py +1767 -0
  764. volcano_sdk/auth.py +1128 -0
  765. volcano_sdk/client.py +288 -0
  766. volcano_sdk/connection_string.py +70 -0
  767. volcano_sdk/database.py +281 -0
  768. volcano_sdk/errors.py +61 -0
  769. volcano_sdk/functions.py +277 -0
  770. volcano_sdk/locks.py +227 -0
  771. volcano_sdk/logs.py +140 -0
  772. volcano_sdk/models.py +330 -0
  773. volcano_sdk/realtime.py +1611 -0
  774. volcano_sdk/storage.py +750 -0
  775. volcano_sdk_python-0.6.7.dist-info/METADATA +828 -0
  776. volcano_sdk_python-0.6.7.dist-info/RECORD +778 -0
  777. volcano_sdk_python-0.6.7.dist-info/WHEEL +4 -0
  778. volcano_sdk_python-0.6.7.dist-info/licenses/LICENSE +203 -0
volcano_sdk/auth.py ADDED
@@ -0,0 +1,1128 @@
1
+ """Authentication facade."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import base64
6
+ import binascii
7
+ import json
8
+ import secrets
9
+ import threading
10
+ from collections.abc import Mapping
11
+ from contextlib import suppress
12
+ from dataclasses import replace
13
+ from datetime import datetime
14
+ from http import HTTPStatus
15
+ from typing import TYPE_CHECKING, Literal, Protocol, TypeVar, cast
16
+ from urllib.parse import quote, urlencode
17
+
18
+ from ._generated.models.auth_confirm_email_change_response_200 import (
19
+ AuthConfirmEmailChangeResponse200,
20
+ )
21
+ from ._generated.models.auth_convert_anonymous_response_200 import (
22
+ AuthConvertAnonymousResponse200,
23
+ )
24
+ from ._generated.models.auth_get_my_sessions_response_200 import (
25
+ AuthGetMySessionsResponse200,
26
+ )
27
+ from ._generated.models.auth_get_user_response_200 import AuthGetUserResponse200
28
+ from ._generated.models.auth_link_o_auth_provider_response_200 import (
29
+ AuthLinkOAuthProviderResponse200,
30
+ )
31
+ from ._generated.models.auth_list_o_auth_providers_response_200 import (
32
+ AuthListOAuthProvidersResponse200,
33
+ )
34
+ from ._generated.models.auth_update_user_response_200 import AuthUpdateUserResponse200
35
+ from ._generated.models.call_o_auth_provider_api_response_200 import (
36
+ CallOAuthProviderAPIResponse200,
37
+ )
38
+ from ._generated.models.get_o_auth_provider_token_response_200 import (
39
+ GetOAuthProviderTokenResponse200,
40
+ )
41
+ from ._generated.models.refresh_o_auth_provider_token_response_200 import (
42
+ RefreshOAuthProviderTokenResponse200,
43
+ )
44
+ from ._generated.types import Unset
45
+ from ._transport import (
46
+ AuthCallOAuthAPITransport,
47
+ AuthCancelEmailChangeTransport,
48
+ AuthConfirmEmailChangeTransport,
49
+ AuthConfirmEmailTransport,
50
+ AuthConvertAnonymousTransport,
51
+ AuthDeleteAllMySessionsTransport,
52
+ AuthDeleteMySessionTransport,
53
+ AuthForgotPasswordTransport,
54
+ AuthGetMySessionsTransport,
55
+ AuthGetOAuthProviderTokenTransport,
56
+ AuthGetUserTransport,
57
+ AuthLinkOAuthProviderTransport,
58
+ AuthListOAuthProvidersTransport,
59
+ AuthLogoutTransport,
60
+ AuthOAuthAuthorizationURLTransport,
61
+ AuthOAuthExchangeTransport,
62
+ AuthRefreshOAuthProviderTokenTransport,
63
+ AuthRefreshTransport,
64
+ AuthRequestEmailChangeTransport,
65
+ AuthResendConfirmationTransport,
66
+ AuthResetPasswordTransport,
67
+ AuthSignUpAnonymousTransport,
68
+ AuthSignUpTransport,
69
+ AuthUnlinkOAuthProviderTransport,
70
+ AuthUpdateUserTransport,
71
+ Transport,
72
+ invoke,
73
+ response_payload,
74
+ )
75
+ from .errors import (
76
+ AuthenticationError,
77
+ SessionChangedError,
78
+ TransportError,
79
+ VolcanoError,
80
+ )
81
+ from .models import (
82
+ AuthChangeEvent,
83
+ AuthSession,
84
+ AuthStateCallback,
85
+ AuthSubscription,
86
+ EmailChangeResult,
87
+ JSONValue,
88
+ LinkedOAuthProvider,
89
+ OAuthProviderName,
90
+ OAuthProviderTokenStatus,
91
+ Session,
92
+ SessionPage,
93
+ SignUpResult,
94
+ User,
95
+ _freeze_json,
96
+ )
97
+
98
+ _INCOMPLETE_SESSION = "Expected a complete Session"
99
+ _INVALID_SIGN_UP_RESULT = "Expected a complete sign-up acknowledgement"
100
+ _INVALID_EMAIL_CHANGE_RESULT = "Expected a valid email-change acknowledgement"
101
+ _INVALID_USER = "Expected a complete user profile"
102
+ _INVALID_SESSION_PAGE = "Expected a complete session page"
103
+ _INVALID_LINKED_OAUTH_PROVIDERS = "Expected complete linked OAuth providers"
104
+ _INVALID_OAUTH_LINK = "Expected an OAuth authorization URL"
105
+ _INVALID_OAUTH_STATUS = "Expected complete OAuth provider token status"
106
+ _INVALID_OAUTH_API_RESPONSE = "Expected OAuth provider API response data"
107
+ _INVALID_AUTH_CALLBACK = "callback must be callable"
108
+ _INVALID_HOSTED_AUTH_PARAMETER = "Hosted auth parameters must be non-empty strings"
109
+ _HOSTED_AUTH_STATE_MISMATCH = "Hosted auth state mismatch"
110
+ _UNSUPPORTED_HOSTED_AUTH_ACTION = "Unsupported hosted auth action"
111
+ _UNSUPPORTED_OAUTH_PROVIDER = "Unsupported OAuth provider"
112
+ _UNSUPPORTED_OAUTH_API_METHOD = "Unsupported OAuth provider API method"
113
+ _INVALID_OAUTH_PARAMETER = "OAuth parameters must be non-empty strings"
114
+ _INVALID_OAUTH_STATE = "OAuth state must not exceed 255 characters"
115
+ _OAUTH_STATE_MISMATCH = "OAuth state mismatch"
116
+ _MAX_OAUTH_STATE_LENGTH = 255
117
+ _JWT_PARTS = 3
118
+ _NO_ACTIVE_SESSION = "No active session"
119
+ _T = TypeVar("_T")
120
+ _OAUTH_PROVIDERS: frozenset[str] = frozenset({"apple", "github", "google", "microsoft"})
121
+ _OAUTH_API_METHODS: frozenset[str] = frozenset({"GET", "POST"})
122
+ _HOSTED_AUTH_ACTIONS: frozenset[str] = frozenset({"login", "signup", "forgot-password"})
123
+
124
+ if TYPE_CHECKING:
125
+ from collections.abc import Callable
126
+
127
+ from ._generated.models import (
128
+ AuthListOAuthProvidersResponse200ProvidersItem,
129
+ )
130
+ from ._generated.models.auth_session import AuthSession as GeneratedAuthSession
131
+ from ._transport import TransportResponse
132
+
133
+
134
+ def _is_non_empty_string(value: object) -> bool:
135
+ return isinstance(value, str) and bool(value.strip())
136
+
137
+
138
+ def _oauth_parameter(value: str) -> str:
139
+ if not _is_non_empty_string(value):
140
+ raise ValueError(_INVALID_OAUTH_PARAMETER)
141
+ return value
142
+
143
+
144
+ def _hosted_auth_parameter(value: str) -> str:
145
+ if not _is_non_empty_string(value):
146
+ raise ValueError(_INVALID_HOSTED_AUTH_PARAMETER)
147
+ return value
148
+
149
+
150
+ def _validate_hosted_auth_callback_state(state: str, expected_state: str) -> None:
151
+ actual = _hosted_auth_parameter(state).encode()
152
+ expected = _hosted_auth_parameter(expected_state).encode()
153
+ if not secrets.compare_digest(actual, expected):
154
+ raise ValueError(_HOSTED_AUTH_STATE_MISMATCH)
155
+
156
+
157
+ def _oauth_state(value: str) -> str:
158
+ state = _oauth_parameter(value)
159
+ if len(state) > _MAX_OAUTH_STATE_LENGTH:
160
+ raise ValueError(_INVALID_OAUTH_STATE)
161
+ return state
162
+
163
+
164
+ def _validate_oauth_callback_state(state: str, expected_state: str) -> None:
165
+ actual = _oauth_state(state).encode()
166
+ expected = _oauth_state(expected_state).encode()
167
+ if not secrets.compare_digest(actual, expected):
168
+ raise ValueError(_OAUTH_STATE_MISMATCH)
169
+
170
+
171
+ def _session_id_from_access_token(access_token: str) -> str | None:
172
+ parts = access_token.split(".")
173
+ if len(parts) != _JWT_PARTS:
174
+ return None
175
+ padding = "=" * (-len(parts[1]) % 4)
176
+ try:
177
+ payload: object = json.loads(
178
+ base64.urlsafe_b64decode(parts[1] + padding).decode()
179
+ )
180
+ except (binascii.Error, json.JSONDecodeError, UnicodeDecodeError):
181
+ return None
182
+ if not isinstance(payload, Mapping):
183
+ return None
184
+ values = cast("Mapping[object, object]", payload)
185
+ session_id = values.get("session_id")
186
+ if not isinstance(session_id, str) or not session_id.strip():
187
+ return None
188
+ return session_id.strip()
189
+
190
+
191
+ def _has_complete_values(session: Session) -> bool:
192
+ return all(
193
+ _is_non_empty_string(value)
194
+ for value in (
195
+ session.access_token,
196
+ session.refresh_token,
197
+ session.user_id,
198
+ )
199
+ )
200
+
201
+
202
+ def _copy_complete_session(session: object) -> Session:
203
+ if not isinstance(session, Session) or not _has_complete_values(session):
204
+ raise ValueError(_INCOMPLETE_SESSION)
205
+ if session.user is not None and session.user.get("id") != session.user_id:
206
+ raise ValueError(_INCOMPLETE_SESSION)
207
+ return Session(
208
+ access_token=session.access_token,
209
+ refresh_token=session.refresh_token,
210
+ user_id=session.user_id,
211
+ user=session.user,
212
+ )
213
+
214
+
215
+ def _session_from_payload(payload: object) -> Session:
216
+ values: Mapping[object, object] = (
217
+ cast("Mapping[object, object]", payload) if isinstance(payload, Mapping) else {}
218
+ )
219
+ raw_user = values.get("user")
220
+ user: Mapping[object, object] = (
221
+ cast("Mapping[object, object]", raw_user)
222
+ if isinstance(raw_user, Mapping)
223
+ else {}
224
+ )
225
+ return _copy_complete_session(
226
+ Session(
227
+ access_token=cast("str", values.get("access_token")),
228
+ refresh_token=cast("str", values.get("refresh_token")),
229
+ user_id=cast("str", user.get("id")),
230
+ user=cast("Mapping[str, JSONValue]", user),
231
+ )
232
+ )
233
+
234
+
235
+ def _sign_up_result_from_payload(payload: object) -> SignUpResult:
236
+ values: Mapping[object, object] = (
237
+ cast("Mapping[object, object]", payload) if isinstance(payload, Mapping) else {}
238
+ )
239
+ confirmation_required = values.get("confirmation_required")
240
+ message = values.get("message")
241
+ if not isinstance(confirmation_required, bool) or not isinstance(message, str):
242
+ raise TypeError(_INVALID_SIGN_UP_RESULT)
243
+ return SignUpResult(
244
+ confirmation_required=confirmation_required,
245
+ message=message,
246
+ )
247
+
248
+
249
+ def _email_change_result_from_payload(payload: object) -> EmailChangeResult:
250
+ if not isinstance(payload, Mapping):
251
+ raise TypeError(_INVALID_EMAIL_CHANGE_RESULT)
252
+ values = cast("Mapping[object, object]", payload)
253
+ message = values.get("message")
254
+ new_email = values.get("new_email")
255
+ if not all(
256
+ value is None or isinstance(value, str) for value in (message, new_email)
257
+ ):
258
+ raise TypeError(_INVALID_EMAIL_CHANGE_RESULT)
259
+ return EmailChangeResult(
260
+ message=cast("str | None", message),
261
+ new_email=cast("str | None", new_email),
262
+ )
263
+
264
+
265
+ def _user_from_payload(payload: object) -> User:
266
+ if not isinstance(
267
+ payload,
268
+ (
269
+ AuthConvertAnonymousResponse200,
270
+ AuthConfirmEmailChangeResponse200,
271
+ AuthGetUserResponse200,
272
+ AuthUpdateUserResponse200,
273
+ ),
274
+ ) or isinstance(payload.user, Unset):
275
+ raise AuthenticationError(_INVALID_USER)
276
+ user = payload.user
277
+ project_id = _none_if_unset(user.project_id)
278
+ user_metadata = _none_if_unset(user.user_metadata)
279
+ app_metadata = _none_if_unset(user.app_metadata)
280
+ return User(
281
+ id=str(user.id),
282
+ email=user.email,
283
+ status=user.status,
284
+ project_id=None if project_id is None else str(project_id),
285
+ email_confirmed=_none_if_unset(user.email_confirmed),
286
+ user_metadata=(
287
+ None
288
+ if user_metadata is None
289
+ else cast("Mapping[str, JSONValue]", user_metadata.to_dict())
290
+ ),
291
+ app_metadata=(
292
+ None
293
+ if app_metadata is None
294
+ else cast("Mapping[str, JSONValue]", app_metadata.to_dict())
295
+ ),
296
+ avatar_url=_none_if_unset(user.avatar_url),
297
+ banned_until=_none_if_unset(user.banned_until),
298
+ last_sign_in_at=_none_if_unset(user.last_sign_in_at),
299
+ created_at=_none_if_unset(user.created_at),
300
+ updated_at=_none_if_unset(user.updated_at),
301
+ )
302
+
303
+
304
+ def _none_if_unset(value: _T | Unset) -> _T | None:
305
+ return None if isinstance(value, Unset) else value
306
+
307
+
308
+ def _auth_session_from_model(session: GeneratedAuthSession) -> AuthSession:
309
+ return AuthSession(
310
+ id=str(session.id),
311
+ user_id=str(session.user_id),
312
+ provider=session.provider,
313
+ expires_at=session.expires_at,
314
+ is_active=_session_bool(session.is_active),
315
+ is_current=_session_bool(session.is_current),
316
+ user_agent=_optional_session_string(session.user_agent),
317
+ ip_address=_optional_session_string(session.ip_address),
318
+ last_ip_address=_optional_session_string(session.last_ip_address),
319
+ last_activity_at=_none_if_unset(session.last_activity_at),
320
+ session_started_at=_none_if_unset(session.session_started_at),
321
+ created_at=_none_if_unset(session.created_at),
322
+ updated_at=_none_if_unset(session.updated_at),
323
+ )
324
+
325
+
326
+ def _session_bool(value: object) -> bool:
327
+ if not isinstance(value, bool):
328
+ raise VolcanoError(_INVALID_SESSION_PAGE)
329
+ return value
330
+
331
+
332
+ def _optional_session_string(value: object) -> str | None:
333
+ if isinstance(value, Unset) or value is None:
334
+ return None
335
+ if not isinstance(value, str):
336
+ raise VolcanoError(_INVALID_SESSION_PAGE)
337
+ return value
338
+
339
+
340
+ def _session_page_from_payload(payload: object) -> SessionPage:
341
+ if not isinstance(payload, AuthGetMySessionsResponse200):
342
+ raise VolcanoError(_INVALID_SESSION_PAGE)
343
+ pagination = (
344
+ payload.total,
345
+ payload.page,
346
+ payload.limit,
347
+ payload.total_pages,
348
+ )
349
+ if isinstance(payload.sessions, Unset) or any(
350
+ type(value) is not int for value in pagination
351
+ ):
352
+ raise VolcanoError(_INVALID_SESSION_PAGE)
353
+ return SessionPage(
354
+ sessions=tuple(
355
+ _auth_session_from_model(session) for session in payload.sessions
356
+ ),
357
+ total=cast("int", payload.total),
358
+ page=cast("int", payload.page),
359
+ limit=cast("int", payload.limit),
360
+ total_pages=cast("int", payload.total_pages),
361
+ )
362
+
363
+
364
+ def _linked_oauth_provider_from_model(
365
+ item: AuthListOAuthProvidersResponse200ProvidersItem,
366
+ ) -> LinkedOAuthProvider:
367
+ provider = item.provider
368
+ if not isinstance(provider, str) or not provider.strip():
369
+ raise VolcanoError(_INVALID_LINKED_OAUTH_PROVIDERS)
370
+ return LinkedOAuthProvider(
371
+ provider=provider,
372
+ linked_at=_linked_oauth_datetime(item.linked_at),
373
+ updated_at=_linked_oauth_datetime(item.updated_at),
374
+ )
375
+
376
+
377
+ def _linked_oauth_datetime(value: object) -> datetime:
378
+ if not isinstance(value, datetime):
379
+ raise VolcanoError(_INVALID_LINKED_OAUTH_PROVIDERS)
380
+ return value
381
+
382
+
383
+ def _linked_oauth_providers_from_payload(
384
+ payload: object,
385
+ ) -> tuple[LinkedOAuthProvider, ...]:
386
+ if not isinstance(payload, AuthListOAuthProvidersResponse200) or isinstance(
387
+ payload.providers, Unset
388
+ ):
389
+ raise VolcanoError(_INVALID_LINKED_OAUTH_PROVIDERS)
390
+ return tuple(
391
+ _linked_oauth_provider_from_model(provider) for provider in payload.providers
392
+ )
393
+
394
+
395
+ def _oauth_provider_name(value: object) -> OAuthProviderName:
396
+ if not isinstance(value, str) or value not in _OAUTH_PROVIDERS:
397
+ raise ValueError(_UNSUPPORTED_OAUTH_PROVIDER)
398
+ return cast("OAuthProviderName", value)
399
+
400
+
401
+ def _oauth_api_method(value: object) -> Literal["GET", "POST"]:
402
+ if not isinstance(value, str) or value not in _OAUTH_API_METHODS:
403
+ raise ValueError(_UNSUPPORTED_OAUTH_API_METHOD)
404
+ return cast('Literal["GET", "POST"]', value)
405
+
406
+
407
+ def _oauth_link_from_payload(payload: object) -> str:
408
+ if not isinstance(payload, AuthLinkOAuthProviderResponse200):
409
+ raise VolcanoError(_INVALID_OAUTH_LINK)
410
+ authorization_url = payload.authorization_url
411
+ if not isinstance(authorization_url, str) or not authorization_url.strip():
412
+ raise VolcanoError(_INVALID_OAUTH_LINK)
413
+ return authorization_url
414
+
415
+
416
+ def _oauth_provider_token_status_from_payload(
417
+ payload: object,
418
+ ) -> OAuthProviderTokenStatus:
419
+ if not isinstance(
420
+ payload,
421
+ (GetOAuthProviderTokenResponse200, RefreshOAuthProviderTokenResponse200),
422
+ ):
423
+ raise VolcanoError(_INVALID_OAUTH_STATUS)
424
+ message = payload.message
425
+ provider = payload.provider
426
+ expires_in = payload.expires_in
427
+ if (
428
+ not _is_non_empty_string(message)
429
+ or not _is_non_empty_string(provider)
430
+ or type(expires_in) is not int
431
+ ):
432
+ raise VolcanoError(_INVALID_OAUTH_STATUS)
433
+ return OAuthProviderTokenStatus(
434
+ message=cast("str", message),
435
+ provider=cast("str", provider),
436
+ expires_in=expires_in,
437
+ )
438
+
439
+
440
+ def _oauth_api_data_from_payload(payload: object) -> JSONValue:
441
+ if not isinstance(payload, CallOAuthProviderAPIResponse200):
442
+ raise VolcanoError(_INVALID_OAUTH_API_RESPONSE)
443
+ return _freeze_json(cast("JSONValue", payload.data))
444
+
445
+
446
+ class AuthContext(Protocol):
447
+ """Client capabilities required by the authentication facade."""
448
+
449
+ _transport: Transport
450
+
451
+ @property
452
+ def current_session(self) -> Session | None:
453
+ """Return the locally held session, if one exists."""
454
+ ...
455
+
456
+ def _anon_token(self) -> str: ...
457
+
458
+ def _api_base_url(self) -> str: ...
459
+
460
+ def _set_session(
461
+ self,
462
+ session: Session,
463
+ *,
464
+ event: AuthChangeEvent | None = "SIGNED_IN",
465
+ ) -> None: ...
466
+
467
+ def _capture_session(self) -> tuple[int, Session | None]: ...
468
+
469
+ def _capture_session_binding(self) -> tuple[int, int, Session | None]: ...
470
+
471
+ def _set_session_if_current(
472
+ self,
473
+ session: Session,
474
+ generation: int,
475
+ *,
476
+ event: AuthChangeEvent = "SIGNED_IN",
477
+ notifications: list[Callable[[], None]] | None = None,
478
+ ) -> bool: ...
479
+
480
+ def _clear_session_if_current(
481
+ self,
482
+ generation: int,
483
+ *,
484
+ event: AuthChangeEvent = "SIGNED_OUT",
485
+ notifications: list[Callable[[], None]] | None = None,
486
+ ) -> bool: ...
487
+
488
+ def _subscribe_auth_state_change(
489
+ self,
490
+ callback: AuthStateCallback,
491
+ ) -> AuthSubscription: ...
492
+
493
+
494
+ class Auth:
495
+ """Authenticate users and update the client session."""
496
+
497
+ def __init__(self, client: AuthContext) -> None:
498
+ """Create an authentication facade backed by a client."""
499
+ self._client = client
500
+ self._refresh_lock = threading.RLock()
501
+ self._rejected_refresh: tuple[int, int] | None = None
502
+
503
+ def get_session(self) -> Session | None:
504
+ """Return the immutable locally held session without validating it."""
505
+ return self._client.current_session
506
+
507
+ def on_auth_state_change(
508
+ self,
509
+ callback: AuthStateCallback,
510
+ ) -> AuthSubscription:
511
+ """Queue initial state, then observe changes until cancellation."""
512
+ if not callable(callback):
513
+ raise TypeError(_INVALID_AUTH_CALLBACK)
514
+ return self._client._subscribe_auth_state_change(callback)
515
+
516
+ def set_session(self, session: Session) -> Session:
517
+ """Copy a complete session locally without notifying auth subscribers."""
518
+ owned = _copy_complete_session(session)
519
+ self._client._set_session(owned, event=None)
520
+ return owned
521
+
522
+ def sign_up(
523
+ self,
524
+ *,
525
+ email: str,
526
+ password: str,
527
+ metadata: Mapping[str, object] | None = None,
528
+ sign_in_when_allowed: bool = False,
529
+ ) -> SignUpResult:
530
+ """Sign up, optionally signing in when confirmation is not required."""
531
+ generation, _ = self._client._capture_session()
532
+ transport = cast("AuthSignUpTransport", self._client._transport)
533
+ response = invoke(
534
+ transport.auth_signup,
535
+ authorization=self._client._anon_token(),
536
+ email=email,
537
+ password=password,
538
+ metadata=dict(metadata or {}),
539
+ )
540
+ result = _sign_up_result_from_payload(response_payload(response, 201))
541
+ if sign_in_when_allowed and not result.confirmation_required:
542
+ session = self._sign_in_for_generation(email, password, generation)
543
+ return replace(result, session=session)
544
+ return result
545
+
546
+ def sign_in_anonymously(
547
+ self,
548
+ *,
549
+ metadata: Mapping[str, object] | None = None,
550
+ ) -> Session:
551
+ """Create an anonymous account and store its session."""
552
+ generation, _ = self._client._capture_session()
553
+ transport = cast("AuthSignUpAnonymousTransport", self._client._transport)
554
+ response = invoke(
555
+ transport.auth_signup_anonymous,
556
+ authorization=self._client._anon_token(),
557
+ metadata=dict(metadata or {}),
558
+ )
559
+ session = _session_from_payload(response_payload(response, 201))
560
+ if not self._client._set_session_if_current(session, generation):
561
+ raise SessionChangedError
562
+ return session
563
+
564
+ def convert_anonymous(
565
+ self,
566
+ *,
567
+ email: str,
568
+ password: str,
569
+ metadata: Mapping[str, object] | None = None,
570
+ ) -> User:
571
+ """Attach email credentials to the current anonymous account."""
572
+ generation, current = self._client._capture_session()
573
+ if current is None:
574
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
575
+ transport = cast("AuthConvertAnonymousTransport", self._client._transport)
576
+ response = invoke(
577
+ transport.auth_convert_anonymous,
578
+ authorization=current.access_token,
579
+ email=email,
580
+ password=password,
581
+ metadata=dict(metadata or {}),
582
+ )
583
+ user = _user_from_payload(response_payload(response, 200))
584
+ if self._client._capture_session()[0] != generation:
585
+ raise SessionChangedError
586
+ return user
587
+
588
+ def reset_password_for_email(self, *, email: str) -> None:
589
+ """Request a reset email without revealing whether the account exists."""
590
+ transport = cast("AuthForgotPasswordTransport", self._client._transport)
591
+ response = invoke(
592
+ transport.auth_forgot_password,
593
+ authorization=self._client._anon_token(),
594
+ email=email,
595
+ )
596
+ response_payload(response, 200)
597
+
598
+ def request_email_change(self, *, new_email: str) -> EmailChangeResult:
599
+ """Request a confirmation email without changing the current session."""
600
+ generation, current = self._client._capture_session()
601
+ if current is None:
602
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
603
+ transport = cast("AuthRequestEmailChangeTransport", self._client._transport)
604
+ response = invoke(
605
+ transport.auth_request_email_change,
606
+ authorization=current.access_token,
607
+ new_email=new_email,
608
+ )
609
+ result = _email_change_result_from_payload(response_payload(response, 200))
610
+ if self._client._capture_session()[0] != generation:
611
+ raise SessionChangedError
612
+ return result
613
+
614
+ def cancel_email_change(self) -> None:
615
+ """Cancel a pending email change without changing the current session."""
616
+ generation, current = self._client._capture_session()
617
+ if current is None:
618
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
619
+ transport = cast("AuthCancelEmailChangeTransport", self._client._transport)
620
+ response = invoke(
621
+ transport.auth_cancel_email_change,
622
+ authorization=current.access_token,
623
+ )
624
+ response_payload(response, 200)
625
+ if self._client._capture_session()[0] != generation:
626
+ raise SessionChangedError
627
+
628
+ def confirm_email_change(self, *, token: str) -> User:
629
+ """Confirm a pending email change and return the updated user."""
630
+ generation, current = self._client._capture_session()
631
+ if current is None:
632
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
633
+ transport = cast("AuthConfirmEmailChangeTransport", self._client._transport)
634
+ response = invoke(
635
+ transport.auth_confirm_email_change,
636
+ authorization=current.access_token,
637
+ token=token,
638
+ )
639
+ user = _user_from_payload(response_payload(response, 200))
640
+ if self._client._capture_session()[0] != generation:
641
+ raise SessionChangedError
642
+ return user
643
+
644
+ def delete_all_other_sessions(self) -> None:
645
+ """Delete every other session while preserving the current session."""
646
+ generation, current = self._client._capture_session()
647
+ if current is None:
648
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
649
+ transport = cast("AuthDeleteAllMySessionsTransport", self._client._transport)
650
+ response = invoke(
651
+ transport.auth_delete_all_my_sessions,
652
+ authorization=current.access_token,
653
+ )
654
+ response_payload(response, 204)
655
+ if self._client._capture_session()[0] != generation:
656
+ raise SessionChangedError
657
+
658
+ def list_sessions(self, *, page: int = 1, limit: int = 20) -> SessionPage:
659
+ """List sessions in the stable offset-paginated activity order."""
660
+ generation, current = self._client._capture_session()
661
+ if current is None:
662
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
663
+ transport = cast("AuthGetMySessionsTransport", self._client._transport)
664
+ response = invoke(
665
+ transport.auth_get_my_sessions,
666
+ authorization=current.access_token,
667
+ page=page,
668
+ limit=limit,
669
+ )
670
+ result = _session_page_from_payload(response_payload(response, 200))
671
+ if self._client._capture_session()[0] != generation:
672
+ raise SessionChangedError
673
+ return result
674
+
675
+ def list_linked_oauth_providers(self) -> tuple[LinkedOAuthProvider, ...]:
676
+ """List OAuth providers linked to the current account."""
677
+ generation, current = self._client._capture_session()
678
+ if current is None:
679
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
680
+ transport = cast("AuthListOAuthProvidersTransport", self._client._transport)
681
+ response = invoke(
682
+ transport.auth_list_oauth_providers,
683
+ authorization=current.access_token,
684
+ )
685
+ result = _linked_oauth_providers_from_payload(response_payload(response, 200))
686
+ if self._client._capture_session()[0] != generation:
687
+ raise SessionChangedError
688
+ return result
689
+
690
+ def get_hosted_auth_url(
691
+ self,
692
+ *,
693
+ project_id: str,
694
+ state: str,
695
+ action: Literal["login", "signup", "forgot-password"] = "login",
696
+ ) -> str:
697
+ """Build a managed hosted-auth URL without navigating or persisting state."""
698
+ project = _hosted_auth_parameter(project_id).strip()
699
+ auth_state = _hosted_auth_parameter(state)
700
+ if action not in _HOSTED_AUTH_ACTIONS:
701
+ raise ValueError(_UNSUPPORTED_HOSTED_AUTH_ACTION)
702
+ query = urlencode(
703
+ {
704
+ "action": action,
705
+ "anon_key": self._client._anon_token(),
706
+ "state": auth_state,
707
+ }
708
+ )
709
+ return (
710
+ f"{self._client._api_base_url()}/projects/{quote(project, safe='')}"
711
+ f"/auth/hosted?{query}"
712
+ )
713
+
714
+ def adopt_hosted_auth_session(
715
+ self,
716
+ session: Session,
717
+ *,
718
+ state: str,
719
+ expected_state: str,
720
+ ) -> Session:
721
+ """Validate returned hosted-auth state before storing its session."""
722
+ _validate_hosted_auth_callback_state(state, expected_state)
723
+ owned = _copy_complete_session(session)
724
+ self._client._set_session(owned)
725
+ return owned
726
+
727
+ def sign_in_with_oauth(
728
+ self,
729
+ *,
730
+ provider: OAuthProviderName,
731
+ redirect_to: str,
732
+ state: str,
733
+ ) -> str:
734
+ """Return the URL that starts an OAuth sign-in flow."""
735
+ provider_name = _oauth_provider_name(provider)
736
+ transport = cast(
737
+ "AuthOAuthAuthorizationURLTransport",
738
+ self._client._transport,
739
+ )
740
+ return transport.auth_oauth_authorization_url(
741
+ anon_key=self._client._anon_token(),
742
+ provider=provider_name,
743
+ redirect_url=_oauth_parameter(redirect_to),
744
+ client_state=_oauth_state(state),
745
+ )
746
+
747
+ def exchange_oauth_code(
748
+ self,
749
+ *,
750
+ code: str,
751
+ redirect_to: str,
752
+ state: str,
753
+ expected_state: str,
754
+ ) -> Session:
755
+ """Validate callback state, exchange a code, and store the session."""
756
+ _validate_oauth_callback_state(state, expected_state)
757
+ generation, _ = self._client._capture_session()
758
+ transport = cast("AuthOAuthExchangeTransport", self._client._transport)
759
+ response = invoke(
760
+ transport.auth_oauth_exchange,
761
+ authorization=self._client._anon_token(),
762
+ code=_oauth_parameter(code),
763
+ redirect_url=_oauth_parameter(redirect_to),
764
+ )
765
+ session = _session_from_payload(response_payload(response, 200))
766
+ if not self._client._set_session_if_current(session, generation):
767
+ raise SessionChangedError
768
+ return session
769
+
770
+ def link_oauth_provider(self, *, provider: OAuthProviderName) -> str:
771
+ """Return the authorization URL for linking an OAuth provider."""
772
+ provider_name = _oauth_provider_name(provider)
773
+ generation, current = self._client._capture_session()
774
+ if current is None:
775
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
776
+ transport = cast("AuthLinkOAuthProviderTransport", self._client._transport)
777
+ response = invoke(
778
+ transport.auth_link_oauth_provider,
779
+ authorization=current.access_token,
780
+ provider=provider_name,
781
+ )
782
+ result = _oauth_link_from_payload(response_payload(response, 200))
783
+ if self._client._capture_session()[0] != generation:
784
+ raise SessionChangedError
785
+ return result
786
+
787
+ def unlink_oauth_provider(self, *, provider: OAuthProviderName) -> None:
788
+ """Unlink an OAuth provider from the current account."""
789
+ provider_name = _oauth_provider_name(provider)
790
+ generation, current = self._client._capture_session()
791
+ if current is None:
792
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
793
+ transport = cast(
794
+ "AuthUnlinkOAuthProviderTransport",
795
+ self._client._transport,
796
+ )
797
+ response = invoke(
798
+ transport.auth_unlink_oauth_provider,
799
+ authorization=current.access_token,
800
+ provider=provider_name,
801
+ )
802
+ response_payload(response, 204)
803
+ if self._client._capture_session()[0] != generation:
804
+ raise SessionChangedError
805
+
806
+ def get_oauth_provider_token(
807
+ self,
808
+ *,
809
+ provider: OAuthProviderName,
810
+ ) -> OAuthProviderTokenStatus:
811
+ """Return validity metadata for a server-held OAuth provider token."""
812
+ provider_name = _oauth_provider_name(provider)
813
+ generation, current = self._client._capture_session()
814
+ if current is None:
815
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
816
+ transport = cast(
817
+ "AuthGetOAuthProviderTokenTransport",
818
+ self._client._transport,
819
+ )
820
+ response = invoke(
821
+ transport.auth_get_oauth_provider_token,
822
+ authorization=current.access_token,
823
+ provider=provider_name,
824
+ )
825
+ result = _oauth_provider_token_status_from_payload(
826
+ response_payload(response, 200)
827
+ )
828
+ if self._client._capture_session()[0] != generation:
829
+ raise SessionChangedError
830
+ return result
831
+
832
+ def refresh_oauth_provider_token(
833
+ self,
834
+ *,
835
+ provider: OAuthProviderName,
836
+ ) -> OAuthProviderTokenStatus:
837
+ """Refresh a server-held OAuth provider token and return its status."""
838
+ provider_name = _oauth_provider_name(provider)
839
+ generation, current = self._client._capture_session()
840
+ if current is None:
841
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
842
+ transport = cast(
843
+ "AuthRefreshOAuthProviderTokenTransport",
844
+ self._client._transport,
845
+ )
846
+ response = invoke(
847
+ transport.auth_refresh_oauth_provider_token,
848
+ authorization=current.access_token,
849
+ provider=provider_name,
850
+ )
851
+ result = _oauth_provider_token_status_from_payload(
852
+ response_payload(response, 200)
853
+ )
854
+ if self._client._capture_session()[0] != generation:
855
+ raise SessionChangedError
856
+ return result
857
+
858
+ def call_oauth_api(
859
+ self,
860
+ *,
861
+ provider: OAuthProviderName,
862
+ endpoint: str,
863
+ method: Literal["GET", "POST"] = "GET",
864
+ body: Mapping[str, JSONValue] | None = None,
865
+ ) -> JSONValue:
866
+ """Call a provider API through Volcano's fixed-host server proxy."""
867
+ provider_name = _oauth_provider_name(provider)
868
+ request_method = _oauth_api_method(method)
869
+ generation, current = self._client._capture_session()
870
+ if current is None:
871
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
872
+ transport = cast("AuthCallOAuthAPITransport", self._client._transport)
873
+ response = invoke(
874
+ transport.auth_call_oauth_api,
875
+ authorization=current.access_token,
876
+ provider=provider_name,
877
+ endpoint=endpoint,
878
+ method=request_method,
879
+ body=body,
880
+ )
881
+ result = _oauth_api_data_from_payload(response_payload(response, 200))
882
+ if self._client._capture_session()[0] != generation:
883
+ raise SessionChangedError
884
+ return result
885
+
886
+ def delete_session(self, *, session_id: str) -> None:
887
+ """Delete one session and clear local state when it is current."""
888
+ generation, current = self._client._capture_session()
889
+ if current is None:
890
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
891
+ current_session_id = _session_id_from_access_token(current.access_token)
892
+ deletes_current = (
893
+ current_session_id is not None
894
+ and current_session_id.casefold() == session_id.casefold()
895
+ )
896
+ transport = cast("AuthDeleteMySessionTransport", self._client._transport)
897
+ try:
898
+ response = invoke(
899
+ transport.auth_delete_my_session,
900
+ authorization=current.access_token,
901
+ session_id=session_id,
902
+ )
903
+ response_payload(response, 204)
904
+ except TransportError as error:
905
+ if deletes_current and not self._client._clear_session_if_current(
906
+ generation
907
+ ):
908
+ raise SessionChangedError from error
909
+ raise
910
+ if deletes_current:
911
+ current_unchanged = self._client._clear_session_if_current(generation)
912
+ else:
913
+ current_unchanged = self._client._capture_session()[0] == generation
914
+ if not current_unchanged:
915
+ raise SessionChangedError
916
+
917
+ def confirm_email(self, *, token: str) -> None:
918
+ """Confirm an email with its token without changing local state."""
919
+ transport = cast("AuthConfirmEmailTransport", self._client._transport)
920
+ response = invoke(
921
+ transport.auth_confirm_email,
922
+ authorization=self._client._anon_token(),
923
+ token=token,
924
+ )
925
+ response_payload(response, 200)
926
+
927
+ def resend_confirmation(self, *, email: str) -> None:
928
+ """Request a generic confirmation resend without changing local state."""
929
+ transport = cast("AuthResendConfirmationTransport", self._client._transport)
930
+ response = invoke(
931
+ transport.auth_resend_confirmation,
932
+ authorization=self._client._anon_token(),
933
+ email=email,
934
+ )
935
+ response_payload(response, 200)
936
+
937
+ def reset_password(self, *, token: str, new_password: str) -> None:
938
+ """Set a new password with a recovery token without changing local state."""
939
+ transport = cast("AuthResetPasswordTransport", self._client._transport)
940
+ response = invoke(
941
+ transport.auth_reset_password,
942
+ authorization=self._client._anon_token(),
943
+ token=token,
944
+ new_password=new_password,
945
+ )
946
+ response_payload(response, 200)
947
+
948
+ def get_user(self) -> User:
949
+ """Load a server-validated profile for the current session."""
950
+ generation, current = self._client._capture_session()
951
+ if current is None:
952
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
953
+ transport = cast("AuthGetUserTransport", self._client._transport)
954
+ response = invoke(transport.auth_get_user, authorization=current.access_token)
955
+ user = _user_from_payload(response_payload(response, 200))
956
+ if self._client._capture_session()[0] != generation:
957
+ raise SessionChangedError
958
+ return user
959
+
960
+ def update_user(
961
+ self,
962
+ *,
963
+ password: str | None = None,
964
+ metadata: Mapping[str, object] | None = None,
965
+ ) -> User:
966
+ """Update and return the current user's server-validated profile."""
967
+ generation, current = self._client._capture_session()
968
+ if current is None:
969
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
970
+ transport = cast("AuthUpdateUserTransport", self._client._transport)
971
+ response = invoke(
972
+ transport.auth_update_user,
973
+ authorization=current.access_token,
974
+ password=password,
975
+ metadata=None if metadata is None else dict(metadata),
976
+ )
977
+ user = _user_from_payload(response_payload(response, 200))
978
+ if self._client._capture_session()[0] != generation:
979
+ raise SessionChangedError
980
+ return user
981
+
982
+ def sign_in(self, *, email: str, password: str) -> Session:
983
+ """Sign in a user and store the returned session."""
984
+ generation, _ = self._client._capture_session()
985
+ return self._sign_in_for_generation(email, password, generation)
986
+
987
+ def _sign_in_for_generation(
988
+ self, email: str, password: str, generation: int
989
+ ) -> Session:
990
+ if self._client._capture_session()[0] != generation:
991
+ raise SessionChangedError
992
+ response = invoke(
993
+ self._client._transport.auth_signin,
994
+ authorization=self._client._anon_token(),
995
+ email=email,
996
+ password=password,
997
+ )
998
+ payload = response_payload(response, 200)
999
+ session = _session_from_payload(payload)
1000
+ if not self._client._set_session_if_current(session, generation):
1001
+ raise SessionChangedError
1002
+ return session
1003
+
1004
+ def refresh_session(self) -> Session:
1005
+ """Refresh and replace the current session."""
1006
+ return self._refresh_session_for_binding(
1007
+ self._client._capture_session_binding()
1008
+ )
1009
+
1010
+ def _session_request(
1011
+ self, operation: Callable[[str], TransportResponse]
1012
+ ) -> TransportResponse:
1013
+ binding = self._client._capture_session_binding()
1014
+ if binding[2] is None:
1015
+ raise RuntimeError(_NO_ACTIVE_SESSION)
1016
+ response = operation(binding[2].access_token)
1017
+ if response.status_code != HTTPStatus.UNAUTHORIZED:
1018
+ return response
1019
+ try:
1020
+ self._refresh_session_for_binding(binding)
1021
+ except SessionChangedError:
1022
+ raise
1023
+ except VolcanoError:
1024
+ self._validate_read_failure(binding)
1025
+ return response
1026
+ session = self._owned_refresh_session(binding)[2]
1027
+ if session is None:
1028
+ raise SessionChangedError
1029
+ response = operation(session.access_token)
1030
+ self._owned_refresh_session(binding)
1031
+ return response
1032
+
1033
+ def _validate_read_failure(self, binding: tuple[int, int, Session | None]) -> None:
1034
+ with suppress(AuthenticationError):
1035
+ self._owned_refresh_session(binding)
1036
+
1037
+ def _refresh_session_for_binding(
1038
+ self, binding: tuple[int, int, Session | None]
1039
+ ) -> Session:
1040
+ generation, _, current = binding
1041
+ if current is None:
1042
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
1043
+ notifications: list[Callable[[], None]] = []
1044
+ try:
1045
+ with self._refresh_lock:
1046
+ active_generation, _, _ = self._owned_refresh_session(binding)
1047
+ if active_generation == generation:
1048
+ self._perform_refresh(binding, current, notifications)
1049
+ finally:
1050
+ # Only the dispatcher owner drains, after refresh coordination is released.
1051
+ for dispatch in notifications:
1052
+ dispatch()
1053
+ active = self._owned_refresh_session(binding)[2]
1054
+ if active is None:
1055
+ raise SessionChangedError
1056
+ return active
1057
+
1058
+ def _owned_refresh_session(
1059
+ self, binding: tuple[int, int, Session | None]
1060
+ ) -> tuple[int, int, Session | None]:
1061
+ generation, lineage, _ = binding
1062
+ active = self._client._capture_session_binding()
1063
+ if self._rejected_refresh == (generation, lineage) and active == (
1064
+ generation + 1,
1065
+ lineage + 1,
1066
+ None,
1067
+ ):
1068
+ raise AuthenticationError(_NO_ACTIVE_SESSION)
1069
+ if active[1] != lineage or active[2] is None:
1070
+ raise SessionChangedError
1071
+ return active
1072
+
1073
+ def _perform_refresh(
1074
+ self,
1075
+ binding: tuple[int, int, Session | None],
1076
+ current: Session,
1077
+ notifications: list[Callable[[], None]],
1078
+ ) -> None:
1079
+ generation, lineage, _ = binding
1080
+ try:
1081
+ refreshed = self._request_refreshed_session(current)
1082
+ except AuthenticationError:
1083
+ if not self._client._clear_session_if_current(
1084
+ generation, notifications=notifications
1085
+ ):
1086
+ raise SessionChangedError from None
1087
+ self._rejected_refresh = (generation, lineage)
1088
+ raise
1089
+ except VolcanoError:
1090
+ self._owned_refresh_session(binding)
1091
+ raise
1092
+ if not self._client._set_session_if_current(
1093
+ refreshed, generation, event="TOKEN_REFRESHED", notifications=notifications
1094
+ ):
1095
+ raise SessionChangedError
1096
+
1097
+ def _request_refreshed_session(self, current: Session) -> Session:
1098
+ transport = cast("AuthRefreshTransport", self._client._transport)
1099
+ try:
1100
+ response = invoke(
1101
+ transport.auth_refresh,
1102
+ authorization=self._client._anon_token(),
1103
+ refresh_token=current.refresh_token,
1104
+ )
1105
+ return _session_from_payload(response_payload(response, 200))
1106
+ except (KeyError, TypeError, ValueError) as error:
1107
+ raise TransportError(_INCOMPLETE_SESSION) from error
1108
+
1109
+ def sign_out(self) -> None:
1110
+ """Revoke and clear the current session."""
1111
+ generation, current = self._client._capture_session()
1112
+ if current is None:
1113
+ return
1114
+ transport = cast("AuthLogoutTransport", self._client._transport)
1115
+ error: VolcanoError | None = None
1116
+ try:
1117
+ response = invoke(
1118
+ transport.auth_logout,
1119
+ authorization=self._client._anon_token(),
1120
+ refresh_token=current.refresh_token,
1121
+ )
1122
+ response_payload(response, 204)
1123
+ except VolcanoError as caught:
1124
+ error = caught
1125
+ if not self._client._clear_session_if_current(generation):
1126
+ raise SessionChangedError from error
1127
+ if error is not None:
1128
+ raise error