@jsonstudio/rcc 0.89.682 → 0.89.873

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 (191) hide show
  1. package/dist/build-info.js +2 -2
  2. package/dist/cli.js +164 -116
  3. package/dist/cli.js.map +1 -1
  4. package/dist/client/anthropic/anthropic-protocol-client.js +42 -1
  5. package/dist/client/anthropic/anthropic-protocol-client.js.map +1 -1
  6. package/dist/client/gemini-cli/gemini-cli-protocol-client.js +4 -1
  7. package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -1
  8. package/dist/commands/camoufox-backfill.d.ts +2 -0
  9. package/dist/commands/camoufox-backfill.js +33 -0
  10. package/dist/commands/camoufox-backfill.js.map +1 -0
  11. package/dist/commands/camoufox-fp.d.ts +2 -0
  12. package/dist/commands/camoufox-fp.js +86 -0
  13. package/dist/commands/camoufox-fp.js.map +1 -0
  14. package/dist/commands/oauth.d.ts +2 -0
  15. package/dist/commands/oauth.js +170 -0
  16. package/dist/commands/oauth.js.map +1 -0
  17. package/dist/commands/provider-update.js +439 -2
  18. package/dist/commands/provider-update.js.map +1 -1
  19. package/dist/commands/quota-status.d.ts +2 -0
  20. package/dist/commands/quota-status.js +80 -0
  21. package/dist/commands/quota-status.js.map +1 -0
  22. package/dist/commands/token-daemon.js +12 -1
  23. package/dist/commands/token-daemon.js.map +1 -1
  24. package/dist/config/provider-v2-loader.d.ts +16 -0
  25. package/dist/config/provider-v2-loader.js +84 -0
  26. package/dist/config/provider-v2-loader.js.map +1 -0
  27. package/dist/config/routecodex-config-loader.js +27 -4
  28. package/dist/config/routecodex-config-loader.js.map +1 -1
  29. package/dist/config/system-prompts/codex-cli.txt +1 -0
  30. package/dist/config/virtual-router-builder.d.ts +9 -0
  31. package/dist/config/virtual-router-builder.js +34 -0
  32. package/dist/config/virtual-router-builder.js.map +1 -0
  33. package/dist/config/virtual-router-types.d.ts +25 -0
  34. package/dist/config/virtual-router-types.js +30 -0
  35. package/dist/config/virtual-router-types.js.map +1 -0
  36. package/dist/manager/index.d.ts +10 -0
  37. package/dist/manager/index.js +27 -0
  38. package/dist/manager/index.js.map +1 -0
  39. package/dist/manager/modules/health/index.d.ts +22 -0
  40. package/dist/manager/modules/health/index.js +82 -0
  41. package/dist/manager/modules/health/index.js.map +1 -0
  42. package/dist/manager/modules/quota/index.d.ts +57 -0
  43. package/dist/manager/modules/quota/index.js +426 -0
  44. package/dist/manager/modules/quota/index.js.map +1 -0
  45. package/dist/manager/modules/routing/index.d.ts +17 -0
  46. package/dist/manager/modules/routing/index.js +61 -0
  47. package/dist/manager/modules/routing/index.js.map +1 -0
  48. package/dist/manager/modules/token/index.d.ts +10 -0
  49. package/dist/manager/modules/token/index.js +58 -0
  50. package/dist/manager/modules/token/index.js.map +1 -0
  51. package/dist/manager/storage/base-store.d.ts +6 -0
  52. package/dist/manager/storage/base-store.js +2 -0
  53. package/dist/manager/storage/base-store.js.map +1 -0
  54. package/dist/manager/storage/file-store.d.ts +25 -0
  55. package/dist/manager/storage/file-store.js +117 -0
  56. package/dist/manager/storage/file-store.js.map +1 -0
  57. package/dist/manager/types.d.ts +9 -0
  58. package/dist/manager/types.js +2 -0
  59. package/dist/manager/types.js.map +1 -0
  60. package/dist/message-center/index.d.ts +5 -0
  61. package/dist/message-center/index.js +6 -0
  62. package/dist/message-center/index.js.map +1 -0
  63. package/dist/message-center/message-center.d.ts +93 -0
  64. package/dist/message-center/message-center.js +189 -0
  65. package/dist/message-center/message-center.js.map +1 -0
  66. package/dist/providers/auth/antigravity-userinfo-helper.d.ts +2 -0
  67. package/dist/providers/auth/antigravity-userinfo-helper.js +102 -0
  68. package/dist/providers/auth/antigravity-userinfo-helper.js.map +1 -1
  69. package/dist/providers/auth/iflow-cookie-auth.d.ts +27 -0
  70. package/dist/providers/auth/iflow-cookie-auth.js +209 -0
  71. package/dist/providers/auth/iflow-cookie-auth.js.map +1 -0
  72. package/dist/providers/auth/oauth-lifecycle.js +29 -22
  73. package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
  74. package/dist/providers/auth/token-scanner/index.js +16 -1
  75. package/dist/providers/auth/token-scanner/index.js.map +1 -1
  76. package/dist/providers/core/config/camoufox-launcher.d.ts +16 -0
  77. package/dist/providers/core/config/camoufox-launcher.js +314 -0
  78. package/dist/providers/core/config/camoufox-launcher.js.map +1 -0
  79. package/dist/providers/core/config/oauth-flows.d.ts +9 -0
  80. package/dist/providers/core/config/oauth-flows.js +50 -19
  81. package/dist/providers/core/config/oauth-flows.js.map +1 -1
  82. package/dist/providers/core/config/provider-oauth-configs.d.ts +6 -0
  83. package/dist/providers/core/config/provider-oauth-configs.js +12 -0
  84. package/dist/providers/core/config/provider-oauth-configs.js.map +1 -1
  85. package/dist/providers/core/config/service-profiles.js +26 -3
  86. package/dist/providers/core/config/service-profiles.js.map +1 -1
  87. package/dist/providers/core/runtime/antigravity-quota-client.d.ts +10 -0
  88. package/dist/providers/core/runtime/antigravity-quota-client.js +88 -0
  89. package/dist/providers/core/runtime/antigravity-quota-client.js.map +1 -0
  90. package/dist/providers/core/runtime/base-provider.d.ts +2 -1
  91. package/dist/providers/core/runtime/base-provider.js +93 -34
  92. package/dist/providers/core/runtime/base-provider.js.map +1 -1
  93. package/dist/providers/core/runtime/gemini-cli-http-provider.js +42 -10
  94. package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -1
  95. package/dist/providers/core/runtime/http-request-executor.js +24 -0
  96. package/dist/providers/core/runtime/http-request-executor.js.map +1 -1
  97. package/dist/providers/core/runtime/http-transport-provider.d.ts +0 -3
  98. package/dist/providers/core/runtime/http-transport-provider.js +32 -136
  99. package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
  100. package/dist/providers/core/runtime/provider-error-classifier.js +18 -10
  101. package/dist/providers/core/runtime/provider-error-classifier.js.map +1 -1
  102. package/dist/providers/core/runtime/rate-limit-manager.d.ts +6 -0
  103. package/dist/providers/core/runtime/rate-limit-manager.js +23 -0
  104. package/dist/providers/core/runtime/rate-limit-manager.js.map +1 -1
  105. package/dist/providers/core/strategies/oauth-auth-code-flow.d.ts +1 -0
  106. package/dist/providers/core/strategies/oauth-auth-code-flow.js +3 -2
  107. package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
  108. package/dist/providers/core/strategies/oauth-device-flow.d.ts +1 -0
  109. package/dist/providers/core/strategies/oauth-device-flow.js +3 -2
  110. package/dist/providers/core/strategies/oauth-device-flow.js.map +1 -1
  111. package/dist/providers/core/strategies/oauth-hybrid-flow.d.ts +1 -0
  112. package/dist/providers/core/strategies/oauth-hybrid-flow.js +3 -2
  113. package/dist/providers/core/strategies/oauth-hybrid-flow.js.map +1 -1
  114. package/dist/providers/core/utils/http-client.js +43 -1
  115. package/dist/providers/core/utils/http-client.js.map +1 -1
  116. package/dist/providers/mock/mock-provider-runtime.js +4 -4
  117. package/dist/providers/mock/mock-provider-runtime.js.map +1 -1
  118. package/dist/providers/profile/provider-profile-loader.js +13 -1
  119. package/dist/providers/profile/provider-profile-loader.js.map +1 -1
  120. package/dist/providers/profile/provider-profile.d.ts +5 -0
  121. package/dist/scripts/camoufox/gen-fingerprint-env.py +171 -0
  122. package/dist/scripts/camoufox/launch-auth.mjs +617 -0
  123. package/dist/server/runtime/http-server/executor-provider.d.ts +1 -0
  124. package/dist/server/runtime/http-server/executor-provider.js +26 -0
  125. package/dist/server/runtime/http-server/executor-provider.js.map +1 -1
  126. package/dist/server/runtime/http-server/executor-response.d.ts +16 -0
  127. package/dist/server/runtime/http-server/executor-response.js +164 -0
  128. package/dist/server/runtime/http-server/executor-response.js.map +1 -0
  129. package/dist/server/runtime/http-server/index.d.ts +1 -0
  130. package/dist/server/runtime/http-server/index.js +88 -53
  131. package/dist/server/runtime/http-server/index.js.map +1 -1
  132. package/dist/server/runtime/http-server/request-executor.js +5 -19
  133. package/dist/server/runtime/http-server/request-executor.js.map +1 -1
  134. package/dist/server/runtime/http-server/routes.d.ts +2 -0
  135. package/dist/server/runtime/http-server/routes.js +33 -1
  136. package/dist/server/runtime/http-server/routes.js.map +1 -1
  137. package/dist/server/runtime/http-server/types.d.ts +1 -0
  138. package/dist/server/utils/client-connection-state.d.ts +8 -0
  139. package/dist/server/utils/client-connection-state.js +52 -0
  140. package/dist/server/utils/client-connection-state.js.map +1 -0
  141. package/dist/server/utils/request-id-manager.js +21 -3
  142. package/dist/server/utils/request-id-manager.js.map +1 -1
  143. package/dist/token-daemon/history-store.d.ts +2 -0
  144. package/dist/token-daemon/history-store.js +6 -2
  145. package/dist/token-daemon/history-store.js.map +1 -1
  146. package/dist/token-daemon/index.js +36 -5
  147. package/dist/token-daemon/index.js.map +1 -1
  148. package/dist/token-daemon/leader-lock.d.ts +11 -0
  149. package/dist/token-daemon/leader-lock.js +79 -0
  150. package/dist/token-daemon/leader-lock.js.map +1 -0
  151. package/dist/token-daemon/message-bus-integrator.d.ts +98 -0
  152. package/dist/token-daemon/message-bus-integrator.js +144 -0
  153. package/dist/token-daemon/message-bus-integrator.js.map +1 -0
  154. package/dist/token-daemon/provider-registry.d.ts +22 -0
  155. package/dist/token-daemon/provider-registry.js +201 -0
  156. package/dist/token-daemon/provider-registry.js.map +1 -0
  157. package/dist/token-daemon/token-daemon.d.ts +8 -0
  158. package/dist/token-daemon/token-daemon.js +196 -11
  159. package/dist/token-daemon/token-daemon.js.map +1 -1
  160. package/dist/token-portal/local-token-portal.d.ts +1 -0
  161. package/dist/token-portal/local-token-portal.js +18 -0
  162. package/dist/token-portal/local-token-portal.js.map +1 -1
  163. package/dist/token-portal/render.js +1 -0
  164. package/dist/token-portal/render.js.map +1 -1
  165. package/dist/tools/error-log.d.ts +31 -0
  166. package/dist/tools/error-log.js +117 -0
  167. package/dist/tools/error-log.js.map +1 -0
  168. package/dist/tools/stats-request-events.d.ts +2 -0
  169. package/dist/tools/stats-request-events.js +16 -0
  170. package/dist/tools/stats-request-events.js.map +1 -0
  171. package/dist/tools/stats-usage.d.ts +31 -0
  172. package/dist/tools/stats-usage.js +206 -0
  173. package/dist/tools/stats-usage.js.map +1 -0
  174. package/package.json +8 -4
  175. package/scripts/analyze-codex-error-failures.mjs +109 -0
  176. package/scripts/camoufox/gen-fingerprint-env.py +171 -0
  177. package/scripts/camoufox/launch-auth.mjs +617 -0
  178. package/scripts/classify-codex-samples.mjs +251 -0
  179. package/scripts/cleanup-codex-error-samples.mjs +88 -0
  180. package/scripts/compare-codex-rccx.mjs +268 -0
  181. package/scripts/copy-compat-assets.mjs +18 -0
  182. package/scripts/install-release.sh +1 -1
  183. package/scripts/local-replay-openai-response.mjs +1 -2
  184. package/scripts/pack-mode.mjs +16 -6
  185. package/scripts/replay-codex-sample.mjs +24 -2
  186. package/scripts/responses-compare-server.mjs +119 -0
  187. package/scripts/verify-apply-patch.mjs +28 -17
  188. package/scripts/verify-codex-error-samples.mjs +99 -0
  189. package/scripts/verify-e2e-toolcall.mjs +19 -4
  190. package/scripts/virtual-router-shadow-v2-real.mjs +143 -0
  191. package/scripts/virtual-router-shadow-v2.mjs +122 -0
@@ -0,0 +1,79 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { homedir } from 'os';
4
+ const STATE_DIR = path.join(homedir(), '.routecodex', 'state', 'token-manager');
5
+ const LEADER_FILE = path.join(STATE_DIR, 'leader.json');
6
+ export function getTokenManagerLeaderFilePath() {
7
+ return LEADER_FILE;
8
+ }
9
+ export async function tryAcquireTokenManagerLeader(ownerId) {
10
+ await ensureStateDir();
11
+ const existing = await readCurrentLeader();
12
+ if (existing && (await isPidAlive(existing.pid))) {
13
+ return { isLeader: false, leader: existing };
14
+ }
15
+ const info = {
16
+ ownerId,
17
+ pid: process.pid,
18
+ startedAt: Date.now()
19
+ };
20
+ try {
21
+ const payload = JSON.stringify(info, null, 2);
22
+ await fs.writeFile(LEADER_FILE, payload, 'utf8');
23
+ return { isLeader: true, leader: info };
24
+ }
25
+ catch {
26
+ // Possible race: another process became leader in the meantime.
27
+ const after = await readCurrentLeader();
28
+ if (after && (await isPidAlive(after.pid))) {
29
+ return { isLeader: false, leader: after };
30
+ }
31
+ return { isLeader: false };
32
+ }
33
+ }
34
+ export async function releaseTokenManagerLeader(ownerId) {
35
+ try {
36
+ const existing = await readCurrentLeader();
37
+ if (!existing || existing.ownerId !== ownerId || existing.pid !== process.pid) {
38
+ return;
39
+ }
40
+ await fs.unlink(LEADER_FILE);
41
+ }
42
+ catch {
43
+ // Best-effort cleanup; ignore failures.
44
+ }
45
+ }
46
+ async function ensureStateDir() {
47
+ try {
48
+ await fs.mkdir(STATE_DIR, { recursive: true });
49
+ }
50
+ catch {
51
+ // ignore mkdir failures; subsequent file ops will surface real errors
52
+ }
53
+ }
54
+ async function readCurrentLeader() {
55
+ try {
56
+ const raw = await fs.readFile(LEADER_FILE, 'utf8');
57
+ const parsed = JSON.parse(raw);
58
+ if (!parsed || typeof parsed.pid !== 'number' || !Number.isFinite(parsed.pid)) {
59
+ return null;
60
+ }
61
+ return parsed;
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ async function isPidAlive(pid) {
68
+ if (!Number.isFinite(pid) || pid <= 0) {
69
+ return false;
70
+ }
71
+ try {
72
+ process.kill(pid, 0);
73
+ return true;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ //# sourceMappingURL=leader-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leader-lock.js","sourceRoot":"","sources":["../../src/token-daemon/leader-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import type { MessageCenter } from '../message-center/index.js';
2
+ import type { TokenDescriptor } from './token-types.js';
3
+ /**
4
+ * Token Daemon 事件类型定义
5
+ */
6
+ export type TokenDaemonEventType = 'token:refreshed' | 'token:expired' | 'token:refresh-failed' | 'token:auto-suspended';
7
+ /**
8
+ * Token 刷新成功事件
9
+ */
10
+ export interface TokenRefreshedEvent {
11
+ provider: string;
12
+ alias: string;
13
+ filePath: string;
14
+ displayName: string;
15
+ timestamp: number;
16
+ mode: 'auto' | 'manual';
17
+ }
18
+ /**
19
+ * Token 过期事件
20
+ */
21
+ export interface TokenExpiredEvent {
22
+ provider: string;
23
+ alias: string;
24
+ filePath: string;
25
+ displayName: string;
26
+ expiresAt: number | null;
27
+ timestamp: number;
28
+ }
29
+ /**
30
+ * Token 刷新失败事件
31
+ */
32
+ export interface TokenRefreshFailedEvent {
33
+ provider: string;
34
+ alias: string;
35
+ filePath: string;
36
+ displayName: string;
37
+ error: string;
38
+ timestamp: number;
39
+ mode: 'auto' | 'manual';
40
+ }
41
+ /**
42
+ * Token 自动暂停事件
43
+ */
44
+ export interface TokenAutoSuspendedEvent {
45
+ provider: string;
46
+ alias: string;
47
+ filePath: string;
48
+ displayName: string;
49
+ failureStreak: number;
50
+ suspendedAt: number;
51
+ timestamp: number;
52
+ }
53
+ export type TokenDaemonEventData = TokenRefreshedEvent | TokenExpiredEvent | TokenRefreshFailedEvent | TokenAutoSuspendedEvent;
54
+ /**
55
+ * Token Daemon 消息总线集成器
56
+ * 负责将 Token Daemon 的事件发布到系统 MessageCenter
57
+ */
58
+ export declare class TokenDaemonMessageBus {
59
+ private messageCenter;
60
+ private enabled;
61
+ private subscriptions;
62
+ /**
63
+ * 附加到 MessageCenter
64
+ */
65
+ attach(messageCenter: MessageCenter): void;
66
+ /**
67
+ * 从 MessageCenter 分离
68
+ */
69
+ detach(): void;
70
+ /**
71
+ * 订阅指定主题,返回订阅 ID
72
+ */
73
+ subscribe(topic: string, handler: (data: unknown) => void): string;
74
+ /**
75
+ * 取消订阅
76
+ */
77
+ unsubscribe(subscriptionId: string): void;
78
+ /**
79
+ * 发布 token 刷新成功事件
80
+ */
81
+ notifyTokenRefreshed(token: TokenDescriptor, mode: 'auto' | 'manual'): void;
82
+ /**
83
+ * 发布 token 过期事件
84
+ */
85
+ notifyTokenExpired(token: TokenDescriptor): void;
86
+ /**
87
+ * 发布 token 刷新失败事件
88
+ */
89
+ notifyTokenRefreshFailed(token: TokenDescriptor, error: string | Error, mode: 'auto' | 'manual'): void;
90
+ /**
91
+ * 发布 token 自动暂停事件
92
+ */
93
+ notifyTokenAutoSuspended(token: TokenDescriptor, failureStreak: number, suspendedAt: number): void;
94
+ /**
95
+ * 获取当前状态
96
+ */
97
+ get isEnabled(): boolean;
98
+ }
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Token Daemon 消息总线集成器
3
+ * 负责将 Token Daemon 的事件发布到系统 MessageCenter
4
+ */
5
+ export class TokenDaemonMessageBus {
6
+ messageCenter = null;
7
+ enabled = false;
8
+ subscriptions = new Set();
9
+ /**
10
+ * 附加到 MessageCenter
11
+ */
12
+ attach(messageCenter) {
13
+ this.messageCenter = messageCenter;
14
+ this.enabled = true;
15
+ }
16
+ /**
17
+ * 从 MessageCenter 分离
18
+ */
19
+ detach() {
20
+ if (this.messageCenter && this.subscriptions.size) {
21
+ for (const id of this.subscriptions) {
22
+ try {
23
+ this.messageCenter.unsubscribe(id);
24
+ }
25
+ catch {
26
+ /* best-effort */
27
+ }
28
+ }
29
+ }
30
+ this.subscriptions.clear();
31
+ this.messageCenter = null;
32
+ this.enabled = false;
33
+ }
34
+ /**
35
+ * 订阅指定主题,返回订阅 ID
36
+ */
37
+ subscribe(topic, handler) {
38
+ if (!this.enabled || !this.messageCenter) {
39
+ return '';
40
+ }
41
+ const id = this.messageCenter.subscribe(topic, (message) => {
42
+ try {
43
+ handler(message);
44
+ }
45
+ catch {
46
+ /* best-effort */
47
+ }
48
+ });
49
+ this.subscriptions.add(id);
50
+ return id;
51
+ }
52
+ /**
53
+ * 取消订阅
54
+ */
55
+ unsubscribe(subscriptionId) {
56
+ if (!this.messageCenter || !subscriptionId) {
57
+ return;
58
+ }
59
+ try {
60
+ this.messageCenter.unsubscribe(subscriptionId);
61
+ }
62
+ catch {
63
+ /* best-effort */
64
+ }
65
+ this.subscriptions.delete(subscriptionId);
66
+ }
67
+ /**
68
+ * 发布 token 刷新成功事件
69
+ */
70
+ notifyTokenRefreshed(token, mode) {
71
+ if (!this.enabled || !this.messageCenter) {
72
+ return;
73
+ }
74
+ const event = {
75
+ provider: token.provider,
76
+ alias: token.alias,
77
+ filePath: token.filePath,
78
+ displayName: token.displayName,
79
+ timestamp: Date.now(),
80
+ mode
81
+ };
82
+ this.messageCenter.publish('token:refreshed', event);
83
+ }
84
+ /**
85
+ * 发布 token 过期事件
86
+ */
87
+ notifyTokenExpired(token) {
88
+ if (!this.enabled || !this.messageCenter) {
89
+ return;
90
+ }
91
+ const event = {
92
+ provider: token.provider,
93
+ alias: token.alias,
94
+ filePath: token.filePath,
95
+ displayName: token.displayName,
96
+ expiresAt: token.state.expiresAt,
97
+ timestamp: Date.now()
98
+ };
99
+ this.messageCenter.publish('token:expired', event);
100
+ }
101
+ /**
102
+ * 发布 token 刷新失败事件
103
+ */
104
+ notifyTokenRefreshFailed(token, error, mode) {
105
+ if (!this.enabled || !this.messageCenter) {
106
+ return;
107
+ }
108
+ const event = {
109
+ provider: token.provider,
110
+ alias: token.alias,
111
+ filePath: token.filePath,
112
+ displayName: token.displayName,
113
+ error: error instanceof Error ? error.message : String(error),
114
+ timestamp: Date.now(),
115
+ mode
116
+ };
117
+ this.messageCenter.publish('token:refresh-failed', event);
118
+ }
119
+ /**
120
+ * 发布 token 自动暂停事件
121
+ */
122
+ notifyTokenAutoSuspended(token, failureStreak, suspendedAt) {
123
+ if (!this.enabled || !this.messageCenter) {
124
+ return;
125
+ }
126
+ const event = {
127
+ provider: token.provider,
128
+ alias: token.alias,
129
+ filePath: token.filePath,
130
+ displayName: token.displayName,
131
+ failureStreak,
132
+ suspendedAt,
133
+ timestamp: Date.now()
134
+ };
135
+ this.messageCenter.publish('token:auto-suspended', event);
136
+ }
137
+ /**
138
+ * 获取当前状态
139
+ */
140
+ get isEnabled() {
141
+ return this.enabled && this.messageCenter !== null;
142
+ }
143
+ }
144
+ //# sourceMappingURL=message-bus-integrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-bus-integrator.js","sourceRoot":"","sources":["../../src/token-daemon/message-bus-integrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { OAuthProviderId } from './token-types.js';
2
+ export declare class DynamicProviderRegistry {
3
+ private providers;
4
+ private configPath;
5
+ private lastLoadedAt;
6
+ private loadPromise;
7
+ listProviders(): Promise<OAuthProviderId[]>;
8
+ reload(): Promise<{
9
+ providers: OAuthProviderId[];
10
+ changed: boolean;
11
+ }>;
12
+ getConfigPath(): string | null;
13
+ private loadFromConfig;
14
+ private extractProviders;
15
+ private collectProviderIds;
16
+ private collectFromEntries;
17
+ private parseTypeCandidate;
18
+ private areArraysEqual;
19
+ private asRecord;
20
+ private readString;
21
+ }
22
+ export declare function getDynamicProviderRegistry(): DynamicProviderRegistry;
@@ -0,0 +1,201 @@
1
+ import fs from 'fs/promises';
2
+ import { loadRouteCodexConfig } from '../config/routecodex-config-loader.js';
3
+ const DEFAULT_OAUTH_PROVIDERS = ['iflow', 'qwen', 'gemini-cli', 'antigravity'];
4
+ export class DynamicProviderRegistry {
5
+ providers = [...DEFAULT_OAUTH_PROVIDERS];
6
+ configPath = null;
7
+ lastLoadedAt = 0;
8
+ loadPromise = null;
9
+ async listProviders() {
10
+ if (!this.lastLoadedAt && !this.loadPromise) {
11
+ await this.reload();
12
+ }
13
+ else if (this.loadPromise) {
14
+ await this.loadPromise;
15
+ }
16
+ return this.providers;
17
+ }
18
+ async reload() {
19
+ if (this.loadPromise) {
20
+ return this.loadPromise;
21
+ }
22
+ this.loadPromise = this.loadFromConfig().finally(() => {
23
+ this.loadPromise = null;
24
+ });
25
+ return this.loadPromise;
26
+ }
27
+ getConfigPath() {
28
+ return this.configPath;
29
+ }
30
+ async loadFromConfig() {
31
+ let changed = false;
32
+ try {
33
+ const { userConfig, configPath } = await loadRouteCodexConfig();
34
+ this.configPath = configPath;
35
+ const resolved = this.extractProviders(userConfig);
36
+ const nextProviders = resolved.length ? resolved : [...DEFAULT_OAUTH_PROVIDERS];
37
+ changed = !this.areArraysEqual(nextProviders, this.providers);
38
+ if (changed || !this.providers.length) {
39
+ this.providers = nextProviders;
40
+ }
41
+ this.lastLoadedAt = Date.now();
42
+ }
43
+ catch {
44
+ if (!this.providers.length) {
45
+ this.providers = [...DEFAULT_OAUTH_PROVIDERS];
46
+ changed = true;
47
+ }
48
+ }
49
+ return { providers: this.providers, changed };
50
+ }
51
+ extractProviders(config) {
52
+ const result = [];
53
+ const seen = new Set();
54
+ const virtualRouter = this.asRecord(config.virtualrouter ?? config.virtualRouter);
55
+ const providersNode = this.asRecord(virtualRouter?.providers);
56
+ if (!providersNode) {
57
+ return result;
58
+ }
59
+ for (const raw of Object.values(providersNode)) {
60
+ const provider = this.asRecord(raw);
61
+ if (!provider) {
62
+ continue;
63
+ }
64
+ const authNode = this.asRecord(provider.auth);
65
+ if (!authNode) {
66
+ continue;
67
+ }
68
+ const providerIds = this.collectProviderIds(provider, authNode);
69
+ for (const providerId of providerIds) {
70
+ if (!seen.has(providerId)) {
71
+ seen.add(providerId);
72
+ result.push(providerId);
73
+ }
74
+ }
75
+ }
76
+ return result;
77
+ }
78
+ collectProviderIds(providerNode, authNode) {
79
+ const bucket = [];
80
+ const direct = this.readString(authNode.oauthProviderId ??
81
+ providerNode.oauthProviderId);
82
+ if (direct) {
83
+ bucket.push(direct.toLowerCase());
84
+ }
85
+ const oauthNode = this.asRecord(authNode.oauth);
86
+ const typeCandidates = [
87
+ this.readString(authNode.type),
88
+ this.readString(authNode.rawType),
89
+ this.readString(providerNode.authType),
90
+ this.readString(providerNode.providerType),
91
+ this.readString(oauthNode?.type),
92
+ this.readString(oauthNode?.rawType)
93
+ ];
94
+ for (const candidate of typeCandidates) {
95
+ const parsed = this.parseTypeCandidate(candidate);
96
+ if (parsed) {
97
+ bucket.push(parsed);
98
+ }
99
+ }
100
+ this.collectFromEntries(authNode.entries, bucket);
101
+ this.collectFromEntries(authNode.keys, bucket);
102
+ return bucket;
103
+ }
104
+ collectFromEntries(value, bucket) {
105
+ if (!value) {
106
+ return;
107
+ }
108
+ const pushRecord = (record) => {
109
+ const resolved = this.readString(record.oauthProviderId) ??
110
+ this.readString(record.providerId) ??
111
+ this.parseTypeCandidate(this.readString(record.type)) ??
112
+ this.parseTypeCandidate(this.readString(record.rawType));
113
+ if (resolved) {
114
+ bucket.push(resolved.toLowerCase());
115
+ }
116
+ };
117
+ if (Array.isArray(value)) {
118
+ for (const entry of value) {
119
+ const record = this.asRecord(entry);
120
+ if (record) {
121
+ pushRecord(record);
122
+ }
123
+ else if (typeof entry === 'string') {
124
+ const parsed = this.parseTypeCandidate(entry);
125
+ if (parsed) {
126
+ bucket.push(parsed);
127
+ }
128
+ }
129
+ }
130
+ return;
131
+ }
132
+ const record = this.asRecord(value);
133
+ if (record) {
134
+ for (const entry of Object.values(record)) {
135
+ if (typeof entry === 'string') {
136
+ const parsed = this.parseTypeCandidate(entry);
137
+ if (parsed) {
138
+ bucket.push(parsed);
139
+ }
140
+ continue;
141
+ }
142
+ const nested = this.asRecord(entry);
143
+ if (nested) {
144
+ pushRecord(nested);
145
+ }
146
+ }
147
+ return;
148
+ }
149
+ if (typeof value === 'string') {
150
+ const parsed = this.parseTypeCandidate(value);
151
+ if (parsed) {
152
+ bucket.push(parsed);
153
+ }
154
+ }
155
+ }
156
+ parseTypeCandidate(value) {
157
+ if (!value) {
158
+ return null;
159
+ }
160
+ const normalized = value.trim().toLowerCase();
161
+ if (!normalized) {
162
+ return null;
163
+ }
164
+ const match = normalized.match(/^([a-z0-9._-]+)-(?:oauth|oauth2)$/);
165
+ return match ? match[1] : null;
166
+ }
167
+ areArraysEqual(left, right) {
168
+ if (left.length !== right.length) {
169
+ return false;
170
+ }
171
+ for (let i = 0; i < left.length; i += 1) {
172
+ if (left[i] !== right[i]) {
173
+ return false;
174
+ }
175
+ }
176
+ return true;
177
+ }
178
+ asRecord(value) {
179
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
180
+ return undefined;
181
+ }
182
+ return value;
183
+ }
184
+ readString(value) {
185
+ if (typeof value === 'string') {
186
+ const trimmed = value.trim();
187
+ if (trimmed) {
188
+ return trimmed;
189
+ }
190
+ }
191
+ return undefined;
192
+ }
193
+ }
194
+ let registryInstance = null;
195
+ export function getDynamicProviderRegistry() {
196
+ if (!registryInstance) {
197
+ registryInstance = new DynamicProviderRegistry();
198
+ }
199
+ return registryInstance;
200
+ }
201
+ //# sourceMappingURL=provider-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/token-daemon/provider-registry.ts"],"names":[],"mappings":"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"}
@@ -10,13 +10,21 @@ export declare class TokenDaemon {
10
10
  private readonly historyStore;
11
11
  private timer;
12
12
  private lastRefreshAttempt;
13
+ private antigravityMetadataEnsureTimestamps;
13
14
  constructor(options?: Partial<TokenDaemonOptions>);
14
15
  start(): Promise<void>;
15
16
  stop(): void;
16
17
  private tick;
17
18
  private trySilentRefresh;
19
+ private runIflowAutoAuthorization;
20
+ private runAntigravityAutoAuthorization;
21
+ private ensureTokenWithOverrides;
22
+ private applyCamoufoxEnv;
23
+ private restoreEnvValue;
24
+ private classifyRefreshFailure;
18
25
  static getSnapshot(): Promise<TokenDaemonSnapshot>;
19
26
  static findTokenBySelector(selector: string): Promise<TokenDescriptor | null>;
27
+ private ensureAntigravityTokenMetadata;
20
28
  private logDebug;
21
29
  private ensurePortalEnvironment;
22
30
  private recordHistoryEvent;