@kaitranntt/ccs 7.71.0 → 7.72.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 +39 -2
- package/config/base-codebuddy.settings.json +10 -0
- package/config/base-codex.settings.json +4 -4
- package/config/base-cursor.settings.json +10 -0
- package/config/base-gitlab.settings.json +10 -0
- package/config/base-kilo.settings.json +10 -0
- package/dist/auth/profile-detector.d.ts +2 -3
- package/dist/auth/profile-detector.d.ts.map +1 -1
- package/dist/auth/profile-detector.js +19 -19
- package/dist/auth/profile-detector.js.map +1 -1
- package/dist/ccs.js +84 -16
- package/dist/ccs.js.map +1 -1
- package/dist/cliproxy/accounts/email-account-identity.d.ts.map +1 -1
- package/dist/cliproxy/accounts/email-account-identity.js +22 -2
- package/dist/cliproxy/accounts/email-account-identity.js.map +1 -1
- package/dist/cliproxy/auth/auth-types.d.ts +10 -0
- package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
- package/dist/cliproxy/auth/auth-types.js +32 -0
- package/dist/cliproxy/auth/auth-types.js.map +1 -1
- package/dist/cliproxy/auth/gitlab-pat-response.d.ts +9 -0
- package/dist/cliproxy/auth/gitlab-pat-response.d.ts.map +1 -0
- package/dist/cliproxy/auth/gitlab-pat-response.js +64 -0
- package/dist/cliproxy/auth/gitlab-pat-response.js.map +1 -0
- package/dist/cliproxy/auth/kiro-import.js +1 -1
- package/dist/cliproxy/auth/kiro-import.js.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.d.ts +3 -0
- package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.js +120 -4
- package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
- package/dist/cliproxy/auth/provider-refreshers/index.d.ts +1 -2
- package/dist/cliproxy/auth/provider-refreshers/index.d.ts.map +1 -1
- package/dist/cliproxy/auth/provider-refreshers/index.js +6 -25
- package/dist/cliproxy/auth/provider-refreshers/index.js.map +1 -1
- package/dist/cliproxy/auth/token-manager.d.ts +1 -1
- package/dist/cliproxy/auth/token-manager.d.ts.map +1 -1
- package/dist/cliproxy/auth/token-manager.js +9 -6
- package/dist/cliproxy/auth/token-manager.js.map +1 -1
- package/dist/cliproxy/binary/lifecycle.d.ts.map +1 -1
- package/dist/cliproxy/binary/lifecycle.js +12 -1
- package/dist/cliproxy/binary/lifecycle.js.map +1 -1
- package/dist/cliproxy/binary-manager.d.ts +5 -1
- package/dist/cliproxy/binary-manager.d.ts.map +1 -1
- package/dist/cliproxy/binary-manager.js +10 -2
- package/dist/cliproxy/binary-manager.js.map +1 -1
- package/dist/cliproxy/codex-plan-compatibility.d.ts.map +1 -1
- package/dist/cliproxy/codex-plan-compatibility.js +6 -6
- package/dist/cliproxy/codex-plan-compatibility.js.map +1 -1
- package/dist/cliproxy/config/env-builder.d.ts +5 -0
- package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
- package/dist/cliproxy/config/env-builder.js +56 -4
- package/dist/cliproxy/config/env-builder.js.map +1 -1
- package/dist/cliproxy/config/path-resolver.d.ts +21 -0
- package/dist/cliproxy/config/path-resolver.d.ts.map +1 -1
- package/dist/cliproxy/config/path-resolver.js +42 -2
- package/dist/cliproxy/config/path-resolver.js.map +1 -1
- package/dist/cliproxy/executor/index.d.ts +1 -0
- package/dist/cliproxy/executor/index.d.ts.map +1 -1
- package/dist/cliproxy/executor/index.js +40 -7
- package/dist/cliproxy/executor/index.js.map +1 -1
- package/dist/cliproxy/model-catalog.d.ts.map +1 -1
- package/dist/cliproxy/model-catalog.js +14 -59
- package/dist/cliproxy/model-catalog.js.map +1 -1
- package/dist/cliproxy/model-config.js +4 -4
- package/dist/cliproxy/model-config.js.map +1 -1
- package/dist/cliproxy/model-id-normalizer.d.ts +2 -0
- package/dist/cliproxy/model-id-normalizer.d.ts.map +1 -1
- package/dist/cliproxy/model-id-normalizer.js +25 -1
- package/dist/cliproxy/model-id-normalizer.js.map +1 -1
- package/dist/cliproxy/provider-capabilities.d.ts.map +1 -1
- package/dist/cliproxy/provider-capabilities.js +49 -1
- package/dist/cliproxy/provider-capabilities.js.map +1 -1
- package/dist/cliproxy/quota-fetcher-claude-normalizer.d.ts +1 -5
- package/dist/cliproxy/quota-fetcher-claude-normalizer.d.ts.map +1 -1
- package/dist/cliproxy/quota-fetcher-claude-normalizer.js +33 -6
- package/dist/cliproxy/quota-fetcher-claude-normalizer.js.map +1 -1
- package/dist/cliproxy/quota-fetcher-claude.d.ts +2 -2
- package/dist/cliproxy/quota-fetcher-claude.d.ts.map +1 -1
- package/dist/cliproxy/quota-fetcher-claude.js +18 -32
- package/dist/cliproxy/quota-fetcher-claude.js.map +1 -1
- package/dist/cliproxy/quota-fetcher-codex.d.ts.map +1 -1
- package/dist/cliproxy/quota-fetcher-codex.js +2 -0
- package/dist/cliproxy/quota-fetcher-codex.js.map +1 -1
- package/dist/cliproxy/quota-fetcher-gemini-cli.d.ts.map +1 -1
- package/dist/cliproxy/quota-fetcher-gemini-cli.js +221 -99
- package/dist/cliproxy/quota-fetcher-gemini-cli.js.map +1 -1
- package/dist/cliproxy/quota-types.d.ts +2 -2
- package/dist/cliproxy/quota-types.d.ts.map +1 -1
- package/dist/cliproxy/service-manager.d.ts.map +1 -1
- package/dist/cliproxy/service-manager.js +4 -1
- package/dist/cliproxy/service-manager.js.map +1 -1
- package/dist/cliproxy/types.d.ts +11 -3
- package/dist/cliproxy/types.d.ts.map +1 -1
- package/dist/cliproxy/types.js +8 -1
- package/dist/cliproxy/types.js.map +1 -1
- package/dist/commands/browser-command.d.ts +5 -0
- package/dist/commands/browser-command.d.ts.map +1 -0
- package/dist/commands/browser-command.js +118 -0
- package/dist/commands/browser-command.js.map +1 -0
- package/dist/commands/command-catalog.d.ts +3 -2
- package/dist/commands/command-catalog.d.ts.map +1 -1
- package/dist/commands/command-catalog.js +29 -4
- package/dist/commands/command-catalog.js.map +1 -1
- package/dist/commands/completion-backend.d.ts.map +1 -1
- package/dist/commands/completion-backend.js +4 -0
- package/dist/commands/completion-backend.js.map +1 -1
- package/dist/commands/cursor-command-display.d.ts.map +1 -1
- package/dist/commands/cursor-command-display.js +43 -30
- package/dist/commands/cursor-command-display.js.map +1 -1
- package/dist/commands/cursor-command.d.ts.map +1 -1
- package/dist/commands/cursor-command.js +30 -13
- package/dist/commands/cursor-command.js.map +1 -1
- package/dist/commands/help-command.d.ts +2 -0
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +62 -3
- package/dist/commands/help-command.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/proxy-command.d.ts +2 -0
- package/dist/commands/proxy-command.d.ts.map +1 -0
- package/dist/commands/proxy-command.js +156 -0
- package/dist/commands/proxy-command.js.map +1 -0
- package/dist/commands/root-command-router.d.ts.map +1 -1
- package/dist/commands/root-command-router.js +14 -0
- package/dist/commands/root-command-router.js.map +1 -1
- package/dist/config/reserved-names.d.ts +1 -1
- package/dist/config/reserved-names.d.ts.map +1 -1
- package/dist/config/reserved-names.js +10 -0
- package/dist/config/reserved-names.js.map +1 -1
- package/dist/config/unified-config-loader.d.ts +6 -1
- package/dist/config/unified-config-loader.d.ts.map +1 -1
- package/dist/config/unified-config-loader.js +67 -1
- package/dist/config/unified-config-loader.js.map +1 -1
- package/dist/config/unified-config-types.d.ts +37 -0
- package/dist/config/unified-config-types.d.ts.map +1 -1
- package/dist/config/unified-config-types.js +25 -1
- package/dist/config/unified-config-types.js.map +1 -1
- package/dist/cursor/constants.d.ts +3 -0
- package/dist/cursor/constants.d.ts.map +1 -1
- package/dist/cursor/constants.js +26 -1
- package/dist/cursor/constants.js.map +1 -1
- package/dist/cursor/cursor-anthropic-response.d.ts +1 -6
- package/dist/cursor/cursor-anthropic-response.d.ts.map +1 -1
- package/dist/cursor/cursor-anthropic-response.js +3 -186
- package/dist/cursor/cursor-anthropic-response.js.map +1 -1
- package/dist/cursor/cursor-daemon-entry.js +2 -2
- package/dist/cursor/cursor-daemon-entry.js.map +1 -1
- package/dist/cursor/cursor-profile-executor.js +4 -4
- package/dist/cursor/cursor-profile-executor.js.map +1 -1
- package/dist/cursor/cursor-runtime-probe.js +3 -3
- package/dist/cursor/cursor-runtime-probe.js.map +1 -1
- package/dist/glmt/sse-parser.d.ts.map +1 -1
- package/dist/glmt/sse-parser.js +46 -41
- package/dist/glmt/sse-parser.js.map +1 -1
- package/dist/management/shared-manager.d.ts +2 -0
- package/dist/management/shared-manager.d.ts.map +1 -1
- package/dist/management/shared-manager.js +25 -10
- package/dist/management/shared-manager.js.map +1 -1
- package/dist/proxy/index.d.ts +8 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +24 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/profile-router.d.ts +28 -0
- package/dist/proxy/profile-router.d.ts.map +1 -0
- package/dist/proxy/profile-router.js +43 -0
- package/dist/proxy/profile-router.js.map +1 -0
- package/dist/proxy/proxy-daemon-entry.d.ts +2 -0
- package/dist/proxy/proxy-daemon-entry.d.ts.map +1 -0
- package/dist/proxy/proxy-daemon-entry.js +68 -0
- package/dist/proxy/proxy-daemon-entry.js.map +1 -0
- package/dist/proxy/proxy-daemon-paths.d.ts +6 -0
- package/dist/proxy/proxy-daemon-paths.d.ts.map +1 -0
- package/dist/proxy/proxy-daemon-paths.js +43 -0
- package/dist/proxy/proxy-daemon-paths.js.map +1 -0
- package/dist/proxy/proxy-daemon-state.d.ts +18 -0
- package/dist/proxy/proxy-daemon-state.d.ts.map +1 -0
- package/dist/proxy/proxy-daemon-state.js +92 -0
- package/dist/proxy/proxy-daemon-state.js.map +1 -0
- package/dist/proxy/proxy-daemon.d.ts +26 -0
- package/dist/proxy/proxy-daemon.d.ts.map +1 -0
- package/dist/proxy/proxy-daemon.js +350 -0
- package/dist/proxy/proxy-daemon.js.map +1 -0
- package/dist/proxy/proxy-env.d.ts +3 -0
- package/dist/proxy/proxy-env.d.ts.map +1 -0
- package/dist/proxy/proxy-env.js +26 -0
- package/dist/proxy/proxy-env.js.map +1 -0
- package/dist/proxy/request-router.d.ts +12 -0
- package/dist/proxy/request-router.d.ts.map +1 -0
- package/dist/proxy/request-router.js +163 -0
- package/dist/proxy/request-router.js.map +1 -0
- package/dist/proxy/routing-config.d.ts +10 -0
- package/dist/proxy/routing-config.d.ts.map +1 -0
- package/dist/proxy/routing-config.js +79 -0
- package/dist/proxy/routing-config.js.map +1 -0
- package/dist/proxy/server/http-helpers.d.ts +8 -0
- package/dist/proxy/server/http-helpers.d.ts.map +1 -0
- package/dist/proxy/server/http-helpers.js +73 -0
- package/dist/proxy/server/http-helpers.js.map +1 -0
- package/dist/proxy/server/messages-route.d.ts +12 -0
- package/dist/proxy/server/messages-route.d.ts.map +1 -0
- package/dist/proxy/server/messages-route.js +208 -0
- package/dist/proxy/server/messages-route.js.map +1 -0
- package/dist/proxy/server/proxy-server.d.ts +12 -0
- package/dist/proxy/server/proxy-server.d.ts.map +1 -0
- package/dist/proxy/server/proxy-server.js +110 -0
- package/dist/proxy/server/proxy-server.js.map +1 -0
- package/dist/proxy/transformers/request-transformer.d.ts +52 -0
- package/dist/proxy/transformers/request-transformer.d.ts.map +1 -0
- package/dist/proxy/transformers/request-transformer.js +254 -0
- package/dist/proxy/transformers/request-transformer.js.map +1 -0
- package/dist/proxy/transformers/sse-stream-transformer.d.ts +11 -0
- package/dist/proxy/transformers/sse-stream-transformer.d.ts.map +1 -0
- package/dist/proxy/transformers/sse-stream-transformer.js +199 -0
- package/dist/proxy/transformers/sse-stream-transformer.js.map +1 -0
- package/dist/proxy/upstream-url.d.ts +3 -0
- package/dist/proxy/upstream-url.d.ts.map +1 -0
- package/dist/proxy/upstream-url.js +35 -0
- package/dist/proxy/upstream-url.js.map +1 -0
- package/dist/shared/claude-extension-setup.js +1 -1
- package/dist/shared/claude-extension-setup.js.map +1 -1
- package/dist/targets/codex-detector.d.ts.map +1 -1
- package/dist/targets/codex-detector.js +17 -8
- package/dist/targets/codex-detector.js.map +1 -1
- package/dist/targets/droid-provider.d.ts.map +1 -1
- package/dist/targets/droid-provider.js +2 -0
- package/dist/targets/droid-provider.js.map +1 -1
- package/dist/types/config.d.ts +13 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/ui/assets/{accounts-B8EmUjf7.js → accounts-DfkqFx14.js} +1 -1
- package/dist/ui/assets/{alert-dialog-zvnFuSZG.js → alert-dialog-BJ9GwHLZ.js} +1 -1
- package/dist/ui/assets/{api-vTHvDFg5.js → api-BVo8Vm1B.js} +1 -1
- package/dist/ui/assets/{auth-section-Dg3AdWQR.js → auth-section-B-Ms1O_M.js} +1 -1
- package/dist/ui/assets/{backups-section-CuRlCk7U.js → backups-section-f8hvkPfH.js} +1 -1
- package/dist/ui/assets/{channels-ByIXpMal.js → channels-Bgvry5fT.js} +1 -1
- package/dist/ui/assets/{checkbox-DoV2JinM.js → checkbox-CbI3Vbww.js} +1 -1
- package/dist/ui/assets/{claude-extension-B-Ofp87Z.js → claude-extension-lDT7lp8C.js} +1 -1
- package/dist/ui/assets/cliproxy-D50Owb9u.js +3 -0
- package/dist/ui/assets/{cliproxy-ai-providers-BVOtMT7b.js → cliproxy-ai-providers-Cjrk90aJ.js} +8 -8
- package/dist/ui/assets/{cliproxy-control-panel-qL0R878z.js → cliproxy-control-panel-DL8JoyKU.js} +1 -1
- package/dist/ui/assets/codex-B3bW7lzx.js +27 -0
- package/dist/ui/assets/{confirm-dialog-BcfzKHj3.js → confirm-dialog-Bm2Y3ArL.js} +1 -1
- package/dist/ui/assets/{copilot-Dti40Uv-.js → copilot-CPLBRpFA.js} +1 -1
- package/dist/ui/assets/cursor-D1xhqEEF.js +1 -0
- package/dist/ui/assets/{droid-BmuIeDFh.js → droid-DiFtSJkl.js} +2 -2
- package/dist/ui/assets/{globalenv-section-CGbpkbpW.js → globalenv-section-BadlR8mm.js} +1 -1
- package/dist/ui/assets/{health-DryU1jzv.js → health-Bxol1p1X.js} +1 -1
- package/dist/ui/assets/{icons-KVCk4_U8.js → icons-Dmi9qMuE.js} +1 -1
- package/dist/ui/assets/{index-Dgu-LYP_.js → index-BPCsEKJ8.js} +1 -1
- package/dist/ui/assets/{index-B_vdNMI1.js → index-BZYBDV6A.js} +1 -1
- package/dist/ui/assets/index-C2-J9AKi.js +1 -0
- package/dist/ui/assets/{index-DUCkRc_D.js → index-CA4r5qY8.js} +1 -1
- package/dist/ui/assets/index-CXRoMyUA.js +9 -0
- package/dist/ui/assets/index-DM7Qb4kd.js +72 -0
- package/dist/ui/assets/index-DuTB1_9r.css +1 -0
- package/dist/ui/assets/{index-Cu--MLG0.js → index-x07V45Iw.js} +1 -1
- package/dist/ui/assets/{logs-CtIgaS7y.js → logs-kvpMF-pw.js} +1 -1
- package/dist/ui/assets/{masked-input-Dm8T-Vtr.js → masked-input-CFQ05toP.js} +1 -1
- package/dist/ui/assets/providers/codebuddy.png +0 -0
- package/dist/ui/assets/providers/cursor.svg +5 -0
- package/dist/ui/assets/providers/gitlab.svg +22 -0
- package/dist/ui/assets/providers/kilo.png +0 -0
- package/dist/ui/assets/{proxy-status-widget-BXghaDz7.js → proxy-status-widget-Df_-wCR0.js} +1 -1
- package/dist/ui/assets/{raw-json-settings-editor-panel-DhhcWn5Q.js → raw-json-settings-editor-panel-DeWgWDSP.js} +1 -1
- package/dist/ui/assets/{searchable-select-DiGUiefs.js → searchable-select-CPbVBSoE.js} +1 -1
- package/dist/ui/assets/{separator-DnQqlaL0.js → separator--T-CzItG.js} +1 -1
- package/dist/ui/assets/{shared-BPuiJsYO.js → shared-Dx_5pa5N.js} +1 -1
- package/dist/ui/assets/{table-BDsTJlxT.js → table-wE_LUUUQ.js} +1 -1
- package/dist/ui/assets/{updates-DQxYQBCf.js → updates-mWDqf-fm.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/utils/browser/browser-settings.d.ts +21 -0
- package/dist/utils/browser/browser-settings.d.ts.map +1 -0
- package/dist/utils/browser/browser-settings.js +101 -0
- package/dist/utils/browser/browser-settings.js.map +1 -0
- package/dist/utils/browser/browser-status.d.ts +39 -0
- package/dist/utils/browser/browser-status.d.ts.map +1 -0
- package/dist/utils/browser/browser-status.js +134 -0
- package/dist/utils/browser/browser-status.js.map +1 -0
- package/dist/utils/browser/index.d.ts +3 -0
- package/dist/utils/browser/index.d.ts.map +1 -1
- package/dist/utils/browser/index.js +7 -1
- package/dist/utils/browser/index.js.map +1 -1
- package/dist/utils/browser/platform.d.ts +4 -0
- package/dist/utils/browser/platform.d.ts.map +1 -0
- package/dist/utils/browser/platform.js +12 -0
- package/dist/utils/browser/platform.js.map +1 -0
- package/dist/utils/hooks/image-analysis-backend-resolver.js +1 -1
- package/dist/utils/hooks/image-analysis-backend-resolver.js.map +1 -1
- package/dist/web-server/routes/browser-routes.d.ts +3 -0
- package/dist/web-server/routes/browser-routes.d.ts.map +1 -0
- package/dist/web-server/routes/browser-routes.js +116 -0
- package/dist/web-server/routes/browser-routes.js.map +1 -0
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +124 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/config-routes.d.ts.map +1 -1
- package/dist/web-server/routes/config-routes.js +3 -0
- package/dist/web-server/routes/config-routes.js.map +1 -1
- package/dist/web-server/routes/index.d.ts.map +1 -1
- package/dist/web-server/routes/index.js +3 -0
- package/dist/web-server/routes/index.js.map +1 -1
- package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/settings-routes.js +8 -0
- package/dist/web-server/routes/settings-routes.js.map +1 -1
- package/dist/web-server/services/compatible-cli-docs-registry.d.ts.map +1 -1
- package/dist/web-server/services/compatible-cli-docs-registry.js +1 -0
- package/dist/web-server/services/compatible-cli-docs-registry.js.map +1 -1
- package/package.json +1 -1
- package/dist/cliproxy/auth/gemini-token-refresh.d.ts +0 -40
- package/dist/cliproxy/auth/gemini-token-refresh.d.ts.map +0 -1
- package/dist/cliproxy/auth/gemini-token-refresh.js +0 -371
- package/dist/cliproxy/auth/gemini-token-refresh.js.map +0 -1
- package/dist/ui/assets/cliproxy-Bhu0JvIb.js +0 -3
- package/dist/ui/assets/codex-BCHZ-0dx.js +0 -27
- package/dist/ui/assets/cursor-BG0Y8Z5F.js +0 -1
- package/dist/ui/assets/index-B1mN7ZR-.js +0 -72
- package/dist/ui/assets/index-BBVoDJnl.js +0 -1
- package/dist/ui/assets/index-BMC5Tudw.css +0 -1
|
@@ -1,371 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Gemini Token Refresh
|
|
4
|
-
*
|
|
5
|
-
* Handles proactive token validation and refresh for Gemini OAuth tokens.
|
|
6
|
-
* Prevents UND_ERR_SOCKET errors by ensuring tokens are valid before use.
|
|
7
|
-
*
|
|
8
|
-
* Token sources (priority order):
|
|
9
|
-
* 1. CLIProxy auth dir (~/.ccs/cliproxy/auth/) - CCS-managed tokens
|
|
10
|
-
* 2. Standard Gemini CLI (~/.gemini/oauth_creds.json) - backward compatibility
|
|
11
|
-
*/
|
|
12
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
-
}
|
|
18
|
-
Object.defineProperty(o, k2, desc);
|
|
19
|
-
}) : (function(o, m, k, k2) {
|
|
20
|
-
if (k2 === undefined) k2 = k;
|
|
21
|
-
o[k2] = m[k];
|
|
22
|
-
}));
|
|
23
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
-
}) : function(o, v) {
|
|
26
|
-
o["default"] = v;
|
|
27
|
-
});
|
|
28
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ensureGeminiTokenValid = exports.refreshGeminiToken = exports.isGeminiTokenExpiringSoon = exports.getGeminiOAuthPath = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
|
-
const os = __importStar(require("os"));
|
|
40
|
-
const config_generator_1 = require("../config-generator");
|
|
41
|
-
const account_manager_1 = require("../account-manager");
|
|
42
|
-
const token_manager_1 = require("./token-manager");
|
|
43
|
-
/** Google OAuth token endpoint */
|
|
44
|
-
const GOOGLE_TOKEN_URL = 'https://oauth2.googleapis.com/token';
|
|
45
|
-
/** Refresh tokens 5 minutes before expiry */
|
|
46
|
-
const REFRESH_LEAD_TIME_MS = 5 * 60 * 1000;
|
|
47
|
-
const GEMINI_CLIENT_ID_ENV_KEYS = ['CCS_GEMINI_OAUTH_CLIENT_ID', 'OPENCLAW_GEMINI_OAUTH_CLIENT_ID'];
|
|
48
|
-
const GEMINI_CLIENT_SECRET_ENV_KEYS = [
|
|
49
|
-
'CCS_GEMINI_OAUTH_CLIENT_SECRET',
|
|
50
|
-
'OPENCLAW_GEMINI_OAUTH_CLIENT_SECRET',
|
|
51
|
-
];
|
|
52
|
-
/**
|
|
53
|
-
* Get path to Gemini OAuth credentials file
|
|
54
|
-
*/
|
|
55
|
-
function getGeminiOAuthPath() {
|
|
56
|
-
return path.join(os.homedir(), '.gemini', 'oauth_creds.json');
|
|
57
|
-
}
|
|
58
|
-
exports.getGeminiOAuthPath = getGeminiOAuthPath;
|
|
59
|
-
/**
|
|
60
|
-
* Map CLIProxyAPI token format to internal GeminiOAuthCreds format
|
|
61
|
-
*/
|
|
62
|
-
function mapCliproxyToGeminiCreds(cliproxy) {
|
|
63
|
-
return {
|
|
64
|
-
access_token: cliproxy.token.access_token,
|
|
65
|
-
refresh_token: cliproxy.token.refresh_token,
|
|
66
|
-
expiry_date: cliproxy.token.expiry,
|
|
67
|
-
token_type: 'Bearer',
|
|
68
|
-
client_id: cliproxy.token.client_id,
|
|
69
|
-
client_secret: cliproxy.token.client_secret,
|
|
70
|
-
token_uri: cliproxy.token.token_uri,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Validate CLIProxyAPI token structure has required fields
|
|
75
|
-
*/
|
|
76
|
-
function isValidCliproxyToken(data) {
|
|
77
|
-
if (typeof data !== 'object' || data === null)
|
|
78
|
-
return false;
|
|
79
|
-
const obj = data;
|
|
80
|
-
if (obj.type !== 'gemini')
|
|
81
|
-
return false;
|
|
82
|
-
if (typeof obj.token !== 'object' || obj.token === null)
|
|
83
|
-
return false;
|
|
84
|
-
const token = obj.token;
|
|
85
|
-
return typeof token.access_token === 'string';
|
|
86
|
-
}
|
|
87
|
-
function getFirstEnvValue(keys) {
|
|
88
|
-
for (const key of keys) {
|
|
89
|
-
const value = process.env[key]?.trim();
|
|
90
|
-
if (value) {
|
|
91
|
-
return value;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return undefined;
|
|
95
|
-
}
|
|
96
|
-
function resolveGeminiRefreshCredentials(creds) {
|
|
97
|
-
const clientId = creds.client_id?.trim() || getFirstEnvValue(GEMINI_CLIENT_ID_ENV_KEYS);
|
|
98
|
-
const clientSecret = creds.client_secret?.trim() || getFirstEnvValue(GEMINI_CLIENT_SECRET_ENV_KEYS);
|
|
99
|
-
if (!clientId || !clientSecret) {
|
|
100
|
-
return {
|
|
101
|
-
error: 'Gemini token refresh unavailable: missing OAuth client credentials in the token file. ' +
|
|
102
|
-
'Re-authenticate with CLIProxy or set CCS_GEMINI_OAUTH_CLIENT_ID and CCS_GEMINI_OAUTH_CLIENT_SECRET.',
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
return {
|
|
106
|
-
credentials: {
|
|
107
|
-
clientId,
|
|
108
|
-
clientSecret,
|
|
109
|
-
tokenUrl: creds.token_uri?.trim() || GOOGLE_TOKEN_URL,
|
|
110
|
-
},
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Read Gemini token from CLIProxy auth directory
|
|
115
|
-
* Returns credentials with source path, or null if no valid token found
|
|
116
|
-
*/
|
|
117
|
-
function readCliproxyGeminiCreds(accountId) {
|
|
118
|
-
const authDir = (0, config_generator_1.getProviderAuthDir)('gemini');
|
|
119
|
-
if (!fs.existsSync(authDir))
|
|
120
|
-
return null;
|
|
121
|
-
let tokenPath = null;
|
|
122
|
-
const normalizedAccountId = accountId?.trim();
|
|
123
|
-
const accounts = (0, account_manager_1.getProviderAccounts)('gemini');
|
|
124
|
-
// Account-specific refresh path (used by background worker)
|
|
125
|
-
if (normalizedAccountId) {
|
|
126
|
-
const targetAccount = accounts.find((account) => account.id === normalizedAccountId);
|
|
127
|
-
if (!targetAccount) {
|
|
128
|
-
return null;
|
|
129
|
-
}
|
|
130
|
-
tokenPath = path.join(authDir, targetAccount.tokenFile);
|
|
131
|
-
}
|
|
132
|
-
if (!normalizedAccountId) {
|
|
133
|
-
// Try to find default account's token file
|
|
134
|
-
const defaultAccount = (0, account_manager_1.getDefaultAccount)('gemini');
|
|
135
|
-
if (defaultAccount) {
|
|
136
|
-
tokenPath = path.join(authDir, defaultAccount.tokenFile);
|
|
137
|
-
if (!fs.existsSync(tokenPath))
|
|
138
|
-
tokenPath = null;
|
|
139
|
-
}
|
|
140
|
-
// Fallback: find any gemini account token file
|
|
141
|
-
if (!tokenPath && accounts.length > 0) {
|
|
142
|
-
tokenPath = path.join(authDir, accounts[0].tokenFile);
|
|
143
|
-
if (!fs.existsSync(tokenPath))
|
|
144
|
-
tokenPath = null;
|
|
145
|
-
}
|
|
146
|
-
// Last fallback: scan directory for gemini token files
|
|
147
|
-
if (!tokenPath) {
|
|
148
|
-
try {
|
|
149
|
-
const files = fs.readdirSync(authDir).filter((f) => f.endsWith('.json'));
|
|
150
|
-
for (const file of files) {
|
|
151
|
-
const filePath = path.join(authDir, file);
|
|
152
|
-
if (file.startsWith('gemini-') || (0, token_manager_1.isTokenFileForProvider)(filePath, 'gemini')) {
|
|
153
|
-
tokenPath = filePath;
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
catch {
|
|
159
|
-
// Directory read failed - continue to return null
|
|
160
|
-
return null;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
if (!tokenPath)
|
|
165
|
-
return null;
|
|
166
|
-
try {
|
|
167
|
-
const content = fs.readFileSync(tokenPath, 'utf8');
|
|
168
|
-
const data = JSON.parse(content);
|
|
169
|
-
// Validate CLIProxyAPI format with proper type checking
|
|
170
|
-
if (isValidCliproxyToken(data)) {
|
|
171
|
-
return {
|
|
172
|
-
creds: mapCliproxyToGeminiCreds(data),
|
|
173
|
-
sourcePath: tokenPath,
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
return null;
|
|
177
|
-
}
|
|
178
|
-
catch {
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Read Gemini OAuth credentials
|
|
184
|
-
* Priority: CLIProxy auth dir first, then ~/.gemini/oauth_creds.json
|
|
185
|
-
* Returns credentials with source path for correct write-back
|
|
186
|
-
*/
|
|
187
|
-
function readGeminiCreds(accountId) {
|
|
188
|
-
// 1. Try CLIProxy auth directory first (CCS-managed tokens)
|
|
189
|
-
const cliproxyResult = readCliproxyGeminiCreds(accountId);
|
|
190
|
-
if (cliproxyResult) {
|
|
191
|
-
return cliproxyResult;
|
|
192
|
-
}
|
|
193
|
-
// Account-scoped refresh is only supported for CLIProxy account files.
|
|
194
|
-
// Do not fall back to ~/.gemini for a specific accountId.
|
|
195
|
-
if (accountId?.trim()) {
|
|
196
|
-
return null;
|
|
197
|
-
}
|
|
198
|
-
// 2. Fall back to standard Gemini CLI location
|
|
199
|
-
const oauthPath = getGeminiOAuthPath();
|
|
200
|
-
if (!fs.existsSync(oauthPath)) {
|
|
201
|
-
return null;
|
|
202
|
-
}
|
|
203
|
-
try {
|
|
204
|
-
const content = fs.readFileSync(oauthPath, 'utf8');
|
|
205
|
-
return {
|
|
206
|
-
creds: JSON.parse(content),
|
|
207
|
-
sourcePath: oauthPath,
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
catch {
|
|
211
|
-
return null;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Write updated credentials to CLIProxy token file
|
|
216
|
-
* Preserves existing fields (email, project_id), only updates token subfields
|
|
217
|
-
*/
|
|
218
|
-
function writeCliproxyGeminiCreds(tokenPath, creds) {
|
|
219
|
-
try {
|
|
220
|
-
const existing = JSON.parse(fs.readFileSync(tokenPath, 'utf8'));
|
|
221
|
-
const updated = {
|
|
222
|
-
...existing,
|
|
223
|
-
token: {
|
|
224
|
-
...existing.token,
|
|
225
|
-
access_token: creds.access_token,
|
|
226
|
-
refresh_token: creds.refresh_token,
|
|
227
|
-
expiry: creds.expiry_date,
|
|
228
|
-
},
|
|
229
|
-
};
|
|
230
|
-
fs.writeFileSync(tokenPath, JSON.stringify(updated, null, 2), { mode: 0o600 });
|
|
231
|
-
return undefined;
|
|
232
|
-
}
|
|
233
|
-
catch (err) {
|
|
234
|
-
return err instanceof Error ? err.message : 'Failed to write credentials';
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Write Gemini OAuth credentials
|
|
239
|
-
* Writes back to the specified source location (CLIProxy or ~/.gemini)
|
|
240
|
-
* @param creds - The credentials to write
|
|
241
|
-
* @param sourcePath - The path where credentials were originally read from
|
|
242
|
-
* @returns error message if write failed, undefined on success
|
|
243
|
-
*/
|
|
244
|
-
function writeGeminiCreds(creds, sourcePath) {
|
|
245
|
-
const geminiOAuthPath = getGeminiOAuthPath();
|
|
246
|
-
// If source is not the standard Gemini path, write to CLIProxy format
|
|
247
|
-
if (sourcePath !== geminiOAuthPath) {
|
|
248
|
-
return writeCliproxyGeminiCreds(sourcePath, creds);
|
|
249
|
-
}
|
|
250
|
-
// Otherwise write to standard Gemini CLI location
|
|
251
|
-
const dir = path.dirname(geminiOAuthPath);
|
|
252
|
-
try {
|
|
253
|
-
if (!fs.existsSync(dir)) {
|
|
254
|
-
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
255
|
-
}
|
|
256
|
-
fs.writeFileSync(geminiOAuthPath, JSON.stringify(creds, null, 2), { mode: 0o600 });
|
|
257
|
-
return undefined;
|
|
258
|
-
}
|
|
259
|
-
catch (err) {
|
|
260
|
-
return err instanceof Error ? err.message : 'Failed to write credentials';
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Check if Gemini token is expired or expiring soon
|
|
265
|
-
*/
|
|
266
|
-
function isGeminiTokenExpiringSoon(accountId) {
|
|
267
|
-
const result = readGeminiCreds(accountId);
|
|
268
|
-
if (!result || !result.creds.access_token) {
|
|
269
|
-
return true; // No token = needs auth
|
|
270
|
-
}
|
|
271
|
-
if (!result.creds.expiry_date) {
|
|
272
|
-
return false; // No expiry info = assume valid
|
|
273
|
-
}
|
|
274
|
-
const expiresIn = result.creds.expiry_date - Date.now();
|
|
275
|
-
return expiresIn < REFRESH_LEAD_TIME_MS;
|
|
276
|
-
}
|
|
277
|
-
exports.isGeminiTokenExpiringSoon = isGeminiTokenExpiringSoon;
|
|
278
|
-
/**
|
|
279
|
-
* Refresh Gemini access token using refresh_token
|
|
280
|
-
* @param accountId Optional account ID for account-scoped refresh
|
|
281
|
-
* @returns Result with success status, optional error, and expiry time
|
|
282
|
-
*/
|
|
283
|
-
async function refreshGeminiToken(accountId) {
|
|
284
|
-
const result = readGeminiCreds(accountId);
|
|
285
|
-
if (!result || !result.creds.refresh_token) {
|
|
286
|
-
return { success: false, error: 'No refresh token available' };
|
|
287
|
-
}
|
|
288
|
-
const { creds, sourcePath } = result;
|
|
289
|
-
const resolvedCredentials = resolveGeminiRefreshCredentials(creds);
|
|
290
|
-
if (!resolvedCredentials.credentials) {
|
|
291
|
-
return { success: false, error: resolvedCredentials.error };
|
|
292
|
-
}
|
|
293
|
-
const { clientId, clientSecret, tokenUrl } = resolvedCredentials.credentials;
|
|
294
|
-
const controller = new AbortController();
|
|
295
|
-
const timeoutId = setTimeout(() => controller.abort(), 10000);
|
|
296
|
-
try {
|
|
297
|
-
const response = await fetch(tokenUrl, {
|
|
298
|
-
method: 'POST',
|
|
299
|
-
signal: controller.signal,
|
|
300
|
-
headers: {
|
|
301
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
302
|
-
},
|
|
303
|
-
body: new URLSearchParams({
|
|
304
|
-
grant_type: 'refresh_token',
|
|
305
|
-
refresh_token: creds.refresh_token, // Already validated above
|
|
306
|
-
client_id: clientId,
|
|
307
|
-
client_secret: clientSecret,
|
|
308
|
-
}).toString(),
|
|
309
|
-
});
|
|
310
|
-
clearTimeout(timeoutId);
|
|
311
|
-
const data = (await response.json());
|
|
312
|
-
if (!response.ok || data.error) {
|
|
313
|
-
return {
|
|
314
|
-
success: false,
|
|
315
|
-
error: data.error_description || data.error || `OAuth error: ${response.status}`,
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
if (!data.access_token) {
|
|
319
|
-
return { success: false, error: 'No access_token in response' };
|
|
320
|
-
}
|
|
321
|
-
// Update credentials file with new token
|
|
322
|
-
const expiresAt = Date.now() + (data.expires_in ?? 3600) * 1000;
|
|
323
|
-
const updatedCreds = {
|
|
324
|
-
...creds,
|
|
325
|
-
access_token: data.access_token,
|
|
326
|
-
expiry_date: expiresAt,
|
|
327
|
-
};
|
|
328
|
-
const writeError = writeGeminiCreds(updatedCreds, sourcePath);
|
|
329
|
-
if (writeError) {
|
|
330
|
-
return { success: false, error: `Token refreshed but failed to save: ${writeError}` };
|
|
331
|
-
}
|
|
332
|
-
return { success: true, expiresAt };
|
|
333
|
-
}
|
|
334
|
-
catch (err) {
|
|
335
|
-
clearTimeout(timeoutId);
|
|
336
|
-
if (err instanceof Error && err.name === 'AbortError') {
|
|
337
|
-
return { success: false, error: 'Token refresh timeout' };
|
|
338
|
-
}
|
|
339
|
-
return { success: false, error: err instanceof Error ? err.message : 'Unknown error' };
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
exports.refreshGeminiToken = refreshGeminiToken;
|
|
343
|
-
/**
|
|
344
|
-
* Ensure Gemini token is valid, refreshing if needed
|
|
345
|
-
* @param verbose Log progress if true
|
|
346
|
-
* @param accountId Optional account ID for account-scoped refresh
|
|
347
|
-
* @returns true if token is valid (or was refreshed), false if refresh failed
|
|
348
|
-
*/
|
|
349
|
-
async function ensureGeminiTokenValid(verbose = false, accountId) {
|
|
350
|
-
const result = readGeminiCreds(accountId);
|
|
351
|
-
if (!result || !result.creds.access_token) {
|
|
352
|
-
return { valid: false, refreshed: false, error: 'No Gemini credentials found' };
|
|
353
|
-
}
|
|
354
|
-
if (!isGeminiTokenExpiringSoon(accountId)) {
|
|
355
|
-
return { valid: true, refreshed: false };
|
|
356
|
-
}
|
|
357
|
-
// Token is expired or expiring soon - try to refresh
|
|
358
|
-
if (verbose) {
|
|
359
|
-
console.log('[i] Gemini token expired or expiring soon, refreshing...');
|
|
360
|
-
}
|
|
361
|
-
const refreshResult = await refreshGeminiToken(accountId);
|
|
362
|
-
if (refreshResult.success) {
|
|
363
|
-
if (verbose) {
|
|
364
|
-
console.log('[OK] Gemini token refreshed successfully');
|
|
365
|
-
}
|
|
366
|
-
return { valid: true, refreshed: true };
|
|
367
|
-
}
|
|
368
|
-
return { valid: false, refreshed: false, error: refreshResult.error };
|
|
369
|
-
}
|
|
370
|
-
exports.ensureGeminiTokenValid = ensureGeminiTokenValid;
|
|
371
|
-
//# sourceMappingURL=gemini-token-refresh.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-token-refresh.js","sourceRoot":"","sources":["../../../src/cliproxy/auth/gemini-token-refresh.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,0DAAyD;AACzD,wDAA4E;AAC5E,mDAAyD;AAEzD,kCAAkC;AAClC,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAE/D,6CAA6C;AAC7C,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3C,MAAM,yBAAyB,GAAG,CAAC,4BAA4B,EAAE,iCAAiC,CAAC,CAAC;AACpG,MAAM,6BAA6B,GAAG;IACpC,gCAAgC;IAChC,qCAAqC;CACtC,CAAC;AAmDF;;GAEG;AACH,SAAgB,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAChE,CAAC;AAFD,gDAEC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,QAA6B;IAC7D,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;QACzC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;QAC3C,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;QAClC,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS;QACnC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;QAC3C,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAgC,CAAC;IACnD,OAAO,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAuB;IAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAuB;IAI9D,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;IACxF,MAAM,YAAY,GAChB,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC,6BAA6B,CAAC,CAAC;IAEjF,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/B,OAAO;YACL,KAAK,EACH,wFAAwF;gBACxF,qGAAqG;SACxG,CAAC;IACJ,CAAC;IAED,OAAO;QACL,WAAW,EAAE;YACX,QAAQ;YACR,YAAY;YACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,gBAAgB;SACtD;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAAC,SAAkB;IACjD,MAAM,OAAO,GAAG,IAAA,qCAAkB,EAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,MAAM,mBAAmB,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAA,qCAAmB,EAAC,QAAQ,CAAC,CAAC;IAE/C,4DAA4D;IAC5D,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,mBAAmB,CAAC,CAAC;QACrF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,2CAA2C;QAC3C,MAAM,cAAc,GAAG,IAAA,mCAAiB,EAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,cAAc,EAAE,CAAC;YACnB,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,SAAS,GAAG,IAAI,CAAC;QAClD,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,SAAS,GAAG,IAAI,CAAC;QAClD,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAA,sCAAsB,EAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;wBAC7E,SAAS,GAAG,QAAQ,CAAC;wBACrB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;gBAClD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE1C,wDAAwD;QACxD,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,KAAK,EAAE,wBAAwB,CAAC,IAAI,CAAC;gBACrC,UAAU,EAAE,SAAS;aACtB,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,SAAkB;IACzC,4DAA4D;IAC5D,MAAM,cAAc,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,uEAAuE;IACvE,0DAA0D;IAC1D,IAAI,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+CAA+C;IAC/C,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAqB;YAC9C,UAAU,EAAE,SAAS;SACtB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,SAAiB,EAAE,KAAuB;IAC1E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG;YACd,GAAG,QAAQ;YACX,KAAK,EAAE;gBACL,GAAG,QAAQ,CAAC,KAAK;gBACjB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,MAAM,EAAE,KAAK,CAAC,WAAW;aAC1B;SACF,CAAC;QACF,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;IAC5E,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,KAAuB,EAAE,UAAkB;IACnE,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAE7C,sEAAsE;IACtE,IAAI,UAAU,KAAK,eAAe,EAAE,CAAC;QACnC,OAAO,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,kDAAkD;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;IAC5E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,SAAkB;IAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,CAAC,wBAAwB;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,gCAAgC;IAChD,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxD,OAAO,SAAS,GAAG,oBAAoB,CAAC;AAC1C,CAAC;AAVD,8DAUC;AAED;;;;GAIG;AACI,KAAK,UAAU,kBAAkB,CAAC,SAAkB;IAKzD,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACrC,MAAM,mBAAmB,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC;IACnE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,WAAW,CAAC;IAC7E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;aACpD;YACD,IAAI,EAAE,IAAI,eAAe,CAAC;gBACxB,UAAU,EAAE,eAAe;gBAC3B,aAAa,EAAE,KAAK,CAAC,aAAuB,EAAE,0BAA0B;gBACxE,SAAS,EAAE,QAAQ;gBACnB,aAAa,EAAE,YAAY;aAC5B,CAAC,CAAC,QAAQ,EAAE;SACd,CAAC,CAAC;QAEH,YAAY,CAAC,SAAS,CAAC,CAAC;QAExB,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;QAE7D,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,IAAI,gBAAgB,QAAQ,CAAC,MAAM,EAAE;aACjF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;QAClE,CAAC;QAED,yCAAyC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;QAChE,MAAM,YAAY,GAAqB;YACrC,GAAG,KAAK;YACR,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,SAAS;SACvB,CAAC;QACF,MAAM,UAAU,GAAG,gBAAgB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC9D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,UAAU,EAAE,EAAE,CAAC;QACxF,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACtD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IACzF,CAAC;AACH,CAAC;AAtED,gDAsEC;AAED;;;;;GAKG;AACI,KAAK,UAAU,sBAAsB,CAC1C,OAAO,GAAG,KAAK,EACf,SAAkB;IAMlB,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAClF,CAAC;IAED,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,qDAAqD;IACrD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;AACxE,CAAC;AA/BD,wDA+BC"}
|