ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CodexBar DeepSeek 提供商接入指南:API Key 余额与 Platform 会话详解

CodexBar DeepSeek 提供商接入指南:API Key 余额与 Platform 会话详解 CodexBar DeepSeek 提供商接入指南API Key 余额与 Platform 会话详解【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar本篇指南围绕 CodexBar 仓库中的 DeepSeek 提供商文档 展开完整讲解其数据源架构如何用 DeepSeek API Key 读取剩余余额如何通过 DeepSeek Platform 登录会话userToken获取余额与详细用量以及两者的解析顺序、会话选择策略与菜单展示细节。读完本文你将掌握 DeepSeek 提供商从配置、认证到数据聚合的完整工作链路并能在~/.codexbar/config.json与源码层面定位每一环节的实现。一、数据源总览API Key 与 Platform 会话双通道DeepSeek 提供商支持两种凭据来源与两类数据端点可选 API Key通过环境变量DEEPSEEK_API_KEY/DEEPSEEK_KEY提供或从~/.codexbar/config.json中的 DeepSeek token accountsAPI tokens中选取。API Key 余额端点余额主数据源之一GET https://api.deepseek.com/user/balance请求头Authorization: Bearer api keyAccept: application/json响应包含is_available布尔值以及balance_infos数组每个币种条目含total_balance、granted_balance、topped_up_balance三个字符串金额字段。Platform 会话余额端点无 API Key 时的余额数据源GET https://platform.deepseek.com/api/v0/users/get_user_summary请求头Authorization: Bearer platform userTokenAccept: application/json可选详细用量端点必须由 Platform 会话认证API Key 无法访问GET https://platform.deepseek.com/api/v0/usage/amount?monthmonthyearyearGET https://platform.deepseek.com/api/v0/usage/cost?monthmonthyearyear请求头Authorization: Bearer platform userTokenAccept: application/json注意这些是私有仪表盘端点并非公开文档化的 API字段结构可能随时变化CodexBar 的解析器对错误包裹error envelope做了容错设计详见下文解析层说明。1.1 余额 API 的响应结构与解析在 DeepSeekUsageFetcher.swift 中余额响应被解码为DeepSeekBalanceResponse字段is_available、balance_infos与DeepSeekBalanceInfocurrency、total_balance、granted_balance、topped_up_balance。解析时对每个条目做了三项约束三个金额字段必须都能转换为Double否则抛出parseFailed多币种时优先选择「有正余额的 USD 条目」其次「任一有正余额的条目」再其次「USD 条目」若 API 返回了空的 USD 行也不会因此隐藏正数的 CNY 余额对应 CHANGELOG 中 #873 的修复全部条目为空时返回一个isAvailable: false、余额为 0 的占位快照。1.2 Platform 用户摘要的解析get_user_summary的响应结构与公开 API 不同它带有两层错误包裹顶层code/data与业务层biz_code/biz_data。解析器DeepSeekPlatformUserSummaryResponse/DeepSeekPlatformUserSummaryData在任意一层code/biz_code非 0 时仍尝试保留data以兼容不稳定 schema认证错误码40002、40003会被识别为会话失效。业务数据体biz_data由normal_wallets充值钱包对应 paid credit与bonus_wallets赠送钱包对应 granted credit组成钱包余额同时兼容数字与字符串两种 JSON 编码。二、Platform 会话令牌解析顺序与浏览器导入2.1 userToken 解析顺序CodexBar 按以下优先级解析 PlatformuserToken显式提供的DEEPSEEK_PLATFORM_TOKEN/DEEPSEEK_USER_TOKEN或从既有配置中保留的旧版providers[].cookieHeader值兼容回退。从 Chrome 的https://platform.deepseek.comlocal-storage 源无提示读取userToken。旧版配置值作为兼容回退保留确保升级不会静默抹掉一个可用的浏览器会话。关键的安全设计体现在 DeepSeekSettingsReader.swift 的scopedPlatformToken与profileScope无作用域unscoped的旧版或环境变量令牌永远不会与 API Key 余额组合使用API 增强详细用量要求会话被保存到该凭据作用域下。新的自动导入令牌从不写回 config只保存在内存中。2.2 作用域指纹凭据到浏览器会话的绑定profileScope(selectedTokenAccountID:apiKey:)使用 CryptoKit 对com.steipete.codexbar.deepseek-profile-scope.v1 accountScope apiKey计算 SHA-256生成形如v1:hex的作用域指纹无 API Key 时使用固定的browser:v1作用域有 API Key 时作用域绑定到当前 token account ID或environment与 Key 本身。因此更换 Key 或切换账户时CODEXBAR_DEEPSEEK_PROFILE_SCOPE不匹配CodexBar 会要求用户重新显式选择浏览器会话避免静默复用旧会话profile 选择仅当存储的作用域与期望作用域一致时才被采纳。选择的 profile ID 持久化的是稳定的浏览器/profile 标识符如chrome:profileName由canonicalProfileID规范化而非绝对的主目录路径。2.3 多 Chrome 配置文件与会话选择策略DeepSeekPlatformTokenImporter.swift 会检查每个包含可解析userToken的 Chrome profileimportTokens读取 local-storage 条目并抽取 tokenextractUserToken支持 JSON 对象、引号包裹字符串与裸字符串并要求长度 ≥ 20 且不含空白才算合理令牌被拒绝或已过期的会话会被过滤掉Settings 中只展示有效会话的 Chrome profile 选择器无 API Key 且只有一个有效会话时自动选中有多个有效会话时复用已保存的选择或询问一次当 API Key 提供余额时新变更的 API 凭据必须显式选择会话之后网站用量才会与余额合并展示若选中的会话过期CodexBar 会在切换到其他有效 profile 前询问用户校验结果有 30 分钟 TTL 的缓存DeepSeekPlatformValidationCache常规刷新不会逐个探测所有 profile一次临时网络失败也不会抹掉之前已验证的 profileunavailable 结果回退到 lastKnownStatus。三、获取流程并发请求、有界等待与降级策略3.1 API Key 路径入口为DeepSeekProviderDescriptor中的loadAPIUsage其流程对应 DeepSeekProviderDescriptor.swift 的loadUsage/loadAutomaticUsage若启用可选用量且存在作用于当前 Key 的 scoped Platform token直接fetchUsage(apiKey, session, true)并发拉取余额与详细用量。否则启动resolveAutomaticSession任务解析 Chrome 会话同时并行调用余额端点fetchUsage(apiKey, nil, false)。余额返回后通过BoundedTaskJoin等待自动会话解析最多 5 秒optionalResolutionJoinGrace即使本地 Chrome 读取不响应取消总截止时间仍有界。若可选工作失败或超时余额与已验证 profile 列表仍然可用菜单仅提示「详细用量不可用」detailedUsageState: .unavailable。在 DeepSeekUsageFetcher.swift 的fetchUsage内部summaryTask与余额请求并发执行余额成功后会以completedOptionalUsageSummaryjoin grace 同样为 5 秒等待摘要任务成功则状态为.available超时或失败则.unavailable若失败原因是invalidPlatformToken则转为.webSessionRequired提示去 Chrome 登录。3.2 Platform 会话路径无 API Key 时走DeepSeekPlatformFetchStrategysource 模式web或auto下无 Key 时。loadPlatformUsage的流程若存在 scoped token 则直接fetchPlatformUsage否则解析自动会话includePlatformBalance: true每个候选会话同时校验余额与用量join grace 为 20 秒platformResolutionJoinGrace已选中会话优先校验其余候选会话以 utility 优先级后台刷新不阻塞主流程解析超时抛networkError(Chrome session resolution timed out)选中余额与详细用量都不可用时抛networkError(Chrome session resolution unavailable)。3.3 多个 API Key 与平台会话的隔离浏览器派生的详细用量只展示在活动 API Key 账户卡片上其他账户卡片保持 balance-only避免网站用量在多个账户间重复统计相关快照处理见 UsageSnapshotDeepSeek.swift 与 UsageStoreTokenAccounts.swift 中的preservingDeepSeekPlatformProfiles逻辑。四、详细用量amount/cost 双端点解析与聚合4.1 并发拉取与月度参数fetchUsageSummary使用 UTC 公历en_US_POSIX locale计算当前month/year然后通过withThrowingTaskGroup并发请求/usage/amount与/usage/cost两个端点任一失败都会整体失败。每个请求 15 秒超时401/403 被视为invalidPlatformToken。4.2 响应模型与容错解码DeepSeekUsageCostParser.swift 定义了完整的解码模型amount 响应code/msg/data→biz_code/biz_msg/biz_databiz_data含total按模型的 usage 数组与days按天的模型用量cost 响应biz_data为数组首元素含total、days与currencyusage item 的type字段被映射为DeepSeekUsageCategoryPROMPT_CACHE_HIT_TOKENCache-hit input、PROMPT_CACHE_MISS_TOKENCache-miss input、RESPONSE_TOKENOutput、REQUESTRequests四类未知类型直接忽略所有层的code/biz_code非 0 都会检查是否为认证错误40002/40003是则抛invalidPlatformToken否则抛apiError。4.3 聚合逻辑解析器将 amount 与 cost 两个来源按「日期 模型 类别」聚合今日从days中找到今天的记录汇总非 REQUEST 类别的 token 与 costREQUEST 计入请求数本月只累加startOfMonth ≤ 日期 ≤ now的记录UTC分类/模型从total汇总各类别 token 与 cost并找出 token 量最大的模型作为 top model日序列生成本月每天的DeepSeekDailyUsage日期、token 总数、cost、请求数供菜单中的 current-month token 图表使用。4.4 菜单展示在 UsageSnapshotDeepSeek.swift 的detailSections中详细用量被渲染为「Detailed usage」小节Todaycost · tokens tokensThis monthcost · tokens tokensRequests本月请求数Top modeltoken 量最大的模型类别明细Cache-hit input / Cache-miss input / Output 各自的 token 数Daily tokens图表本月每日 token 序列五、余额展示、状态机与边界行为5.1 菜单卡片格式toUsageSnapshot()DeepSeekUsageFetcher.swift定义了余额文案规则余额 0 且可用$50.00 (Paid: $40.00 / Granted: $10.00)形式topped_up_balance即 paidgranted_balance即 grantedCNY 使用¥符号其余币种使用$总余额为 0显示「add credits at platform.deepseek.com」的充值提示余额非 0 但is_available为 false显示「Balance unavailable for API calls」多币种时优先展示 USD。5.2 详细用量状态机DeepSeekDetailedUsageState包含notRequested、available、webSessionRequired、profileSelectionRequired、unavailable五种状态。菜单笔记usage notes会据此提示用户未登录时提示「Sign in to DeepSeek Platform in Chrome for detailed usage.」需要选 profile 时提示「Select a DeepSeek Chrome profile in Settings.」其余失败情况显示「Detailed usage unavailable.」若没有 API Key 且无有效会话则要求用户在 Chrome 中登录 DeepSeek Platform。5.3 无会话/无 Key 的兜底没有有效会话时菜单保留 API Key 余额若存在否则提示用户登录顶层或嵌套的 DeepSeek 错误码40002、40003一律视为过期会话会话过期时invalidPlatformToken会让详细用量状态回退到webSessionRequired。六、环境变量与配置速查表项名称说明API Key首选DEEPSEEK_API_KEY余额端点认证凭据API Key别名DEEPSEEK_KEY兼容别名apiKeyEnvironmentKeys按序读取Platform 令牌DEEPSEEK_PLATFORM_TOKEN/DEEPSEEK_USER_TOKEN详细用量端点认证凭据会话 Profile IDCODEXBAR_DEEPSEEK_PROFILE_ID持久化的 Chrome profile 标识符规范化为chrome:profileName会话作用域CODEXBAR_DEEPSEEK_PROFILE_SCOPE凭据作用域指纹v1:sha256或browser:v1绑定会话选择所有环境变量读取都会做引号剥离与空白清理DeepSeekSettingsReader.value(for:environment:)。token account 的选择会把选中的 Key 注入到抓取环境变量中未选择账户时回退到DEEPSEEK_API_KEY/DEEPSEEK_KEYtoken account 注入与优先级见 UsageStoreTokenAccounts.swift 与 ProviderTokenAccountSelection.swiftCLI 侧由 TokenAccountSupport.swift 承载。DeepSeek 没有会话或周窗口——API 不暴露按窗口计算的配额因此sessionLabel与weeklyLabel均为 Balance见 descriptor 元数据菜单不展示进度条式的配额窗口而是以纯文本余额呈现相关说明见 MenuBarLayoutRenderer.swift 的注释与 CHANGELOG #856。七、Provider 激活与设置界面DeepSeekProviderImplementation.swift 负责 App 侧集成当存在多个有效 Chrome profile 或状态为profileSelectionRequired时Settings 中会出现Chrome profile选择器picker iddeepseek-chrome-profile选项只包含有效会话切换 profile 时调用beginDeepSeekProfileTransition(preservingBalance:)——若 API Key 存在且 source 不是web则保留余额仅替换详细用量数据源setDeepSeekProfileID见 DeepSeekSettingsStore.swift会把 profile ID 与对应作用域指纹一起写入providerConfig作用域与当前 Key 不匹配时选择不生效元数据defaultEnabled: false、widgetSelectable: false、balanceOnly: true、usesDetailBackedWindow: trueCLI 名为deepseek别名deep-seek、ds。八、关键文件索引文件职责DeepSeekProviderDescriptor.swiftdescriptor 定义、fetch 策略选择api/web/auto、余额自动会话组合DeepSeekUsageFetcher.swiftHTTP 客户端、余额/摘要/平台余额解析、快照构建DeepSeekUsageCostParser.swiftamount/cost 响应解码、今日/本月/分类/日序列聚合DeepSeekPlatformTokenImporter.swiftChrome local-storage 会话导入、校验缓存与选择解析DeepSeekSettingsReader.swift环境变量解析、profile 作用域指纹与选择判定DeepSeekProviderConfig.swiftconfig 中 profile ID/scope 的存取与规范化DeepSeekProviderImplementation.swiftApp 侧 provider 激活、Chrome profile 选择器DeepSeekSettingsStore.swiftSettingsStore 中 profile 选择的读写UsageSnapshotDeepSeek.swift详细用量降级与 profile 列表保留辅助相关测试覆盖在 Tests/CodexBarTests/DeepSeekUsageFetcherTests.swift并发与取消、5 秒 join grace、摘要失败降级、Tests/CodexBarTests/DeepSeekUsageCostParserTests.swiftamount/cost 解析与聚合、Tests/CodexBarTests/DeepSeekPlatformTokenImporterTests.swift会话导入与选择、Tests/CodexBarTests/DeepSeekSettingsReaderTests.swift环境变量与作用域、Tests/CodexBarTests/DeepSeekProfileTransitionTests.swiftprofile 切换保余额与 Tests/CodexBarTests/DeepSeekProviderDescriptorTests.swift。若需修改 DeepSeek 余额或详细用量解析、更新 API Key 处理、或记录新的 provider 行为可直接从上述文件入手。【免费下载链接】CodexBarShow usage stats for OpenAI Codex and Claude Code, without having to login.项目地址: https://gitcode.com/GitHub_Trending/co/CodexBar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表