mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 06:51:23 +00:00
refactor: dedupe OAuth flow handlers
This commit is contained in:
56
src/commands/oauth-flow.ts
Normal file
56
src/commands/oauth-flow.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
import type { RuntimeEnv } from "../runtime.js";
|
||||
import type { WizardPrompter } from "../wizard/prompts.js";
|
||||
|
||||
type OAuthPrompt = { message: string; placeholder?: string };
|
||||
|
||||
const validateRequiredInput = (value: string) =>
|
||||
value.trim().length > 0 ? undefined : "Required";
|
||||
|
||||
export function createVpsAwareOAuthHandlers(params: {
|
||||
isRemote: boolean;
|
||||
prompter: WizardPrompter;
|
||||
runtime: RuntimeEnv;
|
||||
spin: ReturnType<WizardPrompter["progress"]>;
|
||||
openUrl: (url: string) => Promise<unknown>;
|
||||
localBrowserMessage: string;
|
||||
manualPromptMessage?: string;
|
||||
}): {
|
||||
onAuth: (event: { url: string }) => Promise<void>;
|
||||
onPrompt: (prompt: OAuthPrompt) => Promise<string>;
|
||||
} {
|
||||
const manualPromptMessage =
|
||||
params.manualPromptMessage ??
|
||||
"Paste the redirect URL (or authorization code)";
|
||||
let manualCodePromise: Promise<string> | undefined;
|
||||
|
||||
return {
|
||||
onAuth: async ({ url }) => {
|
||||
if (params.isRemote) {
|
||||
params.spin.stop("OAuth URL ready");
|
||||
params.runtime.log(
|
||||
`\nOpen this URL in your LOCAL browser:\n\n${url}\n`,
|
||||
);
|
||||
manualCodePromise = params.prompter
|
||||
.text({
|
||||
message: manualPromptMessage,
|
||||
validate: validateRequiredInput,
|
||||
})
|
||||
.then((value) => String(value));
|
||||
return;
|
||||
}
|
||||
|
||||
params.spin.update(params.localBrowserMessage);
|
||||
await params.openUrl(url);
|
||||
params.runtime.log(`Open: ${url}`);
|
||||
},
|
||||
onPrompt: async (prompt) => {
|
||||
if (manualCodePromise) return manualCodePromise;
|
||||
const code = await params.prompter.text({
|
||||
message: prompt.message,
|
||||
placeholder: prompt.placeholder,
|
||||
validate: validateRequiredInput,
|
||||
});
|
||||
return String(code);
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user