@appuo/orbit 1.0.4 β†’ 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 🌍 Orbit
2
2
 
3
- **Switch cloud identities instantly.**
3
+ **Switch Vercel identities instantly.**
4
4
 
5
5
  No logout. No shell hacks. No credential mess.
6
6
 
@@ -12,7 +12,7 @@ No logout. No shell hacks. No credential mess.
12
12
 
13
13
  > **AWS has named profiles. Why doesn't Vercel?**
14
14
  >
15
- > Orbit gives every cloud CLI the same power.
15
+ > Orbit gives Vercel the same power. More providers coming soon.
16
16
 
17
17
  ```bash
18
18
  orbit add vercel personal
@@ -29,6 +29,19 @@ vercel deploy # deploys as personal. instant.
29
29
 
30
30
  ---
31
31
 
32
+ ## 🎯 Current Support
33
+
34
+ | Provider | Status |
35
+ |----------|--------|
36
+ | **Vercel** | βœ… Fully supported |
37
+ | AWS | πŸ”œ Coming soon |
38
+ | Supabase | πŸ”œ Coming soon |
39
+ | Cloudflare | πŸ”œ Coming soon |
40
+
41
+ > Orbit is built with a **pluggable provider system**. Vercel is the first provider, with more on the way.
42
+
43
+ ---
44
+
32
45
  ## πŸ“¦ Install
33
46
 
34
47
  ```bash
@@ -42,12 +55,12 @@ pnpm add -g @appuo/orbit
42
55
  ## ⚑ 30-Second Setup
43
56
 
44
57
  ```bash
45
- # Add your personal account
58
+ # Add your personal Vercel account
46
59
  orbit add vercel personal
47
60
  # β†’ Detects existing Vercel login automatically
48
61
  # β†’ Or launches `vercel login` for you
49
62
 
50
- # Add your work account
63
+ # Add your work Vercel account
51
64
  orbit add vercel company
52
65
  # β†’ Say "n" to detected token, login as different user
53
66
 
@@ -67,13 +80,13 @@ No `vercel logout`. No `vercel login`. Just switch and go.
67
80
 
68
81
  | Command | What it does |
69
82
  |---------|-------------|
70
- | `orbit add <provider> <profile>` | Add account (guided login) |
71
- | `orbit use <provider> <profile>` | Switch identity instantly |
83
+ | `orbit add vercel <profile>` | Add Vercel account (guided login) |
84
+ | `orbit use vercel <profile>` | Switch identity instantly |
72
85
  | `orbit list` | See all profiles + emails |
73
- | `orbit exec <provider> <cmd>` | Run with active profile |
74
- | `orbit run <provider> <profile> <cmd>` | Run with specific profile |
86
+ | `orbit exec vercel <cmd>` | Run with active profile |
87
+ | `orbit run vercel <profile> <cmd>` | Run with specific profile |
75
88
  | `orbit current` | Show active profile |
76
- | `orbit remove <provider> <profile>` | Remove a profile |
89
+ | `orbit remove vercel <profile>` | Remove a profile |
77
90
 
78
91
  ---
79
92
 
@@ -122,6 +135,8 @@ No environment variable injection. No wrappers. The Vercel CLI reads its own aut
122
135
 
123
136
  ## πŸ—ΊοΈ Roadmap
124
137
 
138
+ Orbit is built on a pluggable provider architecture. Adding new cloud providers is straightforward.
139
+
125
140
  **Coming Soon:**
126
141
 
127
142
  - [ ] **AWS Provider** β€” Named profiles for AWS CLI
@@ -131,7 +146,6 @@ No environment variable injection. No wrappers. The Vercel CLI reads its own aut
131
146
  - [ ] **Netlify Provider** β€” Account switching
132
147
  - [ ] **Profile import/export** β€” Migrate between machines
133
148
  - [ ] **Shell completions** β€” bash, zsh, fish, PowerShell
134
- - [ ] **Plugin system** β€” Community providers
135
149
 
136
150
  > **Want a provider?** [Open an issue](https://github.com/appuo/orbit/issues) β†’
137
151
 
package/dist/index.js CHANGED
@@ -778,7 +778,7 @@ var require2 = createRequire(import.meta.url);
778
778
  var pkg = require2("../package.json");
779
779
  registerProvider(vercelProvider);
780
780
  var program = new Command8();
781
- program.name("orbit").description("\u{1F30D} Switch cloud identities instantly. No logout required.").version(pkg.version).enablePositionalOptions();
781
+ program.name("orbit").description("\u{1F30D} Switch Vercel identities instantly. No logout required.").version(pkg.version).enablePositionalOptions();
782
782
  program.addCommand(addCommand);
783
783
  program.addCommand(listCommand);
784
784
  program.addCommand(removeCommand);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/providers/provider.interface.ts","../src/providers/vercel.ts","../src/utils/paths.ts","../src/commands/add.ts","../src/storage/keychain.ts","../src/storage/configStore.ts","../src/types/config.ts","../src/utils/validator.ts","../src/utils/logger.ts","../src/utils/errorHandler.ts","../src/commands/list.ts","../src/commands/remove.ts","../src/commands/use.ts","../src/commands/run.ts","../src/commands/exec.ts","../src/commands/current.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { createRequire } from 'node:module';\nimport { registerProvider } from './providers/provider.interface.js';\nimport { vercelProvider } from './providers/vercel.js';\nimport { addCommand } from './commands/add.js';\nimport { listCommand } from './commands/list.js';\nimport { removeCommand } from './commands/remove.js';\nimport { useCommand } from './commands/use.js';\nimport { runCommand } from './commands/run.js';\nimport { execCommand } from './commands/exec.js';\nimport { currentCommand } from './commands/current.js';\nimport { handleError } from './utils/errorHandler.js';\n\nconst require = createRequire(import.meta.url);\nconst pkg = require('../package.json') as { version: string };\n\n// Register providers\nregisterProvider(vercelProvider);\n\nconst program = new Command();\n\nprogram\n .name('orbit')\n .description('🌍 Switch cloud identities instantly. No logout required.')\n .version(pkg.version)\n .enablePositionalOptions();\n\nprogram.addCommand(addCommand);\nprogram.addCommand(listCommand);\nprogram.addCommand(removeCommand);\nprogram.addCommand(useCommand);\nprogram.addCommand(runCommand);\nprogram.addCommand(execCommand);\nprogram.addCommand(currentCommand);\n\ntry {\n await program.parseAsync(process.argv);\n} catch (error: unknown) {\n handleError(error);\n}\n","export interface Provider {\n name: string;\n getEnvVar(): string;\n getCliName(): string;\n validateToken(token: string): boolean;\n getStoredToken?(): Promise<string | null>;\n getUserEmail?(token: string): Promise<string | undefined>;\n login?(): Promise<boolean>;\n getAuthConfigPath?(): string | null;\n captureAuth?(profile: string): Promise<void>;\n restoreAuth?(profile: string): Promise<boolean>;\n}\n\nconst providers = new Map<string, Provider>();\n\nexport const registerProvider = (provider: Provider): void => {\n providers.set(provider.name.toLowerCase(), provider);\n};\n\nexport const getProvider = (name: string): Provider => {\n const provider = providers.get(name.toLowerCase());\n\n if (!provider) {\n const available = Array.from(providers.keys()).join(', ');\n throw new Error(\n `Unknown provider \"${name}\". Available providers: ${available || 'none'}`,\n );\n }\n\n return provider;\n};\n\nexport const getAllProviders = (): Provider[] => {\n return Array.from(providers.values());\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport type { Provider } from './provider.interface.js';\nimport { getAuthFilePath, ensureAuthDir } from '../utils/paths.js';\n\nconst getVercelAuthPath = (): string | null => {\n const platform = os.platform();\n const home = os.homedir();\n\n if (platform === 'darwin') {\n return path.join(\n home,\n 'Library',\n 'Application Support',\n 'com.vercel.cli',\n 'auth.json',\n );\n } else if (platform === 'win32') {\n const appData = process.env['APPDATA'] || path.join(home, 'AppData', 'Roaming');\n return path.join(appData, 'com.vercel.cli', 'auth.json');\n } else {\n const xdgDataHome =\n process.env['XDG_DATA_HOME'] || path.join(home, '.local', 'share');\n return path.join(xdgDataHome, 'com.vercel.cli', 'auth.json');\n }\n};\n\nexport const vercelProvider: Provider = {\n name: 'vercel',\n\n getEnvVar(): string {\n return 'VERCEL_TOKEN';\n },\n\n getCliName(): string {\n return 'vercel';\n },\n\n validateToken(token: string): boolean {\n return token.length > 20;\n },\n\n async getStoredToken(): Promise<string | null> {\n try {\n const configPath = getVercelAuthPath();\n if (configPath && fs.existsSync(configPath)) {\n const content = fs.readFileSync(configPath, 'utf-8');\n const config = JSON.parse(content) as { token?: string };\n if (config.token && typeof config.token === 'string') {\n return config.token;\n }\n }\n } catch {\n // Ignore errors\n }\n return null;\n },\n\n async getUserEmail(token: string): Promise<string | undefined> {\n try {\n const response = await fetch('https://api.vercel.com/v2/user', {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n if (!response.ok) return undefined;\n\n const data = (await response.json()) as { user: { email: string } };\n return data.user.email;\n } catch {\n return undefined;\n }\n },\n\n async login(): Promise<boolean> {\n try {\n const { execa } = await import('execa');\n await execa('vercel', ['login'], { stdio: 'inherit' });\n return true;\n } catch {\n return false;\n }\n },\n\n getAuthConfigPath(): string | null {\n return getVercelAuthPath();\n },\n\n async captureAuth(profile: string): Promise<void> {\n const authPath = getVercelAuthPath();\n if (!authPath || !fs.existsSync(authPath)) return;\n\n ensureAuthDir('vercel');\n const destPath = getAuthFilePath('vercel', profile);\n fs.copyFileSync(authPath, destPath);\n },\n\n async restoreAuth(profile: string): Promise<boolean> {\n const sourcePath = getAuthFilePath('vercel', profile);\n if (!fs.existsSync(sourcePath)) return false;\n\n const authPath = getVercelAuthPath();\n if (!authPath) return false;\n\n // Ensure the Vercel config directory exists\n const authDir = path.dirname(authPath);\n if (!fs.existsSync(authDir)) {\n fs.mkdirSync(authDir, { recursive: true });\n }\n\n fs.copyFileSync(sourcePath, authPath);\n return true;\n },\n};\n","import os from 'node:os';\nimport path from 'node:path';\nimport fs from 'node:fs';\n\nexport const getConfigDir = (): string => {\n return path.join(os.homedir(), '.orbit');\n};\n\nexport const getConfigPath = (): string => {\n return path.join(getConfigDir(), 'config.json');\n};\n\nexport const ensureConfigDir = (): void => {\n const dir = getConfigDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n};\n\nexport const getAuthDir = (provider: string): string => {\n return path.join(getConfigDir(), 'auth', provider);\n};\n\nexport const getAuthFilePath = (provider: string, profile: string): string => {\n return path.join(getAuthDir(provider), `${profile}.json`);\n};\n\nexport const ensureAuthDir = (provider: string): void => {\n const dir = getAuthDir(provider);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n};\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport chalk from 'chalk';\nimport readline from 'node:readline';\nimport { getProvider } from '../providers/provider.interface.js';\nimport { storeToken } from '../storage/keychain.js';\nimport { addProfile, profileExists } from '../storage/configStore.js';\nimport { validateProviderName, validateProfileName } from '../utils/validator.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nconst promptHiddenInput = (prompt: string): Promise<string> => {\n return new Promise((resolve, reject) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n // Disable echo for hidden input\n if (process.stdin.isTTY) {\n process.stdout.write(prompt);\n const stdin = process.stdin;\n stdin.setRawMode(true);\n stdin.resume();\n\n let input = '';\n\n const onData = (data: Buffer): void => {\n const char = data.toString('utf-8');\n\n if (char === '\\n' || char === '\\r' || char === '\\u0004') {\n stdin.setRawMode(false);\n stdin.removeListener('data', onData);\n stdin.pause();\n rl.close();\n process.stdout.write('\\n');\n resolve(input);\n } else if (char === '\\u0003') {\n // Ctrl+C\n stdin.setRawMode(false);\n stdin.removeListener('data', onData);\n stdin.pause();\n rl.close();\n reject(new Error('User cancelled input.'));\n } else if (char === '\\u007F' || char === '\\b') {\n // Backspace\n input = input.slice(0, -1);\n } else {\n input += char;\n }\n };\n\n stdin.on('data', onData);\n } else {\n // Non-TTY fallback (piped input)\n rl.question(prompt, (answer) => {\n rl.close();\n resolve(answer);\n });\n }\n });\n};\n\nconst confirmInput = (prompt: string): Promise<boolean> => {\n return new Promise((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n rl.question(prompt, (answer) => {\n rl.close();\n const normalized = answer.trim().toLowerCase();\n resolve(normalized === 'y' || normalized === 'yes' || normalized === '');\n });\n });\n};\n\nexport const addCommand = new Command('add')\n .description('Add a new cloud provider profile')\n .argument('<provider>', 'Cloud provider name (e.g., vercel)')\n .argument('<profile>', 'Profile name (e.g., personal, company)')\n .action(async (providerName: string, profileName: string) => {\n try {\n const validProvider = validateProviderName(providerName);\n const validProfile = validateProfileName(profileName);\n const provider = getProvider(validProvider);\n\n if (profileExists(validProvider, validProfile)) {\n logger.warn(`Profile \"${validProfile}\" already exists for ${provider.name}. It will be overwritten.`);\n }\n\n let token = '';\n let storedTokenFound = false;\n\n if (provider.getStoredToken) {\n const spinner = ora(`Checking for existing ${provider.name} credentials...`).start();\n try {\n const storedToken = await provider.getStoredToken();\n spinner.stop();\n\n if (storedToken) {\n storedTokenFound = true;\n let emailDisplay = '';\n if (provider.getUserEmail) {\n try {\n const email = await provider.getUserEmail(storedToken);\n if (email) emailDisplay = ` (${chalk.cyan(email)})`;\n } catch {\n // Ignore email fetch error\n }\n }\n\n const useStored = await confirmInput(\n `Found existing token${emailDisplay} from ${provider.name} CLI. Use this? (Y/n) `,\n );\n if (useStored) {\n token = storedToken;\n }\n }\n } catch {\n spinner.stop();\n // Ignore errors during auto-discovery\n }\n }\n\n if (!token && provider.login) {\n const promptMsg = storedTokenFound\n ? `Login to a different account with ${provider.name} CLI? (Y/n) `\n : `No existing credentials found. Login with ${provider.name} CLI now? (Y/n) `;\n\n const shouldLogin = await confirmInput(promptMsg);\n\n if (shouldLogin) {\n const loginSuccess = await provider.login();\n if (loginSuccess) {\n // Re-check for token\n if (provider.getStoredToken) {\n const spinner = ora('Checking for new credentials...').start();\n try {\n const storedToken = await provider.getStoredToken();\n spinner.stop();\n if (storedToken) {\n token = storedToken;\n logger.success('New credentials found!');\n }\n } catch {\n spinner.stop();\n }\n }\n } else {\n logger.warn('Login failed or was cancelled.');\n }\n }\n }\n\n if (!token) {\n token = await promptHiddenInput(`πŸ”‘ Enter token for ${provider.name}/${validProfile}: `);\n }\n\n if (!token.trim()) {\n logger.error('Token cannot be empty.');\n process.exit(1);\n }\n\n const spinner = ora('Validating token...').start();\n\n if (!provider.validateToken(token.trim())) {\n spinner.fail('Token validation failed.');\n logger.error(`Invalid token format for ${provider.name}. Please check your token and try again.`);\n process.exit(1);\n }\n\n spinner.text = 'Storing token securely...';\n await storeToken(validProvider, validProfile, token.trim());\n\n if (provider.getUserEmail) {\n spinner.text = 'Fetching user info...';\n try {\n const email = await provider.getUserEmail(token.trim());\n if (email) {\n spinner.text = `Found user: ${email}. Updating configuration...`;\n addProfile(validProvider, validProfile, { email });\n } else {\n addProfile(validProvider, validProfile);\n }\n } catch {\n addProfile(validProvider, validProfile);\n }\n } else {\n addProfile(validProvider, validProfile);\n }\n\n spinner.succeed(`Profile \"${validProfile}\" added for ${provider.name}.`);\n\n // Capture auth.json snapshot for this profile\n if (provider.captureAuth) {\n try {\n await provider.captureAuth(validProfile);\n } catch {\n // Non-critical: auth capture failure doesn't block profile creation\n }\n }\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport os from 'node:os';\nimport { getConfigDir, ensureConfigDir } from '../utils/paths.js';\n\nconst CREDENTIALS_FILE = 'credentials.json';\nconst KEY_FILE = '.key';\nconst ALGORITHM = 'aes-256-gcm';\n\ninterface EncryptedEntry {\n iv: string;\n tag: string;\n data: string;\n}\n\ninterface CredentialStore {\n [key: string]: EncryptedEntry;\n}\n\nconst getCredentialsPath = (): string => {\n return path.join(getConfigDir(), CREDENTIALS_FILE);\n};\n\nconst getKeyPath = (): string => {\n return path.join(getConfigDir(), KEY_FILE);\n};\n\nconst getOrCreateKey = (): Buffer => {\n const keyPath = getKeyPath();\n ensureConfigDir();\n\n if (fs.existsSync(keyPath)) {\n return Buffer.from(fs.readFileSync(keyPath, 'utf-8'), 'hex');\n }\n\n // Generate a random 256-bit key\n const key = crypto.randomBytes(32);\n fs.writeFileSync(keyPath, key.toString('hex'), { mode: 0o600 });\n return key;\n};\n\nconst encrypt = (text: string, key: Buffer): EncryptedEntry => {\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv(ALGORITHM, key, iv);\n let encrypted = cipher.update(text, 'utf-8', 'hex');\n encrypted += cipher.final('hex');\n const tag = cipher.getAuthTag();\n return {\n iv: iv.toString('hex'),\n tag: tag.toString('hex'),\n data: encrypted,\n };\n};\n\nconst decrypt = (entry: EncryptedEntry, key: Buffer): string => {\n const decipher = crypto.createDecipheriv(\n ALGORITHM,\n key,\n Buffer.from(entry.iv, 'hex'),\n );\n decipher.setAuthTag(Buffer.from(entry.tag, 'hex'));\n let decrypted = decipher.update(entry.data, 'hex', 'utf-8');\n decrypted += decipher.final('utf-8');\n return decrypted;\n};\n\nconst loadStore = (): CredentialStore => {\n const filePath = getCredentialsPath();\n if (!fs.existsSync(filePath)) return {};\n try {\n return JSON.parse(fs.readFileSync(filePath, 'utf-8')) as CredentialStore;\n } catch {\n return {};\n }\n};\n\nconst saveStore = (store: CredentialStore): void => {\n ensureConfigDir();\n const filePath = getCredentialsPath();\n fs.writeFileSync(filePath, JSON.stringify(store, null, 2), { mode: 0o600 });\n};\n\nconst getKey = (provider: string, profile: string): string => {\n return `${provider}:${profile}`;\n};\n\nexport const storeToken = async (\n provider: string,\n profile: string,\n token: string,\n): Promise<void> => {\n const key = getOrCreateKey();\n const store = loadStore();\n store[getKey(provider, profile)] = encrypt(token, key);\n saveStore(store);\n};\n\nexport const getToken = async (\n provider: string,\n profile: string,\n): Promise<string | null> => {\n try {\n const key = getOrCreateKey();\n const store = loadStore();\n const entry = store[getKey(provider, profile)];\n if (!entry) return null;\n return decrypt(entry, key);\n } catch {\n return null;\n }\n};\n\nexport const deleteToken = async (\n provider: string,\n profile: string,\n): Promise<boolean> => {\n const store = loadStore();\n const k = getKey(provider, profile);\n if (!(k in store)) return false;\n delete store[k];\n saveStore(store);\n return true;\n};\n","import fs from 'node:fs';\nimport { OrbitConfigSchema } from '../types/config.js';\nimport type { OrbitConfig } from '../types/config.js';\nimport { getConfigPath, ensureConfigDir } from '../utils/paths.js';\n\nconst defaultConfig: OrbitConfig = {\n providers: {},\n};\n\nexport const loadConfig = (): OrbitConfig => {\n const configPath = getConfigPath();\n\n if (!fs.existsSync(configPath)) {\n ensureConfigDir();\n fs.writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2), 'utf-8');\n return { ...defaultConfig };\n }\n\n const raw = fs.readFileSync(configPath, 'utf-8');\n const parsed: unknown = JSON.parse(raw);\n return OrbitConfigSchema.parse(parsed);\n};\n\nexport const saveConfig = (config: OrbitConfig): void => {\n ensureConfigDir();\n const configPath = getConfigPath();\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');\n};\n\nexport const addProfile = (\n provider: string,\n profile: string,\n metadata?: { email?: string },\n): void => {\n const config = loadConfig();\n\n if (!config.providers[provider]) {\n config.providers[provider] = { profiles: [], current: undefined };\n }\n\n const providerConfig = config.providers[provider];\n if (providerConfig && !providerConfig.profiles.includes(profile)) {\n providerConfig.profiles.push(profile);\n }\n\n if (metadata) {\n if (!providerConfig.metadata) {\n providerConfig.metadata = {};\n }\n providerConfig.metadata[profile] = metadata;\n }\n\n saveConfig(config);\n};\n\nexport const removeProfile = (provider: string, profile: string): void => {\n const config = loadConfig();\n const providerConfig = config.providers[provider];\n\n if (!providerConfig) return;\n\n providerConfig.profiles = providerConfig.profiles.filter((p) => p !== profile);\n\n if (providerConfig.current === profile) {\n providerConfig.current = undefined;\n }\n\n if (providerConfig.profiles.length === 0) {\n delete config.providers[provider];\n }\n\n saveConfig(config);\n};\n\nexport const setCurrentProfile = (provider: string, profile: string): void => {\n const config = loadConfig();\n const providerConfig = config.providers[provider];\n\n if (!providerConfig) {\n throw new Error(`No profiles found for provider \"${provider}\".`);\n }\n\n if (!providerConfig.profiles.includes(profile)) {\n throw new Error(`Profile \"${profile}\" does not exist for provider \"${provider}\".`);\n }\n\n providerConfig.current = profile;\n saveConfig(config);\n};\n\nexport const getCurrentProfile = (provider: string): string | undefined => {\n const config = loadConfig();\n return config.providers[provider]?.current;\n};\n\nexport const profileExists = (provider: string, profile: string): boolean => {\n const config = loadConfig();\n return config.providers[provider]?.profiles.includes(profile) ?? false;\n};\n","import { z } from 'zod';\n\nconst ProviderConfigSchema = z.object({\n profiles: z.array(z.string()),\n current: z.string().optional(),\n metadata: z.record(z.string(), z.object({ email: z.string().optional() })).optional(),\n});\n\nexport const OrbitConfigSchema = z.object({\n providers: z.record(z.string(), ProviderConfigSchema),\n});\n\nexport type ProviderConfig = z.infer<typeof ProviderConfigSchema>;\nexport type OrbitConfig = z.infer<typeof OrbitConfigSchema>;\n","import { z } from 'zod';\n\nconst nameSchema = z\n .string()\n .min(1, 'Name cannot be empty')\n .max(64, 'Name is too long')\n .regex(/^[a-zA-Z0-9_-]+$/, 'Name must be alphanumeric (hyphens and underscores allowed)');\n\nexport const validateProviderName = (name: string): string => {\n return nameSchema.parse(name);\n};\n\nexport const validateProfileName = (name: string): string => {\n return nameSchema.parse(name);\n};\n","import chalk from 'chalk';\n\nconst write = (stream: NodeJS.WriteStream, message: string): void => {\n stream.write(`${message}\\n`);\n};\n\nexport const logger = {\n info: (message: string): void => {\n write(process.stdout, chalk.blue('β„Ή') + ` ${message}`);\n },\n\n success: (message: string): void => {\n write(process.stdout, chalk.green('βœ”') + ` ${message}`);\n },\n\n warn: (message: string): void => {\n write(process.stderr, chalk.yellow('⚠') + ` ${message}`);\n },\n\n error: (message: string): void => {\n write(process.stderr, chalk.red('βœ–') + ` ${message}`);\n },\n\n plain: (message: string): void => {\n write(process.stdout, message);\n },\n\n newline: (): void => {\n write(process.stdout, '');\n },\n};\n","import { logger } from './logger.js';\nimport { ZodError } from 'zod';\n\nexport const handleError = (error: unknown): never => {\n if (error instanceof ZodError) {\n const messages = error.issues.map((e: { message: string }) => e.message).join(', ');\n logger.error(`Validation error: ${messages}`);\n process.exit(1);\n }\n\n if (error instanceof Error) {\n logger.error(error.message);\n\n if (process.env['ORBIT_DEBUG'] === '1') {\n logger.plain(error.stack ?? '');\n }\n\n process.exit(1);\n }\n\n logger.error('An unexpected error occurred.');\n process.exit(1);\n};\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { loadConfig } from '../storage/configStore.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const listCommand = new Command('list')\n .description('List all profiles across providers')\n .action(() => {\n try {\n const config = loadConfig();\n const providers = Object.keys(config.providers);\n\n if (providers.length === 0) {\n logger.info('No profiles configured yet. Use \"orbit add <provider> <profile>\" to get started.');\n return;\n }\n\n logger.newline();\n logger.plain(\n ` ${chalk.bold.underline('Provider'.padEnd(15))} ${chalk.bold.underline('Profile'.padEnd(20))} ${chalk.bold.underline('Email'.padEnd(30))} ${chalk.bold.underline('Status')}`,\n );\n logger.newline();\n\n for (const providerName of providers) {\n const providerConfig = config.providers[providerName];\n if (!providerConfig) continue;\n\n for (const profile of providerConfig.profiles) {\n const isCurrent = providerConfig.current === profile;\n const email = providerConfig.metadata?.[profile]?.email ?? '-';\n const status = isCurrent ? chalk.green('β˜… current') : chalk.dim('β€”');\n\n const providerDisplay = isCurrent\n ? chalk.cyan(providerName.padEnd(15))\n : chalk.white(providerName.padEnd(15));\n const profileDisplay = isCurrent\n ? chalk.cyan(profile.padEnd(20))\n : chalk.white(profile.padEnd(20));\n const emailDisplay = isCurrent\n ? chalk.cyan(email.padEnd(30))\n : chalk.gray(email.padEnd(30));\n\n logger.plain(` ${providerDisplay} ${profileDisplay} ${emailDisplay} ${status}`);\n }\n }\n\n logger.newline();\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport { getProvider } from '../providers/provider.interface.js';\nimport { deleteToken } from '../storage/keychain.js';\nimport { removeProfile, profileExists } from '../storage/configStore.js';\nimport { validateProviderName, validateProfileName } from '../utils/validator.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const removeCommand = new Command('remove')\n .description('Remove a cloud provider profile')\n .argument('<provider>', 'Cloud provider name')\n .argument('<profile>', 'Profile name to remove')\n .action(async (providerName: string, profileName: string) => {\n try {\n const validProvider = validateProviderName(providerName);\n const validProfile = validateProfileName(profileName);\n getProvider(validProvider); // Ensure provider is registered\n\n if (!profileExists(validProvider, validProfile)) {\n logger.error(`Profile \"${validProfile}\" does not exist for provider \"${validProvider}\".`);\n process.exit(1);\n }\n\n const spinner = ora('Removing profile...').start();\n\n spinner.text = 'Deleting token from secure storage...';\n await deleteToken(validProvider, validProfile);\n\n spinner.text = 'Updating configuration...';\n removeProfile(validProvider, validProfile);\n\n spinner.succeed(`Profile \"${validProfile}\" removed from ${validProvider}.`);\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport { getProvider } from '../providers/provider.interface.js';\nimport { setCurrentProfile, profileExists, getCurrentProfile } from '../storage/configStore.js';\nimport { validateProviderName, validateProfileName } from '../utils/validator.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const useCommand = new Command('use')\n .description('Set the current active profile for a provider')\n .argument('<provider>', 'Cloud provider name')\n .argument('<profile>', 'Profile name to activate')\n .action(async (providerName: string, profileName: string) => {\n try {\n const validProvider = validateProviderName(providerName);\n const validProfile = validateProfileName(profileName);\n const provider = getProvider(validProvider);\n\n if (!profileExists(validProvider, validProfile)) {\n logger.error(`Profile \"${validProfile}\" does not exist for provider \"${provider.name}\".`);\n process.exit(1);\n }\n\n const spinner = ora('Switching profile...').start();\n\n // Save current profile's auth state before switching\n const currentProfile = getCurrentProfile(validProvider);\n if (currentProfile && currentProfile !== validProfile && provider.captureAuth) {\n try {\n await provider.captureAuth(currentProfile);\n } catch {\n // Non-critical\n }\n }\n\n // Restore target profile's auth state\n if (provider.restoreAuth) {\n const restored = await provider.restoreAuth(validProfile);\n if (restored) {\n spinner.text = 'Auth credentials restored...';\n }\n }\n\n setCurrentProfile(validProvider, validProfile);\n spinner.succeed(`Now using profile \"${validProfile}\" for ${provider.name}.`);\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import { Command } from 'commander';\nimport { execa } from 'execa';\nimport { getProvider } from '../providers/provider.interface.js';\nimport { getToken } from '../storage/keychain.js';\nimport { profileExists, getCurrentProfile } from '../storage/configStore.js';\nimport { validateProviderName, validateProfileName } from '../utils/validator.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const runCommand = new Command('run')\n .description('Run a command with a specific provider profile')\n .argument('<provider>', 'Cloud provider name')\n .argument('<profile>', 'Profile name to use')\n .argument('<args...>', 'Command arguments to pass to the provider CLI')\n .passThroughOptions()\n .allowUnknownOption()\n .action(async (providerName: string, profileName: string, args: string[]) => {\n try {\n const validProvider = validateProviderName(providerName);\n const validProfile = validateProfileName(profileName);\n const provider = getProvider(validProvider);\n\n if (!profileExists(validProvider, validProfile)) {\n logger.error(`Profile \"${validProfile}\" does not exist for provider \"${provider.name}\".`);\n process.exit(1);\n }\n\n logger.info(`Running as ${provider.name}/${validProfile}...`);\n\n // Save current auth state and swap to target profile\n const currentProfile = getCurrentProfile(validProvider);\n let swapped = false;\n\n if (provider.restoreAuth) {\n // Save current auth state first\n if (currentProfile && currentProfile !== validProfile && provider.captureAuth) {\n try {\n await provider.captureAuth(currentProfile);\n } catch {\n // Non-critical\n }\n }\n\n // Restore target profile's auth\n swapped = await provider.restoreAuth(validProfile);\n }\n\n try {\n if (swapped) {\n // Auth swapped β€” run natively (no env injection needed)\n const cliName = provider.getCliName();\n const result = await execa(cliName, args, {\n stdio: 'inherit',\n reject: false,\n });\n process.exitCode = result.exitCode ?? 0;\n } else {\n // Fallback: inject VERCEL_TOKEN (for providers without auth swap)\n const token = await getToken(validProvider, validProfile);\n if (!token) {\n logger.error(`No token found for ${provider.name}/${validProfile}. Try adding it again with \"orbit add\".`);\n process.exit(1);\n }\n\n const cliName = provider.getCliName();\n const envVar = provider.getEnvVar();\n\n const result = await execa(cliName, args, {\n env: {\n ...process.env,\n [envVar]: token,\n },\n stdio: 'inherit',\n reject: false,\n });\n process.exitCode = result.exitCode ?? 0;\n }\n } finally {\n // Restore previous profile's auth\n if (swapped && currentProfile && currentProfile !== validProfile && provider.restoreAuth) {\n try {\n await provider.restoreAuth(currentProfile);\n } catch {\n // Non-critical\n }\n }\n }\n\n process.exit(process.exitCode ?? 0);\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import { Command } from 'commander';\nimport { execa } from 'execa';\nimport { getProvider } from '../providers/provider.interface.js';\nimport { getToken } from '../storage/keychain.js';\nimport { getCurrentProfile } from '../storage/configStore.js';\nimport { validateProviderName } from '../utils/validator.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const execCommand = new Command('exec')\n .description('Execute a command using the current active profile')\n .argument('<provider>', 'Cloud provider name')\n .argument('<args...>', 'Command arguments to pass to the provider CLI')\n .passThroughOptions()\n .allowUnknownOption()\n .action(async (providerName: string, args: string[]) => {\n try {\n const validProvider = validateProviderName(providerName);\n const provider = getProvider(validProvider);\n\n const currentProfile = getCurrentProfile(validProvider);\n\n if (!currentProfile) {\n logger.error(\n `No active profile set for ${provider.name}. Use \"orbit use ${validProvider} <profile>\" first.`,\n );\n process.exit(1);\n }\n\n // Ensure current profile's auth is active\n if (provider.restoreAuth) {\n await provider.restoreAuth(currentProfile);\n }\n\n const cliName = provider.getCliName();\n\n logger.info(`Running as ${provider.name}/${currentProfile}...`);\n\n // Try native execution first (auth.json is already swapped)\n if (provider.getAuthConfigPath?.()) {\n const result = await execa(cliName, args, {\n stdio: 'inherit',\n reject: false,\n });\n process.exit(result.exitCode ?? 0);\n }\n\n // Fallback: inject env var\n const token = await getToken(validProvider, currentProfile);\n\n if (!token) {\n logger.error(\n `No token found for ${provider.name}/${currentProfile}. Try adding it again with \"orbit add\".`,\n );\n process.exit(1);\n }\n\n const envVar = provider.getEnvVar();\n\n const result = await execa(cliName, args, {\n env: {\n ...process.env,\n [envVar]: token,\n },\n stdio: 'inherit',\n reject: false,\n });\n\n process.exit(result.exitCode ?? 0);\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { loadConfig } from '../storage/configStore.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const currentCommand = new Command('current')\n .description('Show current active profiles')\n .action(() => {\n try {\n const config = loadConfig();\n const providers = Object.keys(config.providers);\n\n if (providers.length === 0) {\n logger.info('No profiles configured yet.');\n return;\n }\n\n let hasActive = false;\n\n for (const providerName of providers) {\n const providerConfig = config.providers[providerName];\n if (providerConfig?.current) {\n logger.success(\n `${chalk.bold(providerName)}: ${chalk.cyan(providerConfig.current)}`,\n );\n hasActive = true;\n }\n }\n\n if (!hasActive) {\n logger.info('No active profiles set. Use \"orbit use <provider> <profile>\" to set one.');\n }\n } catch (error: unknown) {\n handleError(error);\n }\n });\n"],"mappings":"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","names":["Command","fs","path","os","os","path","fs","execa","chalk","fs","path","path","fs","fs","fs","z","spinner","chalk","Command","chalk","Command","providers","chalk","Command","ora","Command","ora","Command","ora","Command","ora","Command","Command","Command","execa","Command","result","execa","Command","chalk","Command","providers","chalk","require","Command"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/providers/provider.interface.ts","../src/providers/vercel.ts","../src/utils/paths.ts","../src/commands/add.ts","../src/storage/keychain.ts","../src/storage/configStore.ts","../src/types/config.ts","../src/utils/validator.ts","../src/utils/logger.ts","../src/utils/errorHandler.ts","../src/commands/list.ts","../src/commands/remove.ts","../src/commands/use.ts","../src/commands/run.ts","../src/commands/exec.ts","../src/commands/current.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { createRequire } from 'node:module';\nimport { registerProvider } from './providers/provider.interface.js';\nimport { vercelProvider } from './providers/vercel.js';\nimport { addCommand } from './commands/add.js';\nimport { listCommand } from './commands/list.js';\nimport { removeCommand } from './commands/remove.js';\nimport { useCommand } from './commands/use.js';\nimport { runCommand } from './commands/run.js';\nimport { execCommand } from './commands/exec.js';\nimport { currentCommand } from './commands/current.js';\nimport { handleError } from './utils/errorHandler.js';\n\nconst require = createRequire(import.meta.url);\nconst pkg = require('../package.json') as { version: string };\n\n// Register providers\nregisterProvider(vercelProvider);\n\nconst program = new Command();\n\nprogram\n .name('orbit')\n .description('🌍 Switch Vercel identities instantly. No logout required.')\n .version(pkg.version)\n .enablePositionalOptions();\n\nprogram.addCommand(addCommand);\nprogram.addCommand(listCommand);\nprogram.addCommand(removeCommand);\nprogram.addCommand(useCommand);\nprogram.addCommand(runCommand);\nprogram.addCommand(execCommand);\nprogram.addCommand(currentCommand);\n\ntry {\n await program.parseAsync(process.argv);\n} catch (error: unknown) {\n handleError(error);\n}\n","export interface Provider {\n name: string;\n getEnvVar(): string;\n getCliName(): string;\n validateToken(token: string): boolean;\n getStoredToken?(): Promise<string | null>;\n getUserEmail?(token: string): Promise<string | undefined>;\n login?(): Promise<boolean>;\n getAuthConfigPath?(): string | null;\n captureAuth?(profile: string): Promise<void>;\n restoreAuth?(profile: string): Promise<boolean>;\n}\n\nconst providers = new Map<string, Provider>();\n\nexport const registerProvider = (provider: Provider): void => {\n providers.set(provider.name.toLowerCase(), provider);\n};\n\nexport const getProvider = (name: string): Provider => {\n const provider = providers.get(name.toLowerCase());\n\n if (!provider) {\n const available = Array.from(providers.keys()).join(', ');\n throw new Error(\n `Unknown provider \"${name}\". Available providers: ${available || 'none'}`,\n );\n }\n\n return provider;\n};\n\nexport const getAllProviders = (): Provider[] => {\n return Array.from(providers.values());\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport type { Provider } from './provider.interface.js';\nimport { getAuthFilePath, ensureAuthDir } from '../utils/paths.js';\n\nconst getVercelAuthPath = (): string | null => {\n const platform = os.platform();\n const home = os.homedir();\n\n if (platform === 'darwin') {\n return path.join(\n home,\n 'Library',\n 'Application Support',\n 'com.vercel.cli',\n 'auth.json',\n );\n } else if (platform === 'win32') {\n const appData = process.env['APPDATA'] || path.join(home, 'AppData', 'Roaming');\n return path.join(appData, 'com.vercel.cli', 'auth.json');\n } else {\n const xdgDataHome =\n process.env['XDG_DATA_HOME'] || path.join(home, '.local', 'share');\n return path.join(xdgDataHome, 'com.vercel.cli', 'auth.json');\n }\n};\n\nexport const vercelProvider: Provider = {\n name: 'vercel',\n\n getEnvVar(): string {\n return 'VERCEL_TOKEN';\n },\n\n getCliName(): string {\n return 'vercel';\n },\n\n validateToken(token: string): boolean {\n return token.length > 20;\n },\n\n async getStoredToken(): Promise<string | null> {\n try {\n const configPath = getVercelAuthPath();\n if (configPath && fs.existsSync(configPath)) {\n const content = fs.readFileSync(configPath, 'utf-8');\n const config = JSON.parse(content) as { token?: string };\n if (config.token && typeof config.token === 'string') {\n return config.token;\n }\n }\n } catch {\n // Ignore errors\n }\n return null;\n },\n\n async getUserEmail(token: string): Promise<string | undefined> {\n try {\n const response = await fetch('https://api.vercel.com/v2/user', {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n if (!response.ok) return undefined;\n\n const data = (await response.json()) as { user: { email: string } };\n return data.user.email;\n } catch {\n return undefined;\n }\n },\n\n async login(): Promise<boolean> {\n try {\n const { execa } = await import('execa');\n await execa('vercel', ['login'], { stdio: 'inherit' });\n return true;\n } catch {\n return false;\n }\n },\n\n getAuthConfigPath(): string | null {\n return getVercelAuthPath();\n },\n\n async captureAuth(profile: string): Promise<void> {\n const authPath = getVercelAuthPath();\n if (!authPath || !fs.existsSync(authPath)) return;\n\n ensureAuthDir('vercel');\n const destPath = getAuthFilePath('vercel', profile);\n fs.copyFileSync(authPath, destPath);\n },\n\n async restoreAuth(profile: string): Promise<boolean> {\n const sourcePath = getAuthFilePath('vercel', profile);\n if (!fs.existsSync(sourcePath)) return false;\n\n const authPath = getVercelAuthPath();\n if (!authPath) return false;\n\n // Ensure the Vercel config directory exists\n const authDir = path.dirname(authPath);\n if (!fs.existsSync(authDir)) {\n fs.mkdirSync(authDir, { recursive: true });\n }\n\n fs.copyFileSync(sourcePath, authPath);\n return true;\n },\n};\n","import os from 'node:os';\nimport path from 'node:path';\nimport fs from 'node:fs';\n\nexport const getConfigDir = (): string => {\n return path.join(os.homedir(), '.orbit');\n};\n\nexport const getConfigPath = (): string => {\n return path.join(getConfigDir(), 'config.json');\n};\n\nexport const ensureConfigDir = (): void => {\n const dir = getConfigDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n};\n\nexport const getAuthDir = (provider: string): string => {\n return path.join(getConfigDir(), 'auth', provider);\n};\n\nexport const getAuthFilePath = (provider: string, profile: string): string => {\n return path.join(getAuthDir(provider), `${profile}.json`);\n};\n\nexport const ensureAuthDir = (provider: string): void => {\n const dir = getAuthDir(provider);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n};\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport chalk from 'chalk';\nimport readline from 'node:readline';\nimport { getProvider } from '../providers/provider.interface.js';\nimport { storeToken } from '../storage/keychain.js';\nimport { addProfile, profileExists } from '../storage/configStore.js';\nimport { validateProviderName, validateProfileName } from '../utils/validator.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nconst promptHiddenInput = (prompt: string): Promise<string> => {\n return new Promise((resolve, reject) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n // Disable echo for hidden input\n if (process.stdin.isTTY) {\n process.stdout.write(prompt);\n const stdin = process.stdin;\n stdin.setRawMode(true);\n stdin.resume();\n\n let input = '';\n\n const onData = (data: Buffer): void => {\n const char = data.toString('utf-8');\n\n if (char === '\\n' || char === '\\r' || char === '\\u0004') {\n stdin.setRawMode(false);\n stdin.removeListener('data', onData);\n stdin.pause();\n rl.close();\n process.stdout.write('\\n');\n resolve(input);\n } else if (char === '\\u0003') {\n // Ctrl+C\n stdin.setRawMode(false);\n stdin.removeListener('data', onData);\n stdin.pause();\n rl.close();\n reject(new Error('User cancelled input.'));\n } else if (char === '\\u007F' || char === '\\b') {\n // Backspace\n input = input.slice(0, -1);\n } else {\n input += char;\n }\n };\n\n stdin.on('data', onData);\n } else {\n // Non-TTY fallback (piped input)\n rl.question(prompt, (answer) => {\n rl.close();\n resolve(answer);\n });\n }\n });\n};\n\nconst confirmInput = (prompt: string): Promise<boolean> => {\n return new Promise((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n rl.question(prompt, (answer) => {\n rl.close();\n const normalized = answer.trim().toLowerCase();\n resolve(normalized === 'y' || normalized === 'yes' || normalized === '');\n });\n });\n};\n\nexport const addCommand = new Command('add')\n .description('Add a new cloud provider profile')\n .argument('<provider>', 'Cloud provider name (e.g., vercel)')\n .argument('<profile>', 'Profile name (e.g., personal, company)')\n .action(async (providerName: string, profileName: string) => {\n try {\n const validProvider = validateProviderName(providerName);\n const validProfile = validateProfileName(profileName);\n const provider = getProvider(validProvider);\n\n if (profileExists(validProvider, validProfile)) {\n logger.warn(`Profile \"${validProfile}\" already exists for ${provider.name}. It will be overwritten.`);\n }\n\n let token = '';\n let storedTokenFound = false;\n\n if (provider.getStoredToken) {\n const spinner = ora(`Checking for existing ${provider.name} credentials...`).start();\n try {\n const storedToken = await provider.getStoredToken();\n spinner.stop();\n\n if (storedToken) {\n storedTokenFound = true;\n let emailDisplay = '';\n if (provider.getUserEmail) {\n try {\n const email = await provider.getUserEmail(storedToken);\n if (email) emailDisplay = ` (${chalk.cyan(email)})`;\n } catch {\n // Ignore email fetch error\n }\n }\n\n const useStored = await confirmInput(\n `Found existing token${emailDisplay} from ${provider.name} CLI. Use this? (Y/n) `,\n );\n if (useStored) {\n token = storedToken;\n }\n }\n } catch {\n spinner.stop();\n // Ignore errors during auto-discovery\n }\n }\n\n if (!token && provider.login) {\n const promptMsg = storedTokenFound\n ? `Login to a different account with ${provider.name} CLI? (Y/n) `\n : `No existing credentials found. Login with ${provider.name} CLI now? (Y/n) `;\n\n const shouldLogin = await confirmInput(promptMsg);\n\n if (shouldLogin) {\n const loginSuccess = await provider.login();\n if (loginSuccess) {\n // Re-check for token\n if (provider.getStoredToken) {\n const spinner = ora('Checking for new credentials...').start();\n try {\n const storedToken = await provider.getStoredToken();\n spinner.stop();\n if (storedToken) {\n token = storedToken;\n logger.success('New credentials found!');\n }\n } catch {\n spinner.stop();\n }\n }\n } else {\n logger.warn('Login failed or was cancelled.');\n }\n }\n }\n\n if (!token) {\n token = await promptHiddenInput(`πŸ”‘ Enter token for ${provider.name}/${validProfile}: `);\n }\n\n if (!token.trim()) {\n logger.error('Token cannot be empty.');\n process.exit(1);\n }\n\n const spinner = ora('Validating token...').start();\n\n if (!provider.validateToken(token.trim())) {\n spinner.fail('Token validation failed.');\n logger.error(`Invalid token format for ${provider.name}. Please check your token and try again.`);\n process.exit(1);\n }\n\n spinner.text = 'Storing token securely...';\n await storeToken(validProvider, validProfile, token.trim());\n\n if (provider.getUserEmail) {\n spinner.text = 'Fetching user info...';\n try {\n const email = await provider.getUserEmail(token.trim());\n if (email) {\n spinner.text = `Found user: ${email}. Updating configuration...`;\n addProfile(validProvider, validProfile, { email });\n } else {\n addProfile(validProvider, validProfile);\n }\n } catch {\n addProfile(validProvider, validProfile);\n }\n } else {\n addProfile(validProvider, validProfile);\n }\n\n spinner.succeed(`Profile \"${validProfile}\" added for ${provider.name}.`);\n\n // Capture auth.json snapshot for this profile\n if (provider.captureAuth) {\n try {\n await provider.captureAuth(validProfile);\n } catch {\n // Non-critical: auth capture failure doesn't block profile creation\n }\n }\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport os from 'node:os';\nimport { getConfigDir, ensureConfigDir } from '../utils/paths.js';\n\nconst CREDENTIALS_FILE = 'credentials.json';\nconst KEY_FILE = '.key';\nconst ALGORITHM = 'aes-256-gcm';\n\ninterface EncryptedEntry {\n iv: string;\n tag: string;\n data: string;\n}\n\ninterface CredentialStore {\n [key: string]: EncryptedEntry;\n}\n\nconst getCredentialsPath = (): string => {\n return path.join(getConfigDir(), CREDENTIALS_FILE);\n};\n\nconst getKeyPath = (): string => {\n return path.join(getConfigDir(), KEY_FILE);\n};\n\nconst getOrCreateKey = (): Buffer => {\n const keyPath = getKeyPath();\n ensureConfigDir();\n\n if (fs.existsSync(keyPath)) {\n return Buffer.from(fs.readFileSync(keyPath, 'utf-8'), 'hex');\n }\n\n // Generate a random 256-bit key\n const key = crypto.randomBytes(32);\n fs.writeFileSync(keyPath, key.toString('hex'), { mode: 0o600 });\n return key;\n};\n\nconst encrypt = (text: string, key: Buffer): EncryptedEntry => {\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv(ALGORITHM, key, iv);\n let encrypted = cipher.update(text, 'utf-8', 'hex');\n encrypted += cipher.final('hex');\n const tag = cipher.getAuthTag();\n return {\n iv: iv.toString('hex'),\n tag: tag.toString('hex'),\n data: encrypted,\n };\n};\n\nconst decrypt = (entry: EncryptedEntry, key: Buffer): string => {\n const decipher = crypto.createDecipheriv(\n ALGORITHM,\n key,\n Buffer.from(entry.iv, 'hex'),\n );\n decipher.setAuthTag(Buffer.from(entry.tag, 'hex'));\n let decrypted = decipher.update(entry.data, 'hex', 'utf-8');\n decrypted += decipher.final('utf-8');\n return decrypted;\n};\n\nconst loadStore = (): CredentialStore => {\n const filePath = getCredentialsPath();\n if (!fs.existsSync(filePath)) return {};\n try {\n return JSON.parse(fs.readFileSync(filePath, 'utf-8')) as CredentialStore;\n } catch {\n return {};\n }\n};\n\nconst saveStore = (store: CredentialStore): void => {\n ensureConfigDir();\n const filePath = getCredentialsPath();\n fs.writeFileSync(filePath, JSON.stringify(store, null, 2), { mode: 0o600 });\n};\n\nconst getKey = (provider: string, profile: string): string => {\n return `${provider}:${profile}`;\n};\n\nexport const storeToken = async (\n provider: string,\n profile: string,\n token: string,\n): Promise<void> => {\n const key = getOrCreateKey();\n const store = loadStore();\n store[getKey(provider, profile)] = encrypt(token, key);\n saveStore(store);\n};\n\nexport const getToken = async (\n provider: string,\n profile: string,\n): Promise<string | null> => {\n try {\n const key = getOrCreateKey();\n const store = loadStore();\n const entry = store[getKey(provider, profile)];\n if (!entry) return null;\n return decrypt(entry, key);\n } catch {\n return null;\n }\n};\n\nexport const deleteToken = async (\n provider: string,\n profile: string,\n): Promise<boolean> => {\n const store = loadStore();\n const k = getKey(provider, profile);\n if (!(k in store)) return false;\n delete store[k];\n saveStore(store);\n return true;\n};\n","import fs from 'node:fs';\nimport { OrbitConfigSchema } from '../types/config.js';\nimport type { OrbitConfig } from '../types/config.js';\nimport { getConfigPath, ensureConfigDir } from '../utils/paths.js';\n\nconst defaultConfig: OrbitConfig = {\n providers: {},\n};\n\nexport const loadConfig = (): OrbitConfig => {\n const configPath = getConfigPath();\n\n if (!fs.existsSync(configPath)) {\n ensureConfigDir();\n fs.writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2), 'utf-8');\n return { ...defaultConfig };\n }\n\n const raw = fs.readFileSync(configPath, 'utf-8');\n const parsed: unknown = JSON.parse(raw);\n return OrbitConfigSchema.parse(parsed);\n};\n\nexport const saveConfig = (config: OrbitConfig): void => {\n ensureConfigDir();\n const configPath = getConfigPath();\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');\n};\n\nexport const addProfile = (\n provider: string,\n profile: string,\n metadata?: { email?: string },\n): void => {\n const config = loadConfig();\n\n if (!config.providers[provider]) {\n config.providers[provider] = { profiles: [], current: undefined };\n }\n\n const providerConfig = config.providers[provider];\n if (providerConfig && !providerConfig.profiles.includes(profile)) {\n providerConfig.profiles.push(profile);\n }\n\n if (metadata) {\n if (!providerConfig.metadata) {\n providerConfig.metadata = {};\n }\n providerConfig.metadata[profile] = metadata;\n }\n\n saveConfig(config);\n};\n\nexport const removeProfile = (provider: string, profile: string): void => {\n const config = loadConfig();\n const providerConfig = config.providers[provider];\n\n if (!providerConfig) return;\n\n providerConfig.profiles = providerConfig.profiles.filter((p) => p !== profile);\n\n if (providerConfig.current === profile) {\n providerConfig.current = undefined;\n }\n\n if (providerConfig.profiles.length === 0) {\n delete config.providers[provider];\n }\n\n saveConfig(config);\n};\n\nexport const setCurrentProfile = (provider: string, profile: string): void => {\n const config = loadConfig();\n const providerConfig = config.providers[provider];\n\n if (!providerConfig) {\n throw new Error(`No profiles found for provider \"${provider}\".`);\n }\n\n if (!providerConfig.profiles.includes(profile)) {\n throw new Error(`Profile \"${profile}\" does not exist for provider \"${provider}\".`);\n }\n\n providerConfig.current = profile;\n saveConfig(config);\n};\n\nexport const getCurrentProfile = (provider: string): string | undefined => {\n const config = loadConfig();\n return config.providers[provider]?.current;\n};\n\nexport const profileExists = (provider: string, profile: string): boolean => {\n const config = loadConfig();\n return config.providers[provider]?.profiles.includes(profile) ?? false;\n};\n","import { z } from 'zod';\n\nconst ProviderConfigSchema = z.object({\n profiles: z.array(z.string()),\n current: z.string().optional(),\n metadata: z.record(z.string(), z.object({ email: z.string().optional() })).optional(),\n});\n\nexport const OrbitConfigSchema = z.object({\n providers: z.record(z.string(), ProviderConfigSchema),\n});\n\nexport type ProviderConfig = z.infer<typeof ProviderConfigSchema>;\nexport type OrbitConfig = z.infer<typeof OrbitConfigSchema>;\n","import { z } from 'zod';\n\nconst nameSchema = z\n .string()\n .min(1, 'Name cannot be empty')\n .max(64, 'Name is too long')\n .regex(/^[a-zA-Z0-9_-]+$/, 'Name must be alphanumeric (hyphens and underscores allowed)');\n\nexport const validateProviderName = (name: string): string => {\n return nameSchema.parse(name);\n};\n\nexport const validateProfileName = (name: string): string => {\n return nameSchema.parse(name);\n};\n","import chalk from 'chalk';\n\nconst write = (stream: NodeJS.WriteStream, message: string): void => {\n stream.write(`${message}\\n`);\n};\n\nexport const logger = {\n info: (message: string): void => {\n write(process.stdout, chalk.blue('β„Ή') + ` ${message}`);\n },\n\n success: (message: string): void => {\n write(process.stdout, chalk.green('βœ”') + ` ${message}`);\n },\n\n warn: (message: string): void => {\n write(process.stderr, chalk.yellow('⚠') + ` ${message}`);\n },\n\n error: (message: string): void => {\n write(process.stderr, chalk.red('βœ–') + ` ${message}`);\n },\n\n plain: (message: string): void => {\n write(process.stdout, message);\n },\n\n newline: (): void => {\n write(process.stdout, '');\n },\n};\n","import { logger } from './logger.js';\nimport { ZodError } from 'zod';\n\nexport const handleError = (error: unknown): never => {\n if (error instanceof ZodError) {\n const messages = error.issues.map((e: { message: string }) => e.message).join(', ');\n logger.error(`Validation error: ${messages}`);\n process.exit(1);\n }\n\n if (error instanceof Error) {\n logger.error(error.message);\n\n if (process.env['ORBIT_DEBUG'] === '1') {\n logger.plain(error.stack ?? '');\n }\n\n process.exit(1);\n }\n\n logger.error('An unexpected error occurred.');\n process.exit(1);\n};\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { loadConfig } from '../storage/configStore.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const listCommand = new Command('list')\n .description('List all profiles across providers')\n .action(() => {\n try {\n const config = loadConfig();\n const providers = Object.keys(config.providers);\n\n if (providers.length === 0) {\n logger.info('No profiles configured yet. Use \"orbit add <provider> <profile>\" to get started.');\n return;\n }\n\n logger.newline();\n logger.plain(\n ` ${chalk.bold.underline('Provider'.padEnd(15))} ${chalk.bold.underline('Profile'.padEnd(20))} ${chalk.bold.underline('Email'.padEnd(30))} ${chalk.bold.underline('Status')}`,\n );\n logger.newline();\n\n for (const providerName of providers) {\n const providerConfig = config.providers[providerName];\n if (!providerConfig) continue;\n\n for (const profile of providerConfig.profiles) {\n const isCurrent = providerConfig.current === profile;\n const email = providerConfig.metadata?.[profile]?.email ?? '-';\n const status = isCurrent ? chalk.green('β˜… current') : chalk.dim('β€”');\n\n const providerDisplay = isCurrent\n ? chalk.cyan(providerName.padEnd(15))\n : chalk.white(providerName.padEnd(15));\n const profileDisplay = isCurrent\n ? chalk.cyan(profile.padEnd(20))\n : chalk.white(profile.padEnd(20));\n const emailDisplay = isCurrent\n ? chalk.cyan(email.padEnd(30))\n : chalk.gray(email.padEnd(30));\n\n logger.plain(` ${providerDisplay} ${profileDisplay} ${emailDisplay} ${status}`);\n }\n }\n\n logger.newline();\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport { getProvider } from '../providers/provider.interface.js';\nimport { deleteToken } from '../storage/keychain.js';\nimport { removeProfile, profileExists } from '../storage/configStore.js';\nimport { validateProviderName, validateProfileName } from '../utils/validator.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const removeCommand = new Command('remove')\n .description('Remove a cloud provider profile')\n .argument('<provider>', 'Cloud provider name')\n .argument('<profile>', 'Profile name to remove')\n .action(async (providerName: string, profileName: string) => {\n try {\n const validProvider = validateProviderName(providerName);\n const validProfile = validateProfileName(profileName);\n getProvider(validProvider); // Ensure provider is registered\n\n if (!profileExists(validProvider, validProfile)) {\n logger.error(`Profile \"${validProfile}\" does not exist for provider \"${validProvider}\".`);\n process.exit(1);\n }\n\n const spinner = ora('Removing profile...').start();\n\n spinner.text = 'Deleting token from secure storage...';\n await deleteToken(validProvider, validProfile);\n\n spinner.text = 'Updating configuration...';\n removeProfile(validProvider, validProfile);\n\n spinner.succeed(`Profile \"${validProfile}\" removed from ${validProvider}.`);\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import { Command } from 'commander';\nimport ora from 'ora';\nimport { getProvider } from '../providers/provider.interface.js';\nimport { setCurrentProfile, profileExists, getCurrentProfile } from '../storage/configStore.js';\nimport { validateProviderName, validateProfileName } from '../utils/validator.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const useCommand = new Command('use')\n .description('Set the current active profile for a provider')\n .argument('<provider>', 'Cloud provider name')\n .argument('<profile>', 'Profile name to activate')\n .action(async (providerName: string, profileName: string) => {\n try {\n const validProvider = validateProviderName(providerName);\n const validProfile = validateProfileName(profileName);\n const provider = getProvider(validProvider);\n\n if (!profileExists(validProvider, validProfile)) {\n logger.error(`Profile \"${validProfile}\" does not exist for provider \"${provider.name}\".`);\n process.exit(1);\n }\n\n const spinner = ora('Switching profile...').start();\n\n // Save current profile's auth state before switching\n const currentProfile = getCurrentProfile(validProvider);\n if (currentProfile && currentProfile !== validProfile && provider.captureAuth) {\n try {\n await provider.captureAuth(currentProfile);\n } catch {\n // Non-critical\n }\n }\n\n // Restore target profile's auth state\n if (provider.restoreAuth) {\n const restored = await provider.restoreAuth(validProfile);\n if (restored) {\n spinner.text = 'Auth credentials restored...';\n }\n }\n\n setCurrentProfile(validProvider, validProfile);\n spinner.succeed(`Now using profile \"${validProfile}\" for ${provider.name}.`);\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import { Command } from 'commander';\nimport { execa } from 'execa';\nimport { getProvider } from '../providers/provider.interface.js';\nimport { getToken } from '../storage/keychain.js';\nimport { profileExists, getCurrentProfile } from '../storage/configStore.js';\nimport { validateProviderName, validateProfileName } from '../utils/validator.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const runCommand = new Command('run')\n .description('Run a command with a specific provider profile')\n .argument('<provider>', 'Cloud provider name')\n .argument('<profile>', 'Profile name to use')\n .argument('<args...>', 'Command arguments to pass to the provider CLI')\n .passThroughOptions()\n .allowUnknownOption()\n .action(async (providerName: string, profileName: string, args: string[]) => {\n try {\n const validProvider = validateProviderName(providerName);\n const validProfile = validateProfileName(profileName);\n const provider = getProvider(validProvider);\n\n if (!profileExists(validProvider, validProfile)) {\n logger.error(`Profile \"${validProfile}\" does not exist for provider \"${provider.name}\".`);\n process.exit(1);\n }\n\n logger.info(`Running as ${provider.name}/${validProfile}...`);\n\n // Save current auth state and swap to target profile\n const currentProfile = getCurrentProfile(validProvider);\n let swapped = false;\n\n if (provider.restoreAuth) {\n // Save current auth state first\n if (currentProfile && currentProfile !== validProfile && provider.captureAuth) {\n try {\n await provider.captureAuth(currentProfile);\n } catch {\n // Non-critical\n }\n }\n\n // Restore target profile's auth\n swapped = await provider.restoreAuth(validProfile);\n }\n\n try {\n if (swapped) {\n // Auth swapped β€” run natively (no env injection needed)\n const cliName = provider.getCliName();\n const result = await execa(cliName, args, {\n stdio: 'inherit',\n reject: false,\n });\n process.exitCode = result.exitCode ?? 0;\n } else {\n // Fallback: inject VERCEL_TOKEN (for providers without auth swap)\n const token = await getToken(validProvider, validProfile);\n if (!token) {\n logger.error(`No token found for ${provider.name}/${validProfile}. Try adding it again with \"orbit add\".`);\n process.exit(1);\n }\n\n const cliName = provider.getCliName();\n const envVar = provider.getEnvVar();\n\n const result = await execa(cliName, args, {\n env: {\n ...process.env,\n [envVar]: token,\n },\n stdio: 'inherit',\n reject: false,\n });\n process.exitCode = result.exitCode ?? 0;\n }\n } finally {\n // Restore previous profile's auth\n if (swapped && currentProfile && currentProfile !== validProfile && provider.restoreAuth) {\n try {\n await provider.restoreAuth(currentProfile);\n } catch {\n // Non-critical\n }\n }\n }\n\n process.exit(process.exitCode ?? 0);\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import { Command } from 'commander';\nimport { execa } from 'execa';\nimport { getProvider } from '../providers/provider.interface.js';\nimport { getToken } from '../storage/keychain.js';\nimport { getCurrentProfile } from '../storage/configStore.js';\nimport { validateProviderName } from '../utils/validator.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const execCommand = new Command('exec')\n .description('Execute a command using the current active profile')\n .argument('<provider>', 'Cloud provider name')\n .argument('<args...>', 'Command arguments to pass to the provider CLI')\n .passThroughOptions()\n .allowUnknownOption()\n .action(async (providerName: string, args: string[]) => {\n try {\n const validProvider = validateProviderName(providerName);\n const provider = getProvider(validProvider);\n\n const currentProfile = getCurrentProfile(validProvider);\n\n if (!currentProfile) {\n logger.error(\n `No active profile set for ${provider.name}. Use \"orbit use ${validProvider} <profile>\" first.`,\n );\n process.exit(1);\n }\n\n // Ensure current profile's auth is active\n if (provider.restoreAuth) {\n await provider.restoreAuth(currentProfile);\n }\n\n const cliName = provider.getCliName();\n\n logger.info(`Running as ${provider.name}/${currentProfile}...`);\n\n // Try native execution first (auth.json is already swapped)\n if (provider.getAuthConfigPath?.()) {\n const result = await execa(cliName, args, {\n stdio: 'inherit',\n reject: false,\n });\n process.exit(result.exitCode ?? 0);\n }\n\n // Fallback: inject env var\n const token = await getToken(validProvider, currentProfile);\n\n if (!token) {\n logger.error(\n `No token found for ${provider.name}/${currentProfile}. Try adding it again with \"orbit add\".`,\n );\n process.exit(1);\n }\n\n const envVar = provider.getEnvVar();\n\n const result = await execa(cliName, args, {\n env: {\n ...process.env,\n [envVar]: token,\n },\n stdio: 'inherit',\n reject: false,\n });\n\n process.exit(result.exitCode ?? 0);\n } catch (error: unknown) {\n handleError(error);\n }\n });\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { loadConfig } from '../storage/configStore.js';\nimport { logger } from '../utils/logger.js';\nimport { handleError } from '../utils/errorHandler.js';\n\nexport const currentCommand = new Command('current')\n .description('Show current active profiles')\n .action(() => {\n try {\n const config = loadConfig();\n const providers = Object.keys(config.providers);\n\n if (providers.length === 0) {\n logger.info('No profiles configured yet.');\n return;\n }\n\n let hasActive = false;\n\n for (const providerName of providers) {\n const providerConfig = config.providers[providerName];\n if (providerConfig?.current) {\n logger.success(\n `${chalk.bold(providerName)}: ${chalk.cyan(providerConfig.current)}`,\n );\n hasActive = true;\n }\n }\n\n if (!hasActive) {\n logger.info('No active profiles set. Use \"orbit use <provider> <profile>\" to set one.');\n }\n } catch (error: unknown) {\n handleError(error);\n }\n });\n"],"mappings":"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","names":["Command","fs","path","os","os","path","fs","execa","chalk","fs","path","path","fs","fs","fs","z","spinner","chalk","Command","chalk","Command","providers","chalk","Command","ora","Command","ora","Command","ora","Command","ora","Command","Command","Command","execa","Command","result","execa","Command","chalk","Command","providers","chalk","require","Command"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@appuo/orbit",
3
- "version": "1.0.4",
4
- "description": "Switch cloud identities instantly. Multi-account profile manager for Vercel, AWS, and more. No logout required.",
3
+ "version": "1.0.5",
4
+ "description": "Switch Vercel identities instantly. Multi-account profile manager for Vercel CLI. No logout required.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "orbit": "dist/index.js"