UNPKG

trigger.dev

Version:

A Command-Line Interface for Trigger.dev projects

103 lines 4.52 kB
import { intro, note, outro } from "@clack/prompts"; import { chalkLink } from "../utilities/cliOutput.js"; import { logger } from "../utilities/logger.js"; import { isLoggedIn } from "../utilities/session.js"; import { printInitialBanner } from "../utilities/initialBanner.js"; import { CommonCommandOptions, commonOptions, handleTelemetry, wrapCommandAction, } from "../cli/common.js"; import { z } from "zod"; import { CliApiClient } from "../apiClient.js"; import { spinner } from "../utilities/windows.js"; import { loadConfig } from "../config.js"; import { resolveLocalEnvVars } from "../utilities/localEnvVars.js"; import { tryCatch } from "@trigger.dev/core"; const WhoamiCommandOptions = CommonCommandOptions.extend({ config: z.string().optional(), projectRef: z.string().optional(), envFile: z.string().optional(), }); export function configureWhoamiCommand(program) { return commonOptions(program .command("whoami") .description("display the current logged in user and project details") .option("-c, --config <config file>", "The name of the config file") .option("-p, --project-ref <project ref>", "The project ref. This will override the project specified in the config file.") .option("--env-file <env file>", "Path to the .env file to load into the CLI process. Defaults to .env in the project directory.")).action(async (options) => { await handleTelemetry(async () => { await printInitialBanner(false, options.profile); await whoAmICommand(options); }); }); } export async function whoAmICommand(options) { return await wrapCommandAction("whoamiCommand", WhoamiCommandOptions, options, async (opts) => { return await whoAmI(opts); }); } export async function whoAmI(options, embedded = false, silent = false) { if (!embedded) { intro(`Displaying your account details [${options?.profile ?? "default"}]`); } const envVars = resolveLocalEnvVars(options?.envFile); if (envVars.TRIGGER_PROJECT_REF) { logger.debug("Using project ref from env", { ref: envVars.TRIGGER_PROJECT_REF }); } const [configError, resolvedConfig] = await tryCatch(loadConfig({ overrides: { project: options?.projectRef ?? envVars.TRIGGER_PROJECT_REF }, configFile: options?.config, warn: false, })); if (configError) { logger.debug("Error loading config", { error: configError }); } const loadingSpinner = spinner(); if (!silent) { loadingSpinner.start("Checking your account details"); } const authentication = await isLoggedIn(options?.profile); if (!authentication.ok) { if (authentication.error === "fetch failed") { !silent && loadingSpinner.stop("Fetch failed. Platform down?"); } else { if (embedded) { !silent && loadingSpinner.stop(`Failed to check account details. You may want to run \`trigger.dev logout --profile ${options?.profile ?? "default"}\` and try again.`); } else { loadingSpinner.stop(`You must login first. Use \`trigger.dev login --profile ${options?.profile ?? "default"}\` to login.`); outro(`Whoami failed: ${authentication.error}`); } } return { success: false, error: authentication.error, }; } const apiClient = new CliApiClient(authentication.auth.apiUrl, authentication.auth.accessToken); const userData = await apiClient.whoAmI(resolvedConfig?.project); if (!userData.success) { loadingSpinner.stop("Error getting your account details"); logger.error(userData.error); return { success: false, error: userData.error, }; } if (!embedded) { loadingSpinner.stop("Retrieved your account details"); note(`User ID: ${userData.data.userId} Email: ${userData.data.email} URL: ${chalkLink(authentication.auth.apiUrl)}`, `Account details [${authentication.profile}]`); const { project } = userData.data; if (project) { note(`Name: ${project.name} Org: ${project.orgTitle} URL: ${chalkLink(project.url)}`, `Project details [${resolvedConfig?.project}]`); } } else { !silent && loadingSpinner.stop(`Retrieved your account details for ${userData.data.email}`); } return userData; } //# sourceMappingURL=whoami.js.map