@cloudbase/cli 1.12.7-alpha.4 → 2.0.0

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.
Files changed (317) hide show
  1. package/.editorconfig +9 -9
  2. package/.eslintignore +7 -7
  3. package/.eslintrc +35 -35
  4. package/.prettierrc.js +29 -29
  5. package/.vscode/launch.json +16 -16
  6. package/.vscode/settings.json +3 -0
  7. package/LICENSE +5 -5
  8. package/README.md +35 -35
  9. package/bin/cloudbase.js +5 -5
  10. package/bin/tcb.js +0 -0
  11. package/changelog.md +6 -6
  12. package/jest.config.js +17 -17
  13. package/lib/commands/account/login.js +18 -18
  14. package/lib/commands/run/create.js +6 -1
  15. package/lib/commands/run/delete.js +6 -1
  16. package/lib/commands/run/image/common.js +1 -1
  17. package/lib/commands/run/image/delete.js +5 -0
  18. package/lib/commands/run/image/download.js +5 -0
  19. package/lib/commands/run/image/list.js +5 -0
  20. package/lib/commands/run/image/upload.js +5 -0
  21. package/lib/commands/run/index.js +1 -0
  22. package/lib/commands/run/list.js +7 -1
  23. package/lib/commands/run/service/config.js +112 -0
  24. package/lib/commands/run/service/create.js +140 -0
  25. package/lib/commands/run/service/deploy.js +145 -0
  26. package/lib/commands/run/service/index.js +21 -0
  27. package/lib/commands/run/service/list.js +115 -0
  28. package/lib/commands/run/service/update.js +132 -0
  29. package/lib/commands/run/version/common.js +1 -1
  30. package/lib/commands/run/version/create.js +5 -0
  31. package/lib/commands/run/version/delete.js +5 -0
  32. package/lib/commands/run/version/list.js +5 -0
  33. package/lib/commands/run/version/modify.js +5 -0
  34. package/lib/commands/run/version/update.js +5 -0
  35. package/lib/commands/storage/storage.js +1 -1
  36. package/lib/constant.js +20 -1
  37. package/lib/env/login.js +7 -7
  38. package/lib/help.js +40 -38
  39. package/lib/run/index.js +1 -0
  40. package/lib/run/service/common.js +163 -0
  41. package/lib/run/service/config.js +70 -0
  42. package/lib/run/service/create.js +67 -0
  43. package/lib/run/service/deployPackage.js +87 -0
  44. package/lib/run/service/index.js +23 -0
  45. package/lib/run/service/list.js +31 -0
  46. package/lib/run/service/showLogs.js +116 -0
  47. package/lib/run/service/update.js +83 -0
  48. package/lib/utils/checkTcbrEnv.js +74 -0
  49. package/lib/utils/commonParamsCheck.js +48 -0
  50. package/lib/utils/index.js +3 -0
  51. package/lib/utils/tcbrApi/callTcbrApi.js +38 -0
  52. package/lib/utils/tcbrApi/index.js +17 -0
  53. package/lib/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.js +268 -0
  54. package/lib/utils/tcbrApi/tcbr-cloud-api/error.js +17 -0
  55. package/lib/utils/tcbrApi/tcbr-cloud-api/index.js +17 -0
  56. package/lib/utils/tcbrApi/tcbr-cloud-api/request.js +40 -0
  57. package/lib/utils/tcbrApi/tcbr-cloud-api-request.js +61 -0
  58. package/lib/utils/validator.js +32 -1
  59. package/package.json +88 -88
  60. package/post-install.js +61 -61
  61. package/runtime/nodejs/bootstrap.js +255 -255
  62. package/runtime/nodejs/runtime.js +183 -183
  63. package/src/auth/index.ts +1 -1
  64. package/src/auth/login.ts +91 -91
  65. package/src/auth/logout.ts +7 -7
  66. package/src/commands/account/index.ts +2 -2
  67. package/src/commands/account/login.ts +192 -192
  68. package/src/commands/account/logout.ts +24 -24
  69. package/src/commands/common.ts +246 -246
  70. package/src/commands/env/base.ts +90 -90
  71. package/src/commands/env/create.ts +92 -92
  72. package/src/commands/env/domain.ts +186 -186
  73. package/src/commands/env/index.ts +4 -4
  74. package/src/commands/env/login.ts +235 -235
  75. package/src/commands/framework/index.ts +124 -124
  76. package/src/commands/functions/alias/getRoute.ts +76 -76
  77. package/src/commands/functions/alias/index.ts +2 -2
  78. package/src/commands/functions/alias/setRoute.ts +82 -82
  79. package/src/commands/functions/code-download.ts +100 -100
  80. package/src/commands/functions/code-update.ts +62 -62
  81. package/src/commands/functions/concurrency/delete.ts +45 -45
  82. package/src/commands/functions/concurrency/index.ts +2 -2
  83. package/src/commands/functions/concurrency/list.ts +58 -58
  84. package/src/commands/functions/concurrency/set.ts +47 -47
  85. package/src/commands/functions/config-update.ts +76 -76
  86. package/src/commands/functions/copy.ts +62 -62
  87. package/src/commands/functions/delete.ts +79 -79
  88. package/src/commands/functions/deploy.ts +293 -293
  89. package/src/commands/functions/detail.ts +138 -138
  90. package/src/commands/functions/index.ts +16 -16
  91. package/src/commands/functions/invoke.ts +121 -121
  92. package/src/commands/functions/layer/bind.ts +182 -182
  93. package/src/commands/functions/layer/common.ts +8 -8
  94. package/src/commands/functions/layer/create.ts +49 -49
  95. package/src/commands/functions/layer/delete.ts +73 -73
  96. package/src/commands/functions/layer/download.ts +92 -92
  97. package/src/commands/functions/layer/index.ts +7 -7
  98. package/src/commands/functions/layer/list.ts +94 -94
  99. package/src/commands/functions/layer/sort.ts +76 -76
  100. package/src/commands/functions/list.ts +68 -68
  101. package/src/commands/functions/log.ts +148 -148
  102. package/src/commands/functions/run.ts +249 -249
  103. package/src/commands/functions/trigger-create.ts +79 -79
  104. package/src/commands/functions/trigger-delete.ts +105 -105
  105. package/src/commands/functions/version/index.ts +1 -1
  106. package/src/commands/functions/version/list.ts +73 -73
  107. package/src/commands/functions/version/publish.ts +43 -43
  108. package/src/commands/gateway/create.ts +109 -109
  109. package/src/commands/gateway/delete.ts +81 -81
  110. package/src/commands/gateway/domain.ts +159 -159
  111. package/src/commands/gateway/index.ts +5 -5
  112. package/src/commands/gateway/list.ts +76 -76
  113. package/src/commands/gateway/switch.ts +107 -107
  114. package/src/commands/helpers/index.ts +2 -2
  115. package/src/commands/helpers/init.ts +431 -431
  116. package/src/commands/helpers/new.ts +117 -117
  117. package/src/commands/helpers/open.ts +67 -67
  118. package/src/commands/hosting/hosting.ts +360 -360
  119. package/src/commands/index.ts +13 -13
  120. package/src/commands/lowcode/app.ts +34 -34
  121. package/src/commands/lowcode/comps.ts +322 -322
  122. package/src/commands/lowcode/index.ts +1 -1
  123. package/src/commands/lowcode/utils.ts +24 -24
  124. package/src/commands/run/create.ts +9 -2
  125. package/src/commands/run/delete.ts +8 -2
  126. package/src/commands/run/image/common.ts +1 -1
  127. package/src/commands/run/image/delete.ts +8 -1
  128. package/src/commands/run/image/download.ts +7 -1
  129. package/src/commands/run/image/index.ts +4 -4
  130. package/src/commands/run/image/list.ts +7 -2
  131. package/src/commands/run/image/upload.ts +8 -1
  132. package/src/commands/run/index.ts +2 -1
  133. package/src/commands/run/list.ts +11 -3
  134. package/src/commands/run/service/config.ts +81 -0
  135. package/src/commands/run/service/create.ts +118 -0
  136. package/src/commands/run/service/deploy.ts +121 -0
  137. package/src/commands/run/service/index.ts +5 -0
  138. package/src/commands/run/service/list.ts +94 -0
  139. package/src/commands/run/service/update.ts +104 -0
  140. package/src/commands/run/standalonegateway/common.ts +7 -7
  141. package/src/commands/run/standalonegateway/create.ts +85 -85
  142. package/src/commands/run/standalonegateway/destroy.ts +59 -59
  143. package/src/commands/run/standalonegateway/index.ts +4 -4
  144. package/src/commands/run/standalonegateway/list.ts +53 -53
  145. package/src/commands/run/standalonegateway/package.ts +62 -62
  146. package/src/commands/run/standalonegateway/turn.ts +63 -63
  147. package/src/commands/run/version/common.ts +1 -1
  148. package/src/commands/run/version/create.ts +8 -1
  149. package/src/commands/run/version/delete.ts +8 -2
  150. package/src/commands/run/version/index.ts +4 -4
  151. package/src/commands/run/version/list.ts +7 -1
  152. package/src/commands/run/version/modify.ts +8 -1
  153. package/src/commands/run/version/update.ts +8 -1
  154. package/src/commands/smart.ts +132 -132
  155. package/src/commands/storage/storage.ts +464 -464
  156. package/src/commands/third/thirdAttach.ts +49 -49
  157. package/src/completion/index.ts +13 -13
  158. package/src/constant.ts +35 -1
  159. package/src/decorators/captureError.ts +25 -25
  160. package/src/decorators/constants.ts +12 -12
  161. package/src/decorators/deprecate.ts +25 -25
  162. package/src/decorators/guard.ts +42 -42
  163. package/src/decorators/index.ts +7 -7
  164. package/src/decorators/injectParams.ts +54 -54
  165. package/src/decorators/params/common.ts +28 -28
  166. package/src/decorators/params/index.ts +35 -35
  167. package/src/env/domain.ts +33 -33
  168. package/src/env/index.ts +63 -63
  169. package/src/env/login.ts +80 -80
  170. package/src/error.ts +36 -36
  171. package/src/function/alias.ts +43 -43
  172. package/src/function/base.ts +253 -253
  173. package/src/function/code.ts +55 -55
  174. package/src/function/concurrency.ts +57 -57
  175. package/src/function/create.ts +78 -78
  176. package/src/function/delete.ts +42 -42
  177. package/src/function/index.ts +10 -10
  178. package/src/function/layer/attach.ts +68 -68
  179. package/src/function/layer/create.ts +63 -63
  180. package/src/function/layer/delete.ts +21 -21
  181. package/src/function/layer/download.ts +54 -54
  182. package/src/function/layer/index.ts +7 -7
  183. package/src/function/layer/list.ts +32 -32
  184. package/src/function/layer/sort.ts +24 -24
  185. package/src/function/trigger.ts +97 -97
  186. package/src/function/update.ts +35 -35
  187. package/src/function/version.ts +38 -38
  188. package/src/function/vpc.ts +22 -22
  189. package/src/gateway/index.ts +137 -137
  190. package/src/help.ts +50 -48
  191. package/src/hosting.ts +212 -212
  192. package/src/index.ts +13 -13
  193. package/src/logger.ts +17 -17
  194. package/src/run/create.ts +23 -23
  195. package/src/run/delete.ts +15 -15
  196. package/src/run/image/build.ts +36 -36
  197. package/src/run/image/delete.ts +13 -13
  198. package/src/run/image/index.ts +3 -3
  199. package/src/run/image/info.ts +26 -26
  200. package/src/run/index.ts +2 -1
  201. package/src/run/list.ts +29 -29
  202. package/src/run/repo.ts +24 -24
  203. package/src/run/service/common.ts +206 -0
  204. package/src/run/service/config.ts +77 -0
  205. package/src/run/service/create.ts +52 -0
  206. package/src/run/service/deployPackage.ts +63 -0
  207. package/src/run/service/index.ts +7 -0
  208. package/src/run/service/list.ts +29 -0
  209. package/src/run/service/showLogs.ts +98 -0
  210. package/src/run/service/update.ts +81 -0
  211. package/src/run/standalonegateway/create.ts +24 -24
  212. package/src/run/standalonegateway/destroy.ts +19 -19
  213. package/src/run/standalonegateway/index.ts +4 -4
  214. package/src/run/standalonegateway/list.ts +74 -74
  215. package/src/run/standalonegateway/package/list.ts +24 -24
  216. package/src/run/standalonegateway/turn/index.ts +1 -1
  217. package/src/run/standalonegateway/turn/off.ts +19 -19
  218. package/src/run/standalonegateway/turn/on.ts +19 -19
  219. package/src/run/version/create.ts +68 -68
  220. package/src/run/version/delete.ts +15 -15
  221. package/src/run/version/index.ts +5 -5
  222. package/src/run/version/list.ts +16 -16
  223. package/src/run/version/modify.ts +16 -16
  224. package/src/run/version/repo.ts +27 -27
  225. package/src/run/version/update.ts +58 -58
  226. package/src/storage.ts +114 -114
  227. package/src/third/index.ts +12 -12
  228. package/src/types.ts +128 -2
  229. package/src/utils/auth.ts +15 -15
  230. package/src/utils/checkTcbrEnv.ts +67 -0
  231. package/src/utils/cli-table.ts +23 -23
  232. package/src/utils/commonParamsCheck.ts +65 -0
  233. package/src/utils/config.ts +39 -39
  234. package/src/utils/env.ts +244 -244
  235. package/src/utils/fs/del.ts +5 -5
  236. package/src/utils/fs/index.ts +71 -71
  237. package/src/utils/function-packer.ts +97 -97
  238. package/src/utils/index.ts +5 -1
  239. package/src/utils/log.ts +81 -81
  240. package/src/utils/net/cloud-api-request.ts +62 -62
  241. package/src/utils/net/credential.ts +53 -53
  242. package/src/utils/net/http-request.ts +84 -84
  243. package/src/utils/net/index.ts +4 -4
  244. package/src/utils/net/manager-service.ts +36 -36
  245. package/src/utils/net/proxy.ts +6 -6
  246. package/src/utils/notice.ts +28 -28
  247. package/src/utils/output/highlight.ts +5 -5
  248. package/src/utils/output/index.ts +2 -2
  249. package/src/utils/output/link.ts +10 -10
  250. package/src/utils/output/loading.ts +82 -82
  251. package/src/utils/parallel.ts +82 -82
  252. package/src/utils/platform/index.ts +2 -2
  253. package/src/utils/platform/mac.ts +21 -21
  254. package/src/utils/platform/os.ts +64 -64
  255. package/src/utils/platform/port.ts +10 -10
  256. package/src/utils/progress-bar.ts +38 -38
  257. package/src/utils/prompt/select.ts +59 -59
  258. package/src/utils/reporter/agree.ts +20 -20
  259. package/src/utils/reporter/download.ts +26 -26
  260. package/src/utils/reporter/index.ts +3 -3
  261. package/src/utils/reporter/usage.ts +20 -20
  262. package/src/utils/store/auth.ts +49 -49
  263. package/src/utils/store/common.ts +8 -8
  264. package/src/utils/store/db.ts +68 -68
  265. package/src/utils/store/index.ts +4 -4
  266. package/src/utils/store/usage.ts +12 -12
  267. package/src/utils/tcbrApi/callTcbrApi.ts +28 -0
  268. package/src/utils/tcbrApi/index.ts +1 -0
  269. package/src/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.ts +363 -0
  270. package/src/utils/tcbrApi/tcbr-cloud-api/error.ts +30 -0
  271. package/src/utils/tcbrApi/tcbr-cloud-api/index.ts +1 -0
  272. package/src/utils/tcbrApi/tcbr-cloud-api/request.ts +28 -0
  273. package/src/utils/tcbrApi/tcbr-cloud-api-request.ts +66 -0
  274. package/src/utils/template.ts +170 -170
  275. package/src/utils/tools/encoding.ts +8 -8
  276. package/src/utils/tools/index.ts +4 -4
  277. package/src/utils/tools/object.ts +33 -33
  278. package/src/utils/tools/time.ts +38 -38
  279. package/src/utils/tools/uid.ts +19 -19
  280. package/src/utils/validator.ts +64 -32
  281. package/templates/html/loginFail.html +90 -90
  282. package/templates/html/loginSuccess.html +86 -86
  283. package/templates/server/node/_gitignore +54 -54
  284. package/templates/server/node/cloudbaserc.json +10 -10
  285. package/templates/server/node/index.js +5 -5
  286. package/templates/server/node/package.json +9 -9
  287. package/tsconfig.json +19 -19
  288. package/tsconfig.test.json +13 -13
  289. package/types/commands/run/index.d.ts +1 -0
  290. package/types/commands/run/service/config.d.ts +14 -0
  291. package/types/commands/run/service/create.d.ts +13 -0
  292. package/types/commands/run/service/deploy.d.ts +13 -0
  293. package/types/commands/run/service/index.d.ts +5 -0
  294. package/types/commands/run/service/list.d.ts +13 -0
  295. package/types/commands/run/service/update.d.ts +13 -0
  296. package/types/constant.d.ts +18 -0
  297. package/types/run/index.d.ts +1 -0
  298. package/types/run/service/common.d.ts +32 -0
  299. package/types/run/service/config.d.ts +23 -0
  300. package/types/run/service/create.d.ts +7 -0
  301. package/types/run/service/deployPackage.d.ts +11 -0
  302. package/types/run/service/index.d.ts +7 -0
  303. package/types/run/service/list.d.ts +2 -0
  304. package/types/run/service/showLogs.d.ts +2 -0
  305. package/types/run/service/update.d.ts +2 -0
  306. package/types/types.d.ts +116 -2
  307. package/types/utils/checkTcbrEnv.d.ts +3 -0
  308. package/types/utils/commonParamsCheck.d.ts +3 -0
  309. package/types/utils/index.d.ts +3 -0
  310. package/types/utils/tcbrApi/callTcbrApi.d.ts +1 -0
  311. package/types/utils/tcbrApi/index.d.ts +1 -0
  312. package/types/utils/tcbrApi/tcbr-cloud-api/cloud-api-service.d.ts +51 -0
  313. package/types/utils/tcbrApi/tcbr-cloud-api/error.d.ts +20 -0
  314. package/types/utils/tcbrApi/tcbr-cloud-api/index.d.ts +1 -0
  315. package/types/utils/tcbrApi/tcbr-cloud-api/request.d.ts +4 -0
  316. package/types/utils/tcbrApi/tcbr-cloud-api-request.d.ts +9 -0
  317. package/types/utils/validator.d.ts +4 -0
@@ -1,192 +1,192 @@
1
- import _ from 'lodash'
2
- import chalk from 'chalk'
3
- import inquirer from 'inquirer'
4
- import { Command, ICommand } from '../common'
5
- import { login } from '../../auth'
6
- import { listEnvs } from '../../env'
7
- import { CloudBaseError } from '../../error'
8
- import { InjectParams, ArgsOptions, Log, Logger } from '../../decorators'
9
- import {
10
- loadingFactory,
11
- usageStore,
12
- collectAgree,
13
- genClickableLink,
14
- checkAndGetCredential
15
- } from '../../utils'
16
-
17
- function printSuggestion() {
18
- const tips = `可使用下面命令继续操作:
19
-
20
- ${chalk.gray('–')} 创建免费环境
21
-
22
- ${chalk.cyan('$ tcb env create envName')}
23
-
24
- ${chalk.gray('–')} 初始化云开发项目
25
-
26
- ${chalk.cyan('$ tcb new')}
27
-
28
- ${chalk.gray('–')} 部署云函数
29
-
30
- ${chalk.cyan('$ tcb fn deploy')}
31
-
32
- ${chalk.gray('–')} 查看命令使用介绍
33
-
34
- ${chalk.cyan('$ tcb -h')}
35
-
36
- Tips:可以使用简写命令 tcb 代替 cloudbase`
37
- console.log(tips)
38
- }
39
-
40
- async function askForCollectDataConfirm() {
41
- const agree = await usageStore.get('agreeCollect')
42
- if (agree) return
43
- // 询问
44
- const { confirm } = await inquirer.prompt({
45
- type: 'confirm',
46
- name: 'confirm',
47
- message: '是否同意 Cloudbase CLI 收集您的使用数据以改进产品?',
48
- default: true
49
- })
50
-
51
- if (confirm) {
52
- await usageStore.set('agreeCollect', true)
53
- }
54
-
55
- await collectAgree(confirm)
56
- }
57
-
58
- @ICommand()
59
- export class LoginCommand extends Command {
60
- get options() {
61
- return {
62
- cmd: 'login',
63
- options: [
64
- {
65
- flags: '-k, --key',
66
- desc: '使用永久密钥登录'
67
- },
68
- {
69
- flags: '--apiKeyId <apiKeyId>',
70
- desc: '腾讯云 API 秘钥 Id'
71
- },
72
- {
73
- flags: '--apiKey <apiKey>',
74
- desc: '腾讯云 API 秘钥 Key'
75
- },
76
- {
77
- flags: '--token [token]',
78
- desc: '腾讯云 API 临时秘钥 Token'
79
- }
80
- ],
81
- desc: '登录腾讯云账号',
82
- requiredEnvId: false,
83
- withoutAuth: true
84
- }
85
- }
86
-
87
- @InjectParams()
88
- async execute(@ArgsOptions() options, @Log() log: Logger) {
89
- log.verbose(options)
90
- const { apiKeyId, apiKey, token } = options
91
- const loading = loadingFactory()
92
- loading.start('检验登录状态')
93
-
94
- const credential = await checkAndGetCredential()
95
-
96
- if (!_.isEmpty(credential)) {
97
- loading.succeed('您已登录,无需再次登录!')
98
- return
99
- } else {
100
- loading.stop()
101
- }
102
-
103
- // 通过参数传入 API Key,适用于 CI 场景
104
- if (apiKey && apiKeyId) {
105
- loading.start('正在验证腾讯云密钥...')
106
-
107
- const res = await login({
108
- token,
109
- key: true,
110
- secretKey: apiKey,
111
- secretId: apiKeyId
112
- })
113
-
114
- if (res.code === 'SUCCESS') {
115
- loading.succeed('登录成功!')
116
- printSuggestion()
117
- } else {
118
- loading.fail('腾讯云密钥验证失败,请检查密钥是否正确或终端网络是否可用!')
119
- return process.exit(1)
120
- }
121
- } else if (options.key) {
122
- // 兼容临时密钥和永久密钥登录
123
- const clickableLink = genClickableLink('https://console.cloud.tencent.com/cam/capi')
124
- console.log(`您可以访问 ${clickableLink} 获取 API 秘钥`)
125
-
126
- // 使用永久密钥登录
127
- const { secretId } = await inquirer.prompt({
128
- type: 'input',
129
- name: 'secretId',
130
- message: '请输入腾讯云 SecretID:'
131
- })
132
-
133
- const { secretKey } = await inquirer.prompt({
134
- type: 'input',
135
- name: 'secretKey',
136
- message: '请输入腾讯云 SecretKey:'
137
- })
138
-
139
- if (!secretId || !secretKey) {
140
- throw new CloudBaseError('SecretID 或 SecretKey 不能为空')
141
- }
142
-
143
- loading.start('正在验证腾讯云密钥...')
144
-
145
- const res = await login({
146
- key: true,
147
- secretId,
148
- secretKey
149
- })
150
-
151
- if (res.code === 'SUCCESS') {
152
- loading.succeed('登录成功!')
153
- await askForCollectDataConfirm()
154
- printSuggestion()
155
- } else {
156
- loading.fail('腾讯云密钥验证失败,请检查密钥是否正确或终端网络是否可用!')
157
- return process.exit(1)
158
- }
159
- } else {
160
- // 使用临时密钥登录-支持自动续期
161
- loading.start('获取授权中...')
162
- const res = await login()
163
-
164
- if (res.code === 'SUCCESS') {
165
- loading.succeed('登录成功!')
166
- await askForCollectDataConfirm()
167
- printSuggestion()
168
- } else {
169
- loading.fail(res.msg)
170
- console.log('Web 授权登录失败,秘钥校验失败!')
171
- return process.exit(1)
172
- }
173
- }
174
-
175
- // 检测用户是否存在,不存在则初始化
176
- try {
177
- const envs = await listEnvs()
178
- if (!envs.length) {
179
- log.warn('您还没有可用的环境,请使用 cloudbase env:create $name 创建环境')
180
- }
181
- } catch (e) {
182
- // 用户不存在
183
- // 主账户可以直接使用 env:create 完成初始化工作
184
- if (e.code === 'ResourceNotFound.UserNotExists') {
185
- log.error('您还没有可用的环境,请使用 cloudbase env:create $name 创建环境!')
186
- } else {
187
- console.error(e)
188
- throw e
189
- }
190
- }
191
- }
192
- }
1
+ import _ from 'lodash'
2
+ import chalk from 'chalk'
3
+ import inquirer from 'inquirer'
4
+ import { Command, ICommand } from '../common'
5
+ import { login } from '../../auth'
6
+ import { listEnvs } from '../../env'
7
+ import { CloudBaseError } from '../../error'
8
+ import { InjectParams, ArgsOptions, Log, Logger } from '../../decorators'
9
+ import {
10
+ loadingFactory,
11
+ usageStore,
12
+ collectAgree,
13
+ genClickableLink,
14
+ checkAndGetCredential
15
+ } from '../../utils'
16
+
17
+ function printSuggestion() {
18
+ const tips = `可使用下面命令继续操作:
19
+
20
+ ${chalk.gray('–')} 创建免费环境
21
+
22
+ ${chalk.cyan('$ tcb env create envName')}
23
+
24
+ ${chalk.gray('–')} 初始化云开发项目
25
+
26
+ ${chalk.cyan('$ tcb new')}
27
+
28
+ ${chalk.gray('–')} 部署云函数
29
+
30
+ ${chalk.cyan('$ tcb fn deploy')}
31
+
32
+ ${chalk.gray('–')} 查看命令使用介绍
33
+
34
+ ${chalk.cyan('$ tcb -h')}
35
+
36
+ Tips:可以使用简写命令 tcb 代替 cloudbase`
37
+ console.log(tips)
38
+ }
39
+
40
+ async function askForCollectDataConfirm() {
41
+ const agree = await usageStore.get('agreeCollect')
42
+ if (agree) return
43
+ // 询问
44
+ const { confirm } = await inquirer.prompt({
45
+ type: 'confirm',
46
+ name: 'confirm',
47
+ message: '是否同意 Cloudbase CLI 收集您的使用数据以改进产品?',
48
+ default: true
49
+ })
50
+
51
+ if (confirm) {
52
+ await usageStore.set('agreeCollect', true)
53
+ }
54
+
55
+ await collectAgree(confirm)
56
+ }
57
+
58
+ @ICommand()
59
+ export class LoginCommand extends Command {
60
+ get options() {
61
+ return {
62
+ cmd: 'login',
63
+ options: [
64
+ {
65
+ flags: '-k, --key',
66
+ desc: '使用永久密钥登录'
67
+ },
68
+ {
69
+ flags: '--apiKeyId <apiKeyId>',
70
+ desc: '腾讯云 API 秘钥 Id'
71
+ },
72
+ {
73
+ flags: '--apiKey <apiKey>',
74
+ desc: '腾讯云 API 秘钥 Key'
75
+ },
76
+ {
77
+ flags: '--token [token]',
78
+ desc: '腾讯云 API 临时秘钥 Token'
79
+ }
80
+ ],
81
+ desc: '登录腾讯云账号',
82
+ requiredEnvId: false,
83
+ withoutAuth: true
84
+ }
85
+ }
86
+
87
+ @InjectParams()
88
+ async execute(@ArgsOptions() options, @Log() log: Logger) {
89
+ log.verbose(options)
90
+ const { apiKeyId, apiKey, token } = options
91
+ const loading = loadingFactory()
92
+ loading.start('检验登录状态')
93
+
94
+ const credential = await checkAndGetCredential()
95
+
96
+ if (!_.isEmpty(credential)) {
97
+ loading.succeed('您已登录,无需再次登录!')
98
+ return
99
+ } else {
100
+ loading.stop()
101
+ }
102
+
103
+ // 通过参数传入 API Key,适用于 CI 场景
104
+ if (apiKey && apiKeyId) {
105
+ loading.start('正在验证腾讯云密钥...')
106
+
107
+ const res = await login({
108
+ token,
109
+ key: true,
110
+ secretKey: apiKey,
111
+ secretId: apiKeyId
112
+ })
113
+
114
+ if (res.code === 'SUCCESS') {
115
+ loading.succeed('登录成功!')
116
+ printSuggestion()
117
+ } else {
118
+ loading.fail('腾讯云密钥验证失败,请检查密钥是否正确或终端网络是否可用!')
119
+ return process.exit(1)
120
+ }
121
+ } else if (options.key) {
122
+ // 兼容临时密钥和永久密钥登录
123
+ const clickableLink = genClickableLink('https://console.cloud.tencent.com/cam/capi')
124
+ console.log(`您可以访问 ${clickableLink} 获取 API 秘钥`)
125
+
126
+ // 使用永久密钥登录
127
+ const { secretId } = await inquirer.prompt({
128
+ type: 'input',
129
+ name: 'secretId',
130
+ message: '请输入腾讯云 SecretID:'
131
+ })
132
+
133
+ const { secretKey } = await inquirer.prompt({
134
+ type: 'input',
135
+ name: 'secretKey',
136
+ message: '请输入腾讯云 SecretKey:'
137
+ })
138
+
139
+ if (!secretId || !secretKey) {
140
+ throw new CloudBaseError('SecretID 或 SecretKey 不能为空')
141
+ }
142
+
143
+ loading.start('正在验证腾讯云密钥...')
144
+
145
+ const res = await login({
146
+ key: true,
147
+ secretId,
148
+ secretKey
149
+ })
150
+
151
+ if (res.code === 'SUCCESS') {
152
+ loading.succeed('登录成功!')
153
+ await askForCollectDataConfirm()
154
+ printSuggestion()
155
+ } else {
156
+ loading.fail('腾讯云密钥验证失败,请检查密钥是否正确或终端网络是否可用!')
157
+ return process.exit(1)
158
+ }
159
+ } else {
160
+ // 使用临时密钥登录-支持自动续期
161
+ loading.start('获取授权中...')
162
+ const res = await login()
163
+
164
+ if (res.code === 'SUCCESS') {
165
+ loading.succeed('登录成功!')
166
+ await askForCollectDataConfirm()
167
+ printSuggestion()
168
+ } else {
169
+ loading.fail(res.msg)
170
+ console.log('Web 授权登录失败,秘钥校验失败!')
171
+ return process.exit(1)
172
+ }
173
+ }
174
+
175
+ // 检测用户是否存在,不存在则初始化
176
+ try {
177
+ const envs = await listEnvs()
178
+ if (!envs.length) {
179
+ log.warn('您还没有可用的环境,请使用 cloudbase env:create $name 创建环境')
180
+ }
181
+ } catch (e) {
182
+ // 用户不存在
183
+ // 主账户可以直接使用 env:create 完成初始化工作
184
+ if (e.code === 'ResourceNotFound.UserNotExists') {
185
+ log.error('您还没有可用的环境,请使用 cloudbase env:create $name 创建环境!')
186
+ } else {
187
+ console.error(e)
188
+ throw e
189
+ }
190
+ }
191
+ }
192
+ }
@@ -1,24 +1,24 @@
1
- import { ICommand, Command } from '../common'
2
-
3
- import { logout } from '../../auth'
4
- import { InjectParams, Log, Logger } from '../../decorators'
5
-
6
- @ICommand()
7
- export class LogoutCommand extends Command {
8
- get options() {
9
- return {
10
- cmd: 'logout',
11
- options: [],
12
- desc: '登出腾讯云账号',
13
- requiredEnvId: false,
14
- withoutAuth: true
15
- }
16
- }
17
-
18
- @InjectParams()
19
- async execute(@Log() log: Logger) {
20
- await logout()
21
-
22
- log.success('注销登录成功!')
23
- }
24
- }
1
+ import { ICommand, Command } from '../common'
2
+
3
+ import { logout } from '../../auth'
4
+ import { InjectParams, Log, Logger } from '../../decorators'
5
+
6
+ @ICommand()
7
+ export class LogoutCommand extends Command {
8
+ get options() {
9
+ return {
10
+ cmd: 'logout',
11
+ options: [],
12
+ desc: '登出腾讯云账号',
13
+ requiredEnvId: false,
14
+ withoutAuth: true
15
+ }
16
+ }
17
+
18
+ @InjectParams()
19
+ async execute(@Log() log: Logger) {
20
+ await logout()
21
+
22
+ log.success('注销登录成功!')
23
+ }
24
+ }