indusagi-coding-agent 0.1.14 → 0.1.21
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/CHANGELOG.md +80 -0
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +19 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/login-handler.d.ts +20 -0
- package/dist/cli/login-handler.d.ts.map +1 -0
- package/dist/cli/login-handler.js +413 -0
- package/dist/cli/login-handler.js.map +1 -0
- package/dist/core/auth-storage.d.ts +56 -19
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +207 -53
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/model-registry.d.ts +17 -2
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +20 -4
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.js +2 -2
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +10 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/task-session-manager.d.ts.map +1 -1
- package/dist/core/task-session-manager.js +7 -1
- package/dist/core/task-session-manager.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +9 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +28 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +161 -27
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +20 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +265 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-handler.js","sourceRoot":"","sources":["../../src/cli/login-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,37 +2,58 @@
|
|
|
2
2
|
* Credential storage for API keys and OAuth tokens.
|
|
3
3
|
* Handles loading, saving, and refreshing credentials from auth.json.
|
|
4
4
|
*
|
|
5
|
+
* MULTI-ACCOUNT SUPPORT: Each provider can have multiple named accounts.
|
|
6
|
+
*
|
|
5
7
|
* Uses file locking to prevent race conditions when multiple indusagi instances
|
|
6
8
|
* try to refresh tokens simultaneously.
|
|
7
9
|
*/
|
|
8
|
-
import { type OAuthCredentials, type OAuthLoginCallbacks, type OAuthProviderId } from "indusagi/ai";
|
|
10
|
+
import { type OAuthCredentials, type OAuthLoginCallbacks, type OAuthProviderId, type OAuthProviderInterface } from "indusagi/ai";
|
|
9
11
|
export type ApiKeyCredential = {
|
|
10
12
|
type: "api_key";
|
|
11
13
|
key: string;
|
|
14
|
+
accountId?: string;
|
|
15
|
+
accountName?: string;
|
|
12
16
|
};
|
|
13
17
|
export type OAuthCredential = {
|
|
14
18
|
type: "oauth";
|
|
19
|
+
accountId?: string;
|
|
20
|
+
accountName?: string;
|
|
15
21
|
} & OAuthCredentials;
|
|
16
22
|
export type AuthCredential = ApiKeyCredential | OAuthCredential;
|
|
17
|
-
export type AuthStorageData = Record<string, AuthCredential
|
|
23
|
+
export type AuthStorageData = Record<string, Record<string, AuthCredential>>;
|
|
24
|
+
export type LegacyAuthStorageData = Record<string, AuthCredential>;
|
|
18
25
|
/**
|
|
19
26
|
* Credential storage backed by a JSON file.
|
|
27
|
+
* Supports multiple accounts per provider.
|
|
20
28
|
*/
|
|
21
29
|
export declare class AuthStorage {
|
|
22
30
|
private authPath;
|
|
23
31
|
private data;
|
|
24
32
|
private runtimeOverrides;
|
|
25
33
|
private fallbackResolver?;
|
|
34
|
+
private defaultAccounts;
|
|
26
35
|
constructor(authPath?: string);
|
|
36
|
+
/**
|
|
37
|
+
* Migrate from legacy single-account format to multi-account format
|
|
38
|
+
*/
|
|
39
|
+
private migrateLegacyData;
|
|
27
40
|
/**
|
|
28
41
|
* Set a runtime API key override (not persisted to disk).
|
|
29
42
|
* Used for CLI --api-key flag.
|
|
30
43
|
*/
|
|
31
|
-
setRuntimeApiKey(provider: string, apiKey: string): void;
|
|
44
|
+
setRuntimeApiKey(provider: string, apiKey: string, accountId?: string): void;
|
|
32
45
|
/**
|
|
33
46
|
* Remove a runtime API key override.
|
|
34
47
|
*/
|
|
35
|
-
removeRuntimeApiKey(provider: string): void;
|
|
48
|
+
removeRuntimeApiKey(provider: string, accountId?: string): void;
|
|
49
|
+
/**
|
|
50
|
+
* Set default account for a provider
|
|
51
|
+
*/
|
|
52
|
+
setDefaultAccount(provider: string, accountId: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Get default account for a provider
|
|
55
|
+
*/
|
|
56
|
+
getDefaultAccount(provider: string): string | undefined;
|
|
36
57
|
/**
|
|
37
58
|
* Set a fallback resolver for API keys not found in auth.json or env vars.
|
|
38
59
|
* Used for custom provider keys from models.json.
|
|
@@ -42,22 +63,33 @@ export declare class AuthStorage {
|
|
|
42
63
|
* Reload credentials from disk.
|
|
43
64
|
*/
|
|
44
65
|
reload(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Check if data is in legacy format (single account per provider)
|
|
68
|
+
*/
|
|
69
|
+
private isLegacyFormat;
|
|
45
70
|
/**
|
|
46
71
|
* Save credentials to disk.
|
|
47
72
|
*/
|
|
48
73
|
private save;
|
|
49
74
|
/**
|
|
50
|
-
* Get credential for a provider.
|
|
75
|
+
* Get credential for a provider and account.
|
|
76
|
+
*/
|
|
77
|
+
get(provider: string, accountId?: string): AuthCredential | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Get all accounts for a provider.
|
|
51
80
|
*/
|
|
52
|
-
|
|
81
|
+
getAccounts(provider: string): Array<{
|
|
82
|
+
accountId: string;
|
|
83
|
+
credential: AuthCredential;
|
|
84
|
+
}>;
|
|
53
85
|
/**
|
|
54
|
-
* Set credential for a provider.
|
|
86
|
+
* Set credential for a provider and account.
|
|
55
87
|
*/
|
|
56
|
-
set(provider: string, credential: AuthCredential): void;
|
|
88
|
+
set(provider: string, accountId: string, credential: AuthCredential): void;
|
|
57
89
|
/**
|
|
58
|
-
* Remove credential for a provider.
|
|
90
|
+
* Remove credential for a provider and account.
|
|
59
91
|
*/
|
|
60
|
-
remove(provider: string): void;
|
|
92
|
+
remove(provider: string, accountId?: string): void;
|
|
61
93
|
/**
|
|
62
94
|
* List all providers with credentials.
|
|
63
95
|
*/
|
|
@@ -65,12 +97,12 @@ export declare class AuthStorage {
|
|
|
65
97
|
/**
|
|
66
98
|
* Check if credentials exist for a provider in auth.json.
|
|
67
99
|
*/
|
|
68
|
-
has(provider: string): boolean;
|
|
100
|
+
has(provider: string, accountId?: string): boolean;
|
|
69
101
|
/**
|
|
70
102
|
* Check if any form of auth is configured for a provider.
|
|
71
103
|
* Unlike getApiKey(), this doesn't refresh OAuth tokens.
|
|
72
104
|
*/
|
|
73
|
-
hasAuth(provider: string): boolean;
|
|
105
|
+
hasAuth(provider: string, accountId?: string): boolean;
|
|
74
106
|
/**
|
|
75
107
|
* Get all credentials (for passing to getOAuthApiKey).
|
|
76
108
|
*/
|
|
@@ -78,19 +110,17 @@ export declare class AuthStorage {
|
|
|
78
110
|
/**
|
|
79
111
|
* Login to an OAuth provider.
|
|
80
112
|
*/
|
|
81
|
-
login(providerId: OAuthProviderId, callbacks: OAuthLoginCallbacks): Promise<void>;
|
|
113
|
+
login(providerId: OAuthProviderId, callbacks: OAuthLoginCallbacks, accountId?: string, accountName?: string): Promise<void>;
|
|
82
114
|
/**
|
|
83
115
|
* Logout from a provider.
|
|
84
116
|
*/
|
|
85
|
-
logout(provider: string): void;
|
|
117
|
+
logout(provider: string, accountId?: string): void;
|
|
86
118
|
/**
|
|
87
119
|
* Refresh OAuth token with file locking to prevent race conditions.
|
|
88
|
-
* Multiple indusagi instances may try to refresh simultaneously when tokens expire.
|
|
89
|
-
* This ensures only one instance refreshes while others wait and use the result.
|
|
90
120
|
*/
|
|
91
121
|
private refreshOAuthTokenWithLock;
|
|
92
122
|
/**
|
|
93
|
-
* Get API key for a provider.
|
|
123
|
+
* Get API key for a provider and account.
|
|
94
124
|
* Priority:
|
|
95
125
|
* 1. Runtime override (CLI --api-key)
|
|
96
126
|
* 2. API key from auth.json
|
|
@@ -98,10 +128,17 @@ export declare class AuthStorage {
|
|
|
98
128
|
* 4. Environment variable
|
|
99
129
|
* 5. Fallback resolver (models.json custom providers)
|
|
100
130
|
*/
|
|
101
|
-
getApiKey(providerId: string): Promise<string | undefined>;
|
|
131
|
+
getApiKey(providerId: string, accountId?: string): Promise<string | undefined>;
|
|
102
132
|
/**
|
|
103
133
|
* Get all registered OAuth providers
|
|
104
134
|
*/
|
|
105
|
-
getOAuthProviders():
|
|
135
|
+
getOAuthProviders(): OAuthProviderInterface[];
|
|
136
|
+
/**
|
|
137
|
+
* Get account info for display
|
|
138
|
+
*/
|
|
139
|
+
getAccountInfo(provider: string, accountId: string): {
|
|
140
|
+
name: string;
|
|
141
|
+
type: string;
|
|
142
|
+
} | undefined;
|
|
106
143
|
}
|
|
107
144
|
//# sourceMappingURL=auth-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-storage.d.ts","sourceRoot":"","sources":["../../src/core/auth-storage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auth-storage.d.ts","sourceRoot":"","sources":["../../src/core/auth-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Credential storage for API keys and OAuth tokens.
|
|
3
3
|
* Handles loading, saving, and refreshing credentials from auth.json.
|
|
4
4
|
*
|
|
5
|
+
* MULTI-ACCOUNT SUPPORT: Each provider can have multiple named accounts.
|
|
6
|
+
*
|
|
5
7
|
* Uses file locking to prevent race conditions when multiple indusagi instances
|
|
6
8
|
* try to refresh tokens simultaneously.
|
|
7
9
|
*/
|
|
@@ -12,26 +14,73 @@ import lockfile from "proper-lockfile";
|
|
|
12
14
|
import { getAgentDir } from "../config.js";
|
|
13
15
|
/**
|
|
14
16
|
* Credential storage backed by a JSON file.
|
|
17
|
+
* Supports multiple accounts per provider.
|
|
15
18
|
*/
|
|
16
19
|
export class AuthStorage {
|
|
17
20
|
constructor(authPath = join(getAgentDir(), "auth.json")) {
|
|
18
21
|
this.authPath = authPath;
|
|
19
22
|
this.data = {};
|
|
20
|
-
this.runtimeOverrides = new Map();
|
|
23
|
+
this.runtimeOverrides = new Map(); // provider -> accountId -> apiKey
|
|
24
|
+
this.defaultAccounts = new Map(); // provider -> default accountId
|
|
21
25
|
this.reload();
|
|
22
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Migrate from legacy single-account format to multi-account format
|
|
29
|
+
*/
|
|
30
|
+
migrateLegacyData(legacyData) {
|
|
31
|
+
const migrated = {};
|
|
32
|
+
for (const [provider, credential] of Object.entries(legacyData)) {
|
|
33
|
+
// Create default account for legacy credential
|
|
34
|
+
const accountId = "default";
|
|
35
|
+
const accountName = "Default";
|
|
36
|
+
if (!migrated[provider]) {
|
|
37
|
+
migrated[provider] = {};
|
|
38
|
+
}
|
|
39
|
+
migrated[provider][accountId] = {
|
|
40
|
+
...credential,
|
|
41
|
+
accountId,
|
|
42
|
+
accountName,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return migrated;
|
|
46
|
+
}
|
|
23
47
|
/**
|
|
24
48
|
* Set a runtime API key override (not persisted to disk).
|
|
25
49
|
* Used for CLI --api-key flag.
|
|
26
50
|
*/
|
|
27
|
-
setRuntimeApiKey(provider, apiKey) {
|
|
28
|
-
this.runtimeOverrides.
|
|
51
|
+
setRuntimeApiKey(provider, apiKey, accountId = "default") {
|
|
52
|
+
if (!this.runtimeOverrides.has(provider)) {
|
|
53
|
+
this.runtimeOverrides.set(provider, new Map());
|
|
54
|
+
}
|
|
55
|
+
this.runtimeOverrides.get(provider).set(accountId, apiKey);
|
|
29
56
|
}
|
|
30
57
|
/**
|
|
31
58
|
* Remove a runtime API key override.
|
|
32
59
|
*/
|
|
33
|
-
removeRuntimeApiKey(provider) {
|
|
34
|
-
|
|
60
|
+
removeRuntimeApiKey(provider, accountId) {
|
|
61
|
+
if (accountId) {
|
|
62
|
+
this.runtimeOverrides.get(provider)?.delete(accountId);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.runtimeOverrides.delete(provider);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Set default account for a provider
|
|
70
|
+
*/
|
|
71
|
+
setDefaultAccount(provider, accountId) {
|
|
72
|
+
this.defaultAccounts.set(provider, accountId);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get default account for a provider
|
|
76
|
+
*/
|
|
77
|
+
getDefaultAccount(provider) {
|
|
78
|
+
// Check env var first
|
|
79
|
+
const envDefault = process.env[`INDUSAGI_DEFAULT_ACCOUNT_${provider.replace(/-/g, '_').toUpperCase()}`];
|
|
80
|
+
if (envDefault)
|
|
81
|
+
return envDefault;
|
|
82
|
+
// Then check saved default
|
|
83
|
+
return this.defaultAccounts.get(provider);
|
|
35
84
|
}
|
|
36
85
|
/**
|
|
37
86
|
* Set a fallback resolver for API keys not found in auth.json or env vars.
|
|
@@ -49,12 +98,40 @@ export class AuthStorage {
|
|
|
49
98
|
return;
|
|
50
99
|
}
|
|
51
100
|
try {
|
|
52
|
-
|
|
101
|
+
const raw = JSON.parse(readFileSync(this.authPath, "utf-8"));
|
|
102
|
+
// Detect legacy format and migrate
|
|
103
|
+
if (this.isLegacyFormat(raw)) {
|
|
104
|
+
this.data = this.migrateLegacyData(raw);
|
|
105
|
+
this.save(); // Save in new format
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.data = raw;
|
|
109
|
+
}
|
|
110
|
+
// Load default accounts
|
|
111
|
+
if (raw._defaults) {
|
|
112
|
+
this.defaultAccounts = new Map(Object.entries(raw._defaults));
|
|
113
|
+
}
|
|
53
114
|
}
|
|
54
115
|
catch {
|
|
55
116
|
this.data = {};
|
|
56
117
|
}
|
|
57
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if data is in legacy format (single account per provider)
|
|
121
|
+
*/
|
|
122
|
+
isLegacyFormat(data) {
|
|
123
|
+
if (!data || typeof data !== "object")
|
|
124
|
+
return false;
|
|
125
|
+
for (const [key, value] of Object.entries(data)) {
|
|
126
|
+
if (key.startsWith("_"))
|
|
127
|
+
continue; // Skip metadata
|
|
128
|
+
// If value has 'type' field directly, it's legacy format
|
|
129
|
+
if (value && typeof value === "object" && value.type) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
58
135
|
/**
|
|
59
136
|
* Save credentials to disk.
|
|
60
137
|
*/
|
|
@@ -63,27 +140,71 @@ export class AuthStorage {
|
|
|
63
140
|
if (!existsSync(dir)) {
|
|
64
141
|
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
65
142
|
}
|
|
66
|
-
|
|
143
|
+
// Include defaults in saved data
|
|
144
|
+
const dataToSave = {
|
|
145
|
+
...this.data,
|
|
146
|
+
_defaults: Object.fromEntries(this.defaultAccounts),
|
|
147
|
+
};
|
|
148
|
+
writeFileSync(this.authPath, JSON.stringify(dataToSave, null, 2), "utf-8");
|
|
67
149
|
chmodSync(this.authPath, 0o600);
|
|
68
150
|
}
|
|
69
151
|
/**
|
|
70
|
-
* Get credential for a provider.
|
|
152
|
+
* Get credential for a provider and account.
|
|
153
|
+
*/
|
|
154
|
+
get(provider, accountId = "default") {
|
|
155
|
+
return this.data[provider]?.[accountId];
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get all accounts for a provider.
|
|
71
159
|
*/
|
|
72
|
-
|
|
73
|
-
|
|
160
|
+
getAccounts(provider) {
|
|
161
|
+
const providerData = this.data[provider];
|
|
162
|
+
if (!providerData)
|
|
163
|
+
return [];
|
|
164
|
+
return Object.entries(providerData).map(([accountId, credential]) => ({
|
|
165
|
+
accountId,
|
|
166
|
+
credential,
|
|
167
|
+
}));
|
|
74
168
|
}
|
|
75
169
|
/**
|
|
76
|
-
* Set credential for a provider.
|
|
170
|
+
* Set credential for a provider and account.
|
|
77
171
|
*/
|
|
78
|
-
set(provider, credential) {
|
|
79
|
-
this.data[provider]
|
|
172
|
+
set(provider, accountId, credential) {
|
|
173
|
+
if (!this.data[provider]) {
|
|
174
|
+
this.data[provider] = {};
|
|
175
|
+
}
|
|
176
|
+
this.data[provider][accountId] = {
|
|
177
|
+
...credential,
|
|
178
|
+
accountId,
|
|
179
|
+
accountName: credential.accountName || accountId,
|
|
180
|
+
};
|
|
181
|
+
// If this is the first account, set it as default
|
|
182
|
+
if (Object.keys(this.data[provider]).length === 1) {
|
|
183
|
+
this.setDefaultAccount(provider, accountId);
|
|
184
|
+
}
|
|
80
185
|
this.save();
|
|
81
186
|
}
|
|
82
187
|
/**
|
|
83
|
-
* Remove credential for a provider.
|
|
188
|
+
* Remove credential for a provider and account.
|
|
84
189
|
*/
|
|
85
|
-
remove(provider) {
|
|
86
|
-
|
|
190
|
+
remove(provider, accountId) {
|
|
191
|
+
if (accountId) {
|
|
192
|
+
delete this.data[provider]?.[accountId];
|
|
193
|
+
// If we removed the default, pick a new one
|
|
194
|
+
if (this.getDefaultAccount(provider) === accountId) {
|
|
195
|
+
const remaining = this.getAccounts(provider);
|
|
196
|
+
if (remaining.length > 0) {
|
|
197
|
+
this.setDefaultAccount(provider, remaining[0].accountId);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
this.defaultAccounts.delete(provider);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
delete this.data[provider];
|
|
206
|
+
this.defaultAccounts.delete(provider);
|
|
207
|
+
}
|
|
87
208
|
this.save();
|
|
88
209
|
}
|
|
89
210
|
/**
|
|
@@ -95,20 +216,39 @@ export class AuthStorage {
|
|
|
95
216
|
/**
|
|
96
217
|
* Check if credentials exist for a provider in auth.json.
|
|
97
218
|
*/
|
|
98
|
-
has(provider) {
|
|
99
|
-
|
|
219
|
+
has(provider, accountId) {
|
|
220
|
+
if (accountId) {
|
|
221
|
+
return accountId in (this.data[provider] || {});
|
|
222
|
+
}
|
|
223
|
+
return provider in this.data && Object.keys(this.data[provider]).length > 0;
|
|
100
224
|
}
|
|
101
225
|
/**
|
|
102
226
|
* Check if any form of auth is configured for a provider.
|
|
103
227
|
* Unlike getApiKey(), this doesn't refresh OAuth tokens.
|
|
104
228
|
*/
|
|
105
|
-
hasAuth(provider) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
229
|
+
hasAuth(provider, accountId) {
|
|
230
|
+
// Check runtime override
|
|
231
|
+
if (accountId) {
|
|
232
|
+
if (this.runtimeOverrides.get(provider)?.has(accountId))
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
if (this.runtimeOverrides.get(provider)?.size)
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
// Check saved credentials
|
|
240
|
+
if (accountId) {
|
|
241
|
+
if (this.has(provider, accountId))
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
if (this.has(provider))
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
// Check env var
|
|
110
249
|
if (getEnvApiKey(provider))
|
|
111
250
|
return true;
|
|
251
|
+
// Check fallback
|
|
112
252
|
if (this.fallbackResolver?.(provider))
|
|
113
253
|
return true;
|
|
114
254
|
return false;
|
|
@@ -122,26 +262,30 @@ export class AuthStorage {
|
|
|
122
262
|
/**
|
|
123
263
|
* Login to an OAuth provider.
|
|
124
264
|
*/
|
|
125
|
-
async login(providerId, callbacks) {
|
|
265
|
+
async login(providerId, callbacks, accountId = "default", accountName) {
|
|
126
266
|
const provider = getOAuthProvider(providerId);
|
|
127
267
|
if (!provider) {
|
|
128
268
|
throw new Error(`Unknown OAuth provider: ${providerId}`);
|
|
129
269
|
}
|
|
130
270
|
const credentials = await provider.login(callbacks);
|
|
131
|
-
|
|
271
|
+
const oauthCred = {
|
|
272
|
+
type: "oauth",
|
|
273
|
+
accountId,
|
|
274
|
+
accountName: accountName || accountId,
|
|
275
|
+
...credentials,
|
|
276
|
+
};
|
|
277
|
+
this.set(providerId, accountId, oauthCred);
|
|
132
278
|
}
|
|
133
279
|
/**
|
|
134
280
|
* Logout from a provider.
|
|
135
281
|
*/
|
|
136
|
-
logout(provider) {
|
|
137
|
-
this.remove(provider);
|
|
282
|
+
logout(provider, accountId) {
|
|
283
|
+
this.remove(provider, accountId);
|
|
138
284
|
}
|
|
139
285
|
/**
|
|
140
286
|
* Refresh OAuth token with file locking to prevent race conditions.
|
|
141
|
-
* Multiple indusagi instances may try to refresh simultaneously when tokens expire.
|
|
142
|
-
* This ensures only one instance refreshes while others wait and use the result.
|
|
143
287
|
*/
|
|
144
|
-
async refreshOAuthTokenWithLock(providerId) {
|
|
288
|
+
async refreshOAuthTokenWithLock(providerId, accountId) {
|
|
145
289
|
const provider = getOAuthProvider(providerId);
|
|
146
290
|
if (!provider) {
|
|
147
291
|
return null;
|
|
@@ -158,7 +302,6 @@ export class AuthStorage {
|
|
|
158
302
|
let release;
|
|
159
303
|
try {
|
|
160
304
|
// Acquire exclusive lock with retry and timeout
|
|
161
|
-
// Use generous retry window to handle slow token endpoints
|
|
162
305
|
release = await lockfile.lock(this.authPath, {
|
|
163
306
|
retries: {
|
|
164
307
|
retries: 10,
|
|
@@ -167,16 +310,15 @@ export class AuthStorage {
|
|
|
167
310
|
maxTimeout: 10000,
|
|
168
311
|
randomize: true,
|
|
169
312
|
},
|
|
170
|
-
stale: 30000,
|
|
313
|
+
stale: 30000,
|
|
171
314
|
});
|
|
172
|
-
// Re-read file after acquiring lock
|
|
315
|
+
// Re-read file after acquiring lock
|
|
173
316
|
this.reload();
|
|
174
|
-
const cred = this.data[providerId];
|
|
317
|
+
const cred = this.data[providerId]?.[accountId];
|
|
175
318
|
if (cred?.type !== "oauth") {
|
|
176
319
|
return null;
|
|
177
320
|
}
|
|
178
321
|
// Check if token is still expired after re-reading
|
|
179
|
-
// (another instance may have already refreshed it)
|
|
180
322
|
if (Date.now() < cred.expires) {
|
|
181
323
|
// Token is now valid - another instance refreshed it
|
|
182
324
|
const apiKey = provider.getApiKey(cred);
|
|
@@ -184,33 +326,37 @@ export class AuthStorage {
|
|
|
184
326
|
}
|
|
185
327
|
// Token still expired, we need to refresh
|
|
186
328
|
const oauthCreds = {};
|
|
187
|
-
for (const [key, value] of Object.entries(this.data)) {
|
|
329
|
+
for (const [key, value] of Object.entries(this.data[providerId] || {})) {
|
|
188
330
|
if (value.type === "oauth") {
|
|
189
331
|
oauthCreds[key] = value;
|
|
190
332
|
}
|
|
191
333
|
}
|
|
192
334
|
const result = await getOAuthApiKey(providerId, oauthCreds);
|
|
193
335
|
if (result) {
|
|
194
|
-
this.data[providerId] = {
|
|
336
|
+
this.data[providerId][accountId] = {
|
|
337
|
+
type: "oauth",
|
|
338
|
+
accountId,
|
|
339
|
+
accountName: cred.accountName,
|
|
340
|
+
...result.newCredentials,
|
|
341
|
+
};
|
|
195
342
|
this.save();
|
|
196
343
|
return result;
|
|
197
344
|
}
|
|
198
345
|
return null;
|
|
199
346
|
}
|
|
200
347
|
finally {
|
|
201
|
-
// Always release the lock
|
|
202
348
|
if (release) {
|
|
203
349
|
try {
|
|
204
350
|
await release();
|
|
205
351
|
}
|
|
206
352
|
catch {
|
|
207
|
-
// Ignore unlock errors
|
|
353
|
+
// Ignore unlock errors
|
|
208
354
|
}
|
|
209
355
|
}
|
|
210
356
|
}
|
|
211
357
|
}
|
|
212
358
|
/**
|
|
213
|
-
* Get API key for a provider.
|
|
359
|
+
* Get API key for a provider and account.
|
|
214
360
|
* Priority:
|
|
215
361
|
* 1. Runtime override (CLI --api-key)
|
|
216
362
|
* 2. API key from auth.json
|
|
@@ -218,47 +364,43 @@ export class AuthStorage {
|
|
|
218
364
|
* 4. Environment variable
|
|
219
365
|
* 5. Fallback resolver (models.json custom providers)
|
|
220
366
|
*/
|
|
221
|
-
async getApiKey(providerId) {
|
|
367
|
+
async getApiKey(providerId, accountId) {
|
|
368
|
+
// Use default account if not specified
|
|
369
|
+
const targetAccount = accountId || this.getDefaultAccount(providerId) || "default";
|
|
222
370
|
// Runtime override takes highest priority
|
|
223
|
-
const runtimeKey = this.runtimeOverrides.get(providerId);
|
|
371
|
+
const runtimeKey = this.runtimeOverrides.get(providerId)?.get(targetAccount);
|
|
224
372
|
if (runtimeKey) {
|
|
225
373
|
return runtimeKey;
|
|
226
374
|
}
|
|
227
|
-
const cred = this.data[providerId];
|
|
375
|
+
const cred = this.data[providerId]?.[targetAccount];
|
|
228
376
|
if (cred?.type === "api_key") {
|
|
229
377
|
return cred.key;
|
|
230
378
|
}
|
|
231
379
|
if (cred?.type === "oauth") {
|
|
232
380
|
const provider = getOAuthProvider(providerId);
|
|
233
381
|
if (!provider) {
|
|
234
|
-
// Unknown OAuth provider, can't get API key
|
|
235
382
|
return undefined;
|
|
236
383
|
}
|
|
237
384
|
// Check if token needs refresh
|
|
238
385
|
const needsRefresh = Date.now() >= cred.expires;
|
|
239
386
|
if (needsRefresh) {
|
|
240
|
-
// Use locked refresh to prevent race conditions
|
|
241
387
|
try {
|
|
242
|
-
const result = await this.refreshOAuthTokenWithLock(providerId);
|
|
388
|
+
const result = await this.refreshOAuthTokenWithLock(providerId, targetAccount);
|
|
243
389
|
if (result) {
|
|
244
390
|
return result.apiKey;
|
|
245
391
|
}
|
|
246
392
|
}
|
|
247
393
|
catch {
|
|
248
|
-
// Refresh failed - re-read file
|
|
394
|
+
// Refresh failed - re-read file
|
|
249
395
|
this.reload();
|
|
250
|
-
const updatedCred = this.data[providerId];
|
|
396
|
+
const updatedCred = this.data[providerId]?.[targetAccount];
|
|
251
397
|
if (updatedCred?.type === "oauth" && Date.now() < updatedCred.expires) {
|
|
252
|
-
// Another instance refreshed successfully, use those credentials
|
|
253
398
|
return provider.getApiKey(updatedCred);
|
|
254
399
|
}
|
|
255
|
-
// Refresh truly failed - return undefined so model discovery skips this provider
|
|
256
|
-
// User can /login to re-authenticate (credentials preserved for retry)
|
|
257
400
|
return undefined;
|
|
258
401
|
}
|
|
259
402
|
}
|
|
260
403
|
else {
|
|
261
|
-
// Token not expired, use current access token
|
|
262
404
|
return provider.getApiKey(cred);
|
|
263
405
|
}
|
|
264
406
|
}
|
|
@@ -266,7 +408,7 @@ export class AuthStorage {
|
|
|
266
408
|
const envKey = getEnvApiKey(providerId);
|
|
267
409
|
if (envKey)
|
|
268
410
|
return envKey;
|
|
269
|
-
// Fall back to custom resolver
|
|
411
|
+
// Fall back to custom resolver
|
|
270
412
|
return this.fallbackResolver?.(providerId) ?? undefined;
|
|
271
413
|
}
|
|
272
414
|
/**
|
|
@@ -275,5 +417,17 @@ export class AuthStorage {
|
|
|
275
417
|
getOAuthProviders() {
|
|
276
418
|
return getOAuthProviders();
|
|
277
419
|
}
|
|
420
|
+
/**
|
|
421
|
+
* Get account info for display
|
|
422
|
+
*/
|
|
423
|
+
getAccountInfo(provider, accountId) {
|
|
424
|
+
const cred = this.get(provider, accountId);
|
|
425
|
+
if (!cred)
|
|
426
|
+
return undefined;
|
|
427
|
+
return {
|
|
428
|
+
name: cred.accountName || accountId,
|
|
429
|
+
type: cred.type,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
278
432
|
}
|
|
279
433
|
//# sourceMappingURL=auth-storage.js.map
|