From d8a1ad0f0d5c00138ebb7742eebf4ad7958b0eaf Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Wed, 18 Mar 2026 02:03:47 -0700 Subject: [PATCH] Plugin SDK: split provider auth login seam --- extensions/chutes/index.ts | 2 +- extensions/github-copilot/index.ts | 3 ++- extensions/openai/openai-codex-provider.ts | 2 +- package.json | 4 ++++ src/plugin-sdk/provider-auth-login.ts | 5 +++++ src/plugin-sdk/provider-auth.ts | 3 --- src/plugins/contracts/auth.contract.test.ts | 8 ++++---- 7 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 src/plugin-sdk/provider-auth-login.ts diff --git a/extensions/chutes/index.ts b/extensions/chutes/index.ts index a61cd4ec93f..b715ad46c5a 100644 --- a/extensions/chutes/index.ts +++ b/extensions/chutes/index.ts @@ -2,11 +2,11 @@ import { definePluginEntry } from "openclaw/plugin-sdk/core"; import { buildOauthProviderAuthResult, createProviderApiKeyAuthMethod, - loginChutes, resolveOAuthApiKeyMarker, type ProviderAuthContext, type ProviderAuthResult, } from "openclaw/plugin-sdk/provider-auth"; +import { loginChutes } from "openclaw/plugin-sdk/provider-auth-login"; import { CHUTES_DEFAULT_MODEL_REF, applyChutesApiKeyConfig, diff --git a/extensions/github-copilot/index.ts b/extensions/github-copilot/index.ts index 39116636b76..633ff274f82 100644 --- a/extensions/github-copilot/index.ts +++ b/extensions/github-copilot/index.ts @@ -5,7 +5,8 @@ import { type ProviderResolveDynamicModelContext, type ProviderRuntimeModel, } from "openclaw/plugin-sdk/core"; -import { coerceSecretRef, githubCopilotLoginCommand } from "openclaw/plugin-sdk/provider-auth"; +import { coerceSecretRef } from "openclaw/plugin-sdk/provider-auth"; +import { githubCopilotLoginCommand } from "openclaw/plugin-sdk/provider-auth-login"; import { normalizeModelCompat } from "openclaw/plugin-sdk/provider-models"; import { DEFAULT_COPILOT_API_BASE_URL, resolveCopilotApiToken } from "./token.js"; import { fetchCopilotUsage } from "./usage.js"; diff --git a/extensions/openai/openai-codex-provider.ts b/extensions/openai/openai-codex-provider.ts index 5714b09a7d0..cb8d6d2519c 100644 --- a/extensions/openai/openai-codex-provider.ts +++ b/extensions/openai/openai-codex-provider.ts @@ -9,9 +9,9 @@ import { CODEX_CLI_PROFILE_ID, ensureAuthProfileStore, listProfilesForProvider, - loginOpenAICodexOAuth, type OAuthCredential, } from "openclaw/plugin-sdk/provider-auth"; +import { loginOpenAICodexOAuth } from "openclaw/plugin-sdk/provider-auth-login"; import { DEFAULT_CONTEXT_TOKENS, normalizeModelCompat, diff --git a/package.json b/package.json index 09a8c047869..a181861c2ae 100644 --- a/package.json +++ b/package.json @@ -414,6 +414,10 @@ "types": "./dist/plugin-sdk/provider-auth.d.ts", "default": "./dist/plugin-sdk/provider-auth.js" }, + "./plugin-sdk/provider-auth-login": { + "types": "./dist/plugin-sdk/provider-auth-login.d.ts", + "default": "./dist/plugin-sdk/provider-auth-login.js" + }, "./plugin-sdk/provider-catalog": { "types": "./dist/plugin-sdk/provider-catalog.d.ts", "default": "./dist/plugin-sdk/provider-catalog.js" diff --git a/src/plugin-sdk/provider-auth-login.ts b/src/plugin-sdk/provider-auth-login.ts new file mode 100644 index 00000000000..4d6f55902ab --- /dev/null +++ b/src/plugin-sdk/provider-auth-login.ts @@ -0,0 +1,5 @@ +// Public interactive auth/login helpers for provider plugins. + +export { githubCopilotLoginCommand } from "../providers/github-copilot-auth.js"; +export { loginChutes } from "../commands/chutes-oauth.js"; +export { loginOpenAICodexOAuth } from "../plugins/provider-openai-codex-oauth.js"; diff --git a/src/plugin-sdk/provider-auth.ts b/src/plugin-sdk/provider-auth.ts index 84373befb88..645073a4d02 100644 --- a/src/plugin-sdk/provider-auth.ts +++ b/src/plugin-sdk/provider-auth.ts @@ -36,9 +36,6 @@ export { validateAnthropicSetupToken, } from "../plugins/provider-auth-token.js"; export { applyAuthProfileConfig, buildApiKeyCredential } from "../plugins/provider-auth-helpers.js"; -export { githubCopilotLoginCommand } from "../providers/github-copilot-auth.js"; -export { loginChutes } from "../commands/chutes-oauth.js"; -export { loginOpenAICodexOAuth } from "../plugins/provider-openai-codex-oauth.js"; export { createProviderApiKeyAuthMethod } from "../plugins/provider-api-key-auth.js"; export { coerceSecretRef } from "../config/types.secrets.js"; export { resolveDefaultSecretProviderAlias } from "../secrets/ref-contract.js"; diff --git a/src/plugins/contracts/auth.contract.test.ts b/src/plugins/contracts/auth.contract.test.ts index 355ceb43962..92b6cd11fea 100644 --- a/src/plugins/contracts/auth.contract.test.ts +++ b/src/plugins/contracts/auth.contract.test.ts @@ -14,11 +14,11 @@ import type { import type { OpenClawPluginApi, ProviderPlugin } from "../types.js"; type LoginOpenAICodexOAuth = - (typeof import("openclaw/plugin-sdk/provider-auth"))["loginOpenAICodexOAuth"]; + (typeof import("openclaw/plugin-sdk/provider-auth-login"))["loginOpenAICodexOAuth"]; type LoginQwenPortalOAuth = (typeof import("../../../extensions/qwen-portal-auth/oauth.js"))["loginQwenPortalOAuth"]; type GithubCopilotLoginCommand = - (typeof import("openclaw/plugin-sdk/provider-auth"))["githubCopilotLoginCommand"]; + (typeof import("openclaw/plugin-sdk/provider-auth-login"))["githubCopilotLoginCommand"]; type CreateVpsAwareHandlers = (typeof import("../provider-oauth-flow.js"))["createVpsAwareOAuthHandlers"]; @@ -26,8 +26,8 @@ const loginOpenAICodexOAuthMock = vi.hoisted(() => vi.fn( const loginQwenPortalOAuthMock = vi.hoisted(() => vi.fn()); const githubCopilotLoginCommandMock = vi.hoisted(() => vi.fn()); -vi.mock("openclaw/plugin-sdk/provider-auth", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("openclaw/plugin-sdk/provider-auth-login", async (importOriginal) => { + const actual = await importOriginal(); return { ...actual, loginOpenAICodexOAuth: loginOpenAICodexOAuthMock,