diff --git a/packages/spark/src/clack-wizard.ts b/packages/spark/src/clack-wizard.ts index b4afa51..b395810 100644 --- a/packages/spark/src/clack-wizard.ts +++ b/packages/spark/src/clack-wizard.ts @@ -201,16 +201,25 @@ export async function runClackWizard(deps: WizardDeps): Promise { } } - const session = - deps.options.apiKey !== undefined && deps.options.projectId !== undefined - ? await loginWithCiCredentials({ - apiKey: deps.options.apiKey, - projectId: deps.options.projectId, - apiUrl: deps.options.apiUrl, - }) - : await loginWithBrowser(deps, { - authMode: (await hasBraintrustAccount()) ? "signin" : "signup", - }); + let session: WizardSessionCompleteResult; + if ( + deps.options.apiKey !== undefined && + deps.options.projectId !== undefined + ) { + session = await loginWithCiCredentials({ + apiKey: deps.options.apiKey, + projectId: deps.options.projectId, + apiUrl: deps.options.apiUrl, + }); + } else { + const authMode = + deps.options.orgId !== undefined && deps.options.projId !== undefined + ? "signin" + : (await hasBraintrustAccount()) + ? "signin" + : "signup"; + session = await loginWithBrowser(deps, { authMode }); + } await writeLocalEnvBraintrust(deps, session.apiKey); diff --git a/packages/spark/test/clack-wizard.test.ts b/packages/spark/test/clack-wizard.test.ts index a8360f0..a228247 100644 --- a/packages/spark/test/clack-wizard.test.ts +++ b/packages/spark/test/clack-wizard.test.ts @@ -302,6 +302,7 @@ function buildDeps( readonly codingTools?: CodingToolRuntime; readonly braintrustCli?: BraintrustCliRuntime; readonly writeClipboard?: (text: string) => Promise; + readonly options?: Partial; } = {}, ): WizardDeps { const cwd = args.cwd ?? createGitTempDir(); @@ -330,6 +331,7 @@ function buildDeps( orgId: undefined, projId: undefined, yolo: false, + ...args.options, }, loginWithWizardSession: stubLogin, openBrowser: () => Promise.resolve(true), @@ -700,6 +702,37 @@ describe("runClackWizard", () => { } }); + it("skips the account question when browser org and project ids are provided", async () => { + let loginUrlParams: WizardSessionLoginArgs["loginUrlParams"]; + const { events } = createPrompts({ + selects: ["no", "manual", "confirm", "checked", "confirmed"], + }); + const deps = buildDeps({ + options: { orgId: "org-123", projId: "proj-456" }, + loginWithWizardSession: async ({ events, loginUrlParams: params }) => { + loginUrlParams = params; + events.onLoginUrl({ + loginUrl: "https://app.test/app/cli-login?session_token=test", + expiresAt: "2099-01-01T00:00:00.000Z", + verificationCode: "123456", + }); + await events.onTryOpenBrowser( + "https://app.test/app/cli-login?session_token=test", + ); + return DEFAULT_LOGIN_RESULT; + }, + }); + + await runClackWizard(deps); + + expect(events).not.toContain(`select:${ACCOUNT_QUESTION}`); + expect(loginUrlParams).toEqual({ + orgId: "org-123", + projectId: "proj-456", + authMode: "signin", + }); + }); + it("overwrites existing local token files without prompting", async () => { const cwd = createGitTempDir(); const envFilePath = join(cwd, ".env.braintrust");