mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-05 06:50:22 +00:00
63 lines
2.4 KiB
TypeScript
63 lines
2.4 KiB
TypeScript
import path from "node:path";
|
|
import {
|
|
AuthStorage,
|
|
InMemoryAuthStorageBackend,
|
|
ModelRegistry,
|
|
} from "@mariozechner/pi-coding-agent";
|
|
import { ensureAuthProfileStore } from "./auth-profiles.js";
|
|
import { resolvePiCredentialMapFromStore, type PiCredentialMap } from "./pi-auth-credentials.js";
|
|
|
|
export { AuthStorage, ModelRegistry } from "@mariozechner/pi-coding-agent";
|
|
function createAuthStorage(AuthStorageLike: unknown, path: string, creds: PiCredentialMap) {
|
|
const withInMemory = AuthStorageLike as { inMemory?: (data?: unknown) => unknown };
|
|
if (typeof withInMemory.inMemory === "function") {
|
|
return withInMemory.inMemory(creds) as AuthStorage;
|
|
}
|
|
|
|
const withFromStorage = AuthStorageLike as {
|
|
fromStorage?: (storage: unknown) => unknown;
|
|
};
|
|
if (typeof withFromStorage.fromStorage === "function") {
|
|
const backend = new InMemoryAuthStorageBackend();
|
|
backend.withLock(() => ({
|
|
result: undefined,
|
|
next: JSON.stringify(creds, null, 2),
|
|
}));
|
|
return withFromStorage.fromStorage(backend) as AuthStorage;
|
|
}
|
|
|
|
const withFactory = AuthStorageLike as { create?: (path: string) => unknown };
|
|
const withRuntimeOverride = (
|
|
typeof withFactory.create === "function"
|
|
? withFactory.create(path)
|
|
: new (AuthStorageLike as { new (path: string): unknown })(path)
|
|
) as AuthStorage & {
|
|
setRuntimeApiKey?: (provider: string, apiKey: string) => void;
|
|
};
|
|
if (typeof withRuntimeOverride.setRuntimeApiKey === "function") {
|
|
for (const [provider, credential] of Object.entries(creds)) {
|
|
if (credential.type === "api_key") {
|
|
withRuntimeOverride.setRuntimeApiKey(provider, credential.key);
|
|
continue;
|
|
}
|
|
withRuntimeOverride.setRuntimeApiKey(provider, credential.access);
|
|
}
|
|
}
|
|
return withRuntimeOverride;
|
|
}
|
|
|
|
function resolvePiCredentials(agentDir: string): PiCredentialMap {
|
|
const store = ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false });
|
|
return resolvePiCredentialMapFromStore(store);
|
|
}
|
|
|
|
// Compatibility helpers for pi-coding-agent 0.50+ (discover* helpers removed).
|
|
export function discoverAuthStorage(agentDir: string): AuthStorage {
|
|
const credentials = resolvePiCredentials(agentDir);
|
|
return createAuthStorage(AuthStorage, path.join(agentDir, "auth.json"), credentials);
|
|
}
|
|
|
|
export function discoverModels(authStorage: AuthStorage, agentDir: string): ModelRegistry {
|
|
return new ModelRegistry(authStorage, path.join(agentDir, "models.json"));
|
|
}
|