@bagsfm/bags-cli 0.1.0 → 0.1.2

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,5 +1,11 @@
1
1
  # @bagsfm/bags-cli
2
2
 
3
+ [![npm version](https://badge.fury.io/js/@bagsfm%2Fbags-cli.svg)](https://badge.fury.io/js/@bagsfm%2Fbags-cli)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@bagsfm/bags-cli.svg)](https://www.npmjs.com/package/@bagsfm/bags-cli)
5
+ [![license](https://img.shields.io/npm/l/@bagsfm/bags-cli.svg)](https://github.com/bagsfm/bags-cli/blob/main/LICENSE)
6
+ [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
7
+ [![Solana](https://img.shields.io/badge/Solana-9945FF?logo=solana&logoColor=white)](https://solana.com/)
8
+
3
9
  CLI for Bags authentication, trading, launches, fees, and configuration.
4
10
 
5
11
  ## Install
package/dist/index.js CHANGED
@@ -1347,7 +1347,7 @@ function registerWalletCommands(program2) {
1347
1347
 
1348
1348
  // src/index.ts
1349
1349
  var program = new Command();
1350
- program.name("bags").description("Bags CLI - auth, trading, launches, fees, and config").version("0.1.0").option("--json", "Output machine-readable JSON where supported");
1350
+ program.name("bags").description("Bags CLI - auth, trading, launches, fees, and config").version("0.1.2").option("--json", "Output machine-readable JSON where supported");
1351
1351
  registerSetupCommand(program);
1352
1352
  registerAuthCommands(program);
1353
1353
  registerWalletCommands(program);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands/setup.ts","../src/lib/auth.ts","../src/lib/wallet.ts","../src/lib/paths.ts","../src/lib/fs.ts","../src/lib/credentials.ts","../src/utils/errors.ts","../src/lib/command.ts","../src/lib/config.ts","../src/lib/prompt.ts","../src/utils/spinner.ts","../src/commands/auth.ts","../src/lib/output.ts","../src/commands/config.ts","../src/lib/sdk.ts","../src/lib/signer.ts","../src/lib/tx.ts","../src/commands/dexscreener.ts","../src/commands/fees.ts","../src/utils/format.ts","../src/commands/incorporation.ts","../src/commands/launch.ts","../src/commands/partner.ts","../src/commands/pool.ts","../src/commands/settings.ts","../src/commands/trade.ts","../src/commands/wallet.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { registerSetupCommand } from \"./commands/setup.js\";\nimport { registerAuthCommands } from \"./commands/auth.js\";\nimport { registerConfigCommands } from \"./commands/config.js\";\nimport { registerDexscreenerCommands } from \"./commands/dexscreener.js\";\nimport { registerFeesCommands } from \"./commands/fees.js\";\nimport { registerIncorporationCommands } from \"./commands/incorporation.js\";\nimport { registerLaunchCommands } from \"./commands/launch.js\";\nimport { registerPartnerCommands } from \"./commands/partner.js\";\nimport { registerPoolCommands } from \"./commands/pool.js\";\nimport { registerSettingsCommands } from \"./commands/settings.js\";\nimport { registerTradeCommands } from \"./commands/trade.js\";\nimport { registerWalletCommands } from \"./commands/wallet.js\";\nimport { handleCliError } from \"./utils/errors.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"bags\")\n .description(\"Bags CLI - auth, trading, launches, fees, and config\")\n .version(\"0.1.0\")\n .option(\"--json\", \"Output machine-readable JSON where supported\");\n\nregisterSetupCommand(program);\nregisterAuthCommands(program);\nregisterWalletCommands(program);\nregisterFeesCommands(program);\nregisterTradeCommands(program);\nregisterLaunchCommands(program);\nregisterConfigCommands(program);\nregisterPartnerCommands(program);\nregisterPoolCommands(program);\nregisterDexscreenerCommands(program);\nregisterIncorporationCommands(program);\nregisterSettingsCommands(program);\n\nasync function main() {\n try {\n await program.parseAsync(process.argv);\n } catch (error) {\n handleCliError(error);\n }\n}\n\nvoid main();\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { runAgentAuthFlow } from \"../lib/auth.js\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { loadCliConfig, saveCliConfig } from \"../lib/config.js\";\nimport { BAGS_KEYPAIR_PATH } from \"../lib/paths.js\";\nimport { flagOrPrompt, promptSecret } from \"../lib/prompt.js\";\nimport {\n detectKeyFormat,\n importKeypairFromBase58,\n importKeypairFromIntArray,\n} from \"../lib/wallet.js\";\nimport { withSpinner } from \"../utils/spinner.js\";\n\ntype SetupOptions = {\n rpcUrl?: string;\n privateKey?: string;\n keyName?: string;\n};\n\nexport function registerSetupCommand(program: Command): void {\n program\n .command(\"setup\")\n .description(\"First-run wizard: configure RPC, import wallet, and authenticate\")\n .option(\"--rpc-url <url>\", \"Solana RPC URL\")\n .option(\"--private-key <key>\", \"Private key (base58 or int array)\")\n .option(\"--key-name <name>\", \"Label for API key\", \"Bags CLI Key\")\n .action(\n wrapAction(async (command, options: SetupOptions) => {\n console.log(chalk.bold(\"\\nBags CLI Setup\\n\"));\n\n const rpcUrl = await flagOrPrompt(\n options.rpcUrl,\n \"Solana RPC URL (default: https://api.mainnet-beta.solana.com):\",\n );\n const resolvedRpc = rpcUrl.trim() === \"\" ? \"https://api.mainnet-beta.solana.com\" : rpcUrl.trim();\n\n const config = await loadCliConfig();\n await saveCliConfig({ ...config, rpcUrl: resolvedRpc });\n console.log(chalk.green(` RPC URL saved: ${resolvedRpc}`));\n\n let privateKeyRaw: string;\n if (options.privateKey) {\n privateKeyRaw = options.privateKey;\n } else {\n privateKeyRaw = await promptSecret(\"Private key (base58 or int array):\");\n }\n\n const format = detectKeyFormat(privateKeyRaw);\n const keypair = await withSpinner(\"Importing wallet\", async () => {\n if (format === \"intArray\") {\n return await importKeypairFromIntArray(privateKeyRaw);\n }\n return await importKeypairFromBase58(privateKeyRaw);\n });\n console.log(chalk.green(` Wallet imported: ${keypair.publicKey.toBase58()}`));\n\n const credentials = await withSpinner(\"Authenticating with Bags\", async () => {\n return await runAgentAuthFlow({\n keyName: options.keyName ?? \"Bags CLI Key\",\n keypairPath: BAGS_KEYPAIR_PATH,\n mfaCodeProvider: async () => await promptSecret(\"Enter MFA code:\"),\n });\n });\n\n const masked = `${credentials.apiKey.slice(0, 6)}...${credentials.apiKey.slice(-4)}`;\n console.log(\n chalk.bold.green(\"\\nSetup complete!\\n\") +\n ` Wallet: ${credentials.walletAddress}\\n` +\n ` API Key: ${masked}\\n` +\n ` RPC: ${resolvedRpc}\\n`,\n );\n }),\n );\n}\n","import bs58 from \"bs58\";\nimport nacl from \"tweetnacl\";\nimport { Keypair } from \"@solana/web3.js\";\nimport { loadKeypair, saveKeypair } from \"./wallet.js\";\nimport { BAGS_KEYPAIR_PATH } from \"./paths.js\";\nimport { BagsCredentials, saveCredentials } from \"./credentials.js\";\n\nconst BAGS_BASE_URL = \"https://public-api-v2.bags.fm/api/v1\";\n\ntype InitResponse = {\n message: string;\n nonce: string;\n};\n\ntype CallbackResponse = {\n apiKey?: string;\n keyId?: string;\n mfaRequired?: boolean;\n authCode?: string;\n};\n\nasync function post<T>(path: string, body: Record<string, unknown>): Promise<T> {\n const response = await fetch(`${BAGS_BASE_URL}${path}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n const json = (await response.json()) as {\n success: boolean;\n response?: T;\n error?: string;\n };\n\n if (!response.ok || !json.success || !json.response) {\n throw new Error(json.error ?? `Request failed: ${response.status}`);\n }\n\n return json.response;\n}\n\nexport async function getOrCreateAuthKeypair(path = BAGS_KEYPAIR_PATH): Promise<Keypair> {\n const existing = await loadKeypair(path);\n if (existing) {\n return existing;\n }\n const kp = Keypair.generate();\n await saveKeypair(kp, path);\n return kp;\n}\n\nexport async function authInit(address: string): Promise<InitResponse> {\n return await post<InitResponse>(\"/agent/v2/auth/init\", { address });\n}\n\nexport function signChallengeMessage(challengeMessageBase58: string, keypair: Keypair): string {\n const messageBytes = bs58.decode(challengeMessageBase58);\n const signatureBytes = nacl.sign.detached(messageBytes, keypair.secretKey);\n return bs58.encode(signatureBytes);\n}\n\nexport async function authSignatureCallback(args: {\n signature: string;\n address: string;\n nonce: string;\n keyName: string;\n}): Promise<CallbackResponse> {\n return await post<CallbackResponse>(\"/agent/v2/auth/callback\", args);\n}\n\nexport async function authMfaCallback(args: {\n authCode: string;\n mfaCode: string;\n keyName: string;\n}): Promise<CallbackResponse> {\n return await post<CallbackResponse>(\"/agent/v2/auth/callback\", args);\n}\n\nexport async function runAgentAuthFlow(args: {\n keyName: string;\n keypairPath?: string;\n mfaCodeProvider?: () => Promise<string>;\n}): Promise<BagsCredentials> {\n const keypair = await getOrCreateAuthKeypair(args.keypairPath);\n const address = keypair.publicKey.toBase58();\n\n const init = await authInit(address);\n const signature = signChallengeMessage(init.message, keypair);\n const first = await authSignatureCallback({\n signature,\n address,\n nonce: init.nonce,\n keyName: args.keyName,\n });\n\n let apiKey = first.apiKey;\n let keyId = first.keyId;\n\n if (!apiKey && first.mfaRequired) {\n if (!first.authCode) {\n throw new Error(\"MFA required, but no authCode returned by API.\");\n }\n if (!args.mfaCodeProvider) {\n throw new Error(\"MFA required. Please provide an MFA code.\");\n }\n const mfaCode = await args.mfaCodeProvider();\n const second = await authMfaCallback({\n authCode: first.authCode,\n mfaCode,\n keyName: args.keyName,\n });\n apiKey = second.apiKey;\n keyId = second.keyId;\n }\n\n if (!apiKey) {\n throw new Error(\"Authentication succeeded but API key was not returned.\");\n }\n\n const credentials: BagsCredentials = {\n apiKey,\n keyId,\n walletAddress: address,\n authenticatedAt: new Date().toISOString(),\n };\n\n await saveCredentials(credentials);\n return credentials;\n}\n","import { readFile, rm } from \"node:fs/promises\";\nimport { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { BAGS_KEYPAIR_PATH } from \"./paths.js\";\nimport { writeJsonSecure } from \"./fs.js\";\n\nfunction keypairFromSecret(secret: Uint8Array): Keypair {\n return Keypair.fromSecretKey(secret);\n}\n\nexport async function loadKeypair(path: string = BAGS_KEYPAIR_PATH): Promise<Keypair | null> {\n try {\n const raw = await readFile(path, \"utf8\");\n const parsed = JSON.parse(raw) as number[];\n return keypairFromSecret(Uint8Array.from(parsed));\n } catch {\n return null;\n }\n}\n\nexport async function saveKeypair(keypair: Keypair, path: string = BAGS_KEYPAIR_PATH): Promise<void> {\n await writeJsonSecure(path, Array.from(keypair.secretKey));\n}\n\nexport async function generateKeypair(force = false, path: string = BAGS_KEYPAIR_PATH): Promise<Keypair> {\n const existing = await loadKeypair(path);\n if (existing && !force) {\n throw new Error(`Keypair already exists at ${path}. Use --force to overwrite.`);\n }\n const kp = Keypair.generate();\n await saveKeypair(kp, path);\n return kp;\n}\n\nexport async function importKeypairFromBase58(base58PrivateKey: string, path: string = BAGS_KEYPAIR_PATH): Promise<Keypair> {\n const secret = bs58.decode(base58PrivateKey);\n const kp = keypairFromSecret(secret);\n await saveKeypair(kp, path);\n return kp;\n}\n\nexport async function importKeypairFromJsonFile(filePath: string, path: string = BAGS_KEYPAIR_PATH): Promise<Keypair> {\n const raw = await readFile(filePath, \"utf8\");\n const parsed = JSON.parse(raw) as number[];\n const kp = keypairFromSecret(Uint8Array.from(parsed));\n await saveKeypair(kp, path);\n return kp;\n}\n\nexport function detectKeyFormat(raw: string): \"base58\" | \"intArray\" {\n const trimmed = raw.trim();\n if (trimmed.startsWith(\"[\") || /^\\d+\\s*,/.test(trimmed)) {\n return \"intArray\";\n }\n return \"base58\";\n}\n\nexport async function importKeypairFromIntArray(\n intArrayStr: string,\n path: string = BAGS_KEYPAIR_PATH,\n): Promise<Keypair> {\n let input = intArrayStr.trim();\n if (!input.startsWith(\"[\")) {\n input = `[${input}]`;\n }\n const parsed = JSON.parse(input) as number[];\n if (!Array.isArray(parsed) || !parsed.every((n) => Number.isInteger(n))) {\n throw new Error(\"Invalid int array format.\");\n }\n const kp = keypairFromSecret(Uint8Array.from(parsed));\n await saveKeypair(kp, path);\n return kp;\n}\n\nexport async function deleteKeypair(path: string = BAGS_KEYPAIR_PATH): Promise<void> {\n try {\n await rm(path, { force: true });\n } catch {\n // noop\n }\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const BAGS_CONFIG_DIR = join(homedir(), \".config\", \"bags\");\nexport const BAGS_KEYPAIR_PATH = join(BAGS_CONFIG_DIR, \"keypair.json\");\nexport const BAGS_CREDENTIALS_PATH = join(BAGS_CONFIG_DIR, \"credentials.json\");\nexport const BAGS_SETTINGS_PATH = join(BAGS_CONFIG_DIR, \"config.json\");\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nexport async function ensureDirectory(path: string): Promise<void> {\n await mkdir(path, { recursive: true, mode: 0o700 });\n}\n\nexport async function writeJsonSecure(path: string, value: unknown): Promise<void> {\n await mkdir(dirname(path), { recursive: true, mode: 0o700 });\n await writeFile(path, `${JSON.stringify(value, null, 2)}\\n`, { mode: 0o600 });\n}\n","import { readFile, rm } from \"node:fs/promises\";\nimport { BAGS_CREDENTIALS_PATH } from \"./paths.js\";\nimport { writeJsonSecure } from \"./fs.js\";\n\nexport type BagsCredentials = {\n apiKey: string;\n keyId?: string;\n walletAddress: string;\n authenticatedAt: string;\n};\n\nexport async function loadCredentials(): Promise<BagsCredentials | null> {\n try {\n const raw = await readFile(BAGS_CREDENTIALS_PATH, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<BagsCredentials>;\n\n if (!parsed.apiKey || !parsed.walletAddress) {\n return null;\n }\n\n return {\n apiKey: parsed.apiKey,\n keyId: parsed.keyId,\n walletAddress: parsed.walletAddress,\n authenticatedAt: parsed.authenticatedAt ?? new Date().toISOString(),\n };\n } catch {\n return null;\n }\n}\n\nexport async function saveCredentials(credentials: BagsCredentials): Promise<void> {\n await writeJsonSecure(BAGS_CREDENTIALS_PATH, credentials);\n}\n\nexport async function clearCredentials(): Promise<void> {\n try {\n await rm(BAGS_CREDENTIALS_PATH, { force: true });\n } catch {\n // noop\n }\n}\n","import chalk from \"chalk\";\n\nfunction isUserAbort(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n return (\n error.message.includes(\"force closed\") ||\n error.message.includes(\"SIGINT\") ||\n error.name === \"ExitPromptError\"\n );\n}\n\nexport function handleCliError(error: unknown): never {\n if (isUserAbort(error)) {\n console.log(chalk.dim(\"Goodbye.\"));\n process.exit(0);\n }\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(chalk.red(\"Unexpected error\"), error);\n }\n process.exit(1);\n}\n","import type { Command } from \"commander\";\nimport { handleCliError } from \"../utils/errors.js\";\n\nexport function wrapAction<T extends unknown[]>(\n fn: (command: Command, ...args: T) => Promise<void>,\n): (...args: [...T, Command]) => Promise<void> {\n return async (...args: [...T, Command]) => {\n const command = args[args.length - 1] as Command;\n const rest = args.slice(0, -1) as T;\n try {\n await fn(command, ...rest);\n } catch (error) {\n handleCliError(error);\n }\n };\n}\n","import { readFile } from \"node:fs/promises\";\nimport { BAGS_SETTINGS_PATH } from \"./paths.js\";\nimport { writeJsonSecure } from \"./fs.js\";\n\nexport type OutputMode = \"pretty\" | \"table\" | \"json\";\n\nexport type CliConfig = {\n rpcUrl: string;\n commitment: \"processed\" | \"confirmed\" | \"finalized\";\n output: OutputMode;\n};\n\nexport const DEFAULT_CLI_CONFIG: CliConfig = {\n rpcUrl: \"https://api.mainnet-beta.solana.com\",\n commitment: \"processed\",\n output: \"pretty\",\n};\n\nexport async function loadCliConfig(): Promise<CliConfig> {\n try {\n const raw = await readFile(BAGS_SETTINGS_PATH, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<CliConfig>;\n return {\n rpcUrl: parsed.rpcUrl ?? DEFAULT_CLI_CONFIG.rpcUrl,\n commitment: parsed.commitment ?? DEFAULT_CLI_CONFIG.commitment,\n output: parsed.output ?? DEFAULT_CLI_CONFIG.output,\n };\n } catch {\n return DEFAULT_CLI_CONFIG;\n }\n}\n\nexport async function saveCliConfig(value: CliConfig): Promise<void> {\n await writeJsonSecure(BAGS_SETTINGS_PATH, value);\n}\n","import { confirm, input, password, select } from \"@inquirer/prompts\";\n\nexport async function flagOrPrompt(\n value: string | undefined,\n message: string,\n validate?: (value: string) => boolean | string,\n): Promise<string> {\n if (value !== undefined && value !== \"\") {\n return value;\n }\n return await input({ message, validate });\n}\n\nexport async function optionalFlagOrPrompt(value: string | undefined, message: string): Promise<string | undefined> {\n if (value !== undefined) {\n return value;\n }\n const next = await input({ message });\n return next.trim() === \"\" ? undefined : next;\n}\n\nexport async function flagOrPromptNumber(\n value: number | undefined,\n message: string,\n defaultValue?: number,\n): Promise<number> {\n if (value !== undefined) {\n return value;\n }\n const raw = await input({ message, default: defaultValue?.toString() });\n const n = Number(raw);\n if (!Number.isFinite(n)) {\n throw new Error(`Invalid number: ${raw}`);\n }\n return n;\n}\n\nexport async function promptConfirm(message: string, defaultValue = true): Promise<boolean> {\n return await confirm({ message, default: defaultValue });\n}\n\nexport async function promptSecret(message: string): Promise<string> {\n return await password({ message, mask: \"*\" });\n}\n\nexport async function promptOneOf<K extends string>(\n flags: Record<K, string | undefined>,\n labels: Record<K, string>,\n promptMessages: Record<K, string>,\n): Promise<{ key: K; value: string }> {\n const keys = Object.keys(flags) as K[];\n const provided = keys.filter((k) => flags[k] !== undefined && flags[k] !== \"\");\n if (provided.length > 1) {\n throw new Error(`Only one of ${keys.map((k) => `--${String(k)}`).join(\", \")} can be provided.`);\n }\n if (provided.length === 1) {\n return { key: provided[0], value: flags[provided[0]]! };\n }\n const key = await select({\n message: \"Choose one:\",\n choices: keys.map((k) => ({ name: labels[k], value: k })),\n });\n const value = await input({ message: promptMessages[key] });\n if (!value.trim()) {\n throw new Error(`A value is required.`);\n }\n return { key, value };\n}\n","import ora from \"ora\";\n\nexport async function withSpinner<T>(message: string, fn: () => Promise<T>): Promise<T> {\n const spinner = ora(message).start();\n try {\n const result = await fn();\n spinner.succeed(message);\n return result;\n } catch (error) {\n spinner.fail(`${message} failed`);\n throw error;\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { runAgentAuthFlow } from \"../lib/auth.js\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { clearCredentials, loadCredentials } from \"../lib/credentials.js\";\nimport { printData } from \"../lib/output.js\";\nimport { BAGS_KEYPAIR_PATH } from \"../lib/paths.js\";\nimport { promptSecret } from \"../lib/prompt.js\";\nimport { deleteKeypair } from \"../lib/wallet.js\";\nimport { withSpinner } from \"../utils/spinner.js\";\n\ntype LoginOptions = {\n keypair?: string;\n keyName?: string;\n};\n\ntype LogoutOptions = {\n all?: boolean;\n};\n\nexport function registerAuthCommands(program: Command): void {\n const auth = program.command(\"auth\").description(\"Agent authentication commands\");\n\n auth\n .command(\"login\")\n .description(\"Authenticate via wallet signature flow and store API key\")\n .option(\"--keypair <path>\", \"Custom keypair path\")\n .option(\"--key-name <name>\", \"Label for API key\", \"Bags CLI Key\")\n .action(\n wrapAction(async (command, options: LoginOptions) => {\n const credentials = await withSpinner(\"Authenticating with Bags\", async () => {\n return await runAgentAuthFlow({\n keyName: options.keyName ?? \"Bags CLI Key\",\n keypairPath: options.keypair ?? BAGS_KEYPAIR_PATH,\n mfaCodeProvider: async () => await promptSecret(\"Enter MFA code\"),\n });\n });\n console.log(chalk.green(\"Authentication successful.\"));\n await printData(command, {\n walletAddress: credentials.walletAddress,\n keyId: credentials.keyId ?? null,\n authenticatedAt: credentials.authenticatedAt,\n });\n }),\n );\n\n auth\n .command(\"status\")\n .description(\"Show current authentication state\")\n .action(\n wrapAction(async (command) => {\n const credentials = await loadCredentials();\n if (!credentials) {\n console.log(chalk.yellow(\"Not authenticated. Run `bags auth login`.\"));\n return;\n }\n const masked = `${credentials.apiKey.slice(0, 6)}...${credentials.apiKey.slice(-4)}`;\n await printData(command, {\n authenticated: true,\n walletAddress: credentials.walletAddress,\n apiKey: masked,\n keyId: credentials.keyId ?? null,\n authenticatedAt: credentials.authenticatedAt,\n });\n }),\n );\n\n auth\n .command(\"logout\")\n .description(\"Remove credentials. Optionally remove keypair too\")\n .option(\"--all\", \"Also remove wallet keypair\")\n .action(\n wrapAction(async (_command, options: LogoutOptions) => {\n await clearCredentials();\n if (options.all) {\n await deleteKeypair();\n }\n console.log(chalk.green(`Logged out${options.all ? \" and deleted keypair\" : \"\"}.`));\n }),\n );\n}\n","import chalk from \"chalk\";\nimport Table from \"cli-table3\";\nimport type { Command } from \"commander\";\nimport { loadCliConfig } from \"./config.js\";\n\nexport async function shouldUseJson(command: Command): Promise<boolean> {\n const globalOpts = command.optsWithGlobals() as { json?: boolean };\n if (globalOpts.json) {\n return true;\n }\n const config = await loadCliConfig();\n return config.output === \"json\";\n}\n\nfunction formatValue(value: unknown): string {\n if (value === null || value === undefined) {\n return chalk.dim(\"—\");\n }\n if (typeof value === \"boolean\") {\n return value ? chalk.green(\"yes\") : chalk.red(\"no\");\n }\n if (typeof value === \"number\") {\n return chalk.cyan(String(value));\n }\n return String(value);\n}\n\nfunction printKeyValue(data: Record<string, unknown>): void {\n const keys = Object.keys(data);\n const maxLen = Math.max(...keys.map((k) => k.length));\n for (const key of keys) {\n const val = data[key];\n if (val !== null && typeof val === \"object\" && !Array.isArray(val)) {\n console.log(` ${chalk.bold(key.padEnd(maxLen))}:`);\n printKeyValue(val as Record<string, unknown>);\n continue;\n }\n if (Array.isArray(val)) {\n console.log(` ${chalk.bold(key.padEnd(maxLen))} ${chalk.dim(`[${val.length} items]`)}`);\n for (const item of val) {\n if (item !== null && typeof item === \"object\") {\n const summary = Object.entries(item as Record<string, unknown>)\n .map(([k, v]) => `${k}=${formatValue(v)}`)\n .join(\" \");\n console.log(` ${chalk.dim(\"•\")} ${summary}`);\n } else {\n console.log(` ${chalk.dim(\"•\")} ${formatValue(item)}`);\n }\n }\n continue;\n }\n console.log(` ${chalk.bold(key.padEnd(maxLen))} ${formatValue(val)}`);\n }\n}\n\nexport async function printData(command: Command, data: unknown): Promise<void> {\n if (await shouldUseJson(command)) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n printKeyValue(data as Record<string, unknown>);\n return;\n }\n if (Array.isArray(data)) {\n for (const item of data) {\n if (item !== null && typeof item === \"object\") {\n printKeyValue(item as Record<string, unknown>);\n console.log();\n } else {\n console.log(formatValue(item));\n }\n }\n return;\n }\n console.log(formatValue(data));\n}\n\nexport async function printTable(\n command: Command,\n headers: string[],\n rows: Array<Array<string | number | boolean>>,\n): Promise<void> {\n if (await shouldUseJson(command)) {\n const keys = headers.map((h) => h.toLowerCase().replace(/\\s+/g, \"_\"));\n const mapped = rows.map((row) => {\n const item: Record<string, string | number | boolean> = {};\n keys.forEach((key, i) => {\n item[key] = row[i] ?? \"\";\n });\n return item;\n });\n console.log(JSON.stringify(mapped, null, 2));\n return;\n }\n\n const table = new Table({ head: headers });\n for (const row of rows) {\n table.push(row);\n }\n console.log(table.toString());\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt, promptConfirm } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\nimport { getLocalSigner } from \"../lib/signer.js\";\nimport { signAndSend } from \"../lib/tx.js\";\n\ntype ConfigOptions = {\n mint?: string;\n feeClaimers?: string;\n partner?: string;\n newAdmin?: string;\n skipConfirm?: boolean;\n};\n\nfunction parseClaimers(raw?: string): Array<{ user: PublicKey; userBps: number }> {\n if (!raw) {\n throw new Error(\"--fee-claimers is required. Example: '[{\\\"user\\\":\\\"...\\\",\\\"userBps\\\":10000}]'\");\n }\n const parsed = JSON.parse(raw) as Array<{ user: string; userBps: number }>;\n return parsed.map((x) => ({ user: new PublicKey(x.user), userBps: x.userBps }));\n}\n\nexport function registerConfigCommands(program: Command): void {\n const config = program.command(\"config\").description(\"Fee share configuration\");\n\n config\n .command(\"create\")\n .description(\"Create a fee share config for a token\")\n .option(\"--mint <address>\", \"Base mint\")\n .option(\"--fee-claimers <json>\", \"JSON array [{user,userBps}]\")\n .option(\"--partner <pubkey>\", \"Partner wallet\")\n .option(\"--skip-confirm\", \"Skip confirmation\")\n .action(\n wrapAction(async (command, options: ConfigOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Base mint:\"));\n const feeClaimers = parseClaimers(options.feeClaimers);\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Create fee config for ${mint.toBase58()}?`);\n if (!ok) return;\n }\n\n const result = await (sdk as any).config.createBagsFeeShareConfig({\n payer: keypair.publicKey,\n baseMint: mint,\n feeClaimers,\n partner: options.partner ? new PublicKey(options.partner) : undefined,\n });\n\n const signatures: string[] = [];\n if (Array.isArray(result.transactions)) {\n for (const tx of result.transactions) {\n signatures.push(await signAndSend(connection, commitment, tx, keypair));\n }\n }\n\n await printData(command, {\n meteoraConfigKey: result.meteoraConfigKey?.toString?.() ?? result.meteoraConfigKey,\n signatures,\n });\n }),\n );\n\n config\n .command(\"update\")\n .description(\"Update fee share config as admin\")\n .option(\"--mint <address>\", \"Base mint\")\n .option(\"--fee-claimers <json>\", \"JSON array [{user,userBps}]\")\n .option(\"--skip-confirm\", \"Skip confirmation\")\n .action(\n wrapAction(async (command, options: ConfigOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Base mint:\"));\n const feeClaimers = parseClaimers(options.feeClaimers);\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Update admin config for ${mint.toBase58()}?`);\n if (!ok) return;\n }\n\n const result = await (sdk as any).feeShareAdmin.createUpdateConfigTransactions({\n payer: keypair.publicKey,\n baseMint: mint,\n feeClaimers,\n });\n\n const signatures: string[] = [];\n if (Array.isArray(result.transactions)) {\n for (const tx of result.transactions) {\n signatures.push(await signAndSend(connection, commitment, tx, keypair));\n }\n }\n await printData(command, { signatures });\n }),\n );\n\n config\n .command(\"transfer-admin\")\n .description(\"Transfer fee share admin authority\")\n .option(\"--mint <address>\", \"Base mint\")\n .option(\"--new-admin <pubkey>\", \"New admin wallet\")\n .option(\"--skip-confirm\", \"Skip confirmation\")\n .action(\n wrapAction(async (command, options: ConfigOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Base mint:\"));\n const newAdmin = new PublicKey(await flagOrPrompt(options.newAdmin, \"New admin:\"));\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Transfer admin for ${mint.toBase58()} to ${newAdmin.toBase58()}?`);\n if (!ok) return;\n }\n\n const tx = await (sdk as any).feeShareAdmin.createTransferAdminTransaction({\n payer: keypair.publicKey,\n baseMint: mint,\n newAdmin,\n });\n const signature = await signAndSend(connection, commitment, tx, keypair);\n await printData(command, { signature });\n }),\n );\n\n config\n .command(\"admin-list\")\n .description(\"List mints where wallet is fee share admin\")\n .action(\n wrapAction(async (command) => {\n const { sdk } = await getSdkContext();\n const { keypair } = await getLocalSigner();\n const list = await (sdk as any).feeShareAdmin.getAdminTokenMints(keypair.publicKey);\n await printData(command, list);\n }),\n );\n}\n","import { Connection } from \"@solana/web3.js\";\nimport { BagsSDK } from \"@bagsfm/bags-sdk\";\nimport { loadCredentials } from \"./credentials.js\";\nimport { loadCliConfig } from \"./config.js\";\n\ntype SdkContext = {\n sdk: BagsSDK;\n connection: Connection;\n};\n\nlet cached: SdkContext | null = null;\n\nexport async function getSdkContext(forceRefresh = false): Promise<SdkContext> {\n if (cached && !forceRefresh) {\n return cached;\n }\n\n const credentials = await loadCredentials();\n if (!credentials) {\n throw new Error(\"Not authenticated. Run `bags auth login` first.\");\n }\n\n const config = await loadCliConfig();\n const connection = new Connection(config.rpcUrl, config.commitment);\n const sdk = new BagsSDK(credentials.apiKey, connection, config.commitment);\n\n cached = { sdk, connection };\n return cached;\n}\n","import { loadCliConfig } from \"./config.js\";\nimport { loadKeypair } from \"./wallet.js\";\n\nexport async function getLocalSigner() {\n const keypair = await loadKeypair();\n if (!keypair) {\n throw new Error(\"No local keypair found. Run `bags wallet generate` or `bags wallet import`.\");\n }\n const config = await loadCliConfig();\n return { keypair, commitment: config.commitment };\n}\n","import { signAndSendTransaction } from \"@bagsfm/bags-sdk\";\nimport type { Connection, Keypair, VersionedTransaction } from \"@solana/web3.js\";\n\nexport async function signAndSend(\n connection: Connection,\n commitment: \"processed\" | \"confirmed\" | \"finalized\",\n transaction: VersionedTransaction,\n keypair: Keypair,\n): Promise<string> {\n const signature = await signAndSendTransaction(connection, commitment, transaction, keypair);\n return signature;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\n\ntype MintOptions = {\n mint?: string;\n payload?: string;\n};\n\ntype PaymentOptions = {\n orderId?: string;\n transaction?: string;\n};\n\nexport function registerDexscreenerCommands(program: Command): void {\n const dexscreener = program.command(\"dexscreener\").description(\"Dexscreener order flows\");\n\n dexscreener\n .command(\"check\")\n .description(\"Check Dexscreener order availability\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Token mint:\"));\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).dexscreener.checkOrderAvailability(mint);\n await printData(command, result);\n }),\n );\n\n dexscreener\n .command(\"order\")\n .description(\"Create Dexscreener order\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--payload <json>\", \"Raw JSON payload override\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = await flagOrPrompt(options.mint, \"Token mint:\");\n const payload =\n options.payload !== undefined\n ? (JSON.parse(options.payload) as Record<string, unknown>)\n : {\n tokenMint: mint,\n };\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).dexscreener.createOrder(payload);\n await printData(command, result);\n }),\n );\n\n dexscreener\n .command(\"pay\")\n .description(\"Submit Dexscreener payment\")\n .option(\"--order-id <id>\", \"Order ID\")\n .option(\"--transaction <tx>\", \"Signed serialized transaction\")\n .action(\n wrapAction(async (command, options: PaymentOptions) => {\n const orderId = await flagOrPrompt(options.orderId, \"Order ID:\");\n const transaction = await flagOrPrompt(options.transaction, \"Signed transaction:\");\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).dexscreener.submitPayment({ orderId, transaction });\n await printData(command, result);\n }),\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { getSdkContext } from \"../lib/sdk.js\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData, printTable } from \"../lib/output.js\";\nimport { flagOrPrompt, flagOrPromptNumber, promptConfirm } from \"../lib/prompt.js\";\nimport { getLocalSigner } from \"../lib/signer.js\";\nimport { signAndSend } from \"../lib/tx.js\";\nimport { lamportsToSol, shortAddress } from \"../utils/format.js\";\n\ntype MintOptions = {\n mint?: string;\n raw?: boolean;\n skipConfirm?: boolean;\n offset?: number;\n limit?: number;\n startTime?: string;\n endTime?: string;\n};\n\nasync function resolveMint(value?: string): Promise<PublicKey> {\n const mint = await flagOrPrompt(value, \"Token mint:\");\n return new PublicKey(mint);\n}\n\nasync function getClaimTransactionsForMint(sdk: unknown, wallet: PublicKey, mint: PublicKey): Promise<any[]> {\n const fee = (sdk as any).fee;\n if (typeof fee.getClaimTransactions === \"function\") {\n return await fee.getClaimTransactions(wallet, mint);\n }\n if (typeof fee.getClaimTransaction === \"function\") {\n const tx = await fee.getClaimTransaction(wallet, mint);\n return tx ? [tx] : [];\n }\n throw new Error(\"This SDK version does not expose claim transaction methods.\");\n}\n\nexport function registerFeesCommands(program: Command): void {\n const fees = program.command(\"fees\").description(\"Fee claiming and fee analytics\");\n\n fees\n .command(\"list\")\n .description(\"List claimable fee positions for local wallet\")\n .action(\n wrapAction(async (command) => {\n const { sdk } = await getSdkContext();\n const { keypair } = await getLocalSigner();\n const positions = await (sdk as any).fee.getAllClaimablePositions(keypair.publicKey);\n const rows = (positions as any[]).map((p) => [\n String(p.baseMint ?? \"\"),\n Number(p.totalClaimableLamportsUserShare ?? 0),\n p.isCustomFeeVault ? \"yes\" : \"no\",\n ]);\n await printTable(command, [\"Mint\", \"Claimable Lamports\", \"Custom Vault\"], rows);\n }),\n );\n\n fees\n .command(\"claim\")\n .description(\"Claim fees for a single token mint\")\n .argument(\"[mint]\", \"Token mint address\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--skip-confirm\", \"Skip transaction confirmation\")\n .action(\n wrapAction(async (command, mintArg: string | undefined, options: MintOptions) => {\n const mint = await resolveMint(mintArg ?? options.mint);\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Claim fees for ${mint.toBase58()}?`);\n if (!ok) {\n return;\n }\n }\n\n const transactions = await getClaimTransactionsForMint(sdk, keypair.publicKey, mint);\n const signatures: string[] = [];\n for (const tx of transactions) {\n signatures.push(await signAndSend(connection, commitment, tx, keypair));\n }\n await printData(command, { mint: mint.toBase58(), signatures });\n }),\n );\n\n fees\n .command(\"claim-all\")\n .description(\"Claim all claimable fees for the local wallet\")\n .option(\"--skip-confirm\", \"Skip transaction confirmation\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n const feeService = (sdk as any).fee;\n const positions = (await feeService.getAllClaimablePositions(keypair.publicKey)) as any[];\n const mints = [...new Set(positions.map((p) => String(p.baseMint)))];\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Claim fees across ${mints.length} token(s)?`);\n if (!ok) {\n return;\n }\n }\n\n const sent: Array<{ mint: string; signatures: string[] }> = [];\n for (const mint of mints) {\n const txs = await getClaimTransactionsForMint(sdk, keypair.publicKey, new PublicKey(mint));\n const signatures: string[] = [];\n for (const tx of txs) {\n signatures.push(await signAndSend(connection, commitment, tx, keypair));\n }\n sent.push({ mint, signatures });\n }\n\n await printData(command, { count: sent.length, claims: sent });\n }),\n );\n\n fees\n .command(\"lifetime\")\n .description(\"Get token lifetime fees\")\n .argument(\"[mint]\", \"Token mint address\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--raw\", \"Show raw lamports instead of SOL\")\n .action(\n wrapAction(async (command, mintArg: string | undefined, options: MintOptions) => {\n const mint = await resolveMint(mintArg ?? options.mint);\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getTokenLifetimeFees(mint);\n if (typeof result === \"number\") {\n await printData(command, {\n mint: mint.toBase58(),\n lifetimeFees: options.raw ? `${result} lamports` : `${lamportsToSol(result)} SOL`,\n });\n } else {\n await printData(command, result);\n }\n }),\n );\n\n fees\n .command(\"events\")\n .description(\"Get token claim events\")\n .argument(\"[mint]\", \"Token mint address\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--offset <n>\", \"Offset\", Number)\n .option(\"--limit <n>\", \"Limit\", Number)\n .option(\"--start-time <iso>\", \"Start timestamp (ISO)\")\n .option(\"--end-time <iso>\", \"End timestamp (ISO)\")\n .action(\n wrapAction(async (command, mintArg: string | undefined, options: MintOptions) => {\n const mint = await resolveMint(mintArg ?? options.mint);\n const { sdk } = await getSdkContext();\n const payload: Record<string, unknown> = { mint: mint.toBase58() };\n if (options.offset !== undefined) payload.offset = options.offset;\n if (options.limit !== undefined) payload.limit = options.limit;\n if (options.startTime) payload.startTime = options.startTime;\n if (options.endTime) payload.endTime = options.endTime;\n const result = await (sdk as any).state.getTokenClaimEvents(payload);\n await printData(command, result);\n }),\n );\n\n fees\n .command(\"stats\")\n .description(\"Get token claim stats\")\n .argument(\"[mint]\", \"Token mint address\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, mintArg: string | undefined, options: MintOptions) => {\n const mint = await resolveMint(mintArg ?? options.mint);\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getTokenClaimStats(mint);\n await printData(command, result);\n }),\n );\n}\n","export function lamportsToSol(lamports: number): string {\n return (lamports / 1_000_000_000).toFixed(9);\n}\n\nexport function shortAddress(value: string): string {\n if (value.length < 10) {\n return value;\n }\n return `${value.slice(0, 4)}...${value.slice(-4)}`;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\n\ntype MintOptions = {\n mint?: string;\n payload?: string;\n};\n\ntype SubmitOptions = {\n mint?: string;\n companyName?: string;\n founders?: string;\n category?: string;\n};\n\nexport function registerIncorporationCommands(program: Command): void {\n const inc = program.command(\"incorporation\").description(\"Incorporation project flows\");\n\n inc\n .command(\"pay\")\n .description(\"Start incorporation payment\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--payload <json>\", \"Raw JSON payload override\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = await flagOrPrompt(options.mint, \"Token mint:\");\n const { sdk } = await getSdkContext();\n const payload =\n options.payload !== undefined\n ? (JSON.parse(options.payload) as Record<string, unknown>)\n : { tokenMint: mint };\n const result = await (sdk as any).incorporation.startPayment(payload);\n await printData(command, result);\n }),\n );\n\n inc\n .command(\"submit\")\n .description(\"Submit incorporation details\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--company-name <name>\", \"Company name\")\n .option(\"--founders <json>\", \"JSON founders array\")\n .option(\"--category <value>\", \"Project category\")\n .action(\n wrapAction(async (command, options: SubmitOptions) => {\n const mint = await flagOrPrompt(options.mint, \"Token mint:\");\n const companyName = await flagOrPrompt(options.companyName, \"Company name:\");\n const foundersRaw = await flagOrPrompt(options.founders, \"Founders JSON:\");\n const category = await flagOrPrompt(options.category, \"Category:\");\n const founders = JSON.parse(foundersRaw) as unknown[];\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).incorporation.incorporate({\n tokenMint: mint,\n companyName,\n founders,\n category,\n });\n await printData(command, result);\n }),\n );\n\n inc\n .command(\"start\")\n .description(\"Start incorporation process\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = await flagOrPrompt(options.mint, \"Token mint:\");\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).incorporation.startIncorporation({ tokenMint: mint });\n await printData(command, result);\n }),\n );\n\n inc\n .command(\"list\")\n .description(\"List incorporation projects for API key\")\n .action(\n wrapAction(async (command) => {\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).incorporation.list();\n await printData(command, result);\n }),\n );\n\n inc\n .command(\"details\")\n .description(\"Get incorporation details by token mint\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Token mint:\"));\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).incorporation.getDetails(mint);\n await printData(command, result);\n }),\n );\n}\n","import {\n BAGS_FEE_SHARE_V2_MAX_CLAIMERS_NON_LUT,\n createTipTransaction,\n sendBundleAndConfirm,\n waitForSlotsToPass,\n} from \"@bagsfm/bags-sdk\";\nimport { LAMPORTS_PER_SOL, PublicKey, VersionedTransaction } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt, flagOrPromptNumber, optionalFlagOrPrompt, promptConfirm, promptOneOf } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\nimport { getLocalSigner } from \"../lib/signer.js\";\nimport { signAndSend } from \"../lib/tx.js\";\nimport chalk from \"chalk\";\nimport { confirm, input, select } from \"@inquirer/prompts\";\nimport { shortAddress } from \"../utils/format.js\";\n\nconst SOCIAL_PROVIDERS = [\"twitter\", \"github\", \"kick\", \"tiktok\"] as const;\ntype SocialProvider = (typeof SOCIAL_PROVIDERS)[number];\nconst MAX_CLAIMERS = 100;\nconst TOTAL_BPS = 10000;\n\ntype FeeClaimerInput = {\n provider?: SocialProvider;\n username?: string;\n wallet?: string;\n bps: number;\n};\n\ntype LaunchCreateOptions = {\n name?: string;\n symbol?: string;\n description?: string;\n imageUrl?: string;\n image?: string;\n twitter?: string;\n website?: string;\n telegram?: string;\n initialBuy?: number;\n feeClaimers?: string;\n partner?: string;\n partnerConfig?: string;\n skipConfirm?: boolean;\n};\n\ntype FeedOptions = { limit?: number };\ntype MintOptions = { mint?: string };\n\nasync function sendBundleWithTip(\n sdk: any,\n connection: any,\n keypair: any,\n unsignedTransactions: VersionedTransaction[],\n): Promise<string> {\n const bundleBlockhash = unsignedTransactions[0]?.message.recentBlockhash;\n if (!bundleBlockhash) {\n throw new Error(\"Missing blockhash in bundle transaction.\");\n }\n\n let tipLamports = Math.floor(0.015 * LAMPORTS_PER_SOL);\n try {\n const fees = await sdk.solana.getJitoRecentFees();\n if (fees?.landed_tips_95th_percentile) {\n tipLamports = Math.floor(Number(fees.landed_tips_95th_percentile) * LAMPORTS_PER_SOL);\n }\n } catch {\n // fallback tip\n }\n\n const tipTx = await createTipTransaction(connection, sdk.state.getCommitment(), keypair.publicKey, tipLamports, {\n blockhash: bundleBlockhash,\n });\n const signed = [tipTx, ...unsignedTransactions].map((tx) => {\n tx.sign([keypair]);\n return tx;\n });\n return await sendBundleAndConfirm(signed, sdk);\n}\n\nfunction parseFeeClaimers(raw?: string): FeeClaimerInput[] {\n if (!raw) {\n return [];\n }\n const parsed = JSON.parse(raw) as FeeClaimerInput[];\n if (!Array.isArray(parsed)) {\n throw new Error(\"--fee-claimers must be a JSON array.\");\n }\n return parsed;\n}\n\nfunction printClaimerSummary(claimers: FeeClaimerInput[]): void {\n const usedBps = claimers.reduce((s, c) => s + c.bps, 0);\n console.log(chalk.dim(\"\\n Fee claimers:\"));\n claimers.forEach((c, i) => {\n const label = c.wallet\n ? `wallet:${shortAddress(c.wallet)}`\n : `${c.provider}:${c.username}`;\n console.log(` ${i + 1}. ${label.padEnd(28)} ${(c.bps / 100).toFixed(2)}%`);\n });\n console.log(chalk.dim(` Creator keeps: ${((TOTAL_BPS - usedBps) / 100).toFixed(2)}%\\n`));\n}\n\nasync function buildFeeClaimersInteractive(): Promise<FeeClaimerInput[]> {\n const shareFees = await confirm({ message: \"Share fees with others?\", default: false });\n if (!shareFees) {\n return [];\n }\n\n const claimers: FeeClaimerInput[] = [];\n let usedBps = 0;\n\n while (claimers.length < MAX_CLAIMERS && usedBps < TOTAL_BPS) {\n const remaining = TOTAL_BPS - usedBps;\n console.log(chalk.dim(`\\n Adding fee claimer ${claimers.length + 1}/${MAX_CLAIMERS} (${remaining} BPS remaining)`));\n\n const type = await select({\n message: \"Claimer type:\",\n choices: [\n { name: \"Social media account\", value: \"social\" as const },\n { name: \"Direct wallet address\", value: \"wallet\" as const },\n ],\n });\n\n let claimer: FeeClaimerInput;\n\n if (type === \"social\") {\n const provider = await select({\n message: \"Platform:\",\n choices: SOCIAL_PROVIDERS.map((p) => ({ name: p, value: p })),\n });\n const username = await input({ message: \"Username:\" });\n if (!username.trim()) {\n throw new Error(\"Username is required.\");\n }\n const bps = await inputBps(remaining);\n claimer = { provider, username: username.trim(), bps };\n } else {\n const wallet = await input({ message: \"Wallet address:\" });\n if (!wallet.trim()) {\n throw new Error(\"Wallet address is required.\");\n }\n new PublicKey(wallet.trim());\n const bps = await inputBps(remaining);\n claimer = { wallet: wallet.trim(), bps };\n }\n\n claimers.push(claimer);\n usedBps += claimer.bps;\n printClaimerSummary(claimers);\n\n if (claimers.length >= MAX_CLAIMERS || usedBps >= TOTAL_BPS) {\n break;\n }\n\n const more = await confirm({ message: \"Add another fee claimer?\", default: true });\n if (!more) {\n break;\n }\n }\n\n return claimers;\n}\n\nasync function inputBps(remaining: number): Promise<number> {\n const raw = await input({\n message: `Basis points (1-${remaining}, e.g. 3000 = 30%):`,\n validate: (val) => {\n const n = Number(val);\n if (!Number.isInteger(n) || n < 1 || n > remaining) {\n return `Enter a whole number between 1 and ${remaining}.`;\n }\n return true;\n },\n });\n return Number(raw);\n}\n\nexport function registerLaunchCommands(program: Command): void {\n const launch = program.command(\"launch\").description(\"Token launch flows\");\n\n launch\n .command(\"create\")\n .description(\"Create and launch a token\")\n .option(\"--name <name>\", \"Token name\")\n .option(\"--symbol <symbol>\", \"Token symbol\")\n .option(\"--description <description>\", \"Token description\")\n .option(\"--image-url <url>\", \"Image URL\")\n .option(\"--image <path>\", \"Image file path\")\n .option(\"--twitter <url>\", \"Twitter URL\")\n .option(\"--website <url>\", \"Website URL\")\n .option(\"--telegram <url>\", \"Telegram URL\")\n .option(\"--initial-buy <lamports>\", \"Initial buy amount in lamports\", Number)\n .option(\"--fee-claimers <json>\", \"JSON array of fee claimers\")\n .option(\"--partner <pubkey>\", \"Partner wallet\")\n .option(\"--partner-config <pubkey>\", \"Partner config PDA\")\n .option(\"--skip-confirm\", \"Skip final confirmation\")\n .action(\n wrapAction(async (command, options: LaunchCreateOptions) => {\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n const name = await flagOrPrompt(options.name, \"Token name:\");\n const symbol = await flagOrPrompt(options.symbol, \"Token symbol:\");\n const description = await flagOrPrompt(options.description, \"Token description:\");\n\n const imageChoice = await promptOneOf(\n { imageUrl: options.imageUrl, image: options.image },\n { imageUrl: \"Image URL\", image: \"Image file path\" },\n { imageUrl: \"Image URL:\", image: \"Image file path:\" },\n );\n const imageUrl = imageChoice.key === \"imageUrl\" ? imageChoice.value : undefined;\n const image = imageChoice.key === \"image\" ? imageChoice.value : undefined;\n\n const initialBuy = await flagOrPromptNumber(options.initialBuy, \"Initial buy (lamports):\", 10_000_000);\n const twitter = await optionalFlagOrPrompt(options.twitter, \"Twitter URL (optional):\");\n const website = await optionalFlagOrPrompt(options.website, \"Website URL (optional):\");\n const telegram = await optionalFlagOrPrompt(options.telegram, \"Telegram URL (optional):\");\n\n const feeClaimersInput = options.feeClaimers\n ? parseFeeClaimers(options.feeClaimers)\n : await buildFeeClaimersInteractive();\n\n if (!options.skipConfirm) {\n let summary = `Launch ${name} (${symbol}) with initial buy ${initialBuy} lamports from ${keypair.publicKey.toBase58()}`;\n if (feeClaimersInput.length > 0) {\n const allocBps = feeClaimersInput.reduce((s, c) => s + c.bps, 0);\n const lines = feeClaimersInput.map((c) => {\n const label = c.wallet\n ? `wallet:${shortAddress(c.wallet)}`\n : `${c.provider}:${c.username}`;\n return ` ${label} ${(c.bps / 100).toFixed(2)}%`;\n });\n lines.push(` creator: ${((TOTAL_BPS - allocBps) / 100).toFixed(2)}%`);\n summary += `\\n\\nFee split:\\n${lines.join(\"\\n\")}`;\n } else {\n summary += \"\\n\\nFee split: 100% to creator\";\n }\n const ok = await promptConfirm(`${summary}\\n\\nProceed?`);\n if (!ok) {\n return;\n }\n }\n\n const metadata = await (sdk as any).tokenLaunch.createTokenInfoAndMetadata({\n imageUrl,\n imagePath: image,\n name,\n symbol: symbol.toUpperCase().replace(\"$\", \"\"),\n description,\n twitter,\n website,\n telegram,\n });\n\n const tokenMint = new PublicKey(metadata.tokenMint);\n const feeClaimers: Array<{ user: PublicKey; userBps: number }> = [];\n\n if (feeClaimersInput.length > 0) {\n const allocatedBps = feeClaimersInput.reduce((sum, c) => sum + c.bps, 0);\n const creatorBps = TOTAL_BPS - allocatedBps;\n if (creatorBps < 0) {\n throw new Error(\"Total fee claimer BPS exceeds 10000.\");\n }\n if (creatorBps > 0) {\n feeClaimers.push({ user: keypair.publicKey, userBps: creatorBps });\n }\n for (const claimer of feeClaimersInput) {\n if (claimer.wallet) {\n feeClaimers.push({ user: new PublicKey(claimer.wallet), userBps: claimer.bps });\n } else if (claimer.username && claimer.provider) {\n const user = await (sdk as any).state.getLaunchWalletV2(claimer.username, claimer.provider);\n feeClaimers.push({ user: user.wallet, userBps: claimer.bps });\n } else {\n throw new Error(\"Each fee claimer must have either wallet or provider+username.\");\n }\n }\n } else {\n feeClaimers.push({ user: keypair.publicKey, userBps: TOTAL_BPS });\n }\n\n let additionalLookupTables: PublicKey[] | undefined;\n if (feeClaimers.length > BAGS_FEE_SHARE_V2_MAX_CLAIMERS_NON_LUT) {\n const lutResult = await (sdk as any).config.getConfigCreationLookupTableTransactions({\n payer: keypair.publicKey,\n baseMint: tokenMint,\n feeClaimers,\n });\n await signAndSend(connection, commitment, lutResult.creationTransaction, keypair);\n await waitForSlotsToPass(connection, commitment, 1);\n for (const tx of lutResult.extendTransactions) {\n await signAndSend(connection, commitment, tx, keypair);\n }\n additionalLookupTables = lutResult.lutAddresses;\n }\n\n const configResult = await (sdk as any).config.createBagsFeeShareConfig({\n payer: keypair.publicKey,\n baseMint: tokenMint,\n feeClaimers,\n partner: options.partner ? new PublicKey(options.partner) : undefined,\n partnerConfig: options.partnerConfig ? new PublicKey(options.partnerConfig) : undefined,\n additionalLookupTables,\n });\n\n if (Array.isArray(configResult.bundles)) {\n for (const bundle of configResult.bundles) {\n await sendBundleWithTip(sdk, connection, keypair, bundle);\n }\n }\n if (Array.isArray(configResult.transactions)) {\n for (const tx of configResult.transactions) {\n await signAndSend(connection, commitment, tx, keypair);\n }\n }\n\n const launchTx = await (sdk as any).tokenLaunch.createLaunchTransaction({\n metadataUrl: metadata.tokenMetadata,\n tokenMint,\n launchWallet: keypair.publicKey,\n initialBuyLamports: initialBuy,\n configKey: configResult.meteoraConfigKey,\n });\n const signature = await signAndSend(connection, commitment, launchTx, keypair);\n await printData(command, {\n tokenMint: metadata.tokenMint,\n metadataUrl: metadata.tokenMetadata,\n configKey: configResult.meteoraConfigKey?.toString?.() ?? configResult.meteoraConfigKey,\n signature,\n });\n }),\n );\n\n launch\n .command(\"feed\")\n .description(\"Get token launch feed\")\n .option(\"--limit <n>\", \"Number of items\", Number)\n .action(\n wrapAction(async (command, options: FeedOptions) => {\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getTokenLaunchFeed({ limit: options.limit ?? 20 });\n await printData(command, result);\n }),\n );\n\n launch\n .command(\"creators\")\n .description(\"Get creators for a token mint\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Token mint:\"));\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getTokenCreators(mint);\n await printData(command, result);\n }),\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt, promptConfirm } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\nimport { getLocalSigner } from \"../lib/signer.js\";\nimport { signAndSend } from \"../lib/tx.js\";\n\ntype PartnerOptions = {\n partner?: string;\n skipConfirm?: boolean;\n};\n\nexport function registerPartnerCommands(program: Command): void {\n const partner = program.command(\"partner\").description(\"Partner configuration and claim\");\n\n partner\n .command(\"create\")\n .description(\"Create partner config for local wallet\")\n .option(\"--skip-confirm\", \"Skip confirmation\")\n .action(\n wrapAction(async (command, options: PartnerOptions) => {\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Create partner config for ${keypair.publicKey.toBase58()}?`);\n if (!ok) return;\n }\n const tx = await (sdk as any).partner.createPartnerConfigTransaction(keypair.publicKey);\n const signature = await signAndSend(connection, commitment, tx, keypair);\n await printData(command, { signature });\n }),\n );\n\n partner\n .command(\"stats\")\n .description(\"Get partner stats\")\n .option(\"--partner <pubkey>\", \"Partner wallet pubkey\")\n .action(\n wrapAction(async (command, options: PartnerOptions) => {\n const { sdk } = await getSdkContext();\n const { keypair } = await getLocalSigner();\n const partnerWallet = new PublicKey(await flagOrPrompt(options.partner, \"Partner wallet (default local):\"));\n const stats = await (sdk as any).partner.getPartnerStats(partnerWallet ?? keypair.publicKey);\n await printData(command, stats);\n }),\n );\n\n partner\n .command(\"claim\")\n .description(\"Claim partner fees\")\n .option(\"--skip-confirm\", \"Skip confirmation\")\n .action(\n wrapAction(async (command, options: PartnerOptions) => {\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Claim partner fees for ${keypair.publicKey.toBase58()}?`);\n if (!ok) return;\n }\n\n const txs = await (sdk as any).partner.getPartnerClaimTransactions(keypair.publicKey);\n const signatures: string[] = [];\n for (const tx of txs as any[]) {\n signatures.push(await signAndSend(connection, commitment, tx, keypair));\n }\n await printData(command, { signatures });\n }),\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\n\ntype PoolListOptions = {\n limit?: number;\n offset?: number;\n};\n\ntype MintOptions = {\n mint?: string;\n};\n\nexport function registerPoolCommands(program: Command): void {\n const pool = program.command(\"pool\").description(\"Pool lookup commands\");\n\n pool\n .command(\"list\")\n .description(\"List Bags pools\")\n .option(\"--limit <n>\", \"Limit\", Number)\n .option(\"--offset <n>\", \"Offset\", Number)\n .action(\n wrapAction(async (command, options: PoolListOptions) => {\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getBagsPools({\n limit: options.limit ?? 50,\n offset: options.offset ?? 0,\n });\n await printData(command, result);\n }),\n );\n\n pool\n .command(\"get\")\n .description(\"Get Bags pool by token mint\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Token mint:\"));\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getBagsPoolByTokenMint(mint);\n await printData(command, result);\n }),\n );\n}\n","import { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { CliConfig, loadCliConfig, OutputMode, saveCliConfig } from \"../lib/config.js\";\nimport { printData } from \"../lib/output.js\";\n\ntype SetOptions = {\n rpcUrl?: string;\n commitment?: \"processed\" | \"confirmed\" | \"finalized\";\n output?: OutputMode;\n};\n\nexport function registerSettingsCommands(program: Command): void {\n const settings = program.command(\"settings\").description(\"CLI settings\");\n\n settings\n .command(\"show\")\n .description(\"Show current settings\")\n .action(\n wrapAction(async (command) => {\n const config = await loadCliConfig();\n await printData(command, config);\n }),\n );\n\n settings\n .command(\"set\")\n .description(\"Set one or more settings\")\n .option(\"--rpc-url <url>\", \"Default RPC URL\")\n .option(\"--commitment <level>\", \"processed|confirmed|finalized\")\n .option(\"--output <mode>\", \"pretty|table|json\")\n .action(\n wrapAction(async (command, options: SetOptions) => {\n const current = await loadCliConfig();\n const next: CliConfig = {\n rpcUrl: options.rpcUrl ?? current.rpcUrl,\n commitment: options.commitment ?? current.commitment,\n output: options.output ?? current.output,\n };\n await saveCliConfig(next);\n await printData(command, next);\n }),\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt, flagOrPromptNumber, promptConfirm } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\nimport { getLocalSigner } from \"../lib/signer.js\";\nimport { signAndSend } from \"../lib/tx.js\";\n\ntype TradeOptions = {\n inputMint?: string;\n outputMint?: string;\n amount?: number;\n slippageMode?: \"auto\" | \"manual\";\n slippageBps?: number;\n skipConfirm?: boolean;\n};\n\nasync function resolveQuoteOptions(options: TradeOptions) {\n const inputMint = new PublicKey(await flagOrPrompt(options.inputMint, \"Input mint:\"));\n const outputMint = new PublicKey(await flagOrPrompt(options.outputMint, \"Output mint:\"));\n const amount = await flagOrPromptNumber(options.amount, \"Amount (base units):\");\n const slippageMode = (await flagOrPrompt(options.slippageMode, \"Slippage mode (auto/manual):\")) as\n | \"auto\"\n | \"manual\";\n const slippageBps =\n slippageMode === \"manual\" ? await flagOrPromptNumber(options.slippageBps, \"Slippage BPS (e.g. 100):\") : undefined;\n return { inputMint, outputMint, amount, slippageMode, slippageBps };\n}\n\nexport function registerTradeCommands(program: Command): void {\n const trade = program.command(\"trade\").description(\"Quote and execute swaps\");\n\n trade\n .command(\"quote\")\n .description(\"Get a swap quote\")\n .option(\"--input-mint <address>\", \"Input token mint\")\n .option(\"--output-mint <address>\", \"Output token mint\")\n .option(\"--amount <amount>\", \"Amount in base units\", Number)\n .option(\"--slippage-mode <mode>\", \"auto or manual\", \"auto\")\n .option(\"--slippage-bps <bps>\", \"Required for manual mode\", Number)\n .action(\n wrapAction(async (command, options: TradeOptions) => {\n const { sdk } = await getSdkContext();\n const quoteArgs = await resolveQuoteOptions(options);\n const quote = await (sdk as any).trade.getQuote(quoteArgs);\n await printData(command, quote);\n }),\n );\n\n trade\n .command(\"swap\")\n .description(\"Execute a swap (quote + transaction send)\")\n .option(\"--input-mint <address>\", \"Input token mint\")\n .option(\"--output-mint <address>\", \"Output token mint\")\n .option(\"--amount <amount>\", \"Amount in base units\", Number)\n .option(\"--slippage-mode <mode>\", \"auto or manual\", \"auto\")\n .option(\"--slippage-bps <bps>\", \"Required for manual mode\", Number)\n .option(\"--skip-confirm\", \"Skip transaction confirmation\")\n .action(\n wrapAction(async (command, options: TradeOptions) => {\n const quoteArgs = await resolveQuoteOptions(options);\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n const quote = await (sdk as any).trade.getQuote(quoteArgs);\n if (!options.skipConfirm) {\n const ok = await promptConfirm(\n `Swap ${quoteArgs.amount} from ${quoteArgs.inputMint.toBase58()} to ${quoteArgs.outputMint.toBase58()}?`,\n );\n if (!ok) {\n return;\n }\n }\n\n const swap = await (sdk as any).trade.createSwapTransaction({\n quoteResponse: quote,\n userPublicKey: keypair.publicKey,\n });\n const signature = await signAndSend(connection, commitment, swap.transaction, keypair);\n await printData(command, { signature, quote, computeUnitLimit: swap.computeUnitLimit });\n }),\n );\n}\n","import { Command } from \"commander\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { loadCliConfig } from \"../lib/config.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt } from \"../lib/prompt.js\";\nimport {\n BAGS_KEYPAIR_PATH,\n} from \"../lib/paths.js\";\nimport {\n generateKeypair,\n importKeypairFromBase58,\n importKeypairFromJsonFile,\n loadKeypair,\n} from \"../lib/wallet.js\";\nimport { lamportsToSol } from \"../utils/format.js\";\n\ntype GenerateOptions = {\n force?: boolean;\n};\n\ntype ImportOptions = {\n key?: string;\n file?: string;\n};\n\ntype BalanceOptions = {\n rpc?: string;\n token?: string;\n};\n\nexport function registerWalletCommands(program: Command): void {\n const wallet = program.command(\"wallet\").description(\"Wallet management commands\");\n\n wallet\n .command(\"generate\")\n .description(\"Generate and save a new local Solana keypair\")\n .option(\"--force\", \"Overwrite existing keypair\")\n .action(\n wrapAction(async (command, options: GenerateOptions) => {\n const kp = await generateKeypair(Boolean(options.force));\n await printData(command, { publicKey: kp.publicKey.toBase58(), path: BAGS_KEYPAIR_PATH });\n }),\n );\n\n wallet\n .command(\"import\")\n .description(\"Import keypair from base58 key or JSON secret file\")\n .option(\"--key <base58>\", \"Base58 private key\")\n .option(\"--file <path>\", \"JSON file containing secret key bytes\")\n .action(\n wrapAction(async (command, options: ImportOptions) => {\n let kp;\n if (options.key) {\n kp = await importKeypairFromBase58(options.key);\n } else if (options.file) {\n kp = await importKeypairFromJsonFile(options.file);\n } else {\n const method = await flagOrPrompt(undefined, \"Import method (key/file):\");\n if (method === \"file\") {\n const file = await flagOrPrompt(undefined, \"Path to keypair JSON file:\");\n kp = await importKeypairFromJsonFile(file);\n } else {\n const key = await flagOrPrompt(undefined, \"Base58 private key:\");\n kp = await importKeypairFromBase58(key);\n }\n }\n await printData(command, { publicKey: kp.publicKey.toBase58(), path: BAGS_KEYPAIR_PATH });\n }),\n );\n\n wallet\n .command(\"show\")\n .description(\"Show wallet address and SOL balance\")\n .option(\"--rpc <url>\", \"Override RPC URL\")\n .action(\n wrapAction(async (command, options: BalanceOptions) => {\n const kp = await loadKeypair();\n if (!kp) {\n throw new Error(\"No local keypair found. Run `bags wallet generate` or `bags wallet import`.\");\n }\n const config = await loadCliConfig();\n const connection = new Connection(options.rpc ?? config.rpcUrl, config.commitment);\n let sol = \"unknown\";\n try {\n const lamports = await connection.getBalance(kp.publicKey, config.commitment);\n sol = `${lamportsToSol(lamports)} SOL`;\n } catch {\n // RPC may be unreachable; still show the address\n }\n await printData(command, {\n publicKey: kp.publicKey.toBase58(),\n balance: sol,\n keypairPath: BAGS_KEYPAIR_PATH,\n });\n }),\n );\n\n wallet\n .command(\"balance\")\n .description(\"Show SOL or SPL token balance\")\n .option(\"--rpc <url>\", \"Override RPC URL\")\n .option(\"--token <mint>\", \"SPL token mint address\")\n .action(\n wrapAction(async (command, options: BalanceOptions) => {\n const kp = await loadKeypair();\n if (!kp) {\n throw new Error(\"No local keypair found.\");\n }\n const config = await loadCliConfig();\n const connection = new Connection(options.rpc ?? config.rpcUrl, config.commitment);\n\n if (options.token) {\n const mint = new PublicKey(options.token);\n const accounts = await connection.getParsedTokenAccountsByOwner(kp.publicKey, { mint });\n if (accounts.value.length === 0) {\n await printData(command, {\n publicKey: kp.publicKey.toBase58(),\n token: mint.toBase58(),\n balance: \"0\",\n });\n return;\n }\n const info = accounts.value[0].account.data.parsed.info.tokenAmount;\n await printData(command, {\n publicKey: kp.publicKey.toBase58(),\n token: mint.toBase58(),\n balance: `${info.uiAmountString} (raw: ${info.amount})`,\n });\n return;\n }\n\n const lamports = await connection.getBalance(kp.publicKey, config.commitment);\n await printData(command, {\n publicKey: kp.publicKey.toBase58(),\n balance: `${lamportsToSol(lamports)} SOL`,\n });\n }),\n );\n}\n"],"mappings":"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","names":["chalk","bs58","Keypair","input","readFile","rm","readFile","rm","Keypair","bs58","readFile","readFile","program","chalk","chalk","chalk","chalk","program","chalk","program","PublicKey","program","PublicKey","PublicKey","PublicKey","program","PublicKey","program","PublicKey","PublicKey","chalk","confirm","input","select","chalk","confirm","select","input","PublicKey","program","PublicKey","program","PublicKey","PublicKey","program","PublicKey","program","PublicKey","PublicKey","program","Connection","PublicKey","program","Connection","PublicKey"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/setup.ts","../src/lib/auth.ts","../src/lib/wallet.ts","../src/lib/paths.ts","../src/lib/fs.ts","../src/lib/credentials.ts","../src/utils/errors.ts","../src/lib/command.ts","../src/lib/config.ts","../src/lib/prompt.ts","../src/utils/spinner.ts","../src/commands/auth.ts","../src/lib/output.ts","../src/commands/config.ts","../src/lib/sdk.ts","../src/lib/signer.ts","../src/lib/tx.ts","../src/commands/dexscreener.ts","../src/commands/fees.ts","../src/utils/format.ts","../src/commands/incorporation.ts","../src/commands/launch.ts","../src/commands/partner.ts","../src/commands/pool.ts","../src/commands/settings.ts","../src/commands/trade.ts","../src/commands/wallet.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { registerSetupCommand } from \"./commands/setup.js\";\nimport { registerAuthCommands } from \"./commands/auth.js\";\nimport { registerConfigCommands } from \"./commands/config.js\";\nimport { registerDexscreenerCommands } from \"./commands/dexscreener.js\";\nimport { registerFeesCommands } from \"./commands/fees.js\";\nimport { registerIncorporationCommands } from \"./commands/incorporation.js\";\nimport { registerLaunchCommands } from \"./commands/launch.js\";\nimport { registerPartnerCommands } from \"./commands/partner.js\";\nimport { registerPoolCommands } from \"./commands/pool.js\";\nimport { registerSettingsCommands } from \"./commands/settings.js\";\nimport { registerTradeCommands } from \"./commands/trade.js\";\nimport { registerWalletCommands } from \"./commands/wallet.js\";\nimport { handleCliError } from \"./utils/errors.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"bags\")\n .description(\"Bags CLI - auth, trading, launches, fees, and config\")\n .version(\"0.1.2\")\n .option(\"--json\", \"Output machine-readable JSON where supported\");\n\nregisterSetupCommand(program);\nregisterAuthCommands(program);\nregisterWalletCommands(program);\nregisterFeesCommands(program);\nregisterTradeCommands(program);\nregisterLaunchCommands(program);\nregisterConfigCommands(program);\nregisterPartnerCommands(program);\nregisterPoolCommands(program);\nregisterDexscreenerCommands(program);\nregisterIncorporationCommands(program);\nregisterSettingsCommands(program);\n\nasync function main() {\n try {\n await program.parseAsync(process.argv);\n } catch (error) {\n handleCliError(error);\n }\n}\n\nvoid main();\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { runAgentAuthFlow } from \"../lib/auth.js\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { loadCliConfig, saveCliConfig } from \"../lib/config.js\";\nimport { BAGS_KEYPAIR_PATH } from \"../lib/paths.js\";\nimport { flagOrPrompt, promptSecret } from \"../lib/prompt.js\";\nimport {\n detectKeyFormat,\n importKeypairFromBase58,\n importKeypairFromIntArray,\n} from \"../lib/wallet.js\";\nimport { withSpinner } from \"../utils/spinner.js\";\n\ntype SetupOptions = {\n rpcUrl?: string;\n privateKey?: string;\n keyName?: string;\n};\n\nexport function registerSetupCommand(program: Command): void {\n program\n .command(\"setup\")\n .description(\"First-run wizard: configure RPC, import wallet, and authenticate\")\n .option(\"--rpc-url <url>\", \"Solana RPC URL\")\n .option(\"--private-key <key>\", \"Private key (base58 or int array)\")\n .option(\"--key-name <name>\", \"Label for API key\", \"Bags CLI Key\")\n .action(\n wrapAction(async (command, options: SetupOptions) => {\n console.log(chalk.bold(\"\\nBags CLI Setup\\n\"));\n\n const rpcUrl = await flagOrPrompt(\n options.rpcUrl,\n \"Solana RPC URL (default: https://api.mainnet-beta.solana.com):\",\n );\n const resolvedRpc = rpcUrl.trim() === \"\" ? \"https://api.mainnet-beta.solana.com\" : rpcUrl.trim();\n\n const config = await loadCliConfig();\n await saveCliConfig({ ...config, rpcUrl: resolvedRpc });\n console.log(chalk.green(` RPC URL saved: ${resolvedRpc}`));\n\n let privateKeyRaw: string;\n if (options.privateKey) {\n privateKeyRaw = options.privateKey;\n } else {\n privateKeyRaw = await promptSecret(\"Private key (base58 or int array):\");\n }\n\n const format = detectKeyFormat(privateKeyRaw);\n const keypair = await withSpinner(\"Importing wallet\", async () => {\n if (format === \"intArray\") {\n return await importKeypairFromIntArray(privateKeyRaw);\n }\n return await importKeypairFromBase58(privateKeyRaw);\n });\n console.log(chalk.green(` Wallet imported: ${keypair.publicKey.toBase58()}`));\n\n const credentials = await withSpinner(\"Authenticating with Bags\", async () => {\n return await runAgentAuthFlow({\n keyName: options.keyName ?? \"Bags CLI Key\",\n keypairPath: BAGS_KEYPAIR_PATH,\n mfaCodeProvider: async () => await promptSecret(\"Enter MFA code:\"),\n });\n });\n\n const masked = `${credentials.apiKey.slice(0, 6)}...${credentials.apiKey.slice(-4)}`;\n console.log(\n chalk.bold.green(\"\\nSetup complete!\\n\") +\n ` Wallet: ${credentials.walletAddress}\\n` +\n ` API Key: ${masked}\\n` +\n ` RPC: ${resolvedRpc}\\n`,\n );\n }),\n );\n}\n","import bs58 from \"bs58\";\nimport nacl from \"tweetnacl\";\nimport { Keypair } from \"@solana/web3.js\";\nimport { loadKeypair, saveKeypair } from \"./wallet.js\";\nimport { BAGS_KEYPAIR_PATH } from \"./paths.js\";\nimport { BagsCredentials, saveCredentials } from \"./credentials.js\";\n\nconst BAGS_BASE_URL = \"https://public-api-v2.bags.fm/api/v1\";\n\ntype InitResponse = {\n message: string;\n nonce: string;\n};\n\ntype CallbackResponse = {\n apiKey?: string;\n keyId?: string;\n mfaRequired?: boolean;\n authCode?: string;\n};\n\nasync function post<T>(path: string, body: Record<string, unknown>): Promise<T> {\n const response = await fetch(`${BAGS_BASE_URL}${path}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n const json = (await response.json()) as {\n success: boolean;\n response?: T;\n error?: string;\n };\n\n if (!response.ok || !json.success || !json.response) {\n throw new Error(json.error ?? `Request failed: ${response.status}`);\n }\n\n return json.response;\n}\n\nexport async function getOrCreateAuthKeypair(path = BAGS_KEYPAIR_PATH): Promise<Keypair> {\n const existing = await loadKeypair(path);\n if (existing) {\n return existing;\n }\n const kp = Keypair.generate();\n await saveKeypair(kp, path);\n return kp;\n}\n\nexport async function authInit(address: string): Promise<InitResponse> {\n return await post<InitResponse>(\"/agent/v2/auth/init\", { address });\n}\n\nexport function signChallengeMessage(challengeMessageBase58: string, keypair: Keypair): string {\n const messageBytes = bs58.decode(challengeMessageBase58);\n const signatureBytes = nacl.sign.detached(messageBytes, keypair.secretKey);\n return bs58.encode(signatureBytes);\n}\n\nexport async function authSignatureCallback(args: {\n signature: string;\n address: string;\n nonce: string;\n keyName: string;\n}): Promise<CallbackResponse> {\n return await post<CallbackResponse>(\"/agent/v2/auth/callback\", args);\n}\n\nexport async function authMfaCallback(args: {\n authCode: string;\n mfaCode: string;\n keyName: string;\n}): Promise<CallbackResponse> {\n return await post<CallbackResponse>(\"/agent/v2/auth/callback\", args);\n}\n\nexport async function runAgentAuthFlow(args: {\n keyName: string;\n keypairPath?: string;\n mfaCodeProvider?: () => Promise<string>;\n}): Promise<BagsCredentials> {\n const keypair = await getOrCreateAuthKeypair(args.keypairPath);\n const address = keypair.publicKey.toBase58();\n\n const init = await authInit(address);\n const signature = signChallengeMessage(init.message, keypair);\n const first = await authSignatureCallback({\n signature,\n address,\n nonce: init.nonce,\n keyName: args.keyName,\n });\n\n let apiKey = first.apiKey;\n let keyId = first.keyId;\n\n if (!apiKey && first.mfaRequired) {\n if (!first.authCode) {\n throw new Error(\"MFA required, but no authCode returned by API.\");\n }\n if (!args.mfaCodeProvider) {\n throw new Error(\"MFA required. Please provide an MFA code.\");\n }\n const mfaCode = await args.mfaCodeProvider();\n const second = await authMfaCallback({\n authCode: first.authCode,\n mfaCode,\n keyName: args.keyName,\n });\n apiKey = second.apiKey;\n keyId = second.keyId;\n }\n\n if (!apiKey) {\n throw new Error(\"Authentication succeeded but API key was not returned.\");\n }\n\n const credentials: BagsCredentials = {\n apiKey,\n keyId,\n walletAddress: address,\n authenticatedAt: new Date().toISOString(),\n };\n\n await saveCredentials(credentials);\n return credentials;\n}\n","import { readFile, rm } from \"node:fs/promises\";\nimport { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { BAGS_KEYPAIR_PATH } from \"./paths.js\";\nimport { writeJsonSecure } from \"./fs.js\";\n\nfunction keypairFromSecret(secret: Uint8Array): Keypair {\n return Keypair.fromSecretKey(secret);\n}\n\nexport async function loadKeypair(path: string = BAGS_KEYPAIR_PATH): Promise<Keypair | null> {\n try {\n const raw = await readFile(path, \"utf8\");\n const parsed = JSON.parse(raw) as number[];\n return keypairFromSecret(Uint8Array.from(parsed));\n } catch {\n return null;\n }\n}\n\nexport async function saveKeypair(keypair: Keypair, path: string = BAGS_KEYPAIR_PATH): Promise<void> {\n await writeJsonSecure(path, Array.from(keypair.secretKey));\n}\n\nexport async function generateKeypair(force = false, path: string = BAGS_KEYPAIR_PATH): Promise<Keypair> {\n const existing = await loadKeypair(path);\n if (existing && !force) {\n throw new Error(`Keypair already exists at ${path}. Use --force to overwrite.`);\n }\n const kp = Keypair.generate();\n await saveKeypair(kp, path);\n return kp;\n}\n\nexport async function importKeypairFromBase58(base58PrivateKey: string, path: string = BAGS_KEYPAIR_PATH): Promise<Keypair> {\n const secret = bs58.decode(base58PrivateKey);\n const kp = keypairFromSecret(secret);\n await saveKeypair(kp, path);\n return kp;\n}\n\nexport async function importKeypairFromJsonFile(filePath: string, path: string = BAGS_KEYPAIR_PATH): Promise<Keypair> {\n const raw = await readFile(filePath, \"utf8\");\n const parsed = JSON.parse(raw) as number[];\n const kp = keypairFromSecret(Uint8Array.from(parsed));\n await saveKeypair(kp, path);\n return kp;\n}\n\nexport function detectKeyFormat(raw: string): \"base58\" | \"intArray\" {\n const trimmed = raw.trim();\n if (trimmed.startsWith(\"[\") || /^\\d+\\s*,/.test(trimmed)) {\n return \"intArray\";\n }\n return \"base58\";\n}\n\nexport async function importKeypairFromIntArray(\n intArrayStr: string,\n path: string = BAGS_KEYPAIR_PATH,\n): Promise<Keypair> {\n let input = intArrayStr.trim();\n if (!input.startsWith(\"[\")) {\n input = `[${input}]`;\n }\n const parsed = JSON.parse(input) as number[];\n if (!Array.isArray(parsed) || !parsed.every((n) => Number.isInteger(n))) {\n throw new Error(\"Invalid int array format.\");\n }\n const kp = keypairFromSecret(Uint8Array.from(parsed));\n await saveKeypair(kp, path);\n return kp;\n}\n\nexport async function deleteKeypair(path: string = BAGS_KEYPAIR_PATH): Promise<void> {\n try {\n await rm(path, { force: true });\n } catch {\n // noop\n }\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const BAGS_CONFIG_DIR = join(homedir(), \".config\", \"bags\");\nexport const BAGS_KEYPAIR_PATH = join(BAGS_CONFIG_DIR, \"keypair.json\");\nexport const BAGS_CREDENTIALS_PATH = join(BAGS_CONFIG_DIR, \"credentials.json\");\nexport const BAGS_SETTINGS_PATH = join(BAGS_CONFIG_DIR, \"config.json\");\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nexport async function ensureDirectory(path: string): Promise<void> {\n await mkdir(path, { recursive: true, mode: 0o700 });\n}\n\nexport async function writeJsonSecure(path: string, value: unknown): Promise<void> {\n await mkdir(dirname(path), { recursive: true, mode: 0o700 });\n await writeFile(path, `${JSON.stringify(value, null, 2)}\\n`, { mode: 0o600 });\n}\n","import { readFile, rm } from \"node:fs/promises\";\nimport { BAGS_CREDENTIALS_PATH } from \"./paths.js\";\nimport { writeJsonSecure } from \"./fs.js\";\n\nexport type BagsCredentials = {\n apiKey: string;\n keyId?: string;\n walletAddress: string;\n authenticatedAt: string;\n};\n\nexport async function loadCredentials(): Promise<BagsCredentials | null> {\n try {\n const raw = await readFile(BAGS_CREDENTIALS_PATH, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<BagsCredentials>;\n\n if (!parsed.apiKey || !parsed.walletAddress) {\n return null;\n }\n\n return {\n apiKey: parsed.apiKey,\n keyId: parsed.keyId,\n walletAddress: parsed.walletAddress,\n authenticatedAt: parsed.authenticatedAt ?? new Date().toISOString(),\n };\n } catch {\n return null;\n }\n}\n\nexport async function saveCredentials(credentials: BagsCredentials): Promise<void> {\n await writeJsonSecure(BAGS_CREDENTIALS_PATH, credentials);\n}\n\nexport async function clearCredentials(): Promise<void> {\n try {\n await rm(BAGS_CREDENTIALS_PATH, { force: true });\n } catch {\n // noop\n }\n}\n","import chalk from \"chalk\";\n\nfunction isUserAbort(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n return (\n error.message.includes(\"force closed\") ||\n error.message.includes(\"SIGINT\") ||\n error.name === \"ExitPromptError\"\n );\n}\n\nexport function handleCliError(error: unknown): never {\n if (isUserAbort(error)) {\n console.log(chalk.dim(\"Goodbye.\"));\n process.exit(0);\n }\n if (error instanceof Error) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(chalk.red(\"Unexpected error\"), error);\n }\n process.exit(1);\n}\n","import type { Command } from \"commander\";\nimport { handleCliError } from \"../utils/errors.js\";\n\nexport function wrapAction<T extends unknown[]>(\n fn: (command: Command, ...args: T) => Promise<void>,\n): (...args: [...T, Command]) => Promise<void> {\n return async (...args: [...T, Command]) => {\n const command = args[args.length - 1] as Command;\n const rest = args.slice(0, -1) as T;\n try {\n await fn(command, ...rest);\n } catch (error) {\n handleCliError(error);\n }\n };\n}\n","import { readFile } from \"node:fs/promises\";\nimport { BAGS_SETTINGS_PATH } from \"./paths.js\";\nimport { writeJsonSecure } from \"./fs.js\";\n\nexport type OutputMode = \"pretty\" | \"table\" | \"json\";\n\nexport type CliConfig = {\n rpcUrl: string;\n commitment: \"processed\" | \"confirmed\" | \"finalized\";\n output: OutputMode;\n};\n\nexport const DEFAULT_CLI_CONFIG: CliConfig = {\n rpcUrl: \"https://api.mainnet-beta.solana.com\",\n commitment: \"processed\",\n output: \"pretty\",\n};\n\nexport async function loadCliConfig(): Promise<CliConfig> {\n try {\n const raw = await readFile(BAGS_SETTINGS_PATH, \"utf8\");\n const parsed = JSON.parse(raw) as Partial<CliConfig>;\n return {\n rpcUrl: parsed.rpcUrl ?? DEFAULT_CLI_CONFIG.rpcUrl,\n commitment: parsed.commitment ?? DEFAULT_CLI_CONFIG.commitment,\n output: parsed.output ?? DEFAULT_CLI_CONFIG.output,\n };\n } catch {\n return DEFAULT_CLI_CONFIG;\n }\n}\n\nexport async function saveCliConfig(value: CliConfig): Promise<void> {\n await writeJsonSecure(BAGS_SETTINGS_PATH, value);\n}\n","import { confirm, input, password, select } from \"@inquirer/prompts\";\n\nexport async function flagOrPrompt(\n value: string | undefined,\n message: string,\n validate?: (value: string) => boolean | string,\n): Promise<string> {\n if (value !== undefined && value !== \"\") {\n return value;\n }\n return await input({ message, validate });\n}\n\nexport async function optionalFlagOrPrompt(value: string | undefined, message: string): Promise<string | undefined> {\n if (value !== undefined) {\n return value;\n }\n const next = await input({ message });\n return next.trim() === \"\" ? undefined : next;\n}\n\nexport async function flagOrPromptNumber(\n value: number | undefined,\n message: string,\n defaultValue?: number,\n): Promise<number> {\n if (value !== undefined) {\n return value;\n }\n const raw = await input({ message, default: defaultValue?.toString() });\n const n = Number(raw);\n if (!Number.isFinite(n)) {\n throw new Error(`Invalid number: ${raw}`);\n }\n return n;\n}\n\nexport async function promptConfirm(message: string, defaultValue = true): Promise<boolean> {\n return await confirm({ message, default: defaultValue });\n}\n\nexport async function promptSecret(message: string): Promise<string> {\n return await password({ message, mask: \"*\" });\n}\n\nexport async function promptOneOf<K extends string>(\n flags: Record<K, string | undefined>,\n labels: Record<K, string>,\n promptMessages: Record<K, string>,\n): Promise<{ key: K; value: string }> {\n const keys = Object.keys(flags) as K[];\n const provided = keys.filter((k) => flags[k] !== undefined && flags[k] !== \"\");\n if (provided.length > 1) {\n throw new Error(`Only one of ${keys.map((k) => `--${String(k)}`).join(\", \")} can be provided.`);\n }\n if (provided.length === 1) {\n return { key: provided[0], value: flags[provided[0]]! };\n }\n const key = await select({\n message: \"Choose one:\",\n choices: keys.map((k) => ({ name: labels[k], value: k })),\n });\n const value = await input({ message: promptMessages[key] });\n if (!value.trim()) {\n throw new Error(`A value is required.`);\n }\n return { key, value };\n}\n","import ora from \"ora\";\n\nexport async function withSpinner<T>(message: string, fn: () => Promise<T>): Promise<T> {\n const spinner = ora(message).start();\n try {\n const result = await fn();\n spinner.succeed(message);\n return result;\n } catch (error) {\n spinner.fail(`${message} failed`);\n throw error;\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { runAgentAuthFlow } from \"../lib/auth.js\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { clearCredentials, loadCredentials } from \"../lib/credentials.js\";\nimport { printData } from \"../lib/output.js\";\nimport { BAGS_KEYPAIR_PATH } from \"../lib/paths.js\";\nimport { promptSecret } from \"../lib/prompt.js\";\nimport { deleteKeypair } from \"../lib/wallet.js\";\nimport { withSpinner } from \"../utils/spinner.js\";\n\ntype LoginOptions = {\n keypair?: string;\n keyName?: string;\n};\n\ntype LogoutOptions = {\n all?: boolean;\n};\n\nexport function registerAuthCommands(program: Command): void {\n const auth = program.command(\"auth\").description(\"Agent authentication commands\");\n\n auth\n .command(\"login\")\n .description(\"Authenticate via wallet signature flow and store API key\")\n .option(\"--keypair <path>\", \"Custom keypair path\")\n .option(\"--key-name <name>\", \"Label for API key\", \"Bags CLI Key\")\n .action(\n wrapAction(async (command, options: LoginOptions) => {\n const credentials = await withSpinner(\"Authenticating with Bags\", async () => {\n return await runAgentAuthFlow({\n keyName: options.keyName ?? \"Bags CLI Key\",\n keypairPath: options.keypair ?? BAGS_KEYPAIR_PATH,\n mfaCodeProvider: async () => await promptSecret(\"Enter MFA code\"),\n });\n });\n console.log(chalk.green(\"Authentication successful.\"));\n await printData(command, {\n walletAddress: credentials.walletAddress,\n keyId: credentials.keyId ?? null,\n authenticatedAt: credentials.authenticatedAt,\n });\n }),\n );\n\n auth\n .command(\"status\")\n .description(\"Show current authentication state\")\n .action(\n wrapAction(async (command) => {\n const credentials = await loadCredentials();\n if (!credentials) {\n console.log(chalk.yellow(\"Not authenticated. Run `bags auth login`.\"));\n return;\n }\n const masked = `${credentials.apiKey.slice(0, 6)}...${credentials.apiKey.slice(-4)}`;\n await printData(command, {\n authenticated: true,\n walletAddress: credentials.walletAddress,\n apiKey: masked,\n keyId: credentials.keyId ?? null,\n authenticatedAt: credentials.authenticatedAt,\n });\n }),\n );\n\n auth\n .command(\"logout\")\n .description(\"Remove credentials. Optionally remove keypair too\")\n .option(\"--all\", \"Also remove wallet keypair\")\n .action(\n wrapAction(async (_command, options: LogoutOptions) => {\n await clearCredentials();\n if (options.all) {\n await deleteKeypair();\n }\n console.log(chalk.green(`Logged out${options.all ? \" and deleted keypair\" : \"\"}.`));\n }),\n );\n}\n","import chalk from \"chalk\";\nimport Table from \"cli-table3\";\nimport type { Command } from \"commander\";\nimport { loadCliConfig } from \"./config.js\";\n\nexport async function shouldUseJson(command: Command): Promise<boolean> {\n const globalOpts = command.optsWithGlobals() as { json?: boolean };\n if (globalOpts.json) {\n return true;\n }\n const config = await loadCliConfig();\n return config.output === \"json\";\n}\n\nfunction formatValue(value: unknown): string {\n if (value === null || value === undefined) {\n return chalk.dim(\"—\");\n }\n if (typeof value === \"boolean\") {\n return value ? chalk.green(\"yes\") : chalk.red(\"no\");\n }\n if (typeof value === \"number\") {\n return chalk.cyan(String(value));\n }\n return String(value);\n}\n\nfunction printKeyValue(data: Record<string, unknown>): void {\n const keys = Object.keys(data);\n const maxLen = Math.max(...keys.map((k) => k.length));\n for (const key of keys) {\n const val = data[key];\n if (val !== null && typeof val === \"object\" && !Array.isArray(val)) {\n console.log(` ${chalk.bold(key.padEnd(maxLen))}:`);\n printKeyValue(val as Record<string, unknown>);\n continue;\n }\n if (Array.isArray(val)) {\n console.log(` ${chalk.bold(key.padEnd(maxLen))} ${chalk.dim(`[${val.length} items]`)}`);\n for (const item of val) {\n if (item !== null && typeof item === \"object\") {\n const summary = Object.entries(item as Record<string, unknown>)\n .map(([k, v]) => `${k}=${formatValue(v)}`)\n .join(\" \");\n console.log(` ${chalk.dim(\"•\")} ${summary}`);\n } else {\n console.log(` ${chalk.dim(\"•\")} ${formatValue(item)}`);\n }\n }\n continue;\n }\n console.log(` ${chalk.bold(key.padEnd(maxLen))} ${formatValue(val)}`);\n }\n}\n\nexport async function printData(command: Command, data: unknown): Promise<void> {\n if (await shouldUseJson(command)) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n printKeyValue(data as Record<string, unknown>);\n return;\n }\n if (Array.isArray(data)) {\n for (const item of data) {\n if (item !== null && typeof item === \"object\") {\n printKeyValue(item as Record<string, unknown>);\n console.log();\n } else {\n console.log(formatValue(item));\n }\n }\n return;\n }\n console.log(formatValue(data));\n}\n\nexport async function printTable(\n command: Command,\n headers: string[],\n rows: Array<Array<string | number | boolean>>,\n): Promise<void> {\n if (await shouldUseJson(command)) {\n const keys = headers.map((h) => h.toLowerCase().replace(/\\s+/g, \"_\"));\n const mapped = rows.map((row) => {\n const item: Record<string, string | number | boolean> = {};\n keys.forEach((key, i) => {\n item[key] = row[i] ?? \"\";\n });\n return item;\n });\n console.log(JSON.stringify(mapped, null, 2));\n return;\n }\n\n const table = new Table({ head: headers });\n for (const row of rows) {\n table.push(row);\n }\n console.log(table.toString());\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt, promptConfirm } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\nimport { getLocalSigner } from \"../lib/signer.js\";\nimport { signAndSend } from \"../lib/tx.js\";\n\ntype ConfigOptions = {\n mint?: string;\n feeClaimers?: string;\n partner?: string;\n newAdmin?: string;\n skipConfirm?: boolean;\n};\n\nfunction parseClaimers(raw?: string): Array<{ user: PublicKey; userBps: number }> {\n if (!raw) {\n throw new Error(\"--fee-claimers is required. Example: '[{\\\"user\\\":\\\"...\\\",\\\"userBps\\\":10000}]'\");\n }\n const parsed = JSON.parse(raw) as Array<{ user: string; userBps: number }>;\n return parsed.map((x) => ({ user: new PublicKey(x.user), userBps: x.userBps }));\n}\n\nexport function registerConfigCommands(program: Command): void {\n const config = program.command(\"config\").description(\"Fee share configuration\");\n\n config\n .command(\"create\")\n .description(\"Create a fee share config for a token\")\n .option(\"--mint <address>\", \"Base mint\")\n .option(\"--fee-claimers <json>\", \"JSON array [{user,userBps}]\")\n .option(\"--partner <pubkey>\", \"Partner wallet\")\n .option(\"--skip-confirm\", \"Skip confirmation\")\n .action(\n wrapAction(async (command, options: ConfigOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Base mint:\"));\n const feeClaimers = parseClaimers(options.feeClaimers);\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Create fee config for ${mint.toBase58()}?`);\n if (!ok) return;\n }\n\n const result = await (sdk as any).config.createBagsFeeShareConfig({\n payer: keypair.publicKey,\n baseMint: mint,\n feeClaimers,\n partner: options.partner ? new PublicKey(options.partner) : undefined,\n });\n\n const signatures: string[] = [];\n if (Array.isArray(result.transactions)) {\n for (const tx of result.transactions) {\n signatures.push(await signAndSend(connection, commitment, tx, keypair));\n }\n }\n\n await printData(command, {\n meteoraConfigKey: result.meteoraConfigKey?.toString?.() ?? result.meteoraConfigKey,\n signatures,\n });\n }),\n );\n\n config\n .command(\"update\")\n .description(\"Update fee share config as admin\")\n .option(\"--mint <address>\", \"Base mint\")\n .option(\"--fee-claimers <json>\", \"JSON array [{user,userBps}]\")\n .option(\"--skip-confirm\", \"Skip confirmation\")\n .action(\n wrapAction(async (command, options: ConfigOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Base mint:\"));\n const feeClaimers = parseClaimers(options.feeClaimers);\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Update admin config for ${mint.toBase58()}?`);\n if (!ok) return;\n }\n\n const result = await (sdk as any).feeShareAdmin.createUpdateConfigTransactions({\n payer: keypair.publicKey,\n baseMint: mint,\n feeClaimers,\n });\n\n const signatures: string[] = [];\n if (Array.isArray(result.transactions)) {\n for (const tx of result.transactions) {\n signatures.push(await signAndSend(connection, commitment, tx, keypair));\n }\n }\n await printData(command, { signatures });\n }),\n );\n\n config\n .command(\"transfer-admin\")\n .description(\"Transfer fee share admin authority\")\n .option(\"--mint <address>\", \"Base mint\")\n .option(\"--new-admin <pubkey>\", \"New admin wallet\")\n .option(\"--skip-confirm\", \"Skip confirmation\")\n .action(\n wrapAction(async (command, options: ConfigOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Base mint:\"));\n const newAdmin = new PublicKey(await flagOrPrompt(options.newAdmin, \"New admin:\"));\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Transfer admin for ${mint.toBase58()} to ${newAdmin.toBase58()}?`);\n if (!ok) return;\n }\n\n const tx = await (sdk as any).feeShareAdmin.createTransferAdminTransaction({\n payer: keypair.publicKey,\n baseMint: mint,\n newAdmin,\n });\n const signature = await signAndSend(connection, commitment, tx, keypair);\n await printData(command, { signature });\n }),\n );\n\n config\n .command(\"admin-list\")\n .description(\"List mints where wallet is fee share admin\")\n .action(\n wrapAction(async (command) => {\n const { sdk } = await getSdkContext();\n const { keypair } = await getLocalSigner();\n const list = await (sdk as any).feeShareAdmin.getAdminTokenMints(keypair.publicKey);\n await printData(command, list);\n }),\n );\n}\n","import { Connection } from \"@solana/web3.js\";\nimport { BagsSDK } from \"@bagsfm/bags-sdk\";\nimport { loadCredentials } from \"./credentials.js\";\nimport { loadCliConfig } from \"./config.js\";\n\ntype SdkContext = {\n sdk: BagsSDK;\n connection: Connection;\n};\n\nlet cached: SdkContext | null = null;\n\nexport async function getSdkContext(forceRefresh = false): Promise<SdkContext> {\n if (cached && !forceRefresh) {\n return cached;\n }\n\n const credentials = await loadCredentials();\n if (!credentials) {\n throw new Error(\"Not authenticated. Run `bags auth login` first.\");\n }\n\n const config = await loadCliConfig();\n const connection = new Connection(config.rpcUrl, config.commitment);\n const sdk = new BagsSDK(credentials.apiKey, connection, config.commitment);\n\n cached = { sdk, connection };\n return cached;\n}\n","import { loadCliConfig } from \"./config.js\";\nimport { loadKeypair } from \"./wallet.js\";\n\nexport async function getLocalSigner() {\n const keypair = await loadKeypair();\n if (!keypair) {\n throw new Error(\"No local keypair found. Run `bags wallet generate` or `bags wallet import`.\");\n }\n const config = await loadCliConfig();\n return { keypair, commitment: config.commitment };\n}\n","import { signAndSendTransaction } from \"@bagsfm/bags-sdk\";\nimport type { Connection, Keypair, VersionedTransaction } from \"@solana/web3.js\";\n\nexport async function signAndSend(\n connection: Connection,\n commitment: \"processed\" | \"confirmed\" | \"finalized\",\n transaction: VersionedTransaction,\n keypair: Keypair,\n): Promise<string> {\n const signature = await signAndSendTransaction(connection, commitment, transaction, keypair);\n return signature;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\n\ntype MintOptions = {\n mint?: string;\n payload?: string;\n};\n\ntype PaymentOptions = {\n orderId?: string;\n transaction?: string;\n};\n\nexport function registerDexscreenerCommands(program: Command): void {\n const dexscreener = program.command(\"dexscreener\").description(\"Dexscreener order flows\");\n\n dexscreener\n .command(\"check\")\n .description(\"Check Dexscreener order availability\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Token mint:\"));\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).dexscreener.checkOrderAvailability(mint);\n await printData(command, result);\n }),\n );\n\n dexscreener\n .command(\"order\")\n .description(\"Create Dexscreener order\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--payload <json>\", \"Raw JSON payload override\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = await flagOrPrompt(options.mint, \"Token mint:\");\n const payload =\n options.payload !== undefined\n ? (JSON.parse(options.payload) as Record<string, unknown>)\n : {\n tokenMint: mint,\n };\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).dexscreener.createOrder(payload);\n await printData(command, result);\n }),\n );\n\n dexscreener\n .command(\"pay\")\n .description(\"Submit Dexscreener payment\")\n .option(\"--order-id <id>\", \"Order ID\")\n .option(\"--transaction <tx>\", \"Signed serialized transaction\")\n .action(\n wrapAction(async (command, options: PaymentOptions) => {\n const orderId = await flagOrPrompt(options.orderId, \"Order ID:\");\n const transaction = await flagOrPrompt(options.transaction, \"Signed transaction:\");\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).dexscreener.submitPayment({ orderId, transaction });\n await printData(command, result);\n }),\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { getSdkContext } from \"../lib/sdk.js\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData, printTable } from \"../lib/output.js\";\nimport { flagOrPrompt, flagOrPromptNumber, promptConfirm } from \"../lib/prompt.js\";\nimport { getLocalSigner } from \"../lib/signer.js\";\nimport { signAndSend } from \"../lib/tx.js\";\nimport { lamportsToSol, shortAddress } from \"../utils/format.js\";\n\ntype MintOptions = {\n mint?: string;\n raw?: boolean;\n skipConfirm?: boolean;\n offset?: number;\n limit?: number;\n startTime?: string;\n endTime?: string;\n};\n\nasync function resolveMint(value?: string): Promise<PublicKey> {\n const mint = await flagOrPrompt(value, \"Token mint:\");\n return new PublicKey(mint);\n}\n\nasync function getClaimTransactionsForMint(sdk: unknown, wallet: PublicKey, mint: PublicKey): Promise<any[]> {\n const fee = (sdk as any).fee;\n if (typeof fee.getClaimTransactions === \"function\") {\n return await fee.getClaimTransactions(wallet, mint);\n }\n if (typeof fee.getClaimTransaction === \"function\") {\n const tx = await fee.getClaimTransaction(wallet, mint);\n return tx ? [tx] : [];\n }\n throw new Error(\"This SDK version does not expose claim transaction methods.\");\n}\n\nexport function registerFeesCommands(program: Command): void {\n const fees = program.command(\"fees\").description(\"Fee claiming and fee analytics\");\n\n fees\n .command(\"list\")\n .description(\"List claimable fee positions for local wallet\")\n .action(\n wrapAction(async (command) => {\n const { sdk } = await getSdkContext();\n const { keypair } = await getLocalSigner();\n const positions = await (sdk as any).fee.getAllClaimablePositions(keypair.publicKey);\n const rows = (positions as any[]).map((p) => [\n String(p.baseMint ?? \"\"),\n Number(p.totalClaimableLamportsUserShare ?? 0),\n p.isCustomFeeVault ? \"yes\" : \"no\",\n ]);\n await printTable(command, [\"Mint\", \"Claimable Lamports\", \"Custom Vault\"], rows);\n }),\n );\n\n fees\n .command(\"claim\")\n .description(\"Claim fees for a single token mint\")\n .argument(\"[mint]\", \"Token mint address\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--skip-confirm\", \"Skip transaction confirmation\")\n .action(\n wrapAction(async (command, mintArg: string | undefined, options: MintOptions) => {\n const mint = await resolveMint(mintArg ?? options.mint);\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Claim fees for ${mint.toBase58()}?`);\n if (!ok) {\n return;\n }\n }\n\n const transactions = await getClaimTransactionsForMint(sdk, keypair.publicKey, mint);\n const signatures: string[] = [];\n for (const tx of transactions) {\n signatures.push(await signAndSend(connection, commitment, tx, keypair));\n }\n await printData(command, { mint: mint.toBase58(), signatures });\n }),\n );\n\n fees\n .command(\"claim-all\")\n .description(\"Claim all claimable fees for the local wallet\")\n .option(\"--skip-confirm\", \"Skip transaction confirmation\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n const feeService = (sdk as any).fee;\n const positions = (await feeService.getAllClaimablePositions(keypair.publicKey)) as any[];\n const mints = [...new Set(positions.map((p) => String(p.baseMint)))];\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Claim fees across ${mints.length} token(s)?`);\n if (!ok) {\n return;\n }\n }\n\n const sent: Array<{ mint: string; signatures: string[] }> = [];\n for (const mint of mints) {\n const txs = await getClaimTransactionsForMint(sdk, keypair.publicKey, new PublicKey(mint));\n const signatures: string[] = [];\n for (const tx of txs) {\n signatures.push(await signAndSend(connection, commitment, tx, keypair));\n }\n sent.push({ mint, signatures });\n }\n\n await printData(command, { count: sent.length, claims: sent });\n }),\n );\n\n fees\n .command(\"lifetime\")\n .description(\"Get token lifetime fees\")\n .argument(\"[mint]\", \"Token mint address\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--raw\", \"Show raw lamports instead of SOL\")\n .action(\n wrapAction(async (command, mintArg: string | undefined, options: MintOptions) => {\n const mint = await resolveMint(mintArg ?? options.mint);\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getTokenLifetimeFees(mint);\n if (typeof result === \"number\") {\n await printData(command, {\n mint: mint.toBase58(),\n lifetimeFees: options.raw ? `${result} lamports` : `${lamportsToSol(result)} SOL`,\n });\n } else {\n await printData(command, result);\n }\n }),\n );\n\n fees\n .command(\"events\")\n .description(\"Get token claim events\")\n .argument(\"[mint]\", \"Token mint address\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--offset <n>\", \"Offset\", Number)\n .option(\"--limit <n>\", \"Limit\", Number)\n .option(\"--start-time <iso>\", \"Start timestamp (ISO)\")\n .option(\"--end-time <iso>\", \"End timestamp (ISO)\")\n .action(\n wrapAction(async (command, mintArg: string | undefined, options: MintOptions) => {\n const mint = await resolveMint(mintArg ?? options.mint);\n const { sdk } = await getSdkContext();\n const payload: Record<string, unknown> = { mint: mint.toBase58() };\n if (options.offset !== undefined) payload.offset = options.offset;\n if (options.limit !== undefined) payload.limit = options.limit;\n if (options.startTime) payload.startTime = options.startTime;\n if (options.endTime) payload.endTime = options.endTime;\n const result = await (sdk as any).state.getTokenClaimEvents(payload);\n await printData(command, result);\n }),\n );\n\n fees\n .command(\"stats\")\n .description(\"Get token claim stats\")\n .argument(\"[mint]\", \"Token mint address\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, mintArg: string | undefined, options: MintOptions) => {\n const mint = await resolveMint(mintArg ?? options.mint);\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getTokenClaimStats(mint);\n await printData(command, result);\n }),\n );\n}\n","export function lamportsToSol(lamports: number): string {\n return (lamports / 1_000_000_000).toFixed(9);\n}\n\nexport function shortAddress(value: string): string {\n if (value.length < 10) {\n return value;\n }\n return `${value.slice(0, 4)}...${value.slice(-4)}`;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\n\ntype MintOptions = {\n mint?: string;\n payload?: string;\n};\n\ntype SubmitOptions = {\n mint?: string;\n companyName?: string;\n founders?: string;\n category?: string;\n};\n\nexport function registerIncorporationCommands(program: Command): void {\n const inc = program.command(\"incorporation\").description(\"Incorporation project flows\");\n\n inc\n .command(\"pay\")\n .description(\"Start incorporation payment\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--payload <json>\", \"Raw JSON payload override\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = await flagOrPrompt(options.mint, \"Token mint:\");\n const { sdk } = await getSdkContext();\n const payload =\n options.payload !== undefined\n ? (JSON.parse(options.payload) as Record<string, unknown>)\n : { tokenMint: mint };\n const result = await (sdk as any).incorporation.startPayment(payload);\n await printData(command, result);\n }),\n );\n\n inc\n .command(\"submit\")\n .description(\"Submit incorporation details\")\n .option(\"--mint <address>\", \"Token mint\")\n .option(\"--company-name <name>\", \"Company name\")\n .option(\"--founders <json>\", \"JSON founders array\")\n .option(\"--category <value>\", \"Project category\")\n .action(\n wrapAction(async (command, options: SubmitOptions) => {\n const mint = await flagOrPrompt(options.mint, \"Token mint:\");\n const companyName = await flagOrPrompt(options.companyName, \"Company name:\");\n const foundersRaw = await flagOrPrompt(options.founders, \"Founders JSON:\");\n const category = await flagOrPrompt(options.category, \"Category:\");\n const founders = JSON.parse(foundersRaw) as unknown[];\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).incorporation.incorporate({\n tokenMint: mint,\n companyName,\n founders,\n category,\n });\n await printData(command, result);\n }),\n );\n\n inc\n .command(\"start\")\n .description(\"Start incorporation process\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = await flagOrPrompt(options.mint, \"Token mint:\");\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).incorporation.startIncorporation({ tokenMint: mint });\n await printData(command, result);\n }),\n );\n\n inc\n .command(\"list\")\n .description(\"List incorporation projects for API key\")\n .action(\n wrapAction(async (command) => {\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).incorporation.list();\n await printData(command, result);\n }),\n );\n\n inc\n .command(\"details\")\n .description(\"Get incorporation details by token mint\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Token mint:\"));\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).incorporation.getDetails(mint);\n await printData(command, result);\n }),\n );\n}\n","import {\n BAGS_FEE_SHARE_V2_MAX_CLAIMERS_NON_LUT,\n createTipTransaction,\n sendBundleAndConfirm,\n waitForSlotsToPass,\n} from \"@bagsfm/bags-sdk\";\nimport { LAMPORTS_PER_SOL, PublicKey, VersionedTransaction } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt, flagOrPromptNumber, optionalFlagOrPrompt, promptConfirm, promptOneOf } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\nimport { getLocalSigner } from \"../lib/signer.js\";\nimport { signAndSend } from \"../lib/tx.js\";\nimport chalk from \"chalk\";\nimport { confirm, input, select } from \"@inquirer/prompts\";\nimport { shortAddress } from \"../utils/format.js\";\n\nconst SOCIAL_PROVIDERS = [\"twitter\", \"github\", \"kick\", \"tiktok\"] as const;\ntype SocialProvider = (typeof SOCIAL_PROVIDERS)[number];\nconst MAX_CLAIMERS = 100;\nconst TOTAL_BPS = 10000;\n\ntype FeeClaimerInput = {\n provider?: SocialProvider;\n username?: string;\n wallet?: string;\n bps: number;\n};\n\ntype LaunchCreateOptions = {\n name?: string;\n symbol?: string;\n description?: string;\n imageUrl?: string;\n image?: string;\n twitter?: string;\n website?: string;\n telegram?: string;\n initialBuy?: number;\n feeClaimers?: string;\n partner?: string;\n partnerConfig?: string;\n skipConfirm?: boolean;\n};\n\ntype FeedOptions = { limit?: number };\ntype MintOptions = { mint?: string };\n\nasync function sendBundleWithTip(\n sdk: any,\n connection: any,\n keypair: any,\n unsignedTransactions: VersionedTransaction[],\n): Promise<string> {\n const bundleBlockhash = unsignedTransactions[0]?.message.recentBlockhash;\n if (!bundleBlockhash) {\n throw new Error(\"Missing blockhash in bundle transaction.\");\n }\n\n let tipLamports = Math.floor(0.015 * LAMPORTS_PER_SOL);\n try {\n const fees = await sdk.solana.getJitoRecentFees();\n if (fees?.landed_tips_95th_percentile) {\n tipLamports = Math.floor(Number(fees.landed_tips_95th_percentile) * LAMPORTS_PER_SOL);\n }\n } catch {\n // fallback tip\n }\n\n const tipTx = await createTipTransaction(connection, sdk.state.getCommitment(), keypair.publicKey, tipLamports, {\n blockhash: bundleBlockhash,\n });\n const signed = [tipTx, ...unsignedTransactions].map((tx) => {\n tx.sign([keypair]);\n return tx;\n });\n return await sendBundleAndConfirm(signed, sdk);\n}\n\nfunction parseFeeClaimers(raw?: string): FeeClaimerInput[] {\n if (!raw) {\n return [];\n }\n const parsed = JSON.parse(raw) as FeeClaimerInput[];\n if (!Array.isArray(parsed)) {\n throw new Error(\"--fee-claimers must be a JSON array.\");\n }\n return parsed;\n}\n\nfunction printClaimerSummary(claimers: FeeClaimerInput[]): void {\n const usedBps = claimers.reduce((s, c) => s + c.bps, 0);\n console.log(chalk.dim(\"\\n Fee claimers:\"));\n claimers.forEach((c, i) => {\n const label = c.wallet\n ? `wallet:${shortAddress(c.wallet)}`\n : `${c.provider}:${c.username}`;\n console.log(` ${i + 1}. ${label.padEnd(28)} ${(c.bps / 100).toFixed(2)}%`);\n });\n console.log(chalk.dim(` Creator keeps: ${((TOTAL_BPS - usedBps) / 100).toFixed(2)}%\\n`));\n}\n\nasync function buildFeeClaimersInteractive(): Promise<FeeClaimerInput[]> {\n const shareFees = await confirm({ message: \"Share fees with others?\", default: false });\n if (!shareFees) {\n return [];\n }\n\n const claimers: FeeClaimerInput[] = [];\n let usedBps = 0;\n\n while (claimers.length < MAX_CLAIMERS && usedBps < TOTAL_BPS) {\n const remaining = TOTAL_BPS - usedBps;\n console.log(chalk.dim(`\\n Adding fee claimer ${claimers.length + 1}/${MAX_CLAIMERS} (${remaining} BPS remaining)`));\n\n const type = await select({\n message: \"Claimer type:\",\n choices: [\n { name: \"Social media account\", value: \"social\" as const },\n { name: \"Direct wallet address\", value: \"wallet\" as const },\n ],\n });\n\n let claimer: FeeClaimerInput;\n\n if (type === \"social\") {\n const provider = await select({\n message: \"Platform:\",\n choices: SOCIAL_PROVIDERS.map((p) => ({ name: p, value: p })),\n });\n const username = await input({ message: \"Username:\" });\n if (!username.trim()) {\n throw new Error(\"Username is required.\");\n }\n const bps = await inputBps(remaining);\n claimer = { provider, username: username.trim(), bps };\n } else {\n const wallet = await input({ message: \"Wallet address:\" });\n if (!wallet.trim()) {\n throw new Error(\"Wallet address is required.\");\n }\n new PublicKey(wallet.trim());\n const bps = await inputBps(remaining);\n claimer = { wallet: wallet.trim(), bps };\n }\n\n claimers.push(claimer);\n usedBps += claimer.bps;\n printClaimerSummary(claimers);\n\n if (claimers.length >= MAX_CLAIMERS || usedBps >= TOTAL_BPS) {\n break;\n }\n\n const more = await confirm({ message: \"Add another fee claimer?\", default: true });\n if (!more) {\n break;\n }\n }\n\n return claimers;\n}\n\nasync function inputBps(remaining: number): Promise<number> {\n const raw = await input({\n message: `Basis points (1-${remaining}, e.g. 3000 = 30%):`,\n validate: (val) => {\n const n = Number(val);\n if (!Number.isInteger(n) || n < 1 || n > remaining) {\n return `Enter a whole number between 1 and ${remaining}.`;\n }\n return true;\n },\n });\n return Number(raw);\n}\n\nexport function registerLaunchCommands(program: Command): void {\n const launch = program.command(\"launch\").description(\"Token launch flows\");\n\n launch\n .command(\"create\")\n .description(\"Create and launch a token\")\n .option(\"--name <name>\", \"Token name\")\n .option(\"--symbol <symbol>\", \"Token symbol\")\n .option(\"--description <description>\", \"Token description\")\n .option(\"--image-url <url>\", \"Image URL\")\n .option(\"--image <path>\", \"Image file path\")\n .option(\"--twitter <url>\", \"Twitter URL\")\n .option(\"--website <url>\", \"Website URL\")\n .option(\"--telegram <url>\", \"Telegram URL\")\n .option(\"--initial-buy <lamports>\", \"Initial buy amount in lamports\", Number)\n .option(\"--fee-claimers <json>\", \"JSON array of fee claimers\")\n .option(\"--partner <pubkey>\", \"Partner wallet\")\n .option(\"--partner-config <pubkey>\", \"Partner config PDA\")\n .option(\"--skip-confirm\", \"Skip final confirmation\")\n .action(\n wrapAction(async (command, options: LaunchCreateOptions) => {\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n const name = await flagOrPrompt(options.name, \"Token name:\");\n const symbol = await flagOrPrompt(options.symbol, \"Token symbol:\");\n const description = await flagOrPrompt(options.description, \"Token description:\");\n\n const imageChoice = await promptOneOf(\n { imageUrl: options.imageUrl, image: options.image },\n { imageUrl: \"Image URL\", image: \"Image file path\" },\n { imageUrl: \"Image URL:\", image: \"Image file path:\" },\n );\n const imageUrl = imageChoice.key === \"imageUrl\" ? imageChoice.value : undefined;\n const image = imageChoice.key === \"image\" ? imageChoice.value : undefined;\n\n const initialBuy = await flagOrPromptNumber(options.initialBuy, \"Initial buy (lamports):\", 10_000_000);\n const twitter = await optionalFlagOrPrompt(options.twitter, \"Twitter URL (optional):\");\n const website = await optionalFlagOrPrompt(options.website, \"Website URL (optional):\");\n const telegram = await optionalFlagOrPrompt(options.telegram, \"Telegram URL (optional):\");\n\n const feeClaimersInput = options.feeClaimers\n ? parseFeeClaimers(options.feeClaimers)\n : await buildFeeClaimersInteractive();\n\n if (!options.skipConfirm) {\n let summary = `Launch ${name} (${symbol}) with initial buy ${initialBuy} lamports from ${keypair.publicKey.toBase58()}`;\n if (feeClaimersInput.length > 0) {\n const allocBps = feeClaimersInput.reduce((s, c) => s + c.bps, 0);\n const lines = feeClaimersInput.map((c) => {\n const label = c.wallet\n ? `wallet:${shortAddress(c.wallet)}`\n : `${c.provider}:${c.username}`;\n return ` ${label} ${(c.bps / 100).toFixed(2)}%`;\n });\n lines.push(` creator: ${((TOTAL_BPS - allocBps) / 100).toFixed(2)}%`);\n summary += `\\n\\nFee split:\\n${lines.join(\"\\n\")}`;\n } else {\n summary += \"\\n\\nFee split: 100% to creator\";\n }\n const ok = await promptConfirm(`${summary}\\n\\nProceed?`);\n if (!ok) {\n return;\n }\n }\n\n const metadata = await (sdk as any).tokenLaunch.createTokenInfoAndMetadata({\n imageUrl,\n imagePath: image,\n name,\n symbol: symbol.toUpperCase().replace(\"$\", \"\"),\n description,\n twitter,\n website,\n telegram,\n });\n\n const tokenMint = new PublicKey(metadata.tokenMint);\n const feeClaimers: Array<{ user: PublicKey; userBps: number }> = [];\n\n if (feeClaimersInput.length > 0) {\n const allocatedBps = feeClaimersInput.reduce((sum, c) => sum + c.bps, 0);\n const creatorBps = TOTAL_BPS - allocatedBps;\n if (creatorBps < 0) {\n throw new Error(\"Total fee claimer BPS exceeds 10000.\");\n }\n if (creatorBps > 0) {\n feeClaimers.push({ user: keypair.publicKey, userBps: creatorBps });\n }\n for (const claimer of feeClaimersInput) {\n if (claimer.wallet) {\n feeClaimers.push({ user: new PublicKey(claimer.wallet), userBps: claimer.bps });\n } else if (claimer.username && claimer.provider) {\n const user = await (sdk as any).state.getLaunchWalletV2(claimer.username, claimer.provider);\n feeClaimers.push({ user: user.wallet, userBps: claimer.bps });\n } else {\n throw new Error(\"Each fee claimer must have either wallet or provider+username.\");\n }\n }\n } else {\n feeClaimers.push({ user: keypair.publicKey, userBps: TOTAL_BPS });\n }\n\n let additionalLookupTables: PublicKey[] | undefined;\n if (feeClaimers.length > BAGS_FEE_SHARE_V2_MAX_CLAIMERS_NON_LUT) {\n const lutResult = await (sdk as any).config.getConfigCreationLookupTableTransactions({\n payer: keypair.publicKey,\n baseMint: tokenMint,\n feeClaimers,\n });\n await signAndSend(connection, commitment, lutResult.creationTransaction, keypair);\n await waitForSlotsToPass(connection, commitment, 1);\n for (const tx of lutResult.extendTransactions) {\n await signAndSend(connection, commitment, tx, keypair);\n }\n additionalLookupTables = lutResult.lutAddresses;\n }\n\n const configResult = await (sdk as any).config.createBagsFeeShareConfig({\n payer: keypair.publicKey,\n baseMint: tokenMint,\n feeClaimers,\n partner: options.partner ? new PublicKey(options.partner) : undefined,\n partnerConfig: options.partnerConfig ? new PublicKey(options.partnerConfig) : undefined,\n additionalLookupTables,\n });\n\n if (Array.isArray(configResult.bundles)) {\n for (const bundle of configResult.bundles) {\n await sendBundleWithTip(sdk, connection, keypair, bundle);\n }\n }\n if (Array.isArray(configResult.transactions)) {\n for (const tx of configResult.transactions) {\n await signAndSend(connection, commitment, tx, keypair);\n }\n }\n\n const launchTx = await (sdk as any).tokenLaunch.createLaunchTransaction({\n metadataUrl: metadata.tokenMetadata,\n tokenMint,\n launchWallet: keypair.publicKey,\n initialBuyLamports: initialBuy,\n configKey: configResult.meteoraConfigKey,\n });\n const signature = await signAndSend(connection, commitment, launchTx, keypair);\n await printData(command, {\n tokenMint: metadata.tokenMint,\n metadataUrl: metadata.tokenMetadata,\n configKey: configResult.meteoraConfigKey?.toString?.() ?? configResult.meteoraConfigKey,\n signature,\n });\n }),\n );\n\n launch\n .command(\"feed\")\n .description(\"Get token launch feed\")\n .option(\"--limit <n>\", \"Number of items\", Number)\n .action(\n wrapAction(async (command, options: FeedOptions) => {\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getTokenLaunchFeed({ limit: options.limit ?? 20 });\n await printData(command, result);\n }),\n );\n\n launch\n .command(\"creators\")\n .description(\"Get creators for a token mint\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Token mint:\"));\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getTokenCreators(mint);\n await printData(command, result);\n }),\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt, promptConfirm } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\nimport { getLocalSigner } from \"../lib/signer.js\";\nimport { signAndSend } from \"../lib/tx.js\";\n\ntype PartnerOptions = {\n partner?: string;\n skipConfirm?: boolean;\n};\n\nexport function registerPartnerCommands(program: Command): void {\n const partner = program.command(\"partner\").description(\"Partner configuration and claim\");\n\n partner\n .command(\"create\")\n .description(\"Create partner config for local wallet\")\n .option(\"--skip-confirm\", \"Skip confirmation\")\n .action(\n wrapAction(async (command, options: PartnerOptions) => {\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Create partner config for ${keypair.publicKey.toBase58()}?`);\n if (!ok) return;\n }\n const tx = await (sdk as any).partner.createPartnerConfigTransaction(keypair.publicKey);\n const signature = await signAndSend(connection, commitment, tx, keypair);\n await printData(command, { signature });\n }),\n );\n\n partner\n .command(\"stats\")\n .description(\"Get partner stats\")\n .option(\"--partner <pubkey>\", \"Partner wallet pubkey\")\n .action(\n wrapAction(async (command, options: PartnerOptions) => {\n const { sdk } = await getSdkContext();\n const { keypair } = await getLocalSigner();\n const partnerWallet = new PublicKey(await flagOrPrompt(options.partner, \"Partner wallet (default local):\"));\n const stats = await (sdk as any).partner.getPartnerStats(partnerWallet ?? keypair.publicKey);\n await printData(command, stats);\n }),\n );\n\n partner\n .command(\"claim\")\n .description(\"Claim partner fees\")\n .option(\"--skip-confirm\", \"Skip confirmation\")\n .action(\n wrapAction(async (command, options: PartnerOptions) => {\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n if (!options.skipConfirm) {\n const ok = await promptConfirm(`Claim partner fees for ${keypair.publicKey.toBase58()}?`);\n if (!ok) return;\n }\n\n const txs = await (sdk as any).partner.getPartnerClaimTransactions(keypair.publicKey);\n const signatures: string[] = [];\n for (const tx of txs as any[]) {\n signatures.push(await signAndSend(connection, commitment, tx, keypair));\n }\n await printData(command, { signatures });\n }),\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\n\ntype PoolListOptions = {\n limit?: number;\n offset?: number;\n};\n\ntype MintOptions = {\n mint?: string;\n};\n\nexport function registerPoolCommands(program: Command): void {\n const pool = program.command(\"pool\").description(\"Pool lookup commands\");\n\n pool\n .command(\"list\")\n .description(\"List Bags pools\")\n .option(\"--limit <n>\", \"Limit\", Number)\n .option(\"--offset <n>\", \"Offset\", Number)\n .action(\n wrapAction(async (command, options: PoolListOptions) => {\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getBagsPools({\n limit: options.limit ?? 50,\n offset: options.offset ?? 0,\n });\n await printData(command, result);\n }),\n );\n\n pool\n .command(\"get\")\n .description(\"Get Bags pool by token mint\")\n .option(\"--mint <address>\", \"Token mint\")\n .action(\n wrapAction(async (command, options: MintOptions) => {\n const mint = new PublicKey(await flagOrPrompt(options.mint, \"Token mint:\"));\n const { sdk } = await getSdkContext();\n const result = await (sdk as any).state.getBagsPoolByTokenMint(mint);\n await printData(command, result);\n }),\n );\n}\n","import { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { CliConfig, loadCliConfig, OutputMode, saveCliConfig } from \"../lib/config.js\";\nimport { printData } from \"../lib/output.js\";\n\ntype SetOptions = {\n rpcUrl?: string;\n commitment?: \"processed\" | \"confirmed\" | \"finalized\";\n output?: OutputMode;\n};\n\nexport function registerSettingsCommands(program: Command): void {\n const settings = program.command(\"settings\").description(\"CLI settings\");\n\n settings\n .command(\"show\")\n .description(\"Show current settings\")\n .action(\n wrapAction(async (command) => {\n const config = await loadCliConfig();\n await printData(command, config);\n }),\n );\n\n settings\n .command(\"set\")\n .description(\"Set one or more settings\")\n .option(\"--rpc-url <url>\", \"Default RPC URL\")\n .option(\"--commitment <level>\", \"processed|confirmed|finalized\")\n .option(\"--output <mode>\", \"pretty|table|json\")\n .action(\n wrapAction(async (command, options: SetOptions) => {\n const current = await loadCliConfig();\n const next: CliConfig = {\n rpcUrl: options.rpcUrl ?? current.rpcUrl,\n commitment: options.commitment ?? current.commitment,\n output: options.output ?? current.output,\n };\n await saveCliConfig(next);\n await printData(command, next);\n }),\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { Command } from \"commander\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt, flagOrPromptNumber, promptConfirm } from \"../lib/prompt.js\";\nimport { getSdkContext } from \"../lib/sdk.js\";\nimport { getLocalSigner } from \"../lib/signer.js\";\nimport { signAndSend } from \"../lib/tx.js\";\n\ntype TradeOptions = {\n inputMint?: string;\n outputMint?: string;\n amount?: number;\n slippageMode?: \"auto\" | \"manual\";\n slippageBps?: number;\n skipConfirm?: boolean;\n};\n\nasync function resolveQuoteOptions(options: TradeOptions) {\n const inputMint = new PublicKey(await flagOrPrompt(options.inputMint, \"Input mint:\"));\n const outputMint = new PublicKey(await flagOrPrompt(options.outputMint, \"Output mint:\"));\n const amount = await flagOrPromptNumber(options.amount, \"Amount (base units):\");\n const slippageMode = (await flagOrPrompt(options.slippageMode, \"Slippage mode (auto/manual):\")) as\n | \"auto\"\n | \"manual\";\n const slippageBps =\n slippageMode === \"manual\" ? await flagOrPromptNumber(options.slippageBps, \"Slippage BPS (e.g. 100):\") : undefined;\n return { inputMint, outputMint, amount, slippageMode, slippageBps };\n}\n\nexport function registerTradeCommands(program: Command): void {\n const trade = program.command(\"trade\").description(\"Quote and execute swaps\");\n\n trade\n .command(\"quote\")\n .description(\"Get a swap quote\")\n .option(\"--input-mint <address>\", \"Input token mint\")\n .option(\"--output-mint <address>\", \"Output token mint\")\n .option(\"--amount <amount>\", \"Amount in base units\", Number)\n .option(\"--slippage-mode <mode>\", \"auto or manual\", \"auto\")\n .option(\"--slippage-bps <bps>\", \"Required for manual mode\", Number)\n .action(\n wrapAction(async (command, options: TradeOptions) => {\n const { sdk } = await getSdkContext();\n const quoteArgs = await resolveQuoteOptions(options);\n const quote = await (sdk as any).trade.getQuote(quoteArgs);\n await printData(command, quote);\n }),\n );\n\n trade\n .command(\"swap\")\n .description(\"Execute a swap (quote + transaction send)\")\n .option(\"--input-mint <address>\", \"Input token mint\")\n .option(\"--output-mint <address>\", \"Output token mint\")\n .option(\"--amount <amount>\", \"Amount in base units\", Number)\n .option(\"--slippage-mode <mode>\", \"auto or manual\", \"auto\")\n .option(\"--slippage-bps <bps>\", \"Required for manual mode\", Number)\n .option(\"--skip-confirm\", \"Skip transaction confirmation\")\n .action(\n wrapAction(async (command, options: TradeOptions) => {\n const quoteArgs = await resolveQuoteOptions(options);\n const { sdk, connection } = await getSdkContext();\n const { keypair, commitment } = await getLocalSigner();\n\n const quote = await (sdk as any).trade.getQuote(quoteArgs);\n if (!options.skipConfirm) {\n const ok = await promptConfirm(\n `Swap ${quoteArgs.amount} from ${quoteArgs.inputMint.toBase58()} to ${quoteArgs.outputMint.toBase58()}?`,\n );\n if (!ok) {\n return;\n }\n }\n\n const swap = await (sdk as any).trade.createSwapTransaction({\n quoteResponse: quote,\n userPublicKey: keypair.publicKey,\n });\n const signature = await signAndSend(connection, commitment, swap.transaction, keypair);\n await printData(command, { signature, quote, computeUnitLimit: swap.computeUnitLimit });\n }),\n );\n}\n","import { Command } from \"commander\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { wrapAction } from \"../lib/command.js\";\nimport { loadCliConfig } from \"../lib/config.js\";\nimport { printData } from \"../lib/output.js\";\nimport { flagOrPrompt } from \"../lib/prompt.js\";\nimport {\n BAGS_KEYPAIR_PATH,\n} from \"../lib/paths.js\";\nimport {\n generateKeypair,\n importKeypairFromBase58,\n importKeypairFromJsonFile,\n loadKeypair,\n} from \"../lib/wallet.js\";\nimport { lamportsToSol } from \"../utils/format.js\";\n\ntype GenerateOptions = {\n force?: boolean;\n};\n\ntype ImportOptions = {\n key?: string;\n file?: string;\n};\n\ntype BalanceOptions = {\n rpc?: string;\n token?: string;\n};\n\nexport function registerWalletCommands(program: Command): void {\n const wallet = program.command(\"wallet\").description(\"Wallet management commands\");\n\n wallet\n .command(\"generate\")\n .description(\"Generate and save a new local Solana keypair\")\n .option(\"--force\", \"Overwrite existing keypair\")\n .action(\n wrapAction(async (command, options: GenerateOptions) => {\n const kp = await generateKeypair(Boolean(options.force));\n await printData(command, { publicKey: kp.publicKey.toBase58(), path: BAGS_KEYPAIR_PATH });\n }),\n );\n\n wallet\n .command(\"import\")\n .description(\"Import keypair from base58 key or JSON secret file\")\n .option(\"--key <base58>\", \"Base58 private key\")\n .option(\"--file <path>\", \"JSON file containing secret key bytes\")\n .action(\n wrapAction(async (command, options: ImportOptions) => {\n let kp;\n if (options.key) {\n kp = await importKeypairFromBase58(options.key);\n } else if (options.file) {\n kp = await importKeypairFromJsonFile(options.file);\n } else {\n const method = await flagOrPrompt(undefined, \"Import method (key/file):\");\n if (method === \"file\") {\n const file = await flagOrPrompt(undefined, \"Path to keypair JSON file:\");\n kp = await importKeypairFromJsonFile(file);\n } else {\n const key = await flagOrPrompt(undefined, \"Base58 private key:\");\n kp = await importKeypairFromBase58(key);\n }\n }\n await printData(command, { publicKey: kp.publicKey.toBase58(), path: BAGS_KEYPAIR_PATH });\n }),\n );\n\n wallet\n .command(\"show\")\n .description(\"Show wallet address and SOL balance\")\n .option(\"--rpc <url>\", \"Override RPC URL\")\n .action(\n wrapAction(async (command, options: BalanceOptions) => {\n const kp = await loadKeypair();\n if (!kp) {\n throw new Error(\"No local keypair found. Run `bags wallet generate` or `bags wallet import`.\");\n }\n const config = await loadCliConfig();\n const connection = new Connection(options.rpc ?? config.rpcUrl, config.commitment);\n let sol = \"unknown\";\n try {\n const lamports = await connection.getBalance(kp.publicKey, config.commitment);\n sol = `${lamportsToSol(lamports)} SOL`;\n } catch {\n // RPC may be unreachable; still show the address\n }\n await printData(command, {\n publicKey: kp.publicKey.toBase58(),\n balance: sol,\n keypairPath: BAGS_KEYPAIR_PATH,\n });\n }),\n );\n\n wallet\n .command(\"balance\")\n .description(\"Show SOL or SPL token balance\")\n .option(\"--rpc <url>\", \"Override RPC URL\")\n .option(\"--token <mint>\", \"SPL token mint address\")\n .action(\n wrapAction(async (command, options: BalanceOptions) => {\n const kp = await loadKeypair();\n if (!kp) {\n throw new Error(\"No local keypair found.\");\n }\n const config = await loadCliConfig();\n const connection = new Connection(options.rpc ?? config.rpcUrl, config.commitment);\n\n if (options.token) {\n const mint = new PublicKey(options.token);\n const accounts = await connection.getParsedTokenAccountsByOwner(kp.publicKey, { mint });\n if (accounts.value.length === 0) {\n await printData(command, {\n publicKey: kp.publicKey.toBase58(),\n token: mint.toBase58(),\n balance: \"0\",\n });\n return;\n }\n const info = accounts.value[0].account.data.parsed.info.tokenAmount;\n await printData(command, {\n publicKey: kp.publicKey.toBase58(),\n token: mint.toBase58(),\n balance: `${info.uiAmountString} (raw: ${info.amount})`,\n });\n return;\n }\n\n const lamports = await connection.getBalance(kp.publicKey, config.commitment);\n await printData(command, {\n publicKey: kp.publicKey.toBase58(),\n balance: `${lamportsToSol(lamports)} SOL`,\n });\n }),\n );\n}\n"],"mappings":"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","names":["chalk","bs58","Keypair","input","readFile","rm","readFile","rm","Keypair","bs58","readFile","readFile","program","chalk","chalk","chalk","chalk","program","chalk","program","PublicKey","program","PublicKey","PublicKey","PublicKey","program","PublicKey","program","PublicKey","PublicKey","chalk","confirm","input","select","chalk","confirm","select","input","PublicKey","program","PublicKey","program","PublicKey","PublicKey","program","PublicKey","program","PublicKey","PublicKey","program","Connection","PublicKey","program","Connection","PublicKey"]}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@bagsfm/bags-cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "CLI for Bags API and SDK workflows — auth, trading, launches, fees, and config",
5
5
  "type": "module",
6
6
  "bin": {
7
- "bags": "./dist/index.js"
7
+ "bags": "dist/index.js"
8
8
  },
9
9
  "files": [
10
10
  "dist"
@@ -31,7 +31,7 @@
31
31
  "license": "MIT",
32
32
  "repository": {
33
33
  "type": "git",
34
- "url": "https://github.com/bagsfm/bags-cli.git"
34
+ "url": "git+https://github.com/bagsfm/bags-cli.git"
35
35
  },
36
36
  "homepage": "https://github.com/bagsfm/bags-cli#readme",
37
37
  "bugs": {