@oncoding/bsteam 0.2.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.
- package/CHANGELOG.md +40 -0
- package/README.md +260 -0
- package/bin/argv.js +35 -0
- package/bin/dev.js +23 -0
- package/bin/run.js +25 -0
- package/bin/workspace-plugin.js +16 -0
- package/dist/auth/context-config.d.ts +91 -0
- package/dist/auth/context-config.d.ts.map +1 -0
- package/dist/auth/context-config.js +258 -0
- package/dist/auth/context-config.js.map +1 -0
- package/dist/auth/credential-store.d.ts +57 -0
- package/dist/auth/credential-store.d.ts.map +1 -0
- package/dist/auth/credential-store.js +146 -0
- package/dist/auth/credential-store.js.map +1 -0
- package/dist/base-command.d.ts +22 -0
- package/dist/base-command.d.ts.map +1 -0
- package/dist/base-command.js +33 -0
- package/dist/base-command.js.map +1 -0
- package/dist/command-utils/platform-command.d.ts +51 -0
- package/dist/command-utils/platform-command.d.ts.map +1 -0
- package/dist/command-utils/platform-command.js +178 -0
- package/dist/command-utils/platform-command.js.map +1 -0
- package/dist/commands/api.d.ts +26 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +132 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/auth/check.d.ts +21 -0
- package/dist/commands/auth/check.d.ts.map +1 -0
- package/dist/commands/auth/check.js +57 -0
- package/dist/commands/auth/check.js.map +1 -0
- package/dist/commands/auth/list.d.ts +13 -0
- package/dist/commands/auth/list.d.ts.map +1 -0
- package/dist/commands/auth/list.js +56 -0
- package/dist/commands/auth/list.js.map +1 -0
- package/dist/commands/auth/login.d.ts +27 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +155 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +15 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +55 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/scopes.d.ts +18 -0
- package/dist/commands/auth/scopes.d.ts.map +1 -0
- package/dist/commands/auth/scopes.js +56 -0
- package/dist/commands/auth/scopes.js.map +1 -0
- package/dist/commands/auth/status.d.ts +17 -0
- package/dist/commands/auth/status.d.ts.map +1 -0
- package/dist/commands/auth/status.js +81 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/auth/token/create.d.ts +22 -0
- package/dist/commands/auth/token/create.d.ts.map +1 -0
- package/dist/commands/auth/token/create.js +46 -0
- package/dist/commands/auth/token/create.js.map +1 -0
- package/dist/commands/auth/token/list.d.ts +17 -0
- package/dist/commands/auth/token/list.d.ts.map +1 -0
- package/dist/commands/auth/token/list.js +33 -0
- package/dist/commands/auth/token/list.js.map +1 -0
- package/dist/commands/auth/token/revoke.d.ts +24 -0
- package/dist/commands/auth/token/revoke.d.ts.map +1 -0
- package/dist/commands/auth/token/revoke.js +29 -0
- package/dist/commands/auth/token/revoke.js.map +1 -0
- package/dist/commands/config/show.d.ts +13 -0
- package/dist/commands/config/show.d.ts.map +1 -0
- package/dist/commands/config/show.js +34 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/kb/acl/grant.d.ts +27 -0
- package/dist/commands/kb/acl/grant.d.ts.map +1 -0
- package/dist/commands/kb/acl/grant.js +49 -0
- package/dist/commands/kb/acl/grant.js.map +1 -0
- package/dist/commands/kb/acl/list.d.ts +20 -0
- package/dist/commands/kb/acl/list.d.ts.map +1 -0
- package/dist/commands/kb/acl/list.js +35 -0
- package/dist/commands/kb/acl/list.js.map +1 -0
- package/dist/commands/kb/acl/revoke.d.ts +25 -0
- package/dist/commands/kb/acl/revoke.d.ts.map +1 -0
- package/dist/commands/kb/acl/revoke.js +27 -0
- package/dist/commands/kb/acl/revoke.js.map +1 -0
- package/dist/commands/kb/acl/update.d.ts +28 -0
- package/dist/commands/kb/acl/update.d.ts.map +1 -0
- package/dist/commands/kb/acl/update.js +40 -0
- package/dist/commands/kb/acl/update.js.map +1 -0
- package/dist/commands/kb/create.d.ts +26 -0
- package/dist/commands/kb/create.d.ts.map +1 -0
- package/dist/commands/kb/create.js +59 -0
- package/dist/commands/kb/create.js.map +1 -0
- package/dist/commands/kb/delete.d.ts +24 -0
- package/dist/commands/kb/delete.d.ts.map +1 -0
- package/dist/commands/kb/delete.js +29 -0
- package/dist/commands/kb/delete.js.map +1 -0
- package/dist/commands/kb/doctor.d.ts +17 -0
- package/dist/commands/kb/doctor.d.ts.map +1 -0
- package/dist/commands/kb/doctor.js +48 -0
- package/dist/commands/kb/doctor.js.map +1 -0
- package/dist/commands/kb/file.d.ts +23 -0
- package/dist/commands/kb/file.d.ts.map +1 -0
- package/dist/commands/kb/file.js +97 -0
- package/dist/commands/kb/file.js.map +1 -0
- package/dist/commands/kb/get.d.ts +20 -0
- package/dist/commands/kb/get.d.ts.map +1 -0
- package/dist/commands/kb/get.js +37 -0
- package/dist/commands/kb/get.js.map +1 -0
- package/dist/commands/kb/git.d.ts +20 -0
- package/dist/commands/kb/git.d.ts.map +1 -0
- package/dist/commands/kb/git.js +46 -0
- package/dist/commands/kb/git.js.map +1 -0
- package/dist/commands/kb/list.d.ts +17 -0
- package/dist/commands/kb/list.d.ts.map +1 -0
- package/dist/commands/kb/list.js +36 -0
- package/dist/commands/kb/list.js.map +1 -0
- package/dist/commands/kb/share/create.d.ts +25 -0
- package/dist/commands/kb/share/create.d.ts.map +1 -0
- package/dist/commands/kb/share/create.js +42 -0
- package/dist/commands/kb/share/create.js.map +1 -0
- package/dist/commands/kb/share/list.d.ts +20 -0
- package/dist/commands/kb/share/list.d.ts.map +1 -0
- package/dist/commands/kb/share/list.js +35 -0
- package/dist/commands/kb/share/list.js.map +1 -0
- package/dist/commands/kb/share/revoke.d.ts +25 -0
- package/dist/commands/kb/share/revoke.d.ts.map +1 -0
- package/dist/commands/kb/share/revoke.js +27 -0
- package/dist/commands/kb/share/revoke.js.map +1 -0
- package/dist/commands/kb/tree.d.ts +20 -0
- package/dist/commands/kb/tree.d.ts.map +1 -0
- package/dist/commands/kb/tree.js +39 -0
- package/dist/commands/kb/tree.js.map +1 -0
- package/dist/commands/kb/update.d.ts +29 -0
- package/dist/commands/kb/update.d.ts.map +1 -0
- package/dist/commands/kb/update.js +49 -0
- package/dist/commands/kb/update.js.map +1 -0
- package/dist/commands/reimbursement/create.d.ts +31 -0
- package/dist/commands/reimbursement/create.d.ts.map +1 -0
- package/dist/commands/reimbursement/create.js +67 -0
- package/dist/commands/reimbursement/create.js.map +1 -0
- package/dist/commands/reimbursement/delete.d.ts +24 -0
- package/dist/commands/reimbursement/delete.d.ts.map +1 -0
- package/dist/commands/reimbursement/delete.js +26 -0
- package/dist/commands/reimbursement/delete.js.map +1 -0
- package/dist/commands/reimbursement/list.d.ts +17 -0
- package/dist/commands/reimbursement/list.d.ts.map +1 -0
- package/dist/commands/reimbursement/list.js +33 -0
- package/dist/commands/reimbursement/list.js.map +1 -0
- package/dist/commands/reimbursement/operations.d.ts +17 -0
- package/dist/commands/reimbursement/operations.d.ts.map +1 -0
- package/dist/commands/reimbursement/operations.js +19 -0
- package/dist/commands/reimbursement/operations.js.map +1 -0
- package/dist/commands/reimbursement/permissions/list.d.ts +17 -0
- package/dist/commands/reimbursement/permissions/list.d.ts.map +1 -0
- package/dist/commands/reimbursement/permissions/list.js +32 -0
- package/dist/commands/reimbursement/permissions/list.js.map +1 -0
- package/dist/commands/reimbursement/permissions/replace.d.ts +22 -0
- package/dist/commands/reimbursement/permissions/replace.d.ts.map +1 -0
- package/dist/commands/reimbursement/permissions/replace.js +32 -0
- package/dist/commands/reimbursement/permissions/replace.js.map +1 -0
- package/dist/commands/reimbursement/update.d.ts +31 -0
- package/dist/commands/reimbursement/update.d.ts.map +1 -0
- package/dist/commands/reimbursement/update.js +56 -0
- package/dist/commands/reimbursement/update.js.map +1 -0
- package/dist/commands/token/create.d.ts +26 -0
- package/dist/commands/token/create.d.ts.map +1 -0
- package/dist/commands/token/create.js +52 -0
- package/dist/commands/token/create.js.map +1 -0
- package/dist/commands/token/delete.d.ts +24 -0
- package/dist/commands/token/delete.d.ts.map +1 -0
- package/dist/commands/token/delete.js +26 -0
- package/dist/commands/token/delete.js.map +1 -0
- package/dist/commands/token/list.d.ts +17 -0
- package/dist/commands/token/list.d.ts.map +1 -0
- package/dist/commands/token/list.js +33 -0
- package/dist/commands/token/list.js.map +1 -0
- package/dist/commands/token/operations.d.ts +17 -0
- package/dist/commands/token/operations.d.ts.map +1 -0
- package/dist/commands/token/operations.js +19 -0
- package/dist/commands/token/operations.js.map +1 -0
- package/dist/commands/token/permissions/list.d.ts +17 -0
- package/dist/commands/token/permissions/list.d.ts.map +1 -0
- package/dist/commands/token/permissions/list.js +32 -0
- package/dist/commands/token/permissions/list.js.map +1 -0
- package/dist/commands/token/permissions/replace.d.ts +22 -0
- package/dist/commands/token/permissions/replace.d.ts.map +1 -0
- package/dist/commands/token/permissions/replace.js +32 -0
- package/dist/commands/token/permissions/replace.js.map +1 -0
- package/dist/commands/token/precheck.d.ts +20 -0
- package/dist/commands/token/precheck.d.ts.map +1 -0
- package/dist/commands/token/precheck.js +30 -0
- package/dist/commands/token/precheck.js.map +1 -0
- package/dist/commands/token/reveal.d.ts +24 -0
- package/dist/commands/token/reveal.d.ts.map +1 -0
- package/dist/commands/token/reveal.js +29 -0
- package/dist/commands/token/reveal.js.map +1 -0
- package/dist/commands/token/update.d.ts +29 -0
- package/dist/commands/token/update.d.ts.map +1 -0
- package/dist/commands/token/update.js +47 -0
- package/dist/commands/token/update.js.map +1 -0
- package/dist/commands/version.d.ts +13 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +16 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/config/config-loader.d.ts +23 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +35 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/exit-codes.d.ts +14 -0
- package/dist/config/exit-codes.d.ts.map +1 -0
- package/dist/config/exit-codes.js +15 -0
- package/dist/config/exit-codes.js.map +1 -0
- package/dist/config/profiles.d.ts +14 -0
- package/dist/config/profiles.d.ts.map +1 -0
- package/dist/config/profiles.js +28 -0
- package/dist/config/profiles.js.map +1 -0
- package/dist/formatters/envelope.d.ts +10 -0
- package/dist/formatters/envelope.d.ts.map +1 -0
- package/dist/formatters/envelope.js +13 -0
- package/dist/formatters/envelope.js.map +1 -0
- package/dist/formatters/index.d.ts +4 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +3 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/table.d.ts +7 -0
- package/dist/formatters/table.d.ts.map +1 -0
- package/dist/formatters/table.js +17 -0
- package/dist/formatters/table.js.map +1 -0
- package/dist/hooks/init.d.ts +8 -0
- package/dist/hooks/init.d.ts.map +1 -0
- package/dist/hooks/init.js +17 -0
- package/dist/hooks/init.js.map +1 -0
- package/dist/hooks/prerun.d.ts +8 -0
- package/dist/hooks/prerun.d.ts.map +1 -0
- package/dist/hooks/prerun.js +29 -0
- package/dist/hooks/prerun.js.map +1 -0
- package/dist/http/platform-api.d.ts +48 -0
- package/dist/http/platform-api.d.ts.map +1 -0
- package/dist/http/platform-api.js +228 -0
- package/dist/http/platform-api.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { BaseCommand } from '../../base-command.js';
|
|
3
|
+
import { getBsteamConfigFilePath, saveContextCredential, summarizeContextCredential, } from '../../auth/context-config.js';
|
|
4
|
+
import { ExitCodes } from '../../config/exit-codes.js';
|
|
5
|
+
import { extractCapabilities, platformApiFlags, platformApiGet, platformApiPost, resolvePlatformApiOptions, } from '../../http/platform-api.js';
|
|
6
|
+
export default class AuthLogin extends BaseCommand {
|
|
7
|
+
static description = '登录 bsteam Platform API 并把 token 保存到本机 context config';
|
|
8
|
+
static flags = {
|
|
9
|
+
...BaseCommand.baseFlags,
|
|
10
|
+
...platformApiFlags,
|
|
11
|
+
name: Flags.string({
|
|
12
|
+
char: 'n',
|
|
13
|
+
description: 'context 名称别名;优先使用全局 --context',
|
|
14
|
+
default: 'default',
|
|
15
|
+
}),
|
|
16
|
+
cluster: Flags.string({
|
|
17
|
+
description: 'cluster 名称;默认与 context 相同',
|
|
18
|
+
}),
|
|
19
|
+
user: Flags.string({
|
|
20
|
+
description: 'user 名称;默认与 context 相同',
|
|
21
|
+
}),
|
|
22
|
+
'set-default': Flags.boolean({
|
|
23
|
+
description: '把本次登录设置为 currentContext',
|
|
24
|
+
default: true,
|
|
25
|
+
allowNo: true,
|
|
26
|
+
}),
|
|
27
|
+
'token-stdin': Flags.boolean({
|
|
28
|
+
description: '从 stdin 读取 bearer token,避免 token 进入 shell history',
|
|
29
|
+
default: false,
|
|
30
|
+
}),
|
|
31
|
+
email: Flags.string({
|
|
32
|
+
description: '邮箱密码登录的邮箱;仅用于本地/已启用密码登录的账号',
|
|
33
|
+
}),
|
|
34
|
+
'password-stdin': Flags.boolean({
|
|
35
|
+
description: '从 stdin 读取登录密码,并调用 /api/v1/auth/login 换取 token',
|
|
36
|
+
default: false,
|
|
37
|
+
}),
|
|
38
|
+
'skip-verify': Flags.boolean({
|
|
39
|
+
description: '只保存 token,不调用 /api/v1/auth/session 验证',
|
|
40
|
+
default: false,
|
|
41
|
+
}),
|
|
42
|
+
};
|
|
43
|
+
async run() {
|
|
44
|
+
const { flags } = await this.parse(AuthLogin);
|
|
45
|
+
const options = await resolvePlatformApiOptions({
|
|
46
|
+
...flags,
|
|
47
|
+
token: undefined,
|
|
48
|
+
credential: undefined,
|
|
49
|
+
});
|
|
50
|
+
const login = await this.resolveLoginToken(flags, options.apiUrl);
|
|
51
|
+
if (!login.token) {
|
|
52
|
+
this.reportAuthError('AUTH_TOKEN_REQUIRED', '缺少 token。使用 --token、--token-stdin,或 --email + --password-stdin 登录。', '优先从个人中心复制 CLI 登录命令;Agent 场景用 --token-stdin 避免泄露。');
|
|
53
|
+
this.exit(ExitCodes.INVALID_ARGS);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
let user = login.user;
|
|
57
|
+
let capabilities;
|
|
58
|
+
if (!flags['skip-verify']) {
|
|
59
|
+
const session = await platformApiGet({ apiUrl: options.apiUrl, token: login.token }, '/api/v1/auth/session');
|
|
60
|
+
if (!session.ok) {
|
|
61
|
+
this.reportAuthError('AUTH_VERIFY_FAILED', `token 验证失败:${session.error ?? session.status}`, '确认 token 未过期,并且 --api-url 指向当前 bsteam Platform API。');
|
|
62
|
+
this.exit(ExitCodes.AUTH_REQUIRED);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
user = normalizeUser(session.data) ?? user;
|
|
66
|
+
const scopeResult = await platformApiGet({ apiUrl: options.apiUrl, token: login.token }, '/api/v1/platform/authz/capabilities');
|
|
67
|
+
if (scopeResult.ok)
|
|
68
|
+
capabilities = extractCapabilities(scopeResult.data);
|
|
69
|
+
}
|
|
70
|
+
const saved = await saveContextCredential({
|
|
71
|
+
contextName: flags.context ?? flags.name,
|
|
72
|
+
clusterName: flags.cluster,
|
|
73
|
+
userName: flags.user,
|
|
74
|
+
apiUrl: options.apiUrl,
|
|
75
|
+
token: login.token,
|
|
76
|
+
activeDomainId: flags.domain,
|
|
77
|
+
user,
|
|
78
|
+
capabilities,
|
|
79
|
+
lastVerifiedAt: flags['skip-verify'] ? undefined : new Date().toISOString(),
|
|
80
|
+
}, { setCurrent: flags['set-default'], configPath: flags.config });
|
|
81
|
+
const output = {
|
|
82
|
+
context: summarizeContextCredential(saved, flags['set-default']),
|
|
83
|
+
configFile: getBsteamConfigFilePath(flags.config),
|
|
84
|
+
verified: !flags['skip-verify'],
|
|
85
|
+
};
|
|
86
|
+
if (flags.json) {
|
|
87
|
+
this.outputEnvelope(output);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
this.log(`Logged in: ${saved.user?.display_name ?? saved.user?.email ?? saved.contextName}`);
|
|
91
|
+
this.log(`API: ${saved.apiUrl}`);
|
|
92
|
+
this.log(`Context: ${saved.contextName}${flags['set-default'] ? ' (current)' : ''}`);
|
|
93
|
+
this.log(`Config: ${getBsteamConfigFilePath(flags.config)}`);
|
|
94
|
+
this.log(`Token: ${summarizeContextCredential(saved).tokenRedacted}`);
|
|
95
|
+
this.log('Next: bsteam auth status');
|
|
96
|
+
}
|
|
97
|
+
async resolveLoginToken(flags, apiUrl) {
|
|
98
|
+
if (typeof flags.token === 'string' && flags.token.trim()) {
|
|
99
|
+
return { token: flags.token.trim() };
|
|
100
|
+
}
|
|
101
|
+
if (flags['token-stdin']) {
|
|
102
|
+
return { token: (await readStdin()).trim() };
|
|
103
|
+
}
|
|
104
|
+
if (typeof flags.email === 'string' && flags['password-stdin']) {
|
|
105
|
+
const password = (await readStdin()).trim();
|
|
106
|
+
const result = await platformApiPost({ apiUrl }, '/api/v1/auth/login', { email: flags.email, password });
|
|
107
|
+
if (!result.ok || !result.data?.access_token) {
|
|
108
|
+
this.reportAuthError('AUTH_LOGIN_FAILED', `登录失败:${result.error ?? result.status}`, '确认邮箱密码登录已启用;飞书/企微 OAuth 账号请从个人中心复制平台 session token。');
|
|
109
|
+
this.exit(ExitCodes.AUTH_REQUIRED);
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
token: result.data.access_token,
|
|
114
|
+
user: normalizeUser(result.data.user),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {};
|
|
118
|
+
}
|
|
119
|
+
reportAuthError(code, message, hint) {
|
|
120
|
+
const error = { code, message, hint };
|
|
121
|
+
if (this.argv.includes('--json')) {
|
|
122
|
+
this.outputEnvelope(error, false);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this.error(`${message}\n${hint}`, { exit: false });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function normalizeUser(value) {
|
|
129
|
+
if (!value || typeof value !== 'object')
|
|
130
|
+
return undefined;
|
|
131
|
+
const user = value;
|
|
132
|
+
return {
|
|
133
|
+
id: stringOrUndefined(user.id),
|
|
134
|
+
principal_id: stringOrUndefined(user.principal_id),
|
|
135
|
+
display_name: stringOrUndefined(user.display_name),
|
|
136
|
+
email: stringOrUndefined(user.email),
|
|
137
|
+
tenant_id: stringOrUndefined(user.tenant_id),
|
|
138
|
+
status: stringOrUndefined(user.status),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function stringOrUndefined(value) {
|
|
142
|
+
return typeof value === 'string' ? value : undefined;
|
|
143
|
+
}
|
|
144
|
+
function readStdin() {
|
|
145
|
+
return new Promise((resolve, reject) => {
|
|
146
|
+
let data = '';
|
|
147
|
+
process.stdin.setEncoding('utf8');
|
|
148
|
+
process.stdin.on('data', (chunk) => {
|
|
149
|
+
data += chunk;
|
|
150
|
+
});
|
|
151
|
+
process.stdin.on('end', () => resolve(data));
|
|
152
|
+
process.stdin.on('error', reject);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AAOpC,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAU,WAAW,GAAG,sDAAsD,CAAC;IAErF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;QACxB,GAAG,gBAAgB;QACnB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,+BAA+B;YAC5C,OAAO,EAAE,SAAS;SACnB,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,2BAA2B;SACzC,CAAC;QACF,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,wBAAwB;SACtC,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC;YAC3B,WAAW,EAAE,yBAAyB;YACtC,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC;YAC3B,WAAW,EAAE,mDAAmD;YAChE,OAAO,EAAE,KAAK;SACf,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,4BAA4B;SAC1C,CAAC;QACF,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC9B,WAAW,EAAE,gDAAgD;YAC7D,OAAO,EAAE,KAAK;SACf,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC;YAC3B,WAAW,EAAE,uCAAuC;YACpD,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;YAC9C,GAAG,KAAK;YACR,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,eAAe,CAClB,qBAAqB,EACrB,oEAAoE,EACpE,kDAAkD,CACnD,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,IAAI,YAAkC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,MAAM,cAAc,CAClC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAC9C,sBAAsB,CACvB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC,eAAe,CAClB,oBAAoB,EACpB,cAAc,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAC/C,qDAAqD,CACtD,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YAE3C,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAC9C,qCAAqC,CACtC,CAAC;YACF,IAAI,WAAW,CAAC,EAAE;gBAAE,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC;YACxC,WAAW,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI;YACxC,WAAW,EAAE,KAAK,CAAC,OAAO;YAC1B,QAAQ,EAAE,KAAK,CAAC,IAAI;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,cAAc,EAAE,KAAK,CAAC,MAAM;YAC5B,IAAI;YACJ,YAAY;YACZ,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC5E,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAChE,UAAU,EAAE,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC;YACjD,QAAQ,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;SAChC,CAAC;QAEF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,EAAE,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,GAAG,CAAC,WAAW,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,GAAG,CAAC,UAAU,0BAA0B,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,KAA0B,EAC1B,MAAc;QAEd,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1D,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACvC,CAAC;QACD,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC/D,MAAM,QAAQ,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,EAAE,MAAM,EAAE,EACV,oBAAoB,EACpB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CACjC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC7C,IAAI,CAAC,eAAe,CAClB,mBAAmB,EACnB,QAAQ,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EACvC,qDAAqD,CACtD,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBACnC,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;gBAC/B,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;aACtC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,eAAe,CAAC,IAAY,EAAE,OAAe,EAAE,IAAY;QACjE,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;;AAGH,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,OAAO;QACL,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,YAAY,EAAE,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;QAClD,YAAY,EAAE,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;QAClD,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QACpC,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5C,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,IAAI,IAAI,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command.js';
|
|
2
|
+
export default class AuthLogout extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
context: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'trace-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=logout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,OAAgB,WAAW,SAAqC;IAEhE,OAAgB,KAAK;;;;;;;;MAUnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqC3B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { BaseCommand } from '../../base-command.js';
|
|
3
|
+
import { deleteAllCredentials, deleteCredential } from '../../auth/credential-store.js';
|
|
4
|
+
import { deleteAllContexts, deleteContext } from '../../auth/context-config.js';
|
|
5
|
+
export default class AuthLogout extends BaseCommand {
|
|
6
|
+
static description = '删除本机保存的 bsteam CLI context 或旧凭证';
|
|
7
|
+
static flags = {
|
|
8
|
+
...BaseCommand.baseFlags,
|
|
9
|
+
name: Flags.string({
|
|
10
|
+
char: 'n',
|
|
11
|
+
description: '要删除的 context 名称别名;优先使用全局 --context',
|
|
12
|
+
}),
|
|
13
|
+
all: Flags.boolean({
|
|
14
|
+
description: '删除全部本机 contexts 和旧凭证',
|
|
15
|
+
default: false,
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
async run() {
|
|
19
|
+
const { flags } = await this.parse(AuthLogout);
|
|
20
|
+
const contextName = flags.context ?? flags.name;
|
|
21
|
+
const contextResult = flags.all
|
|
22
|
+
? await deleteAllContexts(flags.config)
|
|
23
|
+
: await deleteContext(contextName, flags.config);
|
|
24
|
+
const credentialResult = flags.all
|
|
25
|
+
? await deleteAllCredentials()
|
|
26
|
+
: contextResult.deleted.length === 0 && !flags.context
|
|
27
|
+
? await deleteCredential(flags.name)
|
|
28
|
+
: { deleted: [], default: undefined };
|
|
29
|
+
const result = {
|
|
30
|
+
deletedContexts: contextResult.deleted,
|
|
31
|
+
currentContext: 'currentContext' in contextResult ? contextResult.currentContext : undefined,
|
|
32
|
+
deletedCredentials: credentialResult.deleted,
|
|
33
|
+
defaultCredential: 'default' in credentialResult ? credentialResult.default : undefined,
|
|
34
|
+
};
|
|
35
|
+
if (flags.json) {
|
|
36
|
+
this.outputEnvelope(result);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (result.deletedContexts.length === 0 && result.deletedCredentials.length === 0) {
|
|
40
|
+
this.log('No context or credential was removed');
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (result.deletedContexts.length > 0) {
|
|
44
|
+
this.log(`Removed contexts: ${result.deletedContexts.join(', ')}`);
|
|
45
|
+
}
|
|
46
|
+
if (result.currentContext)
|
|
47
|
+
this.log(`Current context is now: ${result.currentContext}`);
|
|
48
|
+
if (result.deletedCredentials.length > 0) {
|
|
49
|
+
this.log(`Removed legacy credentials: ${result.deletedCredentials.join(', ')}`);
|
|
50
|
+
}
|
|
51
|
+
if (result.defaultCredential)
|
|
52
|
+
this.log(`Default legacy credential is now: ${result.defaultCredential}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command.js';
|
|
2
|
+
export default class AuthScopes extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
credential: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
domain: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
context: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
'trace-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
private reportMissingToken;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=scopes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scopes.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/scopes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,OAAgB,WAAW,SAA8B;IAEzD,OAAgB,KAAK;;;;;;;;;;MAGnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC1B,OAAO,CAAC,kBAAkB;CAS3B"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command.js';
|
|
2
|
+
import { ExitCodes } from '../../config/exit-codes.js';
|
|
3
|
+
import { extractCapabilities, platformApiFlags, platformApiGet, resolvePlatformApiOptions } from '../../http/platform-api.js';
|
|
4
|
+
import { formatTable } from '../../formatters/table.js';
|
|
5
|
+
export default class AuthScopes extends BaseCommand {
|
|
6
|
+
static description = '列出当前 token 可用的平台能力 scope';
|
|
7
|
+
static flags = {
|
|
8
|
+
...BaseCommand.baseFlags,
|
|
9
|
+
...platformApiFlags,
|
|
10
|
+
};
|
|
11
|
+
async run() {
|
|
12
|
+
const { flags } = await this.parse(AuthScopes);
|
|
13
|
+
const options = await resolvePlatformApiOptions(flags);
|
|
14
|
+
if (!options.token) {
|
|
15
|
+
this.reportMissingToken(flags.json);
|
|
16
|
+
this.exit(ExitCodes.AUTH_REQUIRED);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const result = await platformApiGet(options, '/api/v1/platform/authz/capabilities');
|
|
20
|
+
if (!result.ok) {
|
|
21
|
+
const error = {
|
|
22
|
+
code: result.status === 401 || result.status === 403 ? 'AUTH_REQUIRED' : 'NETWORK_ERROR',
|
|
23
|
+
message: result.error ?? 'failed to load capabilities',
|
|
24
|
+
hint: 'Run bsteam auth status to verify the saved credential.',
|
|
25
|
+
};
|
|
26
|
+
if (flags.json)
|
|
27
|
+
this.outputEnvelope(error, false);
|
|
28
|
+
else
|
|
29
|
+
this.error(`${error.message}\n${error.hint}`, { exit: false });
|
|
30
|
+
this.exit(result.status === 401 || result.status === 403 ? ExitCodes.AUTH_REQUIRED : ExitCodes.NETWORK_ERROR);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const capabilities = extractCapabilities(result.data).sort();
|
|
34
|
+
if (flags.json) {
|
|
35
|
+
this.outputEnvelope({ capabilities, count: capabilities.length });
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (capabilities.length === 0) {
|
|
39
|
+
this.log('No capabilities returned');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.log(formatTable(['Capability'], capabilities.map((capability) => [capability])));
|
|
43
|
+
}
|
|
44
|
+
reportMissingToken(json) {
|
|
45
|
+
const error = {
|
|
46
|
+
code: 'AUTH_REQUIRED',
|
|
47
|
+
message: 'No bearer token found',
|
|
48
|
+
hint: 'Run bsteam auth login --context <name> --token-stdin, or set BSTEAM_PLATFORM_TOKEN.',
|
|
49
|
+
};
|
|
50
|
+
if (json)
|
|
51
|
+
this.outputEnvelope(error, false);
|
|
52
|
+
else
|
|
53
|
+
this.error(`${error.message}\n${error.hint}`, { exit: false });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=scopes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../../src/commands/auth/scopes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC9H,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAU,WAAW,GAAG,0BAA0B,CAAC;IAEzD,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;QACxB,GAAG,gBAAgB;KACpB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAA0B,OAAO,EAAE,qCAAqC,CAAC,CAAC;QAC7G,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,KAAK,GAAG;gBACZ,IAAI,EAAE,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe;gBACxF,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,6BAA6B;gBACtD,IAAI,EAAE,wDAAwD;aAC/D,CAAC;YACF,IAAI,KAAK,CAAC,IAAI;gBAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;;gBAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC9G,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAEO,kBAAkB,CAAC,IAAa;QACtC,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,uBAAuB;YAChC,IAAI,EAAE,qFAAqF;SAC5F,CAAC;QACF,IAAI,IAAI;YAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;;YACvC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command.js';
|
|
2
|
+
export default class AuthStatus extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
credential: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
domain: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
context: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
'trace-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAepD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,OAAgB,WAAW,SAAgC;IAE3D,OAAgB,KAAK;;;;;;;;;;MAGnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsE3B"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base-command.js';
|
|
2
|
+
import { getCredential, getCredentialsFilePath, summarizeCredential } from '../../auth/credential-store.js';
|
|
3
|
+
import { getBsteamConfigFilePath, getContextCredential, summarizeContextCredential, } from '../../auth/context-config.js';
|
|
4
|
+
import { ExitCodes } from '../../config/exit-codes.js';
|
|
5
|
+
import { extractCapabilities, platformApiFlags, platformApiGet, resolvePlatformApiOptions, } from '../../http/platform-api.js';
|
|
6
|
+
export default class AuthStatus extends BaseCommand {
|
|
7
|
+
static description = '查看当前 bsteam CLI 登录状态和已授权能力';
|
|
8
|
+
static flags = {
|
|
9
|
+
...BaseCommand.baseFlags,
|
|
10
|
+
...platformApiFlags,
|
|
11
|
+
};
|
|
12
|
+
async run() {
|
|
13
|
+
const { flags } = await this.parse(AuthStatus);
|
|
14
|
+
const options = await resolvePlatformApiOptions(flags);
|
|
15
|
+
const context = await getContextCredential(flags.context ?? flags.credential, flags.config);
|
|
16
|
+
const credential = context ? undefined : await getCredential(flags.credential);
|
|
17
|
+
if (!options.token) {
|
|
18
|
+
const output = {
|
|
19
|
+
authenticated: false,
|
|
20
|
+
apiUrl: options.apiUrl,
|
|
21
|
+
context: context ? summarizeContextCredential(context, context.contextName === options.context) : undefined,
|
|
22
|
+
configFile: getBsteamConfigFilePath(flags.config),
|
|
23
|
+
credential: credential ? summarizeCredential(credential) : undefined,
|
|
24
|
+
credentialsFile: getCredentialsFilePath(),
|
|
25
|
+
nextStep: 'Run bsteam auth login --context <name> --token-stdin, or copy the CLI login command from Account Security.',
|
|
26
|
+
};
|
|
27
|
+
if (flags.json) {
|
|
28
|
+
this.outputEnvelope(output, false);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this.log('Not authenticated');
|
|
32
|
+
this.log(`API: ${options.apiUrl}`);
|
|
33
|
+
this.log(`Config: ${getBsteamConfigFilePath(flags.config)}`);
|
|
34
|
+
this.log('Next: bsteam auth login --context <name> --token-stdin');
|
|
35
|
+
}
|
|
36
|
+
this.exit(ExitCodes.AUTH_REQUIRED);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const session = await platformApiGet(options, '/api/v1/auth/session');
|
|
40
|
+
const scopes = session.ok
|
|
41
|
+
? await platformApiGet(options, '/api/v1/platform/authz/capabilities')
|
|
42
|
+
: undefined;
|
|
43
|
+
const capabilities = scopes?.ok ? extractCapabilities(scopes.data) : [];
|
|
44
|
+
const ok = session.ok;
|
|
45
|
+
const output = {
|
|
46
|
+
authenticated: ok,
|
|
47
|
+
apiUrl: options.apiUrl,
|
|
48
|
+
context: context ? summarizeContextCredential(context, context.contextName === options.context) : undefined,
|
|
49
|
+
configFile: getBsteamConfigFilePath(flags.config),
|
|
50
|
+
credential: credential ? summarizeCredential(credential) : undefined,
|
|
51
|
+
user: session.ok ? session.data : undefined,
|
|
52
|
+
capabilities,
|
|
53
|
+
capabilitiesCount: capabilities.length,
|
|
54
|
+
error: session.ok ? undefined : session.error,
|
|
55
|
+
};
|
|
56
|
+
if (flags.json) {
|
|
57
|
+
this.outputEnvelope(output, ok);
|
|
58
|
+
if (!ok)
|
|
59
|
+
this.exit(ExitCodes.AUTH_REQUIRED);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (!ok) {
|
|
63
|
+
this.log('Authentication failed');
|
|
64
|
+
this.log(`API: ${options.apiUrl}`);
|
|
65
|
+
this.log(`Error: ${session.error ?? session.status}`);
|
|
66
|
+
this.log('Next: refresh the token from Account Security and run bsteam auth login again.');
|
|
67
|
+
this.exit(ExitCodes.AUTH_REQUIRED);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const user = session.data;
|
|
71
|
+
this.log('Authenticated');
|
|
72
|
+
this.log(`API: ${options.apiUrl}`);
|
|
73
|
+
this.log(`Context: ${context?.contextName ?? options.context ?? 'inline/env token'}`);
|
|
74
|
+
if (credential)
|
|
75
|
+
this.log(`Legacy credential: ${credential.name}`);
|
|
76
|
+
this.log(`Config: ${getBsteamConfigFilePath(flags.config)}`);
|
|
77
|
+
this.log(`User: ${user.display_name ?? user.email ?? user.id ?? '-'}`);
|
|
78
|
+
this.log(`Capabilities: ${capabilities.length}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base-command.js';
|
|
2
|
+
export default class AuthTokenCreate extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
'expires-in-days': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
data: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
'data-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
credential: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
domain: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
context: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
'trace-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
};
|
|
20
|
+
run(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/token/create.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,OAAgB,WAAW,SAAuC;IAElE,OAAgB,KAAK;;;;;;;;;;;;;;;MAenB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB3B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { BaseCommand } from '../../../base-command.js';
|
|
3
|
+
import { platformApiFlags } from '../../../http/platform-api.js';
|
|
4
|
+
import { buildBody, jsonBodyFlags, requestAndOutput } from '../../../command-utils/platform-command.js';
|
|
5
|
+
export default class AuthTokenCreate extends BaseCommand {
|
|
6
|
+
static description = '创建当前账号的 CLI Personal Access Token';
|
|
7
|
+
static flags = {
|
|
8
|
+
...BaseCommand.baseFlags,
|
|
9
|
+
...platformApiFlags,
|
|
10
|
+
...jsonBodyFlags,
|
|
11
|
+
name: Flags.string({
|
|
12
|
+
description: 'token 名称',
|
|
13
|
+
default: 'CLI token',
|
|
14
|
+
}),
|
|
15
|
+
'expires-in-days': Flags.integer({
|
|
16
|
+
description: '有效期天数;不填则由服务端默认策略决定',
|
|
17
|
+
}),
|
|
18
|
+
'dry-run': Flags.boolean({
|
|
19
|
+
description: '只预览请求,不实际创建 token',
|
|
20
|
+
default: false,
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
async run() {
|
|
24
|
+
const { flags } = await this.parse(AuthTokenCreate);
|
|
25
|
+
const body = await buildBody(flags, {
|
|
26
|
+
name: flags.name,
|
|
27
|
+
expires_in_days: flags['expires-in-days'],
|
|
28
|
+
});
|
|
29
|
+
await requestAndOutput(this, flags, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
path: '/api/v1/account/personal-access-tokens',
|
|
32
|
+
body,
|
|
33
|
+
human: (data) => {
|
|
34
|
+
const token = data?.token;
|
|
35
|
+
return [
|
|
36
|
+
'Personal access token created.',
|
|
37
|
+
'The plain token is shown once:',
|
|
38
|
+
typeof token === 'string' ? token : JSON.stringify(data, null, 2),
|
|
39
|
+
'',
|
|
40
|
+
'Next: printf %s "$TOKEN" | bsteam auth login --context <name> --token-stdin',
|
|
41
|
+
].join('\n');
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/auth/token/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAExG,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,MAAM,CAAU,WAAW,GAAG,mCAAmC,CAAC;IAElE,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;QACxB,GAAG,gBAAgB;QACnB,GAAG,aAAa;QAChB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,UAAU;YACvB,OAAO,EAAE,WAAW;SACrB,CAAC;QACF,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,qBAAqB;SACnC,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvB,WAAW,EAAE,mBAAmB;YAChC,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE;YAClC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,eAAe,EAAE,KAAK,CAAC,iBAAiB,CAAC;SAC1C,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,wCAAwC;YAC9C,IAAI;YACJ,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;gBACd,MAAM,KAAK,GAAI,IAAgC,EAAE,KAAK,CAAC;gBACvD,OAAO;oBACL,gCAAgC;oBAChC,gCAAgC;oBAChC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjE,EAAE;oBACF,6EAA6E;iBAC9E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;SACF,CAAC,CAAC;IACL,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base-command.js';
|
|
2
|
+
export default class AuthTokenList extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
credential: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
domain: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
context: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
'trace-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/token/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKvD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,OAAgB,WAAW,SAAwC;IAEnE,OAAgB,KAAK;;;;;;;;;;MAGnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB3B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base-command.js';
|
|
2
|
+
import { formatTable } from '../../../formatters/table.js';
|
|
3
|
+
import { platformApiFlags } from '../../../http/platform-api.js';
|
|
4
|
+
import { extractItems, pickText, requestAndOutput } from '../../../command-utils/platform-command.js';
|
|
5
|
+
export default class AuthTokenList extends BaseCommand {
|
|
6
|
+
static description = '列出当前账号的 CLI Personal Access Tokens';
|
|
7
|
+
static flags = {
|
|
8
|
+
...BaseCommand.baseFlags,
|
|
9
|
+
...platformApiFlags,
|
|
10
|
+
};
|
|
11
|
+
async run() {
|
|
12
|
+
const { flags } = await this.parse(AuthTokenList);
|
|
13
|
+
await requestAndOutput(this, flags, {
|
|
14
|
+
method: 'GET',
|
|
15
|
+
path: '/api/v1/account/personal-access-tokens',
|
|
16
|
+
human: (data) => {
|
|
17
|
+
const items = extractItems(data);
|
|
18
|
+
if (items.length === 0)
|
|
19
|
+
return 'No personal access tokens';
|
|
20
|
+
return formatTable(['ID', 'Name', 'Prefix', 'Last4', 'Expires', 'Revoked', 'Last Used'], items.map((item) => [
|
|
21
|
+
pickText(item, ['id']),
|
|
22
|
+
pickText(item, ['name']),
|
|
23
|
+
pickText(item, ['prefix']),
|
|
24
|
+
pickText(item, ['last4']),
|
|
25
|
+
pickText(item, ['expires_at', 'expiresAt']),
|
|
26
|
+
pickText(item, ['revoked_at', 'revokedAt']),
|
|
27
|
+
pickText(item, ['last_used_at', 'lastUsedAt']),
|
|
28
|
+
]));
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/auth/token/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAEtG,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IACpD,MAAM,CAAU,WAAW,GAAG,oCAAoC,CAAC;IAEnE,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,SAAS;QACxB,GAAG,gBAAgB;KACpB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE;YAClC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,wCAAwC;YAC9C,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;gBACd,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,2BAA2B,CAAC;gBAC3D,OAAO,WAAW,CAChB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,EACpE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClB,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;oBACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;oBACxB,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;oBAC1B,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;oBACzB,QAAQ,CAAC,IAAI,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;oBAC3C,QAAQ,CAAC,IAAI,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;oBAC3C,QAAQ,CAAC,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;iBAC/C,CAAC,CACH,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base-command.js';
|
|
2
|
+
export default class AuthTokenRevoke extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
data: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'data-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
'api-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
credential: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
domain: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
context: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
'trace-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
|
+
};
|
|
22
|
+
run(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=revoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/token/revoke.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;IACtD,OAAgB,WAAW,SAAuC;IAElE,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;;;;;;;;;;;;;MAInB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAU3B"}
|