@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.
Files changed (239) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +260 -0
  3. package/bin/argv.js +35 -0
  4. package/bin/dev.js +23 -0
  5. package/bin/run.js +25 -0
  6. package/bin/workspace-plugin.js +16 -0
  7. package/dist/auth/context-config.d.ts +91 -0
  8. package/dist/auth/context-config.d.ts.map +1 -0
  9. package/dist/auth/context-config.js +258 -0
  10. package/dist/auth/context-config.js.map +1 -0
  11. package/dist/auth/credential-store.d.ts +57 -0
  12. package/dist/auth/credential-store.d.ts.map +1 -0
  13. package/dist/auth/credential-store.js +146 -0
  14. package/dist/auth/credential-store.js.map +1 -0
  15. package/dist/base-command.d.ts +22 -0
  16. package/dist/base-command.d.ts.map +1 -0
  17. package/dist/base-command.js +33 -0
  18. package/dist/base-command.js.map +1 -0
  19. package/dist/command-utils/platform-command.d.ts +51 -0
  20. package/dist/command-utils/platform-command.d.ts.map +1 -0
  21. package/dist/command-utils/platform-command.js +178 -0
  22. package/dist/command-utils/platform-command.js.map +1 -0
  23. package/dist/commands/api.d.ts +26 -0
  24. package/dist/commands/api.d.ts.map +1 -0
  25. package/dist/commands/api.js +132 -0
  26. package/dist/commands/api.js.map +1 -0
  27. package/dist/commands/auth/check.d.ts +21 -0
  28. package/dist/commands/auth/check.d.ts.map +1 -0
  29. package/dist/commands/auth/check.js +57 -0
  30. package/dist/commands/auth/check.js.map +1 -0
  31. package/dist/commands/auth/list.d.ts +13 -0
  32. package/dist/commands/auth/list.d.ts.map +1 -0
  33. package/dist/commands/auth/list.js +56 -0
  34. package/dist/commands/auth/list.js.map +1 -0
  35. package/dist/commands/auth/login.d.ts +27 -0
  36. package/dist/commands/auth/login.d.ts.map +1 -0
  37. package/dist/commands/auth/login.js +155 -0
  38. package/dist/commands/auth/login.js.map +1 -0
  39. package/dist/commands/auth/logout.d.ts +15 -0
  40. package/dist/commands/auth/logout.d.ts.map +1 -0
  41. package/dist/commands/auth/logout.js +55 -0
  42. package/dist/commands/auth/logout.js.map +1 -0
  43. package/dist/commands/auth/scopes.d.ts +18 -0
  44. package/dist/commands/auth/scopes.d.ts.map +1 -0
  45. package/dist/commands/auth/scopes.js +56 -0
  46. package/dist/commands/auth/scopes.js.map +1 -0
  47. package/dist/commands/auth/status.d.ts +17 -0
  48. package/dist/commands/auth/status.d.ts.map +1 -0
  49. package/dist/commands/auth/status.js +81 -0
  50. package/dist/commands/auth/status.js.map +1 -0
  51. package/dist/commands/auth/token/create.d.ts +22 -0
  52. package/dist/commands/auth/token/create.d.ts.map +1 -0
  53. package/dist/commands/auth/token/create.js +46 -0
  54. package/dist/commands/auth/token/create.js.map +1 -0
  55. package/dist/commands/auth/token/list.d.ts +17 -0
  56. package/dist/commands/auth/token/list.d.ts.map +1 -0
  57. package/dist/commands/auth/token/list.js +33 -0
  58. package/dist/commands/auth/token/list.js.map +1 -0
  59. package/dist/commands/auth/token/revoke.d.ts +24 -0
  60. package/dist/commands/auth/token/revoke.d.ts.map +1 -0
  61. package/dist/commands/auth/token/revoke.js +29 -0
  62. package/dist/commands/auth/token/revoke.js.map +1 -0
  63. package/dist/commands/config/show.d.ts +13 -0
  64. package/dist/commands/config/show.d.ts.map +1 -0
  65. package/dist/commands/config/show.js +34 -0
  66. package/dist/commands/config/show.js.map +1 -0
  67. package/dist/commands/kb/acl/grant.d.ts +27 -0
  68. package/dist/commands/kb/acl/grant.d.ts.map +1 -0
  69. package/dist/commands/kb/acl/grant.js +49 -0
  70. package/dist/commands/kb/acl/grant.js.map +1 -0
  71. package/dist/commands/kb/acl/list.d.ts +20 -0
  72. package/dist/commands/kb/acl/list.d.ts.map +1 -0
  73. package/dist/commands/kb/acl/list.js +35 -0
  74. package/dist/commands/kb/acl/list.js.map +1 -0
  75. package/dist/commands/kb/acl/revoke.d.ts +25 -0
  76. package/dist/commands/kb/acl/revoke.d.ts.map +1 -0
  77. package/dist/commands/kb/acl/revoke.js +27 -0
  78. package/dist/commands/kb/acl/revoke.js.map +1 -0
  79. package/dist/commands/kb/acl/update.d.ts +28 -0
  80. package/dist/commands/kb/acl/update.d.ts.map +1 -0
  81. package/dist/commands/kb/acl/update.js +40 -0
  82. package/dist/commands/kb/acl/update.js.map +1 -0
  83. package/dist/commands/kb/create.d.ts +26 -0
  84. package/dist/commands/kb/create.d.ts.map +1 -0
  85. package/dist/commands/kb/create.js +59 -0
  86. package/dist/commands/kb/create.js.map +1 -0
  87. package/dist/commands/kb/delete.d.ts +24 -0
  88. package/dist/commands/kb/delete.d.ts.map +1 -0
  89. package/dist/commands/kb/delete.js +29 -0
  90. package/dist/commands/kb/delete.js.map +1 -0
  91. package/dist/commands/kb/doctor.d.ts +17 -0
  92. package/dist/commands/kb/doctor.d.ts.map +1 -0
  93. package/dist/commands/kb/doctor.js +48 -0
  94. package/dist/commands/kb/doctor.js.map +1 -0
  95. package/dist/commands/kb/file.d.ts +23 -0
  96. package/dist/commands/kb/file.d.ts.map +1 -0
  97. package/dist/commands/kb/file.js +97 -0
  98. package/dist/commands/kb/file.js.map +1 -0
  99. package/dist/commands/kb/get.d.ts +20 -0
  100. package/dist/commands/kb/get.d.ts.map +1 -0
  101. package/dist/commands/kb/get.js +37 -0
  102. package/dist/commands/kb/get.js.map +1 -0
  103. package/dist/commands/kb/git.d.ts +20 -0
  104. package/dist/commands/kb/git.d.ts.map +1 -0
  105. package/dist/commands/kb/git.js +46 -0
  106. package/dist/commands/kb/git.js.map +1 -0
  107. package/dist/commands/kb/list.d.ts +17 -0
  108. package/dist/commands/kb/list.d.ts.map +1 -0
  109. package/dist/commands/kb/list.js +36 -0
  110. package/dist/commands/kb/list.js.map +1 -0
  111. package/dist/commands/kb/share/create.d.ts +25 -0
  112. package/dist/commands/kb/share/create.d.ts.map +1 -0
  113. package/dist/commands/kb/share/create.js +42 -0
  114. package/dist/commands/kb/share/create.js.map +1 -0
  115. package/dist/commands/kb/share/list.d.ts +20 -0
  116. package/dist/commands/kb/share/list.d.ts.map +1 -0
  117. package/dist/commands/kb/share/list.js +35 -0
  118. package/dist/commands/kb/share/list.js.map +1 -0
  119. package/dist/commands/kb/share/revoke.d.ts +25 -0
  120. package/dist/commands/kb/share/revoke.d.ts.map +1 -0
  121. package/dist/commands/kb/share/revoke.js +27 -0
  122. package/dist/commands/kb/share/revoke.js.map +1 -0
  123. package/dist/commands/kb/tree.d.ts +20 -0
  124. package/dist/commands/kb/tree.d.ts.map +1 -0
  125. package/dist/commands/kb/tree.js +39 -0
  126. package/dist/commands/kb/tree.js.map +1 -0
  127. package/dist/commands/kb/update.d.ts +29 -0
  128. package/dist/commands/kb/update.d.ts.map +1 -0
  129. package/dist/commands/kb/update.js +49 -0
  130. package/dist/commands/kb/update.js.map +1 -0
  131. package/dist/commands/reimbursement/create.d.ts +31 -0
  132. package/dist/commands/reimbursement/create.d.ts.map +1 -0
  133. package/dist/commands/reimbursement/create.js +67 -0
  134. package/dist/commands/reimbursement/create.js.map +1 -0
  135. package/dist/commands/reimbursement/delete.d.ts +24 -0
  136. package/dist/commands/reimbursement/delete.d.ts.map +1 -0
  137. package/dist/commands/reimbursement/delete.js +26 -0
  138. package/dist/commands/reimbursement/delete.js.map +1 -0
  139. package/dist/commands/reimbursement/list.d.ts +17 -0
  140. package/dist/commands/reimbursement/list.d.ts.map +1 -0
  141. package/dist/commands/reimbursement/list.js +33 -0
  142. package/dist/commands/reimbursement/list.js.map +1 -0
  143. package/dist/commands/reimbursement/operations.d.ts +17 -0
  144. package/dist/commands/reimbursement/operations.d.ts.map +1 -0
  145. package/dist/commands/reimbursement/operations.js +19 -0
  146. package/dist/commands/reimbursement/operations.js.map +1 -0
  147. package/dist/commands/reimbursement/permissions/list.d.ts +17 -0
  148. package/dist/commands/reimbursement/permissions/list.d.ts.map +1 -0
  149. package/dist/commands/reimbursement/permissions/list.js +32 -0
  150. package/dist/commands/reimbursement/permissions/list.js.map +1 -0
  151. package/dist/commands/reimbursement/permissions/replace.d.ts +22 -0
  152. package/dist/commands/reimbursement/permissions/replace.d.ts.map +1 -0
  153. package/dist/commands/reimbursement/permissions/replace.js +32 -0
  154. package/dist/commands/reimbursement/permissions/replace.js.map +1 -0
  155. package/dist/commands/reimbursement/update.d.ts +31 -0
  156. package/dist/commands/reimbursement/update.d.ts.map +1 -0
  157. package/dist/commands/reimbursement/update.js +56 -0
  158. package/dist/commands/reimbursement/update.js.map +1 -0
  159. package/dist/commands/token/create.d.ts +26 -0
  160. package/dist/commands/token/create.d.ts.map +1 -0
  161. package/dist/commands/token/create.js +52 -0
  162. package/dist/commands/token/create.js.map +1 -0
  163. package/dist/commands/token/delete.d.ts +24 -0
  164. package/dist/commands/token/delete.d.ts.map +1 -0
  165. package/dist/commands/token/delete.js +26 -0
  166. package/dist/commands/token/delete.js.map +1 -0
  167. package/dist/commands/token/list.d.ts +17 -0
  168. package/dist/commands/token/list.d.ts.map +1 -0
  169. package/dist/commands/token/list.js +33 -0
  170. package/dist/commands/token/list.js.map +1 -0
  171. package/dist/commands/token/operations.d.ts +17 -0
  172. package/dist/commands/token/operations.d.ts.map +1 -0
  173. package/dist/commands/token/operations.js +19 -0
  174. package/dist/commands/token/operations.js.map +1 -0
  175. package/dist/commands/token/permissions/list.d.ts +17 -0
  176. package/dist/commands/token/permissions/list.d.ts.map +1 -0
  177. package/dist/commands/token/permissions/list.js +32 -0
  178. package/dist/commands/token/permissions/list.js.map +1 -0
  179. package/dist/commands/token/permissions/replace.d.ts +22 -0
  180. package/dist/commands/token/permissions/replace.d.ts.map +1 -0
  181. package/dist/commands/token/permissions/replace.js +32 -0
  182. package/dist/commands/token/permissions/replace.js.map +1 -0
  183. package/dist/commands/token/precheck.d.ts +20 -0
  184. package/dist/commands/token/precheck.d.ts.map +1 -0
  185. package/dist/commands/token/precheck.js +30 -0
  186. package/dist/commands/token/precheck.js.map +1 -0
  187. package/dist/commands/token/reveal.d.ts +24 -0
  188. package/dist/commands/token/reveal.d.ts.map +1 -0
  189. package/dist/commands/token/reveal.js +29 -0
  190. package/dist/commands/token/reveal.js.map +1 -0
  191. package/dist/commands/token/update.d.ts +29 -0
  192. package/dist/commands/token/update.d.ts.map +1 -0
  193. package/dist/commands/token/update.js +47 -0
  194. package/dist/commands/token/update.js.map +1 -0
  195. package/dist/commands/version.d.ts +13 -0
  196. package/dist/commands/version.d.ts.map +1 -0
  197. package/dist/commands/version.js +16 -0
  198. package/dist/commands/version.js.map +1 -0
  199. package/dist/config/config-loader.d.ts +23 -0
  200. package/dist/config/config-loader.d.ts.map +1 -0
  201. package/dist/config/config-loader.js +35 -0
  202. package/dist/config/config-loader.js.map +1 -0
  203. package/dist/config/exit-codes.d.ts +14 -0
  204. package/dist/config/exit-codes.d.ts.map +1 -0
  205. package/dist/config/exit-codes.js +15 -0
  206. package/dist/config/exit-codes.js.map +1 -0
  207. package/dist/config/profiles.d.ts +14 -0
  208. package/dist/config/profiles.d.ts.map +1 -0
  209. package/dist/config/profiles.js +28 -0
  210. package/dist/config/profiles.js.map +1 -0
  211. package/dist/formatters/envelope.d.ts +10 -0
  212. package/dist/formatters/envelope.d.ts.map +1 -0
  213. package/dist/formatters/envelope.js +13 -0
  214. package/dist/formatters/envelope.js.map +1 -0
  215. package/dist/formatters/index.d.ts +4 -0
  216. package/dist/formatters/index.d.ts.map +1 -0
  217. package/dist/formatters/index.js +3 -0
  218. package/dist/formatters/index.js.map +1 -0
  219. package/dist/formatters/table.d.ts +7 -0
  220. package/dist/formatters/table.d.ts.map +1 -0
  221. package/dist/formatters/table.js +17 -0
  222. package/dist/formatters/table.js.map +1 -0
  223. package/dist/hooks/init.d.ts +8 -0
  224. package/dist/hooks/init.d.ts.map +1 -0
  225. package/dist/hooks/init.js +17 -0
  226. package/dist/hooks/init.js.map +1 -0
  227. package/dist/hooks/prerun.d.ts +8 -0
  228. package/dist/hooks/prerun.d.ts.map +1 -0
  229. package/dist/hooks/prerun.js +29 -0
  230. package/dist/hooks/prerun.js.map +1 -0
  231. package/dist/http/platform-api.d.ts +48 -0
  232. package/dist/http/platform-api.d.ts.map +1 -0
  233. package/dist/http/platform-api.js +228 -0
  234. package/dist/http/platform-api.js.map +1 -0
  235. package/dist/index.d.ts +17 -0
  236. package/dist/index.d.ts.map +1 -0
  237. package/dist/index.js +13 -0
  238. package/dist/index.js.map +1 -0
  239. 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":"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"}
@@ -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":"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"}
@@ -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"}