@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 +24 -10
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# π Orbit
|
|
2
2
|
|
|
3
|
-
**Switch
|
|
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
|
|
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
|
|
71
|
-
| `orbit use
|
|
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
|
|
74
|
-
| `orbit run
|
|
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
|
|
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
|
|
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
|
-
"description": "Switch
|
|
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"
|