@mittwald/cli 1.0.0-alpha.8 → 1.0.0-alpha.9

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 (263) hide show
  1. package/README.md +129 -117
  2. package/dist/esm/BaseCommand.d.ts +1 -1
  3. package/dist/esm/DeleteBaseCommand.d.ts +6 -9
  4. package/dist/esm/DeleteBaseCommand.js +27 -21
  5. package/dist/esm/ExtendedBaseCommand.d.ts +1 -1
  6. package/dist/esm/Formatter.d.ts +5 -2
  7. package/dist/esm/Formatter.js +7 -2
  8. package/dist/esm/GetBaseCommand.d.ts +1 -1
  9. package/dist/esm/Helpers.d.ts +1 -0
  10. package/dist/esm/Helpers.js +7 -1
  11. package/dist/esm/ListBaseCommand.d.ts +1 -1
  12. package/dist/esm/ListBaseCommand.js +2 -2
  13. package/dist/esm/Printer.d.ts +6 -7
  14. package/dist/esm/Printer.js +3 -3
  15. package/dist/esm/Translator.d.ts +1 -0
  16. package/dist/esm/Translator.js +12 -1
  17. package/dist/esm/commands/app/delete.d.ts +1 -1
  18. package/dist/esm/commands/app/delete.js +1 -1
  19. package/dist/esm/commands/app/dependency/listSystemsoftwareversions.d.ts +1 -1
  20. package/dist/esm/commands/app/install/wordpress.d.ts +1 -2
  21. package/dist/esm/commands/app/install/wordpress.js +5 -9
  22. package/dist/esm/commands/app/list.d.ts +1 -1
  23. package/dist/esm/commands/app/versions.d.ts +1 -1
  24. package/dist/esm/commands/context/get.d.ts +10 -0
  25. package/dist/esm/commands/context/get.js +39 -0
  26. package/dist/esm/commands/context/set.d.ts +11 -0
  27. package/dist/esm/commands/context/set.js +37 -0
  28. package/dist/esm/commands/conversation/close.d.ts +1 -1
  29. package/dist/esm/commands/conversation/create.d.ts +1 -1
  30. package/dist/esm/commands/conversation/list.js +2 -2
  31. package/dist/esm/commands/conversation/reply.d.ts +1 -1
  32. package/dist/esm/commands/conversation/show.d.ts +1 -1
  33. package/dist/esm/commands/conversation/show.js +7 -7
  34. package/dist/esm/commands/conversation/show2.js +6 -3
  35. package/dist/esm/commands/domain/list.d.ts +12 -4
  36. package/dist/esm/commands/domain/list.js +16 -2
  37. package/dist/esm/commands/domain/virtualhost/list.js +10 -7
  38. package/dist/esm/commands/login/reset.d.ts +12 -0
  39. package/dist/esm/commands/login/reset.js +39 -0
  40. package/dist/esm/commands/login/status.d.ts +1 -1
  41. package/dist/esm/commands/login/token.d.ts +2 -1
  42. package/dist/esm/commands/login/token.js +1 -0
  43. package/dist/esm/commands/mail/address/create.d.ts +12 -4
  44. package/dist/esm/commands/mail/address/create.js +35 -26
  45. package/dist/esm/commands/mail/address/delete.d.ts +1 -0
  46. package/dist/esm/commands/mail/address/list.d.ts +11 -3
  47. package/dist/esm/commands/mail/address/list.js +23 -7
  48. package/dist/esm/commands/mail/deliverybox/list.d.ts +1 -1
  49. package/dist/esm/commands/mail/deliverybox/list.js +2 -2
  50. package/dist/esm/commands/org/list.js +1 -1
  51. package/dist/esm/commands/project/backup/list.d.ts +12 -5
  52. package/dist/esm/commands/project/backup/list.js +17 -9
  53. package/dist/esm/commands/project/create.d.ts +12 -4
  54. package/dist/esm/commands/project/create.js +32 -26
  55. package/dist/esm/commands/project/cronjob/execution/get.d.ts +15 -2
  56. package/dist/esm/commands/project/cronjob/execution/get.js +26 -5
  57. package/dist/esm/commands/project/cronjob/execution/list.d.ts +11 -4
  58. package/dist/esm/commands/project/cronjob/execution/list.js +27 -7
  59. package/dist/esm/commands/project/cronjob/execution/logs.d.ts +15 -0
  60. package/dist/esm/commands/project/cronjob/execution/logs.js +74 -0
  61. package/dist/esm/commands/project/cronjob/list.d.ts +12 -4
  62. package/dist/esm/commands/project/cronjob/list.js +24 -5
  63. package/dist/esm/commands/project/delete.d.ts +2 -1
  64. package/dist/esm/commands/project/delete.js +5 -11
  65. package/dist/esm/commands/project/filesystem/usage.d.ts +13 -3
  66. package/dist/esm/commands/project/filesystem/usage.js +51 -9
  67. package/dist/esm/commands/project/get.d.ts +13 -3
  68. package/dist/esm/commands/project/get.js +76 -9
  69. package/dist/esm/commands/project/invite/list-own.js +2 -2
  70. package/dist/esm/commands/project/invite/list.d.ts +1 -1
  71. package/dist/esm/commands/project/invite/list.js +2 -2
  72. package/dist/esm/commands/project/{list2.d.ts → list-react.d.ts} +3 -1
  73. package/dist/esm/commands/project/list-react.js +42 -0
  74. package/dist/esm/commands/project/membership/list-own.js +2 -2
  75. package/dist/esm/commands/project/membership/list.d.ts +1 -1
  76. package/dist/esm/commands/project/membership/list.js +2 -2
  77. package/dist/esm/commands/project/ssh.d.ts +2 -2
  78. package/dist/esm/commands/project/ssh.js +3 -8
  79. package/dist/esm/commands/project/update.d.ts +2 -2
  80. package/dist/esm/commands/project/update.js +6 -9
  81. package/dist/esm/commands/user/api-token/create.d.ts +9 -3
  82. package/dist/esm/commands/user/api-token/create.js +33 -15
  83. package/dist/esm/commands/user/api-token/list.js +4 -2
  84. package/dist/esm/commands/user/api-token/revoke.d.ts +8 -3
  85. package/dist/esm/commands/user/api-token/revoke.js +6 -6
  86. package/dist/esm/commands/user/session/list.js +4 -2
  87. package/dist/esm/commands/user/ssh-key/create.d.ts +6 -3
  88. package/dist/esm/commands/user/ssh-key/create.js +35 -18
  89. package/dist/esm/commands/user/ssh-key/delete.d.ts +5 -4
  90. package/dist/esm/commands/user/ssh-key/delete.js +7 -26
  91. package/dist/esm/lib/bytes.d.ts +1 -0
  92. package/dist/esm/lib/bytes.js +16 -0
  93. package/dist/esm/lib/context.d.ts +16 -0
  94. package/dist/esm/lib/context.js +42 -0
  95. package/dist/esm/lib/context_flags.d.ts +18 -0
  96. package/dist/esm/lib/context_flags.js +42 -0
  97. package/dist/esm/lib/project/flags.d.ts +5 -0
  98. package/dist/esm/lib/project/flags.js +3 -0
  99. package/dist/esm/lib/server/flags.d.ts +5 -0
  100. package/dist/esm/lib/server/flags.js +3 -0
  101. package/dist/esm/lib/viewhelpers/date.d.ts +2 -1
  102. package/dist/esm/lib/viewhelpers/date.js +9 -2
  103. package/dist/esm/lib/viewhelpers/removeLineBreaks.d.ts +1 -0
  104. package/dist/esm/lib/viewhelpers/removeLineBreaks.js +1 -0
  105. package/dist/esm/rendering/lib/getTerminalWidth.d.ts +1 -0
  106. package/dist/esm/rendering/lib/getTerminalWidth.js +2 -0
  107. package/dist/esm/rendering/react/ComponentPrinter.d.ts +7 -0
  108. package/dist/esm/rendering/react/ComponentPrinter.js +13 -0
  109. package/dist/esm/rendering/react/ExecRenderBaseCommand.d.ts +8 -0
  110. package/dist/esm/rendering/react/ExecRenderBaseCommand.js +15 -0
  111. package/dist/esm/rendering/react/RenderBaseCommand.d.ts +12 -0
  112. package/dist/esm/rendering/react/RenderBaseCommand.js +36 -4
  113. package/dist/esm/rendering/react/components/ByteFormat.d.ts +4 -0
  114. package/dist/esm/rendering/react/components/ByteFormat.js +12 -0
  115. package/dist/esm/rendering/react/components/{ConversationMessage.js → Conversation/ConversationMessage.js} +1 -1
  116. package/dist/esm/rendering/react/components/Conversation/ConversationMessages.d.ts +8 -0
  117. package/dist/esm/rendering/react/components/Conversation/ConversationMessages.js +13 -0
  118. package/dist/esm/rendering/react/components/{ConversationMeta.js → Conversation/ConversationMeta.js} +7 -3
  119. package/dist/esm/rendering/react/components/CreatedAt.d.ts +8 -0
  120. package/dist/esm/rendering/react/components/CreatedAt.js +10 -0
  121. package/dist/esm/rendering/react/components/Filename.d.ts +4 -0
  122. package/dist/esm/rendering/react/components/Filename.js +5 -0
  123. package/dist/esm/rendering/react/components/FormattedDate.d.ts +7 -0
  124. package/dist/esm/rendering/react/components/FormattedDate.js +18 -0
  125. package/dist/esm/rendering/react/components/Header.d.ts +2 -2
  126. package/dist/esm/rendering/react/components/IDAndShortID.d.ts +7 -0
  127. package/dist/esm/rendering/react/components/IDAndShortID.js +6 -0
  128. package/dist/esm/rendering/react/components/JSONView.d.ts +7 -0
  129. package/dist/esm/rendering/react/components/JSONView.js +3 -0
  130. package/dist/esm/rendering/react/components/ListItem.d.ts +3 -0
  131. package/dist/esm/rendering/react/components/ListItem.js +5 -0
  132. package/dist/esm/rendering/react/components/Note.d.ts +10 -0
  133. package/dist/esm/rendering/react/components/Note.js +8 -0
  134. package/dist/esm/rendering/react/components/ProjectEnabled.d.ts +6 -0
  135. package/dist/esm/rendering/react/components/ProjectEnabled.js +9 -0
  136. package/dist/esm/rendering/react/components/ProjectReadiness.d.ts +7 -0
  137. package/dist/esm/rendering/react/components/ProjectReadiness.js +16 -0
  138. package/dist/esm/rendering/react/components/ProjectStatus.d.ts +7 -0
  139. package/dist/esm/rendering/react/components/ProjectStatus.js +8 -0
  140. package/dist/esm/rendering/react/components/Render.d.ts +6 -0
  141. package/dist/esm/rendering/react/components/Render.js +5 -0
  142. package/dist/esm/rendering/react/components/SingleResult.d.ts +10 -0
  143. package/dist/esm/rendering/react/components/SingleResult.js +15 -0
  144. package/dist/esm/rendering/react/components/Success.d.ts +9 -0
  145. package/dist/esm/rendering/react/components/Success.js +6 -0
  146. package/dist/esm/rendering/react/components/Table/BodyCell.d.ts +7 -0
  147. package/dist/esm/rendering/react/components/Table/BodyCell.js +7 -0
  148. package/dist/esm/rendering/react/components/Table/BodyRow.d.ts +7 -0
  149. package/dist/esm/rendering/react/components/Table/BodyRow.js +7 -0
  150. package/dist/esm/rendering/react/components/Table/BodyRows.d.ts +7 -0
  151. package/dist/esm/rendering/react/components/Table/BodyRows.js +6 -0
  152. package/dist/esm/rendering/react/components/Table/CellData.d.ts +6 -0
  153. package/dist/esm/rendering/react/components/Table/CellData.js +32 -0
  154. package/dist/esm/rendering/react/components/Table/CellLayout.d.ts +8 -0
  155. package/dist/esm/rendering/react/components/Table/CellLayout.js +17 -0
  156. package/dist/esm/rendering/react/components/Table/HeaderCell.d.ts +7 -0
  157. package/dist/esm/rendering/react/components/Table/HeaderCell.js +7 -0
  158. package/dist/esm/rendering/react/components/Table/HeaderRow.d.ts +8 -0
  159. package/dist/esm/rendering/react/components/Table/HeaderRow.js +7 -0
  160. package/dist/esm/rendering/react/components/Table/RowLayout.d.ts +5 -0
  161. package/dist/esm/rendering/react/components/Table/RowLayout.js +3 -0
  162. package/dist/esm/rendering/react/components/Table/Table.d.ts +10 -0
  163. package/dist/esm/rendering/react/components/Table/Table.js +21 -0
  164. package/dist/esm/rendering/react/components/Table/context.d.ts +9 -0
  165. package/dist/esm/rendering/react/components/Table/context.js +7 -0
  166. package/dist/esm/rendering/react/components/Table/index.d.ts +1 -0
  167. package/dist/esm/rendering/react/components/Table/index.js +1 -0
  168. package/dist/esm/rendering/react/components/Table/model/Cell.d.ts +19 -0
  169. package/dist/esm/rendering/react/components/Table/model/Cell.js +24 -0
  170. package/dist/esm/rendering/react/components/Table/model/Column.d.ts +16 -0
  171. package/dist/esm/rendering/react/components/Table/model/Column.js +35 -0
  172. package/dist/esm/rendering/react/components/Table/model/ColumnName.d.ts +7 -0
  173. package/dist/esm/rendering/react/components/Table/model/ColumnName.js +17 -0
  174. package/dist/esm/rendering/react/components/Table/model/ColumnOptions.d.ts +25 -0
  175. package/dist/esm/rendering/react/components/Table/model/ColumnOptions.js +41 -0
  176. package/dist/esm/rendering/react/components/Table/model/Row.d.ts +14 -0
  177. package/dist/esm/rendering/react/components/Table/model/Row.js +37 -0
  178. package/dist/esm/rendering/react/components/Table/model/Table.d.ts +19 -0
  179. package/dist/esm/rendering/react/components/Table/model/Table.js +48 -0
  180. package/dist/esm/rendering/react/components/Table/model/index.d.ts +5 -0
  181. package/dist/esm/rendering/react/components/Table/model/index.js +5 -0
  182. package/dist/esm/rendering/react/components/Value.d.ts +5 -0
  183. package/dist/esm/rendering/react/components/Value.js +8 -0
  184. package/dist/esm/rendering/react/components/WithoutLineBreaks.d.ts +2 -0
  185. package/dist/esm/rendering/react/components/WithoutLineBreaks.js +7 -0
  186. package/dist/esm/rendering/react/context.d.ts +3 -2
  187. package/dist/esm/rendering/react/context.js +4 -1
  188. package/dist/esm/rendering/react/json/JsonCollectionProvider.d.ts +2 -0
  189. package/dist/esm/rendering/react/json/JsonCollectionProvider.js +10 -0
  190. package/dist/esm/rendering/react/json/JsonRenderer.d.ts +2 -0
  191. package/dist/esm/rendering/react/json/JsonRenderer.js +14 -0
  192. package/dist/esm/rendering/react/json/RenderJson.d.ts +7 -0
  193. package/dist/esm/rendering/react/json/RenderJson.js +19 -0
  194. package/dist/esm/rendering/react/json/context.d.ts +5 -0
  195. package/dist/esm/rendering/react/json/context.js +4 -0
  196. package/dist/esm/rendering/react/json/lib/unpackJsonData.d.ts +1 -0
  197. package/dist/esm/rendering/react/json/lib/unpackJsonData.js +5 -0
  198. package/dist/esm/rendering/react/lib/observable-value/ObservableValue.d.ts +10 -0
  199. package/dist/esm/rendering/react/lib/observable-value/ObservableValue.js +25 -0
  200. package/dist/esm/rendering/react/lib/observable-value/types.d.ts +2 -0
  201. package/dist/esm/rendering/react/lib/observable-value/types.js +1 -0
  202. package/dist/esm/rendering/react/lib/observable-value/useWatchObservableValue.d.ts +2 -0
  203. package/dist/esm/rendering/react/lib/observable-value/useWatchObservableValue.js +9 -0
  204. package/dist/esm/rendering/react/measure/MeasureChildren.d.ts +8 -0
  205. package/dist/esm/rendering/react/measure/MeasureChildren.js +19 -0
  206. package/dist/esm/rendering/react/measure/MeasureContextProvider.d.ts +2 -0
  207. package/dist/esm/rendering/react/measure/MeasureContextProvider.js +10 -0
  208. package/dist/esm/rendering/react/measure/MeasureRenderer.d.ts +2 -0
  209. package/dist/esm/rendering/react/measure/MeasureRenderer.js +22 -0
  210. package/dist/esm/rendering/react/measure/context.d.ts +18 -0
  211. package/dist/esm/rendering/react/measure/context.js +48 -0
  212. package/dist/esm/rendering/react/process.d.ts +42 -0
  213. package/dist/esm/rendering/react/process.js +24 -0
  214. package/dist/esm/rendering/react/process_fancy.d.ts +28 -0
  215. package/dist/esm/rendering/react/process_fancy.js +213 -0
  216. package/dist/esm/rendering/react/process_flags.d.ts +9 -0
  217. package/dist/esm/rendering/react/process_flags.js +15 -0
  218. package/dist/esm/rendering/react/process_quiet.d.ts +12 -0
  219. package/dist/esm/rendering/react/process_quiet.js +29 -0
  220. package/dist/esm/rendering/setup/FlagSupportedSetup.d.ts +2 -0
  221. package/dist/esm/rendering/setup/TableRenderSetup.d.ts +10 -12
  222. package/dist/esm/rendering/setup/TableRenderSetup.js +19 -6
  223. package/dist/esm/rendering/setup/usePromiseSetup.d.ts +4 -3
  224. package/package.json +52 -21
  225. package/.deps/client.tgz +0 -0
  226. package/.deps/commons.tgz +0 -0
  227. package/dist/esm/commands/project/filesystem/directories.d.ts +0 -3
  228. package/dist/esm/commands/project/filesystem/directories.js +0 -6
  229. package/dist/esm/commands/project/filesystem/file-content.d.ts +0 -3
  230. package/dist/esm/commands/project/filesystem/file-content.js +0 -6
  231. package/dist/esm/commands/project/filesystem/files.d.ts +0 -16
  232. package/dist/esm/commands/project/filesystem/files.js +0 -25
  233. package/dist/esm/commands/project/list1.d.ts +0 -7
  234. package/dist/esm/commands/project/list1.js +0 -18
  235. package/dist/esm/commands/project/list2.js +0 -26
  236. package/dist/esm/generated/cronjob/listCronjobs.d.ts +0 -13
  237. package/dist/esm/generated/cronjob/listCronjobs.js +0 -24
  238. package/dist/esm/generated/cronjob/listExecutions.d.ts +0 -13
  239. package/dist/esm/generated/cronjob/listExecutions.js +0 -24
  240. package/dist/esm/generated/domain/ingressListAccessible.d.ts +0 -13
  241. package/dist/esm/generated/domain/ingressListAccessible.js +0 -17
  242. package/dist/esm/generated/domain/ingressListForProject.d.ts +0 -13
  243. package/dist/esm/generated/domain/ingressListForProject.js +0 -24
  244. package/dist/esm/generated/domain/listDomains.d.ts +0 -13
  245. package/dist/esm/generated/domain/listDomains.js +0 -24
  246. package/dist/esm/generated/projectFileSystem/getDirectories.d.ts +0 -14
  247. package/dist/esm/generated/projectFileSystem/getDirectories.js +0 -24
  248. package/dist/esm/generated/projectFileSystem/getDiskUsage.d.ts +0 -14
  249. package/dist/esm/generated/projectFileSystem/getDiskUsage.js +0 -24
  250. package/dist/esm/generated/projectFileSystem/getFileContent.d.ts +0 -14
  251. package/dist/esm/generated/projectFileSystem/getFileContent.js +0 -24
  252. package/dist/esm/generated/projectFileSystem/getJwt.d.ts +0 -14
  253. package/dist/esm/generated/projectFileSystem/getJwt.js +0 -24
  254. package/dist/esm/generated/projectFileSystem/listFiles.d.ts +0 -13
  255. package/dist/esm/generated/projectFileSystem/listFiles.js +0 -24
  256. package/dist/esm/rendering/oclif/components/table.d.ts +0 -11
  257. package/dist/esm/rendering/oclif/components/table.js +0 -49
  258. package/dist/esm/rendering/react/components/Table.d.ts +0 -7
  259. package/dist/esm/rendering/react/components/Table.js +0 -4
  260. /package/dist/esm/rendering/react/components/{ConversationMessage.d.ts → Conversation/ConversationMessage.d.ts} +0 -0
  261. /package/dist/esm/rendering/react/components/{ConversationMeta.d.ts → Conversation/ConversationMeta.d.ts} +0 -0
  262. /package/dist/esm/rendering/react/components/{ConversationStatusUpdate.d.ts → Conversation/ConversationStatusUpdate.d.ts} +0 -0
  263. /package/dist/esm/rendering/react/components/{ConversationStatusUpdate.js → Conversation/ConversationStatusUpdate.js} +0 -0
@@ -1,11 +1,53 @@
1
- /* eslint-disable */
2
- /* prettier-ignore */
3
- /* This file is auto-generated with acg (@mittwald/api-code-generator) */
4
- import { GeneratedProjectFileSystemGetDiskUsage } from "../../../generated/projectFileSystem/getDiskUsage.js";
5
- import { normalizeProjectIdToUuid } from "../../../Helpers.js";
6
- export default class Get extends GeneratedProjectFileSystemGetDiskUsage {
7
- async mapParams(input) {
8
- input.projectId = await normalizeProjectIdToUuid(this.apiClient, input.projectId);
9
- return super.mapParams(input);
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { GetBaseCommand } from "../../../GetBaseCommand.js";
3
+ import { projectArgs, withProjectId } from "../../../lib/project/flags.js";
4
+ import { RenderBaseCommand } from "../../../rendering/react/RenderBaseCommand.js";
5
+ import { usePromise } from "@mittwald/react-use-promise";
6
+ import { SingleResult } from "../../../rendering/react/components/SingleResult.js";
7
+ import { Box, Text } from "ink";
8
+ import { Value } from "../../../rendering/react/components/Value.js";
9
+ import { assertStatus } from "@mittwald/api-client-commons";
10
+ import { Flags } from "@oclif/core";
11
+ import { ByteFormat } from "../../../rendering/react/components/ByteFormat.js";
12
+ import { parseBytes } from "../../../lib/bytes.js";
13
+ import { Note, noteColor } from "../../../rendering/react/components/Note.js";
14
+ import { ListItem } from "../../../rendering/react/components/ListItem.js";
15
+ export class Usage extends RenderBaseCommand {
16
+ static description = "Get a Project directory filesystem usage.";
17
+ static flags = {
18
+ ...GetBaseCommand.baseFlags,
19
+ human: Flags.boolean({
20
+ description: "Display human readable sizes.",
21
+ }),
22
+ };
23
+ static args = { ...projectArgs };
24
+ render() {
25
+ const projectId = usePromise(() => withProjectId(this.apiClient, this.flags, this.args, this.config), []);
26
+ const project = usePromise((id) => this.apiClient.project.getProject({ pathParameters: { id } }), [projectId]);
27
+ const projectDiskUsage = usePromise((id) => this.apiClient.projectFileSystem.getDiskUsage({
28
+ pathParameters: { projectId: id },
29
+ }), [projectId]);
30
+ assertStatus(project, 200);
31
+ assertStatus(projectDiskUsage, 200);
32
+ const planLimitStr = project.data.spec?.storage ?? undefined;
33
+ const planLimit = planLimitStr ? parseBytes(planLimitStr) : undefined;
34
+ const formatSize = this.flags.human
35
+ ? (bytes) => (_jsx(Value, { children: _jsx(ByteFormat, { bytes: bytes }) }))
36
+ : (bytes) => _jsx(Value, { children: bytes });
37
+ const formatMaybe = (bytes) => (_jsx(Text, { children: bytes ? formatSize(bytes) : _jsx(Value, { notSet: true }) }));
38
+ const usageRelative = planLimit && projectDiskUsage.data.usedBytes
39
+ ? projectDiskUsage.data.usedBytes / planLimit
40
+ : undefined;
41
+ const UsageRelative = () => {
42
+ if (!usageRelative) {
43
+ return undefined;
44
+ }
45
+ return (_jsxs(Text, { children: [" ", "(", "relative: ", _jsxs(Value, { children: [Math.round(usageRelative * 100), "%"] }), ")"] }));
46
+ };
47
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(SingleResult, { title: _jsxs(Text, { children: ["PROJECT FILESYSTEM USAGE:", " ", _jsx(Value, { children: project.data.description })] }), rows: {
48
+ "Provisioned storage": formatMaybe(planLimit),
49
+ "Hard limit": formatMaybe(projectDiskUsage.data.totalBytes),
50
+ Usage: (_jsxs(Text, { children: [formatMaybe(projectDiskUsage.data.usedBytes), _jsx(UsageRelative, {})] })),
51
+ } }), _jsxs(Note, { marginY: 1, raw: true, children: [_jsx(Text, { color: noteColor, children: "When inspecting the filesystem usage, please note the following:" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(ListItem, { children: _jsx(Text, { color: noteColor, children: "The usage is not updated in real-time. It may take a up to an hour for the usage to be updated." }) }), _jsx(ListItem, { children: _jsx(Text, { color: noteColor, children: "The \"hard limit\" is a technical limitation that is not related to your hosting plan." }) })] })] })] }));
10
52
  }
11
53
  }
@@ -1,4 +1,14 @@
1
- import { GeneratedProjectGetProject, PathParams } from "../../generated/project/getProject.js";
2
- export default class Get extends GeneratedProjectGetProject {
3
- protected mapParams(input: PathParams): Promise<PathParams>;
1
+ import { ReactNode } from "react";
2
+ import { GetFormatter } from "../../Formatter.js";
3
+ import { RenderBaseCommand } from "../../rendering/react/RenderBaseCommand.js";
4
+ export declare class Get extends RenderBaseCommand<typeof Get> {
5
+ static description: string;
6
+ static flags: {
7
+ [x: string]: import("@oclif/core/lib/interfaces/parser.js").CompletableFlag<any>;
8
+ };
9
+ static args: {
10
+ [x: string]: import("@oclif/core/lib/interfaces/parser.js").Arg<unknown>;
11
+ };
12
+ protected formatter: GetFormatter;
13
+ protected render(): ReactNode;
4
14
  }
@@ -1,11 +1,78 @@
1
- /* eslint-disable */
2
- /* prettier-ignore */
3
- /* This file is auto-generated with acg (@mittwald/api-code-generator) */
4
- import { GeneratedProjectGetProject } from "../../generated/project/getProject.js";
5
- import { normalizeProjectIdToUuid } from "../../Helpers.js";
6
- export default class Get extends GeneratedProjectGetProject {
7
- async mapParams(input) {
8
- input.id = await normalizeProjectIdToUuid(this.apiClient, input.id);
9
- return super.mapParams(input);
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { GetBaseCommand } from "../../GetBaseCommand.js";
3
+ import { projectArgs, withProjectId } from "../../lib/project/flags.js";
4
+ import { GetFormatter } from "../../Formatter.js";
5
+ import { SingleResult, SingleResultTable, } from "../../rendering/react/components/SingleResult.js";
6
+ import { Box, Text } from "ink";
7
+ import { Value } from "../../rendering/react/components/Value.js";
8
+ import { IDAndShortID } from "../../rendering/react/components/IDAndShortID.js";
9
+ import { CreatedAt } from "../../rendering/react/components/CreatedAt.js";
10
+ import { useRenderContext } from "../../rendering/react/context.js";
11
+ import { usePromise } from "@mittwald/react-use-promise";
12
+ import { ComponentPrinter } from "../../rendering/react/ComponentPrinter.js";
13
+ import { RenderBaseCommand } from "../../rendering/react/RenderBaseCommand.js";
14
+ import { assertStatus } from "@mittwald/api-client-commons";
15
+ import { ByteFormat } from "../../rendering/react/components/ByteFormat.js";
16
+ import { RenderJson } from "../../rendering/react/json/RenderJson.js";
17
+ import Link from "ink-link";
18
+ import { ProjectStatus } from "../../rendering/react/components/ProjectStatus.js";
19
+ const ProjectSpecs = ({ projectId, spec }) => {
20
+ if ("cpu" in spec) {
21
+ const { apiClient } = useRenderContext();
22
+ const usage = usePromise((id) => apiClient.projectFileSystem.getDiskUsage({
23
+ pathParameters: { projectId: id },
24
+ }), [projectId]);
25
+ const used = usage.data?.usedBytes ? (_jsxs(Text, { children: [" ", "(", _jsx(Value, { children: _jsx(ByteFormat, { bytes: usage.data?.usedBytes }) }), " ", "used)"] })) : undefined;
26
+ return (_jsx(SingleResult, { title: "Compute resources", rows: {
27
+ CPUs: _jsx(Value, { children: spec.cpu }),
28
+ Memory: _jsx(Value, { children: spec.memory }),
29
+ Storage: (_jsxs(Text, { children: [_jsx(Value, { children: spec.storage }), used] })),
30
+ } }));
31
+ }
32
+ };
33
+ const ProjectCustomer = ({ customer }) => {
34
+ return (_jsx(SingleResultTable, { rows: {
35
+ ID: _jsx(Value, { children: customer.customerId }),
36
+ Customernumber: _jsx(Value, { children: customer.customerNumber }),
37
+ Name: _jsx(Value, { children: customer.name }),
38
+ } }));
39
+ };
40
+ const GetProject = ({ response }) => {
41
+ const { apiClient } = useRenderContext();
42
+ const customer = usePromise((id) => apiClient.customer.getCustomer({ pathParameters: { customerId: id } }), [response.customerId]);
43
+ assertStatus(customer, 200);
44
+ const host = `${response.shortId}.project.space`;
45
+ const url = `https://${host}`;
46
+ const rows = {
47
+ "Project ID": _jsx(IDAndShortID, { object: response }),
48
+ "Created At": _jsx(CreatedAt, { object: response }),
49
+ Status: _jsx(ProjectStatus, { project: response }),
50
+ Customer: _jsx(ProjectCustomer, { customer: customer.data }),
51
+ };
52
+ const sections = [
53
+ _jsx(SingleResult, { title: _jsxs(_Fragment, { children: ["PROJECT DETAILS: ", _jsx(Value, { children: response.description })] }), rows: rows }, "primary"),
54
+ _jsx(SingleResult, { title: "Access", rows: {
55
+ "HTTP(S)": (_jsx(Link, { url: url, children: _jsx(Value, { children: host }) })),
56
+ "SSH/SFTP": (_jsxs(Text, { children: [_jsxs(Value, { children: ["ssh.", response.clusterID, ".", response.clusterDomain] }), " ", _jsx(Text, { color: "gray", children: "(Use the \"project ssh\" command to connect directly using the CLI)" })] })),
57
+ } }, "access"),
58
+ ];
59
+ if (response.spec) {
60
+ sections.push(_jsx(ProjectSpecs, { projectId: response.id, spec: response.spec }, "specs"));
61
+ }
62
+ return (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: sections }));
63
+ };
64
+ export class Get extends RenderBaseCommand {
65
+ static description = "Get a Project.";
66
+ static flags = { ...GetBaseCommand.baseFlags };
67
+ static args = { ...projectArgs };
68
+ formatter = new GetFormatter(new ComponentPrinter((r) => _jsx(GetProject, { response: r })));
69
+ render() {
70
+ const projectId = usePromise(() => withProjectId(this.apiClient, this.flags, this.args, this.config), []);
71
+ const projectResponse = usePromise((id) => this.apiClient.project.getProject({ pathParameters: { id } }), [projectId]);
72
+ assertStatus(projectResponse, 200);
73
+ if (this.flags.output === "json") {
74
+ return _jsx(RenderJson, { name: "project", data: projectResponse.data });
75
+ }
76
+ return _jsx(GetProject, { response: projectResponse.data });
10
77
  }
11
78
  }
@@ -1,5 +1,5 @@
1
1
  import { GeneratedProjectListProjectInvites, } from "../../../generated/project/listProjectInvites.js";
2
- import { formatDate } from "../../../lib/viewhelpers/date.js";
2
+ import { formatRelativeDate } from "../../../lib/viewhelpers/date.js";
3
3
  export default class List extends GeneratedProjectListProjectInvites {
4
4
  mapData(data) {
5
5
  return data;
@@ -17,7 +17,7 @@ export default class List extends GeneratedProjectListProjectInvites {
17
17
  if (!row.membershipExpiresAt) {
18
18
  return "never";
19
19
  }
20
- return formatDate(new Date(row.membershipExpiresAt));
20
+ return formatRelativeDate(new Date(row.membershipExpiresAt));
21
21
  },
22
22
  },
23
23
  projectId: {
@@ -1,7 +1,7 @@
1
1
  import { Simplify } from "@mittwald/api-client-commons";
2
2
  import { MittwaldAPIV2 } from "@mittwald/api-client";
3
3
  import { SuccessfulResponse } from "../../../types.js";
4
- import { GeneratedProjectListInvitesForProject, Response, PathParams } from "../../../generated/project/listInvitesForProject.js";
4
+ import { GeneratedProjectListInvitesForProject, PathParams, Response } from "../../../generated/project/listInvitesForProject.js";
5
5
  import { ListColumns } from "../../../Formatter.js";
6
6
  type ResponseItem = Simplify<MittwaldAPIV2.Paths.V2ProjectsProjectIdInvites.Get.Responses.$200.Content.ApplicationJson[number]>;
7
7
  export default class List extends GeneratedProjectListInvitesForProject<ResponseItem> {
@@ -1,6 +1,6 @@
1
1
  import { GeneratedProjectListInvitesForProject, } from "../../../generated/project/listInvitesForProject.js";
2
2
  import { normalizeProjectIdToUuid } from "../../../Helpers.js";
3
- import { formatDate } from "../../../lib/viewhelpers/date.js";
3
+ import { formatRelativeDate } from "../../../lib/viewhelpers/date.js";
4
4
  export default class List extends GeneratedProjectListInvitesForProject {
5
5
  mapData(data) {
6
6
  return data;
@@ -22,7 +22,7 @@ export default class List extends GeneratedProjectListInvitesForProject {
22
22
  if (!row.membershipExpiresAt) {
23
23
  return "never";
24
24
  }
25
- return formatDate(new Date(row.membershipExpiresAt));
25
+ return formatRelativeDate(new Date(row.membershipExpiresAt));
26
26
  },
27
27
  },
28
28
  mailAddress: { header: "Email" },
@@ -2,7 +2,9 @@ import React from "react";
2
2
  import { RenderBaseCommand } from "../../rendering/react/RenderBaseCommand.js";
3
3
  export default class List extends RenderBaseCommand<typeof List> {
4
4
  static flags: {
5
- columns: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
5
+ columns: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
6
+ extended: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
7
+ noTruncate: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
6
8
  wait: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<any>;
7
9
  };
8
10
  protected render(): React.ReactNode;
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { assertStatus } from "@mittwald/api-client-commons";
3
+ import { usePromise } from "@mittwald/react-use-promise";
4
+ import { RenderBaseCommand } from "../../rendering/react/RenderBaseCommand.js";
5
+ import { useRenderContext } from "../../rendering/react/context.js";
6
+ import { Table } from "../../rendering/react/components/Table/index.js";
7
+ import { UsePromiseRenderSetup } from "../../rendering/setup/usePromiseSetup.js";
8
+ import { TableRenderSetup } from "../../rendering/setup/TableRenderSetup.js";
9
+ import { ProjectStatus } from "../../rendering/react/components/ProjectStatus.js";
10
+ const usePromiseSetup = new UsePromiseRenderSetup();
11
+ const tableSetupInstance = new TableRenderSetup();
12
+ export default class List extends RenderBaseCommand {
13
+ static flags = {
14
+ ...usePromiseSetup.flags,
15
+ ...tableSetupInstance.flags,
16
+ ...RenderBaseCommand.buildFlags(),
17
+ };
18
+ render() {
19
+ const { apiClient } = useRenderContext();
20
+ const tableSetup = tableSetupInstance.getSetup(this.flags);
21
+ const usePromiseOptions = usePromiseSetup.getSetup(this.flags);
22
+ const projects = usePromise(apiClient.project.listProjects, [], usePromiseOptions);
23
+ assertStatus(projects, 200);
24
+ return (_jsx(Table, { data: projects.data, setup: tableSetup, columns: {
25
+ id: {
26
+ isUuid: true,
27
+ },
28
+ shortId: {
29
+ minWidth: 8,
30
+ },
31
+ customerId: {
32
+ isUuid: true,
33
+ extended: true,
34
+ },
35
+ description: {},
36
+ status: {
37
+ render: (project) => _jsx(ProjectStatus, { project: project }),
38
+ },
39
+ createdAt: {},
40
+ } }));
41
+ }
42
+ }
@@ -1,5 +1,5 @@
1
1
  import { GeneratedProjectListProjectMemberships, } from "../../../generated/project/listProjectMemberships.js";
2
- import { formatDate } from "../../../lib/viewhelpers/date.js";
2
+ import { formatRelativeDate } from "../../../lib/viewhelpers/date.js";
3
3
  export default class List extends GeneratedProjectListProjectMemberships {
4
4
  mapData(data) {
5
5
  return data;
@@ -18,7 +18,7 @@ export default class List extends GeneratedProjectListProjectMemberships {
18
18
  if (!row.expiresAt) {
19
19
  return "never";
20
20
  }
21
- return formatDate(new Date(row.expiresAt));
21
+ return formatRelativeDate(new Date(row.expiresAt));
22
22
  },
23
23
  },
24
24
  projectId: { header: "Project Id" },
@@ -1,7 +1,7 @@
1
1
  import { Simplify } from "@mittwald/api-client-commons";
2
2
  import { MittwaldAPIV2 } from "@mittwald/api-client";
3
3
  import { SuccessfulResponse } from "../../../types.js";
4
- import { GeneratedProjectListMembershipsForProject, Response, PathParams } from "../../../generated/project/listMembershipsForProject.js";
4
+ import { GeneratedProjectListMembershipsForProject, PathParams, Response } from "../../../generated/project/listMembershipsForProject.js";
5
5
  import { ListColumns } from "../../../Formatter.js";
6
6
  type ResponseItem = Simplify<MittwaldAPIV2.Paths.V2ProjectsProjectIdMemberships.Get.Responses.$200.Content.ApplicationJson[number]> & {
7
7
  user?: MittwaldAPIV2.Components.Schemas.UserUser;
@@ -1,5 +1,5 @@
1
1
  import { GeneratedProjectListMembershipsForProject, } from "../../../generated/project/listMembershipsForProject.js";
2
- import { formatDate } from "../../../lib/viewhelpers/date.js";
2
+ import { formatRelativeDate } from "../../../lib/viewhelpers/date.js";
3
3
  import { normalizeProjectIdToUuid } from "../../../Helpers.js";
4
4
  export default class List extends GeneratedProjectListMembershipsForProject {
5
5
  mapData(data) {
@@ -32,7 +32,7 @@ export default class List extends GeneratedProjectListMembershipsForProject {
32
32
  if (!row.expiresAt) {
33
33
  return "never";
34
34
  }
35
- return formatDate(new Date(row.expiresAt));
35
+ return formatRelativeDate(new Date(row.expiresAt));
36
36
  },
37
37
  },
38
38
  userId: {
@@ -1,8 +1,8 @@
1
1
  import { BaseCommand } from "../../BaseCommand.js";
2
- export default class Ssh extends BaseCommand<typeof Ssh> {
2
+ export default class Ssh extends BaseCommand {
3
3
  static description: string;
4
4
  static args: {
5
- id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
5
+ [x: string]: import("@oclif/core/lib/interfaces/parser.js").Arg<unknown>;
6
6
  };
7
7
  run(): Promise<void>;
8
8
  }
@@ -1,18 +1,13 @@
1
- import { Args } from "@oclif/core";
2
1
  import { BaseCommand } from "../../BaseCommand.js";
3
2
  import { assertStatus } from "@mittwald/api-client-commons";
4
3
  import * as child_process from "child_process";
4
+ import { projectArgs, withProjectId } from "../../lib/project/flags.js";
5
5
  export default class Ssh extends BaseCommand {
6
6
  static description = "Connect to a project via SSH";
7
- static args = {
8
- id: Args.string({
9
- required: true,
10
- description: "ID of the Project to be retrieved.",
11
- }),
12
- };
7
+ static args = { ...projectArgs };
13
8
  async run() {
14
9
  const { args } = await this.parse(Ssh);
15
- const { id } = args;
10
+ const id = await withProjectId(this.apiClient, {}, args, this.config);
16
11
  const projectResponse = await this.apiClient.project.getProject({
17
12
  pathParameters: { id },
18
13
  });
@@ -1,8 +1,8 @@
1
1
  import { BaseCommand } from "../../BaseCommand.js";
2
- export default class Update extends BaseCommand<typeof Update> {
2
+ export default class Update extends BaseCommand {
3
3
  static description: string;
4
4
  static args: {
5
- id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
5
+ [x: string]: import("@oclif/core/lib/interfaces/parser.js").Arg<unknown>;
6
6
  };
7
7
  run(): Promise<void>;
8
8
  }
@@ -1,15 +1,12 @@
1
- import { Args } from "@oclif/core";
2
1
  import { BaseCommand } from "../../BaseCommand.js";
2
+ import { projectArgs, withProjectId } from "../../lib/project/flags.js";
3
3
  export default class Update extends BaseCommand {
4
4
  static description = "Updates a project";
5
- static args = {
6
- id: Args.string({
7
- required: true,
8
- description: "ID of the Project to be retrieved.",
9
- }),
10
- };
5
+ static args = { ...projectArgs };
11
6
  async run() {
12
- const { args, flags } = await this.parse(Update);
13
- console.log(args, flags);
7
+ const { args } = await this.parse(Update);
8
+ const id = await withProjectId(this.apiClient, {}, args, this.config);
9
+ console.log("updating project ", id);
10
+ console.log("TODO: Implement me");
14
11
  }
15
12
  }
@@ -1,11 +1,17 @@
1
- import { BaseCommand } from "../../../BaseCommand.js";
2
- export default class Create extends BaseCommand<typeof Create> {
1
+ import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
2
+ export default class Create extends ExecRenderBaseCommand<typeof Create, {
3
+ token: string;
4
+ }> {
3
5
  static description: string;
4
6
  static flags: {
5
7
  description: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
6
8
  "expires-in": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
7
9
  roles: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string[], import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
10
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
8
11
  };
9
12
  private determineExpiration;
10
- run(): Promise<void>;
13
+ protected exec(): Promise<{
14
+ token: string;
15
+ }>;
16
+ protected render(): null;
11
17
  }
@@ -1,10 +1,16 @@
1
- import { Flags, ux } from "@oclif/core";
2
- import { BaseCommand } from "../../../BaseCommand.js";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Flags } from "@oclif/core";
3
3
  import { assertStatus } from "@mittwald/api-client-commons";
4
4
  import parseDuration from "parse-duration";
5
- export default class Create extends BaseCommand {
5
+ import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
6
+ import { makeProcessRenderer, processFlags, } from "../../../rendering/react/process_flags.js";
7
+ import { Success } from "../../../rendering/react/components/Success.js";
8
+ import { Newline, Text } from "ink";
9
+ import { Value } from "../../../rendering/react/components/Value.js";
10
+ export default class Create extends ExecRenderBaseCommand {
6
11
  static description = "Create a new API token";
7
12
  static flags = {
13
+ ...processFlags,
8
14
  description: Flags.string({
9
15
  description: "Description of the API token",
10
16
  required: true,
@@ -29,18 +35,30 @@ export default class Create extends BaseCommand {
29
35
  }
30
36
  return new Date(Date.now() + duration);
31
37
  }
32
- async run() {
33
- const { flags, args } = await this.parse(Create);
38
+ async exec() {
39
+ const { flags } = await this.parse(Create);
40
+ const process = makeProcessRenderer(flags, "Creating an API token");
34
41
  const expiresAt = this.determineExpiration(flags["expires-in"]);
35
- ux.action.start("creating API token");
36
- const response = await this.apiClient.user.createApiToken({
37
- data: {
38
- description: flags.description,
39
- expiresAt: expiresAt?.toJSON(),
40
- roles: flags.roles,
41
- },
42
- });
43
- assertStatus(response, 201);
44
- ux.action.stop();
42
+ const step = process.addStep("creating API token");
43
+ try {
44
+ const response = await this.apiClient.user.createApiToken({
45
+ data: {
46
+ description: flags.description,
47
+ expiresAt: expiresAt?.toJSON(),
48
+ roles: flags.roles,
49
+ },
50
+ });
51
+ step.complete();
52
+ assertStatus(response, 201);
53
+ process.complete(_jsx(Success, { width: 100, children: _jsxs(Text, { children: ["API token successfully created. Have fun. \uD83E\uDD73", _jsx(Newline, { count: 2 }), "This is your API token; make sure to store it somewhere safe:", _jsx(Newline, { count: 1 }), _jsx(Value, { children: response.data.token })] }) }));
54
+ return { token: response.data.token };
55
+ }
56
+ catch (e) {
57
+ process.error(e);
58
+ throw e;
59
+ }
60
+ }
61
+ render() {
62
+ return null;
45
63
  }
46
64
  }
@@ -1,5 +1,5 @@
1
1
  import { GeneratedUserListApiTokens, } from "../../../generated/user/listApiTokens.js";
2
- import { formatCreatedAt, formatDate } from "../../../lib/viewhelpers/date.js";
2
+ import { formatCreatedAt, formatRelativeDate, } from "../../../lib/viewhelpers/date.js";
3
3
  export default class List extends GeneratedUserListApiTokens {
4
4
  mapData(data) {
5
5
  return data;
@@ -14,7 +14,9 @@ export default class List extends GeneratedUserListApiTokens {
14
14
  },
15
15
  expiresAt: {
16
16
  header: "Expires at",
17
- get: (r) => r.expiresAt ? formatDate(new Date(`${r.expiresAt}`)) : "never",
17
+ get: (r) => r.expiresAt
18
+ ? formatRelativeDate(new Date(`${r.expiresAt}`))
19
+ : "never",
18
20
  },
19
21
  };
20
22
  }
@@ -1,8 +1,13 @@
1
- import { BaseCommand } from "../../../BaseCommand.js";
2
- export default class Revoke extends BaseCommand<typeof Revoke> {
1
+ import { DeleteBaseCommand } from "../../../DeleteBaseCommand.js";
2
+ export default class Revoke extends DeleteBaseCommand<typeof Revoke> {
3
3
  static description: string;
4
+ static resource: string;
4
5
  static args: {
5
6
  id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
6
7
  };
7
- run(): Promise<void>;
8
+ static flags: {
9
+ force: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
10
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
11
+ };
12
+ protected deleteResource(): Promise<void>;
8
13
  }
@@ -1,21 +1,21 @@
1
- import { Args, ux } from "@oclif/core";
2
- import { BaseCommand } from "../../../BaseCommand.js";
1
+ import { Args } from "@oclif/core";
3
2
  import { assertStatus } from "@mittwald/api-client-commons";
4
- export default class Revoke extends BaseCommand {
3
+ import { DeleteBaseCommand } from "../../../DeleteBaseCommand.js";
4
+ export default class Revoke extends DeleteBaseCommand {
5
5
  static description = "Revoke an API token";
6
+ static resource = "API token";
6
7
  static args = {
7
8
  id: Args.string({
8
9
  description: "ID of the API token to revoke",
9
10
  required: true,
10
11
  }),
11
12
  };
12
- async run() {
13
+ static flags = { ...DeleteBaseCommand.baseFlags };
14
+ async deleteResource() {
13
15
  const { args } = await this.parse(Revoke);
14
- ux.action.start(`revoking API token ${args.id}`);
15
16
  const response = await this.apiClient.user.deleteApiToken({
16
17
  pathParameters: { apiTokenId: args.id },
17
18
  });
18
19
  assertStatus(response, 200);
19
- ux.action.stop();
20
20
  }
21
21
  }
@@ -1,5 +1,5 @@
1
1
  import { GeneratedUserListSessions, } from "../../../generated/user/listSessions.js";
2
- import { formatDate } from "../../../lib/viewhelpers/date.js";
2
+ import { formatRelativeDate } from "../../../lib/viewhelpers/date.js";
3
3
  export default class List extends GeneratedUserListSessions {
4
4
  mapData(data) {
5
5
  return data;
@@ -17,7 +17,9 @@ export default class List extends GeneratedUserListSessions {
17
17
  },
18
18
  lastAccess: {
19
19
  header: "Last Access",
20
- get: (row) => row.lastAccess ? formatDate(new Date(`${row.lastAccess}`)) : "never",
20
+ get: (row) => row.lastAccess
21
+ ? formatRelativeDate(new Date(`${row.lastAccess}`))
22
+ : "never",
21
23
  },
22
24
  };
23
25
  }
@@ -1,10 +1,13 @@
1
- import { BaseCommand } from "../../../BaseCommand.js";
2
- export default class Create extends BaseCommand<typeof Create> {
1
+ import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
2
+ export default class Create extends ExecRenderBaseCommand<typeof Create, undefined> {
3
3
  static description: string;
4
4
  static flags: {
5
+ output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
5
6
  "no-passphrase": import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
6
7
  comment: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
7
8
  expiresAt: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
9
+ quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
8
10
  };
9
- run(): Promise<void>;
11
+ protected exec(): Promise<undefined>;
12
+ protected render(): null;
10
13
  }