codexLB-up 1.25.0b10__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 (827) hide show
  1. app/__init__.py +10 -0
  2. app/admin_cli.py +494 -0
  3. app/cli.py +339 -0
  4. app/codex_sessions_retag.py +487 -0
  5. app/core/__init__.py +0 -0
  6. app/core/audit/__init__.py +0 -0
  7. app/core/audit/service.py +216 -0
  8. app/core/audit/types.py +94 -0
  9. app/core/auth/__init__.py +236 -0
  10. app/core/auth/api_key_cache.py +65 -0
  11. app/core/auth/dashboard_access.py +429 -0
  12. app/core/auth/dashboard_mode.py +171 -0
  13. app/core/auth/dashboard_session_ttl.py +74 -0
  14. app/core/auth/dashboard_users_cache.py +120 -0
  15. app/core/auth/dependencies.py +710 -0
  16. app/core/auth/external_identity.py +78 -0
  17. app/core/auth/guardian.py +374 -0
  18. app/core/auth/models.py +49 -0
  19. app/core/auth/providers/__init__.py +129 -0
  20. app/core/auth/providers/oidc.py +838 -0
  21. app/core/auth/providers/registry.py +118 -0
  22. app/core/auth/refresh.py +394 -0
  23. app/core/auth/step_up.py +117 -0
  24. app/core/auth/totp.py +81 -0
  25. app/core/balancer/__init__.py +71 -0
  26. app/core/balancer/logic.py +1612 -0
  27. app/core/balancer/rendezvous_hash.py +21 -0
  28. app/core/balancer/types.py +21 -0
  29. app/core/bootstrap.py +172 -0
  30. app/core/cache/invalidation.py +426 -0
  31. app/core/clients/__init__.py +0 -0
  32. app/core/clients/codex.py +996 -0
  33. app/core/clients/codex_version.py +187 -0
  34. app/core/clients/codex_version_snapshot.py +2 -0
  35. app/core/clients/files.py +534 -0
  36. app/core/clients/headers.py +29 -0
  37. app/core/clients/http.py +511 -0
  38. app/core/clients/model_fetcher.py +276 -0
  39. app/core/clients/native_egress.py +1304 -0
  40. app/core/clients/oauth.py +477 -0
  41. app/core/clients/proxy.py +6089 -0
  42. app/core/clients/proxy_websocket.py +1411 -0
  43. app/core/clients/rate_limit_reset_credits.py +412 -0
  44. app/core/clients/stream_errors.py +12 -0
  45. app/core/clients/thread_cache_identity.py +347 -0
  46. app/core/clients/usage.py +467 -0
  47. app/core/clock.py +170 -0
  48. app/core/config/__init__.py +0 -0
  49. app/core/config/background_jobs.py +73 -0
  50. app/core/config/context_window_overrides.py +166 -0
  51. app/core/config/dashboard_overrides.py +145 -0
  52. app/core/config/inheritable.py +47 -0
  53. app/core/config/key_fingerprint.py +115 -0
  54. app/core/config/settings.py +872 -0
  55. app/core/config/settings_cache.py +100 -0
  56. app/core/config/spool_retention.py +217 -0
  57. app/core/config/tiers.py +174 -0
  58. app/core/conversation_archive.py +568 -0
  59. app/core/crypto.py +37 -0
  60. app/core/draining.py +11 -0
  61. app/core/errors.py +365 -0
  62. app/core/exceptions.py +155 -0
  63. app/core/handlers/__init__.py +3 -0
  64. app/core/handlers/exceptions.py +478 -0
  65. app/core/http_protocol.py +176 -0
  66. app/core/http_protocol_httptools.py +204 -0
  67. app/core/ingress_limits.py +17 -0
  68. app/core/metadata_store.py +18 -0
  69. app/core/metrics/__init__.py +0 -0
  70. app/core/metrics/middleware.py +74 -0
  71. app/core/metrics/prometheus.py +604 -0
  72. app/core/middleware/__init__.py +25 -0
  73. app/core/middleware/api_firewall.py +111 -0
  74. app/core/middleware/app_version.py +37 -0
  75. app/core/middleware/dashboard_auth_proxy.py +55 -0
  76. app/core/middleware/dashboard_csrf.py +177 -0
  77. app/core/middleware/dashboard_gzip.py +41 -0
  78. app/core/middleware/dashboard_overrides.py +59 -0
  79. app/core/middleware/firewall_cache.py +91 -0
  80. app/core/middleware/inflight.py +126 -0
  81. app/core/middleware/multipart_content_encoding.py +129 -0
  82. app/core/middleware/path_rewrite.py +148 -0
  83. app/core/middleware/request_body_limit.py +196 -0
  84. app/core/middleware/request_decompression.py +209 -0
  85. app/core/middleware/request_id.py +72 -0
  86. app/core/middleware/required_capability_http.py +116 -0
  87. app/core/middleware/trusted_proxy_headers.py +36 -0
  88. app/core/multipart.py +237 -0
  89. app/core/multipart_fields.py +91 -0
  90. app/core/openai/__init__.py +0 -0
  91. app/core/openai/chat_requests.py +493 -0
  92. app/core/openai/chat_responses.py +931 -0
  93. app/core/openai/contracts.py +46 -0
  94. app/core/openai/exceptions.py +24 -0
  95. app/core/openai/host_models.py +14 -0
  96. app/core/openai/images.py +413 -0
  97. app/core/openai/message_coercion.py +376 -0
  98. app/core/openai/model_refresh_scheduler.py +423 -0
  99. app/core/openai/model_registry.py +997 -0
  100. app/core/openai/model_registry_store.py +548 -0
  101. app/core/openai/models.py +172 -0
  102. app/core/openai/parsing.py +97 -0
  103. app/core/openai/requests.py +1980 -0
  104. app/core/openai/strict_schema.py +199 -0
  105. app/core/openai/tool_call_safety.py +99 -0
  106. app/core/openai/v1_requests.py +187 -0
  107. app/core/plan_types.py +90 -0
  108. app/core/prestop.py +202 -0
  109. app/core/rate_limiter/__init__.py +0 -0
  110. app/core/rate_limiter/db_rate_limiter.py +215 -0
  111. app/core/request_locality.py +473 -0
  112. app/core/resilience/__init__.py +0 -0
  113. app/core/resilience/backpressure.py +57 -0
  114. app/core/resilience/bulkhead.py +202 -0
  115. app/core/resilience/circuit_breaker.py +150 -0
  116. app/core/resilience/degradation.py +55 -0
  117. app/core/resilience/loop_lag_monitor.py +60 -0
  118. app/core/resilience/memory_monitor.py +137 -0
  119. app/core/resilience/network_recovery.py +256 -0
  120. app/core/resilience/overload.py +98 -0
  121. app/core/resilience/toggles.py +114 -0
  122. app/core/retention/__init__.py +0 -0
  123. app/core/retention/job.py +240 -0
  124. app/core/retention/scheduler.py +69 -0
  125. app/core/runtime_logging.py +601 -0
  126. app/core/scheduling/__init__.py +0 -0
  127. app/core/scheduling/leader_election.py +993 -0
  128. app/core/scheduling/leader_election_handle.py +25 -0
  129. app/core/server.py +140 -0
  130. app/core/shutdown.py +326 -0
  131. app/core/socket_peer.py +22 -0
  132. app/core/startup.py +41 -0
  133. app/core/timeout_invariants.py +347 -0
  134. app/core/tracing/__init__.py +0 -0
  135. app/core/tracing/otel.py +207 -0
  136. app/core/types.py +6 -0
  137. app/core/upstream_proxy/__init__.py +13 -0
  138. app/core/upstream_proxy/cache.py +130 -0
  139. app/core/upstream_proxy/resolver.py +189 -0
  140. app/core/upstream_proxy/types.py +104 -0
  141. app/core/usage/__init__.py +407 -0
  142. app/core/usage/depletion.py +109 -0
  143. app/core/usage/live_hub.py +41 -0
  144. app/core/usage/live_snapshots.py +174 -0
  145. app/core/usage/logs.py +212 -0
  146. app/core/usage/metadata_scheduler.py +118 -0
  147. app/core/usage/models.py +54 -0
  148. app/core/usage/pricing.py +576 -0
  149. app/core/usage/pricing_catalog.py +241 -0
  150. app/core/usage/pricing_snapshot.json +821 -0
  151. app/core/usage/quota.py +133 -0
  152. app/core/usage/refresh_policy.py +21 -0
  153. app/core/usage/refresh_scheduler.py +713 -0
  154. app/core/usage/reset_credits_refresh_scheduler.py +435 -0
  155. app/core/usage/types.py +168 -0
  156. app/core/utils/__init__.py +0 -0
  157. app/core/utils/json_guards.py +18 -0
  158. app/core/utils/locks.py +33 -0
  159. app/core/utils/masking.py +20 -0
  160. app/core/utils/proxy_env.py +104 -0
  161. app/core/utils/request_id.py +65 -0
  162. app/core/utils/retry.py +77 -0
  163. app/core/utils/shared_future.py +172 -0
  164. app/core/utils/sse.py +286 -0
  165. app/core/utils/time.py +24 -0
  166. app/db/__init__.py +0 -0
  167. app/db/account_identity_lock.py +56 -0
  168. app/db/alembic/__init__.py +1 -0
  169. app/db/alembic/env.py +70 -0
  170. app/db/alembic/revision_ids.py +43 -0
  171. app/db/alembic/versions/20260213_000000_base_schema.py +248 -0
  172. app/db/alembic/versions/20260213_000100_normalize_account_plan_types.py +45 -0
  173. app/db/alembic/versions/20260213_000200_add_request_logs_reasoning_effort.py +45 -0
  174. app/db/alembic/versions/20260213_000300_add_accounts_reset_at.py +45 -0
  175. app/db/alembic/versions/20260213_000400_add_accounts_chatgpt_account_id.py +45 -0
  176. app/db/alembic/versions/20260213_000500_add_dashboard_settings.py +70 -0
  177. app/db/alembic/versions/20260213_000600_add_dashboard_settings_totp.py +64 -0
  178. app/db/alembic/versions/20260213_000700_add_dashboard_settings_password.py +59 -0
  179. app/db/alembic/versions/20260213_000800_add_api_keys.py +87 -0
  180. app/db/alembic/versions/20260214_000000_add_api_key_limits.py +143 -0
  181. app/db/alembic/versions/20260215_000000_add_idx_logs_requested_at.py +38 -0
  182. app/db/alembic/versions/20260218_000000_add_api_key_usage_reservations.py +117 -0
  183. app/db/alembic/versions/20260218_000100_add_import_without_overwrite_and_drop_accounts_email_unique.py +198 -0
  184. app/db/alembic/versions/20260225_000000_add_dashboard_settings_routing_strategy.py +53 -0
  185. app/db/alembic/versions/20260228_020000_align_api_key_limit_enum_types.py +104 -0
  186. app/db/alembic/versions/20260228_030000_add_api_firewall_allowlist.py +42 -0
  187. app/db/alembic/versions/20260306_000000_add_request_logs_service_tier.py +45 -0
  188. app/db/alembic/versions/20260307_000000_add_api_key_enforcement_fields.py +56 -0
  189. app/db/alembic/versions/20260308_000000_add_sqlite_performance_indexes.py +41 -0
  190. app/db/alembic/versions/20260309_000000_add_additional_usage_history.py +71 -0
  191. app/db/alembic/versions/20260309_000000_request_logs_nullable_account_id.py +28 -0
  192. app/db/alembic/versions/20260310_000000_add_request_logs_transport.py +45 -0
  193. app/db/alembic/versions/20260310_000000_fix_postgresql_enum_value_casing.py +79 -0
  194. app/db/alembic/versions/20260310_120000_add_sticky_session_kinds_and_affinity_ttl.py +110 -0
  195. app/db/alembic/versions/20260312_000000_add_additional_usage_quota_key.py +193 -0
  196. app/db/alembic/versions/20260312_000000_split_sticky_sessions_primary_key_by_kind.py +96 -0
  197. app/db/alembic/versions/20260312_010000_merge_additional_usage_and_sticky_session_heads.py +25 -0
  198. app/db/alembic/versions/20260312_020000_merge_request_logs_transport_and_feature_heads.py +25 -0
  199. app/db/alembic/versions/20260312_020000_merge_request_logs_transport_and_sticky_heads.py +25 -0
  200. app/db/alembic/versions/20260312_120000_add_dashboard_upstream_stream_transport.py +62 -0
  201. app/db/alembic/versions/20260313_024500_merge_request_log_transport_heads.py +27 -0
  202. app/db/alembic/versions/20260319_100937_increase_prompt_cache_ttl_to_1800s.py +73 -0
  203. app/db/alembic/versions/20260319_111500_merge_prompt_cache_ttl_and_upstream_transport_heads.py +25 -0
  204. app/db/alembic/versions/20260319_183000_normalize_sqlite_account_status_casing.py +48 -0
  205. app/db/alembic/versions/20260320_000000_add_request_log_requested_actual_tiers.py +51 -0
  206. app/db/alembic/versions/20260321_190000_tighten_dashboard_db_indexes.py +64 -0
  207. app/db/alembic/versions/20260321_210000_merge_request_log_tiers_and_dashboard_index_heads.py +25 -0
  208. app/db/alembic/versions/20260325_000000_add_request_log_cost.py +193 -0
  209. app/db/alembic/versions/20260328_000000_add_rate_limit_attempts.py +48 -0
  210. app/db/alembic/versions/20260328_120000_add_request_log_ttft.py +37 -0
  211. app/db/alembic/versions/20260328_130000_add_audit_logs_table.py +45 -0
  212. app/db/alembic/versions/20260328_140000_add_scheduler_leader_table.py +39 -0
  213. app/db/alembic/versions/20260330_000000_add_cache_locality_settings.py +69 -0
  214. app/db/alembic/versions/20260330_010000_merge_scheduler_leader_and_cache_locality_heads.py +25 -0
  215. app/db/alembic/versions/20260330_020000_add_bridge_ring_members.py +46 -0
  216. app/db/alembic/versions/20260401_000000_add_api_key_enforced_service_tier.py +52 -0
  217. app/db/alembic/versions/20260401_000000_add_cache_invalidation.py +41 -0
  218. app/db/alembic/versions/20260401_020000_merge_cache_invalidation_and_api_key_service_tier_heads.py +22 -0
  219. app/db/alembic/versions/20260402_000000_switch_dashboard_routing_default_to_capacity_weighted.py +66 -0
  220. app/db/alembic/versions/20260403_000000_add_credit_api_key_limit_values.py +44 -0
  221. app/db/alembic/versions/20260406_000000_add_api_key_account_assignments.py +57 -0
  222. app/db/alembic/versions/20260406_010000_add_api_key_assignment_scope_flag.py +75 -0
  223. app/db/alembic/versions/20260407_000000_add_bridge_gateway_safe_mode.py +51 -0
  224. app/db/alembic/versions/20260407_010000_merge_api_key_assignment_and_bridge_gateway_heads.py +25 -0
  225. app/db/alembic/versions/20260408_000000_switch_import_without_overwrite_default_to_true.py +73 -0
  226. app/db/alembic/versions/20260408_010000_merge_import_without_overwrite_and_assignment_heads.py +25 -0
  227. app/db/alembic/versions/20260409_000000_add_http_bridge_sessions.py +130 -0
  228. app/db/alembic/versions/20260409_000000_switch_sticky_threads_and_prefer_earlier_reset_defaults_to_true.py +89 -0
  229. app/db/alembic/versions/20260409_010000_add_dashboard_settings_bootstrap_token.py +57 -0
  230. app/db/alembic/versions/20260409_010000_merge_http_bridge_and_import_without_overwrite_heads.py +25 -0
  231. app/db/alembic/versions/20260409_020000_fix_http_bridge_last_seen_index.py +46 -0
  232. app/db/alembic/versions/20260410_000000_backfill_pristine_dashboard_settings_defaults.py +77 -0
  233. app/db/alembic/versions/20260410_030000_restore_import_without_overwrite_default_true.py +73 -0
  234. app/db/alembic/versions/20260410_040000_merge_dashboard_defaults_and_import_default_heads.py +25 -0
  235. app/db/alembic/versions/20260413_000000_add_accounts_blocked_at.py +44 -0
  236. app/db/alembic/versions/20260415_160000_add_automations_tables.py +189 -0
  237. app/db/alembic/versions/20260415_160000_add_request_logs_response_lookup_index.py +67 -0
  238. app/db/alembic/versions/20260417_000000_add_request_log_plan_type.py +44 -0
  239. app/db/alembic/versions/20260418_190000_add_automation_runs_cycle_key.py +87 -0
  240. app/db/alembic/versions/20260419_000000_add_automation_run_cycle_metadata.py +56 -0
  241. app/db/alembic/versions/20260419_020000_add_automation_run_cycles_snapshot_tables.py +342 -0
  242. app/db/alembic/versions/20260421_000000_add_dashboard_session_ttl_setting.py +51 -0
  243. app/db/alembic/versions/20260421_120000_merge_request_log_lookup_and_plan_type_heads.py +25 -0
  244. app/db/alembic/versions/20260421_130000_merge_automation_and_request_log_heads.py +25 -0
  245. app/db/alembic/versions/20260422_103000_normalize_legacy_automation_run_cycle_keys.py +648 -0
  246. app/db/alembic/versions/20260423_120000_add_api_key_limit_reset_at_index.py +43 -0
  247. app/db/alembic/versions/20260424_000000_merge_dashboard_session_ttl_and_request_log_heads.py +25 -0
  248. app/db/alembic/versions/20260426_000000_add_dashboard_relative_availability_settings.py +68 -0
  249. app/db/alembic/versions/20260427_130000_add_warmup_model_and_request_kind.py +75 -0
  250. app/db/alembic/versions/20260506_000000_add_account_routing_policy.py +37 -0
  251. app/db/alembic/versions/20260509_000000_add_api_key_traffic_class.py +37 -0
  252. app/db/alembic/versions/20260509_010000_add_additional_quota_routing_policies.py +37 -0
  253. app/db/alembic/versions/20260513_000000_add_accounts_alias.py +44 -0
  254. app/db/alembic/versions/20260513_000000_add_api_key_apply_to_codex_model.py +59 -0
  255. app/db/alembic/versions/20260514_000000_add_request_logs_api_key_time_index.py +43 -0
  256. app/db/alembic/versions/20260515_000000_add_prefer_earlier_reset_window.py +47 -0
  257. app/db/alembic/versions/20260515_000000_soft_delete_request_logs_on_account_delete.py +83 -0
  258. app/db/alembic/versions/20260515_020000_add_split_sticky_budget_thresholds.py +62 -0
  259. app/db/alembic/versions/20260516_000000_add_sqlite_hot_path_indexes.py +75 -0
  260. app/db/alembic/versions/20260517_000000_merge_sqlite_hot_path_and_request_log_delete_heads.py +24 -0
  261. app/db/alembic/versions/20260518_000000_add_http_bridge_durable_input_prefix.py +44 -0
  262. app/db/alembic/versions/20260518_010000_merge_http_bridge_and_sqlite_recovery_heads.py +25 -0
  263. app/db/alembic/versions/20260518_120000_add_dashboard_guest_access.py +57 -0
  264. app/db/alembic/versions/20260520_000000_merge_api_key_and_http_bridge_heads.py +26 -0
  265. app/db/alembic/versions/20260520_010000_add_request_logs_api_key_account_index.py +45 -0
  266. app/db/alembic/versions/20260520_010000_merge_automation_and_api_key_heads.py +26 -0
  267. app/db/alembic/versions/20260520_030000_add_quota_planner.py +194 -0
  268. app/db/alembic/versions/20260520_040000_merge_quota_planner_and_request_log_index_heads.py +24 -0
  269. app/db/alembic/versions/20260521_000000_add_account_security_work_authorized.py +46 -0
  270. app/db/alembic/versions/20260521_000000_merge_dashboard_guest_and_api_key_heads.py +26 -0
  271. app/db/alembic/versions/20260521_000000_merge_prefer_reset_window_head.py +26 -0
  272. app/db/alembic/versions/20260521_000000_merge_warmup_and_request_log_index_heads.py +25 -0
  273. app/db/alembic/versions/20260522_000000_add_limit_warmup_trigger.py +195 -0
  274. app/db/alembic/versions/20260524_000000_merge_accounts_alias_and_reset_window_heads.py +24 -0
  275. app/db/alembic/versions/20260525_000000_add_usage_raw_window_latest_index.py +31 -0
  276. app/db/alembic/versions/20260526_000000_add_request_log_failure_metadata.py +100 -0
  277. app/db/alembic/versions/20260531_000000_add_account_workspace_identity.py +39 -0
  278. app/db/alembic/versions/20260531_000000_add_single_account_routing.py +42 -0
  279. app/db/alembic/versions/20260601_000000_merge_relative_availability_and_usage_raw_heads.py +24 -0
  280. app/db/alembic/versions/20260601_010000_add_api_key_usage_sections.py +58 -0
  281. app/db/alembic/versions/20260601_010000_add_routing_policy_persistence.py +67 -0
  282. app/db/alembic/versions/20260601_010000_merge_security_work_and_relative_availability_heads.py +25 -0
  283. app/db/alembic/versions/20260601_010000_merge_split_sticky_and_relative_usage_heads.py +25 -0
  284. app/db/alembic/versions/20260601_010000_merge_warmup_and_relative_availability_heads.py +25 -0
  285. app/db/alembic/versions/20260601_020000_merge_additional_quota_routing_and_relative_availability_heads.py +25 -0
  286. app/db/alembic/versions/20260601_020000_merge_quota_planner_and_relative_availability_heads.py +25 -0
  287. app/db/alembic/versions/20260601_020000_merge_reset_window_and_relative_availability_heads.py +25 -0
  288. app/db/alembic/versions/20260601_020000_merge_routing_policy_and_split_threshold_heads.py +24 -0
  289. app/db/alembic/versions/20260601_020000_merge_warmup_and_request_log_failure_heads.py +25 -0
  290. app/db/alembic/versions/20260601_030000_merge_single_account_and_routing_quota_heads.py +29 -0
  291. app/db/alembic/versions/20260601_040000_merge_security_work_and_routing_consolidation_heads.py +25 -0
  292. app/db/alembic/versions/20260601_050000_merge_quota_planner_and_routing_consolidation_heads.py +25 -0
  293. app/db/alembic/versions/20260602_050000_add_upstream_proxy_routing.py +164 -0
  294. app/db/alembic/versions/20260602_060000_merge_account_workspace_and_failure_heads.py +25 -0
  295. app/db/alembic/versions/20260602_070000_add_request_log_useragent_fields.py +86 -0
  296. app/db/alembic/versions/20260602_070000_merge_quota_planner_and_account_workspace_heads.py +25 -0
  297. app/db/alembic/versions/20260602_080000_merge_upstream_proxy_and_quota_planner_heads.py +25 -0
  298. app/db/alembic/versions/20260602_080000_merge_useragent_and_upstream_proxy_heads.py +24 -0
  299. app/db/alembic/versions/20260603_000000_add_weekly_pace_working_days.py +52 -0
  300. app/db/alembic/versions/20260603_000000_free_account_monthly_window.py +60 -0
  301. app/db/alembic/versions/20260604_000000_add_reauth_required_account_status.py +159 -0
  302. app/db/alembic/versions/20260604_010000_merge_automations_and_reauth_status_heads.py +25 -0
  303. app/db/alembic/versions/20260604_010000_merge_dashboard_guest_and_reauth_status_heads.py +25 -0
  304. app/db/alembic/versions/20260604_010000_merge_useragent_and_reauth_heads.py +24 -0
  305. app/db/alembic/versions/20260607_000000_merge_weekly_monthly_useragent_heads.py +28 -0
  306. app/db/alembic/versions/20260608_000000_add_hide_upstream_quota_from_api_keys.py +50 -0
  307. app/db/alembic/versions/20260611_000000_add_request_log_archive_request_id.py +47 -0
  308. app/db/alembic/versions/20260611_000000_merge_automations_and_weekly_monthly_useragent_heads.py +26 -0
  309. app/db/alembic/versions/20260611_000000_merge_dashboard_guest_and_weekly_useragent_heads.py +26 -0
  310. app/db/alembic/versions/20260611_010000_add_request_log_client_ip.py +57 -0
  311. app/db/alembic/versions/20260611_020000_merge_request_log_archive_and_client_ip_heads.py +26 -0
  312. app/db/alembic/versions/20260611_030000_merge_dashboard_guest_and_request_log_client_ip_heads.py +26 -0
  313. app/db/alembic/versions/20260613_000000_add_accounts_codex_installation_id.py +57 -0
  314. app/db/alembic/versions/20260613_010000_merge_installation_id_and_dashboard_weekly_heads.py +26 -0
  315. app/db/alembic/versions/20260615_000000_merge_automations_and_dashboard_guest_heads.py +26 -0
  316. app/db/alembic/versions/20260623_000000_add_limit_warmup_exhausted_threshold.py +51 -0
  317. app/db/alembic/versions/20260626_000000_add_http_downstream_transport_policy.py +46 -0
  318. app/db/alembic/versions/20260626_010000_add_request_logs_upstream_transport.py +31 -0
  319. app/db/alembic/versions/20260629_000000_add_dashboard_query_hot_path_indexes.py +53 -0
  320. app/db/alembic/versions/20260630_000000_add_limit_warmup_staggered_idle.py +47 -0
  321. app/db/alembic/versions/20260630_000000_merge_request_log_client_ip_and_dashboard_hot_path_heads.py +26 -0
  322. app/db/alembic/versions/20260630_010000_merge_warmup_and_request_log_dashboard_heads.py +26 -0
  323. app/db/alembic/versions/20260630_020000_merge_automations_and_main_heads.py +26 -0
  324. app/db/alembic/versions/20260630_020000_merge_warmup_threshold_and_main_heads.py +26 -0
  325. app/db/alembic/versions/20260630_030000_add_automation_run_model_snapshot.py +59 -0
  326. app/db/alembic/versions/20260630_040000_merge_automation_snapshot_and_warmup_threshold_heads.py +26 -0
  327. app/db/alembic/versions/20260630_050000_add_automation_run_prompt_snapshot.py +52 -0
  328. app/db/alembic/versions/20260701_000000_add_weekly_pace_smoothing_minutes.py +51 -0
  329. app/db/alembic/versions/20260702_000000_add_model_sources.py +176 -0
  330. app/db/alembic/versions/20260705_000000_add_model_source_audio_transcriptions.py +50 -0
  331. app/db/alembic/versions/20260705_000000_harden_dashboard_session_ttl.py +62 -0
  332. app/db/alembic/versions/20260706_000000_add_model_source_audio_per_minute.py +43 -0
  333. app/db/alembic/versions/20260707_000000_merge_model_sources_and_session_ttl.py +24 -0
  334. app/db/alembic/versions/20260707_010000_merge_automations_and_model_sources_heads.py +24 -0
  335. app/db/alembic/versions/20260707_020000_add_automation_job_account_scope.py +125 -0
  336. app/db/alembic/versions/20260709_000000_add_ttft_phase_observability.py +66 -0
  337. app/db/alembic/versions/20260711_000000_add_dashboard_prohibit_fast_mode.py +42 -0
  338. app/db/alembic/versions/20260711_010000_add_account_chatgpt_user_id.py +40 -0
  339. app/db/alembic/versions/20260711_020000_add_dashboard_account_concurrency_caps.py +71 -0
  340. app/db/alembic/versions/20260711_030000_add_limit_warmup_idle_threshold.py +51 -0
  341. app/db/alembic/versions/20260712_010000_add_account_usage_rollups.py +56 -0
  342. app/db/alembic/versions/20260712_020000_add_api_key_usage_rollups.py +53 -0
  343. app/db/alembic/versions/20260713_020000_add_model_registry_snapshot.py +42 -0
  344. app/db/alembic/versions/20260713_040000_add_account_refresh_claims.py +42 -0
  345. app/db/alembic/versions/20260713_040000_add_replica_guardrails.py +64 -0
  346. app/db/alembic/versions/20260713_070000_add_reset_credit_redeem_tables.py +58 -0
  347. app/db/alembic/versions/20260714_000000_add_oauth_flow_states.py +63 -0
  348. app/db/alembic/versions/20260715_000000_add_request_log_queue_latency.py +44 -0
  349. app/db/alembic/versions/20260716_000000_add_oauth_device_flow_slots.py +41 -0
  350. app/db/alembic/versions/20260716_010000_add_dashboard_retention_settings.py +48 -0
  351. app/db/alembic/versions/20260716_010000_add_reset_credit_display_settings.py +73 -0
  352. app/db/alembic/versions/20260717_000000_add_http_bridge_retry_circuits.py +47 -0
  353. app/db/alembic/versions/20260717_000000_merge_retention_and_reset_credit_display_heads.py +26 -0
  354. app/db/alembic/versions/20260717_000000_optimize_dashboard_hot_path_indexes.py +162 -0
  355. app/db/alembic/versions/20260717_000001_merge_retry_circuits_and_dashboard_indexes.py +22 -0
  356. app/db/alembic/versions/20260720_000000_add_request_log_conversation_id.py +57 -0
  357. app/db/alembic/versions/20260722_000000_backfill_request_log_useragent_families.py +40 -0
  358. app/db/alembic/versions/20260724_000000_add_request_usage_time_rollups.py +176 -0
  359. app/db/alembic/versions/20260724_000000_merge_request_log_schema_heads.py +33 -0
  360. app/db/alembic/versions/20260725_000000_add_http_bridge_pending_tool_calls.py +43 -0
  361. app/db/alembic/versions/20260726_000000_add_account_plan_downgrade_observations.py +44 -0
  362. app/db/alembic/versions/20260726_000000_repair_request_usage_rollups_after_merge.py +37 -0
  363. app/db/alembic/versions/20260727_000000_add_sticky_session_continuity_abandoned_at.py +45 -0
  364. app/db/alembic/versions/20260728_000000_merge_pending_tool_calls_and_rollup_repair_heads.py +31 -0
  365. app/db/alembic/versions/20260730_000000_add_api_key_fair_share_threshold.py +44 -0
  366. app/db/alembic/versions/20260730_000000_add_http_bridge_recovery_attempts.py +60 -0
  367. app/db/alembic/versions/20260731_000000_add_capability_lineage_markers.py +38 -0
  368. app/db/alembic/versions/20260803_000000_merge_http_bridge_recovery_and_capability_lineage_heads.py +30 -0
  369. app/db/alembic/versions/20260804_000000_add_http_bridge_operations.py +63 -0
  370. app/db/alembic/versions/20260804_000001_add_global_http_bridge_operation_fingerprint.py +53 -0
  371. app/db/alembic/versions/20260804_230000_add_request_log_connection_request_kind.py +43 -0
  372. app/db/alembic/versions/20260805_000000_add_http_bridge_operation_spool.py +75 -0
  373. app/db/alembic/versions/20260805_000001_finalize_http_bridge_operation_spool.py +65 -0
  374. app/db/alembic/versions/20260806_000000_add_additional_usage_alias_probe_indexes.py +84 -0
  375. app/db/alembic/versions/20260806_000000_add_anonymous_telemetry.py +49 -0
  376. app/db/alembic/versions/20260806_010000_add_conversation_presence_rollup.py +72 -0
  377. app/db/alembic/versions/20260806_020000_add_usage_history_bulk_covering_indexes.py +99 -0
  378. app/db/alembic/versions/20260806_030000_add_api_key_allowed_reasoning_efforts.py +65 -0
  379. app/db/alembic/versions/20260806_120000_add_http_bridge_owner_process_epoch.py +57 -0
  380. app/db/alembic/versions/20260807_000000_merge_http_bridge_operation_spool_and_latest_main.py +24 -0
  381. app/db/alembic/versions/20260808_000000_tune_usage_history_autovacuum.py +54 -0
  382. app/db/alembic/versions/20260810_000000_add_http_bridge_recovery_dispatch_count.py +44 -0
  383. app/db/alembic/versions/20260811_000000_add_hourly_rollup_cancelled_count.py +92 -0
  384. app/db/alembic/versions/20260812_000000_merge_recovery_dispatch_and_hourly_cancelled_heads.py +25 -0
  385. app/db/alembic/versions/20260812_120000_add_sticky_abandonment_scope.py +43 -0
  386. app/db/alembic/versions/20260813_000000_add_file_account_pins.py +40 -0
  387. app/db/alembic/versions/20260816_000000_add_account_pending_deletion.py +81 -0
  388. app/db/alembic/versions/20260816_000000_add_model_source_embeddings.py +50 -0
  389. app/db/alembic/versions/20260821_000000_add_retry_circuit_admission_generation.py +49 -0
  390. app/db/alembic/versions/20260826_000000_add_http_bridge_event_chunks.py +107 -0
  391. app/db/alembic/versions/20260828_000000_add_accounts_chatgpt_identity_index.py +55 -0
  392. app/db/alembic/versions/20260830_000000_add_quota_warmup_claim_expiry.py +83 -0
  393. app/db/alembic/versions/20260908_000000_add_guest_session_generation.py +37 -0
  394. app/db/alembic/versions/20260908_000000_add_subscription_overflow.py +140 -0
  395. app/db/alembic/versions/20260908_000000_replace_upstream_stream_transport_default_sentinel.py +50 -0
  396. app/db/alembic/versions/20260908_020000_merge_overflow_transport_heads.py +27 -0
  397. app/db/alembic/versions/20260909_000000_add_dashboard_roles.py +72 -0
  398. app/db/alembic/versions/20260909_010000_add_dashboard_users.py +183 -0
  399. app/db/alembic/versions/20260909_020000_reproject_compat_admin_credentials.py +105 -0
  400. app/db/alembic/versions/20260909_030000_add_audit_actor_columns.py +103 -0
  401. app/db/alembic/versions/20260909_030000_dashboard_resilience_toggle_settings.py +63 -0
  402. app/db/alembic/versions/20260909_040000_add_dashboard_user_invites.py +54 -0
  403. app/db/alembic/versions/20260909_040000_dashboard_timeout_settings.py +68 -0
  404. app/db/alembic/versions/20260909_050000_dashboard_routing_overload_settings.py +65 -0
  405. app/db/alembic/versions/20260909_060000_add_report_rollup.py +74 -0
  406. app/db/alembic/versions/20260909_070000_automation_run_claim_budget.py +50 -0
  407. app/db/alembic/versions/20260909_080000_dashboard_stream_bridge_budgets.py +62 -0
  408. app/db/alembic/versions/20260909_090000_dashboard_background_job_toggles.py +63 -0
  409. app/db/alembic/versions/20260909_100000_dashboard_codex_prewarm.py +49 -0
  410. app/db/alembic/versions/20260909_110000_model_context_window_overrides.py +45 -0
  411. app/db/alembic/versions/20260909_120000_dashboard_conversation_archive.py +48 -0
  412. app/db/alembic/versions/20260909_130000_add_request_logs_live_facet_indexes.py +96 -0
  413. app/db/alembic/versions/20260910_000000_add_totp_required_for_admin_role.py +44 -0
  414. app/db/alembic/versions/20260910_000000_request_logs_missing_cost_index.py +52 -0
  415. app/db/alembic/versions/20260910_010000_add_dashboard_auth_providers.py +134 -0
  416. app/db/alembic/versions/20260910_010000_dashboard_spool_retention.py +52 -0
  417. app/db/alembic/versions/20260910_020000_add_dashboard_role_mappings.py +74 -0
  418. app/db/alembic/versions/20260910_143000_request_log_affinity.py +28 -0
  419. app/db/alembic/versions/20260910_180000_merge_affinity_guest_heads.py +17 -0
  420. app/db/alembic/versions/20260910_200000_merge_affinity_identity_heads.py +17 -0
  421. app/db/alembic/versions/20260910_220000_merge_affinity_invite_heads.py +17 -0
  422. app/db/alembic/versions/20260911_000000_model_source_pins_kind_expires_index.py +43 -0
  423. app/db/alembic/versions/20260911_010000_merge_pin_index_and_affinity_heads.py +17 -0
  424. app/db/alembic/versions/20260911_020000_add_http_bridge_terminal_append_phase.py +54 -0
  425. app/db/alembic/versions/20260911_030000_add_local_login_policy.py +48 -0
  426. app/db/alembic/versions/20260911_040000_add_thread_cache_identity_mode.py +48 -0
  427. app/db/alembic/versions/20260911_060000_add_bridge_session_continuity_abandonment.py +40 -0
  428. app/db/alembic/versions/20260912_000000_merge_thread_cache_and_bridge_retirement_heads.py +22 -0
  429. app/db/alembic/versions/20260912_010000_drop_legacy_dashboard_credentials.py +140 -0
  430. app/db/alembic/versions/20260913_000000_add_oidc_provider_flow.py +134 -0
  431. app/db/alembic/versions/20260914_000000_add_scim_tokens.py +78 -0
  432. app/db/alembic/versions/20260914_000000_drop_subscription_overflow_schema.py +132 -0
  433. app/db/alembic/versions/20260918_000000_merge_scim_and_overflow_heads.py +17 -0
  434. app/db/alembic/versions/__init__.py +1 -0
  435. app/db/backup.py +64 -0
  436. app/db/migrate.py +1249 -0
  437. app/db/migration_lock.py +160 -0
  438. app/db/migration_url.py +18 -0
  439. app/db/models.py +3100 -0
  440. app/db/recover.py +244 -0
  441. app/db/session.py +1295 -0
  442. app/db/snapshot.py +46 -0
  443. app/db/sqlite_lock_retry.py +190 -0
  444. app/db/sqlite_utils.py +549 -0
  445. app/dependencies.py +462 -0
  446. app/main.py +1240 -0
  447. app/modules/__init__.py +0 -0
  448. app/modules/accounts/__init__.py +0 -0
  449. app/modules/accounts/api.py +426 -0
  450. app/modules/accounts/auth_manager.py +1439 -0
  451. app/modules/accounts/background_repository.py +160 -0
  452. app/modules/accounts/deletion.py +540 -0
  453. app/modules/accounts/mappers.py +654 -0
  454. app/modules/accounts/refresh_claims.py +352 -0
  455. app/modules/accounts/repository.py +1679 -0
  456. app/modules/accounts/schemas.py +308 -0
  457. app/modules/accounts/service.py +809 -0
  458. app/modules/accounts/usage_rollup.py +486 -0
  459. app/modules/accounts/usage_rollup_scheduler.py +75 -0
  460. app/modules/accounts/usage_time_rollup.py +1037 -0
  461. app/modules/accounts/usage_time_rollup_read.py +522 -0
  462. app/modules/api_keys/__init__.py +1 -0
  463. app/modules/api_keys/api.py +344 -0
  464. app/modules/api_keys/last_used_coalescer.py +216 -0
  465. app/modules/api_keys/limit_windows.py +41 -0
  466. app/modules/api_keys/repository.py +1200 -0
  467. app/modules/api_keys/reset_scheduler.py +85 -0
  468. app/modules/api_keys/schemas.py +135 -0
  469. app/modules/api_keys/service.py +2123 -0
  470. app/modules/audit/__init__.py +0 -0
  471. app/modules/audit/api.py +88 -0
  472. app/modules/audit/repository.py +74 -0
  473. app/modules/audit/schemas.py +33 -0
  474. app/modules/audit/service.py +71 -0
  475. app/modules/auth_providers/__init__.py +0 -0
  476. app/modules/auth_providers/api.py +127 -0
  477. app/modules/auth_providers/config.py +343 -0
  478. app/modules/auth_providers/repository.py +101 -0
  479. app/modules/auth_providers/schemas.py +88 -0
  480. app/modules/auth_providers/seed.py +105 -0
  481. app/modules/auth_providers/service.py +289 -0
  482. app/modules/automations/__init__.py +1 -0
  483. app/modules/automations/api.py +369 -0
  484. app/modules/automations/repository.py +1896 -0
  485. app/modules/automations/scheduler.py +107 -0
  486. app/modules/automations/schemas.py +158 -0
  487. app/modules/automations/service.py +2548 -0
  488. app/modules/cache_isolation_probe/__init__.py +0 -0
  489. app/modules/cache_isolation_probe/api.py +188 -0
  490. app/modules/cache_isolation_probe/prefix.py +144 -0
  491. app/modules/cache_isolation_probe/schemas.py +94 -0
  492. app/modules/cache_isolation_probe/sender.py +229 -0
  493. app/modules/cache_isolation_probe/service.py +525 -0
  494. app/modules/conversation_archive/__init__.py +1 -0
  495. app/modules/conversation_archive/api.py +101 -0
  496. app/modules/conversation_archive/schemas.py +28 -0
  497. app/modules/conversation_archive/service.py +165 -0
  498. app/modules/dashboard/__init__.py +1 -0
  499. app/modules/dashboard/api.py +106 -0
  500. app/modules/dashboard/builders.py +107 -0
  501. app/modules/dashboard/repository.py +304 -0
  502. app/modules/dashboard/schemas.py +148 -0
  503. app/modules/dashboard/service.py +534 -0
  504. app/modules/dashboard/timeframes.py +19 -0
  505. app/modules/dashboard/weekly_pace.py +617 -0
  506. app/modules/dashboard_auth/__init__.py +1 -0
  507. app/modules/dashboard_auth/api.py +1344 -0
  508. app/modules/dashboard_auth/oidc_api.py +753 -0
  509. app/modules/dashboard_auth/oidc_flows.py +330 -0
  510. app/modules/dashboard_auth/repository.py +452 -0
  511. app/modules/dashboard_auth/schemas.py +232 -0
  512. app/modules/dashboard_auth/service.py +1384 -0
  513. app/modules/dashboard_roles/__init__.py +0 -0
  514. app/modules/dashboard_roles/api.py +64 -0
  515. app/modules/dashboard_roles/repository.py +54 -0
  516. app/modules/dashboard_roles/schemas.py +29 -0
  517. app/modules/dashboard_roles/seed.py +80 -0
  518. app/modules/dashboard_roles/service.py +142 -0
  519. app/modules/dashboard_users/__init__.py +0 -0
  520. app/modules/dashboard_users/api.py +278 -0
  521. app/modules/dashboard_users/break_glass.py +169 -0
  522. app/modules/dashboard_users/credentials.py +18 -0
  523. app/modules/dashboard_users/identity_resolver.py +665 -0
  524. app/modules/dashboard_users/repository.py +725 -0
  525. app/modules/dashboard_users/schemas.py +117 -0
  526. app/modules/dashboard_users/service.py +1054 -0
  527. app/modules/firewall/__init__.py +1 -0
  528. app/modules/firewall/api.py +78 -0
  529. app/modules/firewall/repository.py +51 -0
  530. app/modules/firewall/schemas.py +28 -0
  531. app/modules/firewall/service.py +93 -0
  532. app/modules/fleet/__init__.py +1 -0
  533. app/modules/fleet/api.py +177 -0
  534. app/modules/fleet/mappers.py +56 -0
  535. app/modules/fleet/observability.py +372 -0
  536. app/modules/fleet/schemas.py +119 -0
  537. app/modules/health/__init__.py +0 -0
  538. app/modules/health/api.py +246 -0
  539. app/modules/health/schemas.py +27 -0
  540. app/modules/limit_warmup/__init__.py +1 -0
  541. app/modules/limit_warmup/repository.py +159 -0
  542. app/modules/limit_warmup/service.py +1001 -0
  543. app/modules/model_sources/__init__.py +1 -0
  544. app/modules/model_sources/api.py +99 -0
  545. app/modules/model_sources/catalog.py +307 -0
  546. app/modules/model_sources/forwarding.py +1435 -0
  547. app/modules/model_sources/projection.py +55 -0
  548. app/modules/model_sources/repository.py +201 -0
  549. app/modules/model_sources/schemas.py +79 -0
  550. app/modules/model_sources/selection.py +166 -0
  551. app/modules/model_sources/service.py +236 -0
  552. app/modules/oauth/__init__.py +0 -0
  553. app/modules/oauth/api.py +101 -0
  554. app/modules/oauth/repository.py +238 -0
  555. app/modules/oauth/schemas.py +49 -0
  556. app/modules/oauth/service.py +1196 -0
  557. app/modules/oauth/templates/oauth_success.html +122 -0
  558. app/modules/proxy/__init__.py +0 -0
  559. app/modules/proxy/_load_balancer/__init__.py +1 -0
  560. app/modules/proxy/_load_balancer/error_rate.py +116 -0
  561. app/modules/proxy/_load_balancer/latency_cohort.py +154 -0
  562. app/modules/proxy/_load_balancer/model_eligibility.py +250 -0
  563. app/modules/proxy/_load_balancer/opportunistic_admission.py +350 -0
  564. app/modules/proxy/_load_balancer/overload_backoff.py +394 -0
  565. app/modules/proxy/_load_balancer/sticky_selection.py +2417 -0
  566. app/modules/proxy/_load_balancer/throughput_cohort.py +233 -0
  567. app/modules/proxy/_load_balancer/ttft_cohort.py +214 -0
  568. app/modules/proxy/_load_balancer/tunables.py +97 -0
  569. app/modules/proxy/_load_balancer/types.py +96 -0
  570. app/modules/proxy/_load_balancer/unbound_selection.py +534 -0
  571. app/modules/proxy/_service/__init__.py +6 -0
  572. app/modules/proxy/_service/api_key_usage.py +745 -0
  573. app/modules/proxy/_service/clock_budget.py +38 -0
  574. app/modules/proxy/_service/codex_control.py +611 -0
  575. app/modules/proxy/_service/compact.py +2211 -0
  576. app/modules/proxy/_service/file_ops.py +749 -0
  577. app/modules/proxy/_service/http_bridge/__init__.py +3 -0
  578. app/modules/proxy/_service/http_bridge/accepted_replay.py +331 -0
  579. app/modules/proxy/_service/http_bridge/account_sessions.py +57 -0
  580. app/modules/proxy/_service/http_bridge/activity.py +178 -0
  581. app/modules/proxy/_service/http_bridge/helpers.py +3959 -0
  582. app/modules/proxy/_service/http_bridge/mixin.py +2435 -0
  583. app/modules/proxy/_service/http_bridge/owner_forwarding.py +609 -0
  584. app/modules/proxy/_service/http_bridge/protocol.py +167 -0
  585. app/modules/proxy/_service/http_bridge/proxy_failover.py +58 -0
  586. app/modules/proxy/_service/http_bridge/quarantine.py +443 -0
  587. app/modules/proxy/_service/http_bridge/request_submit.py +4582 -0
  588. app/modules/proxy/_service/http_bridge/retry_circuit.py +2442 -0
  589. app/modules/proxy/_service/http_bridge/service_stubs.py +492 -0
  590. app/modules/proxy/_service/http_bridge/session_registry.py +778 -0
  591. app/modules/proxy/_service/http_bridge/streaming.py +5328 -0
  592. app/modules/proxy/_service/http_bridge/upstream_events.py +4538 -0
  593. app/modules/proxy/_service/observability.py +410 -0
  594. app/modules/proxy/_service/rate_limit.py +361 -0
  595. app/modules/proxy/_service/realtime_live.py +655 -0
  596. app/modules/proxy/_service/refresh.py +154 -0
  597. app/modules/proxy/_service/request_log.py +585 -0
  598. app/modules/proxy/_service/response_create.py +930 -0
  599. app/modules/proxy/_service/streaming/__init__.py +3 -0
  600. app/modules/proxy/_service/streaming/helpers.py +1317 -0
  601. app/modules/proxy/_service/streaming/mixin.py +1100 -0
  602. app/modules/proxy/_service/streaming/protocol.py +32 -0
  603. app/modules/proxy/_service/streaming/retry.py +3762 -0
  604. app/modules/proxy/_service/support.py +2122 -0
  605. app/modules/proxy/_service/transcribe.py +434 -0
  606. app/modules/proxy/_service/warmup.py +483 -0
  607. app/modules/proxy/_service/websocket/__init__.py +3 -0
  608. app/modules/proxy/_service/websocket/helpers.py +2360 -0
  609. app/modules/proxy/_service/websocket/mixin.py +7285 -0
  610. app/modules/proxy/_service/websocket/protocol.py +74 -0
  611. app/modules/proxy/account_cache.py +229 -0
  612. app/modules/proxy/account_eligibility.py +87 -0
  613. app/modules/proxy/additional_model_limits.py +40 -0
  614. app/modules/proxy/affinity.py +830 -0
  615. app/modules/proxy/affinity_observation.py +101 -0
  616. app/modules/proxy/api.py +10254 -0
  617. app/modules/proxy/api_key_usage.py +113 -0
  618. app/modules/proxy/cap_partitioning.py +280 -0
  619. app/modules/proxy/capability_lineage.py +65 -0
  620. app/modules/proxy/capability_lineage_repository.py +82 -0
  621. app/modules/proxy/capability_routing.py +253 -0
  622. app/modules/proxy/continuity.py +112 -0
  623. app/modules/proxy/downstream_delivery.py +277 -0
  624. app/modules/proxy/durable_bridge_coordinator.py +1217 -0
  625. app/modules/proxy/durable_bridge_repository.py +4516 -0
  626. app/modules/proxy/durable_bridge_runtime.py +9 -0
  627. app/modules/proxy/durable_bridge_transcript_codec.py +122 -0
  628. app/modules/proxy/fair_share.py +131 -0
  629. app/modules/proxy/file_pin_repository.py +210 -0
  630. app/modules/proxy/helpers.py +439 -0
  631. app/modules/proxy/http_bridge_event_batcher.py +613 -0
  632. app/modules/proxy/http_bridge_forwarding.py +797 -0
  633. app/modules/proxy/http_continuation.py +76 -0
  634. app/modules/proxy/images_observability.py +62 -0
  635. app/modules/proxy/images_service.py +1054 -0
  636. app/modules/proxy/load_balancer.py +3016 -0
  637. app/modules/proxy/rate_limit_cache.py +46 -0
  638. app/modules/proxy/replay_safety.py +1063 -0
  639. app/modules/proxy/repo_bundle.py +31 -0
  640. app/modules/proxy/request_policy.py +1054 -0
  641. app/modules/proxy/ring_membership.py +251 -0
  642. app/modules/proxy/schemas.py +345 -0
  643. app/modules/proxy/selection_errors.py +41 -0
  644. app/modules/proxy/service.py +2600 -0
  645. app/modules/proxy/source_admission.py +125 -0
  646. app/modules/proxy/source_dispatch.py +999 -0
  647. app/modules/proxy/sticky_repository.py +831 -0
  648. app/modules/proxy/thread_anchors.py +491 -0
  649. app/modules/proxy/tool_call_dedupe.py +802 -0
  650. app/modules/proxy/types.py +54 -0
  651. app/modules/proxy/work_admission.py +121 -0
  652. app/modules/quota_planner/__init__.py +1 -0
  653. app/modules/quota_planner/api.py +276 -0
  654. app/modules/quota_planner/logic.py +743 -0
  655. app/modules/quota_planner/repository.py +722 -0
  656. app/modules/quota_planner/scheduler.py +212 -0
  657. app/modules/quota_planner/schemas.py +102 -0
  658. app/modules/quota_planner/warmup.py +693 -0
  659. app/modules/rate_limit_reset_credits/__init__.py +0 -0
  660. app/modules/rate_limit_reset_credits/api.py +601 -0
  661. app/modules/rate_limit_reset_credits/redeem_coordination.py +274 -0
  662. app/modules/rate_limit_reset_credits/store.py +114 -0
  663. app/modules/reports/__init__.py +1 -0
  664. app/modules/reports/api.py +134 -0
  665. app/modules/reports/cache.py +74 -0
  666. app/modules/reports/filters.py +27 -0
  667. app/modules/reports/repository.py +525 -0
  668. app/modules/reports/rollup.py +150 -0
  669. app/modules/reports/rollup_read.py +148 -0
  670. app/modules/reports/schemas.py +123 -0
  671. app/modules/reports/service.py +287 -0
  672. app/modules/reports/thread_identity.py +256 -0
  673. app/modules/request_logs/__init__.py +0 -0
  674. app/modules/request_logs/api.py +224 -0
  675. app/modules/request_logs/cost_backfill.py +154 -0
  676. app/modules/request_logs/mappers.py +97 -0
  677. app/modules/request_logs/repository.py +1765 -0
  678. app/modules/request_logs/schemas.py +145 -0
  679. app/modules/request_logs/service.py +348 -0
  680. app/modules/role_mappings/__init__.py +0 -0
  681. app/modules/role_mappings/api.py +206 -0
  682. app/modules/role_mappings/matching.py +55 -0
  683. app/modules/role_mappings/repository.py +106 -0
  684. app/modules/role_mappings/schemas.py +67 -0
  685. app/modules/role_mappings/service.py +334 -0
  686. app/modules/runtime/__init__.py +1 -0
  687. app/modules/runtime/api.py +18 -0
  688. app/modules/runtime/schemas.py +14 -0
  689. app/modules/runtime/service.py +218 -0
  690. app/modules/scim/__init__.py +1 -0
  691. app/modules/scim/api.py +194 -0
  692. app/modules/scim/dependencies.py +112 -0
  693. app/modules/scim/errors.py +77 -0
  694. app/modules/scim/management_api.py +156 -0
  695. app/modules/scim/repository.py +212 -0
  696. app/modules/scim/schemas.py +145 -0
  697. app/modules/scim/service.py +786 -0
  698. app/modules/scim/tokens.py +43 -0
  699. app/modules/settings/__init__.py +1 -0
  700. app/modules/settings/api.py +1677 -0
  701. app/modules/settings/repository.py +606 -0
  702. app/modules/settings/schemas.py +496 -0
  703. app/modules/settings/service.py +769 -0
  704. app/modules/shared/__init__.py +0 -0
  705. app/modules/shared/schemas.py +22 -0
  706. app/modules/sticky_sessions/__init__.py +1 -0
  707. app/modules/sticky_sessions/api.py +118 -0
  708. app/modules/sticky_sessions/cleanup_scheduler.py +487 -0
  709. app/modules/sticky_sessions/schemas.py +78 -0
  710. app/modules/sticky_sessions/service.py +196 -0
  711. app/modules/telemetry/__init__.py +5 -0
  712. app/modules/telemetry/api.py +115 -0
  713. app/modules/telemetry/clients.py +62 -0
  714. app/modules/telemetry/consent.py +115 -0
  715. app/modules/telemetry/scheduler.py +85 -0
  716. app/modules/telemetry/schemas.py +163 -0
  717. app/modules/telemetry/sender.py +221 -0
  718. app/modules/telemetry/snapshot.py +490 -0
  719. app/modules/usage/__init__.py +0 -0
  720. app/modules/usage/additional_quota_keys.py +379 -0
  721. app/modules/usage/api.py +45 -0
  722. app/modules/usage/background_repository.py +147 -0
  723. app/modules/usage/builders.py +559 -0
  724. app/modules/usage/depletion_service.py +277 -0
  725. app/modules/usage/live_ingest.py +356 -0
  726. app/modules/usage/mappers.py +29 -0
  727. app/modules/usage/plan_downgrade_observations.py +488 -0
  728. app/modules/usage/repository.py +1890 -0
  729. app/modules/usage/schemas.py +68 -0
  730. app/modules/usage/service.py +102 -0
  731. app/modules/usage/updater.py +1488 -0
  732. app/static/assets/Trans-Cj-J9mVA.js +1 -0
  733. app/static/assets/access-page-DHzZiXZi.js +1 -0
  734. app/static/assets/account-cost-donut-DGhfA4U8.js +1 -0
  735. app/static/assets/account-identifiers-CxbdLshZ.js +1 -0
  736. app/static/assets/account-status-DIsU5sUS.js +1 -0
  737. app/static/assets/account-trend-chart-BptlfwwQ.js +1 -0
  738. app/static/assets/accounts-page-Bbai8ift.js +3 -0
  739. app/static/assets/api-Dwa7XxPe.js +1 -0
  740. app/static/assets/api-client-dugX1Pti.js +55 -0
  741. app/static/assets/api-key-create-dialog-DnRm0oYN.js +1 -0
  742. app/static/assets/api-key-created-dialog-B6jkDG9f.js +1 -0
  743. app/static/assets/api-key-edit-dialog-Ck3Bnc3V.js +1 -0
  744. app/static/assets/api-trend-chart-BchCw7Hj.js +1 -0
  745. app/static/assets/apis-page-BvXz9c6i.js +2 -0
  746. app/static/assets/arrow-up-Dqh_KzJo.js +1 -0
  747. app/static/assets/arrow-up-down-LBRgVDGY.js +1 -0
  748. app/static/assets/automations-page-DQgNAJOR.js +3 -0
  749. app/static/assets/badge-DqMb9es0.js +1 -0
  750. app/static/assets/blur-email-HEvKagG2.js +1 -0
  751. app/static/assets/button-BjVmmiGW.js +1 -0
  752. app/static/assets/checkbox-apsl9vzk.js +1 -0
  753. app/static/assets/chevron-left-1d_pHVa5.js +1 -0
  754. app/static/assets/circle-alert-BS0xd_o1.js +1 -0
  755. app/static/assets/clsx-DB0hHKMi.js +1 -0
  756. app/static/assets/colors-BBy8GEtr.js +1 -0
  757. app/static/assets/copy-button-D7nAvOKR.js +1 -0
  758. app/static/assets/cost-per-day-chart-YdqlkZVM.js +1 -0
  759. app/static/assets/createLucideIcon-DBLzLNh2.js +1 -0
  760. app/static/assets/dashboard-page-CSdhBy0f.js +2 -0
  761. app/static/assets/distribution-metric-format-yZTy1ZEu.js +1 -0
  762. app/static/assets/donut-chart-Bxc69cra.js +1 -0
  763. app/static/assets/download-kQteIcsB.js +1 -0
  764. app/static/assets/ellipsis-B_5OgIre.js +1 -0
  765. app/static/assets/empty-state-JcA7tc8m.js +1 -0
  766. app/static/assets/es2015-bMH8YKZT.js +41 -0
  767. app/static/assets/es6-B264ni6W.js +69 -0
  768. app/static/assets/external-link-UVAOgMQ0.js +1 -0
  769. app/static/assets/i18n-BWqZ9Ua2.js +1 -0
  770. app/static/assets/inbox-B_RM2s1J.js +1 -0
  771. app/static/assets/index-DIpd264Z.js +23 -0
  772. app/static/assets/index-DMeLKRJx.css +2 -0
  773. app/static/assets/inherit-badge-QhTYVaU6.js +1 -0
  774. app/static/assets/invite-dialog-0CYh0GiQ.js +1 -0
  775. app/static/assets/iso-Bpe5Ihbb.js +1 -0
  776. app/static/assets/label-CGaLmLNf.js +1 -0
  777. app/static/assets/lazy-recharts-Pv8p9ArM.js +2 -0
  778. app/static/assets/loading-overlay-CzKQfHLI.js +1 -0
  779. app/static/assets/mini-quota-bar-cGT_t8Ae.js +1 -0
  780. app/static/assets/model-distribution-donut-BKjAfT48.js +1 -0
  781. app/static/assets/model-source-multi-select-D2d06Vc7.js +1 -0
  782. app/static/assets/multi-select-filter-KIA5qU6Z.js +1 -0
  783. app/static/assets/oauth-dialog-XeaGGDjS.js +1 -0
  784. app/static/assets/pagination-controls-D1Ypd0RU.js +1 -0
  785. app/static/assets/payload-CIYnGZz9.js +1 -0
  786. app/static/assets/queue-wait-chart-VoV7Yg9L.js +1 -0
  787. app/static/assets/report-chart-card-BXDliwcc.js +1 -0
  788. app/static/assets/reports-page-CGCJeMHG.js +3 -0
  789. app/static/assets/reset-credit-confirm-dialog-QOifTnVB.js +1 -0
  790. app/static/assets/rolldown-runtime-hePW80VL.js +1 -0
  791. app/static/assets/search-HfhqwERt.js +1 -0
  792. app/static/assets/select-Cl33bz-g.js +1 -0
  793. app/static/assets/settings-page-mZj01HYl.js +2 -0
  794. app/static/assets/shim-CZwyM4Q7.js +1 -0
  795. app/static/assets/skeleton-C_EUc4Rp.js +1 -0
  796. app/static/assets/sparkline-chart-DdNNsddM.js +1 -0
  797. app/static/assets/status-badge-CHHA5X6c.js +1 -0
  798. app/static/assets/switch-CzxgokcM.js +1 -0
  799. app/static/assets/table-DXaNSQ0G.js +1 -0
  800. app/static/assets/time-to-first-token-chart--68L0u_v.js +1 -0
  801. app/static/assets/tokens-per-day-chart-Cs82BFuE.js +1 -0
  802. app/static/assets/tokens-per-second-chart-AD2dfOn6.js +1 -0
  803. app/static/assets/totp-settings-CRHtxQ7j.js +1 -0
  804. app/static/assets/trash-D3KyWr1h.js +1 -0
  805. app/static/assets/use-account-quota-display-BPmrTBTC.js +1 -0
  806. app/static/assets/use-accounts-PWlVGw3z.js +1 -0
  807. app/static/assets/use-auth-CuDlW3iC.js +1 -0
  808. app/static/assets/use-chart-colors-DIu6tClI.js +1 -0
  809. app/static/assets/use-model-sources-Bul24JBu.js +1 -0
  810. app/static/assets/use-models-DUCPUuZg.js +1 -0
  811. app/static/assets/use-reduced-motion-hAm5r6_d.js +1 -0
  812. app/static/assets/useTranslation--56nHhlH.js +1 -0
  813. app/static/assets/useragent-distribution-donut-Dup6sf_n.js +1 -0
  814. app/static/assets/users-uIC3TIlE.js +1 -0
  815. app/static/assets/vendor-query-_bHZuxEx.js +1 -0
  816. app/static/assets/vendor-react-BVL0YZPW.js +9 -0
  817. app/static/favicon.svg +10 -0
  818. app/static/fonts/GeistSans-Variable.woff2 +0 -0
  819. app/static/fonts/jetbrains-mono-latin-ext.woff2 +0 -0
  820. app/static/fonts/jetbrains-mono-latin.woff2 +0 -0
  821. app/static/index.html +29 -0
  822. codexlb_up-1.25.0b10.dist-info/METADATA +124 -0
  823. codexlb_up-1.25.0b10.dist-info/RECORD +827 -0
  824. codexlb_up-1.25.0b10.dist-info/WHEEL +4 -0
  825. codexlb_up-1.25.0b10.dist-info/entry_points.txt +3 -0
  826. codexlb_up-1.25.0b10.dist-info/licenses/LICENSE +21 -0
  827. config/additional_quota_registry.json +11 -0
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-hePW80VL.js";import{C as e,S as t}from"./vendor-query-_bHZuxEx.js";import{c as n}from"./button-BjVmmiGW.js";e();var r=t();function i({className:e,...t}){return(0,r.jsx)(`div`,{"data-slot":`table-container`,className:`relative w-full overflow-x-auto`,children:(0,r.jsx)(`table`,{"data-slot":`table`,className:n(`w-full caption-bottom text-sm`,e),...t})})}function a({className:e,...t}){return(0,r.jsx)(`thead`,{"data-slot":`table-header`,className:n(`[&_tr]:border-b`,e),...t})}function o({className:e,...t}){return(0,r.jsx)(`tbody`,{"data-slot":`table-body`,className:n(`[&_tr:last-child]:border-0`,e),...t})}function s({className:e,...t}){return(0,r.jsx)(`tr`,{"data-slot":`table-row`,className:n(`hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors`,e),...t})}function c({className:e,...t}){return(0,r.jsx)(`th`,{"data-slot":`table-head`,className:n(`text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t})}function l({className:e,...t}){return(0,r.jsx)(`td`,{"data-slot":`table-cell`,className:n(`p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t})}export{a,c as i,o as n,s as o,l as r,i as t};
@@ -0,0 +1 @@
1
+ import{S as e}from"./vendor-query-_bHZuxEx.js";import{n as t,t as n}from"./report-chart-card-BXDliwcc.js";import{t as r}from"./useTranslation--56nHhlH.js";import{c as i,d as a,f as o,n as s,r as c,t as l,u}from"./lazy-recharts-Pv8p9ArM.js";import{t as d}from"./reports-page-CGCJeMHG.js";var f=e();function p(e){return`${(e/1e3).toFixed(1)}s`}function m({startDate:e,endDate:m,data:h}){let{t:g}=r(),_=d(e,m,h).map(e=>({date:e.date.slice(5),ttft:e.medianTtftMs??0}));return(0,f.jsx)(n,{title:g(`reports.charts.timeToFirstToken`),empty:h.length===0,children:(0,f.jsx)(i,{width:`100%`,height:`100%`,children:(0,f.jsxs)(s,{data:_,margin:{top:5,right:10,left:10,bottom:0},children:[(0,f.jsx)(`defs`,{children:(0,f.jsxs)(`linearGradient`,{id:`ttftGrad`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,f.jsx)(`stop`,{offset:`0%`,stopColor:`#f97316`,stopOpacity:.3}),(0,f.jsx)(`stop`,{offset:`100%`,stopColor:`#f97316`,stopOpacity:.05})]})}),(0,f.jsx)(c,{strokeDasharray:`3 3`,stroke:`hsl(var(--border))`,vertical:!1}),(0,f.jsx)(a,{dataKey:`date`,tick:{fontSize:10,fill:`var(--muted-foreground)`},axisLine:!1,tickLine:!1}),(0,f.jsx)(o,{tick:{fontSize:10,fill:`var(--muted-foreground)`},axisLine:!1,tickLine:!1,tickFormatter:p}),(0,f.jsx)(u,{content:(0,f.jsx)(t,{names:{ttft:g(`reports.charts.medianTtft`)},formatValue:p})}),(0,f.jsx)(l,{type:`monotone`,dataKey:`ttft`,stroke:`#f97316`,strokeWidth:2,fill:`url(#ttftGrad)`,dot:!1,activeDot:{r:4,strokeWidth:1.5,fill:`hsl(var(--popover))`}})]})})})}export{m as TimeToFirstTokenChart};
@@ -0,0 +1 @@
1
+ import{S as e}from"./vendor-query-_bHZuxEx.js";import{n as t,t as n}from"./report-chart-card-BXDliwcc.js";import{t as r}from"./useTranslation--56nHhlH.js";import{c as i,d as a,f as o,n as s,r as c,t as l,u}from"./lazy-recharts-Pv8p9ArM.js";import{t as d}from"./reports-page-CGCJeMHG.js";var f=e();function p(e){return e>=1e9?`${(e/1e9).toFixed(1)}B`:e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(0)}K`:String(e)}function m({startDate:e,endDate:m,data:h}){let{t:g}=r(),_=d(e,m,h).map(e=>({date:e.date.slice(5),input:e.inputTokens,output:e.outputTokens}));return(0,f.jsx)(n,{title:g(`reports.charts.tokensByDay`),empty:h.length===0,children:(0,f.jsx)(i,{width:`100%`,height:`100%`,children:(0,f.jsxs)(s,{data:_,margin:{top:5,right:10,left:10,bottom:0},children:[(0,f.jsxs)(`defs`,{children:[(0,f.jsxs)(`linearGradient`,{id:`inputGrad`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,f.jsx)(`stop`,{offset:`0%`,stopColor:`#8b5cf6`,stopOpacity:.3}),(0,f.jsx)(`stop`,{offset:`100%`,stopColor:`#8b5cf6`,stopOpacity:.05})]}),(0,f.jsxs)(`linearGradient`,{id:`outputGrad`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,f.jsx)(`stop`,{offset:`0%`,stopColor:`#ec4899`,stopOpacity:.3}),(0,f.jsx)(`stop`,{offset:`100%`,stopColor:`#ec4899`,stopOpacity:.05})]})]}),(0,f.jsx)(c,{strokeDasharray:`3 3`,stroke:`hsl(var(--border))`,vertical:!1}),(0,f.jsx)(a,{dataKey:`date`,tick:{fontSize:10,fill:`var(--muted-foreground)`},axisLine:!1,tickLine:!1}),(0,f.jsx)(o,{tick:{fontSize:10,fill:`var(--muted-foreground)`},axisLine:!1,tickLine:!1,tickFormatter:p}),(0,f.jsx)(u,{content:(0,f.jsx)(t,{names:{input:g(`reports.charts.input`),output:g(`reports.charts.output`)},formatValue:e=>p(e)})}),(0,f.jsx)(l,{type:`monotone`,dataKey:`input`,stroke:`#8b5cf6`,strokeWidth:2,fill:`url(#inputGrad)`,dot:!1,activeDot:{r:4,strokeWidth:1.5,fill:`hsl(var(--popover))`}}),(0,f.jsx)(l,{type:`monotone`,dataKey:`output`,stroke:`#ec4899`,strokeWidth:2,fill:`url(#outputGrad)`,dot:!1,activeDot:{r:4,strokeWidth:1.5,fill:`hsl(var(--popover))`}})]})})})}export{m as TokensPerDayChart};
@@ -0,0 +1 @@
1
+ import{S as e}from"./vendor-query-_bHZuxEx.js";import{n as t,t as n}from"./report-chart-card-BXDliwcc.js";import{t as r}from"./useTranslation--56nHhlH.js";import{c as i,d as a,f as o,n as s,r as c,t as l,u}from"./lazy-recharts-Pv8p9ArM.js";import{t as d}from"./reports-page-CGCJeMHG.js";var f=e();function p(e){return e.toFixed(1)}function m({startDate:e,endDate:m,data:h}){let{t:g}=r(),_=d(e,m,h).map(e=>({date:e.date.slice(5),tps:e.medianTps??0}));return(0,f.jsx)(n,{title:g(`reports.charts.tokensPerSecond`),empty:h.length===0,children:(0,f.jsx)(i,{width:`100%`,height:`100%`,children:(0,f.jsxs)(s,{data:_,margin:{top:5,right:10,left:10,bottom:0},children:[(0,f.jsx)(`defs`,{children:(0,f.jsxs)(`linearGradient`,{id:`tpsGrad`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[(0,f.jsx)(`stop`,{offset:`0%`,stopColor:`#10b981`,stopOpacity:.3}),(0,f.jsx)(`stop`,{offset:`100%`,stopColor:`#10b981`,stopOpacity:.05})]})}),(0,f.jsx)(c,{strokeDasharray:`3 3`,stroke:`hsl(var(--border))`,vertical:!1}),(0,f.jsx)(a,{dataKey:`date`,tick:{fontSize:10,fill:`var(--muted-foreground)`},axisLine:!1,tickLine:!1}),(0,f.jsx)(o,{tick:{fontSize:10,fill:`var(--muted-foreground)`},axisLine:!1,tickLine:!1,tickFormatter:p}),(0,f.jsx)(u,{content:(0,f.jsx)(t,{names:{tps:g(`reports.charts.medianTps`)},formatValue:p})}),(0,f.jsx)(l,{type:`monotone`,dataKey:`tps`,stroke:`#10b981`,strokeWidth:2,fill:`url(#tpsGrad)`,dot:!1,activeDot:{r:4,strokeWidth:1.5,fill:`hsl(var(--popover))`}})]})})})}export{m as TokensPerSecondChart};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{C as t,S as n,x as r}from"./vendor-query-_bHZuxEx.js";import{r as i}from"./use-account-quota-display-BPmrTBTC.js";import{t as a}from"./useTranslation--56nHhlH.js";import{t as o}from"./button-BjVmmiGW.js";import{h as s,t as c,v as l}from"./api-client-dugX1Pti.js";import{t as u}from"./switch-CzxgokcM.js";import{c as d,n as f}from"./use-auth-CuDlW3iC.js";import{$t as p,Jt as m,Qt as h,Wt as g,Xt as _,Zt as v,_ as y,an as b,cn as x,en as S,g as C,h as w,in as T,ln as E,m as D,nn as O,p as k,qt as A,rn as j,sn as M,tn as N,un as P}from"./index-DIpd264Z.js";import{t as F}from"./payload-CIYnGZz9.js";var I=e(t(),1),L=n(),R=s({code:l().length(6,`settings.totp.validation.codeLength`)});function z({settings:e,disabled:t=!1,canEditPolicy:n=!0,onSave:s}){let{t:l}=a(),z=r(),B=f(e=>e.refreshSession),V=f(e=>e.totpConfigured),[H,U]=(0,I.useState)(null),[W,G]=(0,I.useState)(null),K=P({resolver:E(R),defaultValues:{code:``}}),q=t||K.formState.isSubmitting,J=()=>{U(null),G(null),K.reset()},Y=async()=>{await B(),z.invalidateQueries({queryKey:[`settings`,`detail`]}),x.success(l(`settings.totp.toasts.configured`)),J()},X=async e=>{G(null);try{await d({code:e.code}),await B(),z.invalidateQueries({queryKey:[`settings`,`detail`]}),x.success(l(`settings.totp.toasts.disabled`)),J()}catch(e){G(e instanceof c&&e.code===`last_break_glass_protected`?l(`access.errors.last_break_glass_protected`):g(e))}};return(0,L.jsxs)(`section`,{id:`totp`,className:`rounded-xl border bg-card p-5`,children:[(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,L.jsx)(`div`,{className:`flex h-8 w-8 items-center justify-center rounded-lg bg-primary/10`,children:(0,L.jsx)(i,{className:`h-4 w-4 text-primary`,"aria-hidden":`true`})}),(0,L.jsxs)(`div`,{children:[(0,L.jsx)(`h3`,{className:`text-sm font-semibold`,children:l(`settings.totp.title`)}),(0,L.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l(V?`settings.totp.status.configured`:`settings.totp.status.notConfigured`)})]})]}),(0,L.jsx)(`div`,{className:`flex items-center gap-2`,children:V?(0,L.jsx)(o,{type:`button`,size:`sm`,variant:`outline`,className:`h-8 text-xs text-destructive hover:text-destructive`,disabled:q,onClick:()=>U(`disable`),children:l(`settings.totp.actions.disable`)}):(0,L.jsx)(o,{type:`button`,size:`sm`,className:`h-8 text-xs`,disabled:q,onClick:()=>U(`setup`),children:l(`settings.totp.actions.enable`)})})]}),n?(0,L.jsxs)(`div`,{className:`flex items-center justify-between rounded-lg border p-3`,children:[(0,L.jsxs)(`div`,{children:[(0,L.jsx)(`p`,{className:`text-sm font-medium`,children:l(`settings.totp.requireLogin.label`)}),(0,L.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l(`settings.totp.requireLogin.description`)})]}),(0,L.jsx)(u,{checked:e.totpRequiredOnLogin,disabled:q,onCheckedChange:t=>void s(F(e,{totpRequiredOnLogin:t}))})]}):null]}),(0,L.jsx)(S,{open:H===`setup`,onOpenChange:e=>!e&&J(),children:(0,L.jsxs)(N,{className:`sm:max-w-sm`,children:[(0,L.jsxs)(T,{children:[(0,L.jsx)(b,{children:l(`settings.totp.setupDialog.title`)}),(0,L.jsx)(O,{children:l(`settings.totp.setupDialog.description`)})]}),H===`setup`?(0,L.jsx)(k,{onEnrolled:Y,onCancel:J,disabled:t}):null]})}),(0,L.jsx)(S,{open:H===`disable`,onOpenChange:e=>!e&&J(),children:(0,L.jsxs)(N,{className:`sm:max-w-sm`,children:[(0,L.jsxs)(T,{children:[(0,L.jsx)(b,{children:l(`settings.totp.disableDialog.title`)}),(0,L.jsx)(O,{children:l(`settings.totp.disableDialog.description`)})]}),W?(0,L.jsx)(M,{variant:`error`,children:W}):null,(0,L.jsx)(A,{...K,children:(0,L.jsxs)(`form`,{onSubmit:K.handleSubmit(X),className:`space-y-4`,children:[(0,L.jsx)(_,{control:K.control,name:`code`,render:({field:e,fieldState:t})=>(0,L.jsxs)(v,{className:`flex flex-col items-center gap-2`,children:[(0,L.jsx)(h,{className:`sr-only`,children:l(`settings.totp.disableDialog.codeLabel`)}),(0,L.jsx)(m,{children:(0,L.jsxs)(D,{maxLength:6,value:e.value,onChange:e.onChange,children:[(0,L.jsxs)(w,{children:[(0,L.jsx)(y,{index:0}),(0,L.jsx)(y,{index:1}),(0,L.jsx)(y,{index:2})]}),(0,L.jsx)(C,{}),(0,L.jsxs)(w,{children:[(0,L.jsx)(y,{index:3}),(0,L.jsx)(y,{index:4}),(0,L.jsx)(y,{index:5})]})]})}),t.error?.message?(0,L.jsx)(p,{children:l(t.error.message)}):(0,L.jsx)(p,{})]})}),(0,L.jsxs)(j,{children:[(0,L.jsx)(o,{type:`button`,variant:`outline`,onClick:J,disabled:q,children:l(`common.cancel`)}),(0,L.jsx)(o,{type:`submit`,variant:`destructive`,disabled:q,children:l(`settings.totp.disableDialog.submit`)})]})]})})]})})]})}export{z as TotpSettings};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-DBLzLNh2.js";var t={name:`pencil`,size:24,node:[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]};t.node;var n=e(t),r={name:`plus`,size:24,node:[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]};r.node;var i=e(r),a={name:`trash`,size:24,node:[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]],aliases:[`trash-2`]};a.node;var o=e(a);export{i as n,n as r,o as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-DBLzLNh2.js";import{i as t}from"./i18n-BWqZ9Ua2.js";var n={name:`circle-x`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]],aliases:[`x-circle`]};n.node;var r=e(n),i={name:`network`,size:24,node:[[`rect`,{x:`16`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`4q2zg0`}],[`rect`,{x:`2`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`8cvhb9`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`6`,rx:`1`,key:`1egb70`}],[`path`,{d:`M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3`,key:`1jsf9p`}],[`path`,{d:`M12 12V8`,key:`2874zd`}]]};i.node;var a=e(i),o={name:`route`,size:24,node:[[`circle`,{cx:`6`,cy:`19`,r:`3`,key:`1kj8tv`}],[`path`,{d:`M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15`,key:`1d8sl`}],[`circle`,{cx:`18`,cy:`5`,r:`3`,key:`gq8acd`}]]};o.node;var s=e(o),c={name:`shield`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]};c.node;var l=e(c),u={name:`upload`,size:24,node:[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]};u.node;var d=e(u),f=`codex-lb-account-quota-display`;function p(){if(typeof window>`u`)return`both`;try{let e=window.localStorage.getItem(f);return e===`5h`||e===`weekly`||e===`both`?e:`both`}catch{return`both`}}function m(e){if(typeof window<`u`)try{window.localStorage.setItem(f,e)}catch{}}var h=t(e=>({quotaDisplay:p(),setQuotaDisplay:t=>{m(t),e({quotaDisplay:t})}}));export{a,s as i,d as n,r as o,l as r,h as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{C as t,r as n,t as r,x as i}from"./vendor-query-_bHZuxEx.js";import{t as a}from"./useTranslation--56nHhlH.js";import{At as o,Ct as s,Dt as c,Ft as l,It as u,Lt as d,Mt as f,Ot as p,St as m,Tt as h,bt as g,cn as _,jt as v,kt as y,vt as b,xt as x,yt as S}from"./index-DIpd264Z.js";var C=e(t(),1);async function w(e,t){let n=[e.invalidateQueries({queryKey:[`accounts`,`list`]}),e.invalidateQueries({queryKey:[`dashboard`,`overview`]}),e.invalidateQueries({queryKey:[`dashboard`,`projections`]})];t?(n.push(e.invalidateQueries({queryKey:[`accounts`,`trends`,t]})),n.push(e.invalidateQueries({queryKey:[`accounts`,`usage-reset-credits`,t]}))):(n.push(e.invalidateQueries({queryKey:[`accounts`,`trends`]})),n.push(e.invalidateQueries({queryKey:[`accounts`,`usage-reset-credits`]}))),await Promise.all(n)}function T(e,t){let n=e.primaryUsedPercentBefore!==e.primaryUsedPercentAfter||e.secondaryUsedPercentBefore!==e.secondaryUsedPercentAfter||e.accountStatusBefore!==e.accountStatusAfter;return e.code===`reset`?t(n?`accounts.toasts.usageResetApplied`:`accounts.toasts.usageResetAppliedUnchanged`):e.code===`already_redeemed`?t(`accounts.toasts.usageResetAlreadyApplied`):e.code===`no_credit`?t(`accounts.toasts.noUsageResetCredits`):e.code===`nothing_to_reset`?t(`accounts.toasts.nothingToReset`):t(`accounts.toasts.usageResetCompleted`)}function E(){return globalThis.crypto?.randomUUID?.()??`dashboard-${Date.now()}-${Math.random().toString(36).slice(2)}`}function D(){let{t:e}=a(),t=i(),n=(0,C.useRef)(null),s=r({mutationFn:c,onSuccess:()=>{_.success(e(`accounts.toasts.imported`)),w(t)},onError:t=>{_.error(t.message||e(`accounts.toasts.importFailed`))}}),p=r({mutationFn:y,onSuccess:()=>{_.success(e(`accounts.toasts.paused`)),w(t)},onError:t=>{_.error(t.message||e(`accounts.toasts.pauseFailed`))}}),m=r({mutationFn:v,onSuccess:()=>{_.success(e(`accounts.toasts.resumed`)),w(t)},onError:t=>{_.error(t.message||e(`accounts.toasts.resumeFailed`))}}),h=r({mutationFn:({accountId:e,alias:t})=>f(e,t),onSuccess:()=>{_.success(e(`accounts.toasts.aliasUpdated`)),w(t)},onError:t=>{_.error(t.message||e(`accounts.toasts.aliasUpdateFailed`))}}),D=r({mutationFn:({accountId:e,deleteHistory:t})=>g(e,t),onSuccess:()=>{_.success(e(`accounts.toasts.deleted`)),w(t)},onError:t=>{_.error(t.message||e(`accounts.toasts.deleteFailed`))}}),O=r({mutationFn:({accountId:e,model:t})=>o(e,t?{model:t}:void 0),onSuccess:(n,r)=>{_.success(e(`accounts.toasts.probed`)),w(t,r.accountId)},onError:t=>{_.error(t.message||e(`accounts.toasts.probeFailed`))}}),k=r({mutationFn:({accountId:e})=>(n.current?.accountId!==e&&(n.current={accountId:e,redeemRequestId:E()}),b(e,{redeemRequestId:n.current.redeemRequestId})),onSuccess:async(r,i)=>{n.current=null,await w(t,i.accountId),_.success(T(r,e))},onError:t=>{_.error(t.message||e(`accounts.toasts.usageResetFailed`))}}),A=r({mutationFn:({accountId:e,enabled:t})=>u(e,t),onSuccess:n=>{_.success(n.enabled?e(`accounts.toasts.limitWarmupEnabled`):e(`accounts.toasts.limitWarmupDisabled`)),w(t)},onError:t=>{_.error(t.message||e(`accounts.toasts.limitWarmupUpdateFailed`))}}),j=r({mutationFn:({accountId:e,routingPolicy:t})=>d(e,t),onSuccess:n=>{let r=n.routingPolicy===`normal`?`normal`:n.routingPolicy.replace(`_`,`-`);_.success(e(`accounts.toasts.routingPolicySet`,{label:r})),w(t)},onError:t=>{_.error(t.message||e(`accounts.toasts.routingPolicyUpdateFailed`))}});return{importMutation:s,pauseMutation:p,resumeMutation:m,setAliasMutation:h,deleteMutation:D,probeMutation:O,usageResetMutation:k,exportAuthMutation:r({mutationFn:x,onSuccess:()=>{_.success(e(`accounts.toasts.exported`))},onError:t=>{_.error(t.message||e(`accounts.toasts.exportFailed`))}}),limitWarmupMutation:A,routingPolicyMutation:j,updateMutation:r({mutationFn:({accountId:e,securityWorkAuthorized:t})=>l(e,{securityWorkAuthorized:t}),onSuccess:()=>{_.success(e(`accounts.toasts.updated`)),w(t)},onError:t=>{_.error(t.message||e(`accounts.toasts.updateFailed`))}}),resetCreditConsumeMutation:r({mutationFn:({accountId:e,redeemRequestId:t})=>S(e,t?{redeemRequestId:t}:void 0),onSuccess:n=>{let r=n.windowsReset??0;_.success(e(`accounts.toasts.rateLimitWindowsReset`,{count:r})),t.invalidateQueries({queryKey:[`accounts`,`list`]}),t.invalidateQueries({queryKey:[`accounts`,`trends`]}),t.invalidateQueries({queryKey:[`accounts`,`reset-credits`]}),t.invalidateQueries({queryKey:[`dashboard`,`overview`]}),t.invalidateQueries({queryKey:[`dashboard`,`projections`]})},onError:t=>{_.error(t.message||e(`accounts.toasts.resetCreditRedeemFailed`))}})}}function O(e,t){return n({queryKey:[`accounts`,`reset-credits`,e],queryFn:()=>h(e),enabled:t&&!!e,staleTime:0})}function k(e){return n({queryKey:[`accounts`,`trends`,e],queryFn:()=>m(e),enabled:!!e,staleTime:3e5,refetchInterval:3e5,refetchIntervalInBackground:!1})}function A(e){return n({queryKey:[`accounts`,`usage-reset-credits`,e],queryFn:()=>s(e),enabled:!!e,staleTime:6e4})}function j(){let{data:e,error:t,isFetching:r,isLoading:i,isPending:a,isSuccess:o,refetch:s}=n({queryKey:[`accounts`,`list`],queryFn:p,select:e=>e.accounts,refetchInterval:3e4,refetchIntervalInBackground:!1});return{accountsQuery:{data:e,error:t,isFetching:r,isLoading:i,isPending:a,isSuccess:o,refetch:s},...D()}}export{O as a,j as i,k as n,A as r,D as t};
@@ -0,0 +1 @@
1
+ import{i as e}from"./i18n-BWqZ9Ua2.js";import{S as t,a as n,c as r,d as i,f as a,h as o,m as s,n as c,r as l,t as u,u as d,v as f}from"./api-client-dugX1Pti.js";var p=e=>new TextEncoder().encode(e).length,m=`settings.password.validation.required`,h=f().min(8,{message:`settings.password.validation.minLength`}).refine(e=>p(e)<=72,{message:`settings.password.validation.maxByteLength`}),g=d([`standard`,`trusted_header`,`disabled`]),_=d([`admin`,`guest`]);d([`read`,`write`]),d([`dashboard:read`,`accounts:read`,`accounts:write`,`accounts:export`,`api_keys:read`,`api_keys:write`,`api_keys:assign`,`ops:write`,`security:write`,`users:manage`,`roles:manage`,`conversations:read`,`audit:read`]),d([`all`,`own`]);var ee=o({id:f(),username:f(),displayName:f().nullable().default(null),role:o({id:f(),slug:f(),name:f(),kind:f()})}),v=o({kind:f(),providerKey:f().default(`default`),label:f(),loginUrl:f().nullable().default(null)}),y=d([`enabled`,`admins_only`,`break_glass_only`]),b=y.catch(`enabled`),x=o({provider:f(),reference:f()}),S=o({usernameField:d([`hidden`,`shown`]).default(`hidden`),providers:i(v).default([{kind:`password`,providerKey:`default`,label:`Password`,loginUrl:null}]),localLogin:b.default(`enabled`),pendingIdentity:a().default(!1),pendingArrival:x.nullable().default(null)}),C=o({usersTotal:s().int().default(0),usersActive:s().int().default(0),usersInvited:s().int().default(0),usersDisabled:s().int().default(0),pendingInvites:s().int().default(0),nonAdminUsers:s().int().default(0),customRoles:s().int().default(0),providersEnabled:i(f()).default([]),roleMappings:s().int().default(0),scimTokens:s().int().default(0),auditSinks:s().int().default(0),localLoginPolicy:b.default(`enabled`)}),te=d([`password`,`totp`,`oidc`]),ne=o({verifiedAt:s().int().nullable().default(null),expiresAt:s().int().nullable().default(null),methods:i(te).default([])}),re=o({authorizationUrl:f()}),w=o({authenticated:a(),passwordRequired:a(),localPasswordConfigured:a().default(!1),totpRequiredOnLogin:a(),totpConfigured:a(),bootstrapRequired:a().optional().default(!1),bootstrapTokenConfigured:a().optional().default(!1),authMode:g.default(`standard`),passwordManagementEnabled:a().default(!0),passwordSessionActive:a().default(!1),role:_.default(`guest`),permissions:i(f()).default([]),guestAccessEnabled:a().default(!1),guestPasswordRequired:a().default(!1),user:ee.nullable().default(null),authMethod:f().nullable().default(null),mustChangePassword:a().default(!1),totpEnrollmentRequired:a().default(!1),login:S.nullable().default(null).transform(e=>e??S.parse({})),accessSummary:C.nullable().default(null),assignableRoleIds:i(f()).default([]),stepUp:ne.nullable().default(null),breakGlassSession:a().default(!1)}),ie=f().trim().min(1,{message:`auth.invite.validation.usernameRequired`}).max(64,{message:`auth.invite.validation.usernameTooLong`}).regex(/^[a-z0-9._-]{1,64}$/i,{message:`auth.invite.validation.usernameFormat`}),ae=o({username:f().trim().max(64,{message:`auth.invite.validation.usernameTooLong`}).optional(),password:f().min(1)}),oe=o({roleName:f(),inviterDisplayName:f().nullable().default(null),suggestedUsername:f(),usernameLocked:a(),expiresAt:f()}),se=o({token:f().min(1),username:ie,password:h,displayName:f().trim().max(128).optional()});o({password:f().optional()});var ce=o({password:h,bootstrapToken:f().optional()}),T=o({password:h}),E=o({currentPassword:f().min(1,{message:m}),newPassword:h}),D=o({password:f().min(1,{message:m})}),O=o({code:f().length(6,`settings.totp.validation.codeLength`)}),k=o({secret:f().min(1),code:f().min(6).max(6)}),A=o({secret:f(),otpauthUri:f(),qrSvgDataUri:f()}),j=o({status:f()});o({password:f().min(1).optional(),code:f().length(6,`settings.totp.validation.codeLength`).optional()});var M=o({verifiedAt:s().int(),expiresAt:s().int()});function N(e){if(!(e instanceof t))return null;let[n]=e.issues;return typeof n?.message==`string`?n.message:null}var P=`/api/dashboard-auth`;function F(){return l(`${P}/session`,w)}function I(e){return n(`${P}/password/setup`,w,{body:e})}function L(e){return n(`${P}/password/login`,w,{body:e,suppressUnauthorizedHandler:!0})}function R(e={}){return n(`${P}/guest/login`,w,{body:e,suppressUnauthorizedHandler:!0})}function z(e){let t=T.parse(e);return n(`${P}/guest/password`,j,{body:t})}function B(){return c(`${P}/guest/password`,j)}function V(e){return n(`${P}/password/change`,j,{body:e})}function H(e){return c(`${P}/password`,j,{body:e})}function U(){return n(`${P}/totp/setup/start`,A)}function le(e){let t=k.parse(e);return n(`${P}/totp/setup/confirm`,j,{body:t})}function W(e){let t=O.parse(e);return n(`${P}/totp/verify`,w,{body:t})}function ue(e){let t=O.parse(e);return n(`${P}/totp/disable`,j,{body:t})}function de(e){return n(`${P}/step-up`,M,{body:e,suppressUnauthorizedHandler:!0})}function fe(){return n(`${P}/oidc/step-up/start`,re,{suppressUnauthorizedHandler:!0})}function pe(){return n(`${P}/logout`,j)}function me(){return n(`${P}/logout-all`,j)}function he(e){return l(`${P}/invite/${encodeURIComponent(e)}`,oe,{suppressUnauthorizedHandler:!0})}function ge(e){return n(`${P}/invite/accept`,w,{body:e,suppressUnauthorizedHandler:!0})}function _e(e,t){return e===null?t===null?`individual`:`team`:e.providersEnabled.some(e=>e!==`password`)||e.customRoles>=1||e.scimTokens>=1||e.auditSinks>=1||e.localLoginPolicy!==`enabled`||e.roleMappings>=1?`enterprise`:e.usersTotal>=2||e.pendingInvites>=1||e.nonAdminUsers>=1?`team`:`individual`}var G=`codex-lb.last-username`;function ve(){try{return window.localStorage.getItem(`codex-lb.last-username`)?.trim()??``}catch{return``}}function ye(e){try{e&&e.trim()?window.localStorage.setItem(G,e.trim()):window.localStorage.removeItem(G)}catch{}}var K=!1,q=S.parse({}),J={role:`guest`,permissions:[],canWrite:!1,user:null,accessSummary:null,assignableRoleIds:[],stepUp:null,breakGlassSession:!1,tier:`individual`,mustChangePassword:!1,totpEnrollmentRequired:!1};function Y(e,t){return e.includes(`${t}:all`)?`all`:e.includes(`${t}:own`)?`own`:null}function X(e,t){return Y(e,t)!==null}function be(e){return Q(t=>X(t.permissions,e))}function Z(e,t){return e({passwordRequired:t.passwordRequired,localPasswordConfigured:t.localPasswordConfigured,authenticated:t.authenticated,totpRequiredOnLogin:t.totpRequiredOnLogin,totpConfigured:t.totpConfigured,bootstrapRequired:t.bootstrapRequired??!1,bootstrapTokenConfigured:t.bootstrapTokenConfigured??!1,authMode:t.authMode,passwordManagementEnabled:t.passwordManagementEnabled,passwordSessionActive:t.passwordSessionActive,role:t.role,permissions:t.permissions,guestAccessEnabled:t.guestAccessEnabled,guestPasswordRequired:t.guestPasswordRequired,canWrite:t.permissions.includes(`write`),user:t.user??null,mustChangePassword:t.mustChangePassword??!1,totpEnrollmentRequired:t.totpEnrollmentRequired??!1,loginHint:t.login??q,accessSummary:t.accessSummary??null,assignableRoleIds:t.assignableRoleIds,stepUp:t.stepUp??null,breakGlassSession:t.breakGlassSession??!1,tier:_e(t.accessSummary??null,t.user??null),adminLoginRequested:!1,initialized:!0,error:null}),t}var Q=e((e,t)=>({passwordRequired:!1,localPasswordConfigured:!1,authenticated:!1,totpRequiredOnLogin:!1,totpConfigured:!1,bootstrapRequired:!1,bootstrapTokenConfigured:!1,authMode:`standard`,passwordManagementEnabled:!0,passwordSessionActive:!1,...J,guestAccessEnabled:!1,guestPasswordRequired:!1,loginHint:q,adminLoginRequested:!1,loading:!1,initialized:!1,error:null,refreshSession:async()=>{e({loading:!0,error:null});try{return Z(e,await F())}catch(t){throw e({error:t instanceof Error?t.message:`Failed to refresh session`}),t}finally{e({loading:!1,initialized:!0})}},login:async(t,n)=>{e({loading:!0,error:null}),K=!0;try{let r=await L(n?{username:n,password:t}:{password:t});return ye((r.login??q).usernameField===`hidden`?void 0:n),Z(e,r)}catch(t){let n=Q.getState().adminLoginRequested||t instanceof u&&t.status===401;throw e({error:t instanceof Error?t.message:`Login failed`,adminLoginRequested:n}),t}finally{K=!1,e({loading:!1,initialized:!0})}},loginGuest:async t=>{e({loading:!0,error:null});try{return Z(e,await R(t?{password:t}:{}))}catch(t){throw e({error:t instanceof Error?t.message:`Guest login failed`}),t}finally{e({loading:!1,initialized:!0})}},acceptInvite:async t=>{e({loading:!0,error:null});try{return Z(e,await ge(t))}finally{e({loading:!1,initialized:!0})}},startAdminLogin:()=>{e({adminLoginRequested:!0,error:null})},logout:async()=>{await $(e,pe)},logoutEverywhere:async()=>{await $(e,me)},verifyTotp:async t=>{e({loading:!0,error:null});try{return Z(e,await W({code:t}))}catch(t){throw e({error:t instanceof Error?t.message:`TOTP verification failed`}),t}finally{e({loading:!1,initialized:!0})}},clearError:()=>{e({error:null})},can:e=>X(t().permissions,e),scope:e=>Y(t().permissions,e)}));async function $(e,t){e({loading:!0,error:null});try{await t(),e({authenticated:!1,totpRequiredOnLogin:!1,bootstrapRequired:!1,bootstrapTokenConfigured:!1,authMode:`standard`,passwordManagementEnabled:!0,...J,adminLoginRequested:!1}),await Q.getState().refreshSession()}finally{e({loading:!1})}}r(()=>{K||Q.getState().adminLoginRequested?Q.setState({initialized:!0}):(Q.setState(e=>({...e,authenticated:!1,...J,role:e.guestAccessEnabled?`guest`:e.role,adminLoginRequested:!1,initialized:!1,error:null})),Q.getState().refreshSession().catch(()=>void 0))});export{ce as C,N as E,D as S,O as T,W as _,V as a,ae as b,ue as c,H as d,z as f,de as g,U as h,ve as i,L as l,fe as m,Q as n,le as o,I as p,be as r,he as s,X as t,B as u,se as v,y as w,E as x,b as y};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{C as t}from"./vendor-query-_bHZuxEx.js";import{w as n}from"./index-DIpd264Z.js";var r=e(t(),1),i=[`--chart-1`,`--chart-2`,`--chart-3`,`--chart-4`,`--chart-5`],a=[`#3b82f6`,`#8b5cf6`,`#10b981`,`#f59e0b`,`#ec4899`],o=null;function s(){return o||=document.createElement(`canvas`).getContext(`2d`),o}function c(e,t){if(!e)return t;let n=s();return n?(n.fillStyle=`#000000`,n.fillStyle=e,n.fillStyle===`#000000`&&e!==`#000000`?t:n.fillStyle):t}function l(){let e=n(e=>e.theme);return(0,r.useMemo)(()=>{if(typeof document>`u`||!e)return a;let t=getComputedStyle(document.documentElement);return i.map((e,n)=>c(t.getPropertyValue(e).trim(),a[n]))},[e])}export{l as t};
@@ -0,0 +1 @@
1
+ import{r as e,t,x as n}from"./vendor-query-_bHZuxEx.js";import{t as r}from"./iso-Bpe5Ihbb.js";import{t as i}from"./useTranslation--56nHhlH.js";import{a,d as o,f as s,h as c,i as l,m as u,n as d,r as f,v as p}from"./api-client-dugX1Pti.js";import{cn as m}from"./index-DIpd264Z.js";var h=c({id:u(),sourceId:p(),model:p(),displayName:p().nullable().default(null),contextWindow:u().int().positive().nullable().default(null),maxOutputTokens:u().int().positive().nullable().default(null),supportsStreaming:s().default(!0),supportsTools:s().default(!1),supportsVision:s().default(!1),inputPer1M:u().nullable().default(null),cachedInputPer1M:u().nullable().default(null),outputPer1M:u().nullable().default(null),audioPerMinute:u().nullable().default(null),rawMetadataJson:p().nullable().default(null),isEnabled:s().default(!0),createdAt:r({offset:!0}),updatedAt:r({offset:!0})}),g=c({id:p(),name:p(),kind:p(),baseUrl:p(),isEnabled:s(),healthStatus:p(),supportsChatCompletions:s(),supportsResponses:s(),supportsAudioTranscriptions:s().default(!1),supportsEmbeddings:s().default(!1),timeoutSeconds:u().int().positive().nullable().default(null),maxConcurrency:u().int().positive().nullable().default(null),createdAt:r({offset:!0}),updatedAt:r({offset:!0}),models:o(h).default([])}),_=c({sources:o(g).default([])}),v=c({model:p().min(1).max(255),displayName:p().max(255).nullable().optional(),contextWindow:u().int().positive().nullable().optional(),maxOutputTokens:u().int().positive().nullable().optional(),supportsStreaming:s().optional(),supportsTools:s().optional(),supportsVision:s().optional(),inputPer1M:u().nonnegative().nullable().optional(),cachedInputPer1M:u().nonnegative().nullable().optional(),outputPer1M:u().nonnegative().nullable().optional(),audioPerMinute:u().nonnegative().nullable().optional(),rawMetadataJson:p().nullable().optional(),isEnabled:s().optional()}),y=c({name:p().min(1).max(128),baseUrl:p().min(1).max(2048),apiKey:p().min(1).nullable().optional(),supportsChatCompletions:s().optional(),supportsResponses:s().optional(),supportsAudioTranscriptions:s().optional(),supportsEmbeddings:s().optional(),timeoutSeconds:u().int().positive().nullable().optional(),maxConcurrency:u().int().positive().nullable().optional(),models:o(v).default([])}),b=c({name:p().min(1).max(128).optional(),baseUrl:p().min(1).max(2048).optional(),apiKey:p().min(1).nullable().optional(),isEnabled:s().optional(),supportsChatCompletions:s().optional(),supportsResponses:s().optional(),supportsAudioTranscriptions:s().optional(),supportsEmbeddings:s().optional(),timeoutSeconds:u().int().positive().nullable().optional(),maxConcurrency:u().int().positive().nullable().optional(),models:o(v).optional()}),x=`/api/model-sources`;function S(){return f(`${x}/`,_)}function C(e){let t=y.parse(e);return a(`${x}/`,g,{body:t})}function w(e,t){let n=b.parse(t);return l(`${x}/${encodeURIComponent(e)}`,g,{body:n})}function T(e){return d(`${x}/${encodeURIComponent(e)}`)}function E(){let{t:r}=i(),a=n(),{data:o,error:s,isFetching:c,isLoading:l,isPending:u,isSuccess:d,refetch:f}=e({queryKey:[`model-sources`,`list`],queryFn:S});return{modelSourcesQuery:{data:o,error:s,isFetching:c,isLoading:l,isPending:u,isSuccess:d,refetch:f},createMutation:t({mutationFn:e=>C(e),onSuccess:()=>{m.success(r(`modelSources.toasts.created`)),a.invalidateQueries({queryKey:[`model-sources`,`list`]}),a.invalidateQueries({queryKey:[`api-keys`,`list`]}),a.invalidateQueries({queryKey:[`models`]})},onError:e=>{m.error(e.message||r(`modelSources.toasts.createFailed`))}}),updateMutation:t({mutationFn:({sourceId:e,payload:t})=>w(e,t),onSuccess:()=>{m.success(r(`modelSources.toasts.updated`)),a.invalidateQueries({queryKey:[`model-sources`,`list`]}),a.invalidateQueries({queryKey:[`api-keys`,`list`]}),a.invalidateQueries({queryKey:[`models`]})},onError:e=>{m.error(e.message||r(`modelSources.toasts.updateFailed`))}}),deleteMutation:t({mutationFn:e=>T(e),onSuccess:()=>{m.success(r(`modelSources.toasts.deleted`)),a.invalidateQueries({queryKey:[`model-sources`,`list`]}),a.invalidateQueries({queryKey:[`api-keys`,`list`]}),a.invalidateQueries({queryKey:[`models`]})},onError:e=>{m.error(e.message||r(`modelSources.toasts.deleteFailed`))}})}}export{E as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{C as t,S as n,r}from"./vendor-query-_bHZuxEx.js";import{t as i}from"./createLucideIcon-DBLzLNh2.js";import{b as a}from"./es2015-bMH8YKZT.js";import{t as o}from"./useTranslation--56nHhlH.js";import{c as s,t as c}from"./button-BjVmmiGW.js";import{Dn as l,En as u,G as d,Kt as f,Nn as p,On as m,Pn as h,q as g,z as _}from"./index-DIpd264Z.js";import{r as v,t as y}from"./account-status-DIsU5sUS.js";import{i as b}from"./use-accounts-PWlVGw3z.js";import{t as x}from"./badge-DqMb9es0.js";import{t as S}from"./status-badge-CHHA5X6c.js";import{a as C}from"./api-Dwa7XxPe.js";var w={name:`chevrons-up-down`,size:24,node:[[`path`,{d:`m7 15 5 5 5-5`,key:`1hf1tw`}],[`path`,{d:`m7 9 5-5 5 5`,key:`sgt6xg`}]]};w.node;var T=i(w),E=e(t(),1),D=n();function O(e,t){let n=[],r=e.windowMinutesMonthly!=null&&e.windowMinutesPrimary==null&&e.windowMinutesSecondary==null;return(r||e.usage?.monthlyRemainingPercent!=null)&&n.push({key:`${e.accountId}-monthly`,label:t(`apiKeys.accountSelect.limitLeft`,{label:t(`common.quota.monthly`),percent:_(e.usage?.monthlyRemainingPercent)}),percent:e.usage?.monthlyRemainingPercent??null}),!r&&(e.windowMinutesPrimary!=null||e.usage?.primaryRemainingPercent!=null)&&n.push({key:`${e.accountId}-primary`,label:t(`apiKeys.accountSelect.limitLeft`,{label:g(`primary`,e.windowMinutesPrimary),percent:_(e.usage?.primaryRemainingPercent)}),percent:e.usage?.primaryRemainingPercent??null}),!r&&(e.windowMinutesSecondary!=null||e.usage?.secondaryRemainingPercent!=null)&&n.push({key:`${e.accountId}-secondary`,label:t(`apiKeys.accountSelect.limitLeft`,{label:g(`secondary`,e.windowMinutesSecondary),percent:_(e.usage?.secondaryRemainingPercent)}),percent:e.usage?.secondaryRemainingPercent??null}),n}function k(e){return e===null?`border-border bg-muted text-muted-foreground`:e>=70?`border-emerald-500/20 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300`:e>=30?`border-amber-500/20 bg-amber-500/10 text-amber-700 dark:text-amber-300`:`border-red-500/20 bg-red-500/10 text-red-700 dark:text-red-300`}function A({account:e}){let{t}=o(),n=v(e.status),r=e.displayName||e.email,i=e.displayName&&e.displayName!==e.email?`${e.email} · ${d(e.planType)}`:d(e.planType),a=O(e,t);return(0,D.jsxs)(`div`,{className:`min-w-0 flex-1 py-0.5`,children:[(0,D.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,D.jsxs)(`div`,{className:`min-w-0`,children:[(0,D.jsx)(`div`,{className:`truncate text-sm font-medium`,children:r}),(0,D.jsx)(`div`,{className:`truncate text-[11px] text-muted-foreground`,title:t(`accounts.detail.accountIdTitle`,{accountId:e.accountId}),children:i})]}),(0,D.jsx)(S,{status:n})]}),(0,D.jsx)(`div`,{className:`mt-1.5 flex flex-wrap gap-1`,children:a.map(e=>(0,D.jsx)(`span`,{className:s(`rounded-full border px-1.5 py-0.5 text-[10px] font-medium leading-none`,k(e.percent)),children:e.label},e.key))})]})}function j({value:e,onChange:t,placeholder:n,triggerId:r,ariaInvalid:i=!1,ariaDescribedBy:d,triggerClassName:g,allowPausedAccounts:_=!1}){let{t:v}=o(),S=n??v(`apiKeys.accountSelect.all`),{accountsQuery:C}=b(),w=(0,E.useMemo)(()=>C.data??[],[C.data]),O=(0,E.useMemo)(()=>w.filter(e=>y(e.status)||_&&e.status===`paused`),[w,_]),[k,j]=(0,E.useState)(``),M=(0,E.useMemo)(()=>{if(!k.trim())return O;let e=k.toLowerCase();return O.filter(t=>t.accountId.toLowerCase().includes(e)||t.email.toLowerCase().includes(e)||t.displayName.toLowerCase().includes(e))},[k,O]),N=(0,E.useMemo)(()=>new Set(e),[e]),P=(0,E.useMemo)(()=>e.map(e=>w.find(t=>t.accountId===e)).filter(e=>e!==void 0),[w,e]),F=(0,E.useCallback)(n=>{N.has(n)?t(e.filter(e=>e!==n)):t([...e,n])},[t,N,e]),I=(0,E.useCallback)(n=>{t(e.filter(e=>e!==n))},[t,e]),L=(0,E.useCallback)(()=>{t([])},[t]),R=e.length===0?S:v(`apiKeys.accountSelect.selected`,{count:e.length});return(0,D.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,D.jsxs)(u,{children:[(0,D.jsx)(h,{asChild:!0,children:(0,D.jsxs)(c,{type:`button`,variant:`outline`,id:r,"aria-invalid":i,"aria-describedby":d,className:s(`w-full justify-between font-normal`,g),disabled:C.isLoading,children:[(0,D.jsx)(`span`,{className:`truncate text-left`,children:C.isLoading?v(`apiKeys.accountSelect.loading`):R}),(0,D.jsx)(T,{className:`ml-1 size-4 shrink-0 opacity-50`})]})}),(0,D.jsxs)(m,{align:`start`,className:`w-[var(--radix-dropdown-menu-trigger-width)] max-h-64`,children:[(0,D.jsx)(`div`,{className:`px-2 py-1.5`,children:(0,D.jsx)(f,{value:k,onChange:e=>j(e.target.value),placeholder:v(`accounts.list.searchPlaceholder`),className:`h-7 text-xs`,onClick:e=>e.stopPropagation(),onKeyDown:e=>e.stopPropagation()})}),(0,D.jsx)(p,{}),(0,D.jsx)(l,{checked:e.length===0,onCheckedChange:L,onSelect:e=>e.preventDefault(),children:v(`apiKeys.accountSelect.all`)}),(0,D.jsx)(p,{}),M.map(e=>(0,D.jsx)(l,{checked:N.has(e.accountId),onCheckedChange:()=>F(e.accountId),onSelect:e=>e.preventDefault(),className:`items-start`,children:(0,D.jsx)(A,{account:e})},e.accountId)),M.length===0?(0,D.jsx)(`div`,{className:`px-2 py-1.5 text-xs text-muted-foreground`,children:v(`apiKeys.accountSelect.empty`)}):null]})]}),P.length>0?(0,D.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:P.map(e=>(0,D.jsxs)(x,{variant:`secondary`,className:`gap-1 text-xs`,children:[e.email,(0,D.jsx)(`button`,{type:`button`,className:`ml-0.5 hover:text-foreground`,onClick:()=>I(e.accountId),children:(0,D.jsx)(a,{className:`size-3`})})]},e.accountId))}):null]})}function M(){return r({queryKey:[`models`],queryFn:C,staleTime:3e5,select:e=>e.models})}export{j as n,T as r,M as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{C as t}from"./vendor-query-_bHZuxEx.js";var n=e(t(),1),r=`(prefers-reduced-motion: reduce)`;function i(){return typeof window<`u`&&window.matchMedia(r).matches}function a(){let[e,t]=(0,n.useState)(i);return(0,n.useEffect)(()=>{let e=window.matchMedia(r),n=e=>t(e.matches);return e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}export{a as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{C as t}from"./vendor-query-_bHZuxEx.js";import{t as n}from"./shim-CZwyM4Q7.js";var r=e(t()),i=(e,t,n,r)=>{let i=[n,{code:t,...r||{}}];if(e?.services?.logger?.forward)return e.services.logger.forward(i,`warn`,`react-i18next::`,!0);d(i[0])&&(i[0]=`react-i18next:: ${i[0]}`),e?.services?.logger?.warn?e.services.logger.warn(...i):console?.warn&&console.warn(...i)},a={},o=(e,t,n,r)=>{d(n)&&a[n]||(d(n)&&(a[n]=new Date),i(e,t,n,r))},s=(e,t)=>()=>{if(e.isInitialized)t();else{let n=()=>{setTimeout(()=>{e.off(`initialized`,n)},0),t()};e.on(`initialized`,n)}},c=(e,t,n)=>{e.loadNamespaces(t,s(e,n))},l=(e,t,n,r)=>{if(d(n)&&(n=[n]),e.options.preload&&e.options.preload.indexOf(t)>-1)return c(e,n,r);n.forEach(t=>{e.options.ns.indexOf(t)<0&&e.options.ns.push(t)}),e.loadLanguages(t,s(e,r))},u=(e,t,n={})=>!t.languages||!t.languages.length?(o(t,`NO_LANGUAGES`,`i18n.languages were undefined or empty`,{languages:t.languages}),!0):t.hasLoadedNamespace(e,{lng:n.lng,precheck:(t,r)=>{if(n.bindI18n&&n.bindI18n.indexOf(`languageChanging`)>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}),d=e=>typeof e==`string`,f=e=>typeof e==`object`&&!!e,p=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,m={"&amp;":`&`,"&#38;":`&`,"&lt;":`<`,"&#60;":`<`,"&gt;":`>`,"&#62;":`>`,"&apos;":`'`,"&#39;":`'`,"&quot;":`"`,"&#34;":`"`,"&nbsp;":` `,"&#160;":` `,"&copy;":`©`,"&#169;":`©`,"&reg;":`®`,"&#174;":`®`,"&hellip;":`…`,"&#8230;":`…`,"&#x2F;":`/`,"&#47;":`/`},h=e=>m[e],g=e=>e.replace(p,h),_={bindI18n:`languageChanged`,bindI18nStore:``,transEmptyNodeValue:``,transSupportBasicHtmlNodes:!0,transWrapTextNodes:``,transKeepBasicHtmlNodesFor:[`br`,`strong`,`i`,`p`],useSuspense:!0,unescape:g,transDefaultProps:void 0},v=(e={})=>{_={..._,...e}},y=()=>_,b,x=e=>{b=e},S=()=>b,C=(0,r.createContext)(),w=class{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach(e=>{this.usedNamespaces[e]||(this.usedNamespaces[e]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}},T=n(),E={t:(e,t)=>{if(d(t))return t;if(f(t)&&d(t.defaultValue))return t.defaultValue;if(typeof e==`function`)return``;if(Array.isArray(e)){let t=e[e.length-1];return typeof t==`function`?``:t}return e},ready:!1},D=()=>()=>{},O=(e,t={})=>{let{i18n:n}=t,{i18n:i,defaultNS:a}=(0,r.useContext)(C)||{},s=n||i||S();s&&!s.reportNamespaces&&(s.reportNamespaces=new w),s||o(s,`NO_I18NEXT_INSTANCE`,`useTranslation: You will need to pass in an i18next instance by using initReactI18next or by passing it via props or context. In monorepo setups, make sure there is only one instance of react-i18next.`);let f=(0,r.useMemo)(()=>({...y(),...s?.options?.react,...t}),[s,t]),{useSuspense:p,keyPrefix:m}=f,h=e||a||s?.options?.defaultNS,g=d(h)?[h]:h||[`translation`],_=(0,r.useMemo)(()=>g,g);s?.reportNamespaces?.addUsedNamespaces?.(_);let v=(0,r.useRef)(0),b=(0,r.useCallback)(e=>{if(!s)return D;let{bindI18n:t,bindI18nStore:n}=f,r=()=>{v.current+=1,e()};return t&&s.on(t,r),n&&s.store.on(n,r),()=>{t&&t.split(` `).forEach(e=>s.off(e,r)),n&&n.split(` `).forEach(e=>s.store.off(e,r))}},[s,f]),x=(0,r.useRef)(),O=(0,r.useCallback)(()=>{if(!s)return E;let e=!!(s.isInitialized||s.initializedStoreOnce)&&_.every(e=>u(e,s,f)),n=t.lng||s.language,r=v.current,i=x.current;if(i&&i.ready===e&&i.lng===n&&i.keyPrefix===m&&i.revision===r)return i;let a={t:s.getFixedT(n,f.nsMode===`fallback`?_:_[0],m,{scopeNs:_}),ready:e,lng:n,keyPrefix:m,revision:r};return x.current=a,a},[s,_,m,f,t.lng]),[k,A]=(0,r.useState)(0),{t:j,ready:M}=(0,T.useSyncExternalStore)(b,O,O);(0,r.useEffect)(()=>{if(s&&!M&&!p){let e=()=>A(e=>e+1);t.lng?l(s,t.lng,_,e):c(s,_,e)}},[s,t.lng,_,M,p,k]);let N=s||{},P=(0,r.useRef)(null),F=(0,r.useRef)(),I=e=>`${e.language}|${e.resolvedLanguage}|${e.languages?.join(`,`)}`,L=e=>{let t=Object.getOwnPropertyDescriptors(e);t.__original&&delete t.__original;let n=Object.create(Object.getPrototypeOf(e),t);if(!Object.prototype.hasOwnProperty.call(n,`__original`))try{Object.defineProperty(n,"__original",{value:e,writable:!1,enumerable:!1,configurable:!1})}catch{}return n},R=(0,r.useMemo)(()=>{let e=N,t=e&&I(e),n=e;e&&(P.current&&P.current.__original===e&&F.current===t?n=P.current:(n=L(e),P.current=n,F.current=t));let r=!M&&!p?(...e)=>(o(s,`USE_T_BEFORE_READY`,`useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t.`),j(...e)):j,i=[r,n,M];return i.t=r,i.i18n=n,i.ready=M,i},[j,N,M,N.resolvedLanguage,N.language,N.languages]);if(s&&p&&!M){let e=!1;try{e=!1}catch{}throw e&&o(s,`SUSPENDED_WHILE_LOADING`,`useTranslation: suspended while translations are loading (useSuspense is true by default). Add a <Suspense> boundary above this component, or set react.useSuspense: false in the i18next init options. https://react.i18next.com/latest/usetranslation-hook`),new Promise(e=>{let n=()=>e();t.lng?l(s,t.lng,_,n):c(s,_,n)})}return R};export{y as a,f as c,o as d,x as i,d as l,C as n,v as o,S as r,g as s,O as t,i as u};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{C as t,S as n}from"./vendor-query-_bHZuxEx.js";import{t as r}from"./useTranslation--56nHhlH.js";import{c as i,i as a,l as o,o as s,s as c}from"./lazy-recharts-Pv8p9ArM.js";import{n as l,t as u}from"./distribution-metric-format-yZTy1ZEu.js";var d=e(t(),1),f=n(),p=[`#3b82f6`,`#10b981`,`#f59e0b`,`#ec4899`,`#8b5cf6`,`#06b6d4`],m=`#9ca3af`,h=`Missing User-Agent`,g=4,_=4,v=2;function y(e,t){return e===h?m:p[t%p.length]}function b({data:e}){let{t}=r(),[n,p]=(0,d.useState)(`cost`),[m,b]=(0,d.useState)(null),x=(0,d.useRef)({}),S=e.reduce((e,t)=>e+t.costUsd,0),C=e.reduce((e,t)=>e+t.requests,0),w=n===`cost`,T=u(w?S:C,n),E=e.map((e,r)=>({...e,id:`${e.useragent}-${r}`,displayUseragent:e.useragent===h?t(`reports.distribution.missingUserAgent`):e.useragent,fill:y(e.useragent,r),metricLabel:u(w?e.costUsd:e.requests,n),metricValue:w?e.costUsd:e.requests,metricPercentage:w?e.percentage:C>0?e.requests/C*100:0})),D=E.reduce((e,t)=>Math.max(e,t.metricLabel.length),0);return(0,d.useEffect)(()=>{m&&x.current[m]?.scrollIntoView({block:`nearest`,inline:`nearest`})},[m]),(0,f.jsxs)(`div`,{className:`rounded-xl border bg-card p-5`,children:[(0,f.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,f.jsx)(`div`,{className:`text-sm font-semibold text-foreground`,children:t(`reports.distribution.byUserAgent`)}),(0,f.jsx)(l,{metric:n,onChange:p})]}),(0,f.jsxs)(`div`,{className:`mt-4 flex items-center gap-4`,children:[(0,f.jsxs)(`div`,{className:`relative h-[140px] w-[140px] shrink-0`,children:[(0,f.jsxs)(`div`,{className:`pointer-events-none absolute inset-0 z-10 flex flex-col items-center justify-center text-center`,children:[(0,f.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,"data-testid":`useragent-distribution-center-label`,children:t(`reports.distribution.total`)}),(0,f.jsx)(`span`,{className:`max-w-[76px] text-sm font-semibold leading-tight tabular-nums text-foreground`,"data-testid":`useragent-distribution-center-value`,children:T})]}),(0,f.jsx)(i,{width:`100%`,height:`100%`,children:(0,f.jsx)(c,{children:(0,f.jsx)(s,{data:E,dataKey:w?`costUsd`:`requests`,nameKey:`useragent`,cx:`50%`,cy:`50%`,innerRadius:45,outerRadius:65,strokeWidth:0,shape:e=>{let t=e.payload,n=e.isActive||t?.id===m;return(0,f.jsx)(o,{...e,outerRadius:typeof e.outerRadius==`number`?e.outerRadius+(n?g:0):65+(n?g:0),stroke:n?`hsl(var(--background))`:`none`,strokeWidth:n?2:0})},onMouseEnter:e=>b(e.id),onMouseLeave:()=>b(null),children:E.map(e=>(0,f.jsx)(a,{fill:e.fill},e.id))})})})]}),(0,f.jsx)(`div`,{className:`flex-1 overflow-y-auto text-xs [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,"data-testid":`useragent-distribution-legend-list`,style:{maxHeight:`calc(${_} * ${v}rem)`},children:E.map((e,t)=>(0,f.jsxs)(`button`,{ref:t=>{x.current[e.id]=t},type:`button`,className:`flex h-8 w-full items-center justify-between rounded-md border px-2 py-1 text-left transition-all hover:bg-muted/50`,style:{borderColor:m===e.id?e.fill:`transparent`},onMouseEnter:()=>b(e.id),onMouseLeave:()=>b(null),onFocus:()=>b(e.id),onBlur:()=>b(null),"data-active":m===e.id?`true`:`false`,"data-testid":`useragent-distribution-legend-${t}`,children:[(0,f.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,f.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 rounded-[3px]`,style:{background:e.fill}}),(0,f.jsx)(`span`,{className:`text-foreground`,children:e.displayUseragent})]}),(0,f.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,f.jsxs)(`span`,{className:`tabular-nums text-muted-foreground`,children:[e.metricPercentage.toFixed(1),`%`]}),(0,f.jsx)(`span`,{className:`inline-block text-right font-medium tabular-nums text-foreground`,style:{minWidth:`${D}ch`},children:e.metricLabel})]})]},e.id))})]})]})}export{b as UseragentDistributionDonut};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-DBLzLNh2.js";var t={name:`users`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]};t.node;var n=e(t);export{n as t};
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./rolldown-runtime-hePW80VL.js";var n=t((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function x(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var S=x.prototype=new b;S.constructor=x,_(S,y.prototype),S.isPureReactComponent=!0;var C=Array.isArray;function w(){}var T={H:null,A:null,T:null,S:null},E=Object.prototype.hasOwnProperty;function D(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function O(e,t){return D(e.type,t,e.props)}function k(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function A(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var j=/\/+/g;function M(e,t){return typeof e==`object`&&e&&e.key!=null?A(``+e.key):t.toString(36)}function ee(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(w,w):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+M(e,0):a,C(o)?(i=``,c!=null&&(i=c.replace(j,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(k(o)&&(o=O(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(j,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(C(e))for(var u=0;u<e.length;u++)a=e[u],s=l+M(a,u),c+=N(a,r,i,s,o);else if(u=h(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+M(a,u++),c+=N(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return N(ee(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function P(e,t,n){if(e==null)return e;var r=[],i=0;return N(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function F(e){if(e._status===-1){var t=e._result,n=t();n.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t,n.status===void 0&&(n.status=`fulfilled`,n.value=t))},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t,n.status===void 0&&(n.status=`rejected`,n.reason=t))}),e._status===-1&&(e._status=0,e._result=n)}if(e._status===1)return e._result.default;throw e._result}var I=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)};function L(e){var t=T.T,n={};n.types=t===null?null:t.types,T.T=n;try{var r=e(),i=T.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(w,I)}catch(e){I(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),T.T=t}}function R(e){var t=T.T;if(t!==null){var n=t.types;n===null?t.types=[e]:n.indexOf(e)===-1&&n.push(e)}else L(R.bind(null,e))}var z={map:P,forEach:function(e,t,n){P(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return P(e,function(){t++}),t},toArray:function(e){return P(e,function(e){return e})||[]},only:function(e){if(!k(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=z,e.Component=y,e.Fragment=r,e.Profiler=a,e.PureComponent=x,e.StrictMode=i,e.Suspense=l,e.ViewTransition=p,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=T,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return T.H.useMemoCache(e)}},e.addTransitionType=R,e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=_({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!E.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return D(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)E.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return D(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=k,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:F}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=L,e.unstable_useCacheRefresh=function(){return T.H.useCacheRefresh()},e.use=function(e){return T.H.use(e)},e.useActionState=function(e,t,n){return T.H.useActionState(e,t,n)},e.useCallback=function(e,t){return T.H.useCallback(e,t)},e.useContext=function(e){return T.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return T.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return T.H.useEffect(e,t)},e.useEffectEvent=function(e){return T.H.useEffectEvent(e)},e.useId=function(){return T.H.useId()},e.useImperativeHandle=function(e,t,n){return T.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return T.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return T.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return T.H.useMemo(e,t)},e.useOptimistic=function(e,t){return T.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return T.H.useReducer(e,t,n)},e.useRef=function(e){return T.H.useRef(e)},e.useState=function(e){return T.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return T.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return T.H.useTransition()},e.version=`19.3.0`})),r=t(((e,t)=>{t.exports=n()})),i=t((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),a=t(((e,t)=>{t.exports=i()})),o=e(r(),1),s=a(),c=o.createContext(void 0),l=e=>{let t=o.useContext(c);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},u=({client:e,children:t})=>(o.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,s.jsx)(c.Provider,{value:e,children:t})),d={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},f=new class{#e=d;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function p(e){setTimeout(e,0)}var m=typeof window>`u`||`Deno`in globalThis;function h(){}function g(e,t){return typeof e==`function`?e(t):e}function _(e){return typeof e==`number`&&e>=0&&e!==1/0}function v(e,t){return Math.max(e+(t||0)-Date.now(),0)}function y(e,t){return typeof e==`function`?e(t):e}function b(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==S(o,t.options))return!1}else if(!w(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function x(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(C(t.options.mutationKey)!==C(a))return!1}else if(!w(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function S(e,t){return(t?.queryKeyHashFn||C)(e)}function C(e){return JSON.stringify(e,(e,t)=>k(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function w(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(Array.isArray(e)&&Array.isArray(t)){if(t.length>e.length)return!1;for(let n=0;n<t.length;n++)if(!w(e[n],t[n]))return!1;return!0}let n=Object.keys(t);for(let r of n)if(!w(e[r],t[r]))return!1;return!0}return!1}var T=Object.prototype.hasOwnProperty;function E(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=O(e)&&O(t);if(!r&&!(k(e)&&k(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l<o;l++){let o=r?l:a[l],u=e[o],d=t[o];if(u===d){s[o]=u,(r?l<i:T.call(e,o))&&c++;continue}if(u===null||d===null||typeof u!=`object`||typeof d!=`object`){s[o]=d;continue}let f=E(u,d,n+1);s[o]=f,f===u&&c++}return i===o&&c===i?e:s}function D(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function O(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function k(e){if(!A(e))return!1;let t=Object.getPrototypeOf(e),n=t?.constructor;if(n===void 0)return!0;if(typeof n!=`function`)return!1;let r=n.prototype;return!(!A(r)||!r.hasOwnProperty(`isPrototypeOf`)||t!==Object.prototype)}function A(e){return Object.prototype.toString.call(e)===`[object Object]`}function j(e){return new Promise(t=>{f.setTimeout(t,e)})}function M(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:E(e,t)}function ee(e){return e}function N(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function P(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var F=Symbol();function I(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===F?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function L(e,t){return typeof e==`function`?e(...t):!!e}function R(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r||(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0})),i)}),e}var z=()=>m,B=()=>z(),V=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},H=new class extends V{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},te=p;function ne(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=te,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var U=ne(),W=new class extends V{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function re(e){return Math.min(1e3*2**e,3e4)}function G(e){return(e??`online`)!==`online`||W.isOnline()}var K=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function q(e){let t=!1,n=0,r,i=`pending`,a,o,s=new Promise((e,t)=>{a=e,o=t});s.catch(h);let c=()=>i!==`pending`,l=t=>{if(!c()){let n=new K(t);g(n),e.onCancel?.(n)}},u=()=>{t=!0},d=()=>{t=!1},f=()=>H.isFocused()&&(e.networkMode===`always`||W.isOnline())&&e.canRun(),p=()=>G(e.networkMode)&&e.canRun(),m=e=>{c()||(r?.(),i=`resolved`,a(e))},g=e=>{c()||(r?.(),i=`rejected`,o(e))},_=()=>new Promise(t=>{r=e=>{(c()||f())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,c()||e.onContinue?.()}),v=()=>{if(c())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(m).catch(r=>{if(c())return;let i=e.retry??(B()?0:3),a=e.retryDelay??re,o=typeof a==`function`?a(n,r):a,s=i===!0||typeof i==`number`&&n<i||typeof i==`function`&&i(n,r);t||!s?g(r):(n++,e.onFail?.(n,r),j(o).then(()=>f()?void 0:_()).then(()=>{t?g(r):v()}))})};return{promise:s,status:()=>i,cancel:l,continue:()=>(r?.(),s),cancelRetry:u,continueRetry:d,canStart:p,start:()=>(p()?v():_().then(v),s)}}var J=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),_(this.gcTime)&&(this.#e=f.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(B()?1/0:3e5))}clearGcTimeout(){this.#e!==void 0&&(f.clearTimeout(this.#e),this.#e=void 0)}};function ie(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{R(e,()=>t.signal,()=>n=!0)},u=I(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?P:N;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?ae:Y,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:Y(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(c<t)}return s};t.fetchFn=t.options.persister?()=>t.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):l}}}function Y(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function ae(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var oe=class extends J{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=se(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=se(this.options);e.data!==void 0&&(this.setState(Z(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=M(this.state.data,e,this.options);return this.#c({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#c({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(h).catch(h):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>y(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===F||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>y(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!v(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){let t=this.observers.indexOf(e);t!==-1&&(this.observers.splice(t,1),this.observers.length||(this.#a&&(this.#s||this.state.fetchStatus===`paused`&&this.state.status===`pending`?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||this.#c({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)})},i=()=>{let e=I(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?ie(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#c({type:`fetch`,meta:a.fetchOptions?.meta});let o=this.#a=q({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof K&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#c({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#c({type:`pause`})},onContinue:()=>{this.#c({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await o.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof K){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#c({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.#a===o&&(this.#a=void 0),this.scheduleGc()}}#c(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...X(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...Z(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),U.batch(()=>{this.observers.slice().forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function X(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:G(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function Z(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function se(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var ce=class extends V{#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p=new Set;constructor(e,t){super(),this.options=t,this.#e=e,this.#o=null,this.bindMethods(),this.setOptions(t)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),ue(this.#t,this.options)?this.#m():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Q(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Q(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof y(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!D(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&de(this.#t,n,this.options,t)&&this.#m(),this.updateResult(),r&&(this.#t!==n||y(this.options.enabled,this.#t)!==y(t.enabled,this.#t)||y(this.options.staleTime,this.#t)!==y(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||y(this.options.enabled,this.#t)!==y(t.enabled,this.#t)||i!==this.#f)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return D(this.getCurrentResult(),n)||(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),Reflect.get(e,n))})}trackProp(e){this.#p.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t),r=()=>{},i,a=new Promise(e=>{i=e,r=this.#e.getQueryCache().subscribe(i=>{i.type===`updated`&&i.query.queryHash===n.queryHash&&n.state.data!==void 0&&(r(),e(this.createResult(n,t)))})});return Promise.race([n.fetch().then(()=>{let e=this.createResult(n,t);return i?.(e),e}).finally(()=>{r()}),a])}fetch(e){return this.#m({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#m(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(h)),t}#h(e){return!B()&&y(this.options.enabled,this.#t)!==!1&&_(e)}#g(){this.#b();let e=y(this.options.staleTime,this.#t);if(this.#r.isStale||!this.#h(e))return;let t=v(this.#r.dataUpdatedAt,e)+1;this.#u=f.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return y(this.options.refetchInterval,this.#t)??!1}#v(e){this.#x(),this.#f=e,this.#f!==0&&this.#h(this.#f)&&(this.#d=f.setInterval(()=>{(this.options.refetchIntervalInBackground||H.isFocused())&&this.#m()},this.#f))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#u!==void 0&&(f.clearTimeout(this.#u),this.#u=void 0)}#x(){this.#d!==void 0&&(f.clearInterval(this.#d),this.#d=void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&ue(e,t),o=i&&de(e,n,t,r);(a||o)&&(l={...l,...X(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#l?.state.data,this.#l):t.placeholderData,e!==void 0&&(m=`success`,d=M(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h){if(i&&d===a?.data&&t.select===this.#s)d=this.#c;else try{this.#s=t.select,d=t.select(d),d=M(i?.data,d,t),this.#c=d,this.#o=null}catch(e){this.#o=e}}else d===void 0&&(this.#o=null);this.#o&&(f=this.#o,d=this.#c,p=Date.now(),m=`error`,u=!1);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,b=_&&g,x=d!==void 0;return{status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:b,isLoading:b,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!x,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&x,isStale:$(e,t),refetch:this.refetch,isEnabled:y(t.enabled,e)!==!1}}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);if(this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#l=this.#t),D(t,e))return;this.#r=t;let n=(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#p.size)return!0;let r=new Set(n??this.#p);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})();U.batch(()=>{n&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}};function le(e,t){return y(t.enabled,e)!==!1&&e.state.data===void 0&&(e.state.status!==`error`||y(t.retryOnMount,e)!==!1)}function ue(e,t){return le(e,t)||e.state.data!==void 0&&Q(e,t,t.refetchOnMount)}function Q(e,t,n){if(y(t.enabled,e)!==!1&&y(t.staleTime,e)!==`static`){let r=y(n,e);return r===`always`||r!==!1&&$(e,t)}return!1}function de(e,t,n,r){return(e!==t||y(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&$(e,n)}function $(e,t){return y(t.enabled,e)!==!1&&e.isStaleByTime(y(t.staleTime,e))}var fe=class extends J{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||pe(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??(this.state.status===`pending`?this.execute(this.state.variables):Promise.resolve())}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey},r=this.#r=q({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)}),i=this.state.status===`pending`,a=!r.canStart();try{if(i)t();else{this.#i({type:`pending`,variables:e,isPaused:a}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:a})}let o=await r.start();return await this.#n.config.onSuccess?.(o,e,this.state.context,this,n),await this.options.onSuccess?.(o,e,this.state.context,n),await this.#n.config.onSettled?.(o,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(o,null,e,this.state.context,n),this.#i({type:`success`,data:o}),o}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#r===r&&(this.#r=void 0),this.#n.runNext(this)}}#i(e){let t=t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}};this.state=t(this.state),U.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function pe(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var me=class extends V{#e;#t=void 0;#n;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),D(this.options,t)||this.#e.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&C(t.mutationKey)!==C(this.options.mutationKey)?this.reset():this.#n?.state.status===`pending`&&this.#n.setOptions(this.options)}onSubscribe(){this.listeners.size===1&&this.#n&&(this.#n.addObserver(this),this.#i())}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#i(){let e=this.#n?.state??pe();this.#t={...e,isPending:e.status===`pending`,isSuccess:e.status===`success`,isError:e.status===`error`,isIdle:e.status===`idle`,mutate:this.mutate,reset:this.reset}}#a(e){U.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,n=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type===`success`){try{this.#r.onSuccess?.(e.data,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,n,r)}catch(e){Promise.reject(e)}}else if(e?.type===`error`){try{this.#r.onError?.(e.error,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,n,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},he=o.createContext(!1),ge=()=>o.useContext(he);he.Provider;function _e(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var ve=o.createContext(_e()),ye=()=>o.useContext(ve),be=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?L(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||r)&&(t.isReset()||(e.retryOnMount=!1))},xe=e=>{o.useEffect(()=>{e.clearReset()},[e])},Se=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||L(n,[e.error,r])),Ce=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},we=(e,t)=>e?.suspense&&t.isPending,Te=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function Ee(e,t,n){let r=ge(),i=ye(),a=l(n),s=a.defaultQueryOptions(e),c=a.getQueryCache().get(s.queryHash),u=e.subscribed!==!1;s._optimisticResults=r?`isRestoring`:u?`optimistic`:void 0,Ce(s),be(s,i,c),xe(i);let[d]=o.useState(()=>new t(a,s)),f=d.getOptimisticResult(s),p=!r&&u;if(o.useSyncExternalStore(o.useCallback(e=>{let t=p?d.subscribe(U.batchCalls(e)):h;return d.updateResult(),t},[d,p]),()=>d.getCurrentResult(),()=>d.getCurrentResult()),o.useEffect(()=>{d.setOptions(s)},[s,d]),we(s,f))throw Te(s,d,i);if(Se({result:f,errorResetBoundary:i,throwOnError:s.throwOnError,query:c,suspense:s.suspense}))throw f.error;return s.notifyOnChangeProps?f:d.trackResult(f)}function De(e,t){return Ee(e,ce,t)}function Oe(e,t){let n=l(t),r=n.getQueryCache();return o.useSyncExternalStore(o.useCallback(e=>r.subscribe(U.batchCalls(e)),[r]),()=>n.isFetching(e),()=>n.isFetching(e))}function ke(e,t){let n=l(t),[r]=o.useState(()=>new me(n,e));o.useEffect(()=>{r.setOptions(e)},[r,e]);let i=o.useSyncExternalStore(o.useCallback(e=>r.subscribe(U.batchCalls(e)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),a=o.useCallback((...e)=>{r.mutate(e[0],e[1]).catch(h)},[r]);if(i.error&&L(r.options.throwOnError,[i.error]))throw i.error;return{...i,mutate:a,mutateAsync:i.mutate}}export{r as C,a as S,w as _,oe as a,u as b,H as c,C as d,S as f,h as g,b as h,fe as i,V as l,x as m,Oe as n,W as o,ee as p,De as r,U as s,ke as t,g as u,y as v,l as x,F as y};