pub async fn login_manual(base: &mut CommandBase, force: bool) -> Result<(), Error> {
    let manual_login_opts = force
        .then(ManualLoginOptions::default)
        .unwrap_or_else(|| ManualLoginOptions::from(&base.opts().api_client_opts));
    let mut api_client = base.api_client()?;
    // fill in the missing information via prompts
    let ResolvedManualLoginOptions {
        api_url,
        team_identifier,
        token,
    } = manual_login_opts.resolve()?;
    // Check credentials
    api_client.with_base_url(api_url);
    let token = Token::new(token);
    check_credentials(&api_client, &token, &team_identifier).await?;
    // update global config with token
    write_token(base, token)?;
    // ensure api url & team id/slug are present in turbo.json
    let turbo_json_path = base.root_turbo_json_path()?;
    write_remote(&turbo_json_path, api_client.base_url(), team_identifier)?;
    Ok(())
}
Manually write a turborepo token, API url, teamid
crates/turborepo-lib/src/commands/login/manual.rs