@jsonstudio/rcc 0.89.1803 → 0.89.1959

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/configsamples/config.json +19 -0
  2. package/configsamples/provider/deepseek/config.v1.json +59 -0
  3. package/dist/build-info.js +2 -2
  4. package/dist/cli/commands/claude.d.ts +4 -0
  5. package/dist/cli/commands/claude.js +56 -0
  6. package/dist/cli/commands/claude.js.map +1 -0
  7. package/dist/cli/commands/clock-admin.d.ts +20 -0
  8. package/dist/cli/commands/clock-admin.js +234 -0
  9. package/dist/cli/commands/clock-admin.js.map +1 -0
  10. package/dist/cli/commands/code.d.ts +0 -42
  11. package/dist/cli/commands/code.js +4 -414
  12. package/dist/cli/commands/code.js.map +1 -1
  13. package/dist/cli/commands/codex.d.ts +4 -0
  14. package/dist/cli/commands/codex.js +43 -0
  15. package/dist/cli/commands/codex.js.map +1 -0
  16. package/dist/cli/commands/examples.js +13 -16
  17. package/dist/cli/commands/examples.js.map +1 -1
  18. package/dist/cli/commands/init/basic.d.ts +40 -0
  19. package/dist/cli/commands/init/basic.js +482 -0
  20. package/dist/cli/commands/init/basic.js.map +1 -0
  21. package/dist/cli/commands/init/camoufox.d.ts +7 -0
  22. package/dist/cli/commands/init/camoufox.js +59 -0
  23. package/dist/cli/commands/init/camoufox.js.map +1 -0
  24. package/dist/cli/commands/init/interactive.d.ts +18 -0
  25. package/dist/cli/commands/init/interactive.js +223 -0
  26. package/dist/cli/commands/init/interactive.js.map +1 -0
  27. package/dist/cli/commands/init/shared.d.ts +66 -0
  28. package/dist/cli/commands/init/shared.js +9 -0
  29. package/dist/cli/commands/init/shared.js.map +1 -0
  30. package/dist/cli/commands/init/workflows.d.ts +29 -0
  31. package/dist/cli/commands/init/workflows.js +341 -0
  32. package/dist/cli/commands/init/workflows.js.map +1 -0
  33. package/dist/cli/commands/init.d.ts +2 -26
  34. package/dist/cli/commands/init.js +220 -53
  35. package/dist/cli/commands/init.js.map +1 -1
  36. package/dist/cli/commands/launcher-kernel.d.ts +78 -0
  37. package/dist/cli/commands/launcher-kernel.js +1194 -0
  38. package/dist/cli/commands/launcher-kernel.js.map +1 -0
  39. package/dist/cli/commands/start.js +27 -1
  40. package/dist/cli/commands/start.js.map +1 -1
  41. package/dist/cli/commands/status.d.ts +2 -0
  42. package/dist/cli/commands/status.js +24 -1
  43. package/dist/cli/commands/status.js.map +1 -1
  44. package/dist/cli/commands/stop.d.ts +1 -0
  45. package/dist/cli/commands/stop.js +201 -4
  46. package/dist/cli/commands/stop.js.map +1 -1
  47. package/dist/cli/commands/tmux-inject.d.ts +20 -0
  48. package/dist/cli/commands/tmux-inject.js +212 -0
  49. package/dist/cli/commands/tmux-inject.js.map +1 -0
  50. package/dist/cli/config/init-provider-catalog.js +34 -0
  51. package/dist/cli/config/init-provider-catalog.js.map +1 -1
  52. package/dist/cli/register/claude-command.d.ts +3 -0
  53. package/dist/cli/register/claude-command.js +5 -0
  54. package/dist/cli/register/claude-command.js.map +1 -0
  55. package/dist/cli/register/clock-admin-command.d.ts +3 -0
  56. package/dist/cli/register/clock-admin-command.js +5 -0
  57. package/dist/cli/register/clock-admin-command.js.map +1 -0
  58. package/dist/cli/register/codex-command.d.ts +3 -0
  59. package/dist/cli/register/codex-command.js +5 -0
  60. package/dist/cli/register/codex-command.js.map +1 -0
  61. package/dist/cli/register/status-config-commands.d.ts +2 -0
  62. package/dist/cli/register/status-config-commands.js.map +1 -1
  63. package/dist/cli/register/tmux-inject-command.d.ts +3 -0
  64. package/dist/cli/register/tmux-inject-command.js +5 -0
  65. package/dist/cli/register/tmux-inject-command.js.map +1 -0
  66. package/dist/cli/server/port-utils.d.ts +3 -2
  67. package/dist/cli/server/port-utils.js +171 -32
  68. package/dist/cli/server/port-utils.js.map +1 -1
  69. package/dist/cli.js +45 -6
  70. package/dist/cli.js.map +1 -1
  71. package/dist/client/gemini/gemini-protocol-client.js +56 -5
  72. package/dist/client/gemini/gemini-protocol-client.js.map +1 -1
  73. package/dist/commands/token-daemon.js +59 -7
  74. package/dist/commands/token-daemon.js.map +1 -1
  75. package/dist/commands/validate.js +87 -15
  76. package/dist/commands/validate.js.map +1 -1
  77. package/dist/config/routecodex-config-loader.js +31 -2
  78. package/dist/config/routecodex-config-loader.js.map +1 -1
  79. package/dist/docs/daemon-admin-ui.html +948 -74
  80. package/dist/index.d.ts +1 -0
  81. package/dist/index.js +325 -37
  82. package/dist/index.js.map +1 -1
  83. package/dist/manager/quota/provider-quota-center.js +8 -14
  84. package/dist/manager/quota/provider-quota-center.js.map +1 -1
  85. package/dist/modules/llmswitch/bridge.d.ts +39 -0
  86. package/dist/modules/llmswitch/bridge.js +169 -0
  87. package/dist/modules/llmswitch/bridge.js.map +1 -1
  88. package/dist/modules/pipeline/utils/colored-logger.js +1 -1
  89. package/dist/modules/pipeline/utils/colored-logger.js.map +1 -1
  90. package/dist/providers/auth/deepseek-account-auth.d.ts +39 -0
  91. package/dist/providers/auth/deepseek-account-auth.js +329 -0
  92. package/dist/providers/auth/deepseek-account-auth.js.map +1 -0
  93. package/dist/providers/auth/deepseek-account-token-acquirer.d.ts +15 -0
  94. package/dist/providers/auth/deepseek-account-token-acquirer.js +644 -0
  95. package/dist/providers/auth/deepseek-account-token-acquirer.js.map +1 -0
  96. package/dist/providers/auth/oauth-lifecycle.js +26 -4
  97. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  98. package/dist/providers/auth/oauth-repair-cooldown.d.ts +5 -0
  99. package/dist/providers/auth/oauth-repair-cooldown.js +39 -0
  100. package/dist/providers/auth/oauth-repair-cooldown.js.map +1 -1
  101. package/dist/providers/auth/token-scanner/index.d.ts +6 -0
  102. package/dist/providers/auth/token-scanner/index.js +53 -0
  103. package/dist/providers/auth/token-scanner/index.js.map +1 -1
  104. package/dist/providers/core/api/provider-config.d.ts +17 -2
  105. package/dist/providers/core/api/provider-types.d.ts +6 -0
  106. package/dist/providers/core/api/provider-types.js.map +1 -1
  107. package/dist/providers/core/config/camoufox-launcher.d.ts +7 -0
  108. package/dist/providers/core/config/camoufox-launcher.js +68 -21
  109. package/dist/providers/core/config/camoufox-launcher.js.map +1 -1
  110. package/dist/providers/core/config/service-profiles.js +19 -0
  111. package/dist/providers/core/config/service-profiles.js.map +1 -1
  112. package/dist/providers/core/contracts/deepseek-provider-contract.d.ts +34 -0
  113. package/dist/providers/core/contracts/deepseek-provider-contract.js +100 -0
  114. package/dist/providers/core/contracts/deepseek-provider-contract.js.map +1 -0
  115. package/dist/providers/core/runtime/anthropic-http-provider.d.ts +0 -5
  116. package/dist/providers/core/runtime/anthropic-http-provider.js +0 -26
  117. package/dist/providers/core/runtime/anthropic-http-provider.js.map +1 -1
  118. package/dist/providers/core/runtime/deepseek-http-provider.d.ts +35 -0
  119. package/dist/providers/core/runtime/deepseek-http-provider.js +373 -0
  120. package/dist/providers/core/runtime/deepseek-http-provider.js.map +1 -0
  121. package/dist/providers/core/runtime/deepseek-session-pow.d.ts +55 -0
  122. package/dist/providers/core/runtime/deepseek-session-pow.js +422 -0
  123. package/dist/providers/core/runtime/deepseek-session-pow.js.map +1 -0
  124. package/dist/providers/core/runtime/gemini-cli-http-provider.d.ts +0 -3
  125. package/dist/providers/core/runtime/gemini-cli-http-provider.js +0 -72
  126. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
  127. package/dist/providers/core/runtime/gemini-http-provider.d.ts +1 -7
  128. package/dist/providers/core/runtime/gemini-http-provider.js +3 -110
  129. package/dist/providers/core/runtime/gemini-http-provider.js.map +1 -1
  130. package/dist/providers/core/runtime/http-request-executor.d.ts +1 -0
  131. package/dist/providers/core/runtime/http-request-executor.js +4 -0
  132. package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
  133. package/dist/providers/core/runtime/http-transport-provider.d.ts +10 -4
  134. package/dist/providers/core/runtime/http-transport-provider.js +308 -82
  135. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  136. package/dist/providers/core/runtime/iflow-http-provider.d.ts +0 -4
  137. package/dist/providers/core/runtime/iflow-http-provider.js +0 -28
  138. package/dist/providers/core/runtime/iflow-http-provider.js.map +1 -1
  139. package/dist/providers/core/runtime/provider-factory.d.ts +5 -0
  140. package/dist/providers/core/runtime/provider-factory.js +59 -6
  141. package/dist/providers/core/runtime/provider-factory.js.map +1 -1
  142. package/dist/providers/core/runtime/responses-provider.d.ts +0 -2
  143. package/dist/providers/core/runtime/responses-provider.js +0 -11
  144. package/dist/providers/core/runtime/responses-provider.js.map +1 -1
  145. package/dist/providers/core/strategies/oauth-device-flow.js +16 -1
  146. package/dist/providers/core/strategies/oauth-device-flow.js.map +1 -1
  147. package/dist/providers/core/utils/provider-type-utils.js +2 -1
  148. package/dist/providers/core/utils/provider-type-utils.js.map +1 -1
  149. package/dist/providers/profile/families/anthropic-profile.d.ts +2 -0
  150. package/dist/providers/profile/families/anthropic-profile.js +32 -0
  151. package/dist/providers/profile/families/anthropic-profile.js.map +1 -0
  152. package/dist/providers/profile/families/antigravity-profile.d.ts +2 -0
  153. package/dist/providers/profile/families/antigravity-profile.js +109 -0
  154. package/dist/providers/profile/families/antigravity-profile.js.map +1 -0
  155. package/dist/providers/profile/families/glm-profile.d.ts +2 -0
  156. package/dist/providers/profile/families/glm-profile.js +48 -0
  157. package/dist/providers/profile/families/glm-profile.js.map +1 -0
  158. package/dist/providers/profile/families/iflow-profile.d.ts +2 -0
  159. package/dist/providers/profile/families/iflow-profile.js +232 -0
  160. package/dist/providers/profile/families/iflow-profile.js.map +1 -0
  161. package/dist/providers/profile/families/qwen-profile.d.ts +2 -0
  162. package/dist/providers/profile/families/qwen-profile.js +14 -0
  163. package/dist/providers/profile/families/qwen-profile.js.map +1 -0
  164. package/dist/providers/profile/families/responses-profile.d.ts +2 -0
  165. package/dist/providers/profile/families/responses-profile.js +28 -0
  166. package/dist/providers/profile/families/responses-profile.js.map +1 -0
  167. package/dist/providers/profile/profile-contracts.d.ts +74 -0
  168. package/dist/providers/profile/profile-contracts.js +2 -0
  169. package/dist/providers/profile/profile-contracts.js.map +1 -0
  170. package/dist/providers/profile/profile-registry.d.ts +3 -0
  171. package/dist/providers/profile/profile-registry.js +40 -0
  172. package/dist/providers/profile/profile-registry.js.map +1 -0
  173. package/dist/providers/profile/provider-directory.d.ts +2 -0
  174. package/dist/providers/profile/provider-directory.js +55 -0
  175. package/dist/providers/profile/provider-directory.js.map +1 -0
  176. package/dist/providers/profile/provider-profile-loader.js +43 -3
  177. package/dist/providers/profile/provider-profile-loader.js.map +1 -1
  178. package/dist/providers/profile/provider-profile.d.ts +8 -0
  179. package/dist/scripts/deepseek/pow-solver.mjs +146 -0
  180. package/dist/scripts/deepseek/sha3_wasm_bg.7b9ca65ddd.wasm +0 -0
  181. package/dist/server/handlers/config-admin-handler.js +27 -0
  182. package/dist/server/handlers/config-admin-handler.js.map +1 -1
  183. package/dist/server/runtime/http-server/clock-client-registry.d.ts +113 -0
  184. package/dist/server/runtime/http-server/clock-client-registry.js +592 -0
  185. package/dist/server/runtime/http-server/clock-client-registry.js.map +1 -0
  186. package/dist/server/runtime/http-server/clock-client-routes.d.ts +2 -0
  187. package/dist/server/runtime/http-server/clock-client-routes.js +481 -0
  188. package/dist/server/runtime/http-server/clock-client-routes.js.map +1 -0
  189. package/dist/server/runtime/http-server/clock-daemon-inject-config.d.ts +1 -0
  190. package/dist/server/runtime/http-server/clock-daemon-inject-config.js +11 -0
  191. package/dist/server/runtime/http-server/clock-daemon-inject-config.js.map +1 -0
  192. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js +3 -3
  193. package/dist/server/runtime/http-server/daemon-admin/auth-handler.js.map +1 -1
  194. package/dist/server/runtime/http-server/daemon-admin/auth-session.d.ts +1 -0
  195. package/dist/server/runtime/http-server/daemon-admin/auth-session.js +18 -2
  196. package/dist/server/runtime/http-server/daemon-admin/auth-session.js.map +1 -1
  197. package/dist/server/runtime/http-server/daemon-admin/control-handler.js +2 -15
  198. package/dist/server/runtime/http-server/daemon-admin/control-handler.js.map +1 -1
  199. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js +65 -7
  200. package/dist/server/runtime/http-server/daemon-admin/credentials-handler.js.map +1 -1
  201. package/dist/server/runtime/http-server/executor-metadata.js +37 -1
  202. package/dist/server/runtime/http-server/executor-metadata.js.map +1 -1
  203. package/dist/server/runtime/http-server/executor-provider.js +55 -0
  204. package/dist/server/runtime/http-server/executor-provider.js.map +1 -1
  205. package/dist/server/runtime/http-server/executor-response.js +49 -1
  206. package/dist/server/runtime/http-server/executor-response.js.map +1 -1
  207. package/dist/server/runtime/http-server/index.d.ts +10 -0
  208. package/dist/server/runtime/http-server/index.js +534 -9
  209. package/dist/server/runtime/http-server/index.js.map +1 -1
  210. package/dist/server/runtime/http-server/managed-process-probe.d.ts +6 -0
  211. package/dist/server/runtime/http-server/managed-process-probe.js +294 -0
  212. package/dist/server/runtime/http-server/managed-process-probe.js.map +1 -0
  213. package/dist/server/runtime/http-server/middleware.js +16 -1
  214. package/dist/server/runtime/http-server/middleware.js.map +1 -1
  215. package/dist/server/runtime/http-server/provider-utils.js +6 -2
  216. package/dist/server/runtime/http-server/provider-utils.js.map +1 -1
  217. package/dist/server/runtime/http-server/request-executor.d.ts +1 -0
  218. package/dist/server/runtime/http-server/request-executor.js +360 -35
  219. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  220. package/dist/server/runtime/http-server/routes.js +95 -3
  221. package/dist/server/runtime/http-server/routes.js.map +1 -1
  222. package/dist/server/runtime/http-server/stats-manager.d.ts +10 -0
  223. package/dist/server/runtime/http-server/stats-manager.js +119 -16
  224. package/dist/server/runtime/http-server/stats-manager.js.map +1 -1
  225. package/dist/server/runtime/http-server/tmux-session-probe.d.ts +3 -0
  226. package/dist/server/runtime/http-server/tmux-session-probe.js +101 -0
  227. package/dist/server/runtime/http-server/tmux-session-probe.js.map +1 -0
  228. package/dist/server/utils/stage-logger.js +21 -5
  229. package/dist/server/utils/stage-logger.js.map +1 -1
  230. package/dist/token-daemon/index.js +59 -10
  231. package/dist/token-daemon/index.js.map +1 -1
  232. package/dist/token-daemon/server-utils.d.ts +1 -0
  233. package/dist/token-daemon/server-utils.js +4 -1
  234. package/dist/token-daemon/server-utils.js.map +1 -1
  235. package/dist/token-daemon/token-daemon.js +38 -4
  236. package/dist/token-daemon/token-daemon.js.map +1 -1
  237. package/dist/token-daemon/token-types.d.ts +1 -1
  238. package/dist/token-daemon/token-types.js +2 -1
  239. package/dist/token-daemon/token-types.js.map +1 -1
  240. package/dist/token-daemon/token-utils.js +5 -2
  241. package/dist/token-daemon/token-utils.js.map +1 -1
  242. package/dist/utils/clock-client-token.d.ts +3 -0
  243. package/dist/utils/clock-client-token.js +54 -0
  244. package/dist/utils/clock-client-token.js.map +1 -0
  245. package/dist/utils/managed-server-pids.d.ts +25 -0
  246. package/dist/utils/managed-server-pids.js +176 -0
  247. package/dist/utils/managed-server-pids.js.map +1 -0
  248. package/dist/utils/process-lifecycle-logger.d.ts +8 -0
  249. package/dist/utils/process-lifecycle-logger.js +151 -0
  250. package/dist/utils/process-lifecycle-logger.js.map +1 -0
  251. package/dist/utils/runtime-exit-forensics.d.ts +30 -0
  252. package/dist/utils/runtime-exit-forensics.js +101 -0
  253. package/dist/utils/runtime-exit-forensics.js.map +1 -0
  254. package/dist/utils/shutdown-caller-context.d.ts +22 -0
  255. package/dist/utils/shutdown-caller-context.js +25 -0
  256. package/dist/utils/shutdown-caller-context.js.map +1 -0
  257. package/docs/PROVIDERS_BUILTIN.md +8 -0
  258. package/docs/PROVIDER_TYPES.md +3 -1
  259. package/docs/SERVERTOOL_PRE_COMMAND_HOOKS.md +85 -0
  260. package/docs/clock-client-daemon-design.md +343 -0
  261. package/docs/daemon-admin-ui.html +948 -74
  262. package/docs/providers/deepseek-web-provider-design.md +192 -0
  263. package/docs/routing-instructions.md +4 -1
  264. package/docs/stop-message-auto.md +4 -3
  265. package/docs/v2-architecture/PROVIDER-V2-CHANGESET-RELEASE-CHECKLIST.md +80 -0
  266. package/docs/v2-architecture/PROVIDER-V2-LAYERING-ADR-DRAFT.md +225 -0
  267. package/docs/v2-architecture/PROVIDER-V2-MIGRATION-MATRIX-DRAFT.md +88 -0
  268. package/docs/v2-architecture/PROVIDER-V2-PHASED-MIGRATION-ROLLBACK-DRAFT.md +164 -0
  269. package/docs/v2-architecture/PROVIDER-V2-PROFILE-API-REGISTRY-DRAFT.md +201 -0
  270. package/docs/v2-architecture/PROVIDER-V2-PROFILE-GEMINI-DRAFT.md +56 -0
  271. package/docs/v2-architecture/PROVIDER-V2-REFACTOR-OVERVIEW-DRAFT.md +102 -0
  272. package/docs/v2-architecture/PROVIDER-V2-VERIFICATION-MATRIX-DRAFT.md +163 -0
  273. package/package.json +10 -9
  274. package/scripts/copy-compat-assets.mjs +18 -0
  275. package/scripts/copy-modules-config.mjs +1 -0
  276. package/scripts/deepseek/pow-solver.mjs +146 -0
  277. package/scripts/deepseek/sha3_wasm_bg.7b9ca65ddd.wasm +0 -0
  278. package/scripts/ensure-cli-executable.mjs +64 -0
  279. package/scripts/install-global.sh +5 -2
  280. package/scripts/install.sh +1 -1
  281. package/scripts/monitor/daemon-kill-watch.mjs +184 -0
  282. package/scripts/monitor/port-kill-watch.sh +74 -0
  283. package/scripts/quick-install.sh +1 -1
@@ -0,0 +1,644 @@
1
+ import { spawn } from 'node:child_process';
2
+ import crypto from 'node:crypto';
3
+ import fs from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import { DEEPSEEK_ERROR_CODES } from '../core/contracts/deepseek-provider-contract.js';
7
+ import { ensureCamoufoxFingerprintForToken, getCamoufoxProfileDir } from '../core/config/camoufox-launcher.js';
8
+ const DEFAULT_AUTH_DIR = path.join(os.homedir(), '.routecodex', 'auth');
9
+ const DEFAULT_DEEPSEEK_LOGIN_URL = 'https://chat.deepseek.com/api/v0/users/login';
10
+ const DEFAULT_DEEPSEEK_USER_AGENT = 'DeepSeek/1.0.13 Android/35';
11
+ const DEFAULT_CAMOUFOX_PROVIDER = 'deepseek';
12
+ const HELPER_TIMEOUT_MS = 45_000;
13
+ const TOKEN_HELPER_ENV_KEYS = ['ROUTECODEX_DEEPSEEK_TOKEN_HELPER', 'RCC_DEEPSEEK_TOKEN_HELPER'];
14
+ const LOGIN_URL_ENV_KEYS = ['ROUTECODEX_DEEPSEEK_LOGIN_URL', 'RCC_DEEPSEEK_LOGIN_URL'];
15
+ const LOGIN_TIMEOUT_ENV_KEYS = ['ROUTECODEX_DEEPSEEK_LOGIN_TIMEOUT_MS', 'RCC_DEEPSEEK_LOGIN_TIMEOUT_MS'];
16
+ function normalizeString(value) {
17
+ if (typeof value !== 'string') {
18
+ return undefined;
19
+ }
20
+ const trimmed = value.trim();
21
+ return trimmed.length ? trimmed : undefined;
22
+ }
23
+ function createDeepSeekAuthError(params) {
24
+ const error = new Error(params.message);
25
+ error.code = params.code;
26
+ if (typeof params.statusCode === 'number') {
27
+ error.statusCode = params.statusCode;
28
+ error.status = params.statusCode;
29
+ }
30
+ if (params.details) {
31
+ error.details = params.details;
32
+ }
33
+ return error;
34
+ }
35
+ function tryParseJson(raw) {
36
+ try {
37
+ return JSON.parse(raw);
38
+ }
39
+ catch {
40
+ return undefined;
41
+ }
42
+ }
43
+ function sanitizeAlias(value) {
44
+ const normalized = value.trim().toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '');
45
+ return normalized || 'default';
46
+ }
47
+ function parseAliasFromTokenFile(tokenFilePath) {
48
+ const base = path.basename(tokenFilePath);
49
+ const match = base.match(/^deepseek-account-(.+)\.json$/i);
50
+ if (match && normalizeString(match[1])) {
51
+ return sanitizeAlias(String(match[1]));
52
+ }
53
+ return 'default';
54
+ }
55
+ function resolveAuthDirFromTokenFile(tokenFilePath) {
56
+ const dir = path.dirname(tokenFilePath);
57
+ if (normalizeString(dir)) {
58
+ return dir;
59
+ }
60
+ return DEFAULT_AUTH_DIR;
61
+ }
62
+ function parseTokenFromUnknown(value) {
63
+ if (Array.isArray(value)) {
64
+ for (const item of value) {
65
+ const nested = parseTokenFromUnknown(item);
66
+ if (nested) {
67
+ return nested;
68
+ }
69
+ }
70
+ return undefined;
71
+ }
72
+ if (typeof value === 'string') {
73
+ const trimmed = value.trim();
74
+ return trimmed.length ? trimmed : undefined;
75
+ }
76
+ if (!value || typeof value !== 'object') {
77
+ return undefined;
78
+ }
79
+ const record = value;
80
+ const direct = normalizeString(record.access_token ??
81
+ record.AccessToken ??
82
+ record.token ??
83
+ record.accessToken ??
84
+ record.api_key ??
85
+ record.apiKey);
86
+ if (direct) {
87
+ return direct;
88
+ }
89
+ const nestedNodes = [
90
+ record.data,
91
+ record.result,
92
+ record.payload,
93
+ record.response,
94
+ record.body,
95
+ record.biz_data,
96
+ record.bizData,
97
+ record.user,
98
+ record.token_data,
99
+ record.tokenData
100
+ ];
101
+ for (const next of nestedNodes) {
102
+ const nested = parseTokenFromUnknown(next);
103
+ if (nested) {
104
+ return nested;
105
+ }
106
+ }
107
+ return undefined;
108
+ }
109
+ function readBooleanLike(value, fallback) {
110
+ if (typeof value === 'boolean') {
111
+ return value;
112
+ }
113
+ if (typeof value === 'string') {
114
+ const normalized = value.trim().toLowerCase();
115
+ if (!normalized) {
116
+ return fallback;
117
+ }
118
+ if (normalized === '1' || normalized === 'true' || normalized === 'yes' || normalized === 'on') {
119
+ return true;
120
+ }
121
+ if (normalized === '0' || normalized === 'false' || normalized === 'no' || normalized === 'off') {
122
+ return false;
123
+ }
124
+ }
125
+ return fallback;
126
+ }
127
+ function readEnvBoolean(keys, fallback) {
128
+ for (const key of keys) {
129
+ const raw = process.env[key];
130
+ if (typeof raw === 'string' && raw.trim()) {
131
+ return readBooleanLike(raw, fallback);
132
+ }
133
+ }
134
+ return fallback;
135
+ }
136
+ function isRecord(value) {
137
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
138
+ }
139
+ function parseCamoufoxConfig(payload) {
140
+ if (!isRecord(payload)) {
141
+ return null;
142
+ }
143
+ const envNode = payload.env;
144
+ if (!isRecord(envNode)) {
145
+ return null;
146
+ }
147
+ const rawConfig = normalizeString(envNode.CAMOU_CONFIG_1);
148
+ if (!rawConfig) {
149
+ return null;
150
+ }
151
+ let parsed;
152
+ try {
153
+ parsed = JSON.parse(rawConfig);
154
+ }
155
+ catch {
156
+ return null;
157
+ }
158
+ if (!isRecord(parsed)) {
159
+ return null;
160
+ }
161
+ return {
162
+ userAgent: normalizeString(parsed['navigator.userAgent']),
163
+ platform: normalizeString(parsed['navigator.platform'])
164
+ };
165
+ }
166
+ function mapPlatformToClientPlatform(platform) {
167
+ const normalized = normalizeString(platform)?.toLowerCase();
168
+ if (!normalized) {
169
+ return undefined;
170
+ }
171
+ if (normalized.includes('win')) {
172
+ return 'windows';
173
+ }
174
+ if (normalized.includes('mac')) {
175
+ return 'macos';
176
+ }
177
+ if (normalized.includes('linux') || normalized.includes('x11')) {
178
+ return 'linux';
179
+ }
180
+ return undefined;
181
+ }
182
+ function shouldUseCamoufoxFingerprintForLogin() {
183
+ return readEnvBoolean([
184
+ 'ROUTECODEX_DEEPSEEK_CAMOUFOX_FINGERPRINT',
185
+ 'RCC_DEEPSEEK_CAMOUFOX_FINGERPRINT'
186
+ ], true);
187
+ }
188
+ function shouldAutoGenerateCamoufoxFingerprintForLogin() {
189
+ return readEnvBoolean([
190
+ 'ROUTECODEX_DEEPSEEK_CAMOUFOX_AUTO_GENERATE',
191
+ 'RCC_DEEPSEEK_CAMOUFOX_AUTO_GENERATE'
192
+ ], true);
193
+ }
194
+ function resolveCamoufoxProviderFamily() {
195
+ return normalizeString(process.env.ROUTECODEX_DEEPSEEK_CAMOUFOX_PROVIDER ||
196
+ process.env.RCC_DEEPSEEK_CAMOUFOX_PROVIDER) || DEFAULT_CAMOUFOX_PROVIDER;
197
+ }
198
+ async function loadCamoufoxFingerprint(providerFamily, alias) {
199
+ if (shouldAutoGenerateCamoufoxFingerprintForLogin()) {
200
+ ensureCamoufoxFingerprintForToken(providerFamily, alias);
201
+ }
202
+ const profileDir = getCamoufoxProfileDir(providerFamily, alias);
203
+ const profileId = path.basename(profileDir);
204
+ if (!profileId) {
205
+ return null;
206
+ }
207
+ const filePath = path.join((process.env.HOME || os.homedir()), '.routecodex', 'camoufox-fp', `${profileId}.json`);
208
+ try {
209
+ const raw = await fs.readFile(filePath, 'utf8');
210
+ const payload = raw.trim() ? JSON.parse(raw) : null;
211
+ return parseCamoufoxConfig(payload);
212
+ }
213
+ catch {
214
+ return null;
215
+ }
216
+ }
217
+ function buildDeepSeekBrowserHeaders(fingerprint) {
218
+ const userAgent = normalizeString(fingerprint?.userAgent) || DEFAULT_DEEPSEEK_USER_AGENT;
219
+ const clientPlatform = mapPlatformToClientPlatform(fingerprint?.platform) || 'android';
220
+ return {
221
+ 'User-Agent': userAgent,
222
+ 'x-client-platform': clientPlatform,
223
+ 'x-client-version': '1.3.0-auto-resume',
224
+ 'x-client-locale': 'zh_CN',
225
+ 'accept-charset': 'UTF-8',
226
+ Origin: 'https://chat.deepseek.com',
227
+ Referer: 'https://chat.deepseek.com/',
228
+ 'Sec-Fetch-Site': 'same-origin',
229
+ 'Sec-Fetch-Mode': 'cors',
230
+ 'Sec-Fetch-Dest': 'empty'
231
+ };
232
+ }
233
+ async function resolveDeepSeekLoginHeaders(alias) {
234
+ if (!shouldUseCamoufoxFingerprintForLogin()) {
235
+ return buildDeepSeekBrowserHeaders(null);
236
+ }
237
+ const providerFamily = resolveCamoufoxProviderFamily();
238
+ const fingerprint = await loadCamoufoxFingerprint(providerFamily, alias);
239
+ return buildDeepSeekBrowserHeaders(fingerprint);
240
+ }
241
+ function pickEnv(keys) {
242
+ for (const key of keys) {
243
+ const value = normalizeString(process.env[key]);
244
+ if (value) {
245
+ return value;
246
+ }
247
+ }
248
+ return undefined;
249
+ }
250
+ function normalizeAliasForEnv(alias) {
251
+ return alias.trim().toUpperCase().replace(/[^A-Z0-9]+/g, '_').replace(/^_+|_+$/g, '') || 'DEFAULT';
252
+ }
253
+ function parseCredentialNode(raw) {
254
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
255
+ return null;
256
+ }
257
+ const node = raw;
258
+ const mobile = normalizeString(node.mobile ?? node.phone ?? node.account ?? node.username);
259
+ const password = normalizeString(node.password ?? node.pass ?? node.secret);
260
+ if (!mobile || !password) {
261
+ return null;
262
+ }
263
+ return { mobile, password };
264
+ }
265
+ async function resolveCredentialFromFile(filePath) {
266
+ try {
267
+ const raw = await fs.readFile(filePath, 'utf8');
268
+ const parsed = tryParseJson(raw);
269
+ return parseCredentialNode(parsed);
270
+ }
271
+ catch {
272
+ return null;
273
+ }
274
+ }
275
+ async function resolveDeepSeekCredential(authDir, alias, tokenFileCredential) {
276
+ if (tokenFileCredential) {
277
+ return tokenFileCredential;
278
+ }
279
+ const aliasEnv = normalizeAliasForEnv(alias);
280
+ const envMobile = normalizeString(process.env[`ROUTECODEX_DEEPSEEK_ACCOUNT_${aliasEnv}_MOBILE`]);
281
+ const envPassword = normalizeString(process.env[`ROUTECODEX_DEEPSEEK_ACCOUNT_${aliasEnv}_PASSWORD`]);
282
+ if (envMobile && envPassword) {
283
+ return { mobile: envMobile, password: envPassword };
284
+ }
285
+ const aliasSpecificFiles = [
286
+ path.join(authDir, `deepseek-account-${alias}.credentials.json`),
287
+ path.join(authDir, `deepseek-account-${alias}.account.json`),
288
+ path.join(authDir, `deepseek-account-${alias}.login.json`)
289
+ ];
290
+ for (const candidate of aliasSpecificFiles) {
291
+ const credential = await resolveCredentialFromFile(candidate);
292
+ if (credential) {
293
+ return credential;
294
+ }
295
+ }
296
+ const indexFilePath = path.join(authDir, 'deepseek-account-credentials.json');
297
+ try {
298
+ const raw = await fs.readFile(indexFilePath, 'utf8');
299
+ const parsed = tryParseJson(raw);
300
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
301
+ const node = parsed;
302
+ const accountsNode = node.accounts;
303
+ if (accountsNode && typeof accountsNode === 'object' && !Array.isArray(accountsNode)) {
304
+ const account = accountsNode[alias];
305
+ const credential = parseCredentialNode(account);
306
+ if (credential) {
307
+ return credential;
308
+ }
309
+ }
310
+ const aliasNode = node[alias];
311
+ const aliasCredential = parseCredentialNode(aliasNode);
312
+ if (aliasCredential) {
313
+ return aliasCredential;
314
+ }
315
+ }
316
+ }
317
+ catch {
318
+ // ignore index file failures
319
+ }
320
+ return null;
321
+ }
322
+ async function readTokenFileSnapshot(tokenFilePath) {
323
+ try {
324
+ const raw = await fs.readFile(tokenFilePath, 'utf8');
325
+ const parsed = tryParseJson(raw);
326
+ if (parsed !== undefined) {
327
+ if (isRecord(parsed)) {
328
+ return {
329
+ token: parseTokenFromUnknown(parsed),
330
+ credential: parseCredentialNode(parsed),
331
+ sourceObject: parsed
332
+ };
333
+ }
334
+ return {
335
+ token: parseTokenFromUnknown(parsed),
336
+ credential: null,
337
+ sourceObject: null
338
+ };
339
+ }
340
+ return {
341
+ token: parseTokenFromUnknown(raw),
342
+ credential: null,
343
+ sourceObject: null
344
+ };
345
+ }
346
+ catch {
347
+ return {
348
+ token: undefined,
349
+ credential: null,
350
+ sourceObject: null
351
+ };
352
+ }
353
+ }
354
+ async function writeTokenFile(params) {
355
+ const nowIso = new Date().toISOString();
356
+ const payload = {
357
+ ...(params.sourceObject || {}),
358
+ access_token: params.token,
359
+ token: params.token,
360
+ account_alias: params.alias,
361
+ ...(params.credential?.mobile ? { mobile: params.credential.mobile } : {}),
362
+ ...(params.credential?.password ? { password: params.credential.password } : {}),
363
+ created_at: normalizeString((params.sourceObject || {}).created_at) ||
364
+ nowIso,
365
+ updated_at: nowIso
366
+ };
367
+ await fs.mkdir(path.dirname(params.tokenFilePath), { recursive: true });
368
+ await fs.writeFile(params.tokenFilePath, JSON.stringify(payload, null, 2) + '\n', {
369
+ encoding: 'utf8',
370
+ mode: 0o600
371
+ });
372
+ }
373
+ function resolveCommandTimeoutMs() {
374
+ const raw = normalizeString(process.env.ROUTECODEX_DEEPSEEK_TOKEN_HELPER_TIMEOUT_MS);
375
+ const parsed = raw ? Number.parseInt(raw, 10) : NaN;
376
+ if (Number.isFinite(parsed) && parsed > 0) {
377
+ return parsed;
378
+ }
379
+ return HELPER_TIMEOUT_MS;
380
+ }
381
+ async function runShellCommand(command, stdin, timeoutMs) {
382
+ return await new Promise((resolve, reject) => {
383
+ const child = spawn('/bin/sh', ['-lc', command], {
384
+ stdio: ['pipe', 'pipe', 'pipe'],
385
+ env: process.env
386
+ });
387
+ let stdout = '';
388
+ let stderr = '';
389
+ const timer = setTimeout(() => {
390
+ try {
391
+ child.kill('SIGKILL');
392
+ }
393
+ catch {
394
+ // ignore
395
+ }
396
+ reject(new Error(`DeepSeek token helper timed out after ${timeoutMs}ms`));
397
+ }, timeoutMs);
398
+ if (typeof timer.unref === 'function') {
399
+ timer.unref();
400
+ }
401
+ child.stdout.on('data', (chunk) => {
402
+ stdout += String(chunk);
403
+ });
404
+ child.stderr.on('data', (chunk) => {
405
+ stderr += String(chunk);
406
+ });
407
+ child.on('error', (error) => {
408
+ clearTimeout(timer);
409
+ reject(error);
410
+ });
411
+ child.on('close', (code) => {
412
+ clearTimeout(timer);
413
+ resolve({
414
+ stdout,
415
+ stderr,
416
+ code: typeof code === 'number' ? code : 1
417
+ });
418
+ });
419
+ child.stdin.end(stdin);
420
+ });
421
+ }
422
+ async function acquireTokenByHelperCommand(input) {
423
+ const payload = {
424
+ provider: 'deepseek-account',
425
+ alias: input.alias,
426
+ tokenFile: input.tokenFilePath,
427
+ reason: input.reason,
428
+ credentials: input.credential ? { ...input.credential } : null
429
+ };
430
+ const output = await runShellCommand(input.command, JSON.stringify(payload) + '\n', resolveCommandTimeoutMs());
431
+ if (output.code !== 0) {
432
+ const stderr = normalizeString(output.stderr) || '(empty stderr)';
433
+ throw new Error(`DeepSeek token helper exited with code ${output.code}: ${stderr}`);
434
+ }
435
+ const stdout = normalizeString(output.stdout);
436
+ if (!stdout) {
437
+ throw new Error('DeepSeek token helper returned empty stdout');
438
+ }
439
+ const parsed = tryParseJson(stdout);
440
+ const token = parseTokenFromUnknown(parsed !== undefined ? parsed : stdout);
441
+ if (!token) {
442
+ throw new Error('DeepSeek token helper output has no token field');
443
+ }
444
+ return token;
445
+ }
446
+ function resolveLoginTimeoutMs() {
447
+ const raw = pickEnv(LOGIN_TIMEOUT_ENV_KEYS);
448
+ const parsed = raw ? Number.parseInt(raw, 10) : NaN;
449
+ if (Number.isFinite(parsed) && parsed > 0) {
450
+ return parsed;
451
+ }
452
+ return 15_000;
453
+ }
454
+ async function acquireTokenByHttpLogin(input) {
455
+ const timeoutMs = resolveLoginTimeoutMs();
456
+ const controller = new AbortController();
457
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
458
+ const loginHeaders = await resolveDeepSeekLoginHeaders(input.alias);
459
+ if (typeof timer.unref === 'function') {
460
+ timer.unref();
461
+ }
462
+ const deviceId = crypto.randomUUID();
463
+ const payloadCandidates = [
464
+ {
465
+ mobile: input.credential.mobile,
466
+ password: input.credential.password,
467
+ device_id: deviceId,
468
+ os: 'android'
469
+ },
470
+ {
471
+ mobile: input.credential.mobile,
472
+ password: input.credential.password,
473
+ phone: input.credential.mobile,
474
+ username: input.credential.mobile,
475
+ account: input.credential.mobile,
476
+ device_id: deviceId,
477
+ os: 'android'
478
+ },
479
+ {
480
+ mobile: input.credential.mobile,
481
+ password: input.credential.password,
482
+ phone: input.credential.mobile,
483
+ username: input.credential.mobile,
484
+ account: input.credential.mobile,
485
+ client_id: deviceId,
486
+ device_id: deviceId,
487
+ os: 'android',
488
+ area_code: '86'
489
+ }
490
+ ];
491
+ try {
492
+ let lastMessage = '';
493
+ for (const payload of payloadCandidates) {
494
+ const response = await fetch(input.loginUrl, {
495
+ method: 'POST',
496
+ headers: {
497
+ ...loginHeaders,
498
+ 'content-type': 'application/json',
499
+ accept: 'application/json, text/plain, */*'
500
+ },
501
+ body: JSON.stringify(payload),
502
+ signal: controller.signal
503
+ });
504
+ const raw = await response.text();
505
+ const parsed = tryParseJson(raw);
506
+ const token = parseTokenFromUnknown(parsed !== undefined ? parsed : raw);
507
+ if (token) {
508
+ return token;
509
+ }
510
+ const bizMessage = normalizeString(parsed && typeof parsed === 'object' && !Array.isArray(parsed)
511
+ ? (parsed.data &&
512
+ typeof parsed.data === 'object' &&
513
+ !Array.isArray(parsed.data)
514
+ ? parsed.data.biz_msg
515
+ : undefined)
516
+ : undefined);
517
+ const responseMessage = normalizeString(parsed && typeof parsed === 'object' && !Array.isArray(parsed)
518
+ ? parsed.message ??
519
+ parsed.msg ??
520
+ parsed.error
521
+ : undefined);
522
+ lastMessage = bizMessage || responseMessage || `status=${response.status}`;
523
+ if (response.status >= 400 && response.status < 500) {
524
+ break;
525
+ }
526
+ }
527
+ throw new Error(lastMessage || 'DeepSeek HTTP login returned no token');
528
+ }
529
+ finally {
530
+ clearTimeout(timer);
531
+ }
532
+ }
533
+ export async function ensureDeepSeekAccountToken(options) {
534
+ const tokenFilePath = path.resolve(options.tokenFilePath);
535
+ const accountAlias = sanitizeAlias(options.accountAlias || parseAliasFromTokenFile(tokenFilePath));
536
+ const reason = options.reason || 'initialize';
537
+ const authDir = resolveAuthDirFromTokenFile(tokenFilePath);
538
+ const tokenFileSnapshot = await readTokenFileSnapshot(tokenFilePath);
539
+ if (!options.forceAcquire) {
540
+ const existing = tokenFileSnapshot.token;
541
+ if (existing) {
542
+ return {
543
+ token: existing,
544
+ tokenFilePath,
545
+ accountAlias,
546
+ acquired: false,
547
+ source: 'token-file'
548
+ };
549
+ }
550
+ }
551
+ const credential = await resolveDeepSeekCredential(authDir, accountAlias, tokenFileSnapshot.credential);
552
+ const helperCommand = pickEnv(TOKEN_HELPER_ENV_KEYS);
553
+ if (helperCommand) {
554
+ let token;
555
+ try {
556
+ token = await acquireTokenByHelperCommand({
557
+ command: helperCommand,
558
+ alias: accountAlias,
559
+ tokenFilePath,
560
+ credential,
561
+ reason
562
+ });
563
+ }
564
+ catch (error) {
565
+ const message = error instanceof Error ? error.message : String(error);
566
+ throw createDeepSeekAuthError({
567
+ code: DEEPSEEK_ERROR_CODES.AUTH_INVALID,
568
+ statusCode: 401,
569
+ message: `DeepSeek token helper acquire failed for alias=${accountAlias}: ${message}`,
570
+ details: {
571
+ tokenFile: tokenFilePath,
572
+ accountAlias,
573
+ reason
574
+ }
575
+ });
576
+ }
577
+ await writeTokenFile({
578
+ tokenFilePath,
579
+ token,
580
+ alias: accountAlias,
581
+ credential,
582
+ sourceObject: tokenFileSnapshot.sourceObject
583
+ });
584
+ return {
585
+ token,
586
+ tokenFilePath,
587
+ accountAlias,
588
+ acquired: true,
589
+ source: 'helper-command'
590
+ };
591
+ }
592
+ const loginUrl = pickEnv(LOGIN_URL_ENV_KEYS) || DEFAULT_DEEPSEEK_LOGIN_URL;
593
+ if (loginUrl && credential) {
594
+ let token;
595
+ try {
596
+ token = await acquireTokenByHttpLogin({
597
+ loginUrl,
598
+ alias: accountAlias,
599
+ credential
600
+ });
601
+ }
602
+ catch (error) {
603
+ const message = error instanceof Error ? error.message : String(error);
604
+ throw createDeepSeekAuthError({
605
+ code: DEEPSEEK_ERROR_CODES.AUTH_INVALID,
606
+ statusCode: 401,
607
+ message: `DeepSeek login failed for alias=${accountAlias}: ${message}`,
608
+ details: {
609
+ tokenFile: tokenFilePath,
610
+ accountAlias,
611
+ reason,
612
+ loginUrl
613
+ }
614
+ });
615
+ }
616
+ await writeTokenFile({
617
+ tokenFilePath,
618
+ token,
619
+ alias: accountAlias,
620
+ credential,
621
+ sourceObject: tokenFileSnapshot.sourceObject
622
+ });
623
+ return {
624
+ token,
625
+ tokenFilePath,
626
+ accountAlias,
627
+ acquired: true,
628
+ source: 'http-login'
629
+ };
630
+ }
631
+ throw createDeepSeekAuthError({
632
+ code: DEEPSEEK_ERROR_CODES.AUTH_MISSING,
633
+ statusCode: 401,
634
+ message: `DeepSeek token is missing and auto-acquire is not configured for alias=${accountAlias}. ` +
635
+ `Set ${TOKEN_HELPER_ENV_KEYS.join('/')} or provide ${LOGIN_URL_ENV_KEYS.join('/')} ` +
636
+ `plus mobile/password in tokenFile or credential file under ${authDir}/deepseek-account-${accountAlias}.credentials.json`,
637
+ details: {
638
+ tokenFile: tokenFilePath,
639
+ accountAlias,
640
+ authDir
641
+ }
642
+ });
643
+ }
644
+ //# sourceMappingURL=deepseek-account-token-acquirer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek-account-token-acquirer.js","sourceRoot":"","sources":["../../../src/providers/auth/deepseek-account-token-acquirer.ts"],"names":[],"mappings":"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"}