@cloudbase/cli 2.12.5-beta.1 → 2.12.5-beta.3

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.
@@ -326169,7 +326169,7 @@ module.exports = function generate_pattern(it, $keyword, $ruleType) {
326169
326169
  /***/ ((module) => {
326170
326170
 
326171
326171
  "use strict";
326172
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@cloudbase/cli","version":"2.12.5-beta.1","description":"cli tool for cloudbase","main":"lib/index.js","scripts":{"build":"rimraf lib types && tsc --resolveJsonModule && cpx \\"src/**/*.html\\" lib","watch":"rimraf lib types && tsc -w","dev":"rimraf lib types && cpx \\"src/**/*.html\\" lib && tsc -w","eslint":"eslint \\"./**/*.ts\\"","test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand --forceExit --detectOpenHandles --coverage --verbose --testTimeout=10000","tsc":"tsc","pkg":"pkg ./bin/cloudbase.js --out-path ./pkg","postinstall":"node ./post-install.js || exit 0 && patch-package","prepublishOnly":"node ./scripts/check-publish-source.js","debug":"bin/tcb.js lowcode watch","build:bundle":"webpack --config build/webpack/cli.cjs && webpack --config build/webpack/ccr.cjs && node build/scripts/copy-figlet-fonts.js","package:darwin-arm64":"OS=darwin ARCH=arm64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:darwin-x64":"OS=darwin ARCH=x64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:linux-arm64":"OS=linux ARCH=arm64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:linux-x64":"OS=linux ARCH=x64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:all":"bash build/scripts/build-all.sh","node:fetch:one":"node -e \\"require(\'child_process\').execSync(\'bash build/scripts/fetch-node.sh\',{stdio:\'inherit\'})\\"","node:fetch:all":"NODE_VERSION=22.18.0 bash build/scripts/fetch-node.sh --all","node:fetch:win-x64":"OS=windows ARCH=x64 NODE_VERSION=22.18.0 bash build/scripts/fetch-node.sh","node:fetch:win-arm64":"OS=windows ARCH=arm64 NODE_VERSION=22.18.0 bash build/scripts/fetch-node.sh","package:windows-x64":"OS=windows ARCH=x64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:windows-arm64":"OS=windows ARCH=arm64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:windows-all":"npm run -s node:fetch:win-x64 && npm run -s node:fetch:win-arm64 && npm run -s package:windows-x64 && npm run -s package:windows-arm64","package:npm":"npm run build && npm run build:bundle && bash build/scripts/prepare-publish.sh","out:prune":"bash build/scripts/prune-out.sh","i18n:scan":"i18next-scanner --config locales/i18next-scanner.config.js && node locales/scripts/generate.js","i18n:sync":"node locales/scripts/sync.js sync","publish":"node ./scripts/publish.js"},"repository":{"type":"git","url":"https://github.com/TencentCloudBase/cloud-base-cli.git"},"bin":{"cloudbase":"bin/cloudbase.js","cloudbase-mcp":"bin/cloudbase-mcp.cjs","tcb":"bin/tcb.js"},"husky":{"hooks":{"pre-commit":"npm run build"}},"author":"cwuyiqing@gmail.com","license":"ISC","dependencies":{"@cloudbase/cloud-api":"^0.5.5","@cloudbase/cloudbase-mcp":"^2.7.3","@cloudbase/framework-core":"^1.9.7","@cloudbase/functions-framework":"1.16.0","@cloudbase/iac-core":"0.0.3-alpha.14","@cloudbase/lowcode-cli":"^0.23.0","@cloudbase/manager-node":"4.7.4","@cloudbase/toolbox":"0.7.17-beta.0","@dotenvx/dotenvx":"^1.48.3","@musistudio/claude-code-router":"1.0.36","address":"^1.1.2","camelcase-keys":"^7.0.2","chalk":"^2.4.2","cli-table3":"^0.5.1","commander":"7","del":"^5.1.0","didyoumean":"^1.2.2","enquirer":"^2.3.6","execa":"^4.0.3","figlet":"^1.7.0","fs-extra":"^8.1.0","gradient-string":"^2.0.2","https-proxy-agent":"^5.0.1","i":"^0.3.7","inquirer":"^6.5.0","json-schema-to-typescript":"^14.0.5","lodash":"^4.17.21","log-symbols":"^3.0.0","lowdb":"^1.0.0","make-dir":"^3.0.0","node-fetch":"^2.6.0","nodemon":"^3.1.4","npm":"^11.5.2","open":"^7.0.0","ora":"^4.0.2","os-locale":"5.0.0","patch-package":"^8.0.0","portfinder":"^1.0.28","progress":"^2.0.3","query-string":"^6.8.1","reflect-metadata":"^0.1.13","semver":"^7.3.7","simple-git":"^3.28.0","tar-fs":"^2.0.1","terminal-link":"^2.1.1","toml":"^3.0.0","unzipper":"^0.10.10","update-notifier":"^4.0.0","xdg-basedir":"^4.0.0","yargs":"^16.2.0","yargs-parser":"^21.0.1","zod":"^4.0.13"},"devDependencies":{"@babel/parser":"^7.28.4","@babel/traverse":"^7.28.4","@babel/types":"^7.28.4","@types/fs-extra":"^11.0.4","@types/jest":"^27","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^12.12.38","@types/node-fetch":"^2.5.4","@types/react":"^17.0.37","@types/semver":"^7.3.9","@types/unzipper":"^0.10.11","@types/webpack-dev-server":"^3.11.1","@typescript-eslint/eslint-plugin":"^4.8.1","@typescript-eslint/parser":"^4.8.1","cpx":"^1.5.0","eslint":"^7.14.0","eslint-config-alloy":"^3.8.2","husky":"^3.0.9","i18next-scanner":"^4.6.0","jest":"^27","rimraf":"^3.0.2","ts-jest":"^27","typescript":"^4.7.2","webpack":"^5.92.0","webpack-cli":"^5.1.4"},"packageManager":"yarn@3.6.2+sha512.2c2f8b9615e6659773f65cdec7cf92ef773a98a99e611579601f61c7a91ec94c89c929aac86f1cee819421a9b0db7acfd53ec3ebb95af44f77f77634b08b9557","ai":{"skills":"./skills","skillsIndex":"./skills/index.json","compatible":["codebuddy","cursor","copilot","claude","windsurf"],"description":"CloudBase CLI - 腾讯云云开发命令行工具,支持云函数、云数据库、静态托管等全栈云开发能力"}}');
326172
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@cloudbase/cli","version":"2.12.5-beta.3","description":"cli tool for cloudbase","main":"lib/index.js","scripts":{"build":"rimraf lib types && tsc --resolveJsonModule && cpx \\"src/**/*.html\\" lib","watch":"rimraf lib types && tsc -w","dev":"rimraf lib types && cpx \\"src/**/*.html\\" lib && tsc -w","eslint":"eslint \\"./**/*.ts\\"","test":"node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand --forceExit --detectOpenHandles --coverage --verbose --testTimeout=10000","tsc":"tsc","pkg":"pkg ./bin/cloudbase.js --out-path ./pkg","postinstall":"node ./post-install.js || exit 0 && patch-package","prepublishOnly":"node ./scripts/check-publish-source.js","debug":"bin/tcb.js lowcode watch","build:bundle":"webpack --config build/webpack/cli.cjs && webpack --config build/webpack/ccr.cjs && node build/scripts/copy-figlet-fonts.js","package:darwin-arm64":"OS=darwin ARCH=arm64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:darwin-x64":"OS=darwin ARCH=x64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:linux-arm64":"OS=linux ARCH=arm64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:linux-x64":"OS=linux ARCH=x64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:all":"bash build/scripts/build-all.sh","node:fetch:one":"node -e \\"require(\'child_process\').execSync(\'bash build/scripts/fetch-node.sh\',{stdio:\'inherit\'})\\"","node:fetch:all":"NODE_VERSION=22.18.0 bash build/scripts/fetch-node.sh --all","node:fetch:win-x64":"OS=windows ARCH=x64 NODE_VERSION=22.18.0 bash build/scripts/fetch-node.sh","node:fetch:win-arm64":"OS=windows ARCH=arm64 NODE_VERSION=22.18.0 bash build/scripts/fetch-node.sh","package:windows-x64":"OS=windows ARCH=x64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:windows-arm64":"OS=windows ARCH=arm64 VERSION= node -e \\"require(\'child_process\').execSync(\'bash build/scripts/package.sh\',{stdio:\'inherit\'})\\"","package:windows-all":"npm run -s node:fetch:win-x64 && npm run -s node:fetch:win-arm64 && npm run -s package:windows-x64 && npm run -s package:windows-arm64","package:npm":"npm run build && npm run build:bundle && bash build/scripts/prepare-publish.sh","out:prune":"bash build/scripts/prune-out.sh","i18n:scan":"i18next-scanner --config locales/i18next-scanner.config.js && node locales/scripts/generate.js","i18n:sync":"node locales/scripts/sync.js sync","publish":"node ./scripts/publish.js"},"repository":{"type":"git","url":"https://github.com/TencentCloudBase/cloud-base-cli.git"},"bin":{"cloudbase":"bin/cloudbase.js","cloudbase-mcp":"bin/cloudbase-mcp.cjs","tcb":"bin/tcb.js"},"husky":{"hooks":{"pre-commit":"npm run build"}},"author":"cwuyiqing@gmail.com","license":"ISC","dependencies":{"@cloudbase/cloud-api":"^0.5.5","@cloudbase/cloudbase-mcp":"^2.7.3","@cloudbase/framework-core":"^1.9.7","@cloudbase/functions-framework":"1.16.0","@cloudbase/iac-core":"0.0.3-alpha.14","@cloudbase/lowcode-cli":"^0.23.0","@cloudbase/manager-node":"4.7.4","@cloudbase/toolbox":"0.7.17-beta.3","@dotenvx/dotenvx":"^1.48.3","@musistudio/claude-code-router":"1.0.36","address":"^1.1.2","camelcase-keys":"^7.0.2","chalk":"^2.4.2","cli-table3":"^0.5.1","commander":"7","del":"^5.1.0","didyoumean":"^1.2.2","enquirer":"^2.3.6","execa":"^4.0.3","figlet":"^1.7.0","fs-extra":"^8.1.0","gradient-string":"^2.0.2","https-proxy-agent":"^5.0.1","i":"^0.3.7","inquirer":"^6.5.0","json-schema-to-typescript":"^14.0.5","lodash":"^4.17.21","log-symbols":"^3.0.0","lowdb":"^1.0.0","make-dir":"^3.0.0","node-fetch":"^2.6.0","nodemon":"^3.1.4","npm":"^11.5.2","open":"^7.0.0","ora":"^4.0.2","os-locale":"5.0.0","patch-package":"^8.0.0","portfinder":"^1.0.28","progress":"^2.0.3","query-string":"^6.8.1","reflect-metadata":"^0.1.13","semver":"^7.3.7","simple-git":"^3.28.0","tar-fs":"^2.0.1","terminal-link":"^2.1.1","toml":"^3.0.0","unzipper":"^0.10.10","update-notifier":"^4.0.0","xdg-basedir":"^4.0.0","yargs":"^16.2.0","yargs-parser":"^21.0.1","zod":"^4.0.13"},"devDependencies":{"@babel/parser":"^7.28.4","@babel/traverse":"^7.28.4","@babel/types":"^7.28.4","@types/fs-extra":"^11.0.4","@types/jest":"^27","@types/koa__router":"^8.0.11","@types/lodash":"^4.14.182","@types/node":"^12.12.38","@types/node-fetch":"^2.5.4","@types/react":"^17.0.37","@types/semver":"^7.3.9","@types/unzipper":"^0.10.11","@types/webpack-dev-server":"^3.11.1","@typescript-eslint/eslint-plugin":"^4.8.1","@typescript-eslint/parser":"^4.8.1","cpx":"^1.5.0","eslint":"^7.14.0","eslint-config-alloy":"^3.8.2","husky":"^3.0.9","i18next-scanner":"^4.6.0","jest":"^27","rimraf":"^3.0.2","ts-jest":"^27","typescript":"^4.7.2","webpack":"^5.92.0","webpack-cli":"^5.1.4"},"packageManager":"yarn@3.6.2+sha512.2c2f8b9615e6659773f65cdec7cf92ef773a98a99e611579601f61c7a91ec94c89c929aac86f1cee819421a9b0db7acfd53ec3ebb95af44f77f77634b08b9557","ai":{"skills":"./skills","skillsIndex":"./skills/index.json","compatible":["codebuddy","cursor","copilot","claude","windsurf"],"description":"CloudBase CLI - 腾讯云云开发命令行工具,支持云函数、云数据库、静态托管等全栈云开发能力"}}');
326173
326173
 
326174
326174
  /***/ }),
326175
326175
 
@@ -398315,7 +398315,6 @@ const web_auth_1 = __webpack_require__(76097);
398315
398315
  const oauth_1 = __webpack_require__(92423);
398316
398316
  const common_1 = __webpack_require__(96711);
398317
398317
  const credential_1 = __webpack_require__(99795);
398318
- const web_1 = __webpack_require__(2240);
398319
398318
  const error_1 = __webpack_require__(64119);
398320
398319
  __exportStar(__webpack_require__(96711), exports);
398321
398320
  __exportStar(__webpack_require__(99795), exports);
@@ -398370,7 +398369,7 @@ class AuthSupervisor {
398370
398369
  */
398371
398370
  loginByWebAuth(options = {}) {
398372
398371
  return __awaiter(this, void 0, void 0, function* () {
398373
- const { getAuthUrl, throwError, noBrowser, callbackTimeout, mode: authFlowType, client_id, onDeviceCode } = options;
398372
+ const { getAuthUrl, throwError, noBrowser, callbackTimeout, flow = 'device', client_id, onDeviceCode, getOAuthEndpoint, silent } = options;
398374
398373
  if (this.cacheCredential && this.needCache && !this.isCacheExpire()) {
398375
398374
  return this.cacheCredential;
398376
398375
  }
@@ -398379,42 +398378,16 @@ class AuthSupervisor {
398379
398378
  if (credential)
398380
398379
  return credential;
398381
398380
  // 根据授权方式获取凭证
398382
- switch (authFlowType) {
398383
- case 'device':
398384
- credential = yield (0, oauth_1.getAuthTokenByDeviceFlow)({ client_id, onDeviceCode });
398385
- break;
398386
- case 'web':
398387
- credential = yield (0, web_auth_1.getAuthTokenFromWeb)({
398388
- getAuthUrl,
398389
- noBrowser,
398390
- callbackTimeout
398391
- });
398392
- break;
398393
- case 'default':
398394
- default: {
398395
- const isNoBrowser = noBrowser || (0, web_1.isTruthyFlag)(process.env.TCB_NO_BROWSER);
398396
- if (isNoBrowser) {
398397
- credential = yield (0, oauth_1.getAuthTokenByDeviceFlow)({ client_id, onDeviceCode });
398398
- }
398399
- else {
398400
- try {
398401
- credential = yield (0, web_auth_1.getAuthTokenFromWeb)({
398402
- getAuthUrl,
398403
- callbackTimeout,
398404
- onOpenFailed: () => { }
398405
- });
398406
- }
398407
- catch (e) {
398408
- if ((e === null || e === void 0 ? void 0 : e.code) === 'BROWSER_OPEN_FAILED') {
398409
- credential = yield (0, oauth_1.getAuthTokenByDeviceFlow)({ client_id, onDeviceCode });
398410
- }
398411
- else {
398412
- throw e;
398413
- }
398414
- }
398415
- }
398416
- break;
398417
- }
398381
+ if (flow === 'web') {
398382
+ credential = yield (0, web_auth_1.getAuthTokenFromWeb)({
398383
+ getAuthUrl,
398384
+ noBrowser,
398385
+ callbackTimeout,
398386
+ silent
398387
+ });
398388
+ }
398389
+ else {
398390
+ credential = yield (0, oauth_1.getAuthTokenByDeviceFlow)({ client_id, onDeviceCode, getOAuthEndpoint, getAuthUrl, silent });
398418
398391
  }
398419
398392
  credential = (0, common_1.resolveCredential)(credential);
398420
398393
  try {
@@ -410397,12 +410370,11 @@ function openUrlByBrowserEnv(url) {
410397
410370
  function shouldUseBrowserEnvFallback() {
410398
410371
  return process.platform === 'linux' && isVSCodeEnvironment();
410399
410372
  }
410400
- function openUrl(url, options = {}) {
410373
+ function openUrl(url) {
410401
410374
  return __awaiter(this, void 0, void 0, function* () {
410402
- const { skipBrowserFallback = false } = options;
410403
410375
  try {
410404
410376
  const child = yield (0, open_1.default)(url, { url: true });
410405
- if ((child === null || child === void 0 ? void 0 : child.once) && !skipBrowserFallback) {
410377
+ if (child === null || child === void 0 ? void 0 : child.once) {
410406
410378
  child.once('error', (error) => __awaiter(this, void 0, void 0, function* () {
410407
410379
  if (shouldUseBrowserEnvFallback()) {
410408
410380
  yield openUrlByBrowserEnv(url);
@@ -410412,7 +410384,7 @@ function openUrl(url, options = {}) {
410412
410384
  return true;
410413
410385
  }
410414
410386
  catch (e) {
410415
- if (!skipBrowserFallback && shouldUseBrowserEnvFallback()) {
410387
+ if (shouldUseBrowserEnvFallback()) {
410416
410388
  return openUrlByBrowserEnv(url);
410417
410389
  }
410418
410390
  return false;
@@ -410422,28 +410394,25 @@ function openUrl(url, options = {}) {
410422
410394
  exports.openUrl = openUrl;
410423
410395
  // 从 Web 页面中获取数据
410424
410396
  function getDataFromWeb(getUrl, type, options = {}) {
410425
- var _a, _b;
410397
+ var _a, _b, _c;
410426
410398
  return __awaiter(this, void 0, void 0, function* () {
410427
410399
  const { server, port } = yield createLocalServer();
410428
410400
  const noBrowser = (_a = options.noBrowser) !== null && _a !== void 0 ? _a : isTruthyFlag(process.env.TCB_NO_BROWSER);
410429
410401
  const callbackTimeout = (_b = options.callbackTimeout) !== null && _b !== void 0 ? _b : 180000;
410402
+ const silent = (_c = options.silent) !== null && _c !== void 0 ? _c : false;
410430
410403
  if (!Number.isFinite(callbackTimeout) || callbackTimeout <= 0) {
410431
410404
  throw new error_1.CloudBaseError('callbackTimeout must be a positive number');
410432
410405
  }
410433
410406
  const url = getUrl(port);
410434
- console.log('\n\n若链接未自动打开,请手动复制至浏览器,或尝试其他登录方式:');
410435
- console.log(`\n${url}\n`);
410407
+ if (!silent) {
410408
+ console.log('\n\n若链接未自动打开,请手动复制至浏览器,或尝试其他登录方式:');
410409
+ console.log(`\n${url}\n`);
410410
+ }
410436
410411
  if (!noBrowser) {
410437
410412
  // 对 url 转码, 避免 wsl 无法正常打开地址
410438
410413
  // https://www.npmjs.com/package/open#url
410439
410414
  // https://github.com/sindresorhus/open/blob/master/index.js#L48
410440
- const skipBrowserFallback = !!options.onOpenFailed;
410441
- const opened = yield openUrl(url, { skipBrowserFallback });
410442
- if (!opened && options.onOpenFailed) {
410443
- server.close();
410444
- options.onOpenFailed();
410445
- throw new error_1.CloudBaseError('浏览器打开失败', { code: 'BROWSER_OPEN_FAILED' });
410446
- }
410415
+ yield openUrl(url);
410447
410416
  }
410448
410417
  return new Promise((resolve, reject) => {
410449
410418
  let finished = false;
@@ -440111,16 +440080,23 @@ const LoginRes = {
440111
440080
  };
440112
440081
  }
440113
440082
  };
440114
- function loginByWebAuth() {
440083
+ function loginByWebAuth({ flow } = {}) {
440115
440084
  return __awaiter(this, void 0, void 0, function* () {
440116
440085
  try {
440117
440086
  const credential = yield utils_1.authSupevisor.loginByWebAuth({
440087
+ flow,
440118
440088
  getAuthUrl: (rawUrl) => {
440119
440089
  if ((0, i18n_1.isIntl)()) {
440120
440090
  return rawUrl.replace('https://tcb.cloud.tencent.com/dev', utils_1.EUrl.DevPlatform);
440121
440091
  }
440122
440092
  return rawUrl;
440123
- }
440093
+ },
440094
+ getOAuthEndpoint: (rawEndpoint) => {
440095
+ if ((0, i18n_1.isIntl)()) {
440096
+ return rawEndpoint.replace('https://tcb-api.cloud.tencent.com', 'https://tcb-api.tencentcloud.com');
440097
+ }
440098
+ return rawEndpoint;
440099
+ },
440124
440100
  });
440125
440101
  if (lodash_1.default.isEmpty(credential)) {
440126
440102
  return LoginRes.INVALID_TOKEN;
@@ -440128,9 +440104,6 @@ function loginByWebAuth() {
440128
440104
  return Object.assign({ credential }, LoginRes.SUCCESS);
440129
440105
  }
440130
440106
  catch (error) {
440131
- console.error((0, i18n_1.t)('Web 授权登录失败,可能是环境兼容性问题'));
440132
- console.error((0, i18n_1.t)('建议使用密钥登录:tcb login --key'));
440133
- console.error((0, i18n_1.t)('详细说明请参考:{{url}}', { url: 'https://docs.cloudbase.net/cli-v1/login#%E8%85%BE%E8%AE%AF%E4%BA%91-%E4%BA%91%E5%BC%80%E5%8F%91%E6%8E%A7%E5%88%B6%E5%8F%B0%E6%8E%88%E6%9D%83' }));
440134
440107
  return {
440135
440108
  code: 'WEB_AUTH_FAILED',
440136
440109
  msg: (0, i18n_1.t)('Web 授权登录失败,请使用密钥登录:tcb login --key'),
@@ -440155,8 +440128,8 @@ function loginWithKey(secretId, secretKey, token) {
440155
440128
  exports.loginWithKey = loginWithKey;
440156
440129
  function login(options = {}) {
440157
440130
  return __awaiter(this, void 0, void 0, function* () {
440158
- const { secretId, secretKey, key, token } = options;
440159
- return key ? loginWithKey(secretId, secretKey, token) : loginByWebAuth();
440131
+ const { secretId, secretKey, key, token, flow } = options;
440132
+ return key ? loginWithKey(secretId, secretKey, token) : loginByWebAuth({ flow });
440160
440133
  });
440161
440134
  }
440162
440135
  exports.login = login;
@@ -743444,7 +743417,7 @@ exports.CLI_AUTH_BASE_URL = 'https://tcb.cloud.tencent.com/dev';
743444
743417
  // 打开云开发控制台,获取授权
743445
743418
  function getAuthTokenFromWeb(options = {}) {
743446
743419
  return __awaiter(this, void 0, void 0, function* () {
743447
- const { getAuthUrl, noBrowser, callbackTimeout, onOpenFailed } = options;
743420
+ const { getAuthUrl, noBrowser, callbackTimeout, silent } = options;
743448
743421
  const mac = yield (0, system_1.getMacAddress)();
743449
743422
  const os = (0, system_1.getOSInfo)();
743450
743423
  const macHash = (0, coding_1.md5Encoding)(mac);
@@ -743471,7 +743444,7 @@ function getAuthTokenFromWeb(options = {}) {
743471
743444
  }, 'login', {
743472
743445
  noBrowser,
743473
743446
  callbackTimeout,
743474
- onOpenFailed
743447
+ silent
743475
743448
  });
743476
743449
  const credential = (0, common_1.resolveCredential)(query);
743477
743450
  return credential;
@@ -866711,6 +866684,7 @@ const error_1 = __webpack_require__(64119);
866711
866684
  const coding_1 = __webpack_require__(40540);
866712
866685
  const system_1 = __webpack_require__(62179);
866713
866686
  const web_auth_1 = __webpack_require__(76097);
866687
+ /** 默认国内站 应用侧可通过 getOAuthEndpoint 覆写 */
866714
866688
  const OAUTH_ENDPOINT = process.env.TCB_OAUTH_ENDPOINT || 'https://tcb-api.cloud.tencent.com/qcloud-tcb/v1/oauth';
866715
866689
  const DEFAULT_CLIENT_ID = 'cloudbase-toolbox';
866716
866690
  const POLL_ERROR_CODES = {
@@ -866721,14 +866695,14 @@ const POLL_ERROR_CODES = {
866721
866695
  };
866722
866696
  const SUCCESS_CODE = 'NORMAL';
866723
866697
  function fetchDeviceCode(options = {}) {
866724
- const { client_id = DEFAULT_CLIENT_ID } = options;
866725
- return (0, net_1.postFetch)(`${OAUTH_ENDPOINT}/device/code`, { client_id });
866698
+ const { client_id = DEFAULT_CLIENT_ID, endpoint = OAUTH_ENDPOINT } = options;
866699
+ return (0, net_1.postFetch)(`${endpoint}/device/code`, { client_id });
866726
866700
  }
866727
866701
  function fetchPollToken(options) {
866728
866702
  return __awaiter(this, void 0, void 0, function* () {
866729
- const { device_code, client_id = DEFAULT_CLIENT_ID } = options;
866703
+ const { device_code, client_id = DEFAULT_CLIENT_ID, endpoint = OAUTH_ENDPOINT } = options;
866730
866704
  const mac = yield (0, system_1.getMacAddress)();
866731
- return (0, net_1.postFetch)(`${OAUTH_ENDPOINT}/token`, {
866705
+ return (0, net_1.postFetch)(`${endpoint}/token`, {
866732
866706
  device_code,
866733
866707
  client_id,
866734
866708
  grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
@@ -866747,8 +866721,9 @@ function sleep(ms) {
866747
866721
  }
866748
866722
  function getAuthTokenByDeviceFlow(options = {}) {
866749
866723
  return __awaiter(this, void 0, void 0, function* () {
866750
- const { client_id, onDeviceCode } = options;
866751
- const deviceCodeResp = yield fetchDeviceCode({ client_id });
866724
+ const { client_id, onDeviceCode, getOAuthEndpoint, getAuthUrl, silent } = options;
866725
+ const endpoint = getOAuthEndpoint ? getOAuthEndpoint(OAUTH_ENDPOINT) : OAUTH_ENDPOINT;
866726
+ const deviceCodeResp = yield fetchDeviceCode({ client_id, endpoint });
866752
866727
  if (deviceCodeResp.code !== SUCCESS_CODE) {
866753
866728
  throw new error_1.CloudBaseError('Device Flow fetchDeviceCode failed', {
866754
866729
  code: deviceCodeResp.code,
@@ -866756,15 +866731,17 @@ function getAuthTokenByDeviceFlow(options = {}) {
866756
866731
  });
866757
866732
  }
866758
866733
  const { device_code, user_code, expires_in, interval } = deviceCodeResp.result;
866759
- // const defaultVerificationUri = deviceCodeResp.result.verification_uri || `${CLI_AUTH_BASE_URL}#/cli-auth`;
866760
866734
  // 暂时不消费 verification_uri,由客户端控制跳转
866761
866735
  const defaultVerificationUri = `${web_auth_1.CLI_AUTH_BASE_URL}#/cli-auth`;
866762
866736
  // from=cli 后续考虑改用 client_id,因为 toolbox 作为公共依赖,可能被不同 client 所引用
866763
- const verification_uri = `${defaultVerificationUri}?user_code=${user_code}&from=cli&mode=device`;
866764
- // 打印授权信息,引导用户操作
866765
- console.log('\n\n若链接未自动打开,请手动复制至浏览器,或尝试其他登录方式:');
866766
- console.log(`\n${verification_uri}`);
866767
- console.log(`\n用户码: ${user_code}\n`);
866737
+ const rawVerificationUri = `${defaultVerificationUri}?user_code=${user_code}&from=cli&flow=device`;
866738
+ const verification_uri = getAuthUrl ? getAuthUrl(rawVerificationUri) : rawVerificationUri;
866739
+ if (!silent) {
866740
+ // 打印授权信息,引导用户操作
866741
+ console.log('\n\n若链接未自动打开,请手动复制至浏览器,或尝试其他登录方式:');
866742
+ console.log(`\n${verification_uri}`);
866743
+ console.log(`\n用户码: ${user_code}\n`);
866744
+ }
866768
866745
  // 尝试自动打开授权页面
866769
866746
  yield (0, web_1.openUrl)(verification_uri);
866770
866747
  if (onDeviceCode) {
@@ -866776,7 +866753,7 @@ function getAuthTokenByDeviceFlow(options = {}) {
866776
866753
  yield sleep(pollInterval * 1000);
866777
866754
  let resp;
866778
866755
  try {
866779
- resp = yield fetchPollToken({ device_code, interval: pollInterval, client_id });
866756
+ resp = yield fetchPollToken({ device_code, interval: pollInterval, client_id, endpoint });
866780
866757
  }
866781
866758
  catch (e) {
866782
866759
  throw new error_1.CloudBaseError('Device Flow 轮询请求失败', { original: e });
@@ -913249,6 +913226,10 @@ let LoginCommand = class LoginCommand extends common_1.Command {
913249
913226
  {
913250
913227
  flags: '--token [token]',
913251
913228
  desc: (0, i18n_1.t)('腾讯云 API 临时秘钥 Token')
913229
+ },
913230
+ {
913231
+ flags: '--flow <flow>',
913232
+ desc: (0, i18n_1.t)('Web 登录授权方式(device 或 web),默认 device')
913252
913233
  }
913253
913234
  ],
913254
913235
  desc: (0, i18n_1.t)('登录腾讯云账号'),
@@ -913259,7 +913240,7 @@ let LoginCommand = class LoginCommand extends common_1.Command {
913259
913240
  execute(options, log) {
913260
913241
  return __awaiter(this, void 0, void 0, function* () {
913261
913242
  log.verbose(options);
913262
- const { apiKeyId, apiKey, token } = options;
913243
+ const { apiKeyId, apiKey, token, flow } = options;
913263
913244
  const loading = (0, utils_1.loadingFactory)();
913264
913245
  loading.start((0, i18n_1.t)('检验登录状态'));
913265
913246
  const credential = yield (0, utils_1.checkAndGetCredential)();
@@ -913321,7 +913302,7 @@ let LoginCommand = class LoginCommand extends common_1.Command {
913321
913302
  }
913322
913303
  else {
913323
913304
  loading.start((0, i18n_1.t)('请在浏览器中打开的授权页面进行授权...'));
913324
- const res = yield (0, auth_1.login)();
913305
+ const res = yield (0, auth_1.login)({ flow });
913325
913306
  if (res.code === 'SUCCESS') {
913326
913307
  loading.succeed((0, i18n_1.t)('登录成功!'));
913327
913308
  yield askForCollectDataConfirm();
@@ -913329,6 +913310,9 @@ let LoginCommand = class LoginCommand extends common_1.Command {
913329
913310
  }
913330
913311
  else if (res.code === 'WEB_AUTH_FAILED') {
913331
913312
  loading.fail((0, i18n_1.t)('Web 授权登录失败'));
913313
+ if (res.error) {
913314
+ log.error(res.error);
913315
+ }
913332
913316
  console.log(chalk_1.default.yellow((0, i18n_1.t)('⚠️ 检测到环境兼容性问题')));
913333
913317
  console.log(chalk_1.default.cyan((0, i18n_1.t)('建议使用密钥登录:')));
913334
913318
  console.log(chalk_1.default.cyan((0, i18n_1.t)('tcb login --key')));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/cli",
3
- "version": "2.12.5-beta.1",
3
+ "version": "2.12.5-beta.3",
4
4
  "description": "CLI for Tencent CloudBase (standalone bundle)",
5
5
  "bin": {
6
6
  "tcb": "bin/tcb",