{"version":3,"sources":["../src/cli/commands/virtual-keys/create.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { VirtualKeysApiService } from \"@/client-sdk/services/virtual-keys/virtual-keys-api.service\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { failSpinner } from \"../../utils/spinnerError\";\nimport { formatScope, parseScopeArg, virtualKeyDetailUrl } from \"./_shared\";\n\nexport interface CreateVirtualKeyOptions {\n  name: string;\n  description?: string;\n  env?: \"live\" | \"test\";\n  scope?: string[];\n  routingPolicy?: string;\n  principalUser?: string;\n  format?: string;\n}\n\nexport const createVirtualKeyCommand = async (options: CreateVirtualKeyOptions): Promise<void> => {\n  checkApiKey();\n\n  if (!options.name) {\n    console.error(chalk.red(\"Error: --name is required\"));\n    process.exit(1);\n  }\n\n  const scopeArgs = options.scope ?? [];\n  if (scopeArgs.length === 0) {\n    console.error(chalk.red(\"Error: at least one --scope <TYPE:id> is required\"));\n    console.error(chalk.gray(\"Examples:\"));\n    console.error(chalk.gray(\"  --scope ORG:acme\"));\n    console.error(chalk.gray(\"  --scope TEAM:platform --scope TEAM:data-sci\"));\n    console.error(chalk.gray(\"  --scope PROJECT:demo\"));\n    process.exit(1);\n  }\n\n  let scopes;\n  try {\n    scopes = scopeArgs.map(parseScopeArg);\n  } catch (error) {\n    console.error(chalk.red(`Error: ${(error as Error).message}`));\n    process.exit(1);\n  }\n\n  const service = new VirtualKeysApiService();\n  const spinner = ora(`Creating virtual key \"${options.name}\"...`).start();\n\n  try {\n    const { virtual_key, secret } = await service.create({\n      name: options.name,\n      description: options.description,\n      environment: options.env ?? \"live\",\n      principal_user_id: options.principalUser ?? null,\n      scopes,\n      routing_policy_id: options.routingPolicy ?? null,\n    });\n\n    spinner.succeed(`Created virtual key \"${chalk.cyan(virtual_key.name)}\"`);\n\n    if (options.format === \"json\") {\n      console.log(JSON.stringify({ virtual_key, secret }, null, 2));\n      return;\n    }\n\n    console.log();\n    console.log(chalk.bold.yellow(\"⚠  Save the secret below NOW. It will not be shown again.\"));\n    console.log();\n    console.log(`  ${chalk.green(secret)}`);\n    console.log();\n    console.log(chalk.gray(\"Use it as the API key in OpenAI-compatible clients:\"));\n    console.log(chalk.cyan(\"  export OPENAI_API_KEY=\\\"\" + secret + \"\\\"\"));\n    console.log(chalk.cyan(\"  export OPENAI_BASE_URL=\\\"https://gateway.langwatch.ai/v1\\\"\"));\n    console.log();\n    console.log(chalk.gray(\"Virtual key id: \") + virtual_key.id);\n    console.log(chalk.gray(\"Prefix:         \") + `${virtual_key.prefix}...${virtual_key.last_four}`);\n    console.log(chalk.gray(\"Scopes:         \") + virtual_key.scopes.map(formatScope).join(\", \"));\n    if (virtual_key.routing_policy_id) {\n      console.log(chalk.gray(\"Routing policy: \") + virtual_key.routing_policy_id);\n    }\n    if (virtual_key.principal_user_id) {\n      console.log(chalk.gray(\"Principal:      \") + virtual_key.principal_user_id);\n    }\n    const detailUrl = virtualKeyDetailUrl(virtual_key.id);\n    if (detailUrl) {\n      console.log(chalk.gray(\"View in UI:     \") + chalk.cyan(detailUrl));\n    }\n    console.log();\n  } catch (error) {\n    failSpinner({ spinner, error, action: \"create virtual key\" });\n    process.exit(1);\n  }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAClB,OAAO,SAAS;AAgBT,IAAM,0BAA0B,OAAO,YAAoD;AAjBlG;AAkBE,cAAY;AAEZ,MAAI,CAAC,QAAQ,MAAM;AACjB,YAAQ,MAAM,MAAM,IAAI,2BAA2B,CAAC;AACpD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,aAAY,aAAQ,UAAR,YAAiB,CAAC;AACpC,MAAI,UAAU,WAAW,GAAG;AAC1B,YAAQ,MAAM,MAAM,IAAI,mDAAmD,CAAC;AAC5E,YAAQ,MAAM,MAAM,KAAK,WAAW,CAAC;AACrC,YAAQ,MAAM,MAAM,KAAK,oBAAoB,CAAC;AAC9C,YAAQ,MAAM,MAAM,KAAK,+CAA+C,CAAC;AACzE,YAAQ,MAAM,MAAM,KAAK,wBAAwB,CAAC;AAClD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI;AACJ,MAAI;AACF,aAAS,UAAU,IAAI,aAAa;AAAA,EACtC,SAAS,OAAO;AACd,YAAQ,MAAM,MAAM,IAAI,UAAW,MAAgB,OAAO,EAAE,CAAC;AAC7D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAU,IAAI,sBAAsB;AAC1C,QAAM,UAAU,IAAI,yBAAyB,QAAQ,IAAI,MAAM,EAAE,MAAM;AAEvE,MAAI;AACF,UAAM,EAAE,aAAa,OAAO,IAAI,MAAM,QAAQ,OAAO;AAAA,MACnD,MAAM,QAAQ;AAAA,MACd,aAAa,QAAQ;AAAA,MACrB,cAAa,aAAQ,QAAR,YAAe;AAAA,MAC5B,oBAAmB,aAAQ,kBAAR,YAAyB;AAAA,MAC5C;AAAA,MACA,oBAAmB,aAAQ,kBAAR,YAAyB;AAAA,IAC9C,CAAC;AAED,YAAQ,QAAQ,wBAAwB,MAAM,KAAK,YAAY,IAAI,CAAC,GAAG;AAEvE,QAAI,QAAQ,WAAW,QAAQ;AAC7B,cAAQ,IAAI,KAAK,UAAU,EAAE,aAAa,OAAO,GAAG,MAAM,CAAC,CAAC;AAC5D;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAI,MAAM,KAAK,OAAO,gEAA2D,CAAC;AAC1F,YAAQ,IAAI;AACZ,YAAQ,IAAI,KAAK,MAAM,MAAM,MAAM,CAAC,EAAE;AACtC,YAAQ,IAAI;AACZ,YAAQ,IAAI,MAAM,KAAK,qDAAqD,CAAC;AAC7E,YAAQ,IAAI,MAAM,KAAK,8BAA+B,SAAS,GAAI,CAAC;AACpE,YAAQ,IAAI,MAAM,KAAK,4DAA8D,CAAC;AACtF,YAAQ,IAAI;AACZ,YAAQ,IAAI,MAAM,KAAK,kBAAkB,IAAI,YAAY,EAAE;AAC3D,YAAQ,IAAI,MAAM,KAAK,kBAAkB,IAAI,GAAG,YAAY,MAAM,MAAM,YAAY,SAAS,EAAE;AAC/F,YAAQ,IAAI,MAAM,KAAK,kBAAkB,IAAI,YAAY,OAAO,IAAI,WAAW,EAAE,KAAK,IAAI,CAAC;AAC3F,QAAI,YAAY,mBAAmB;AACjC,cAAQ,IAAI,MAAM,KAAK,kBAAkB,IAAI,YAAY,iBAAiB;AAAA,IAC5E;AACA,QAAI,YAAY,mBAAmB;AACjC,cAAQ,IAAI,MAAM,KAAK,kBAAkB,IAAI,YAAY,iBAAiB;AAAA,IAC5E;AACA,UAAM,YAAY,oBAAoB,YAAY,EAAE;AACpD,QAAI,WAAW;AACb,cAAQ,IAAI,MAAM,KAAK,kBAAkB,IAAI,MAAM,KAAK,SAAS,CAAC;AAAA,IACpE;AACA,YAAQ,IAAI;AAAA,EACd,SAAS,OAAO;AACd,gBAAY,EAAE,SAAS,OAAO,QAAQ,qBAAqB,CAAC;AAC5D,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;","names":[]}