repoburg 1.3.128 → 1.3.129
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/backend/coverage/clover.xml +12003 -0
- package/backend/coverage/coverage-final.json +313 -0
- package/backend/coverage/lcov-report/base.css +224 -0
- package/backend/coverage/lcov-report/block-navigation.js +87 -0
- package/backend/coverage/lcov-report/favicon.png +0 -0
- package/backend/coverage/lcov-report/index.html +1301 -0
- package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +116 -0
- package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +445 -0
- package/backend/coverage/lcov-report/packages/gemini-core/index.html +116 -0
- package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +127 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +193 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +832 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +206 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +469 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +1705 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +790 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +454 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +685 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +307 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +146 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +151 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +172 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +490 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +1237 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +139 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +176 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +409 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +181 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +116 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +187 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +229 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +634 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +373 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +191 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +124 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +835 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +211 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +421 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +191 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +592 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +388 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +877 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +112 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +502 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/index.html +161 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +415 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +139 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +1249 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +131 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +187 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +193 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +178 -0
- package/backend/coverage/lcov-report/prettify.css +1 -0
- package/backend/coverage/lcov-report/prettify.js +2 -0
- package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/backend/coverage/lcov-report/sorter.js +210 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +1549 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +904 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +175 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +1534 -0
- package/backend/coverage/lcov-report/src/ai-actions/index.html +161 -0
- package/backend/coverage/lcov-report/src/app.controller.ts.html +151 -0
- package/backend/coverage/lcov-report/src/app.module.ts.html +451 -0
- package/backend/coverage/lcov-report/src/app.service.ts.html +163 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +1609 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +136 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +2281 -0
- package/backend/coverage/lcov-report/src/application-state/dto/index.html +416 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +121 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +115 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +115 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +127 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +139 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/index.html +146 -0
- package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +1297 -0
- package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +712 -0
- package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +379 -0
- package/backend/coverage/lcov-report/src/common/cache/index.html +146 -0
- package/backend/coverage/lcov-report/src/common/common.module.ts.html +121 -0
- package/backend/coverage/lcov-report/src/common/index.html +116 -0
- package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +337 -0
- package/backend/coverage/lcov-report/src/common/interceptors/index.html +116 -0
- package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +265 -0
- package/backend/coverage/lcov-report/src/common/middleware/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +118 -0
- package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +1501 -0
- package/backend/coverage/lcov-report/src/context-generation/index.html +131 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +427 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +142 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +442 -0
- package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +211 -0
- package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-snippets/index.html +146 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +724 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +142 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +1015 -0
- package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +511 -0
- package/backend/coverage/lcov-report/src/context-templates/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-templates/index.html +146 -0
- package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +613 -0
- package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +124 -0
- package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +211 -0
- package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +190 -0
- package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +439 -0
- package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +205 -0
- package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +241 -0
- package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +553 -0
- package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +208 -0
- package/backend/coverage/lcov-report/src/core-entities/index.html +371 -0
- package/backend/coverage/lcov-report/src/core-entities/index.ts.html +136 -0
- package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +388 -0
- package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +256 -0
- package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +256 -0
- package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +181 -0
- package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +745 -0
- package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +688 -0
- package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +349 -0
- package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +235 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +442 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +304 -0
- package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +205 -0
- package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/custom-snippets/index.html +146 -0
- package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +463 -0
- package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +310 -0
- package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +244 -0
- package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/custom-variables/index.html +146 -0
- package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +295 -0
- package/backend/coverage/lcov-report/src/events/events.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/events/index.html +146 -0
- package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +466 -0
- package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +130 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +238 -0
- package/backend/coverage/lcov-report/src/execution-logs/index.html +146 -0
- package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +553 -0
- package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/gemini/index.html +131 -0
- package/backend/coverage/lcov-report/src/global-config/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +367 -0
- package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +220 -0
- package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +115 -0
- package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +397 -0
- package/backend/coverage/lcov-report/src/global-config/index.html +146 -0
- package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +340 -0
- package/backend/coverage/lcov-report/src/index.html +206 -0
- package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +187 -0
- package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +1825 -0
- package/backend/coverage/lcov-report/src/interactive-chat/index.html +146 -0
- package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +343 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +214 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/index.html +146 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +634 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +643 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +1090 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +433 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +757 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +586 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +1153 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +103 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +190 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +196 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +91 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +356 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +214 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +202 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +151 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +181 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +631 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +469 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +448 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +1351 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +868 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +481 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +416 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +580 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +352 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +1054 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +331 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +403 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +176 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +100 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +724 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +358 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +379 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +838 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +1702 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +1459 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +679 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +964 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +625 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +103 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +1645 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +238 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +181 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +161 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +313 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +466 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/index.html +176 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +319 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +706 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +1150 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +131 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +658 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +127 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +547 -0
- package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +1681 -0
- package/backend/coverage/lcov-report/src/llm-provider/index.html +236 -0
- package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +187 -0
- package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +361 -0
- package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +175 -0
- package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +1780 -0
- package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +1867 -0
- package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +1891 -0
- package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +304 -0
- package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +1666 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +436 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +319 -0
- package/backend/coverage/lcov-report/src/llm-responses/index.html +146 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +283 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +184 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +1474 -0
- package/backend/coverage/lcov-report/src/main.ts.html +463 -0
- package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +145 -0
- package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +127 -0
- package/backend/coverage/lcov-report/src/mcp/dto/index.html +146 -0
- package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +112 -0
- package/backend/coverage/lcov-report/src/mcp/index.html +146 -0
- package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +340 -0
- package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +1345 -0
- package/backend/coverage/lcov-report/src/message-bus/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/message-bus/index.html +146 -0
- package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +148 -0
- package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +115 -0
- package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +151 -0
- package/backend/coverage/lcov-report/src/projects/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +196 -0
- package/backend/coverage/lcov-report/src/projects/index.html +146 -0
- package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +322 -0
- package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +235 -0
- package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +280 -0
- package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +439 -0
- package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +271 -0
- package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +271 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +172 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +116 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +157 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +148 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +151 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +161 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +247 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +97 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +304 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +341 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +97 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +97 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +131 -0
- package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +121 -0
- package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +116 -0
- package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +115 -0
- package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +136 -0
- package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +131 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +190 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +421 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +265 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +161 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +388 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +265 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +274 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +146 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +250 -0
- package/backend/coverage/lcov-report/src/seeding/index.html +236 -0
- package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +193 -0
- package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +211 -0
- package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +187 -0
- package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +742 -0
- package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +397 -0
- package/backend/coverage/lcov-report/src/session-followup/index.html +131 -0
- package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +130 -0
- package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +718 -0
- package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +577 -0
- package/backend/coverage/lcov-report/src/session-inputs/index.html +176 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +832 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +220 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +685 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +229 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +1981 -0
- package/backend/coverage/lcov-report/src/session-transfer/index.html +131 -0
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +160 -0
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +883 -0
- package/backend/coverage/lcov-report/src/sessions/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +769 -0
- package/backend/coverage/lcov-report/src/sessions/index.html +146 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +1306 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +220 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +2797 -0
- package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +355 -0
- package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +295 -0
- package/backend/coverage/lcov-report/src/sub-agents/index.html +221 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +463 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +2428 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +580 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +550 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +475 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +373 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +205 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +619 -0
- package/backend/coverage/lcov-report/src/syntax-validation/index.html +131 -0
- package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +724 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +176 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +157 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +148 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +517 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +121 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/system-prompts/index.html +146 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +1060 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +160 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +2254 -0
- package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +178 -0
- package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +181 -0
- package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +178 -0
- package/backend/coverage/lcov-report/src/tool-hooks/index.html +146 -0
- package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +481 -0
- package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +127 -0
- package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +1222 -0
- package/backend/coverage/lcov-report/src/tracing.ts.html +214 -0
- package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +130 -0
- package/backend/coverage/lcov-report/src/types/index.html +116 -0
- package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +253 -0
- package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +310 -0
- package/backend/coverage/lcov-report/src/utils/index.html +191 -0
- package/backend/coverage/lcov-report/src/utils/index.ts.html +100 -0
- package/backend/coverage/lcov-report/src/utils/short-id.ts.html +109 -0
- package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +412 -0
- package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +223 -0
- package/backend/coverage/lcov-report/src/visual-editor/index.html +146 -0
- package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +409 -0
- package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +118 -0
- package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +112 -0
- package/backend/coverage/lcov-report/src/workspace/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +193 -0
- package/backend/coverage/lcov-report/src/workspace/index.html +146 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +394 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +121 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +1027 -0
- package/backend/coverage/lcov.info +20220 -0
- package/backend/dist/src/context-templates/context-templates.service.js +0 -3
- package/backend/dist/src/context-templates/context-templates.service.js.map +1 -1
- package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.d.ts +1 -1
- package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js +4 -0
- package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js.map +1 -1
- package/backend/dist/src/seeding/data/sub-agents/browser-use.d.ts +1 -1
- package/backend/dist/src/seeding/data/sub-agents/browser-use.js +1 -1
- package/backend/dist/src/seeding/data/sub-agents/browser-use.js.map +1 -1
- package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.d.ts +1 -0
- package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js +2 -1
- package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js.map +1 -1
- package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.d.ts +1 -0
- package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js +2 -1
- package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js.map +1 -1
- package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.d.ts +1 -0
- package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js +2 -1
- package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js.map +1 -1
- package/backend/dist/src/seeding/system-prompt-seeding.service.js +3 -1
- package/backend/dist/src/seeding/system-prompt-seeding.service.js.map +1 -1
- package/backend/dist/src/sub-agents/sub-agent-run.entity.d.ts +1 -1
- package/backend/dist/src/sub-agents/sub-agent-run.entity.js +1 -1
- package/backend/dist/src/sub-agents/sub-agent-run.entity.js.map +1 -1
- package/backend/dist/src/sub-agents/sub-agent-runner.service.d.ts +1 -0
- package/backend/dist/src/sub-agents/sub-agent-runner.service.js +16 -2
- package/backend/dist/src/sub-agents/sub-agent-runner.service.js.map +1 -1
- package/backend/dist/src/sub-agents/sub-agents.service.js +0 -3
- package/backend/dist/src/sub-agents/sub-agents.service.js.map +1 -1
- package/backend/dist/src/system-prompts/system-prompts.service.d.ts +2 -1
- package/backend/dist/src/system-prompts/system-prompts.service.js +20 -14
- package/backend/dist/src/system-prompts/system-prompts.service.js.map +1 -1
- package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,835 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../../../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../../../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../../../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../../../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../../../../index.html">All files</a> / <a href="index.html">packages/gemini-core/src/mcp/token-storage</a> keychain-token-storage.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">0% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>0/114</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/26</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>0/18</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">0% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>0/112</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
317
|
+
<span class="cline-any cline-neutral"> </span>
|
|
318
|
+
<span class="cline-any cline-neutral"> </span>
|
|
319
|
+
<span class="cline-any cline-neutral"> </span>
|
|
320
|
+
<span class="cline-any cline-neutral"> </span>
|
|
321
|
+
<span class="cline-any cline-neutral"> </span>
|
|
322
|
+
<span class="cline-any cline-no"> </span>
|
|
323
|
+
<span class="cline-any cline-no"> </span>
|
|
324
|
+
<span class="cline-any cline-neutral"> </span>
|
|
325
|
+
<span class="cline-any cline-neutral"> </span>
|
|
326
|
+
<span class="cline-any cline-neutral"> </span>
|
|
327
|
+
<span class="cline-any cline-neutral"> </span>
|
|
328
|
+
<span class="cline-any cline-neutral"> </span>
|
|
329
|
+
<span class="cline-any cline-neutral"> </span>
|
|
330
|
+
<span class="cline-any cline-neutral"> </span>
|
|
331
|
+
<span class="cline-any cline-neutral"> </span>
|
|
332
|
+
<span class="cline-any cline-neutral"> </span>
|
|
333
|
+
<span class="cline-any cline-neutral"> </span>
|
|
334
|
+
<span class="cline-any cline-neutral"> </span>
|
|
335
|
+
<span class="cline-any cline-neutral"> </span>
|
|
336
|
+
<span class="cline-any cline-neutral"> </span>
|
|
337
|
+
<span class="cline-any cline-neutral"> </span>
|
|
338
|
+
<span class="cline-any cline-neutral"> </span>
|
|
339
|
+
<span class="cline-any cline-no"> </span>
|
|
340
|
+
<span class="cline-any cline-neutral"> </span>
|
|
341
|
+
<span class="cline-any cline-no"> </span>
|
|
342
|
+
<span class="cline-any cline-no"> </span>
|
|
343
|
+
<span class="cline-any cline-no"> </span>
|
|
344
|
+
<span class="cline-any cline-no"> </span>
|
|
345
|
+
<span class="cline-any cline-neutral"> </span>
|
|
346
|
+
<span class="cline-any cline-neutral"> </span>
|
|
347
|
+
<span class="cline-any cline-neutral"> </span>
|
|
348
|
+
<span class="cline-any cline-no"> </span>
|
|
349
|
+
<span class="cline-any cline-no"> </span>
|
|
350
|
+
<span class="cline-any cline-neutral"> </span>
|
|
351
|
+
<span class="cline-any cline-neutral"> </span>
|
|
352
|
+
<span class="cline-any cline-no"> </span>
|
|
353
|
+
<span class="cline-any cline-neutral"> </span>
|
|
354
|
+
<span class="cline-any cline-no"> </span>
|
|
355
|
+
<span class="cline-any cline-neutral"> </span>
|
|
356
|
+
<span class="cline-any cline-no"> </span>
|
|
357
|
+
<span class="cline-any cline-no"> </span>
|
|
358
|
+
<span class="cline-any cline-no"> </span>
|
|
359
|
+
<span class="cline-any cline-neutral"> </span>
|
|
360
|
+
<span class="cline-any cline-no"> </span>
|
|
361
|
+
<span class="cline-any cline-neutral"> </span>
|
|
362
|
+
<span class="cline-any cline-no"> </span>
|
|
363
|
+
<span class="cline-any cline-neutral"> </span>
|
|
364
|
+
<span class="cline-any cline-neutral"> </span>
|
|
365
|
+
<span class="cline-any cline-neutral"> </span>
|
|
366
|
+
<span class="cline-any cline-no"> </span>
|
|
367
|
+
<span class="cline-any cline-no"> </span>
|
|
368
|
+
<span class="cline-any cline-neutral"> </span>
|
|
369
|
+
<span class="cline-any cline-neutral"> </span>
|
|
370
|
+
<span class="cline-any cline-no"> </span>
|
|
371
|
+
<span class="cline-any cline-no"> </span>
|
|
372
|
+
<span class="cline-any cline-no"> </span>
|
|
373
|
+
<span class="cline-any cline-neutral"> </span>
|
|
374
|
+
<span class="cline-any cline-neutral"> </span>
|
|
375
|
+
<span class="cline-any cline-no"> </span>
|
|
376
|
+
<span class="cline-any cline-no"> </span>
|
|
377
|
+
<span class="cline-any cline-no"> </span>
|
|
378
|
+
<span class="cline-any cline-neutral"> </span>
|
|
379
|
+
<span class="cline-any cline-no"> </span>
|
|
380
|
+
<span class="cline-any cline-no"> </span>
|
|
381
|
+
<span class="cline-any cline-neutral"> </span>
|
|
382
|
+
<span class="cline-any cline-neutral"> </span>
|
|
383
|
+
<span class="cline-any cline-no"> </span>
|
|
384
|
+
<span class="cline-any cline-neutral"> </span>
|
|
385
|
+
<span class="cline-any cline-no"> </span>
|
|
386
|
+
<span class="cline-any cline-no"> </span>
|
|
387
|
+
<span class="cline-any cline-neutral"> </span>
|
|
388
|
+
<span class="cline-any cline-neutral"> </span>
|
|
389
|
+
<span class="cline-any cline-no"> </span>
|
|
390
|
+
<span class="cline-any cline-neutral"> </span>
|
|
391
|
+
<span class="cline-any cline-no"> </span>
|
|
392
|
+
<span class="cline-any cline-no"> </span>
|
|
393
|
+
<span class="cline-any cline-neutral"> </span>
|
|
394
|
+
<span class="cline-any cline-no"> </span>
|
|
395
|
+
<span class="cline-any cline-neutral"> </span>
|
|
396
|
+
<span class="cline-any cline-neutral"> </span>
|
|
397
|
+
<span class="cline-any cline-neutral"> </span>
|
|
398
|
+
<span class="cline-any cline-neutral"> </span>
|
|
399
|
+
<span class="cline-any cline-no"> </span>
|
|
400
|
+
<span class="cline-any cline-no"> </span>
|
|
401
|
+
<span class="cline-any cline-neutral"> </span>
|
|
402
|
+
<span class="cline-any cline-neutral"> </span>
|
|
403
|
+
<span class="cline-any cline-no"> </span>
|
|
404
|
+
<span class="cline-any cline-no"> </span>
|
|
405
|
+
<span class="cline-any cline-no"> </span>
|
|
406
|
+
<span class="cline-any cline-neutral"> </span>
|
|
407
|
+
<span class="cline-any cline-neutral"> </span>
|
|
408
|
+
<span class="cline-any cline-no"> </span>
|
|
409
|
+
<span class="cline-any cline-neutral"> </span>
|
|
410
|
+
<span class="cline-any cline-no"> </span>
|
|
411
|
+
<span class="cline-any cline-no"> </span>
|
|
412
|
+
<span class="cline-any cline-neutral"> </span>
|
|
413
|
+
<span class="cline-any cline-neutral"> </span>
|
|
414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
415
|
+
<span class="cline-any cline-neutral"> </span>
|
|
416
|
+
<span class="cline-any cline-no"> </span>
|
|
417
|
+
<span class="cline-any cline-no"> </span>
|
|
418
|
+
<span class="cline-any cline-neutral"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-neutral"> </span>
|
|
421
|
+
<span class="cline-any cline-no"> </span>
|
|
422
|
+
<span class="cline-any cline-no"> </span>
|
|
423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
425
|
+
<span class="cline-any cline-no"> </span>
|
|
426
|
+
<span class="cline-any cline-no"> </span>
|
|
427
|
+
<span class="cline-any cline-no"> </span>
|
|
428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-neutral"> </span>
|
|
430
|
+
<span class="cline-any cline-no"> </span>
|
|
431
|
+
<span class="cline-any cline-no"> </span>
|
|
432
|
+
<span class="cline-any cline-neutral"> </span>
|
|
433
|
+
<span class="cline-any cline-neutral"> </span>
|
|
434
|
+
<span class="cline-any cline-neutral"> </span>
|
|
435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
436
|
+
<span class="cline-any cline-no"> </span>
|
|
437
|
+
<span class="cline-any cline-no"> </span>
|
|
438
|
+
<span class="cline-any cline-neutral"> </span>
|
|
439
|
+
<span class="cline-any cline-neutral"> </span>
|
|
440
|
+
<span class="cline-any cline-neutral"> </span>
|
|
441
|
+
<span class="cline-any cline-neutral"> </span>
|
|
442
|
+
<span class="cline-any cline-no"> </span>
|
|
443
|
+
<span class="cline-any cline-no"> </span>
|
|
444
|
+
<span class="cline-any cline-neutral"> </span>
|
|
445
|
+
<span class="cline-any cline-neutral"> </span>
|
|
446
|
+
<span class="cline-any cline-no"> </span>
|
|
447
|
+
<span class="cline-any cline-no"> </span>
|
|
448
|
+
<span class="cline-any cline-no"> </span>
|
|
449
|
+
<span class="cline-any cline-neutral"> </span>
|
|
450
|
+
<span class="cline-any cline-neutral"> </span>
|
|
451
|
+
<span class="cline-any cline-no"> </span>
|
|
452
|
+
<span class="cline-any cline-no"> </span>
|
|
453
|
+
<span class="cline-any cline-no"> </span>
|
|
454
|
+
<span class="cline-any cline-no"> </span>
|
|
455
|
+
<span class="cline-any cline-no"> </span>
|
|
456
|
+
<span class="cline-any cline-neutral"> </span>
|
|
457
|
+
<span class="cline-any cline-no"> </span>
|
|
458
|
+
<span class="cline-any cline-no"> </span>
|
|
459
|
+
<span class="cline-any cline-neutral"> </span>
|
|
460
|
+
<span class="cline-any cline-neutral"> </span>
|
|
461
|
+
<span class="cline-any cline-neutral"> </span>
|
|
462
|
+
<span class="cline-any cline-neutral"> </span>
|
|
463
|
+
<span class="cline-any cline-no"> </span>
|
|
464
|
+
<span class="cline-any cline-no"> </span>
|
|
465
|
+
<span class="cline-any cline-neutral"> </span>
|
|
466
|
+
<span class="cline-any cline-neutral"> </span>
|
|
467
|
+
<span class="cline-any cline-no"> </span>
|
|
468
|
+
<span class="cline-any cline-no"> </span>
|
|
469
|
+
<span class="cline-any cline-no"> </span>
|
|
470
|
+
<span class="cline-any cline-neutral"> </span>
|
|
471
|
+
<span class="cline-any cline-neutral"> </span>
|
|
472
|
+
<span class="cline-any cline-no"> </span>
|
|
473
|
+
<span class="cline-any cline-no"> </span>
|
|
474
|
+
<span class="cline-any cline-no"> </span>
|
|
475
|
+
<span class="cline-any cline-neutral"> </span>
|
|
476
|
+
<span class="cline-any cline-no"> </span>
|
|
477
|
+
<span class="cline-any cline-neutral"> </span>
|
|
478
|
+
<span class="cline-any cline-no"> </span>
|
|
479
|
+
<span class="cline-any cline-no"> </span>
|
|
480
|
+
<span class="cline-any cline-no"> </span>
|
|
481
|
+
<span class="cline-any cline-no"> </span>
|
|
482
|
+
<span class="cline-any cline-no"> </span>
|
|
483
|
+
<span class="cline-any cline-neutral"> </span>
|
|
484
|
+
<span class="cline-any cline-neutral"> </span>
|
|
485
|
+
<span class="cline-any cline-no"> </span>
|
|
486
|
+
<span class="cline-any cline-neutral"> </span>
|
|
487
|
+
<span class="cline-any cline-neutral"> </span>
|
|
488
|
+
<span class="cline-any cline-neutral"> </span>
|
|
489
|
+
<span class="cline-any cline-neutral"> </span>
|
|
490
|
+
<span class="cline-any cline-neutral"> </span>
|
|
491
|
+
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-no"> </span>
|
|
493
|
+
<span class="cline-any cline-neutral"> </span>
|
|
494
|
+
<span class="cline-any cline-neutral"> </span>
|
|
495
|
+
<span class="cline-any cline-no"> </span>
|
|
496
|
+
<span class="cline-any cline-neutral"> </span>
|
|
497
|
+
<span class="cline-any cline-neutral"> </span>
|
|
498
|
+
<span class="cline-any cline-neutral"> </span>
|
|
499
|
+
<span class="cline-any cline-no"> </span>
|
|
500
|
+
<span class="cline-any cline-no"> </span>
|
|
501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
502
|
+
<span class="cline-any cline-neutral"> </span>
|
|
503
|
+
<span class="cline-any cline-no"> </span>
|
|
504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
506
|
+
<span class="cline-any cline-no"> </span>
|
|
507
|
+
<span class="cline-any cline-neutral"> </span>
|
|
508
|
+
<span class="cline-any cline-no"> </span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-neutral"> </span>
|
|
513
|
+
<span class="cline-any cline-no"> </span>
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-no"> </span>
|
|
516
|
+
<span class="cline-any cline-no"> </span>
|
|
517
|
+
<span class="cline-any cline-no"> </span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-no"> </span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
523
|
+
<span class="cline-any cline-no"> </span>
|
|
524
|
+
<span class="cline-any cline-no"> </span>
|
|
525
|
+
<span class="cline-any cline-no"> </span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-neutral"> </span>
|
|
529
|
+
<span class="cline-any cline-neutral"> </span>
|
|
530
|
+
<span class="cline-any cline-neutral"> </span>
|
|
531
|
+
<span class="cline-any cline-neutral"> </span>
|
|
532
|
+
<span class="cline-any cline-neutral"> </span>
|
|
533
|
+
<span class="cline-any cline-no"> </span>
|
|
534
|
+
<span class="cline-any cline-no"> </span>
|
|
535
|
+
<span class="cline-any cline-neutral"> </span>
|
|
536
|
+
<span class="cline-any cline-neutral"> </span>
|
|
537
|
+
<span class="cline-any cline-no"> </span>
|
|
538
|
+
<span class="cline-any cline-no"> </span>
|
|
539
|
+
<span class="cline-any cline-no"> </span>
|
|
540
|
+
<span class="cline-any cline-no"> </span>
|
|
541
|
+
<span class="cline-any cline-no"> </span>
|
|
542
|
+
<span class="cline-any cline-neutral"> </span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-no"> </span>
|
|
545
|
+
<span class="cline-any cline-no"> </span>
|
|
546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
547
|
+
<span class="cline-any cline-no"> </span>
|
|
548
|
+
<span class="cline-any cline-no"> </span>
|
|
549
|
+
<span class="cline-any cline-no"> </span>
|
|
550
|
+
<span class="cline-any cline-neutral"> </span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-neutral"> </span>
|
|
553
|
+
<span class="cline-any cline-neutral"> </span>
|
|
554
|
+
<span class="cline-any cline-no"> </span>
|
|
555
|
+
<span class="cline-any cline-no"> </span>
|
|
556
|
+
<span class="cline-any cline-no"> </span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-no"> </span>
|
|
559
|
+
<span class="cline-any cline-no"> </span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
563
|
+
<span class="cline-any cline-neutral"> </span>
|
|
564
|
+
<span class="cline-any cline-no"> </span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
566
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
567
|
+
* @license
|
|
568
|
+
* Copyright 2025 Google LLC
|
|
569
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
570
|
+
*/
|
|
571
|
+
|
|
572
|
+
<span class="cstat-no" title="statement not covered" >import * as crypto from 'node:crypto';</span>
|
|
573
|
+
<span class="cstat-no" title="statement not covered" >import { BaseTokenStorage } from './base-token-storage';</span>
|
|
574
|
+
import type { OAuthCredentials } from './types';
|
|
575
|
+
|
|
576
|
+
interface Keytar {
|
|
577
|
+
getPassword(service: string, account: string): Promise<string | null>;
|
|
578
|
+
setPassword(
|
|
579
|
+
service: string,
|
|
580
|
+
account: string,
|
|
581
|
+
password: string,
|
|
582
|
+
): Promise<void>;
|
|
583
|
+
deletePassword(service: string, account: string): Promise<boolean>;
|
|
584
|
+
findCredentials(
|
|
585
|
+
service: string,
|
|
586
|
+
): Promise<Array<{ account: string; password: string }>>;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
const KEYCHAIN_TEST_PREFIX = <span class="cstat-no" title="statement not covered" >'__keychain_test__';</span>
|
|
590
|
+
|
|
591
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >export class K</span></span>eychainTokenStorage extends BaseTokenStorage {
|
|
592
|
+
private <span class="cstat-no" title="statement not covered" >keychainAvailable: boolean | null = null;</span>
|
|
593
|
+
private <span class="cstat-no" title="statement not covered" >keytarModule: Keytar | null = null;</span>
|
|
594
|
+
private <span class="cstat-no" title="statement not covered" >keytarLoadAttempted = false;</span>
|
|
595
|
+
|
|
596
|
+
<span class="fstat-no" title="function not covered" > async </span>getKeytar(): Promise<Keytar | null> {
|
|
597
|
+
// If we've already tried loading (successfully or not), return the result
|
|
598
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.keytarLoadAttempted) {</span>
|
|
599
|
+
<span class="cstat-no" title="statement not covered" > return this.keytarModule;</span>
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
<span class="cstat-no" title="statement not covered" > this.keytarLoadAttempted = true;</span>
|
|
603
|
+
|
|
604
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
605
|
+
// Try to import keytar without any timeout - let the OS handle it
|
|
606
|
+
const moduleName = <span class="cstat-no" title="statement not covered" >'keytar';</span>
|
|
607
|
+
const module = <span class="cstat-no" title="statement not covered" >await import(moduleName<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >);</span></span></span>
|
|
608
|
+
<span class="cstat-no" title="statement not covered" > this.keytarModule = module.default || module;</span>
|
|
609
|
+
} catch (error) {
|
|
610
|
+
<span class="cstat-no" title="statement not covered" > console.error(error);</span>
|
|
611
|
+
}
|
|
612
|
+
<span class="cstat-no" title="statement not covered" > return this.keytarModule;</span>
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
<span class="fstat-no" title="function not covered" > async </span>getCredentials(serverName: string): Promise<OAuthCredentials | null> {
|
|
616
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!(await this.checkKeychainAvailability())) {</span>
|
|
617
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keychain is not available');</span>
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
const keytar = <span class="cstat-no" title="statement not covered" >await this.getKeytar();</span>
|
|
621
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!keytar) {</span>
|
|
622
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keytar module not available');</span>
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
626
|
+
const sanitizedName = <span class="cstat-no" title="statement not covered" >this.sanitizeServerName(serverName);</span>
|
|
627
|
+
const data = <span class="cstat-no" title="statement not covered" >await keytar.getPassword(this.serviceName, sanitizedName);</span>
|
|
628
|
+
|
|
629
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!data) {</span>
|
|
630
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
const credentials = <span class="cstat-no" title="statement not covered" >JSON.parse(data) as OAuthCredentials;</span>
|
|
634
|
+
|
|
635
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.isTokenExpired(credentials)) {</span>
|
|
636
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
<span class="cstat-no" title="statement not covered" > return credentials;</span>
|
|
640
|
+
} catch (error) {
|
|
641
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error instanceof SyntaxError) {</span>
|
|
642
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(`Failed to parse stored credentials for ${serverName}`);</span>
|
|
643
|
+
}
|
|
644
|
+
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
<span class="fstat-no" title="function not covered" > async </span>setCredentials(credentials: OAuthCredentials): Promise<void> {
|
|
649
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!(await this.checkKeychainAvailability())) {</span>
|
|
650
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keychain is not available');</span>
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
const keytar = <span class="cstat-no" title="statement not covered" >await this.getKeytar();</span>
|
|
654
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!keytar) {</span>
|
|
655
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keytar module not available');</span>
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
<span class="cstat-no" title="statement not covered" > this.validateCredentials(credentials);</span>
|
|
659
|
+
|
|
660
|
+
const sanitizedName = <span class="cstat-no" title="statement not covered" >this.sanitizeServerName(credentials.serverName);</span>
|
|
661
|
+
const updatedCredentials: OAuthCredentials = <span class="cstat-no" title="statement not covered" >{</span>
|
|
662
|
+
...credentials,
|
|
663
|
+
updatedAt: Date.now(),
|
|
664
|
+
};
|
|
665
|
+
|
|
666
|
+
const data = <span class="cstat-no" title="statement not covered" >JSON.stringify(updatedCredentials);</span>
|
|
667
|
+
<span class="cstat-no" title="statement not covered" > await keytar.setPassword(this.serviceName, sanitizedName, data);</span>
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
<span class="fstat-no" title="function not covered" > async </span>deleteCredentials(serverName: string): Promise<void> {
|
|
671
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!(await this.checkKeychainAvailability())) {</span>
|
|
672
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keychain is not available');</span>
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
const keytar = <span class="cstat-no" title="statement not covered" >await this.getKeytar();</span>
|
|
676
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!keytar) {</span>
|
|
677
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keytar module not available');</span>
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
const sanitizedName = <span class="cstat-no" title="statement not covered" >this.sanitizeServerName(serverName);</span>
|
|
681
|
+
const deleted = <span class="cstat-no" title="statement not covered" >await keytar.deletePassword(</span>
|
|
682
|
+
this.serviceName,
|
|
683
|
+
sanitizedName,
|
|
684
|
+
);
|
|
685
|
+
|
|
686
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!deleted) {</span>
|
|
687
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(`No credentials found for ${serverName}`);</span>
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
<span class="fstat-no" title="function not covered" > async </span>listServers(): Promise<string[]> {
|
|
692
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!(await this.checkKeychainAvailability())) {</span>
|
|
693
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keychain is not available');</span>
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
const keytar = <span class="cstat-no" title="statement not covered" >await this.getKeytar();</span>
|
|
697
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!keytar) {</span>
|
|
698
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keytar module not available');</span>
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
702
|
+
const credentials = <span class="cstat-no" title="statement not covered" >await keytar.findCredentials(this.serviceName);</span>
|
|
703
|
+
<span class="cstat-no" title="statement not covered" > return credentials</span>
|
|
704
|
+
.filter(<span class="fstat-no" title="function not covered" >(c</span>red) => <span class="cstat-no" title="statement not covered" >!cred.account.startsWith(KEYCHAIN_TEST_PREFIX))</span>
|
|
705
|
+
.map(<span class="fstat-no" title="function not covered" >(c</span>red: { account: string }) => <span class="cstat-no" title="statement not covered" >cred.account)</span>;
|
|
706
|
+
} catch (error) {
|
|
707
|
+
<span class="cstat-no" title="statement not covered" > console.error('Failed to list servers from keychain:', error);</span>
|
|
708
|
+
<span class="cstat-no" title="statement not covered" > return [];</span>
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
<span class="fstat-no" title="function not covered" > async </span>getAllCredentials(): Promise<Map<string, OAuthCredentials>> {
|
|
713
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!(await this.checkKeychainAvailability())) {</span>
|
|
714
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keychain is not available');</span>
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
const keytar = <span class="cstat-no" title="statement not covered" >await this.getKeytar();</span>
|
|
718
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!keytar) {</span>
|
|
719
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keytar module not available');</span>
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
const result = <span class="cstat-no" title="statement not covered" >new Map<string, OAuthCredentials>();</span>
|
|
723
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
724
|
+
const credentials = <span class="cstat-no" title="statement not covered" >(</span>
|
|
725
|
+
await keytar.findCredentials(this.serviceName)
|
|
726
|
+
).filter(<span class="fstat-no" title="function not covered" >(c</span>) => <span class="cstat-no" title="statement not covered" >!c.account.startsWith(KEYCHAIN_TEST_PREFIX))</span>;
|
|
727
|
+
|
|
728
|
+
<span class="cstat-no" title="statement not covered" > for (const cred of credentials) {</span>
|
|
729
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
730
|
+
const data = <span class="cstat-no" title="statement not covered" >JSON.parse(cred.password) as OAuthCredentials;</span>
|
|
731
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.isTokenExpired(data)) {</span>
|
|
732
|
+
<span class="cstat-no" title="statement not covered" > result.set(cred.account, data);</span>
|
|
733
|
+
}
|
|
734
|
+
} catch (error) {
|
|
735
|
+
<span class="cstat-no" title="statement not covered" > console.error(</span>
|
|
736
|
+
`Failed to parse credentials for ${cred.account}:`,
|
|
737
|
+
error,
|
|
738
|
+
);
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
} catch (error) {
|
|
742
|
+
<span class="cstat-no" title="statement not covered" > console.error('Failed to get all credentials from keychain:', error);</span>
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
<span class="cstat-no" title="statement not covered" > return result;</span>
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
<span class="fstat-no" title="function not covered" > async </span>clearAll(): Promise<void> {
|
|
749
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!(await this.checkKeychainAvailability())) {</span>
|
|
750
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Keychain is not available');</span>
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
const servers = <span class="cstat-no" title="statement not covered" >this.keytarModule</span>
|
|
754
|
+
? await this.keytarModule
|
|
755
|
+
.findCredentials(this.serviceName)
|
|
756
|
+
.then(<span class="fstat-no" title="function not covered" >(c</span>reds) => <span class="cstat-no" title="statement not covered" >creds.map(<span class="fstat-no" title="function not covered" >(c</span>) => <span class="cstat-no" title="statement not covered" >c.account)</span>)</span>
|
|
757
|
+
.catch(<span class="fstat-no" title="function not covered" >(e</span>rror: Error) => {
|
|
758
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
759
|
+
`Failed to list servers for clearing: ${error.message}`,
|
|
760
|
+
);
|
|
761
|
+
})
|
|
762
|
+
: [];
|
|
763
|
+
const errors: Error[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
764
|
+
|
|
765
|
+
<span class="cstat-no" title="statement not covered" > for (const server of servers) {</span>
|
|
766
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
767
|
+
<span class="cstat-no" title="statement not covered" > await this.deleteCredentials(server);</span>
|
|
768
|
+
} catch (error) {
|
|
769
|
+
<span class="cstat-no" title="statement not covered" > errors.push(error as Error);</span>
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (errors.length > 0) {</span>
|
|
774
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
775
|
+
`Failed to clear some credentials: ${errors.map(<span class="fstat-no" title="function not covered" >(e</span>) => <span class="cstat-no" title="statement not covered" >e.message)</span>.join(', ')}`,
|
|
776
|
+
);
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
// Checks whether or not a set-get-delete cycle with the keychain works.
|
|
781
|
+
// Returns false if any operation fails.
|
|
782
|
+
<span class="fstat-no" title="function not covered" > async </span>checkKeychainAvailability(): Promise<boolean> {
|
|
783
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.keychainAvailable !== null) {</span>
|
|
784
|
+
<span class="cstat-no" title="statement not covered" > return this.keychainAvailable;</span>
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
788
|
+
const keytar = <span class="cstat-no" title="statement not covered" >await this.getKeytar();</span>
|
|
789
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!keytar) {</span>
|
|
790
|
+
<span class="cstat-no" title="statement not covered" > this.keychainAvailable = false;</span>
|
|
791
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
const testAccount = <span class="cstat-no" title="statement not covered" >`${KEYCHAIN_TEST_PREFIX}${crypto.randomBytes(8).toString('hex')}`;</span>
|
|
795
|
+
const testPassword = <span class="cstat-no" title="statement not covered" >'test';</span>
|
|
796
|
+
|
|
797
|
+
<span class="cstat-no" title="statement not covered" > await keytar.setPassword(this.serviceName, testAccount, testPassword);</span>
|
|
798
|
+
const retrieved = <span class="cstat-no" title="statement not covered" >await keytar.getPassword(this.serviceName, testAccount);</span>
|
|
799
|
+
const deleted = <span class="cstat-no" title="statement not covered" >await keytar.deletePassword(</span>
|
|
800
|
+
this.serviceName,
|
|
801
|
+
testAccount,
|
|
802
|
+
);
|
|
803
|
+
|
|
804
|
+
const success = <span class="cstat-no" title="statement not covered" >deleted && retrieved === testPassword;</span>
|
|
805
|
+
<span class="cstat-no" title="statement not covered" > this.keychainAvailable = success;</span>
|
|
806
|
+
<span class="cstat-no" title="statement not covered" > return success;</span>
|
|
807
|
+
} catch (_error) {
|
|
808
|
+
<span class="cstat-no" title="statement not covered" > this.keychainAvailable = false;</span>
|
|
809
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
<span class="fstat-no" title="function not covered" > async </span>isAvailable(): Promise<boolean> {
|
|
814
|
+
<span class="cstat-no" title="statement not covered" > return this.checkKeychainAvailability();</span>
|
|
815
|
+
}
|
|
816
|
+
}</pre></td></tr></table></pre>
|
|
817
|
+
|
|
818
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
819
|
+
</div><!-- /wrapper -->
|
|
820
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
821
|
+
Code coverage generated by
|
|
822
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
823
|
+
at 2026-05-09T01:03:45.353Z
|
|
824
|
+
</div>
|
|
825
|
+
<script src="../../../../../prettify.js"></script>
|
|
826
|
+
<script>
|
|
827
|
+
window.onload = function () {
|
|
828
|
+
prettyPrint();
|
|
829
|
+
};
|
|
830
|
+
</script>
|
|
831
|
+
<script src="../../../../../sorter.js"></script>
|
|
832
|
+
<script src="../../../../../block-navigation.js"></script>
|
|
833
|
+
</body>
|
|
834
|
+
</html>
|
|
835
|
+
|