clever-tools 4.4.0 → 4.5.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 (296) hide show
  1. package/bin/clever.js +208 -2128
  2. package/package.json +33 -25
  3. package/src/clever-client/auth-bridge.js +0 -9
  4. package/src/clever-client/drains.js +0 -17
  5. package/src/clever-client/operators.js +1 -1
  6. package/src/commands/README.md +65 -0
  7. package/src/commands/accesslogs/accesslogs.command.js +158 -0
  8. package/src/commands/accesslogs/accesslogs.docs.md +20 -0
  9. package/src/commands/{activity.js → activity/activity.command.js} +74 -44
  10. package/src/commands/activity/activity.docs.md +19 -0
  11. package/src/commands/addon/addon.args.js +14 -0
  12. package/src/commands/addon/addon.command.js +7 -0
  13. package/src/commands/addon/addon.create.command.js +236 -0
  14. package/src/commands/addon/addon.delete.command.js +32 -0
  15. package/src/commands/addon/addon.docs.md +156 -0
  16. package/src/commands/addon/addon.env.command.js +50 -0
  17. package/src/commands/addon/addon.list.command.js +55 -0
  18. package/src/commands/addon/addon.providers.command.js +45 -0
  19. package/src/commands/addon/addon.providers.show.command.js +99 -0
  20. package/src/commands/addon/addon.rename.command.js +24 -0
  21. package/src/commands/applications/applications.command.js +59 -0
  22. package/src/commands/applications/applications.docs.md +31 -0
  23. package/src/commands/applications/applications.list.command.js +100 -0
  24. package/src/commands/cancel-deploy/cancel-deploy.command.js +30 -0
  25. package/src/commands/cancel-deploy/cancel-deploy.docs.md +16 -0
  26. package/src/commands/config/config.args.js +10 -0
  27. package/src/commands/config/config.command.js +20 -0
  28. package/src/commands/config/config.docs.md +86 -0
  29. package/src/commands/config/config.get.command.js +21 -0
  30. package/src/commands/config/config.set.command.js +38 -0
  31. package/src/commands/config/config.update.command.js +88 -0
  32. package/src/commands/console/console.command.js +31 -0
  33. package/src/commands/console/console.docs.md +16 -0
  34. package/src/commands/create/create.command.js +173 -0
  35. package/src/commands/create/create.docs.md +27 -0
  36. package/src/commands/{curl.js → curl/curl.command.js} +10 -3
  37. package/src/commands/curl/curl.docs.md +9 -0
  38. package/src/commands/database/database.args.js +8 -0
  39. package/src/commands/database/database.backups.command.js +60 -0
  40. package/src/commands/database/database.backups.download.command.js +55 -0
  41. package/src/commands/database/database.command.js +10 -0
  42. package/src/commands/database/database.docs.md +52 -0
  43. package/src/commands/delete/delete.command.js +43 -0
  44. package/src/commands/delete/delete.docs.md +17 -0
  45. package/src/commands/deploy/deploy.command.js +166 -0
  46. package/src/commands/deploy/deploy.docs.md +22 -0
  47. package/src/commands/diag/diag.command.js +136 -0
  48. package/src/commands/diag/diag.docs.md +15 -0
  49. package/src/commands/domain/domain.add.command.js +25 -0
  50. package/src/commands/domain/domain.args.js +8 -0
  51. package/src/commands/domain/domain.command.js +38 -0
  52. package/src/commands/domain/domain.diag.command.js +204 -0
  53. package/src/commands/domain/domain.docs.md +143 -0
  54. package/src/commands/domain/domain.favourite.command.js +35 -0
  55. package/src/commands/domain/domain.favourite.set.command.js +24 -0
  56. package/src/commands/domain/domain.favourite.unset.command.js +23 -0
  57. package/src/commands/domain/domain.overview.command.js +157 -0
  58. package/src/commands/domain/domain.rm.command.js +25 -0
  59. package/src/commands/drain/drain.args.js +8 -0
  60. package/src/commands/drain/drain.command.js +56 -0
  61. package/src/commands/drain/drain.create.command.js +128 -0
  62. package/src/commands/drain/drain.disable.command.js +27 -0
  63. package/src/commands/drain/drain.docs.md +129 -0
  64. package/src/commands/drain/drain.enable.command.js +27 -0
  65. package/src/commands/drain/drain.get.command.js +38 -0
  66. package/src/commands/drain/drain.remove.command.js +26 -0
  67. package/src/commands/emails/emails.add.command.js +32 -0
  68. package/src/commands/emails/emails.args.js +8 -0
  69. package/src/commands/emails/emails.command.js +35 -0
  70. package/src/commands/emails/emails.docs.md +79 -0
  71. package/src/commands/emails/emails.open.command.js +15 -0
  72. package/src/commands/emails/emails.primary.command.js +29 -0
  73. package/src/commands/emails/emails.remove-all.command.js +54 -0
  74. package/src/commands/emails/emails.remove.command.js +25 -0
  75. package/src/commands/env/env.command.js +77 -0
  76. package/src/commands/env/env.docs.md +99 -0
  77. package/src/commands/env/env.import-vars.command.js +45 -0
  78. package/src/commands/env/env.import.command.js +29 -0
  79. package/src/commands/env/env.rm.command.js +25 -0
  80. package/src/commands/env/env.set.command.js +32 -0
  81. package/src/commands/features/features.args.js +9 -0
  82. package/src/commands/features/features.command.js +7 -0
  83. package/src/commands/features/features.disable.command.js +25 -0
  84. package/src/commands/features/features.docs.md +71 -0
  85. package/src/commands/features/features.enable.command.js +32 -0
  86. package/src/commands/features/features.info.command.js +27 -0
  87. package/src/commands/features/features.list.command.js +49 -0
  88. package/src/commands/global.args.js +45 -0
  89. package/src/commands/global.commands.js +461 -0
  90. package/src/commands/global.options.js +186 -0
  91. package/src/commands/help/help.command.js +9 -0
  92. package/src/commands/help/help.docs.md +9 -0
  93. package/src/commands/k8s/k8s.add-persistent-storage.command.js +39 -0
  94. package/src/commands/k8s/k8s.args.js +9 -0
  95. package/src/commands/k8s/k8s.command.js +12 -0
  96. package/src/commands/k8s/k8s.create.command.js +86 -0
  97. package/src/commands/k8s/k8s.delete.command.js +40 -0
  98. package/src/commands/k8s/k8s.docs.md +131 -0
  99. package/src/commands/k8s/k8s.get-kubeconfig.command.js +32 -0
  100. package/src/commands/k8s/k8s.get.command.js +43 -0
  101. package/src/commands/k8s/k8s.list.command.js +38 -0
  102. package/src/commands/keycloak/keycloak.command.js +17 -0
  103. package/src/commands/keycloak/keycloak.disable-ng.command.js +13 -0
  104. package/src/commands/keycloak/keycloak.docs.md +197 -0
  105. package/src/commands/keycloak/keycloak.enable-ng.command.js +13 -0
  106. package/src/commands/keycloak/keycloak.get.command.js +17 -0
  107. package/src/commands/keycloak/keycloak.open.command.js +13 -0
  108. package/src/commands/keycloak/keycloak.open.logs.command.js +13 -0
  109. package/src/commands/keycloak/keycloak.open.webui.command.js +13 -0
  110. package/src/commands/keycloak/keycloak.rebuild.command.js +13 -0
  111. package/src/commands/keycloak/keycloak.restart.command.js +13 -0
  112. package/src/commands/keycloak/keycloak.version.check.command.js +17 -0
  113. package/src/commands/keycloak/keycloak.version.command.js +17 -0
  114. package/src/commands/keycloak/keycloak.version.update.command.js +17 -0
  115. package/src/commands/kv/kv.command.js +99 -0
  116. package/src/commands/kv/kv.docs.md +27 -0
  117. package/src/commands/link/link.command.js +31 -0
  118. package/src/commands/link/link.docs.md +22 -0
  119. package/src/commands/{login.js → login/login.command.js} +44 -22
  120. package/src/commands/login/login.docs.md +16 -0
  121. package/src/commands/logout/logout.command.js +15 -0
  122. package/src/commands/logout/logout.docs.md +9 -0
  123. package/src/commands/logs/logs.command.js +81 -0
  124. package/src/commands/logs/logs.docs.md +22 -0
  125. package/src/commands/make-default/make-default.command.js +17 -0
  126. package/src/commands/make-default/make-default.docs.md +15 -0
  127. package/src/commands/matomo/matomo.command.js +17 -0
  128. package/src/commands/matomo/matomo.docs.md +109 -0
  129. package/src/commands/matomo/matomo.get.command.js +17 -0
  130. package/src/commands/matomo/matomo.open.command.js +13 -0
  131. package/src/commands/matomo/matomo.open.logs.command.js +13 -0
  132. package/src/commands/matomo/matomo.open.webui.command.js +13 -0
  133. package/src/commands/matomo/matomo.rebuild.command.js +13 -0
  134. package/src/commands/matomo/matomo.restart.command.js +13 -0
  135. package/src/commands/metabase/metabase.command.js +17 -0
  136. package/src/commands/metabase/metabase.docs.md +169 -0
  137. package/src/commands/metabase/metabase.get.command.js +17 -0
  138. package/src/commands/metabase/metabase.open.command.js +13 -0
  139. package/src/commands/metabase/metabase.open.logs.command.js +13 -0
  140. package/src/commands/metabase/metabase.open.webui.command.js +13 -0
  141. package/src/commands/metabase/metabase.rebuild.command.js +13 -0
  142. package/src/commands/metabase/metabase.restart.command.js +13 -0
  143. package/src/commands/metabase/metabase.version.check.command.js +17 -0
  144. package/src/commands/metabase/metabase.version.command.js +17 -0
  145. package/src/commands/metabase/metabase.version.update.command.js +17 -0
  146. package/src/commands/ng/ng.args.js +27 -0
  147. package/src/commands/ng/ng.command.js +45 -0
  148. package/src/commands/ng/ng.create.command.js +60 -0
  149. package/src/commands/ng/ng.create.external.command.js +44 -0
  150. package/src/commands/ng/ng.delete.command.js +22 -0
  151. package/src/commands/ng/ng.delete.external.command.js +25 -0
  152. package/src/commands/ng/ng.docs.md +214 -0
  153. package/src/commands/ng/ng.get-config.command.js +32 -0
  154. package/src/commands/ng/ng.get.command.js +22 -0
  155. package/src/commands/ng/ng.link.command.js +25 -0
  156. package/src/commands/ng/ng.options.js +9 -0
  157. package/src/commands/ng/ng.search.command.js +22 -0
  158. package/src/commands/ng/ng.unlink.command.js +25 -0
  159. package/src/commands/notify-email/notify-email.add.command.js +65 -0
  160. package/src/commands/notify-email/notify-email.command.js +61 -0
  161. package/src/commands/notify-email/notify-email.docs.md +60 -0
  162. package/src/commands/notify-email/notify-email.remove.command.js +24 -0
  163. package/src/commands/open/open.command.js +24 -0
  164. package/src/commands/open/open.docs.md +16 -0
  165. package/src/commands/otoroshi/otoroshi.command.js +17 -0
  166. package/src/commands/otoroshi/otoroshi.disable-ng.command.js +13 -0
  167. package/src/commands/otoroshi/otoroshi.docs.md +211 -0
  168. package/src/commands/otoroshi/otoroshi.enable-ng.command.js +13 -0
  169. package/src/commands/otoroshi/otoroshi.get-config.command.js +13 -0
  170. package/src/commands/otoroshi/otoroshi.get.command.js +17 -0
  171. package/src/commands/otoroshi/otoroshi.open.command.js +13 -0
  172. package/src/commands/otoroshi/otoroshi.open.logs.command.js +13 -0
  173. package/src/commands/otoroshi/otoroshi.open.webui.command.js +13 -0
  174. package/src/commands/otoroshi/otoroshi.rebuild.command.js +13 -0
  175. package/src/commands/otoroshi/otoroshi.restart.command.js +13 -0
  176. package/src/commands/otoroshi/otoroshi.version.check.command.js +17 -0
  177. package/src/commands/otoroshi/otoroshi.version.command.js +17 -0
  178. package/src/commands/otoroshi/otoroshi.version.update.command.js +17 -0
  179. package/src/commands/profile/profile.command.js +60 -0
  180. package/src/commands/profile/profile.docs.md +23 -0
  181. package/src/commands/profile/profile.open.command.js +12 -0
  182. package/src/commands/published-config/published-config.command.js +40 -0
  183. package/src/commands/published-config/published-config.docs.md +77 -0
  184. package/src/commands/published-config/published-config.import.command.js +29 -0
  185. package/src/commands/published-config/published-config.rm.command.js +27 -0
  186. package/src/commands/published-config/published-config.set.command.js +34 -0
  187. package/src/commands/restart/restart.command.js +77 -0
  188. package/src/commands/restart/restart.docs.md +21 -0
  189. package/src/commands/scale/scale.command.js +121 -0
  190. package/src/commands/scale/scale.docs.md +23 -0
  191. package/src/commands/service/service.command.js +91 -0
  192. package/src/commands/service/service.docs.md +104 -0
  193. package/src/commands/service/service.link-addon.command.js +24 -0
  194. package/src/commands/service/service.link-app.command.js +23 -0
  195. package/src/commands/service/service.unlink-addon.command.js +24 -0
  196. package/src/commands/service/service.unlink-app.command.js +23 -0
  197. package/src/commands/ssh/ssh.command.js +40 -0
  198. package/src/commands/ssh/ssh.docs.md +17 -0
  199. package/src/commands/ssh-keys/ssh-keys.add.command.js +41 -0
  200. package/src/commands/ssh-keys/ssh-keys.args.js +8 -0
  201. package/src/commands/ssh-keys/ssh-keys.command.js +50 -0
  202. package/src/commands/ssh-keys/ssh-keys.docs.md +66 -0
  203. package/src/commands/ssh-keys/ssh-keys.open.command.js +12 -0
  204. package/src/commands/ssh-keys/ssh-keys.remove-all.command.js +54 -0
  205. package/src/commands/ssh-keys/ssh-keys.remove.command.js +26 -0
  206. package/src/commands/status/status.command.js +122 -0
  207. package/src/commands/status/status.docs.md +17 -0
  208. package/src/commands/stop/stop.command.js +23 -0
  209. package/src/commands/stop/stop.docs.md +16 -0
  210. package/src/commands/tcp-redirs/tcp-redirs.add.command.js +24 -0
  211. package/src/commands/tcp-redirs/tcp-redirs.command.js +41 -0
  212. package/src/commands/tcp-redirs/tcp-redirs.docs.md +71 -0
  213. package/src/commands/tcp-redirs/tcp-redirs.list-namespaces.command.js +48 -0
  214. package/src/commands/tcp-redirs/tcp-redirs.options.js +11 -0
  215. package/src/commands/tcp-redirs/tcp-redirs.remove.command.js +34 -0
  216. package/src/commands/tokens/tokens.command.js +43 -0
  217. package/src/commands/tokens/tokens.create.command.js +108 -0
  218. package/src/commands/tokens/tokens.docs.md +50 -0
  219. package/src/commands/tokens/tokens.revoke.command.js +25 -0
  220. package/src/commands/unlink/unlink.command.js +21 -0
  221. package/src/commands/unlink/unlink.docs.md +15 -0
  222. package/src/commands/version/version.command.js +13 -0
  223. package/src/commands/version/version.docs.md +9 -0
  224. package/src/commands/webhooks/webhooks.add.command.js +51 -0
  225. package/src/commands/webhooks/webhooks.command.js +57 -0
  226. package/src/commands/webhooks/webhooks.docs.md +61 -0
  227. package/src/commands/webhooks/webhooks.remove.command.js +24 -0
  228. package/src/lib/cliparse-patched.js +192 -0
  229. package/src/lib/define-argument.js +7 -0
  230. package/src/lib/define-argument.types.d.ts +23 -0
  231. package/src/lib/define-command.js +7 -0
  232. package/src/lib/define-command.types.d.ts +85 -0
  233. package/src/lib/define-common.types.d.ts +18 -0
  234. package/src/lib/define-option.js +7 -0
  235. package/src/lib/define-option.types.d.ts +29 -0
  236. package/src/lib/get-command-info.js +86 -0
  237. package/src/lib/get-command-info.types.d.ts +42 -0
  238. package/src/lib/k8s.js +1 -1
  239. package/src/lib/zod-utils.js +66 -0
  240. package/src/models/addon.js +2 -19
  241. package/src/models/app_configuration.js +0 -30
  242. package/src/models/application.js +4 -5
  243. package/src/models/application_configuration.js +5 -23
  244. package/src/models/domain.js +34 -2
  245. package/src/models/exit-strategy-option.js +0 -9
  246. package/src/models/git.js +1 -4
  247. package/src/models/log-v4.js +15 -4
  248. package/src/models/log.js +5 -0
  249. package/src/models/namespaces.js +1 -2
  250. package/src/models/notification.js +1 -7
  251. package/src/parsers.js +33 -111
  252. package/src/command-options.js +0 -55
  253. package/src/command-promise-handler.js +0 -16
  254. package/src/commands/accesslogs.js +0 -138
  255. package/src/commands/addon.js +0 -391
  256. package/src/commands/applications.js +0 -123
  257. package/src/commands/cancel-deploy.js +0 -19
  258. package/src/commands/config.js +0 -47
  259. package/src/commands/console.js +0 -20
  260. package/src/commands/create.js +0 -129
  261. package/src/commands/database.js +0 -73
  262. package/src/commands/delete.js +0 -24
  263. package/src/commands/deploy.js +0 -133
  264. package/src/commands/diag.js +0 -126
  265. package/src/commands/domain.js +0 -445
  266. package/src/commands/drain.js +0 -164
  267. package/src/commands/emails.js +0 -156
  268. package/src/commands/env.js +0 -124
  269. package/src/commands/features.js +0 -87
  270. package/src/commands/k8s.js +0 -193
  271. package/src/commands/keycloak.js +0 -138
  272. package/src/commands/kv.js +0 -93
  273. package/src/commands/link.js +0 -20
  274. package/src/commands/logout.js +0 -8
  275. package/src/commands/logs.js +0 -45
  276. package/src/commands/makeDefault.js +0 -11
  277. package/src/commands/matomo.js +0 -85
  278. package/src/commands/metabase.js +0 -112
  279. package/src/commands/ng.js +0 -202
  280. package/src/commands/notify-email.js +0 -99
  281. package/src/commands/open.js +0 -13
  282. package/src/commands/otoroshi.js +0 -150
  283. package/src/commands/profile.js +0 -55
  284. package/src/commands/published-config.js +0 -70
  285. package/src/commands/restart.js +0 -52
  286. package/src/commands/scale.js +0 -66
  287. package/src/commands/service.js +0 -105
  288. package/src/commands/ssh-keys.js +0 -144
  289. package/src/commands/ssh.js +0 -20
  290. package/src/commands/status.js +0 -115
  291. package/src/commands/stop.js +0 -12
  292. package/src/commands/tcp-redirs.js +0 -80
  293. package/src/commands/tokens.js +0 -144
  294. package/src/commands/unlink.js +0 -14
  295. package/src/commands/version.js +0 -6
  296. package/src/commands/webhooks.js +0 -74
@@ -0,0 +1,61 @@
1
+ import { getEmailhooks } from '@clevercloud/client/esm/api/v2/notification.js';
2
+ import { defineCommand } from '../../lib/define-command.js';
3
+ import { styleText } from '../../lib/style-text.js';
4
+ import { Logger } from '../../logger.js';
5
+ import { getOwnerAndApp } from '../../models/notification.js';
6
+ import { sendToApi } from '../../models/send-to-api.js';
7
+ import { humanJsonOutputFormatOption, listAllNotificationsOption, orgaIdOrNameOption } from '../global.options.js';
8
+
9
+ export const notifyEmailCommand = defineCommand({
10
+ description: 'Manage email notifications',
11
+ since: '0.6.1',
12
+ options: {
13
+ org: orgaIdOrNameOption,
14
+ listAll: listAllNotificationsOption,
15
+ format: humanJsonOutputFormatOption,
16
+ },
17
+ args: [],
18
+ async handler(options) {
19
+ const { org, listAll, format } = options;
20
+
21
+ // TODO: fix alias option
22
+ const { ownerId, appId } = await getOwnerAndApp(null, org, !listAll);
23
+ const hooks = await getEmailhooks({ ownerId }).then(sendToApi);
24
+
25
+ const formattedHooks = hooks
26
+ .filter((hook) => {
27
+ const emptyScope = !hook.scope || hook.scope.length === 0;
28
+ return !appId || emptyScope || hook.scope.includes(appId);
29
+ })
30
+ .map((hook) => ({
31
+ id: hook.id,
32
+ name: hook.name,
33
+ ownerId: hook.ownerId,
34
+ services: hook.scope ?? [hook.ownerId],
35
+ events: hook.events ?? ['ALL'],
36
+ notified: hook.notified ? hook.notified.map(({ target }) => target ?? 'whole team') : ['whole team'],
37
+ }));
38
+
39
+ switch (format) {
40
+ case 'json': {
41
+ Logger.printJson(formattedHooks);
42
+ break;
43
+ }
44
+ case 'human':
45
+ default: {
46
+ formattedHooks.forEach((hook) => {
47
+ Logger.println(styleText('bold', hook.name ?? hook.id));
48
+ Logger.println(` id: ${hook.id}`);
49
+ Logger.println(` services: ${hook.services.join(', ')}`);
50
+ Logger.println(` events: ${hook.events.join(', ')}`);
51
+ if (hook.notified.length > 1) {
52
+ Logger.println(' to:');
53
+ hook.notified.forEach((target) => Logger.println(` ${target}`));
54
+ } else {
55
+ Logger.println(` to: ${hook.notified[0]}`);
56
+ }
57
+ });
58
+ }
59
+ }
60
+ },
61
+ });
@@ -0,0 +1,60 @@
1
+ # 📖 `clever notify-email` command reference
2
+
3
+ ## ➡️ `clever notify-email` <kbd>Since 0.6.1</kbd>
4
+
5
+ Manage email notifications
6
+
7
+ ```bash
8
+ clever notify-email [options]
9
+ ```
10
+
11
+ ### ⚙️ Options
12
+
13
+ |Name|Description|
14
+ |---|---|
15
+ |`-F`, `--format` `<format>`|Output format (human, json) (default: human)|
16
+ |`--list-all`|List all notifications for your user or for an organisation with the '--org' option|
17
+ |`-o`, `--org`, `--owner` `<org-id\|org-name>`|Organisation to target by its ID (or name, if unambiguous)|
18
+
19
+ ## ➡️ `clever notify-email add` <kbd>Since 0.6.1</kbd>
20
+
21
+ Add a new email notification
22
+
23
+ ```bash
24
+ clever notify-email add --notify <email-address|user-id|organisation> <name> [options]
25
+ ```
26
+
27
+ ### 📥 Arguments
28
+
29
+ |Name|Description|
30
+ |---|---|
31
+ |`name`|Notification name|
32
+
33
+ ### ⚙️ Options
34
+
35
+ |Name|Description|
36
+ |---|---|
37
+ |`--notify` `<email-address\|user-id\|organisation>`|Notify a user, a specific email address or the whole organisation (multiple values allowed, comma separated) **(required)**|
38
+ |`--event` `<event-type>`|Restrict notifications to specific event types|
39
+ |`-o`, `--org`, `--owner` `<org-id\|org-name>`|Organisation to target by its ID (or name, if unambiguous)|
40
+ |`--service` `<service-id>`|Restrict notifications to specific applications and add-ons|
41
+
42
+ ## ➡️ `clever notify-email remove` <kbd>Since 0.6.1</kbd>
43
+
44
+ Remove an existing email notification
45
+
46
+ ```bash
47
+ clever notify-email remove <notification-id> [options]
48
+ ```
49
+
50
+ ### 📥 Arguments
51
+
52
+ |Name|Description|
53
+ |---|---|
54
+ |`notification-id`|Notification ID|
55
+
56
+ ### ⚙️ Options
57
+
58
+ |Name|Description|
59
+ |---|---|
60
+ |`-o`, `--org`, `--owner` `<org-id\|org-name>`|Organisation to target by its ID (or name, if unambiguous)|
@@ -0,0 +1,24 @@
1
+ import { deleteEmailhook } from '@clevercloud/client/esm/api/v2/notification.js';
2
+ import { defineCommand } from '../../lib/define-command.js';
3
+ import { Logger } from '../../logger.js';
4
+ import { getOrgaIdOrUserId } from '../../models/notification.js';
5
+ import { sendToApi } from '../../models/send-to-api.js';
6
+ import { notificationIdArg } from '../global.args.js';
7
+ import { orgaIdOrNameOption } from '../global.options.js';
8
+
9
+ export const notifyEmailRemoveCommand = defineCommand({
10
+ description: 'Remove an existing email notification',
11
+ since: '0.6.1',
12
+ options: {
13
+ org: orgaIdOrNameOption,
14
+ },
15
+ args: [notificationIdArg],
16
+ async handler(options, notificationId) {
17
+ const { org } = options;
18
+
19
+ const ownerId = await getOrgaIdOrUserId(org);
20
+ await deleteEmailhook({ ownerId, id: notificationId }).then(sendToApi);
21
+
22
+ Logger.println('The notification has been successfully removed');
23
+ },
24
+ });
@@ -0,0 +1,24 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import * as Application from '../../models/application.js';
3
+ import * as Domain from '../../models/domain.js';
4
+ import { openBrowser } from '../../models/utils.js';
5
+ import { aliasOption, appIdOrNameOption } from '../global.options.js';
6
+
7
+ export const openCommand = defineCommand({
8
+ description: 'Open an application in the Console',
9
+ since: '0.5.0',
10
+ options: {
11
+ alias: aliasOption,
12
+ app: appIdOrNameOption,
13
+ },
14
+ args: [],
15
+ async handler(options) {
16
+ const { alias, app: appIdOrName } = options;
17
+ const { ownerId, appId } = await Application.resolveId(appIdOrName, alias);
18
+
19
+ const vhost = await Domain.getBest(appId, ownerId);
20
+ const url = 'https://' + vhost.fqdn;
21
+
22
+ await openBrowser(url, 'Opening the application in your browser');
23
+ },
24
+ });
@@ -0,0 +1,16 @@
1
+ # 📖 `clever open` command reference
2
+
3
+ ## ➡️ `clever open` <kbd>Since 0.5.0</kbd>
4
+
5
+ Open an application in the Console
6
+
7
+ ```bash
8
+ clever open [options]
9
+ ```
10
+
11
+ ### ⚙️ Options
12
+
13
+ |Name|Description|
14
+ |---|---|
15
+ |`-a`, `--alias` `<alias>`|Short name for the application|
16
+ |`--app` `<app-id\|app-name>`|Application to manage by its ID (or name, if unambiguous)|
@@ -0,0 +1,17 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorList } from '../../lib/operator-commands.js';
3
+ import { humanJsonOutputFormatOption } from '../global.options.js';
4
+
5
+ export const otoroshiCommand = defineCommand({
6
+ description: 'Manage Clever Cloud Otoroshi services',
7
+ since: '3.13.0',
8
+ isExperimental: true,
9
+ featureFlag: 'operators',
10
+ options: {
11
+ format: humanJsonOutputFormatOption,
12
+ },
13
+ args: [],
14
+ async handler(options) {
15
+ await operatorList('otoroshi', options.format);
16
+ },
17
+ });
@@ -0,0 +1,13 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorNgDisable } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+
5
+ export const otoroshiDisableNgCommand = defineCommand({
6
+ description: 'Unlink Otoroshi from its Network Group',
7
+ since: '3.13.0',
8
+ options: {},
9
+ args: [addonIdOrNameArg],
10
+ async handler(_options, addonIdOrName) {
11
+ await operatorNgDisable('otoroshi', addonIdOrName);
12
+ },
13
+ });
@@ -0,0 +1,211 @@
1
+ # 📖 `clever otoroshi` command reference
2
+
3
+ > [!NOTE]
4
+ > 🧪 **Experimental**: This command may change or be removed in future versions.
5
+ > Enable with: `clever features enable operators`
6
+
7
+ ## ➡️ `clever otoroshi` <kbd>Since 3.13.0</kbd>
8
+
9
+ Manage Clever Cloud Otoroshi services
10
+
11
+ ```bash
12
+ clever otoroshi [options]
13
+ ```
14
+
15
+ ### ⚙️ Options
16
+
17
+ |Name|Description|
18
+ |---|---|
19
+ |`-F`, `--format` `<format>`|Output format (human, json) (default: human)|
20
+
21
+ ## ➡️ `clever otoroshi disable-ng` <kbd>Since 3.13.0</kbd>
22
+
23
+ Unlink Otoroshi from its Network Group
24
+
25
+ ```bash
26
+ clever otoroshi disable-ng <addon-id|addon-name>
27
+ ```
28
+
29
+ ### 📥 Arguments
30
+
31
+ |Name|Description|
32
+ |---|---|
33
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
34
+
35
+ ## ➡️ `clever otoroshi enable-ng` <kbd>Since 3.13.0</kbd>
36
+
37
+ Link Otoroshi to a Network Group
38
+
39
+ ```bash
40
+ clever otoroshi enable-ng <addon-id|addon-name>
41
+ ```
42
+
43
+ ### 📥 Arguments
44
+
45
+ |Name|Description|
46
+ |---|---|
47
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
48
+
49
+ ## ➡️ `clever otoroshi get` <kbd>Since 3.13.0</kbd>
50
+
51
+ Get information about a deployed Otoroshi
52
+
53
+ ```bash
54
+ clever otoroshi get <addon-id|addon-name> [options]
55
+ ```
56
+
57
+ ### 📥 Arguments
58
+
59
+ |Name|Description|
60
+ |---|---|
61
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
62
+
63
+ ### ⚙️ Options
64
+
65
+ |Name|Description|
66
+ |---|---|
67
+ |`-F`, `--format` `<format>`|Output format (human, json) (default: human)|
68
+
69
+ ## ➡️ `clever otoroshi get-config` <kbd>Since 4.4.0</kbd>
70
+
71
+ Get configuration of a deployed Otoroshi in otoroshictl format
72
+
73
+ ```bash
74
+ clever otoroshi get-config <addon-id|addon-name>
75
+ ```
76
+
77
+ ### 📥 Arguments
78
+
79
+ |Name|Description|
80
+ |---|---|
81
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
82
+
83
+ ## ➡️ `clever otoroshi open` <kbd>Since 3.13.0</kbd>
84
+
85
+ Open the Otoroshi dashboard in Clever Cloud Console
86
+
87
+ ```bash
88
+ clever otoroshi open <addon-id|addon-name>
89
+ ```
90
+
91
+ ### 📥 Arguments
92
+
93
+ |Name|Description|
94
+ |---|---|
95
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
96
+
97
+ ## ➡️ `clever otoroshi open logs` <kbd>Since 3.13.0</kbd>
98
+
99
+ Open the Otoroshi application logs in Clever Cloud Console
100
+
101
+ ```bash
102
+ clever otoroshi open logs <addon-id|addon-name>
103
+ ```
104
+
105
+ ### 📥 Arguments
106
+
107
+ |Name|Description|
108
+ |---|---|
109
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
110
+
111
+ ## ➡️ `clever otoroshi open webui` <kbd>Since 3.13.0</kbd>
112
+
113
+ Open the Otoroshi admin console in your browser
114
+
115
+ ```bash
116
+ clever otoroshi open webui <addon-id|addon-name>
117
+ ```
118
+
119
+ ### 📥 Arguments
120
+
121
+ |Name|Description|
122
+ |---|---|
123
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
124
+
125
+ ## ➡️ `clever otoroshi rebuild` <kbd>Since 3.13.0</kbd>
126
+
127
+ Rebuild Otoroshi
128
+
129
+ ```bash
130
+ clever otoroshi rebuild <addon-id|addon-name>
131
+ ```
132
+
133
+ ### 📥 Arguments
134
+
135
+ |Name|Description|
136
+ |---|---|
137
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
138
+
139
+ ## ➡️ `clever otoroshi restart` <kbd>Since 3.13.0</kbd>
140
+
141
+ Restart Otoroshi
142
+
143
+ ```bash
144
+ clever otoroshi restart <addon-id|addon-name>
145
+ ```
146
+
147
+ ### 📥 Arguments
148
+
149
+ |Name|Description|
150
+ |---|---|
151
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
152
+
153
+ ## ➡️ `clever otoroshi version` <kbd>Since 3.13.0</kbd>
154
+
155
+ Manage Otoroshi deployed version
156
+
157
+ ```bash
158
+ clever otoroshi version <addon-id|addon-name> [options]
159
+ ```
160
+
161
+ ### 📥 Arguments
162
+
163
+ |Name|Description|
164
+ |---|---|
165
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
166
+
167
+ ### ⚙️ Options
168
+
169
+ |Name|Description|
170
+ |---|---|
171
+ |`-F`, `--format` `<format>`|Output format (human, json) (default: human)|
172
+
173
+ ## ➡️ `clever otoroshi version check` <kbd>Since 3.13.0</kbd>
174
+
175
+ Check Otoroshi deployed version
176
+
177
+ ```bash
178
+ clever otoroshi version check <addon-id|addon-name> [options]
179
+ ```
180
+
181
+ ### 📥 Arguments
182
+
183
+ |Name|Description|
184
+ |---|---|
185
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
186
+
187
+ ### ⚙️ Options
188
+
189
+ |Name|Description|
190
+ |---|---|
191
+ |`-F`, `--format` `<format>`|Output format (human, json) (default: human)|
192
+
193
+ ## ➡️ `clever otoroshi version update` <kbd>Since 3.13.0</kbd>
194
+
195
+ Update Otoroshi deployed version
196
+
197
+ ```bash
198
+ clever otoroshi version update <addon-id|addon-name> [options]
199
+ ```
200
+
201
+ ### 📥 Arguments
202
+
203
+ |Name|Description|
204
+ |---|---|
205
+ |`addon-id|addon-name`|Add-on ID (or name, if unambiguous)|
206
+
207
+ ### ⚙️ Options
208
+
209
+ |Name|Description|
210
+ |---|---|
211
+ |`--target` `<version>`|Target version to upgrade to (e.g.: 24, 2.4, 2.4.1)|
@@ -0,0 +1,13 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorNgEnable } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+
5
+ export const otoroshiEnableNgCommand = defineCommand({
6
+ description: 'Link Otoroshi to a Network Group',
7
+ since: '3.13.0',
8
+ options: {},
9
+ args: [addonIdOrNameArg],
10
+ async handler(_options, addonIdOrName) {
11
+ await operatorNgEnable('otoroshi', addonIdOrName);
12
+ },
13
+ });
@@ -0,0 +1,13 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorPrint } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+
5
+ export const otoroshiGetConfigCommand = defineCommand({
6
+ description: 'Get configuration of a deployed Otoroshi in otoroshictl format',
7
+ since: '4.4.0',
8
+ options: {},
9
+ args: [addonIdOrNameArg],
10
+ async handler(_options, addonIdOrName) {
11
+ await operatorPrint('otoroshi', addonIdOrName, 'otoroshictl');
12
+ },
13
+ });
@@ -0,0 +1,17 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorPrint } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+ import { humanJsonOutputFormatOption } from '../global.options.js';
5
+
6
+ export const otoroshiGetCommand = defineCommand({
7
+ description: 'Get information about a deployed Otoroshi',
8
+ since: '3.13.0',
9
+ options: {
10
+ format: humanJsonOutputFormatOption,
11
+ },
12
+ args: [addonIdOrNameArg],
13
+ async handler(options, addonIdOrName) {
14
+ const { format } = options;
15
+ await operatorPrint('otoroshi', addonIdOrName, format);
16
+ },
17
+ });
@@ -0,0 +1,13 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorOpen } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+
5
+ export const otoroshiOpenCommand = defineCommand({
6
+ description: 'Open the Otoroshi dashboard in Clever Cloud Console',
7
+ since: '3.13.0',
8
+ options: {},
9
+ args: [addonIdOrNameArg],
10
+ async handler(_options, addonIdOrName) {
11
+ await operatorOpen('otoroshi', addonIdOrName);
12
+ },
13
+ });
@@ -0,0 +1,13 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorOpenLogs } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+
5
+ export const otoroshiOpenLogsCommand = defineCommand({
6
+ description: 'Open the Otoroshi application logs in Clever Cloud Console',
7
+ since: '3.13.0',
8
+ options: {},
9
+ args: [addonIdOrNameArg],
10
+ async handler(_options, addonIdOrName) {
11
+ await operatorOpenLogs('otoroshi', addonIdOrName);
12
+ },
13
+ });
@@ -0,0 +1,13 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorOpenWebUi } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+
5
+ export const otoroshiOpenWebuiCommand = defineCommand({
6
+ description: 'Open the Otoroshi admin console in your browser',
7
+ since: '3.13.0',
8
+ options: {},
9
+ args: [addonIdOrNameArg],
10
+ async handler(_options, addonIdOrName) {
11
+ await operatorOpenWebUi('otoroshi', addonIdOrName);
12
+ },
13
+ });
@@ -0,0 +1,13 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorRebuild } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+
5
+ export const otoroshiRebuildCommand = defineCommand({
6
+ description: 'Rebuild Otoroshi',
7
+ since: '3.13.0',
8
+ options: {},
9
+ args: [addonIdOrNameArg],
10
+ async handler(_options, addonIdOrName) {
11
+ await operatorRebuild('otoroshi', addonIdOrName);
12
+ },
13
+ });
@@ -0,0 +1,13 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorReboot } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+
5
+ export const otoroshiRestartCommand = defineCommand({
6
+ description: 'Restart Otoroshi',
7
+ since: '3.13.0',
8
+ options: {},
9
+ args: [addonIdOrNameArg],
10
+ async handler(_options, addonIdOrName) {
11
+ await operatorReboot('otoroshi', addonIdOrName);
12
+ },
13
+ });
@@ -0,0 +1,17 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorCheckVersion } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+ import { humanJsonOutputFormatOption } from '../global.options.js';
5
+
6
+ export const otoroshiVersionCheckCommand = defineCommand({
7
+ description: 'Check Otoroshi deployed version',
8
+ since: '3.13.0',
9
+ options: {
10
+ format: humanJsonOutputFormatOption,
11
+ },
12
+ args: [addonIdOrNameArg],
13
+ async handler(options, addonIdOrName) {
14
+ const { format } = options;
15
+ await operatorCheckVersion('otoroshi', addonIdOrName, format);
16
+ },
17
+ });
@@ -0,0 +1,17 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorCheckVersion } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+ import { humanJsonOutputFormatOption } from '../global.options.js';
5
+
6
+ export const otoroshiVersionCommand = defineCommand({
7
+ description: 'Manage Otoroshi deployed version',
8
+ since: '3.13.0',
9
+ options: {
10
+ format: humanJsonOutputFormatOption,
11
+ },
12
+ args: [addonIdOrNameArg],
13
+ async handler(options, addonIdOrName) {
14
+ const { format } = options;
15
+ await operatorCheckVersion('otoroshi', addonIdOrName, format);
16
+ },
17
+ });
@@ -0,0 +1,17 @@
1
+ import { defineCommand } from '../../lib/define-command.js';
2
+ import { operatorUpdateVersion } from '../../lib/operator-commands.js';
3
+ import { addonIdOrNameArg } from '../global.args.js';
4
+ import { targetVersionOption } from '../global.options.js';
5
+
6
+ export const otoroshiVersionUpdateCommand = defineCommand({
7
+ description: 'Update Otoroshi deployed version',
8
+ since: '3.13.0',
9
+ options: {
10
+ target: targetVersionOption,
11
+ },
12
+ args: [addonIdOrNameArg],
13
+ async handler(options, addonIdOrName) {
14
+ const { target } = options;
15
+ await operatorUpdateVersion('otoroshi', target, addonIdOrName);
16
+ },
17
+ });
@@ -0,0 +1,60 @@
1
+ import dedent from 'dedent';
2
+ import { defineCommand } from '../../lib/define-command.js';
3
+ import { styleText } from '../../lib/style-text.js';
4
+ import { Logger } from '../../logger.js';
5
+ import * as User from '../../models/user.js';
6
+ import { humanJsonOutputFormatOption } from '../global.options.js';
7
+
8
+ export const profileCommand = defineCommand({
9
+ description: 'Display the profile of the current user',
10
+ since: '0.10.1',
11
+ options: {
12
+ format: humanJsonOutputFormatOption,
13
+ },
14
+ args: [],
15
+ async handler(options) {
16
+ const { format } = options;
17
+
18
+ const user = await User.getCurrent();
19
+ const currentToken = await User.getCurrentToken();
20
+ const tokenExpiration = new Date(currentToken.expirationDate).toLocaleString('en-US', {
21
+ year: 'numeric',
22
+ month: 'short',
23
+ day: 'numeric',
24
+ hour: 'numeric',
25
+ minute: 'numeric',
26
+ hour12: false,
27
+ timeZone: 'UTC',
28
+ timeZoneName: 'short',
29
+ });
30
+
31
+ const formattedUser = {
32
+ id: user.id,
33
+ email: user.email,
34
+ name: user.name,
35
+ avatar: user.avatar,
36
+ creationDate: new Date(user.creationDate),
37
+ tokenExpiration: new Date(currentToken.expirationDate).toISOString(),
38
+ lang: user.lang,
39
+ has2FA: user.preferredMFA != null && user.preferredMFA !== 'NONE',
40
+ };
41
+
42
+ switch (format) {
43
+ case 'json': {
44
+ Logger.printJson(formattedUser);
45
+ break;
46
+ }
47
+ case 'human':
48
+ default: {
49
+ Logger.println(dedent`
50
+ You're currently logged in as:
51
+ User id ${formattedUser.id}
52
+ Name ${formattedUser.name ?? styleText(['red', 'bold'], '[not specified]')}
53
+ Email ${formattedUser.email}
54
+ Token expiration ${tokenExpiration}
55
+ Two factor auth ${formattedUser.has2FA ? 'yes' : 'no'}
56
+ `);
57
+ }
58
+ }
59
+ },
60
+ });