@cloudbase/cli 2.0.3-alpha.1 → 2.0.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.
- package/.editorconfig +9 -9
- package/.eslintignore +7 -7
- package/.eslintrc +35 -35
- package/.prettierrc.js +29 -29
- package/.vscode/launch.json +16 -16
- package/.vscode/settings.json +3 -0
- package/LICENSE +5 -5
- package/README.md +35 -35
- package/bin/cloudbase.js +5 -5
- package/bin/tcb.js +0 -0
- package/changelog.md +6 -6
- package/jest.config.js +17 -17
- package/lib/commands/account/login.js +18 -18
- package/lib/commands/storage/storage.js +1 -1
- package/lib/env/login.js +7 -7
- package/lib/run/service/deployPackage.js +2 -2
- package/package.json +3 -3
- package/post-install.js +61 -61
- package/runtime/nodejs/bootstrap.js +255 -255
- package/runtime/nodejs/runtime.js +183 -183
- package/src/auth/index.ts +1 -1
- package/src/auth/login.ts +91 -91
- package/src/auth/logout.ts +7 -7
- package/src/commands/account/index.ts +2 -2
- package/src/commands/account/login.ts +192 -192
- package/src/commands/account/logout.ts +24 -24
- package/src/commands/env/base.ts +90 -90
- package/src/commands/env/create.ts +92 -92
- package/src/commands/env/domain.ts +186 -186
- package/src/commands/env/index.ts +4 -4
- package/src/commands/env/login.ts +235 -235
- package/src/commands/framework/index.ts +124 -124
- package/src/commands/functions/alias/getRoute.ts +76 -76
- package/src/commands/functions/alias/index.ts +2 -2
- package/src/commands/functions/alias/setRoute.ts +82 -82
- package/src/commands/functions/code-download.ts +100 -100
- package/src/commands/functions/code-update.ts +62 -62
- package/src/commands/functions/concurrency/delete.ts +45 -45
- package/src/commands/functions/concurrency/index.ts +2 -2
- package/src/commands/functions/concurrency/list.ts +58 -58
- package/src/commands/functions/concurrency/set.ts +47 -47
- package/src/commands/functions/config-update.ts +76 -76
- package/src/commands/functions/copy.ts +62 -62
- package/src/commands/functions/delete.ts +79 -79
- package/src/commands/functions/deploy.ts +293 -293
- package/src/commands/functions/detail.ts +138 -138
- package/src/commands/functions/index.ts +16 -16
- package/src/commands/functions/invoke.ts +121 -121
- package/src/commands/functions/layer/bind.ts +182 -182
- package/src/commands/functions/layer/common.ts +8 -8
- package/src/commands/functions/layer/create.ts +49 -49
- package/src/commands/functions/layer/delete.ts +73 -73
- package/src/commands/functions/layer/download.ts +92 -92
- package/src/commands/functions/layer/index.ts +7 -7
- package/src/commands/functions/layer/list.ts +94 -94
- package/src/commands/functions/layer/sort.ts +76 -76
- package/src/commands/functions/list.ts +68 -68
- package/src/commands/functions/log.ts +148 -148
- package/src/commands/functions/run.ts +249 -249
- package/src/commands/functions/trigger-create.ts +79 -79
- package/src/commands/functions/trigger-delete.ts +105 -105
- package/src/commands/functions/version/index.ts +1 -1
- package/src/commands/functions/version/list.ts +73 -73
- package/src/commands/functions/version/publish.ts +43 -43
- package/src/commands/gateway/create.ts +109 -109
- package/src/commands/gateway/delete.ts +81 -81
- package/src/commands/gateway/domain.ts +159 -159
- package/src/commands/gateway/index.ts +5 -5
- package/src/commands/gateway/list.ts +76 -76
- package/src/commands/gateway/switch.ts +107 -107
- package/src/commands/helpers/index.ts +2 -2
- package/src/commands/helpers/init.ts +431 -431
- package/src/commands/helpers/new.ts +117 -117
- package/src/commands/helpers/open.ts +67 -67
- package/src/commands/hosting/hosting.ts +360 -360
- package/src/commands/index.ts +13 -13
- package/src/commands/lowcode/app.ts +34 -34
- package/src/commands/lowcode/comps.ts +322 -322
- package/src/commands/lowcode/index.ts +1 -1
- package/src/commands/lowcode/utils.ts +24 -24
- package/src/commands/run/image/index.ts +4 -4
- package/src/commands/run/standalonegateway/common.ts +7 -7
- package/src/commands/run/standalonegateway/create.ts +85 -85
- package/src/commands/run/standalonegateway/destroy.ts +59 -59
- package/src/commands/run/standalonegateway/index.ts +4 -4
- package/src/commands/run/standalonegateway/list.ts +53 -53
- package/src/commands/run/standalonegateway/package.ts +62 -62
- package/src/commands/run/standalonegateway/turn.ts +63 -63
- package/src/commands/run/version/index.ts +4 -4
- package/src/commands/smart.ts +132 -132
- package/src/commands/storage/storage.ts +464 -464
- package/src/commands/third/thirdAttach.ts +49 -49
- package/src/completion/index.ts +13 -13
- package/src/decorators/captureError.ts +25 -25
- package/src/decorators/constants.ts +12 -12
- package/src/decorators/deprecate.ts +25 -25
- package/src/decorators/guard.ts +42 -42
- package/src/decorators/index.ts +7 -7
- package/src/decorators/injectParams.ts +54 -54
- package/src/decorators/params/common.ts +28 -28
- package/src/decorators/params/index.ts +35 -35
- package/src/env/domain.ts +33 -33
- package/src/env/index.ts +63 -63
- package/src/env/login.ts +80 -80
- package/src/error.ts +36 -36
- package/src/function/alias.ts +43 -43
- package/src/function/base.ts +253 -253
- package/src/function/code.ts +55 -55
- package/src/function/concurrency.ts +57 -57
- package/src/function/create.ts +78 -78
- package/src/function/delete.ts +42 -42
- package/src/function/index.ts +10 -10
- package/src/function/layer/attach.ts +68 -68
- package/src/function/layer/create.ts +63 -63
- package/src/function/layer/delete.ts +21 -21
- package/src/function/layer/download.ts +54 -54
- package/src/function/layer/index.ts +7 -7
- package/src/function/layer/list.ts +32 -32
- package/src/function/layer/sort.ts +24 -24
- package/src/function/trigger.ts +97 -97
- package/src/function/update.ts +35 -35
- package/src/function/version.ts +38 -38
- package/src/function/vpc.ts +22 -22
- package/src/gateway/index.ts +137 -137
- package/src/hosting.ts +212 -212
- package/src/index.ts +13 -13
- package/src/logger.ts +17 -17
- package/src/run/create.ts +23 -23
- package/src/run/delete.ts +15 -15
- package/src/run/image/build.ts +36 -36
- package/src/run/image/delete.ts +13 -13
- package/src/run/image/index.ts +3 -3
- package/src/run/image/info.ts +26 -26
- package/src/run/list.ts +29 -29
- package/src/run/repo.ts +24 -24
- package/src/run/service/deployPackage.ts +1 -1
- package/src/run/standalonegateway/create.ts +24 -24
- package/src/run/standalonegateway/destroy.ts +19 -19
- package/src/run/standalonegateway/index.ts +4 -4
- package/src/run/standalonegateway/list.ts +74 -74
- package/src/run/standalonegateway/package/list.ts +24 -24
- package/src/run/standalonegateway/turn/index.ts +1 -1
- package/src/run/standalonegateway/turn/off.ts +19 -19
- package/src/run/standalonegateway/turn/on.ts +19 -19
- package/src/run/version/create.ts +68 -68
- package/src/run/version/delete.ts +15 -15
- package/src/run/version/index.ts +5 -5
- package/src/run/version/list.ts +16 -16
- package/src/run/version/modify.ts +16 -16
- package/src/run/version/repo.ts +27 -27
- package/src/run/version/update.ts +58 -58
- package/src/storage.ts +114 -114
- package/src/third/index.ts +12 -12
- package/src/utils/auth.ts +15 -15
- package/src/utils/cli-table.ts +23 -23
- package/src/utils/config.ts +39 -39
- package/src/utils/env.ts +244 -244
- package/src/utils/fs/del.ts +5 -5
- package/src/utils/fs/index.ts +71 -71
- package/src/utils/function-packer.ts +97 -97
- package/src/utils/log.ts +81 -81
- package/src/utils/net/cloud-api-request.ts +62 -62
- package/src/utils/net/credential.ts +53 -53
- package/src/utils/net/index.ts +4 -4
- package/src/utils/net/manager-service.ts +36 -36
- package/src/utils/net/proxy.ts +6 -6
- package/src/utils/notice.ts +28 -28
- package/src/utils/output/highlight.ts +5 -5
- package/src/utils/output/index.ts +2 -2
- package/src/utils/output/link.ts +10 -10
- package/src/utils/output/loading.ts +82 -82
- package/src/utils/parallel.ts +82 -82
- package/src/utils/platform/index.ts +2 -2
- package/src/utils/platform/mac.ts +21 -21
- package/src/utils/platform/os.ts +64 -64
- package/src/utils/platform/port.ts +10 -10
- package/src/utils/progress-bar.ts +38 -38
- package/src/utils/prompt/select.ts +59 -59
- package/src/utils/reporter/agree.ts +20 -20
- package/src/utils/reporter/download.ts +26 -26
- package/src/utils/reporter/index.ts +3 -3
- package/src/utils/reporter/usage.ts +20 -20
- package/src/utils/store/auth.ts +49 -49
- package/src/utils/store/common.ts +8 -8
- package/src/utils/store/db.ts +68 -68
- package/src/utils/store/index.ts +4 -4
- package/src/utils/store/usage.ts +12 -12
- package/src/utils/template.ts +170 -170
- package/src/utils/tools/encoding.ts +8 -8
- package/src/utils/tools/index.ts +4 -4
- package/src/utils/tools/object.ts +33 -33
- package/src/utils/tools/time.ts +38 -38
- package/src/utils/tools/uid.ts +19 -19
- package/templates/html/loginFail.html +90 -90
- package/templates/html/loginSuccess.html +86 -86
- package/templates/server/node/_gitignore +54 -54
- package/templates/server/node/cloudbaserc.json +10 -10
- package/templates/server/node/index.js +5 -5
- package/templates/server/node/package.json +9 -9
- package/tsconfig.json +19 -19
- package/tsconfig.test.json +13 -13
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import address from 'address'
|
|
2
|
-
import { md5 } from '../tools'
|
|
3
|
-
|
|
4
|
-
// 获取本机 Mac 地址
|
|
5
|
-
export function getMacAddress(): Promise<string> {
|
|
6
|
-
return new Promise(resolve => {
|
|
7
|
-
address.mac((err, mac) => {
|
|
8
|
-
if (err) {
|
|
9
|
-
resolve('')
|
|
10
|
-
return
|
|
11
|
-
}
|
|
12
|
-
resolve(mac)
|
|
13
|
-
})
|
|
14
|
-
})
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export async function getMacAddressMd5(): Promise<string> {
|
|
18
|
-
const mac = await getMacAddress()
|
|
19
|
-
const macMD5 = md5(mac)
|
|
20
|
-
return macMD5
|
|
21
|
-
}
|
|
1
|
+
import address from 'address'
|
|
2
|
+
import { md5 } from '../tools'
|
|
3
|
+
|
|
4
|
+
// 获取本机 Mac 地址
|
|
5
|
+
export function getMacAddress(): Promise<string> {
|
|
6
|
+
return new Promise(resolve => {
|
|
7
|
+
address.mac((err, mac) => {
|
|
8
|
+
if (err) {
|
|
9
|
+
resolve('')
|
|
10
|
+
return
|
|
11
|
+
}
|
|
12
|
+
resolve(mac)
|
|
13
|
+
})
|
|
14
|
+
})
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export async function getMacAddressMd5(): Promise<string> {
|
|
18
|
+
const mac = await getMacAddress()
|
|
19
|
+
const macMD5 = md5(mac)
|
|
20
|
+
return macMD5
|
|
21
|
+
}
|
package/src/utils/platform/os.ts
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
import os from 'os'
|
|
2
|
-
|
|
3
|
-
const macOSMap = new Map([
|
|
4
|
-
[19, 'Catalina'],
|
|
5
|
-
[18, 'Mojave'],
|
|
6
|
-
[17, 'High Sierra'],
|
|
7
|
-
[16, 'Sierra'],
|
|
8
|
-
[15, 'El Capitan'],
|
|
9
|
-
[14, 'Yosemite'],
|
|
10
|
-
[13, 'Mavericks'],
|
|
11
|
-
[12, 'Mountain Lion'],
|
|
12
|
-
[11, 'Lion'],
|
|
13
|
-
[10, 'Snow Leopard'],
|
|
14
|
-
[9, 'Leopard'],
|
|
15
|
-
[8, 'Tiger'],
|
|
16
|
-
[7, 'Panther'],
|
|
17
|
-
[6, 'Jaguar'],
|
|
18
|
-
[5, 'Puma']
|
|
19
|
-
])
|
|
20
|
-
|
|
21
|
-
const winMap = new Map([
|
|
22
|
-
['10.0', '10'],
|
|
23
|
-
['6.3', '8.1'],
|
|
24
|
-
['6.2', '8'],
|
|
25
|
-
['6.1', '7'],
|
|
26
|
-
['6.0', 'Vista'],
|
|
27
|
-
['5.2', 'Server 2003'],
|
|
28
|
-
['5.1', 'XP'],
|
|
29
|
-
['5.0', '2000'],
|
|
30
|
-
['4.9', 'ME'],
|
|
31
|
-
['4.1', '98'],
|
|
32
|
-
['4.0', '95']
|
|
33
|
-
])
|
|
34
|
-
|
|
35
|
-
export function getPlatformRelease(platform: string, release: string) {
|
|
36
|
-
// macOS
|
|
37
|
-
if (platform === 'darwin') {
|
|
38
|
-
const releaseNum = Number(release.split('.')[0])
|
|
39
|
-
const name = macOSMap.get(releaseNum)
|
|
40
|
-
const version = '10.' + (releaseNum - 4)
|
|
41
|
-
return `${name} ${version}`
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// windows
|
|
45
|
-
if (platform === 'win32') {
|
|
46
|
-
const version = (/\d+\.\d/.exec(release) || [])[0]
|
|
47
|
-
|
|
48
|
-
return `Windows ${winMap.get(version)}`
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// 其他 Linux
|
|
52
|
-
return 'Linux'
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// 获取 hostname 和平台信息
|
|
56
|
-
export function getOSInfo() {
|
|
57
|
-
const hostname = os.hostname()
|
|
58
|
-
const platform = os.platform()
|
|
59
|
-
const release = os.release()
|
|
60
|
-
|
|
61
|
-
const platformRelease = getPlatformRelease(platform, release)
|
|
62
|
-
|
|
63
|
-
return [hostname, platformRelease].join('/')
|
|
64
|
-
}
|
|
1
|
+
import os from 'os'
|
|
2
|
+
|
|
3
|
+
const macOSMap = new Map([
|
|
4
|
+
[19, 'Catalina'],
|
|
5
|
+
[18, 'Mojave'],
|
|
6
|
+
[17, 'High Sierra'],
|
|
7
|
+
[16, 'Sierra'],
|
|
8
|
+
[15, 'El Capitan'],
|
|
9
|
+
[14, 'Yosemite'],
|
|
10
|
+
[13, 'Mavericks'],
|
|
11
|
+
[12, 'Mountain Lion'],
|
|
12
|
+
[11, 'Lion'],
|
|
13
|
+
[10, 'Snow Leopard'],
|
|
14
|
+
[9, 'Leopard'],
|
|
15
|
+
[8, 'Tiger'],
|
|
16
|
+
[7, 'Panther'],
|
|
17
|
+
[6, 'Jaguar'],
|
|
18
|
+
[5, 'Puma']
|
|
19
|
+
])
|
|
20
|
+
|
|
21
|
+
const winMap = new Map([
|
|
22
|
+
['10.0', '10'],
|
|
23
|
+
['6.3', '8.1'],
|
|
24
|
+
['6.2', '8'],
|
|
25
|
+
['6.1', '7'],
|
|
26
|
+
['6.0', 'Vista'],
|
|
27
|
+
['5.2', 'Server 2003'],
|
|
28
|
+
['5.1', 'XP'],
|
|
29
|
+
['5.0', '2000'],
|
|
30
|
+
['4.9', 'ME'],
|
|
31
|
+
['4.1', '98'],
|
|
32
|
+
['4.0', '95']
|
|
33
|
+
])
|
|
34
|
+
|
|
35
|
+
export function getPlatformRelease(platform: string, release: string) {
|
|
36
|
+
// macOS
|
|
37
|
+
if (platform === 'darwin') {
|
|
38
|
+
const releaseNum = Number(release.split('.')[0])
|
|
39
|
+
const name = macOSMap.get(releaseNum)
|
|
40
|
+
const version = '10.' + (releaseNum - 4)
|
|
41
|
+
return `${name} ${version}`
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// windows
|
|
45
|
+
if (platform === 'win32') {
|
|
46
|
+
const version = (/\d+\.\d/.exec(release) || [])[0]
|
|
47
|
+
|
|
48
|
+
return `Windows ${winMap.get(version)}`
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// 其他 Linux
|
|
52
|
+
return 'Linux'
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// 获取 hostname 和平台信息
|
|
56
|
+
export function getOSInfo() {
|
|
57
|
+
const hostname = os.hostname()
|
|
58
|
+
const platform = os.platform()
|
|
59
|
+
const release = os.release()
|
|
60
|
+
|
|
61
|
+
const platformRelease = getPlatformRelease(platform, release)
|
|
62
|
+
|
|
63
|
+
return [hostname, platformRelease].join('/')
|
|
64
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import portfinder from 'portfinder'
|
|
2
|
-
const PORT = 9012
|
|
3
|
-
|
|
4
|
-
// 获取本地可用端口
|
|
5
|
-
export async function getPort(): Promise<number> {
|
|
6
|
-
const port: number = await portfinder.getPortPromise({
|
|
7
|
-
port: PORT
|
|
8
|
-
})
|
|
9
|
-
return port
|
|
10
|
-
}
|
|
1
|
+
import portfinder from 'portfinder'
|
|
2
|
+
const PORT = 9012
|
|
3
|
+
|
|
4
|
+
// 获取本地可用端口
|
|
5
|
+
export async function getPort(): Promise<number> {
|
|
6
|
+
const port: number = await portfinder.getPortPromise({
|
|
7
|
+
port: PORT
|
|
8
|
+
})
|
|
9
|
+
return port
|
|
10
|
+
}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import ProgressBar from 'progress'
|
|
2
|
-
|
|
3
|
-
// 打印文件传输进度条
|
|
4
|
-
export function createUploadProgressBar(onFinished: Function, onStart?: Function) {
|
|
5
|
-
let bar
|
|
6
|
-
let lastLoaded = 0
|
|
7
|
-
let finished = false
|
|
8
|
-
|
|
9
|
-
return function (data) {
|
|
10
|
-
const { total, loaded, percent } = data
|
|
11
|
-
if (lastLoaded === 0 && onStart) {
|
|
12
|
-
onStart()
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
if (+percent === 1) {
|
|
16
|
-
if (finished) return
|
|
17
|
-
finished = true
|
|
18
|
-
setTimeout(() => {
|
|
19
|
-
onFinished()
|
|
20
|
-
}, 500)
|
|
21
|
-
bar.tick(total - lastLoaded)
|
|
22
|
-
return
|
|
23
|
-
}
|
|
24
|
-
const tick = loaded - lastLoaded
|
|
25
|
-
lastLoaded = loaded
|
|
26
|
-
if (bar) {
|
|
27
|
-
bar.tick(tick)
|
|
28
|
-
} else {
|
|
29
|
-
bar = new ProgressBar('文件传输中 [:bar] :percent :etas', {
|
|
30
|
-
total,
|
|
31
|
-
complete: '=',
|
|
32
|
-
incomplete: ' ',
|
|
33
|
-
width: 50
|
|
34
|
-
})
|
|
35
|
-
bar.tick(tick)
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
1
|
+
import ProgressBar from 'progress'
|
|
2
|
+
|
|
3
|
+
// 打印文件传输进度条
|
|
4
|
+
export function createUploadProgressBar(onFinished: Function, onStart?: Function) {
|
|
5
|
+
let bar
|
|
6
|
+
let lastLoaded = 0
|
|
7
|
+
let finished = false
|
|
8
|
+
|
|
9
|
+
return function (data) {
|
|
10
|
+
const { total, loaded, percent } = data
|
|
11
|
+
if (lastLoaded === 0 && onStart) {
|
|
12
|
+
onStart()
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (+percent === 1) {
|
|
16
|
+
if (finished) return
|
|
17
|
+
finished = true
|
|
18
|
+
setTimeout(() => {
|
|
19
|
+
onFinished()
|
|
20
|
+
}, 500)
|
|
21
|
+
bar.tick(total - lastLoaded)
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
const tick = loaded - lastLoaded
|
|
25
|
+
lastLoaded = loaded
|
|
26
|
+
if (bar) {
|
|
27
|
+
bar.tick(tick)
|
|
28
|
+
} else {
|
|
29
|
+
bar = new ProgressBar('文件传输中 [:bar] :percent :etas', {
|
|
30
|
+
total,
|
|
31
|
+
complete: '=',
|
|
32
|
+
incomplete: ' ',
|
|
33
|
+
width: 50
|
|
34
|
+
})
|
|
35
|
+
bar.tick(tick)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import { prompt } from 'enquirer'
|
|
2
|
-
import { CloudBaseError } from '../../error'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @描述 分页的选择型 prompt
|
|
6
|
-
* @泛型参数 O: listFetcher 的参数类型
|
|
7
|
-
* @参数 listFetcher: 执行列表拉取逻辑的函数,一般认为参数 options 至少拥有 limit 和 offset 两个 number 属性
|
|
8
|
-
* @参数 options: listFetcher 的参数
|
|
9
|
-
* @参数 message: 展示的信息
|
|
10
|
-
* @参数 filter 筛选返回列表的数据
|
|
11
|
-
* @参数 mapper 对返回列表中元素的处理函数,用于处理列表数据到实际展示列表的映射
|
|
12
|
-
* @返回值 select 类型返回 string,multiselect 返回 string[]
|
|
13
|
-
*/
|
|
14
|
-
export const pagingSelectPromp =
|
|
15
|
-
async <T, O extends { limit?: number, offset?: number }>(
|
|
16
|
-
type: 'select' | 'multiselect',
|
|
17
|
-
listFetcher: (options: O) => Promise<any[]>,
|
|
18
|
-
options: O,
|
|
19
|
-
message: string,
|
|
20
|
-
filter: (item: any) => boolean = _ => true,
|
|
21
|
-
mapper: (item: any) => string = item => item) => {
|
|
22
|
-
|
|
23
|
-
let res: string[] | string = []
|
|
24
|
-
|
|
25
|
-
let offset = 0
|
|
26
|
-
let nextRoundList: string[]
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
while (true) {
|
|
30
|
-
const thisRoundList = nextRoundList || (await listFetcher({ ...options, limit: 10, offset: offset })).filter(filter).map(mapper)
|
|
31
|
-
offset += 10
|
|
32
|
-
nextRoundList = (await listFetcher({ ...options, limit: 10, offset: offset })).filter(filter).map(mapper)
|
|
33
|
-
|
|
34
|
-
if (!thisRoundList || !thisRoundList.length)
|
|
35
|
-
throw new CloudBaseError('列表没有数据')
|
|
36
|
-
|
|
37
|
-
if (type === 'select') {
|
|
38
|
-
let receiver: string = (await prompt<any>({
|
|
39
|
-
type: type,
|
|
40
|
-
name: 'receiver',
|
|
41
|
-
message: message,
|
|
42
|
-
choices: nextRoundList?.length ? [...thisRoundList, '下一页'] : [...thisRoundList]
|
|
43
|
-
})).receiver
|
|
44
|
-
res = receiver
|
|
45
|
-
if (receiver !== '下一页') break
|
|
46
|
-
} else {
|
|
47
|
-
let { receiver }: { receiver: string[] } = await prompt<any>({
|
|
48
|
-
type: type,
|
|
49
|
-
name: 'receiver',
|
|
50
|
-
message: message,
|
|
51
|
-
choices: nextRoundList?.length ? [...thisRoundList, '下一页'] : [...thisRoundList]
|
|
52
|
-
})
|
|
53
|
-
if (!receiver) receiver = []
|
|
54
|
-
res = [...res, ...receiver.filter(item => item !== '下一页')]
|
|
55
|
-
if (receiver.indexOf('下一页') === -1) break
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return res
|
|
1
|
+
import { prompt } from 'enquirer'
|
|
2
|
+
import { CloudBaseError } from '../../error'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @描述 分页的选择型 prompt
|
|
6
|
+
* @泛型参数 O: listFetcher 的参数类型
|
|
7
|
+
* @参数 listFetcher: 执行列表拉取逻辑的函数,一般认为参数 options 至少拥有 limit 和 offset 两个 number 属性
|
|
8
|
+
* @参数 options: listFetcher 的参数
|
|
9
|
+
* @参数 message: 展示的信息
|
|
10
|
+
* @参数 filter 筛选返回列表的数据
|
|
11
|
+
* @参数 mapper 对返回列表中元素的处理函数,用于处理列表数据到实际展示列表的映射
|
|
12
|
+
* @返回值 select 类型返回 string,multiselect 返回 string[]
|
|
13
|
+
*/
|
|
14
|
+
export const pagingSelectPromp =
|
|
15
|
+
async <T, O extends { limit?: number, offset?: number }>(
|
|
16
|
+
type: 'select' | 'multiselect',
|
|
17
|
+
listFetcher: (options: O) => Promise<any[]>,
|
|
18
|
+
options: O,
|
|
19
|
+
message: string,
|
|
20
|
+
filter: (item: any) => boolean = _ => true,
|
|
21
|
+
mapper: (item: any) => string = item => item) => {
|
|
22
|
+
|
|
23
|
+
let res: string[] | string = []
|
|
24
|
+
|
|
25
|
+
let offset = 0
|
|
26
|
+
let nextRoundList: string[]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
while (true) {
|
|
30
|
+
const thisRoundList = nextRoundList || (await listFetcher({ ...options, limit: 10, offset: offset })).filter(filter).map(mapper)
|
|
31
|
+
offset += 10
|
|
32
|
+
nextRoundList = (await listFetcher({ ...options, limit: 10, offset: offset })).filter(filter).map(mapper)
|
|
33
|
+
|
|
34
|
+
if (!thisRoundList || !thisRoundList.length)
|
|
35
|
+
throw new CloudBaseError('列表没有数据')
|
|
36
|
+
|
|
37
|
+
if (type === 'select') {
|
|
38
|
+
let receiver: string = (await prompt<any>({
|
|
39
|
+
type: type,
|
|
40
|
+
name: 'receiver',
|
|
41
|
+
message: message,
|
|
42
|
+
choices: nextRoundList?.length ? [...thisRoundList, '下一页'] : [...thisRoundList]
|
|
43
|
+
})).receiver
|
|
44
|
+
res = receiver
|
|
45
|
+
if (receiver !== '下一页') break
|
|
46
|
+
} else {
|
|
47
|
+
let { receiver }: { receiver: string[] } = await prompt<any>({
|
|
48
|
+
type: type,
|
|
49
|
+
name: 'receiver',
|
|
50
|
+
message: message,
|
|
51
|
+
choices: nextRoundList?.length ? [...thisRoundList, '下一页'] : [...thisRoundList]
|
|
52
|
+
})
|
|
53
|
+
if (!receiver) receiver = []
|
|
54
|
+
res = [...res, ...receiver.filter(item => item !== '下一页')]
|
|
55
|
+
if (receiver.indexOf('下一页') === -1) break
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return res
|
|
60
60
|
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { postFetch } from '../net'
|
|
2
|
-
import { getMacAddressMd5, getOSInfo } from '../platform'
|
|
3
|
-
import { getUin } from '../store'
|
|
4
|
-
|
|
5
|
-
const url = 'https://tcli.service.tcloudbase.com/agree-collect'
|
|
6
|
-
|
|
7
|
-
export async function collectAgree(agree) {
|
|
8
|
-
const uin = await getUin()
|
|
9
|
-
const macMd5 = await getMacAddressMd5()
|
|
10
|
-
const os = await getOSInfo()
|
|
11
|
-
const data = {
|
|
12
|
-
macMd5,
|
|
13
|
-
agree,
|
|
14
|
-
uin,
|
|
15
|
-
os
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return postFetch(url, data)
|
|
19
|
-
}
|
|
20
|
-
|
|
1
|
+
import { postFetch } from '../net'
|
|
2
|
+
import { getMacAddressMd5, getOSInfo } from '../platform'
|
|
3
|
+
import { getUin } from '../store'
|
|
4
|
+
|
|
5
|
+
const url = 'https://tcli.service.tcloudbase.com/agree-collect'
|
|
6
|
+
|
|
7
|
+
export async function collectAgree(agree) {
|
|
8
|
+
const uin = await getUin()
|
|
9
|
+
const macMd5 = await getMacAddressMd5()
|
|
10
|
+
const os = await getOSInfo()
|
|
11
|
+
const data = {
|
|
12
|
+
macMd5,
|
|
13
|
+
agree,
|
|
14
|
+
uin,
|
|
15
|
+
os
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return postFetch(url, data)
|
|
19
|
+
}
|
|
20
|
+
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { postFetch } from '../net'
|
|
2
|
-
import { getMacAddressMd5, getOSInfo } from '../platform'
|
|
3
|
-
import { getUin } from '../store'
|
|
4
|
-
|
|
5
|
-
const url = 'https://tcli.service.tcloudbase.com/download'
|
|
6
|
-
|
|
7
|
-
export async function templateDownloadReport(templateId: string, templateName: string) {
|
|
8
|
-
const uin = await getUin()
|
|
9
|
-
const os = await getOSInfo()
|
|
10
|
-
const macMd5 = await getMacAddressMd5()
|
|
11
|
-
|
|
12
|
-
const data = {
|
|
13
|
-
os,
|
|
14
|
-
uin,
|
|
15
|
-
macMd5,
|
|
16
|
-
templateId,
|
|
17
|
-
templateName,
|
|
18
|
-
version: process.CLI_VERSION
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
try {
|
|
22
|
-
await postFetch(url, data)
|
|
23
|
-
} catch (e) {
|
|
24
|
-
// ignore error
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
import { postFetch } from '../net'
|
|
2
|
+
import { getMacAddressMd5, getOSInfo } from '../platform'
|
|
3
|
+
import { getUin } from '../store'
|
|
4
|
+
|
|
5
|
+
const url = 'https://tcli.service.tcloudbase.com/download'
|
|
6
|
+
|
|
7
|
+
export async function templateDownloadReport(templateId: string, templateName: string) {
|
|
8
|
+
const uin = await getUin()
|
|
9
|
+
const os = await getOSInfo()
|
|
10
|
+
const macMd5 = await getMacAddressMd5()
|
|
11
|
+
|
|
12
|
+
const data = {
|
|
13
|
+
os,
|
|
14
|
+
uin,
|
|
15
|
+
macMd5,
|
|
16
|
+
templateId,
|
|
17
|
+
templateName,
|
|
18
|
+
version: process.CLI_VERSION
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
await postFetch(url, data)
|
|
23
|
+
} catch (e) {
|
|
24
|
+
// ignore error
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './agree'
|
|
2
|
-
export * from './usage'
|
|
3
|
-
export * from './download'
|
|
1
|
+
export * from './agree'
|
|
2
|
+
export * from './usage'
|
|
3
|
+
export * from './download'
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { postFetch } from '../net'
|
|
2
|
-
import { getMacAddressMd5, getOSInfo } from '../platform'
|
|
3
|
-
import { getUin } from '../store'
|
|
4
|
-
|
|
5
|
-
const url = 'https://tcli.service.tcloudbase.com/usage'
|
|
6
|
-
|
|
7
|
-
export async function collectUsage(command: string) {
|
|
8
|
-
const uin = await getUin()
|
|
9
|
-
const macMd5 = await getMacAddressMd5()
|
|
10
|
-
const os = await getOSInfo()
|
|
11
|
-
const data = {
|
|
12
|
-
os,
|
|
13
|
-
uin,
|
|
14
|
-
macMd5,
|
|
15
|
-
command,
|
|
16
|
-
version: process.CLI_VERSION
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return postFetch(url, data)
|
|
20
|
-
}
|
|
1
|
+
import { postFetch } from '../net'
|
|
2
|
+
import { getMacAddressMd5, getOSInfo } from '../platform'
|
|
3
|
+
import { getUin } from '../store'
|
|
4
|
+
|
|
5
|
+
const url = 'https://tcli.service.tcloudbase.com/usage'
|
|
6
|
+
|
|
7
|
+
export async function collectUsage(command: string) {
|
|
8
|
+
const uin = await getUin()
|
|
9
|
+
const macMd5 = await getMacAddressMd5()
|
|
10
|
+
const os = await getOSInfo()
|
|
11
|
+
const data = {
|
|
12
|
+
os,
|
|
13
|
+
uin,
|
|
14
|
+
macMd5,
|
|
15
|
+
command,
|
|
16
|
+
version: process.CLI_VERSION
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return postFetch(url, data)
|
|
20
|
+
}
|
package/src/utils/store/auth.ts
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import os from 'os'
|
|
2
|
-
import fs from 'fs'
|
|
3
|
-
import path from 'path'
|
|
4
|
-
import { checkFullAccess } from '../fs'
|
|
5
|
-
import { LocalStore } from './db'
|
|
6
|
-
import { ConfigItems } from '../../constant'
|
|
7
|
-
|
|
8
|
-
class AuthStore extends LocalStore {
|
|
9
|
-
constructor(defaults) {
|
|
10
|
-
super(defaults, 'auth')
|
|
11
|
-
this.defaults = defaults
|
|
12
|
-
this.moveOldConfig()
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// TODO: 迁移并删除旧的配置文件中的数据(在后续迭代中删除)
|
|
16
|
-
async moveOldConfig() {
|
|
17
|
-
const db = await this.getDB()
|
|
18
|
-
const oldConfigPath = path.resolve(
|
|
19
|
-
os.homedir(),
|
|
20
|
-
'.config',
|
|
21
|
-
'configstore',
|
|
22
|
-
'@cloudbase',
|
|
23
|
-
'cli.json'
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
if (checkFullAccess(oldConfigPath)) {
|
|
27
|
-
try {
|
|
28
|
-
const content = JSON.parse(fs.readFileSync(oldConfigPath, 'utf8'))
|
|
29
|
-
const { credential, ssh } = content
|
|
30
|
-
await db.set(ConfigItems.credential, credential).write()
|
|
31
|
-
await db.set(ConfigItems.ssh, ssh).write()
|
|
32
|
-
fs.unlinkSync(oldConfigPath)
|
|
33
|
-
} catch (e) {
|
|
34
|
-
fs.unlinkSync(oldConfigPath)
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export const authStore = new AuthStore({
|
|
41
|
-
_: '这是您的 CloudBase 身份凭据文件,请不要分享给他人!',
|
|
42
|
-
[ConfigItems.credential]: {},
|
|
43
|
-
[ConfigItems.ssh]: {}
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
export async function getUin() {
|
|
47
|
-
const credential = await authStore.get(ConfigItems.credential)
|
|
48
|
-
return credential?.uin || '无'
|
|
49
|
-
}
|
|
1
|
+
import os from 'os'
|
|
2
|
+
import fs from 'fs'
|
|
3
|
+
import path from 'path'
|
|
4
|
+
import { checkFullAccess } from '../fs'
|
|
5
|
+
import { LocalStore } from './db'
|
|
6
|
+
import { ConfigItems } from '../../constant'
|
|
7
|
+
|
|
8
|
+
class AuthStore extends LocalStore {
|
|
9
|
+
constructor(defaults) {
|
|
10
|
+
super(defaults, 'auth')
|
|
11
|
+
this.defaults = defaults
|
|
12
|
+
this.moveOldConfig()
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// TODO: 迁移并删除旧的配置文件中的数据(在后续迭代中删除)
|
|
16
|
+
async moveOldConfig() {
|
|
17
|
+
const db = await this.getDB()
|
|
18
|
+
const oldConfigPath = path.resolve(
|
|
19
|
+
os.homedir(),
|
|
20
|
+
'.config',
|
|
21
|
+
'configstore',
|
|
22
|
+
'@cloudbase',
|
|
23
|
+
'cli.json'
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
if (checkFullAccess(oldConfigPath)) {
|
|
27
|
+
try {
|
|
28
|
+
const content = JSON.parse(fs.readFileSync(oldConfigPath, 'utf8'))
|
|
29
|
+
const { credential, ssh } = content
|
|
30
|
+
await db.set(ConfigItems.credential, credential).write()
|
|
31
|
+
await db.set(ConfigItems.ssh, ssh).write()
|
|
32
|
+
fs.unlinkSync(oldConfigPath)
|
|
33
|
+
} catch (e) {
|
|
34
|
+
fs.unlinkSync(oldConfigPath)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const authStore = new AuthStore({
|
|
41
|
+
_: '这是您的 CloudBase 身份凭据文件,请不要分享给他人!',
|
|
42
|
+
[ConfigItems.credential]: {},
|
|
43
|
+
[ConfigItems.ssh]: {}
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
export async function getUin() {
|
|
47
|
+
const credential = await authStore.get(ConfigItems.credential)
|
|
48
|
+
return credential?.uin || '无'
|
|
49
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { LocalStore } from './db'
|
|
2
|
-
|
|
3
|
-
export const commonStore = new LocalStore({
|
|
4
|
-
// 已读最新消息的 uid
|
|
5
|
-
lastNotificationUid: 1,
|
|
6
|
-
// 上次通知时间
|
|
7
|
-
lastNotifyTime: 0
|
|
8
|
-
})
|
|
1
|
+
import { LocalStore } from './db'
|
|
2
|
+
|
|
3
|
+
export const commonStore = new LocalStore({
|
|
4
|
+
// 已读最新消息的 uid
|
|
5
|
+
lastNotificationUid: 1,
|
|
6
|
+
// 上次通知时间
|
|
7
|
+
lastNotifyTime: 0
|
|
8
|
+
})
|