@bussolabs/closeyourit-cli 0.0.15 → 0.0.17

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 (164) hide show
  1. package/README.md +73 -2
  2. package/dist/commands/alerts/notifications/delete.d.ts +12 -0
  3. package/dist/commands/alerts/notifications/delete.js +25 -0
  4. package/dist/commands/alerts/notifications/list.d.ts +9 -0
  5. package/dist/commands/alerts/notifications/list.js +29 -0
  6. package/dist/commands/alerts/notifications/read-all.d.ts +6 -0
  7. package/dist/commands/alerts/notifications/read-all.js +15 -0
  8. package/dist/commands/alerts/notifications/read.d.ts +9 -0
  9. package/dist/commands/alerts/notifications/read.js +22 -0
  10. package/dist/commands/alerts/preferences/show.d.ts +6 -0
  11. package/dist/commands/alerts/preferences/show.js +16 -0
  12. package/dist/commands/alerts/preferences/update.d.ts +20 -0
  13. package/dist/commands/alerts/preferences/update.js +63 -0
  14. package/dist/commands/analytics/goals/create.d.ts +13 -0
  15. package/dist/commands/analytics/goals/create.js +35 -0
  16. package/dist/commands/analytics/goals/delete.d.ts +13 -0
  17. package/dist/commands/analytics/goals/delete.js +27 -0
  18. package/dist/commands/analytics/goals/list.d.ts +9 -0
  19. package/dist/commands/analytics/goals/list.js +25 -0
  20. package/dist/commands/analytics/share.d.ts +10 -0
  21. package/dist/commands/analytics/share.js +30 -0
  22. package/dist/commands/analytics/show.d.ts +11 -0
  23. package/dist/commands/analytics/show.js +32 -0
  24. package/dist/commands/analytics/unshare.d.ts +10 -0
  25. package/dist/commands/analytics/unshare.js +24 -0
  26. package/dist/commands/cron-monitors/list.d.ts +11 -0
  27. package/dist/commands/cron-monitors/list.js +38 -0
  28. package/dist/commands/cron-monitors/show.d.ts +9 -0
  29. package/dist/commands/cron-monitors/show.js +20 -0
  30. package/dist/commands/groups/create.d.ts +1 -0
  31. package/dist/commands/groups/create.js +7 -0
  32. package/dist/commands/groups/update.d.ts +1 -0
  33. package/dist/commands/groups/update.js +8 -1
  34. package/dist/commands/ideas/archive.d.ts +12 -0
  35. package/dist/commands/ideas/archive.js +24 -0
  36. package/dist/commands/ideas/case-delete.d.ts +14 -0
  37. package/dist/commands/ideas/case-delete.js +30 -0
  38. package/dist/commands/ideas/case-update.d.ts +15 -0
  39. package/dist/commands/ideas/case-update.js +41 -0
  40. package/dist/commands/ideas/case.d.ts +14 -0
  41. package/dist/commands/ideas/case.js +33 -0
  42. package/dist/commands/ideas/delete.d.ts +13 -0
  43. package/dist/commands/ideas/delete.js +27 -0
  44. package/dist/commands/ideas/unarchive.d.ts +12 -0
  45. package/dist/commands/ideas/unarchive.js +24 -0
  46. package/dist/commands/ideas/update.d.ts +16 -0
  47. package/dist/commands/ideas/update.js +45 -0
  48. package/dist/commands/logs/link.d.ts +12 -0
  49. package/dist/commands/logs/link.js +33 -0
  50. package/dist/commands/logs/show.d.ts +9 -0
  51. package/dist/commands/logs/show.js +21 -0
  52. package/dist/commands/logs/unlink.d.ts +13 -0
  53. package/dist/commands/logs/unlink.js +26 -0
  54. package/dist/commands/members/remove.d.ts +12 -0
  55. package/dist/commands/members/remove.js +27 -0
  56. package/dist/commands/members/set-access.d.ts +4 -0
  57. package/dist/commands/members/set-access.js +38 -4
  58. package/dist/commands/members/update.d.ts +14 -0
  59. package/dist/commands/members/update.js +40 -0
  60. package/dist/commands/monitors/announcements/clear.d.ts +13 -0
  61. package/dist/commands/monitors/announcements/clear.js +27 -0
  62. package/dist/commands/monitors/announcements/set.d.ts +17 -0
  63. package/dist/commands/monitors/announcements/set.js +45 -0
  64. package/dist/commands/monitors/announcements/show.d.ts +12 -0
  65. package/dist/commands/monitors/announcements/show.js +24 -0
  66. package/dist/commands/monitors/create.d.ts +1 -0
  67. package/dist/commands/monitors/create.js +3 -0
  68. package/dist/commands/monitors/incidents/delete.d.ts +14 -0
  69. package/dist/commands/monitors/incidents/delete.js +28 -0
  70. package/dist/commands/monitors/incidents/group.d.ts +15 -0
  71. package/dist/commands/monitors/incidents/group.js +38 -0
  72. package/dist/commands/monitors/incidents/ungroup.d.ts +14 -0
  73. package/dist/commands/monitors/incidents/ungroup.js +31 -0
  74. package/dist/commands/monitors/incidents/update-add.d.ts +15 -0
  75. package/dist/commands/monitors/incidents/update-add.js +38 -0
  76. package/dist/commands/monitors/incidents/update-delete.d.ts +15 -0
  77. package/dist/commands/monitors/incidents/update-delete.js +31 -0
  78. package/dist/commands/monitors/publish.d.ts +12 -0
  79. package/dist/commands/monitors/publish.js +21 -0
  80. package/dist/commands/monitors/unpublish.d.ts +12 -0
  81. package/dist/commands/monitors/unpublish.js +21 -0
  82. package/dist/commands/monitors/update.d.ts +1 -0
  83. package/dist/commands/monitors/update.js +3 -0
  84. package/dist/commands/org/update.d.ts +2 -0
  85. package/dist/commands/org/update.js +10 -0
  86. package/dist/commands/platforms/create.d.ts +1 -0
  87. package/dist/commands/platforms/create.js +7 -0
  88. package/dist/commands/platforms/update.d.ts +1 -0
  89. package/dist/commands/platforms/update.js +8 -1
  90. package/dist/commands/projects/create.d.ts +2 -0
  91. package/dist/commands/projects/create.js +13 -0
  92. package/dist/commands/projects/link-server.d.ts +11 -0
  93. package/dist/commands/projects/link-server.js +33 -0
  94. package/dist/commands/projects/settings/show.d.ts +9 -0
  95. package/dist/commands/projects/settings/show.js +23 -0
  96. package/dist/commands/projects/settings/update.d.ts +14 -0
  97. package/dist/commands/projects/settings/update.js +50 -0
  98. package/dist/commands/projects/unlink-server.d.ts +13 -0
  99. package/dist/commands/projects/unlink-server.js +29 -0
  100. package/dist/commands/projects/update.d.ts +2 -0
  101. package/dist/commands/projects/update.js +14 -1
  102. package/dist/commands/releases/list.d.ts +10 -0
  103. package/dist/commands/releases/list.js +29 -0
  104. package/dist/commands/tickets/links.d.ts +12 -0
  105. package/dist/commands/tickets/links.js +33 -0
  106. package/dist/commands/tickets/reviewer.d.ts +13 -0
  107. package/dist/commands/tickets/reviewer.js +29 -0
  108. package/dist/commands/tickets/unlink.d.ts +14 -0
  109. package/dist/commands/tickets/unlink.js +29 -0
  110. package/dist/commands/tickets/unreviewer.d.ts +12 -0
  111. package/dist/commands/tickets/unreviewer.js +25 -0
  112. package/dist/commands/tickets/unwatch.d.ts +12 -0
  113. package/dist/commands/tickets/unwatch.js +25 -0
  114. package/dist/commands/tickets/watch.d.ts +12 -0
  115. package/dist/commands/tickets/watch.js +26 -0
  116. package/dist/commands/todos/complete.d.ts +10 -0
  117. package/dist/commands/todos/complete.js +23 -0
  118. package/dist/commands/todos/create.d.ts +10 -0
  119. package/dist/commands/todos/create.js +29 -0
  120. package/dist/commands/todos/delete.d.ts +12 -0
  121. package/dist/commands/todos/delete.js +25 -0
  122. package/dist/commands/todos/items/add.d.ts +14 -0
  123. package/dist/commands/todos/items/add.js +35 -0
  124. package/dist/commands/todos/items/delete.d.ts +13 -0
  125. package/dist/commands/todos/items/delete.js +26 -0
  126. package/dist/commands/todos/items/list.d.ts +12 -0
  127. package/dist/commands/todos/items/list.js +28 -0
  128. package/dist/commands/todos/items/update.d.ts +15 -0
  129. package/dist/commands/todos/items/update.js +38 -0
  130. package/dist/commands/todos/list.d.ts +9 -0
  131. package/dist/commands/todos/list.js +24 -0
  132. package/dist/commands/todos/reorder.d.ts +9 -0
  133. package/dist/commands/todos/reorder.js +19 -0
  134. package/dist/commands/todos/share.d.ts +12 -0
  135. package/dist/commands/todos/share.js +33 -0
  136. package/dist/commands/todos/shared-show.d.ts +9 -0
  137. package/dist/commands/todos/shared-show.js +20 -0
  138. package/dist/commands/todos/shared.d.ts +9 -0
  139. package/dist/commands/todos/shared.js +25 -0
  140. package/dist/commands/todos/shares.d.ts +9 -0
  141. package/dist/commands/todos/shares.js +26 -0
  142. package/dist/commands/todos/show.d.ts +9 -0
  143. package/dist/commands/todos/show.js +20 -0
  144. package/dist/commands/todos/uncomplete.d.ts +10 -0
  145. package/dist/commands/todos/uncomplete.js +23 -0
  146. package/dist/commands/todos/update.d.ts +13 -0
  147. package/dist/commands/todos/update.js +34 -0
  148. package/dist/commands/uptime-groups/create.d.ts +12 -0
  149. package/dist/commands/uptime-groups/create.js +35 -0
  150. package/dist/commands/uptime-groups/delete.d.ts +12 -0
  151. package/dist/commands/uptime-groups/delete.js +25 -0
  152. package/dist/commands/uptime-groups/list.d.ts +9 -0
  153. package/dist/commands/uptime-groups/list.js +24 -0
  154. package/dist/commands/uptime-groups/publish.d.ts +9 -0
  155. package/dist/commands/uptime-groups/publish.js +22 -0
  156. package/dist/commands/uptime-groups/show.d.ts +9 -0
  157. package/dist/commands/uptime-groups/show.js +20 -0
  158. package/dist/commands/uptime-groups/unpublish.d.ts +9 -0
  159. package/dist/commands/uptime-groups/unpublish.js +22 -0
  160. package/dist/commands/uptime-groups/update.d.ts +15 -0
  161. package/dist/commands/uptime-groups/update.js +37 -0
  162. package/oclif.manifest.json +5936 -2190
  163. package/opencli.json +3235 -189
  164. package/package.json +16 -1
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ class MembersRemove extends base_1.BaseCommand {
6
+ // Remove the membership from the organization (the account survives, it just loses access to this org).
7
+ // The backend gates `members.manage`. Irreversible → requires --confirm. The arg is the MEMBERSHIP id.
8
+ static description = 'Remove a member from your organization (irreversible; requires members.manage)';
9
+ static examples = ['<%= config.bin %> members remove <membership-id> --confirm'];
10
+ static args = {
11
+ id: core_1.Args.string({ description: 'Membership id', required: true }),
12
+ };
13
+ static flags = {
14
+ confirm: core_1.Flags.boolean({ description: 'Required: confirm the irreversible removal' }),
15
+ };
16
+ async run() {
17
+ const { args, flags } = await this.parse(MembersRemove);
18
+ if (!flags.confirm) {
19
+ this.error('Refusing to remove without --confirm (the action is irreversible).', { exit: 2 });
20
+ }
21
+ await this.api.delete(`/cli/v1/members/${encodeURIComponent(args.id)}`);
22
+ if (!this.jsonEnabled())
23
+ this.log(`Removed member ${args.id}`);
24
+ return { removed: args.id };
25
+ }
26
+ }
27
+ exports.default = MembersRemove;
@@ -8,6 +8,10 @@ export default class MembersSetAccess extends BaseCommand {
8
8
  static flags: {
9
9
  group: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
10
10
  project: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ 'role-id': import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ override: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
13
  };
12
14
  run(): Promise<unknown>;
15
+ /** Parse repeated `key=allow|deny|inherit` entries into a `{key: value}` map; usage error on a bad entry. */
16
+ private parseOverrides;
13
17
  }
@@ -4,12 +4,16 @@ const core_1 = require("@oclif/core");
4
4
  const base_1 = require("../../base");
5
5
  const output_1 = require("../../lib/output");
6
6
  class MembersSetAccess extends base_1.BaseCommand {
7
- // Full replace: the groups/projects you pass become the member's complete access set.
8
- // Omit --group / --project to clear that dimension (an empty array is sent).
9
- static description = "Set a member's group and project access (replaces the current set; omit a flag to clear it)";
7
+ // Scope (groups/projects): FULL REPLACE — the ids you pass become the member's complete access set;
8
+ // omit --group / --project to clear that dimension (an empty array is always sent).
9
+ // Roles/overrides: applied ONLY when their flag is passed (a client sending just --group/--project
10
+ // never clears roles or overrides). --role-id is a full-replace of the direct roles; --override is a
11
+ // full-replace of the personal allow/deny overrides ("inherit" removes the override for that key).
12
+ static description = "Set a member's access: group/project scope, direct roles, and permission overrides";
10
13
  static examples = [
11
14
  '<%= config.bin %> members set-access <membership-id> --project acme-api --project acme-web',
12
- '<%= config.bin %> members set-access <membership-id> --group DriverOne',
15
+ '<%= config.bin %> members set-access <membership-id> --group DriverOne --role-id Maintainer',
16
+ '<%= config.bin %> members set-access <membership-id> --override tickets.edit=allow --override errors.triage=deny',
13
17
  '<%= config.bin %> members set-access <membership-id>',
14
18
  ];
15
19
  static args = {
@@ -26,13 +30,29 @@ class MembersSetAccess extends base_1.BaseCommand {
26
30
  multiple: true,
27
31
  default: [],
28
32
  }),
33
+ 'role-id': core_1.Flags.string({
34
+ description: 'Direct role id or name (repeatable; when passed, replaces the direct roles set)',
35
+ multiple: true,
36
+ }),
37
+ override: core_1.Flags.string({
38
+ description: 'Permission override "permission.key=allow|deny|inherit" (repeatable; when passed, replaces the overrides)',
39
+ multiple: true,
40
+ }),
29
41
  };
30
42
  async run() {
31
43
  const { args, flags } = await this.parse(MembersSetAccess);
44
+ // Scope is always sent (full-replace / clear). Roles & overrides only when their flag is present,
45
+ // so this mirrors the backend `params.key?`-gated apply and never clears what the caller omitted.
32
46
  const body = {
33
47
  group_ids: await this.resolveAll(flags.group, (v) => this.resolveGroupId(v)),
34
48
  project_ids: await this.resolveAll(flags.project, (v) => this.resolveProjectId(v)),
35
49
  };
50
+ if (flags['role-id'] !== undefined) {
51
+ body.role_ids = await this.resolveAll(flags['role-id'], (v) => this.resolveRoleId(v));
52
+ }
53
+ if (flags.override !== undefined) {
54
+ body.overrides = this.parseOverrides(flags.override);
55
+ }
36
56
  const res = await this.api.put(`/cli/v1/members/${encodeURIComponent(args.id)}/access`, body);
37
57
  if (!this.jsonEnabled()) {
38
58
  this.log('Member access updated:');
@@ -40,5 +60,19 @@ class MembersSetAccess extends base_1.BaseCommand {
40
60
  }
41
61
  return res;
42
62
  }
63
+ /** Parse repeated `key=allow|deny|inherit` entries into a `{key: value}` map; usage error on a bad entry. */
64
+ parseOverrides(entries) {
65
+ const out = {};
66
+ for (const entry of entries) {
67
+ const eq = entry.indexOf('=');
68
+ const key = eq === -1 ? '' : entry.slice(0, eq).trim();
69
+ const value = eq === -1 ? '' : entry.slice(eq + 1).trim();
70
+ if (!key || !['allow', 'deny', 'inherit'].includes(value)) {
71
+ this.error(`Invalid --override "${entry}". Use "permission.key=allow|deny|inherit".`, { exit: 2 });
72
+ }
73
+ out[key] = value;
74
+ }
75
+ return out;
76
+ }
43
77
  }
44
78
  exports.default = MembersSetAccess;
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class MembersUpdate extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ name: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ email: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ handle: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<unknown>;
14
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ const output_1 = require("../../lib/output");
6
+ class MembersUpdate extends base_1.BaseCommand {
7
+ // Update the member's account profile (name/email/handle). email/handle are GLOBAL credentials.
8
+ // Only the flags you pass are sent. The backend gates `members.edit` and protects privileged targets
9
+ // (owner/god) from non-privileged actors. The arg is the MEMBERSHIP id (like set-role/set-access).
10
+ static description = "Update a member's profile: name, email, handle (requires members.edit)";
11
+ static examples = [
12
+ '<%= config.bin %> members update <membership-id> --name "Ada Lovelace"',
13
+ '<%= config.bin %> members update <membership-id> --email ada@acme.test --handle ada',
14
+ ];
15
+ static args = {
16
+ id: core_1.Args.string({ description: 'Membership id', required: true }),
17
+ };
18
+ static flags = {
19
+ name: core_1.Flags.string({ description: 'New display name' }),
20
+ email: core_1.Flags.string({ description: 'New email (global credential)' }),
21
+ handle: core_1.Flags.string({ description: 'New handle (global; a-z, 0-9, underscore)' }),
22
+ };
23
+ async run() {
24
+ const { args, flags } = await this.parse(MembersUpdate);
25
+ const body = {};
26
+ if (flags.name !== undefined)
27
+ body.name = flags.name;
28
+ if (flags.email !== undefined)
29
+ body.email = flags.email;
30
+ if (flags.handle !== undefined)
31
+ body.handle = flags.handle;
32
+ const res = await this.api.put(`/cli/v1/members/${encodeURIComponent(args.id)}`, body);
33
+ if (!this.jsonEnabled()) {
34
+ this.log('Member updated:');
35
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
36
+ }
37
+ return res;
38
+ }
39
+ }
40
+ exports.default = MembersUpdate;
@@ -0,0 +1,13 @@
1
+ import { BaseCommand } from '../../../base';
2
+ export default class MonitorsAnnouncementsClear extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ monitor: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ confirm: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ };
12
+ run(): Promise<unknown>;
13
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../../base");
5
+ class MonitorsAnnouncementsClear extends base_1.BaseCommand {
6
+ static description = 'Remove the status page announcement banner for a monitor';
7
+ static examples = ['<%= config.bin %> monitors announcements clear <monitor-id> --project acme-api --confirm'];
8
+ static args = {
9
+ monitor: core_1.Args.string({ description: 'Monitor id', required: true }),
10
+ };
11
+ static flags = {
12
+ ...base_1.projectFlag,
13
+ confirm: core_1.Flags.boolean({ description: 'Required: confirm the removal' }),
14
+ };
15
+ async run() {
16
+ const { args, flags } = await this.parse(MonitorsAnnouncementsClear);
17
+ if (!flags.confirm) {
18
+ this.error('Refusing to clear the announcement without --confirm.', { exit: 2 });
19
+ }
20
+ const projectId = await this.resolveProjectId(flags.project);
21
+ await this.api.delete(`/cli/v1/projects/${encodeURIComponent(projectId)}/monitors/${encodeURIComponent(args.monitor)}/announcement`);
22
+ if (!this.jsonEnabled())
23
+ this.log(`Cleared announcement for monitor ${args.monitor}`);
24
+ return { cleared: args.monitor };
25
+ }
26
+ }
27
+ exports.default = MonitorsAnnouncementsClear;
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../../base';
2
+ export default class MonitorsAnnouncementsSet extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ monitor: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ level: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ message: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ 'starts-at': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ 'ends-at': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ active: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
15
+ };
16
+ run(): Promise<unknown>;
17
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../../base");
5
+ const output_1 = require("../../../lib/output");
6
+ class MonitorsAnnouncementsSet extends base_1.BaseCommand {
7
+ static description = 'Upsert the status page announcement banner for a monitor';
8
+ static examples = [
9
+ '<%= config.bin %> monitors announcements set <monitor-id> --project acme-api --level maintenance --message "Scheduled DB upgrade"',
10
+ '<%= config.bin %> monitors announcements set <monitor-id> -p acme-api --level warning --message "Degraded" --starts-at 2026-07-10T09:00:00Z --ends-at 2026-07-10T11:00:00Z --active',
11
+ ];
12
+ static args = {
13
+ monitor: core_1.Args.string({ description: 'Monitor id', required: true }),
14
+ };
15
+ static flags = {
16
+ ...base_1.projectFlag,
17
+ level: core_1.Flags.string({ description: 'Banner level', options: ['info', 'maintenance', 'warning'] }),
18
+ message: core_1.Flags.string({ description: 'Banner message' }),
19
+ 'starts-at': core_1.Flags.string({ description: 'Start time (ISO 8601)' }),
20
+ 'ends-at': core_1.Flags.string({ description: 'End time (ISO 8601)' }),
21
+ active: core_1.Flags.boolean({ allowNo: true, description: 'Whether the banner is active' }),
22
+ };
23
+ async run() {
24
+ const { args, flags } = await this.parse(MonitorsAnnouncementsSet);
25
+ const projectId = await this.resolveProjectId(flags.project);
26
+ const body = {};
27
+ if (flags.level !== undefined)
28
+ body.level = flags.level;
29
+ if (flags.message !== undefined)
30
+ body.message = flags.message;
31
+ if (flags['starts-at'] !== undefined)
32
+ body.starts_at = flags['starts-at'];
33
+ if (flags['ends-at'] !== undefined)
34
+ body.ends_at = flags['ends-at'];
35
+ if (flags.active !== undefined)
36
+ body.active = flags.active;
37
+ const res = await this.api.put(`/cli/v1/projects/${encodeURIComponent(projectId)}/monitors/${encodeURIComponent(args.monitor)}/announcement`, body);
38
+ if (!this.jsonEnabled()) {
39
+ this.log('Announcement saved:');
40
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
41
+ }
42
+ return res;
43
+ }
44
+ }
45
+ exports.default = MonitorsAnnouncementsSet;
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../../base';
2
+ export default class MonitorsAnnouncementsShow extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ monitor: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<unknown>;
12
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../../base");
5
+ const output_1 = require("../../../lib/output");
6
+ class MonitorsAnnouncementsShow extends base_1.BaseCommand {
7
+ static description = 'Show the status page announcement banner for a monitor (null if none)';
8
+ static examples = ['<%= config.bin %> monitors announcements show <monitor-id> --project acme-api'];
9
+ static args = {
10
+ monitor: core_1.Args.string({ description: 'Monitor id', required: true }),
11
+ };
12
+ static flags = { ...base_1.projectFlag };
13
+ async run() {
14
+ const { args, flags } = await this.parse(MonitorsAnnouncementsShow);
15
+ const projectId = await this.resolveProjectId(flags.project);
16
+ const res = await this.api.get(`/cli/v1/projects/${encodeURIComponent(projectId)}/monitors/${encodeURIComponent(args.monitor)}/announcement`);
17
+ if (!this.jsonEnabled()) {
18
+ const announcement = res.data;
19
+ this.log(announcement ? (0, output_1.renderRecord)(announcement) : 'No announcement set.');
20
+ }
21
+ return res;
22
+ }
23
+ }
24
+ exports.default = MonitorsAnnouncementsShow;
@@ -11,6 +11,7 @@ export default class MonitorsCreate extends BaseCommand {
11
11
  'timeout-seconds': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
12
  'expected-body-keyword': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
13
  'ssl-expiry-warn-days': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
+ 'group-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
15
  project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
15
16
  };
16
17
  run(): Promise<unknown>;
@@ -19,6 +19,7 @@ class MonitorsCreate extends base_1.BaseCommand {
19
19
  'timeout-seconds': core_1.Flags.integer({ description: 'Request timeout in seconds' }),
20
20
  'expected-body-keyword': core_1.Flags.string({ description: 'Keyword expected in the response body (check fails without it; not with HEAD)' }),
21
21
  'ssl-expiry-warn-days': core_1.Flags.integer({ description: 'Alert when the TLS certificate has at most N days left (empty = off)' }),
22
+ 'group-id': core_1.Flags.string({ description: 'Uptime group id to attach the monitor to (org-level)' }),
22
23
  };
23
24
  async run() {
24
25
  const { flags } = await this.parse(MonitorsCreate);
@@ -38,6 +39,8 @@ class MonitorsCreate extends base_1.BaseCommand {
38
39
  body.expected_body_keyword = flags['expected-body-keyword'];
39
40
  if (flags['ssl-expiry-warn-days'] !== undefined)
40
41
  body.ssl_expiry_warn_days = flags['ssl-expiry-warn-days'];
42
+ if (flags['group-id'] !== undefined)
43
+ body.group_id = flags['group-id'];
41
44
  const res = await this.api.post(`/cli/v1/projects/${encodeURIComponent(projectId)}/monitors`, body);
42
45
  if (!this.jsonEnabled()) {
43
46
  this.log('Monitor created:');
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from '../../../base';
2
+ export default class MonitorsIncidentsDelete extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ monitor: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ incident: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ confirm: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<unknown>;
14
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../../base");
5
+ class MonitorsIncidentsDelete extends base_1.BaseCommand {
6
+ static description = 'Delete an uptime incident (and its grouped windows; irreversible)';
7
+ static examples = ['<%= config.bin %> monitors incidents delete <monitor-id> <incident-id> --project acme-api --confirm'];
8
+ static args = {
9
+ monitor: core_1.Args.string({ description: 'Monitor id', required: true }),
10
+ incident: core_1.Args.string({ description: 'Incident id (primary)', required: true }),
11
+ };
12
+ static flags = {
13
+ ...base_1.projectFlag,
14
+ confirm: core_1.Flags.boolean({ description: 'Required: confirm the deletion' }),
15
+ };
16
+ async run() {
17
+ const { args, flags } = await this.parse(MonitorsIncidentsDelete);
18
+ if (!flags.confirm) {
19
+ this.error('Refusing to delete without --confirm.', { exit: 2 });
20
+ }
21
+ const projectId = await this.resolveProjectId(flags.project);
22
+ await this.api.delete(`/cli/v1/projects/${encodeURIComponent(projectId)}/monitors/${encodeURIComponent(args.monitor)}/incidents/${encodeURIComponent(args.incident)}`);
23
+ if (!this.jsonEnabled())
24
+ this.log(`Deleted incident ${args.incident}`);
25
+ return { deleted: args.incident };
26
+ }
27
+ }
28
+ exports.default = MonitorsIncidentsDelete;
@@ -0,0 +1,15 @@
1
+ import { BaseCommand } from '../../../base';
2
+ export default class MonitorsIncidentsGroup extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ monitor: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ incident: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ phase: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ body: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<unknown>;
15
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../../base");
5
+ const output_1 = require("../../../lib/output");
6
+ class MonitorsIncidentsGroup extends base_1.BaseCommand {
7
+ static description = 'Unify incidents of a monitor and post the first narration step';
8
+ static examples = [
9
+ '<%= config.bin %> monitors incidents group <monitor-id> --project acme-api --incident <id-a> --incident <id-b> --phase investigating --body "Looking into it"',
10
+ ];
11
+ static args = {
12
+ monitor: core_1.Args.string({ description: 'Monitor id', required: true }),
13
+ };
14
+ static flags = {
15
+ ...base_1.projectFlag,
16
+ incident: core_1.Flags.string({ description: 'Incident id to unify (repeatable)', multiple: true, required: true }),
17
+ phase: core_1.Flags.string({
18
+ description: 'Timeline phase of the first step',
19
+ options: ['detected', 'investigating', 'fixing', 'monitoring', 'resolved'],
20
+ required: true,
21
+ }),
22
+ body: core_1.Flags.string({ description: 'Text of the first narration step' }),
23
+ };
24
+ async run() {
25
+ const { args, flags } = await this.parse(MonitorsIncidentsGroup);
26
+ const projectId = await this.resolveProjectId(flags.project);
27
+ const body = { incident_ids: flags.incident, phase: flags.phase };
28
+ if (flags.body !== undefined)
29
+ body.body = flags.body;
30
+ const res = await this.api.post(`/cli/v1/projects/${encodeURIComponent(projectId)}/monitors/${encodeURIComponent(args.monitor)}/incidents/group`, body);
31
+ if (!this.jsonEnabled()) {
32
+ this.log('Incidents grouped:');
33
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
34
+ }
35
+ return res;
36
+ }
37
+ }
38
+ exports.default = MonitorsIncidentsGroup;
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from '../../../base';
2
+ export default class MonitorsIncidentsUngroup extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ monitor: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ incident: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ keep: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<unknown>;
14
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../../base");
5
+ class MonitorsIncidentsUngroup extends base_1.BaseCommand {
6
+ static description = 'Dissolve an incident grouping (grouped windows become separate again)';
7
+ static examples = [
8
+ '<%= config.bin %> monitors incidents ungroup <monitor-id> <incident-id> --project acme-api',
9
+ '<%= config.bin %> monitors incidents ungroup <monitor-id> <incident-id> -p acme-api --keep <window-id>',
10
+ ];
11
+ static args = {
12
+ monitor: core_1.Args.string({ description: 'Monitor id', required: true }),
13
+ incident: core_1.Args.string({ description: 'Incident id (primary)', required: true }),
14
+ };
15
+ static flags = {
16
+ ...base_1.projectFlag,
17
+ keep: core_1.Flags.string({ description: 'Id of the window that keeps the narration status' }),
18
+ };
19
+ async run() {
20
+ const { args, flags } = await this.parse(MonitorsIncidentsUngroup);
21
+ const projectId = await this.resolveProjectId(flags.project);
22
+ const body = {};
23
+ if (flags.keep !== undefined)
24
+ body.keep_incident_id = flags.keep;
25
+ await this.api.delete(`/cli/v1/projects/${encodeURIComponent(projectId)}/monitors/${encodeURIComponent(args.monitor)}/incidents/${encodeURIComponent(args.incident)}/group`, { body });
26
+ if (!this.jsonEnabled())
27
+ this.log(`Ungrouped incident ${args.incident}`);
28
+ return { ungrouped: args.incident };
29
+ }
30
+ }
31
+ exports.default = MonitorsIncidentsUngroup;
@@ -0,0 +1,15 @@
1
+ import { BaseCommand } from '../../../base';
2
+ export default class MonitorsIncidentsUpdateAdd extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ monitor: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ incident: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ phase: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ body: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<unknown>;
15
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../../base");
5
+ const output_1 = require("../../../lib/output");
6
+ class MonitorsIncidentsUpdateAdd extends base_1.BaseCommand {
7
+ static description = 'Add a timeline step to a narrated incident';
8
+ static examples = [
9
+ '<%= config.bin %> monitors incidents update-add <monitor-id> <incident-id> --project acme-api --phase monitoring --body "Recovering"',
10
+ ];
11
+ static args = {
12
+ monitor: core_1.Args.string({ description: 'Monitor id', required: true }),
13
+ incident: core_1.Args.string({ description: 'Incident id (primary)', required: true }),
14
+ };
15
+ static flags = {
16
+ ...base_1.projectFlag,
17
+ phase: core_1.Flags.string({
18
+ description: 'Timeline phase of the step',
19
+ options: ['detected', 'investigating', 'fixing', 'monitoring', 'resolved'],
20
+ required: true,
21
+ }),
22
+ body: core_1.Flags.string({ description: 'Text of the step' }),
23
+ };
24
+ async run() {
25
+ const { args, flags } = await this.parse(MonitorsIncidentsUpdateAdd);
26
+ const projectId = await this.resolveProjectId(flags.project);
27
+ const body = { phase: flags.phase };
28
+ if (flags.body !== undefined)
29
+ body.body = flags.body;
30
+ const res = await this.api.post(`/cli/v1/projects/${encodeURIComponent(projectId)}/monitors/${encodeURIComponent(args.monitor)}/incidents/${encodeURIComponent(args.incident)}/updates`, body);
31
+ if (!this.jsonEnabled()) {
32
+ this.log('Incident update added:');
33
+ this.log((0, output_1.renderRecord)(res.data ?? {}));
34
+ }
35
+ return res;
36
+ }
37
+ }
38
+ exports.default = MonitorsIncidentsUpdateAdd;
@@ -0,0 +1,15 @@
1
+ import { BaseCommand } from '../../../base';
2
+ export default class MonitorsIncidentsUpdateDelete extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ monitor: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ incident: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ update: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
9
+ };
10
+ static flags: {
11
+ confirm: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<unknown>;
15
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../../base");
5
+ class MonitorsIncidentsUpdateDelete extends base_1.BaseCommand {
6
+ static description = 'Delete a timeline step from a narrated incident (irreversible)';
7
+ static examples = [
8
+ '<%= config.bin %> monitors incidents update-delete <monitor-id> <incident-id> <update-id> --project acme-api --confirm',
9
+ ];
10
+ static args = {
11
+ monitor: core_1.Args.string({ description: 'Monitor id', required: true }),
12
+ incident: core_1.Args.string({ description: 'Incident id (primary)', required: true }),
13
+ update: core_1.Args.string({ description: 'Timeline step id', required: true }),
14
+ };
15
+ static flags = {
16
+ ...base_1.projectFlag,
17
+ confirm: core_1.Flags.boolean({ description: 'Required: confirm the deletion' }),
18
+ };
19
+ async run() {
20
+ const { args, flags } = await this.parse(MonitorsIncidentsUpdateDelete);
21
+ if (!flags.confirm) {
22
+ this.error('Refusing to delete without --confirm.', { exit: 2 });
23
+ }
24
+ const projectId = await this.resolveProjectId(flags.project);
25
+ await this.api.delete(`/cli/v1/projects/${encodeURIComponent(projectId)}/monitors/${encodeURIComponent(args.monitor)}/incidents/${encodeURIComponent(args.incident)}/updates/${encodeURIComponent(args.update)}`);
26
+ if (!this.jsonEnabled())
27
+ this.log(`Deleted incident update ${args.update}`);
28
+ return { deleted: args.update };
29
+ }
30
+ }
31
+ exports.default = MonitorsIncidentsUpdateDelete;
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../base';
2
+ export default class MonitorsPublish extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ project: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ };
11
+ run(): Promise<unknown>;
12
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_1 = require("../../base");
5
+ class MonitorsPublish extends base_1.BaseCommand {
6
+ static description = 'Publish the public status page for a monitor (opt-in)';
7
+ static examples = ['<%= config.bin %> monitors publish <monitor-id> --project acme-api'];
8
+ static args = {
9
+ id: core_1.Args.string({ description: 'Monitor id', required: true }),
10
+ };
11
+ static flags = { ...base_1.projectFlag };
12
+ async run() {
13
+ const { args, flags } = await this.parse(MonitorsPublish);
14
+ const projectId = await this.resolveProjectId(flags.project);
15
+ const res = await this.api.put(`/cli/v1/projects/${encodeURIComponent(projectId)}/monitors/${encodeURIComponent(args.id)}/publication`);
16
+ if (!this.jsonEnabled())
17
+ this.log(`Published status page for monitor ${args.id}`);
18
+ return res;
19
+ }
20
+ }
21
+ exports.default = MonitorsPublish;