@kaitranntt/ccs 8.4.0-dev.9 → 8.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/config/base-claude.settings.json +1 -1
- package/config/base-glm.settings.json +4 -4
- package/config/base-glmt.settings.json +4 -4
- package/config/base-km.settings.json +4 -4
- package/config/base-mm.settings.json +4 -4
- package/dist/api/services/cliproxy-profile-bridge.d.ts.map +1 -1
- package/dist/api/services/cliproxy-profile-bridge.js +20 -9
- package/dist/api/services/cliproxy-profile-bridge.js.map +1 -1
- package/dist/auth/profile-registry.d.ts.map +1 -1
- package/dist/auth/profile-registry.js +13 -12
- package/dist/auth/profile-registry.js.map +1 -1
- package/dist/cliproxy/accounts/account-safety.d.ts.map +1 -1
- package/dist/cliproxy/accounts/account-safety.js +56 -56
- package/dist/cliproxy/accounts/account-safety.js.map +1 -1
- package/dist/cliproxy/auth/antigravity-responsibility.d.ts.map +1 -1
- package/dist/cliproxy/auth/antigravity-responsibility.js +15 -15
- package/dist/cliproxy/auth/antigravity-responsibility.js.map +1 -1
- package/dist/cliproxy/auth/auth-token-manager.d.ts.map +1 -1
- package/dist/cliproxy/auth/auth-token-manager.js +2 -1
- package/dist/cliproxy/auth/auth-token-manager.js.map +1 -1
- package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
- package/dist/cliproxy/auth/auth-types.js +3 -2
- package/dist/cliproxy/auth/auth-types.js.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.js +16 -5
- package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
- package/dist/cliproxy/auth/provider-refreshers/index.d.ts +2 -1
- package/dist/cliproxy/auth/provider-refreshers/index.d.ts.map +1 -1
- package/dist/cliproxy/auth/provider-refreshers/index.js +4 -2
- package/dist/cliproxy/auth/provider-refreshers/index.js.map +1 -1
- package/dist/cliproxy/auth/token-manager.d.ts +2 -1
- package/dist/cliproxy/auth/token-manager.d.ts.map +1 -1
- package/dist/cliproxy/auth/token-manager.js +2 -1
- package/dist/cliproxy/auth/token-manager.js.map +1 -1
- package/dist/cliproxy/config/env-builder.d.ts +19 -2
- package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
- package/dist/cliproxy/config/env-builder.js +40 -5
- package/dist/cliproxy/config/env-builder.js.map +1 -1
- package/dist/cliproxy/config/model-config.d.ts.map +1 -1
- package/dist/cliproxy/config/model-config.js +32 -32
- package/dist/cliproxy/config/model-config.js.map +1 -1
- package/dist/cliproxy/executor/arg-parser.d.ts.map +1 -1
- package/dist/cliproxy/executor/arg-parser.js +26 -26
- package/dist/cliproxy/executor/arg-parser.js.map +1 -1
- package/dist/cliproxy/executor/auth-coordinator.d.ts.map +1 -1
- package/dist/cliproxy/executor/auth-coordinator.js +15 -14
- package/dist/cliproxy/executor/auth-coordinator.js.map +1 -1
- package/dist/cliproxy/executor/index.d.ts.map +1 -1
- package/dist/cliproxy/executor/index.js +27 -17
- package/dist/cliproxy/executor/index.js.map +1 -1
- package/dist/cliproxy/executor/lifecycle-manager.d.ts.map +1 -1
- package/dist/cliproxy/executor/lifecycle-manager.js +18 -16
- package/dist/cliproxy/executor/lifecycle-manager.js.map +1 -1
- package/dist/cliproxy/executor/model-warnings.d.ts.map +1 -1
- package/dist/cliproxy/executor/model-warnings.js +24 -13
- package/dist/cliproxy/executor/model-warnings.js.map +1 -1
- package/dist/cliproxy/executor/retry-handler.d.ts.map +1 -1
- package/dist/cliproxy/executor/retry-handler.js +13 -11
- package/dist/cliproxy/executor/retry-handler.js.map +1 -1
- package/dist/cliproxy/executor/session-bridge.d.ts.map +1 -1
- package/dist/cliproxy/executor/session-bridge.js +18 -10
- package/dist/cliproxy/executor/session-bridge.js.map +1 -1
- package/dist/cliproxy/management/remote-token-uploader.d.ts.map +1 -1
- package/dist/cliproxy/management/remote-token-uploader.js +11 -11
- package/dist/cliproxy/management/remote-token-uploader.js.map +1 -1
- package/dist/cliproxy/provider-capabilities.d.ts +6 -0
- package/dist/cliproxy/provider-capabilities.d.ts.map +1 -1
- package/dist/cliproxy/provider-capabilities.js +28 -3
- package/dist/cliproxy/provider-capabilities.js.map +1 -1
- package/dist/cliproxy/proxy/https-tunnel-proxy.d.ts +5 -1
- package/dist/cliproxy/proxy/https-tunnel-proxy.d.ts.map +1 -1
- package/dist/cliproxy/proxy/https-tunnel-proxy.js +22 -10
- package/dist/cliproxy/proxy/https-tunnel-proxy.js.map +1 -1
- package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts +0 -12
- package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
- package/dist/cliproxy/proxy/tool-sanitization-proxy.js +42 -72
- package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.d.ts +21 -0
- package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.js +154 -0
- package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.d.ts +35 -0
- package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.js +98 -0
- package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.d.ts +22 -0
- package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.js +111 -0
- package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.d.ts +17 -0
- package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.js +85 -0
- package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/constants.d.ts +25 -0
- package/dist/cliproxy/quota/quota-fetcher/constants.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/constants.js +31 -0
- package/dist/cliproxy/quota/quota-fetcher/constants.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/http-client.d.ts +29 -0
- package/dist/cliproxy/quota/quota-fetcher/http-client.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/http-client.js +199 -0
- package/dist/cliproxy/quota/quota-fetcher/http-client.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/project-lookup.d.ts +16 -0
- package/dist/cliproxy/quota/quota-fetcher/project-lookup.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/project-lookup.js +89 -0
- package/dist/cliproxy/quota/quota-fetcher/project-lookup.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/status-classifier.d.ts +29 -0
- package/dist/cliproxy/quota/quota-fetcher/status-classifier.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/status-classifier.js +168 -0
- package/dist/cliproxy/quota/quota-fetcher/status-classifier.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/types.d.ts +165 -0
- package/dist/cliproxy/quota/quota-fetcher/types.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher/types.js +9 -0
- package/dist/cliproxy/quota/quota-fetcher/types.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-claude.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-claude.js +14 -3
- package/dist/cliproxy/quota/quota-fetcher-claude.js.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-codex.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-codex.js +36 -9
- package/dist/cliproxy/quota/quota-fetcher-codex.js.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.d.ts +26 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.js +132 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.d.ts +23 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.js +54 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.d.ts +26 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.js +29 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.d.ts +61 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.js +259 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.d.ts +20 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.js +38 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.d.ts +82 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.js +263 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.d.ts +46 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.js +188 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.d.ts +35 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.js +65 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.d.ts +37 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.js +117 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.d.ts +31 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.js +77 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.d.ts +114 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.d.ts.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.js +10 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli.d.ts +13 -58
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli.js +20 -819
- package/dist/cliproxy/quota/quota-fetcher-gemini-cli.js.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-ghcp.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-ghcp.js +19 -4
- package/dist/cliproxy/quota/quota-fetcher-ghcp.js.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher.d.ts +12 -108
- package/dist/cliproxy/quota/quota-fetcher.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher.js +23 -766
- package/dist/cliproxy/quota/quota-fetcher.js.map +1 -1
- package/dist/cliproxy/routing/routing-strategy.d.ts.map +1 -1
- package/dist/cliproxy/routing/routing-strategy.js +11 -3
- package/dist/cliproxy/routing/routing-strategy.js.map +1 -1
- package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.d.ts +26 -0
- package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.js +82 -0
- package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.d.ts +41 -0
- package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.js +202 -0
- package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/format-helpers.d.ts +32 -0
- package/dist/commands/cliproxy/quota-subcommand/format-helpers.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/format-helpers.js +90 -0
- package/dist/commands/cliproxy/quota-subcommand/format-helpers.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/handlers.d.ts +25 -0
- package/dist/commands/cliproxy/quota-subcommand/handlers.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/handlers.js +245 -0
- package/dist/commands/cliproxy/quota-subcommand/handlers.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/profile-args.d.ts +10 -0
- package/dist/commands/cliproxy/quota-subcommand/profile-args.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/profile-args.js +37 -0
- package/dist/commands/cliproxy/quota-subcommand/profile-args.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/provider-runtime.d.ts +12 -0
- package/dist/commands/cliproxy/quota-subcommand/provider-runtime.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/provider-runtime.js +64 -0
- package/dist/commands/cliproxy/quota-subcommand/provider-runtime.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.d.ts +27 -0
- package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.js +74 -0
- package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.d.ts +10 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.js +46 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/claude.d.ts +14 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/claude.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/claude.js +68 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/claude.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/codex.d.ts +14 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/codex.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/codex.js +82 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/codex.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.d.ts +14 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.js +61 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.d.ts +13 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.js +63 -0
- package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/test-exports.d.ts +19 -0
- package/dist/commands/cliproxy/quota-subcommand/test-exports.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/test-exports.js +22 -0
- package/dist/commands/cliproxy/quota-subcommand/test-exports.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/types.d.ts +42 -0
- package/dist/commands/cliproxy/quota-subcommand/types.d.ts.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand/types.js +9 -0
- package/dist/commands/cliproxy/quota-subcommand/types.js.map +1 -0
- package/dist/commands/cliproxy/quota-subcommand.d.ts +14 -36
- package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
- package/dist/commands/cliproxy/quota-subcommand.js +21 -872
- package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
- package/dist/commands/command-catalog.js +1 -1
- package/dist/commands/command-catalog.js.map +1 -1
- package/dist/commands/persist-command/arg-parsing.d.ts +14 -0
- package/dist/commands/persist-command/arg-parsing.d.ts.map +1 -0
- package/dist/commands/persist-command/arg-parsing.js +84 -0
- package/dist/commands/persist-command/arg-parsing.js.map +1 -0
- package/dist/commands/persist-command/backup-rotation.d.ts +23 -0
- package/dist/commands/persist-command/backup-rotation.d.ts.map +1 -0
- package/dist/commands/persist-command/backup-rotation.js +260 -0
- package/dist/commands/persist-command/backup-rotation.js.map +1 -0
- package/dist/commands/persist-command/handler.d.ts +10 -0
- package/dist/commands/persist-command/handler.d.ts.map +1 -0
- package/dist/commands/persist-command/handler.js +267 -0
- package/dist/commands/persist-command/handler.js.map +1 -0
- package/dist/commands/persist-command/help.d.ts +9 -0
- package/dist/commands/persist-command/help.d.ts.map +1 -0
- package/dist/commands/persist-command/help.js +86 -0
- package/dist/commands/persist-command/help.js.map +1 -0
- package/dist/commands/persist-command/receipt.d.ts +13 -0
- package/dist/commands/persist-command/receipt.d.ts.map +1 -0
- package/dist/commands/persist-command/receipt.js +102 -0
- package/dist/commands/persist-command/receipt.js.map +1 -0
- package/dist/commands/persist-command/secret-detection.d.ts +11 -0
- package/dist/commands/persist-command/secret-detection.d.ts.map +1 -0
- package/dist/commands/persist-command/secret-detection.js +54 -0
- package/dist/commands/persist-command/secret-detection.js.map +1 -0
- package/dist/commands/persist-command/secure-file.d.ts +21 -0
- package/dist/commands/persist-command/secure-file.d.ts.map +1 -0
- package/dist/commands/persist-command/secure-file.js +231 -0
- package/dist/commands/persist-command/secure-file.js.map +1 -0
- package/dist/commands/persist-command/types.d.ts +42 -0
- package/dist/commands/persist-command/types.d.ts.map +1 -0
- package/dist/commands/persist-command/types.js +34 -0
- package/dist/commands/persist-command/types.js.map +1 -0
- package/dist/commands/persist-command.d.ts +7 -2
- package/dist/commands/persist-command.d.ts.map +1 -1
- package/dist/commands/persist-command.js +17 -933
- package/dist/commands/persist-command.js.map +1 -1
- package/dist/copilot/copilot-executor.js +25 -25
- package/dist/copilot/copilot-executor.js.map +1 -1
- package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
- package/dist/cursor/cursor-daemon-entry.js +34 -9
- package/dist/cursor/cursor-daemon-entry.js.map +1 -1
- package/dist/cursor/cursor-daemon.d.ts.map +1 -1
- package/dist/cursor/cursor-daemon.js +1 -0
- package/dist/cursor/cursor-daemon.js.map +1 -1
- package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
- package/dist/cursor/cursor-profile-executor.js +18 -17
- package/dist/cursor/cursor-profile-executor.js.map +1 -1
- package/dist/delegation/delegation-handler.d.ts.map +1 -1
- package/dist/delegation/delegation-handler.js +29 -23
- package/dist/delegation/delegation-handler.js.map +1 -1
- package/dist/delegation/headless-executor.d.ts +1 -0
- package/dist/delegation/headless-executor.d.ts.map +1 -1
- package/dist/delegation/headless-executor.js +36 -15
- package/dist/delegation/headless-executor.js.map +1 -1
- package/dist/delegation/session-manager.d.ts.map +1 -1
- package/dist/delegation/session-manager.js +12 -4
- package/dist/delegation/session-manager.js.map +1 -1
- package/dist/dispatcher/cli-argument-parser.d.ts +1 -1
- package/dist/dispatcher/cli-argument-parser.d.ts.map +1 -1
- package/dist/dispatcher/cli-argument-parser.js +24 -23
- package/dist/dispatcher/cli-argument-parser.js.map +1 -1
- package/dist/dispatcher/flows/cliproxy-flow.d.ts.map +1 -1
- package/dist/dispatcher/flows/cliproxy-flow.js +12 -15
- package/dist/dispatcher/flows/cliproxy-flow.js.map +1 -1
- package/dist/dispatcher/flows/copilot-flow.js +1 -1
- package/dist/dispatcher/flows/copilot-flow.js.map +1 -1
- package/dist/dispatcher/flows/cursor-flow.js +1 -1
- package/dist/dispatcher/flows/cursor-flow.js.map +1 -1
- package/dist/dispatcher/flows/settings-flow.d.ts.map +1 -1
- package/dist/dispatcher/flows/settings-flow.js +32 -29
- package/dist/dispatcher/flows/settings-flow.js.map +1 -1
- package/dist/dispatcher/profile-resolver.d.ts.map +1 -1
- package/dist/dispatcher/profile-resolver.js +16 -16
- package/dist/dispatcher/profile-resolver.js.map +1 -1
- package/dist/docker/supervisord-lifecycle.d.ts.map +1 -1
- package/dist/docker/supervisord-lifecycle.js +5 -1
- package/dist/docker/supervisord-lifecycle.js.map +1 -1
- package/dist/errors/error-types.d.ts +26 -22
- package/dist/errors/error-types.d.ts.map +1 -1
- package/dist/errors/error-types.js +15 -12
- package/dist/errors/error-types.js.map +1 -1
- package/dist/errors/exit-codes.d.ts +20 -13
- package/dist/errors/exit-codes.d.ts.map +1 -1
- package/dist/errors/exit-codes.js +32 -28
- package/dist/errors/exit-codes.js.map +1 -1
- package/dist/glmt/delta-accumulator.d.ts +1 -0
- package/dist/glmt/delta-accumulator.d.ts.map +1 -1
- package/dist/glmt/delta-accumulator.js +12 -4
- package/dist/glmt/delta-accumulator.js.map +1 -1
- package/dist/glmt/glmt-proxy.d.ts.map +1 -1
- package/dist/glmt/glmt-proxy.js +39 -10
- package/dist/glmt/glmt-proxy.js.map +1 -1
- package/dist/glmt/glmt-transformer.d.ts.map +1 -1
- package/dist/glmt/glmt-transformer.js +1 -4
- package/dist/glmt/glmt-transformer.js.map +1 -1
- package/dist/glmt/pipeline/request-transformer.d.ts.map +1 -1
- package/dist/glmt/pipeline/request-transformer.js +5 -1
- package/dist/glmt/pipeline/request-transformer.js.map +1 -1
- package/dist/glmt/pipeline/response-builder.d.ts.map +1 -1
- package/dist/glmt/pipeline/response-builder.js +7 -3
- package/dist/glmt/pipeline/response-builder.js.map +1 -1
- package/dist/glmt/pipeline/stream-parser.d.ts.map +1 -1
- package/dist/glmt/pipeline/stream-parser.js +11 -5
- package/dist/glmt/pipeline/stream-parser.js.map +1 -1
- package/dist/glmt/pipeline/tool-call-handler.d.ts.map +1 -1
- package/dist/glmt/pipeline/tool-call-handler.js +7 -1
- package/dist/glmt/pipeline/tool-call-handler.js.map +1 -1
- package/dist/glmt/sse-parser.d.ts +1 -0
- package/dist/glmt/sse-parser.d.ts.map +1 -1
- package/dist/glmt/sse-parser.js +7 -3
- package/dist/glmt/sse-parser.js.map +1 -1
- package/dist/management/shared-manager/fs-helpers.d.ts +69 -0
- package/dist/management/shared-manager/fs-helpers.d.ts.map +1 -0
- package/dist/management/shared-manager/fs-helpers.js +241 -0
- package/dist/management/shared-manager/fs-helpers.js.map +1 -0
- package/dist/management/shared-manager/migrations.d.ts +21 -0
- package/dist/management/shared-manager/migrations.d.ts.map +1 -0
- package/dist/management/shared-manager/migrations.js +187 -0
- package/dist/management/shared-manager/migrations.js.map +1 -0
- package/dist/management/shared-manager/orchestrator.d.ts +87 -0
- package/dist/management/shared-manager/orchestrator.d.ts.map +1 -0
- package/dist/management/shared-manager/orchestrator.js +161 -0
- package/dist/management/shared-manager/orchestrator.js.map +1 -0
- package/dist/management/shared-manager/plugin-layout-internals.d.ts +42 -0
- package/dist/management/shared-manager/plugin-layout-internals.d.ts.map +1 -0
- package/dist/management/shared-manager/plugin-layout-internals.js +192 -0
- package/dist/management/shared-manager/plugin-layout-internals.js.map +1 -0
- package/dist/management/shared-manager/plugin-metadata-normalizer.d.ts +53 -0
- package/dist/management/shared-manager/plugin-metadata-normalizer.d.ts.map +1 -0
- package/dist/management/shared-manager/plugin-metadata-normalizer.js +253 -0
- package/dist/management/shared-manager/plugin-metadata-normalizer.js.map +1 -0
- package/dist/management/shared-manager/project-context-sync.d.ts +36 -0
- package/dist/management/shared-manager/project-context-sync.d.ts.map +1 -0
- package/dist/management/shared-manager/project-context-sync.js +204 -0
- package/dist/management/shared-manager/project-context-sync.js.map +1 -0
- package/dist/management/shared-manager/project-memory-sync.d.ts +21 -0
- package/dist/management/shared-manager/project-memory-sync.d.ts.map +1 -0
- package/dist/management/shared-manager/project-memory-sync.js +113 -0
- package/dist/management/shared-manager/project-memory-sync.js.map +1 -0
- package/dist/management/shared-manager/shared-dir-linker.d.ts +41 -0
- package/dist/management/shared-manager/shared-dir-linker.d.ts.map +1 -0
- package/dist/management/shared-manager/shared-dir-linker.js +227 -0
- package/dist/management/shared-manager/shared-dir-linker.js.map +1 -0
- package/dist/management/shared-manager/symlink-helpers.d.ts +61 -0
- package/dist/management/shared-manager/symlink-helpers.d.ts.map +1 -0
- package/dist/management/shared-manager/symlink-helpers.js +243 -0
- package/dist/management/shared-manager/symlink-helpers.js.map +1 -0
- package/dist/management/shared-manager/types.d.ts +45 -0
- package/dist/management/shared-manager/types.d.ts.map +1 -0
- package/dist/management/shared-manager/types.js +57 -0
- package/dist/management/shared-manager/types.js.map +1 -0
- package/dist/management/shared-manager.d.ts +13 -160
- package/dist/management/shared-manager.d.ts.map +1 -1
- package/dist/management/shared-manager.js +18 -1294
- package/dist/management/shared-manager.js.map +1 -1
- package/dist/proxy/proxy-daemon-entry.js +1 -1
- package/dist/proxy/proxy-daemon-entry.js.map +1 -1
- package/dist/proxy/transformers/sse-stream-transformer.d.ts.map +1 -1
- package/dist/proxy/transformers/sse-stream-transformer.js +12 -17
- package/dist/proxy/transformers/sse-stream-transformer.js.map +1 -1
- package/dist/services/logging/index.d.ts +1 -1
- package/dist/services/logging/index.d.ts.map +1 -1
- package/dist/services/logging/index.js +6 -1
- package/dist/services/logging/index.js.map +1 -1
- package/dist/services/logging/log-context.d.ts +27 -2
- package/dist/services/logging/log-context.d.ts.map +1 -1
- package/dist/services/logging/log-context.js +43 -4
- package/dist/services/logging/log-context.js.map +1 -1
- package/dist/services/logging/log-redaction.d.ts +9 -0
- package/dist/services/logging/log-redaction.d.ts.map +1 -1
- package/dist/services/logging/log-redaction.js +31 -3
- package/dist/services/logging/log-redaction.js.map +1 -1
- package/dist/services/logging/logger.js +2 -2
- package/dist/services/logging/logger.js.map +1 -1
- package/dist/shared/provider-preset-catalog.js +7 -7
- package/dist/shared/provider-preset-catalog.js.map +1 -1
- package/dist/targets/codex-adapter.d.ts.map +1 -1
- package/dist/targets/codex-adapter.js +11 -10
- package/dist/targets/codex-adapter.js.map +1 -1
- package/dist/targets/droid-adapter.d.ts.map +1 -1
- package/dist/targets/droid-adapter.js +12 -12
- package/dist/targets/droid-adapter.js.map +1 -1
- package/dist/ui/assets/{Trans-BXjW_Rw3.js → Trans-GYzYLs2D.js} +1 -1
- package/dist/ui/assets/{accounts-C7JMc-UL.js → accounts-DC1QuyI9.js} +1 -1
- package/dist/ui/assets/{alert-dialog-BSSHnWG_.js → alert-dialog-6SiedqmE.js} +1 -1
- package/dist/ui/assets/{api-GzEZNvOJ.js → api-3s21dbNJ.js} +1 -1
- package/dist/ui/assets/{auth-section-B6k7LWIq.js → auth-section-XBfNgVN4.js} +1 -1
- package/dist/ui/assets/{backups-section-Cr3g01YN.js → backups-section-BidiiVlq.js} +1 -1
- package/dist/ui/assets/{channels-CMyh1yhN.js → channels-pfgPUDGt.js} +1 -1
- package/dist/ui/assets/{checkbox-BkqYXiER.js → checkbox-CJw_-nvC.js} +1 -1
- package/dist/ui/assets/{claude-extension-BzYl3zcz.js → claude-extension-BIIUOvTJ.js} +1 -1
- package/dist/ui/assets/{cliproxy-DwzKzuZI.js → cliproxy-Cq8OX0Pu.js} +1 -1
- package/dist/ui/assets/{cliproxy-ai-providers-DL95SYNa.js → cliproxy-ai-providers-DI760ZF0.js} +1 -1
- package/dist/ui/assets/{cliproxy-control-panel-Ba2Rgzdo.js → cliproxy-control-panel-CBqvpOqj.js} +1 -1
- package/dist/ui/assets/{codex-ClTEGCnr.js → codex-DL4OLBUu.js} +1 -1
- package/dist/ui/assets/{confirm-dialog-BPAO4ILr.js → confirm-dialog-CC_Cc3EO.js} +1 -1
- package/dist/ui/assets/{copilot-CymHD4gl.js → copilot-D2kEhTXR.js} +1 -1
- package/dist/ui/assets/{cursor-DAiPXs8h.js → cursor-BashLrYk.js} +1 -1
- package/dist/ui/assets/{droid-CAhLWDOj.js → droid-DaKTINFL.js} +1 -1
- package/dist/ui/assets/{globalenv-section-BK5x_uXG.js → globalenv-section-BQicL8L0.js} +1 -1
- package/dist/ui/assets/{health-D_ErMvYv.js → health-bRbE_ADg.js} +1 -1
- package/dist/ui/assets/{index-BcfwoMDm.js → index-B2JEyN3d.js} +36 -36
- package/dist/ui/assets/{index-B4cUkPwc.js → index-BwZdl1HU.js} +1 -1
- package/dist/ui/assets/{index-BZMyk4bI.js → index-CgeAb1-K.js} +1 -1
- package/dist/ui/assets/{index-BmbKPprT.js → index-DAQ0qIQ_.js} +1 -1
- package/dist/ui/assets/{index-CEjVNSjg.js → index-O2x1grGh.js} +1 -1
- package/dist/ui/assets/{index-DCC80SZ0.js → index-WA7tK6np.js} +1 -1
- package/dist/ui/assets/{index-CFDjAXOB.js → index-mf2X1GwS.js} +1 -1
- package/dist/ui/assets/{logs-DwhXr-9Y.js → logs-qrBHUJ0H.js} +1 -1
- package/dist/ui/assets/{masked-input-DWJTe7jh.js → masked-input-CXwQ4E-g.js} +1 -1
- package/dist/ui/assets/{proxy-status-widget-CJXi8yui.js → proxy-status-widget-DPz4nCzR.js} +1 -1
- package/dist/ui/assets/{raw-json-settings-editor-panel-DWhAi0kI.js → raw-json-settings-editor-panel-CcvsWVh1.js} +1 -1
- package/dist/ui/assets/{searchable-select-CYC4Y8pS.js → searchable-select-EXSjNCRu.js} +1 -1
- package/dist/ui/assets/{separator-JhuNwVKE.js → separator-D2CTfWBQ.js} +1 -1
- package/dist/ui/assets/{shared-Hpgs7l5G.js → shared-DpgzhFqe.js} +1 -1
- package/dist/ui/assets/{table-DDJTZfyL.js → table-DwbiGRYk.js} +1 -1
- package/dist/ui/assets/{updates-CtygOHUO.js → updates-D8jfIb2y.js} +1 -1
- package/dist/ui/assets/{use-accounts-CaptC8AS.js → use-accounts-Bwtpnx-x.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -1
- package/dist/utils/image-analysis/mcp-installer.js +16 -13
- package/dist/utils/image-analysis/mcp-installer.js.map +1 -1
- package/dist/utils/websearch/index.d.ts +1 -1
- package/dist/utils/websearch/index.d.ts.map +1 -1
- package/dist/utils/websearch/index.js +2 -1
- package/dist/utils/websearch/index.js.map +1 -1
- package/dist/utils/websearch/mcp-installer.d.ts +8 -0
- package/dist/utils/websearch/mcp-installer.d.ts.map +1 -1
- package/dist/utils/websearch/mcp-installer.js +34 -13
- package/dist/utils/websearch/mcp-installer.js.map +1 -1
- package/dist/utils/websearch-manager.d.ts +1 -1
- package/dist/utils/websearch-manager.d.ts.map +1 -1
- package/dist/utils/websearch-manager.js +2 -1
- package/dist/utils/websearch-manager.js.map +1 -1
- package/dist/web-server/middleware/request-logging-middleware.d.ts.map +1 -1
- package/dist/web-server/middleware/request-logging-middleware.js +14 -9
- package/dist/web-server/middleware/request-logging-middleware.js.map +1 -1
- package/dist/web-server/model-pricing.d.ts.map +1 -1
- package/dist/web-server/model-pricing.js +22 -2
- package/dist/web-server/model-pricing.js.map +1 -1
- package/dist/web-server/routes/bar-routes.d.ts +12 -1
- package/dist/web-server/routes/bar-routes.d.ts.map +1 -1
- package/dist/web-server/routes/bar-routes.js +22 -6
- package/dist/web-server/routes/bar-routes.js.map +1 -1
- package/dist/web-server/routes/claude-extension-routes.d.ts.map +1 -1
- package/dist/web-server/routes/claude-extension-routes.js +3 -2
- package/dist/web-server/routes/claude-extension-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts +1 -0
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +20 -5
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-stats-routes/config-routes.d.ts +16 -0
- package/dist/web-server/routes/cliproxy-stats-routes/config-routes.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/config-routes.js +219 -0
- package/dist/web-server/routes/cliproxy-stats-routes/config-routes.js.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.d.ts +12 -0
- package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.js +153 -0
- package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.js.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.d.ts +19 -0
- package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.js +38 -0
- package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.js.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.d.ts +13 -0
- package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.js +195 -0
- package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.js.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/restart-route.d.ts +17 -0
- package/dist/web-server/routes/cliproxy-stats-routes/restart-route.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/restart-route.js +34 -0
- package/dist/web-server/routes/cliproxy-stats-routes/restart-route.js.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/router.d.ts +10 -0
- package/dist/web-server/routes/cliproxy-stats-routes/router.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/router.js +245 -0
- package/dist/web-server/routes/cliproxy-stats-routes/router.js.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/shared.d.ts +35 -0
- package/dist/web-server/routes/cliproxy-stats-routes/shared.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/shared.js +59 -0
- package/dist/web-server/routes/cliproxy-stats-routes/shared.js.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.d.ts +44 -0
- package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.d.ts.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.js +66 -0
- package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.js.map +1 -0
- package/dist/web-server/routes/cliproxy-stats-routes.d.ts +16 -57
- package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-stats-routes.js +25 -926
- package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-sync-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-sync-routes.js +9 -2
- package/dist/web-server/routes/cliproxy-sync-routes.js.map +1 -1
- package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/copilot-settings-routes.js +2 -1
- package/dist/web-server/routes/copilot-settings-routes.js.map +1 -1
- package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
- package/dist/web-server/routes/image-analysis-routes.js +2 -1
- package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
- package/dist/web-server/routes/persist-routes.d.ts.map +1 -1
- package/dist/web-server/routes/persist-routes.js +8 -1
- package/dist/web-server/routes/persist-routes.js.map +1 -1
- package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
- package/dist/web-server/routes/proxy-routes.js +33 -5
- package/dist/web-server/routes/proxy-routes.js.map +1 -1
- package/dist/web-server/routes/route-helpers.d.ts.map +1 -1
- package/dist/web-server/routes/route-helpers.js +10 -6
- package/dist/web-server/routes/route-helpers.js.map +1 -1
- package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/settings-routes.js +7 -6
- package/dist/web-server/routes/settings-routes.js.map +1 -1
- package/dist/web-server/usage/aggregator.d.ts.map +1 -1
- package/dist/web-server/usage/aggregator.js +8 -8
- package/dist/web-server/usage/aggregator.js.map +1 -1
- package/dist/web-server/usage/bar-analytics.d.ts +21 -0
- package/dist/web-server/usage/bar-analytics.d.ts.map +1 -1
- package/dist/web-server/usage/bar-analytics.js +78 -9
- package/dist/web-server/usage/bar-analytics.js.map +1 -1
- package/dist/web-server/usage/handlers.d.ts.map +1 -1
- package/dist/web-server/usage/handlers.js +1 -1
- package/dist/web-server/usage/handlers.js.map +1 -1
- package/dist/web-server/usage/native-quota-collector.d.ts +37 -9
- package/dist/web-server/usage/native-quota-collector.d.ts.map +1 -1
- package/dist/web-server/usage/native-quota-collector.js +226 -23
- package/dist/web-server/usage/native-quota-collector.js.map +1 -1
- package/package.json +1 -1
- package/scripts/ci-parity-gate.sh +31 -0
- package/scripts/generate-throw-error-baseline.js +103 -0
- package/scripts/hardening-inventory.js +62 -4
- package/scripts/maintainability-metrics.js +356 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Managed and direct HTTP request machinery for the Gemini CLI quota fetcher.
|
|
4
|
+
*
|
|
5
|
+
* Wraps the two upstream call paths used when fetching Gemini CLI quota and
|
|
6
|
+
* supplementary metadata:
|
|
7
|
+
* - managed: delegated through the CLIProxy management API (uses $TOKEN$
|
|
8
|
+
* substitution so the local process never holds the live token)
|
|
9
|
+
* - direct: bearer-token fetch against the Google Cloud Code endpoint
|
|
10
|
+
*
|
|
11
|
+
* The preferred path is configurable per call. On a 401 from the direct path,
|
|
12
|
+
* the managed path is retried as a delegated-auth refresh fallback. A
|
|
13
|
+
* `GeminiManagedAuthUnavailableError` is thrown when managed auth is required
|
|
14
|
+
* but unreachable, so callers can surface a retryable failure result.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.performGeminiCliRequest = exports.performManagedGeminiRequest = exports.getManagedGeminiAuthIndex = exports.findManagedGeminiAuthIndex = exports.isGeminiAuthFileForAccount = exports.isGeminiAuthFile = exports.readManagedResponse = exports.GeminiManagedAuthUnavailableError = void 0;
|
|
18
|
+
const proxy_target_resolver_1 = require("../../proxy/proxy-target-resolver");
|
|
19
|
+
const provider_capabilities_1 = require("../../provider-capabilities");
|
|
20
|
+
const auth_utils_1 = require("../../auth/auth-utils");
|
|
21
|
+
const constants_1 = require("./constants");
|
|
22
|
+
const shared_utils_1 = require("./shared-utils");
|
|
23
|
+
/**
|
|
24
|
+
* Thrown when Gemini delegated auth refresh via the CLIProxy management API
|
|
25
|
+
* is required but temporarily unreachable. Callers translate this into a
|
|
26
|
+
* retryable failure result.
|
|
27
|
+
*/
|
|
28
|
+
class GeminiManagedAuthUnavailableError extends Error {
|
|
29
|
+
constructor() {
|
|
30
|
+
super('CLIProxy managed Gemini auth is temporarily unavailable');
|
|
31
|
+
this.name = 'GeminiManagedAuthUnavailableError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.GeminiManagedAuthUnavailableError = GeminiManagedAuthUnavailableError;
|
|
35
|
+
/**
|
|
36
|
+
* Read a fetch Response into the normalized {@link ManagedResponse} shape.
|
|
37
|
+
* `viaManagement` marks whether the response came through the managed API so
|
|
38
|
+
* downstream log messages can attribute the source correctly.
|
|
39
|
+
*/
|
|
40
|
+
async function readManagedResponse(response, viaManagement) {
|
|
41
|
+
const bodyText = await response.text();
|
|
42
|
+
return {
|
|
43
|
+
status: response.status,
|
|
44
|
+
bodyText,
|
|
45
|
+
json: (0, shared_utils_1.safeParseJson)(bodyText),
|
|
46
|
+
viaManagement,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
exports.readManagedResponse = readManagedResponse;
|
|
50
|
+
/**
|
|
51
|
+
* Check whether a filename matches the Gemini CLI auth file naming patterns.
|
|
52
|
+
* Recognizes three patterns:
|
|
53
|
+
* - legacy: gemini-*.json
|
|
54
|
+
* - new: *-gen-lang-client-*.json
|
|
55
|
+
* - email: contains "@" (verified against type inside the payload later)
|
|
56
|
+
*/
|
|
57
|
+
function isGeminiAuthFile(filename) {
|
|
58
|
+
if (!filename.endsWith('.json'))
|
|
59
|
+
return false;
|
|
60
|
+
// Legacy pattern: gemini-email.json
|
|
61
|
+
if (filename.startsWith('gemini-'))
|
|
62
|
+
return true;
|
|
63
|
+
// New pattern: email-gen-lang-client-projectId.json
|
|
64
|
+
if (filename.includes('-gen-lang-client-'))
|
|
65
|
+
return true;
|
|
66
|
+
// Check if contains @ (email pattern) - will verify type inside
|
|
67
|
+
if (filename.includes('@'))
|
|
68
|
+
return true;
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
exports.isGeminiAuthFile = isGeminiAuthFile;
|
|
72
|
+
/**
|
|
73
|
+
* Determine whether a management-API auth-file descriptor belongs to the
|
|
74
|
+
* given Gemini account. Matches on provider/type normalized to "gemini",
|
|
75
|
+
* then on email, filename, or sanitized email substring.
|
|
76
|
+
*/
|
|
77
|
+
function isGeminiAuthFileForAccount(file, accountId) {
|
|
78
|
+
const rawProvider = (0, shared_utils_1.normalizeStringValue)(file.provider ?? file.type);
|
|
79
|
+
if (!rawProvider || (0, provider_capabilities_1.mapExternalProviderName)(rawProvider) !== 'gemini') {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
const email = (0, shared_utils_1.normalizeStringValue)(file.email);
|
|
83
|
+
const normalizedAccountId = accountId.trim().toLowerCase();
|
|
84
|
+
if (email?.toLowerCase() === normalizedAccountId) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
const normalizedName = (0, shared_utils_1.normalizeStringValue)(file.name);
|
|
88
|
+
if (!normalizedName) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
const normalizedFileName = normalizedName.toLowerCase();
|
|
92
|
+
const sanitizedAccount = (0, auth_utils_1.sanitizeEmail)(accountId).toLowerCase();
|
|
93
|
+
return (normalizedFileName === `gemini-${sanitizedAccount}.json` ||
|
|
94
|
+
normalizedFileName.startsWith(`${normalizedAccountId}-gen-lang-client-`) ||
|
|
95
|
+
normalizedFileName.includes(sanitizedAccount));
|
|
96
|
+
}
|
|
97
|
+
exports.isGeminiAuthFileForAccount = isGeminiAuthFileForAccount;
|
|
98
|
+
/**
|
|
99
|
+
* Look up the management-API auth index for a Gemini account.
|
|
100
|
+
* Hits `/v0/management/auth-files` and matches the entry for this account.
|
|
101
|
+
* Returns `{ unavailable: true }` if the management API is unreachable or
|
|
102
|
+
* returns a non-OK response, so callers can fall back to direct auth.
|
|
103
|
+
*/
|
|
104
|
+
async function findManagedGeminiAuthIndex(accountId, timeoutMs) {
|
|
105
|
+
const target = (0, proxy_target_resolver_1.getProxyTarget)();
|
|
106
|
+
const controller = new AbortController();
|
|
107
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
108
|
+
try {
|
|
109
|
+
const response = await fetch((0, proxy_target_resolver_1.buildProxyUrl)(target, '/v0/management/auth-files'), {
|
|
110
|
+
signal: controller.signal,
|
|
111
|
+
headers: (0, proxy_target_resolver_1.buildManagementHeaders)(target),
|
|
112
|
+
});
|
|
113
|
+
clearTimeout(timeoutId);
|
|
114
|
+
if (!response.ok) {
|
|
115
|
+
return { authIndex: null, unavailable: true };
|
|
116
|
+
}
|
|
117
|
+
const data = (await response.json());
|
|
118
|
+
const match = data.files?.find((file) => isGeminiAuthFileForAccount(file, accountId));
|
|
119
|
+
return { authIndex: match?.auth_index ?? null, unavailable: false };
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
clearTimeout(timeoutId);
|
|
123
|
+
return { authIndex: null, unavailable: true };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.findManagedGeminiAuthIndex = findManagedGeminiAuthIndex;
|
|
127
|
+
/**
|
|
128
|
+
* Look up the management auth index for a Gemini account, deduping concurrent
|
|
129
|
+
* lookups for the same account via the shared {@link ManagedGeminiAuthContext}.
|
|
130
|
+
* The first caller wins; subsequent callers await the same promise.
|
|
131
|
+
*/
|
|
132
|
+
async function getManagedGeminiAuthIndex(accountId, timeoutMs, context) {
|
|
133
|
+
if (!context) {
|
|
134
|
+
return await findManagedGeminiAuthIndex(accountId, timeoutMs);
|
|
135
|
+
}
|
|
136
|
+
context.authIndexLookupPromise ?? (context.authIndexLookupPromise = findManagedGeminiAuthIndex(accountId, timeoutMs));
|
|
137
|
+
return await context.authIndexLookupPromise;
|
|
138
|
+
}
|
|
139
|
+
exports.getManagedGeminiAuthIndex = getManagedGeminiAuthIndex;
|
|
140
|
+
/**
|
|
141
|
+
* Perform a single upstream request to the Gemini CLI API via the CLIProxy
|
|
142
|
+
* management `/v0/management/api-call` endpoint. Uses `$TOKEN$` substitution
|
|
143
|
+
* so the live token never leaves the management API. Returns
|
|
144
|
+
* `{ unavailable: true }` if the management path is unreachable; returns
|
|
145
|
+
* `{ response: null, unavailable: false }` if the request succeeded but no
|
|
146
|
+
* matching auth file was found.
|
|
147
|
+
*/
|
|
148
|
+
async function performManagedGeminiRequest(accountId, url, body, timeoutMs, authContext) {
|
|
149
|
+
const deadlineMs = Date.now() + timeoutMs;
|
|
150
|
+
const lookupResult = await getManagedGeminiAuthIndex(accountId, (0, shared_utils_1.getRemainingTimeoutMs)(deadlineMs), authContext);
|
|
151
|
+
if (lookupResult.unavailable) {
|
|
152
|
+
return { response: null, unavailable: true };
|
|
153
|
+
}
|
|
154
|
+
const authIndex = lookupResult.authIndex;
|
|
155
|
+
if (authIndex === null || authIndex === undefined) {
|
|
156
|
+
return { response: null, unavailable: false };
|
|
157
|
+
}
|
|
158
|
+
const target = (0, proxy_target_resolver_1.getProxyTarget)();
|
|
159
|
+
const controller = new AbortController();
|
|
160
|
+
const timeoutId = setTimeout(() => controller.abort(), (0, shared_utils_1.getRemainingTimeoutMs)(deadlineMs));
|
|
161
|
+
try {
|
|
162
|
+
const response = await fetch((0, proxy_target_resolver_1.buildProxyUrl)(target, '/v0/management/api-call'), {
|
|
163
|
+
method: 'POST',
|
|
164
|
+
signal: controller.signal,
|
|
165
|
+
headers: (0, proxy_target_resolver_1.buildManagementHeaders)(target, {
|
|
166
|
+
'Content-Type': 'application/json',
|
|
167
|
+
}),
|
|
168
|
+
body: JSON.stringify({
|
|
169
|
+
auth_index: authIndex,
|
|
170
|
+
method: 'POST',
|
|
171
|
+
url,
|
|
172
|
+
header: {
|
|
173
|
+
Authorization: 'Bearer $TOKEN$',
|
|
174
|
+
'Content-Type': 'application/json',
|
|
175
|
+
},
|
|
176
|
+
data: body,
|
|
177
|
+
}),
|
|
178
|
+
});
|
|
179
|
+
clearTimeout(timeoutId);
|
|
180
|
+
if (!response.ok) {
|
|
181
|
+
return { response: null, unavailable: true };
|
|
182
|
+
}
|
|
183
|
+
const apiResponse = (await response.json());
|
|
184
|
+
const bodyText = typeof apiResponse.body === 'string' ? apiResponse.body : '';
|
|
185
|
+
return {
|
|
186
|
+
response: {
|
|
187
|
+
status: typeof apiResponse.status_code === 'number' ? apiResponse.status_code : 500,
|
|
188
|
+
bodyText,
|
|
189
|
+
json: (0, shared_utils_1.safeParseJson)(bodyText),
|
|
190
|
+
viaManagement: true,
|
|
191
|
+
},
|
|
192
|
+
unavailable: false,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
clearTimeout(timeoutId);
|
|
197
|
+
return { response: null, unavailable: true };
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.performManagedGeminiRequest = performManagedGeminiRequest;
|
|
201
|
+
/**
|
|
202
|
+
* Perform a Gemini CLI upstream request, preferring the managed path when
|
|
203
|
+
* requested and falling back to direct bearer-token auth. On a 401 from the
|
|
204
|
+
* direct path, retries via managed auth as a delegated-auth refresh; throws
|
|
205
|
+
* {@link GeminiManagedAuthUnavailableError} if that retry is unreachable.
|
|
206
|
+
*
|
|
207
|
+
* @param accountId Account identifier (email), used for managed auth lookup.
|
|
208
|
+
* @param accessToken Bearer token for the direct path. Never logged.
|
|
209
|
+
* @param url Target Gemini CLI API URL.
|
|
210
|
+
* @param body JSON request body string.
|
|
211
|
+
* @param preferManagement When true, try the managed path first.
|
|
212
|
+
* @param authContext Optional shared context to dedupe auth-index lookups.
|
|
213
|
+
*/
|
|
214
|
+
async function performGeminiCliRequest(accountId, accessToken, url, body, preferManagement = false, authContext) {
|
|
215
|
+
let managementAttempted = false;
|
|
216
|
+
let managementUnavailable = false;
|
|
217
|
+
if (preferManagement) {
|
|
218
|
+
managementAttempted = true;
|
|
219
|
+
const managedResult = await performManagedGeminiRequest(accountId, url, body, constants_1.MANAGEMENT_API_TIMEOUT_MS, authContext);
|
|
220
|
+
managementUnavailable = managedResult.unavailable;
|
|
221
|
+
if (managedResult.response) {
|
|
222
|
+
return managedResult.response;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
const controller = new AbortController();
|
|
226
|
+
const timeoutId = setTimeout(() => controller.abort(), managementAttempted ? constants_1.SECONDARY_REQUEST_TIMEOUT_MS : constants_1.MANAGEMENT_API_TIMEOUT_MS);
|
|
227
|
+
try {
|
|
228
|
+
const response = await fetch(url, {
|
|
229
|
+
method: 'POST',
|
|
230
|
+
signal: controller.signal,
|
|
231
|
+
headers: {
|
|
232
|
+
Authorization: `Bearer ${accessToken}`,
|
|
233
|
+
'Content-Type': 'application/json',
|
|
234
|
+
},
|
|
235
|
+
body,
|
|
236
|
+
});
|
|
237
|
+
clearTimeout(timeoutId);
|
|
238
|
+
const directResult = await readManagedResponse(response, false);
|
|
239
|
+
if (directResult.status !== 401) {
|
|
240
|
+
return directResult;
|
|
241
|
+
}
|
|
242
|
+
if (managementAttempted) {
|
|
243
|
+
if (managementUnavailable) {
|
|
244
|
+
throw new GeminiManagedAuthUnavailableError();
|
|
245
|
+
}
|
|
246
|
+
return directResult;
|
|
247
|
+
}
|
|
248
|
+
const managedResult = await performManagedGeminiRequest(accountId, url, body, constants_1.SECONDARY_REQUEST_TIMEOUT_MS, authContext);
|
|
249
|
+
if (managedResult.response) {
|
|
250
|
+
return managedResult.response;
|
|
251
|
+
}
|
|
252
|
+
if (managedResult.unavailable) {
|
|
253
|
+
throw new GeminiManagedAuthUnavailableError();
|
|
254
|
+
}
|
|
255
|
+
return directResult;
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
clearTimeout(timeoutId);
|
|
259
|
+
throw error;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
exports.performGeminiCliRequest = performGeminiCliRequest;
|
|
263
|
+
//# sourceMappingURL=managed-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-request.js","sourceRoot":"","sources":["../../../../src/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Top-level quota fetch orchestration for Gemini CLI accounts.
|
|
3
|
+
*
|
|
4
|
+
* Coordinates auth-file discovery, the managed/direct upstream quota request,
|
|
5
|
+
* supplementary tier/credit metadata, and structured failure-result building.
|
|
6
|
+
* Preserves the structured logging from the original god file (events:
|
|
7
|
+
* gemini_cli.fetch_start, gemini_cli.auth_file_missing, gemini_cli.token_expired,
|
|
8
|
+
* gemini_cli.missing_project_id, gemini_cli.api_status, gemini_cli.buckets_found,
|
|
9
|
+
* gemini_cli.quota_fetch_error). Token values are never logged.
|
|
10
|
+
*/
|
|
11
|
+
import type { GeminiCliQuotaResult } from '../quota-types';
|
|
12
|
+
import type { GeminiCliAuthData } from './types';
|
|
13
|
+
/**
|
|
14
|
+
* Internal helper: fetch quota with already-validated auth data.
|
|
15
|
+
*
|
|
16
|
+
* Extracted to support the auto-refresh retry path: the caller resolves auth
|
|
17
|
+
* data once (legacy file or managed), then this function performs the upstream
|
|
18
|
+
* quota request and supplementary metadata fetch in parallel. On success it
|
|
19
|
+
* persists the resolved tier back to the account via `setAccountTier`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function fetchWithAuthData(authData: GeminiCliAuthData, accountId: string, verbose: boolean): Promise<GeminiCliQuotaResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Fetch quota for a single Gemini CLI account.
|
|
24
|
+
*
|
|
25
|
+
* Reads the on-disk auth file, emits the structured `gemini_cli.fetch_start`
|
|
26
|
+
* and `gemini_cli.auth_file_missing` / `gemini_cli.token_expired` log events
|
|
27
|
+
* (gated on `verbose`), and delegates to {@link fetchWithAuthData}. Token
|
|
28
|
+
* values are never logged; only the expiry label is surfaced.
|
|
29
|
+
*
|
|
30
|
+
* @param accountId - Account identifier (email)
|
|
31
|
+
* @param verbose - Show detailed diagnostics
|
|
32
|
+
* @returns Quota result with buckets, percentages, tier, and entitlement evidence
|
|
33
|
+
*/
|
|
34
|
+
export declare function fetchGeminiCliQuota(accountId: string, verbose?: boolean): Promise<GeminiCliQuotaResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Fetch quota for all configured Gemini CLI accounts in parallel.
|
|
37
|
+
*
|
|
38
|
+
* @param verbose - Show detailed diagnostics (forwarded to each per-account fetch)
|
|
39
|
+
* @returns Array of `{ account, quota }` entries, one per active Gemini account.
|
|
40
|
+
* Returns an empty array when there are no Gemini accounts configured.
|
|
41
|
+
*/
|
|
42
|
+
export declare function fetchAllGeminiCliQuotas(verbose?: boolean): Promise<{
|
|
43
|
+
account: string;
|
|
44
|
+
quota: GeminiCliQuotaResult;
|
|
45
|
+
}[]>;
|
|
46
|
+
//# sourceMappingURL=quota-fetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-fetcher.d.ts","sourceRoot":"","sources":["../../../../src/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAQ3D,OAAO,KAAK,EAAE,iBAAiB,EAAoD,MAAM,SAAS,CAAC;AAEnG;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,oBAAoB,CAAC,CA8H/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,UAAQ,GACd,OAAO,CAAC,oBAAoB,CAAC,CAoC/B;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,UAAQ,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,oBAAoB,CAAA;CAAE,EAAE,CAAC,CAe7D"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Top-level quota fetch orchestration for Gemini CLI accounts.
|
|
4
|
+
*
|
|
5
|
+
* Coordinates auth-file discovery, the managed/direct upstream quota request,
|
|
6
|
+
* supplementary tier/credit metadata, and structured failure-result building.
|
|
7
|
+
* Preserves the structured logging from the original god file (events:
|
|
8
|
+
* gemini_cli.fetch_start, gemini_cli.auth_file_missing, gemini_cli.token_expired,
|
|
9
|
+
* gemini_cli.missing_project_id, gemini_cli.api_status, gemini_cli.buckets_found,
|
|
10
|
+
* gemini_cli.quota_fetch_error). Token values are never logged.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.fetchAllGeminiCliQuotas = exports.fetchGeminiCliQuota = exports.fetchWithAuthData = void 0;
|
|
14
|
+
const account_manager_1 = require("../../accounts/account-manager");
|
|
15
|
+
const auth_utils_1 = require("../../auth/auth-utils");
|
|
16
|
+
const provider_entitlement_evidence_1 = require("../../auth/provider-entitlement-evidence");
|
|
17
|
+
const auth_file_discovery_1 = require("./auth-file-discovery");
|
|
18
|
+
const bucket_building_1 = require("./bucket-building");
|
|
19
|
+
const error_parsing_1 = require("./error-parsing");
|
|
20
|
+
const managed_request_1 = require("./managed-request");
|
|
21
|
+
const supplementary_metadata_1 = require("./supplementary-metadata");
|
|
22
|
+
const shared_utils_1 = require("./shared-utils");
|
|
23
|
+
const constants_1 = require("./constants");
|
|
24
|
+
/**
|
|
25
|
+
* Internal helper: fetch quota with already-validated auth data.
|
|
26
|
+
*
|
|
27
|
+
* Extracted to support the auto-refresh retry path: the caller resolves auth
|
|
28
|
+
* data once (legacy file or managed), then this function performs the upstream
|
|
29
|
+
* quota request and supplementary metadata fetch in parallel. On success it
|
|
30
|
+
* persists the resolved tier back to the account via `setAccountTier`.
|
|
31
|
+
*/
|
|
32
|
+
async function fetchWithAuthData(authData, accountId, verbose) {
|
|
33
|
+
if (!authData.projectId) {
|
|
34
|
+
const error = 'Cannot resolve project ID from auth file';
|
|
35
|
+
if (verbose) {
|
|
36
|
+
shared_utils_1.logger.error('gemini_cli.missing_project_id', `Error: ${error}`, {
|
|
37
|
+
provider: 'gemini',
|
|
38
|
+
accountId,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return (0, error_parsing_1.buildGeminiCliFailureResult)(accountId, null, {
|
|
42
|
+
error,
|
|
43
|
+
errorCode: 'missing_project_id',
|
|
44
|
+
actionHint: 'Run ccs gemini --auth to reconnect this account and recover the project ID.',
|
|
45
|
+
retryable: false,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
const authContext = {};
|
|
49
|
+
const supplementaryPromise = (0, supplementary_metadata_1.fetchGeminiCliSupplementary)(accountId, authData.accessToken, authData.projectId, verbose, authContext);
|
|
50
|
+
const requestBody = JSON.stringify({ project: authData.projectId });
|
|
51
|
+
try {
|
|
52
|
+
const response = await (0, managed_request_1.performGeminiCliRequest)(accountId, authData.accessToken, constants_1.GEMINI_CLI_QUOTA_URL, requestBody, authData.isExpired, authContext);
|
|
53
|
+
if (verbose) {
|
|
54
|
+
const source = response.viaManagement ? 'managed' : 'direct';
|
|
55
|
+
shared_utils_1.logger.info('gemini_cli.api_status', `Gemini CLI API status via ${source}: ${response.status}`, { provider: 'gemini', accountId, httpStatus: response.status, source });
|
|
56
|
+
}
|
|
57
|
+
if (response.status !== 200) {
|
|
58
|
+
return (0, error_parsing_1.buildGeminiCliHttpFailureResult)(accountId, authData.projectId, response.status, response.bodyText);
|
|
59
|
+
}
|
|
60
|
+
const data = response.json;
|
|
61
|
+
const rawBuckets = data?.buckets || [];
|
|
62
|
+
const buckets = (0, bucket_building_1.buildGeminiCliBuckets)(rawBuckets);
|
|
63
|
+
const supplementary = await supplementaryPromise;
|
|
64
|
+
if (verbose) {
|
|
65
|
+
shared_utils_1.logger.info('gemini_cli.buckets_found', `Gemini CLI buckets found: ${buckets.length}`, {
|
|
66
|
+
provider: 'gemini',
|
|
67
|
+
accountId,
|
|
68
|
+
bucketCount: buckets.length,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (supplementary.normalizedTier !== 'unknown') {
|
|
72
|
+
(0, account_manager_1.setAccountTier)('gemini', accountId, supplementary.normalizedTier);
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
buckets,
|
|
77
|
+
projectId: authData.projectId,
|
|
78
|
+
tierLabel: supplementary.tierLabel,
|
|
79
|
+
tierId: supplementary.tierId,
|
|
80
|
+
creditBalance: supplementary.creditBalance,
|
|
81
|
+
entitlement: (0, provider_entitlement_evidence_1.buildProviderEntitlementEvidence)({
|
|
82
|
+
normalizedTier: supplementary.normalizedTier,
|
|
83
|
+
rawTierId: supplementary.tierId,
|
|
84
|
+
rawTierLabel: supplementary.tierLabel,
|
|
85
|
+
source: supplementary.tierId ? 'runtime_api' : 'runtime_inference',
|
|
86
|
+
confidence: supplementary.tierId ? 'high' : 'medium',
|
|
87
|
+
accessState: 'entitled',
|
|
88
|
+
capacityState: 'available',
|
|
89
|
+
}),
|
|
90
|
+
lastUpdated: Date.now(),
|
|
91
|
+
accountId,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
if (err instanceof managed_request_1.GeminiManagedAuthUnavailableError) {
|
|
96
|
+
return (0, error_parsing_1.buildGeminiCliFailureResult)(accountId, authData.projectId, {
|
|
97
|
+
error: 'Gemini delegated auth refresh is temporarily unavailable',
|
|
98
|
+
errorCode: 'managed_auth_unavailable',
|
|
99
|
+
errorDetail: err.message,
|
|
100
|
+
actionHint: 'Retry later. CLIProxy management could not refresh this Gemini account.',
|
|
101
|
+
retryable: true,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
const errorMsg = err instanceof Error && err.name === 'AbortError'
|
|
105
|
+
? 'Request timeout'
|
|
106
|
+
: err instanceof Error
|
|
107
|
+
? err.message
|
|
108
|
+
: 'Unknown error';
|
|
109
|
+
if (verbose) {
|
|
110
|
+
shared_utils_1.logger.error('gemini_cli.quota_fetch_error', `Gemini CLI quota error: ${errorMsg}`, {
|
|
111
|
+
provider: 'gemini',
|
|
112
|
+
accountId,
|
|
113
|
+
err: err instanceof Error ? { name: err.name, message: errorMsg } : { message: errorMsg },
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return (0, error_parsing_1.buildGeminiCliFailureResult)(accountId, authData.projectId, {
|
|
117
|
+
error: errorMsg,
|
|
118
|
+
errorCode: err instanceof Error && err.name === 'AbortError' ? 'network_timeout' : 'network_error',
|
|
119
|
+
actionHint: 'Retry later. This looks temporary.',
|
|
120
|
+
retryable: true,
|
|
121
|
+
httpStatus: err instanceof Error && err.name === 'AbortError' ? 408 : undefined,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.fetchWithAuthData = fetchWithAuthData;
|
|
126
|
+
/**
|
|
127
|
+
* Fetch quota for a single Gemini CLI account.
|
|
128
|
+
*
|
|
129
|
+
* Reads the on-disk auth file, emits the structured `gemini_cli.fetch_start`
|
|
130
|
+
* and `gemini_cli.auth_file_missing` / `gemini_cli.token_expired` log events
|
|
131
|
+
* (gated on `verbose`), and delegates to {@link fetchWithAuthData}. Token
|
|
132
|
+
* values are never logged; only the expiry label is surfaced.
|
|
133
|
+
*
|
|
134
|
+
* @param accountId - Account identifier (email)
|
|
135
|
+
* @param verbose - Show detailed diagnostics
|
|
136
|
+
* @returns Quota result with buckets, percentages, tier, and entitlement evidence
|
|
137
|
+
*/
|
|
138
|
+
async function fetchGeminiCliQuota(accountId, verbose = false) {
|
|
139
|
+
if (verbose) {
|
|
140
|
+
shared_utils_1.logger.info('gemini_cli.fetch_start', `Fetching Gemini CLI quota for ${accountId}...`, {
|
|
141
|
+
provider: 'gemini',
|
|
142
|
+
accountId,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
const authData = (0, auth_file_discovery_1.readGeminiCliAuthData)(accountId);
|
|
146
|
+
if (!authData) {
|
|
147
|
+
const error = 'Auth file not found for Gemini account';
|
|
148
|
+
if (verbose) {
|
|
149
|
+
shared_utils_1.logger.error('gemini_cli.auth_file_missing', `Error: ${error}`, {
|
|
150
|
+
provider: 'gemini',
|
|
151
|
+
accountId,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
return (0, error_parsing_1.buildGeminiCliFailureResult)(accountId, null, {
|
|
155
|
+
error,
|
|
156
|
+
errorCode: 'auth_file_missing',
|
|
157
|
+
actionHint: 'Run ccs gemini --auth to reconnect this account.',
|
|
158
|
+
retryable: false,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
if (authData.isExpired && verbose) {
|
|
162
|
+
const expiresAt = (0, auth_utils_1.getTokenExpiryTimestamp)(authData.expiresAt);
|
|
163
|
+
const expiryLabel = expiresAt ? new Date(expiresAt).toISOString() : 'unknown';
|
|
164
|
+
shared_utils_1.logger.info('gemini_cli.token_expired', `Gemini access token is expired (${expiryLabel}); quota requests will defer to managed auth when available.`, { provider: 'gemini', accountId, tokenExpired: true, expiresAt: expiryLabel });
|
|
165
|
+
}
|
|
166
|
+
return await fetchWithAuthData(authData, accountId, verbose);
|
|
167
|
+
}
|
|
168
|
+
exports.fetchGeminiCliQuota = fetchGeminiCliQuota;
|
|
169
|
+
/**
|
|
170
|
+
* Fetch quota for all configured Gemini CLI accounts in parallel.
|
|
171
|
+
*
|
|
172
|
+
* @param verbose - Show detailed diagnostics (forwarded to each per-account fetch)
|
|
173
|
+
* @returns Array of `{ account, quota }` entries, one per active Gemini account.
|
|
174
|
+
* Returns an empty array when there are no Gemini accounts configured.
|
|
175
|
+
*/
|
|
176
|
+
async function fetchAllGeminiCliQuotas(verbose = false) {
|
|
177
|
+
const accounts = (0, account_manager_1.getProviderAccounts)('gemini');
|
|
178
|
+
if (accounts.length === 0) {
|
|
179
|
+
return [];
|
|
180
|
+
}
|
|
181
|
+
const results = await Promise.all(accounts.map(async (account) => ({
|
|
182
|
+
account: account.id,
|
|
183
|
+
quota: await fetchGeminiCliQuota(account.id, verbose),
|
|
184
|
+
})));
|
|
185
|
+
return results;
|
|
186
|
+
}
|
|
187
|
+
exports.fetchAllGeminiCliQuotas = fetchAllGeminiCliQuotas;
|
|
188
|
+
//# sourceMappingURL=quota-fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-fetcher.js","sourceRoot":"","sources":["../../../../src/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,oEAAqF;AACrF,sDAAgE;AAChE,4FAA4F;AAE5F,+DAA8D;AAC9D,uDAA0D;AAC1D,mDAA+F;AAC/F,uDAA+F;AAC/F,qEAAuE;AACvE,iDAAwC;AACxC,2CAAmD;AAGnD;;;;;;;GAOG;AACI,KAAK,UAAU,iBAAiB,CACrC,QAA2B,EAC3B,SAAiB,EACjB,OAAgB;IAEhB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,0CAA0C,CAAC;QACzD,IAAI,OAAO,EAAE,CAAC;YACZ,qBAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,UAAU,KAAK,EAAE,EAAE;gBAC/D,QAAQ,EAAE,QAAQ;gBAClB,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAA,2CAA2B,EAAC,SAAS,EAAE,IAAI,EAAE;YAClD,KAAK;YACL,SAAS,EAAE,oBAAoB;YAC/B,UAAU,EAAE,6EAA6E;YACzF,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAA6B,EAAE,CAAC;IACjD,MAAM,oBAAoB,GAAG,IAAA,oDAA2B,EACtD,SAAS,EACT,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,SAAS,EAClB,OAAO,EACP,WAAW,CACZ,CAAC;IACF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAEpE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAA,yCAAuB,EAC5C,SAAS,EACT,QAAQ,CAAC,WAAW,EACpB,gCAAoB,EACpB,WAAW,EACX,QAAQ,CAAC,SAAS,EAClB,WAAW,CACZ,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC7D,qBAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,6BAA6B,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,EACzD,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CACvE,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAA,+CAA+B,EACpC,SAAS,EACT,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,QAAQ,CAClB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAqC,CAAC;QAC5D,MAAM,UAAU,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAA,uCAAqB,EAAC,UAAU,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC;QAEjD,IAAI,OAAO,EAAE,CAAC;YACZ,qBAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,6BAA6B,OAAO,CAAC,MAAM,EAAE,EAAE;gBACrF,QAAQ,EAAE,QAAQ;gBAClB,SAAS;gBACT,WAAW,EAAE,OAAO,CAAC,MAAM;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,aAAa,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAA,gCAAc,EAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;QACpE,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO;YACP,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,SAAS,EAAE,aAAa,CAAC,SAAS;YAClC,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,aAAa,EAAE,aAAa,CAAC,aAAa;YAC1C,WAAW,EAAE,IAAA,gEAAgC,EAAC;gBAC5C,cAAc,EAAE,aAAa,CAAC,cAAc;gBAC5C,SAAS,EAAE,aAAa,CAAC,MAAM;gBAC/B,YAAY,EAAE,aAAa,CAAC,SAAS;gBACrC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB;gBAClE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;gBACpD,WAAW,EAAE,UAAU;gBACvB,aAAa,EAAE,WAAW;aAC3B,CAAC;YACF,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;YACvB,SAAS;SACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,mDAAiC,EAAE,CAAC;YACrD,OAAO,IAAA,2CAA2B,EAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;gBAChE,KAAK,EAAE,0DAA0D;gBACjE,SAAS,EAAE,0BAA0B;gBACrC,WAAW,EAAE,GAAG,CAAC,OAAO;gBACxB,UAAU,EAAE,yEAAyE;gBACrF,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GACZ,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;YAC/C,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,GAAG,YAAY,KAAK;gBACpB,CAAC,CAAC,GAAG,CAAC,OAAO;gBACb,CAAC,CAAC,eAAe,CAAC;QAExB,IAAI,OAAO,EAAE,CAAC;YACZ,qBAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,2BAA2B,QAAQ,EAAE,EAAE;gBAClF,QAAQ,EAAE,QAAQ;gBAClB,SAAS;gBACT,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE;aAC1F,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAA,2CAA2B,EAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;YAChE,KAAK,EAAE,QAAQ;YACf,SAAS,EACP,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe;YACzF,UAAU,EAAE,oCAAoC;YAChD,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;SAChF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAlID,8CAkIC;AAED;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,OAAO,GAAG,KAAK;IAEf,IAAI,OAAO,EAAE,CAAC;QACZ,qBAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,iCAAiC,SAAS,KAAK,EAAE;YACrF,QAAQ,EAAE,QAAQ;YAClB,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,2CAAqB,EAAC,SAAS,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,wCAAwC,CAAC;QACvD,IAAI,OAAO,EAAE,CAAC;YACZ,qBAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,UAAU,KAAK,EAAE,EAAE;gBAC9D,QAAQ,EAAE,QAAQ;gBAClB,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAA,2CAA2B,EAAC,SAAS,EAAE,IAAI,EAAE;YAClD,KAAK;YACL,SAAS,EAAE,mBAAmB;YAC9B,UAAU,EAAE,kDAAkD;YAC9D,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,IAAI,OAAO,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAA,oCAAuB,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,qBAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,mCAAmC,WAAW,8DAA8D,EAC5G,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAC9E,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,iBAAiB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAvCD,kDAuCC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,uBAAuB,CAC3C,OAAO,GAAG,KAAK;IAEf,MAAM,QAAQ,GAAG,IAAA,qCAAmB,EAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC/B,OAAO,EAAE,OAAO,CAAC,EAAE;QACnB,KAAK,EAAE,MAAM,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;KACtD,CAAC,CAAC,CACJ,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAjBD,0DAiBC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for the Gemini CLI quota fetcher submodule.
|
|
3
|
+
*
|
|
4
|
+
* Includes the diagnostic logger (provider context = cliproxy:quota:gemini-cli)
|
|
5
|
+
* and small value-normalization helpers used by multiple submodules. Token
|
|
6
|
+
* values are never logged here; accountId is attached as provider context
|
|
7
|
+
* only.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Diagnostic-only logger for Gemini CLI quota fetch progress, upstream HTTP
|
|
11
|
+
* status, and recovery hints. Token values live in auth files and are never
|
|
12
|
+
* read into log messages.
|
|
13
|
+
*/
|
|
14
|
+
export declare const logger: import("../../../services/logging").Logger;
|
|
15
|
+
/**
|
|
16
|
+
* Normalize a raw value into a trimmed non-empty string, or null.
|
|
17
|
+
* Returns null for empty strings, non-strings, or whitespace-only input.
|
|
18
|
+
*/
|
|
19
|
+
export declare function normalizeStringValue(value: unknown): string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Normalize a raw value into a finite number, or null.
|
|
22
|
+
* Accepts actual numbers and numeric strings; rejects NaN/Infinity.
|
|
23
|
+
*/
|
|
24
|
+
export declare function normalizeNumberValue(value: unknown): number | null;
|
|
25
|
+
/**
|
|
26
|
+
* Best-effort JSON.parse that returns null on failure instead of throwing.
|
|
27
|
+
* Used when normalizing upstream response bodies into a `json` field.
|
|
28
|
+
*/
|
|
29
|
+
export declare function safeParseJson(bodyText: string): unknown;
|
|
30
|
+
/**
|
|
31
|
+
* Compute the remaining milliseconds available before a deadline, clamped
|
|
32
|
+
* to a minimum of 1ms so AbortController timeouts are always positive.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getRemainingTimeoutMs(deadlineMs: number): number;
|
|
35
|
+
//# sourceMappingURL=shared-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-utils.d.ts","sourceRoot":"","sources":["../../../../src/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;GAIG;AACH,eAAO,MAAM,MAAM,4CAA4C,CAAC;AAEhE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAElE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWlE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMvD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEhE"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared utilities for the Gemini CLI quota fetcher submodule.
|
|
4
|
+
*
|
|
5
|
+
* Includes the diagnostic logger (provider context = cliproxy:quota:gemini-cli)
|
|
6
|
+
* and small value-normalization helpers used by multiple submodules. Token
|
|
7
|
+
* values are never logged here; accountId is attached as provider context
|
|
8
|
+
* only.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.getRemainingTimeoutMs = exports.safeParseJson = exports.normalizeNumberValue = exports.normalizeStringValue = exports.logger = void 0;
|
|
12
|
+
const logging_1 = require("../../../services/logging");
|
|
13
|
+
/**
|
|
14
|
+
* Diagnostic-only logger for Gemini CLI quota fetch progress, upstream HTTP
|
|
15
|
+
* status, and recovery hints. Token values live in auth files and are never
|
|
16
|
+
* read into log messages.
|
|
17
|
+
*/
|
|
18
|
+
exports.logger = (0, logging_1.createLogger)('cliproxy:quota:gemini-cli');
|
|
19
|
+
/**
|
|
20
|
+
* Normalize a raw value into a trimmed non-empty string, or null.
|
|
21
|
+
* Returns null for empty strings, non-strings, or whitespace-only input.
|
|
22
|
+
*/
|
|
23
|
+
function normalizeStringValue(value) {
|
|
24
|
+
return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;
|
|
25
|
+
}
|
|
26
|
+
exports.normalizeStringValue = normalizeStringValue;
|
|
27
|
+
/**
|
|
28
|
+
* Normalize a raw value into a finite number, or null.
|
|
29
|
+
* Accepts actual numbers and numeric strings; rejects NaN/Infinity.
|
|
30
|
+
*/
|
|
31
|
+
function normalizeNumberValue(value) {
|
|
32
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
if (typeof value === 'string' && value.trim().length > 0) {
|
|
36
|
+
const parsed = Number(value);
|
|
37
|
+
if (Number.isFinite(parsed)) {
|
|
38
|
+
return parsed;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
exports.normalizeNumberValue = normalizeNumberValue;
|
|
44
|
+
/**
|
|
45
|
+
* Best-effort JSON.parse that returns null on failure instead of throwing.
|
|
46
|
+
* Used when normalizing upstream response bodies into a `json` field.
|
|
47
|
+
*/
|
|
48
|
+
function safeParseJson(bodyText) {
|
|
49
|
+
try {
|
|
50
|
+
return JSON.parse(bodyText);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.safeParseJson = safeParseJson;
|
|
57
|
+
/**
|
|
58
|
+
* Compute the remaining milliseconds available before a deadline, clamped
|
|
59
|
+
* to a minimum of 1ms so AbortController timeouts are always positive.
|
|
60
|
+
*/
|
|
61
|
+
function getRemainingTimeoutMs(deadlineMs) {
|
|
62
|
+
return Math.max(1, deadlineMs - Date.now());
|
|
63
|
+
}
|
|
64
|
+
exports.getRemainingTimeoutMs = getRemainingTimeoutMs;
|
|
65
|
+
//# sourceMappingURL=shared-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-utils.js","sourceRoot":"","sources":["../../../../src/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,uDAAyD;AAEzD;;;;GAIG;AACU,QAAA,MAAM,GAAG,IAAA,sBAAY,EAAC,2BAA2B,CAAC,CAAC;AAEhE;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,KAAc;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAFD,oDAEC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAXD,oDAWC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAND,sCAMC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,UAAkB;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9C,CAAC;AAFD,sDAEC"}
|