@cat-indev/catops-cli 0.0.1-alpha.10

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 (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1254 -0
  3. package/dist/bin/devops-cli.d.ts +2 -0
  4. package/dist/bin/devops-cli.js +132 -0
  5. package/dist/bin/devops-cli.js.map +1 -0
  6. package/dist/core/Context.d.ts +56 -0
  7. package/dist/core/Context.js +197 -0
  8. package/dist/core/Context.js.map +1 -0
  9. package/dist/core/Menu.d.ts +23 -0
  10. package/dist/core/Menu.js +160 -0
  11. package/dist/core/Menu.js.map +1 -0
  12. package/dist/core/Notifier.d.ts +42 -0
  13. package/dist/core/Notifier.js +128 -0
  14. package/dist/core/Notifier.js.map +1 -0
  15. package/dist/core/classifiers.d.ts +45 -0
  16. package/dist/core/classifiers.js +90 -0
  17. package/dist/core/classifiers.js.map +1 -0
  18. package/dist/core/logger.d.ts +8 -0
  19. package/dist/core/logger.js +37 -0
  20. package/dist/core/logger.js.map +1 -0
  21. package/dist/core/messages.d.ts +102 -0
  22. package/dist/core/messages.js +163 -0
  23. package/dist/core/messages.js.map +1 -0
  24. package/dist/core/prompt.d.ts +10 -0
  25. package/dist/core/prompt.js +87 -0
  26. package/dist/core/prompt.js.map +1 -0
  27. package/dist/core/senders.d.ts +27 -0
  28. package/dist/core/senders.js +109 -0
  29. package/dist/core/senders.js.map +1 -0
  30. package/dist/core/types.d.ts +135 -0
  31. package/dist/core/types.js +33 -0
  32. package/dist/core/types.js.map +1 -0
  33. package/dist/index.d.ts +20 -0
  34. package/dist/index.js +66 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/services/ansible.d.ts +12 -0
  37. package/dist/services/ansible.js +35 -0
  38. package/dist/services/ansible.js.map +1 -0
  39. package/dist/services/archive.d.ts +4 -0
  40. package/dist/services/archive.js +16 -0
  41. package/dist/services/archive.js.map +1 -0
  42. package/dist/services/argocd.d.ts +23 -0
  43. package/dist/services/argocd.js +48 -0
  44. package/dist/services/argocd.js.map +1 -0
  45. package/dist/services/az.d.ts +38 -0
  46. package/dist/services/az.js +51 -0
  47. package/dist/services/az.js.map +1 -0
  48. package/dist/services/azdo-api.d.ts +213 -0
  49. package/dist/services/azdo-api.js +247 -0
  50. package/dist/services/azdo-api.js.map +1 -0
  51. package/dist/services/azdo.d.ts +13 -0
  52. package/dist/services/azdo.js +57 -0
  53. package/dist/services/azdo.js.map +1 -0
  54. package/dist/services/docker.d.ts +21 -0
  55. package/dist/services/docker.js +36 -0
  56. package/dist/services/docker.js.map +1 -0
  57. package/dist/services/git.d.ts +9 -0
  58. package/dist/services/git.js +36 -0
  59. package/dist/services/git.js.map +1 -0
  60. package/dist/services/helm.d.ts +4 -0
  61. package/dist/services/helm.js +24 -0
  62. package/dist/services/helm.js.map +1 -0
  63. package/dist/services/http-types.d.ts +57 -0
  64. package/dist/services/http-types.js +3 -0
  65. package/dist/services/http-types.js.map +1 -0
  66. package/dist/services/http.d.ts +64 -0
  67. package/dist/services/http.js +288 -0
  68. package/dist/services/http.js.map +1 -0
  69. package/dist/services/index.d.ts +37 -0
  70. package/dist/services/index.js +88 -0
  71. package/dist/services/index.js.map +1 -0
  72. package/dist/services/kubectl.d.ts +137 -0
  73. package/dist/services/kubectl.js +271 -0
  74. package/dist/services/kubectl.js.map +1 -0
  75. package/dist/services/npm.d.ts +5 -0
  76. package/dist/services/npm.js +20 -0
  77. package/dist/services/npm.js.map +1 -0
  78. package/dist/services/oc.d.ts +156 -0
  79. package/dist/services/oc.js +309 -0
  80. package/dist/services/oc.js.map +1 -0
  81. package/dist/services/pipeline.d.ts +116 -0
  82. package/dist/services/pipeline.js +474 -0
  83. package/dist/services/pipeline.js.map +1 -0
  84. package/dist/services/shell.d.ts +28 -0
  85. package/dist/services/shell.js +206 -0
  86. package/dist/services/shell.js.map +1 -0
  87. package/dist/services/tekton.d.ts +16 -0
  88. package/dist/services/tekton.js +46 -0
  89. package/dist/services/tekton.js.map +1 -0
  90. package/dist/services/terraform.d.ts +31 -0
  91. package/dist/services/terraform.js +63 -0
  92. package/dist/services/terraform.js.map +1 -0
  93. package/package.json +58 -0
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ask = ask;
37
+ exports.confirm = confirm;
38
+ exports.select = select;
39
+ const readline = __importStar(require("readline"));
40
+ function createInterface() {
41
+ return readline.createInterface({
42
+ input: process.stdin,
43
+ output: process.stdout
44
+ });
45
+ }
46
+ async function ask(question, options = {}) {
47
+ const { defaultValue } = options;
48
+ const rl = createInterface();
49
+ const suffix = defaultValue !== undefined
50
+ ? ` (${defaultValue}) `
51
+ : " ";
52
+ try {
53
+ const answer = await new Promise(resolve => {
54
+ rl.question(`${question}${suffix}`, resolve);
55
+ });
56
+ return answer.trim() || defaultValue;
57
+ }
58
+ finally {
59
+ rl.close();
60
+ }
61
+ }
62
+ async function confirm(question, options = {}) {
63
+ const { defaultValue = true } = options;
64
+ const hint = defaultValue ? "Y/n" : "y/N";
65
+ const answer = await ask(`${question} [${hint}]`);
66
+ if (!answer)
67
+ return defaultValue;
68
+ return ["y", "yes", "s", "si", "sí"].includes(answer.toLowerCase());
69
+ }
70
+ async function select(title, choices) {
71
+ const entries = Array.isArray(choices)
72
+ ? choices.map((label, i) => [String(i), label])
73
+ : Object.entries(choices);
74
+ console.log(`\n${title}`);
75
+ entries.forEach(([, label], index) => {
76
+ console.log(` ${index + 1}) ${label}`);
77
+ });
78
+ const answer = await ask("Selecciona una opción:");
79
+ const index = parseInt(answer ?? "", 10) - 1;
80
+ const entry = entries[index];
81
+ if (Number.isNaN(index) || !entry) {
82
+ console.log("Opción inválida, intenta de nuevo.");
83
+ return select(title, choices);
84
+ }
85
+ return entry[0];
86
+ }
87
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/core/prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,kBAsBC;AAMD,0BAYC;AAID,wBAyBC;AAlFD,mDAAqC;AAErC,SAAS,eAAe;IACpB,OAAO,QAAQ,CAAC,eAAe,CAAC;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACzB,CAAC,CAAC;AACP,CAAC;AAMM,KAAK,UAAU,GAAG,CAAC,QAAgB,EAAE,UAAsB,EAAE;IAEhE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEjC,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IAE7B,MAAM,MAAM,GAAG,YAAY,KAAK,SAAS;QACrC,CAAC,CAAC,KAAK,YAAY,IAAI;QACvB,CAAC,CAAC,GAAG,CAAC;IAEV,IAAI,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;YAC/C,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC;IAEzC,CAAC;YAAS,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AAEL,CAAC;AAMM,KAAK,UAAU,OAAO,CAAC,QAAgB,EAAE,UAA0B,EAAE;IAExE,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAExC,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,QAAQ,KAAK,IAAI,GAAG,CAAC,CAAC;IAElD,IAAI,CAAC,MAAM;QAAE,OAAO,YAAY,CAAC;IAEjC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AAExE,CAAC;AAIM,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,OAAsB;IAE9D,MAAM,OAAO,GAAuB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QACtD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAE1B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE7B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { NotificationEvent, Sender } from "./types";
2
+ export declare function log(): Sender;
3
+ export interface FileSenderOptions {
4
+ path: string;
5
+ }
6
+ export declare function file({ path }: FileSenderOptions): Sender;
7
+ export interface HttpSenderOptions {
8
+ url: string;
9
+ method?: string;
10
+ headers?: Record<string, string>;
11
+ /** Transforma el evento antes de enviarlo. Por defecto se manda tal cual. */
12
+ formatBody?: (event: NotificationEvent) => Promise<unknown> | unknown;
13
+ }
14
+ export declare function http({ url, method, headers, formatBody }: HttpSenderOptions): Sender;
15
+ export interface WebhookSenderOptions {
16
+ url: string;
17
+ headers?: Record<string, string>;
18
+ /** Formatea el payload del webhook. Por defecto: { text: event.message }. */
19
+ format?: (event: NotificationEvent) => Promise<unknown> | unknown;
20
+ }
21
+ export declare function webhook({ url, headers, format }: WebhookSenderOptions): Sender;
22
+ export interface WebSocketSenderOptions {
23
+ url: string;
24
+ /** Milisegundos a esperar antes de abortar. Default: 5000 */
25
+ timeout?: number;
26
+ }
27
+ export declare function websocket({ url, timeout }: WebSocketSenderOptions): Sender;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.log = log;
37
+ exports.file = file;
38
+ exports.http = http;
39
+ exports.webhook = webhook;
40
+ exports.websocket = websocket;
41
+ const fs = __importStar(require("fs/promises"));
42
+ const logger_1 = require("./logger");
43
+ // ---------------------------------------------------------------------------
44
+ // log — usa el logger interno, sin red ni disco
45
+ // ---------------------------------------------------------------------------
46
+ function log() {
47
+ return (event) => {
48
+ if (event.type === "error") {
49
+ logger_1.logger.error(`[${event.area ?? "?"}] ${event.taskId}: ${event.message}`);
50
+ }
51
+ else {
52
+ logger_1.logger.success(`${event.taskId}: ${event.message}`);
53
+ }
54
+ };
55
+ }
56
+ function file({ path }) {
57
+ return async (event) => {
58
+ await fs.appendFile(path, `${JSON.stringify(event)}\n`, "utf8");
59
+ };
60
+ }
61
+ function http({ url, method = "POST", headers = {}, formatBody }) {
62
+ return async (event) => {
63
+ const body = formatBody ? await formatBody(event) : event;
64
+ const response = await fetch(url, {
65
+ method,
66
+ headers: {
67
+ "Content-Type": "application/json",
68
+ ...headers
69
+ },
70
+ body: JSON.stringify(body)
71
+ });
72
+ if (!response.ok) {
73
+ throw new Error(`http sender: ${url} respondió ${response.status} ${response.statusText}`);
74
+ }
75
+ };
76
+ }
77
+ function webhook({ url, headers, format }) {
78
+ const formatBody = format ?? ((event) => ({
79
+ text: event.type === "error"
80
+ ? `❌ [${event.area}] ${event.taskId}: ${event.message}`
81
+ : `✅ ${event.taskId}: ${event.message}`
82
+ }));
83
+ return http({ url, headers, formatBody });
84
+ }
85
+ function websocket({ url, timeout = 5000 }) {
86
+ return (event) => new Promise((resolve, reject) => {
87
+ if (typeof WebSocket === "undefined") {
88
+ reject(new Error("El global WebSocket no está disponible en este runtime de Node. " +
89
+ "Usa Node >=22, o instala 'ws' en tu proyecto y arma tu propio sender con él."));
90
+ return;
91
+ }
92
+ const socket = new WebSocket(url);
93
+ const timer = setTimeout(() => {
94
+ socket.close();
95
+ reject(new Error(`websocket sender: timeout conectando a ${url}`));
96
+ }, timeout);
97
+ socket.addEventListener("open", () => {
98
+ socket.send(JSON.stringify(event));
99
+ clearTimeout(timer);
100
+ socket.close();
101
+ resolve();
102
+ });
103
+ socket.addEventListener("error", () => {
104
+ clearTimeout(timer);
105
+ reject(new Error(`websocket sender: error conectando a ${url}`));
106
+ });
107
+ });
108
+ }
109
+ //# sourceMappingURL=senders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"senders.js","sourceRoot":"","sources":["../../src/core/senders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ import type { Context } from "./Context";
2
+ export interface ExecResult {
3
+ code: number | null;
4
+ stdout: string;
5
+ stderr: string;
6
+ dryRun?: boolean;
7
+ timedOut?: boolean;
8
+ /** Comando ejecutado, útil para clasificar errores por área de TI. */
9
+ command?: string;
10
+ args?: string[];
11
+ }
12
+ export interface ExecOptions {
13
+ /** Número total de intentos (1 = sin retry). Default: 1 */
14
+ retry?: number;
15
+ /** Milisegundos de espera entre reintentos. Default: 1000 */
16
+ retryDelay?: number;
17
+ /** Milisegundos antes de matar el proceso con SIGTERM. Default: 0 (sin límite) */
18
+ timeout?: number;
19
+ /** Si es true, solo loguea el comando y no lo ejecuta. Default: false */
20
+ dryRun?: boolean;
21
+ /** Si se quiere ejecutar comandos en el shell del sistema directamente. Default: false */
22
+ shell?: boolean;
23
+ }
24
+ /**
25
+ * Error generado por `ctx.wrap()` cuando un servicio falla. Enriches el error
26
+ * original con el nombre del servicio, el método invocado y los argumentos,
27
+ * para que classifiers y formatters puedan resolver el área y el mensaje
28
+ * humano a partir de esa metadata.
29
+ *
30
+ * La propiedad `cause` contiene el error original (puede ser un ExecResult,
31
+ * un HttpError, un Error nativo, etc.).
32
+ */
33
+ export declare class ServiceError extends Error {
34
+ readonly service: string;
35
+ readonly method: string;
36
+ readonly args: unknown[];
37
+ readonly cause: unknown;
38
+ constructor(service: string, method: string, args: unknown[], cause: unknown);
39
+ }
40
+ export type SuccessCallback<T = unknown> = (result: T, ctx: Context) => unknown | Promise<unknown>;
41
+ export type ErrorCallback = (error: unknown, ctx: Context) => unknown | Promise<unknown>;
42
+ export interface TaskHooks<T = unknown> {
43
+ onSuccess?: SuccessCallback<T>;
44
+ onError?: ErrorCallback;
45
+ }
46
+ export interface NotificationEvent {
47
+ type: "success" | "error";
48
+ /** Id de la tarea (taskId de ctx.run(), o el label del item de menú). */
49
+ taskId: string;
50
+ /** Área de TI a la que se enrutó el error (solo en eventos de error). */
51
+ area?: string;
52
+ error?: unknown;
53
+ result?: unknown;
54
+ message: string;
55
+ timestamp: string;
56
+ /** Servicio que falló (solo en errores de servicios envueltos con ctx.wrap). */
57
+ service?: string;
58
+ /** Método del servicio que falló. */
59
+ method?: string;
60
+ /** Argumentos pasados al método. */
61
+ args?: unknown[];
62
+ }
63
+ /**
64
+ * Determina a qué área de TI corresponde un error. Devuelve el nombre del
65
+ * área (usado luego para buscar los senders registrados en esa área vía
66
+ * notifier.channel(area, ...senders)), o `undefined` si esta función no
67
+ * sabe clasificar ese error (se prueba el siguiente classifier registrado).
68
+ */
69
+ export type ErrorClassifier = (error: unknown, ctx: Context) => string | undefined;
70
+ /** Un sender recibe el evento ya armado y lo entrega por el medio que sea. */
71
+ export type Sender = (event: NotificationEvent) => unknown | Promise<unknown>;
72
+ /** Una task ejecutable de un item de menú. Recibe el Context activo. */
73
+ export type MenuTask = (ctx: Context) => unknown | Promise<unknown>;
74
+ /**
75
+ * Forma "larga" de un item de menú, usada cuando necesitas asociarle un
76
+ * selector (para poder elegirlo automáticamente vía flag), callbacks de
77
+ * éxito/error, o ambos, además de su acción o submenú.
78
+ *
79
+ * Ejemplo:
80
+ * Build: {
81
+ * selector: "build",
82
+ * action: async (ctx) => {...},
83
+ * onSuccess: (result, ctx) => {...},
84
+ * onError: (error, ctx) => {...}
85
+ * }
86
+ * Docker: { selector: "docker", menu: dockerMenu }
87
+ */
88
+ export interface MenuOptionWithSelector {
89
+ /** Valor que debe matchear el flag definido en "flag-selector" del menú padre. */
90
+ selector?: string;
91
+ /** Task a ejecutar si este item es una hoja. */
92
+ action?: MenuTask;
93
+ /** Submenú a renderizar si este item lleva a otro nivel. */
94
+ menu?: MenuDefinition;
95
+ /** Se llama si `action` resuelve exitosamente. */
96
+ onSuccess?: SuccessCallback;
97
+ /** Se llama si `action` lanza un error (además de reportarse al notifier). */
98
+ onError?: ErrorCallback;
99
+ }
100
+ /**
101
+ * Valor de un item de menú. Puede ser:
102
+ * - una función (task directa, sin selector ni callbacks)
103
+ * - un MenuDefinition (submenú directo, sin selector)
104
+ * - un MenuOptionWithSelector (para poder asignarle selector y/o callbacks)
105
+ */
106
+ export type MenuOptionValue = MenuTask | MenuDefinition | MenuOptionWithSelector;
107
+ export interface MenuDefinition {
108
+ title: string;
109
+ /**
110
+ * Nombre del flag (con o sin "--") que, al recibir un valor que matchee
111
+ * el "selector" de alguno de los items, selecciona esa opción de forma
112
+ * automática y no interactiva.
113
+ *
114
+ * Ejemplo: "flag-selector": "--menu-selector"
115
+ * Uso: catops-cli --menu-selector=build
116
+ */
117
+ "flag-selector"?: string;
118
+ options: Record<string, MenuOptionValue>;
119
+ }
120
+ export interface ResolvedMenuEntry {
121
+ kind: "task" | "menu";
122
+ selector?: string;
123
+ run?: MenuTask;
124
+ menu?: MenuDefinition;
125
+ onSuccess?: SuccessCallback;
126
+ onError?: ErrorCallback;
127
+ }
128
+ /**
129
+ * Igual que ErrorClassifier, pero en vez de decidir el área, devuelve el
130
+ * mensaje humano que se va a reportar (reemplazando el stderr/mensaje crudo
131
+ * del error). Devuelve `undefined` si no sabe describir ese error (se
132
+ * prueba el siguiente formatter registrado, y si ninguno matchea se usa el
133
+ * mensaje crudo del error como antes).
134
+ */
135
+ export type ErrorMessageFormatter = (error: unknown, ctx: Context) => string | undefined;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServiceError = void 0;
4
+ // ---------------------------------------------------------------------------
5
+ // ServiceError — error enriquecido con metadata del servicio
6
+ // ---------------------------------------------------------------------------
7
+ /**
8
+ * Error generado por `ctx.wrap()` cuando un servicio falla. Enriches el error
9
+ * original con el nombre del servicio, el método invocado y los argumentos,
10
+ * para que classifiers y formatters puedan resolver el área y el mensaje
11
+ * humano a partir de esa metadata.
12
+ *
13
+ * La propiedad `cause` contiene el error original (puede ser un ExecResult,
14
+ * un HttpError, un Error nativo, etc.).
15
+ */
16
+ class ServiceError extends Error {
17
+ constructor(service, method, args, cause) {
18
+ const originalMessage = cause instanceof Error
19
+ ? cause.message
20
+ : cause?.message ?? String(cause);
21
+ super(`${service}.${method}: ${originalMessage}`);
22
+ this.name = "ServiceError";
23
+ this.service = service;
24
+ this.method = method;
25
+ this.args = args;
26
+ this.cause = cause;
27
+ if (cause instanceof Error && cause.stack) {
28
+ this.stack = `${this.message}\n\n--- Original stack ---\n${cause.stack}`;
29
+ }
30
+ }
31
+ }
32
+ exports.ServiceError = ServiceError;
33
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":";;;AA8BA,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAa,YAAa,SAAQ,KAAK;IAMnC,YAAY,OAAe,EAAE,MAAc,EAAE,IAAe,EAAE,KAAc;QACxE,MAAM,eAAe,GAAG,KAAK,YAAY,KAAK;YAC1C,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAE,KAA8B,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAEhE,KAAK,CAAC,GAAG,OAAO,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,OAAO,+BAA+B,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7E,CAAC;IACL,CAAC;CACJ;AAvBD,oCAuBC"}
@@ -0,0 +1,20 @@
1
+ export { Context } from "./core/Context";
2
+ export type { FlagValue } from "./core/Context";
3
+ export { Menu } from "./core/Menu";
4
+ export { logger } from "./core/logger";
5
+ export type { Logger } from "./core/logger";
6
+ export * as prompt from "./core/prompt";
7
+ export { services } from "./services";
8
+ export type { ServicesRegistry } from "./services";
9
+ export { PipelineRegistry, Pipeline, PipelineStage, PipelineJob, PipelineTask, PipelineResultsAccessor } from "./services/pipeline";
10
+ export type { PipelineConfig, PipelineStageConfig, PipelineJobConfig, PipelineTaskConfig, PipelineTaskBase, CallbackTaskConfig, PipelineRunResult, PipelineEntityStatus } from "./services/pipeline";
11
+ export { http, HttpService, HttpRegistry } from "./services/http";
12
+ export type { HttpMethod, HttpRequest, HttpResponse, HttpServiceConfig, RequestInterceptor, ResponseInterceptor, RequestContext, ResponseContext } from "./services/http-types";
13
+ export { AzureDevOpsApi } from "./services/azdo-api";
14
+ export type { AzureDevOpsApiConfig, AzdoRequestOptions, AzdoProject, AzdoGitRepository, AzdoGitBranch, AzdoGitCommitRef, AzdoGitAuthor, AzdoGitPullRequest, AzdoBuildDefinition, AzdoBuild, AzdoPipeline, AzdoWorkItem, AzdoListResponse } from "./services/azdo-api";
15
+ export { Notifier } from "./core/Notifier";
16
+ export * as senders from "./core/senders";
17
+ export * as classifiers from "./core/classifiers";
18
+ export * as messages from "./core/messages";
19
+ export type { ExecOptions, ExecResult, MenuTask, MenuOptionWithSelector, MenuOptionValue, MenuDefinition, ResolvedMenuEntry, TaskHooks, SuccessCallback, ErrorCallback, NotificationEvent, ErrorClassifier, ErrorMessageFormatter, Sender } from "./core/types";
20
+ export { ServiceError } from "./core/types";
package/dist/index.js ADDED
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ServiceError = exports.messages = exports.classifiers = exports.senders = exports.Notifier = exports.AzureDevOpsApi = exports.HttpRegistry = exports.HttpService = exports.http = exports.PipelineResultsAccessor = exports.PipelineTask = exports.PipelineJob = exports.PipelineStage = exports.Pipeline = exports.PipelineRegistry = exports.services = exports.prompt = exports.logger = exports.Menu = exports.Context = void 0;
37
+ var Context_1 = require("./core/Context");
38
+ Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return Context_1.Context; } });
39
+ var Menu_1 = require("./core/Menu");
40
+ Object.defineProperty(exports, "Menu", { enumerable: true, get: function () { return Menu_1.Menu; } });
41
+ var logger_1 = require("./core/logger");
42
+ Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
43
+ exports.prompt = __importStar(require("./core/prompt"));
44
+ var services_1 = require("./services");
45
+ Object.defineProperty(exports, "services", { enumerable: true, get: function () { return services_1.services; } });
46
+ var pipeline_1 = require("./services/pipeline");
47
+ Object.defineProperty(exports, "PipelineRegistry", { enumerable: true, get: function () { return pipeline_1.PipelineRegistry; } });
48
+ Object.defineProperty(exports, "Pipeline", { enumerable: true, get: function () { return pipeline_1.Pipeline; } });
49
+ Object.defineProperty(exports, "PipelineStage", { enumerable: true, get: function () { return pipeline_1.PipelineStage; } });
50
+ Object.defineProperty(exports, "PipelineJob", { enumerable: true, get: function () { return pipeline_1.PipelineJob; } });
51
+ Object.defineProperty(exports, "PipelineTask", { enumerable: true, get: function () { return pipeline_1.PipelineTask; } });
52
+ Object.defineProperty(exports, "PipelineResultsAccessor", { enumerable: true, get: function () { return pipeline_1.PipelineResultsAccessor; } });
53
+ var http_1 = require("./services/http");
54
+ Object.defineProperty(exports, "http", { enumerable: true, get: function () { return http_1.http; } });
55
+ Object.defineProperty(exports, "HttpService", { enumerable: true, get: function () { return http_1.HttpService; } });
56
+ Object.defineProperty(exports, "HttpRegistry", { enumerable: true, get: function () { return http_1.HttpRegistry; } });
57
+ var azdo_api_1 = require("./services/azdo-api");
58
+ Object.defineProperty(exports, "AzureDevOpsApi", { enumerable: true, get: function () { return azdo_api_1.AzureDevOpsApi; } });
59
+ var Notifier_1 = require("./core/Notifier");
60
+ Object.defineProperty(exports, "Notifier", { enumerable: true, get: function () { return Notifier_1.Notifier; } });
61
+ exports.senders = __importStar(require("./core/senders"));
62
+ exports.classifiers = __importStar(require("./core/classifiers"));
63
+ exports.messages = __importStar(require("./core/messages"));
64
+ var types_1 = require("./core/types");
65
+ Object.defineProperty(exports, "ServiceError", { enumerable: true, get: function () { return types_1.ServiceError; } });
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAAyC;AAAhC,kGAAA,OAAO,OAAA;AAGhB,oCAAmC;AAA1B,4FAAA,IAAI,OAAA;AAEb,wCAAuC;AAA9B,gGAAA,MAAM,OAAA;AAGf,wDAAwC;AAExC,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAGjB,gDAAoI;AAA3H,4GAAA,gBAAgB,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAYtG,wCAAkE;AAAzD,4FAAA,IAAI,OAAA;AAAE,mGAAA,WAAW,OAAA;AAAE,oGAAA,YAAY,OAAA;AAYxC,gDAAqD;AAA5C,0GAAA,cAAc,OAAA;AAiBvB,4CAA2C;AAAlC,oGAAA,QAAQ,OAAA;AACjB,0DAA0C;AAC1C,kEAAkD;AAClD,4DAA4C;AAmB5C,sCAA4C;AAAnC,qGAAA,YAAY,OAAA"}
@@ -0,0 +1,12 @@
1
+ import type { ExecOptions, ExecResult } from "../core/types";
2
+ export interface AnsiblePlaybookOptions {
3
+ inventory?: string;
4
+ extraVars?: Record<string, string>;
5
+ tags?: string;
6
+ exec?: ExecOptions;
7
+ }
8
+ export declare function playbook(playbookPath: string, { inventory, extraVars, tags, exec }?: AnsiblePlaybookOptions): Promise<ExecResult>;
9
+ export declare function adhoc(host: string, module: string, moduleArgs?: string, exec?: ExecOptions): Promise<ExecResult>;
10
+ export declare function vaultEncrypt(file: string, exec?: ExecOptions): Promise<ExecResult>;
11
+ export declare function vaultDecrypt(file: string, exec?: ExecOptions): Promise<ExecResult>;
12
+ export declare function galaxyInstall(requirementsFile: string, exec?: ExecOptions): Promise<ExecResult>;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.playbook = playbook;
4
+ exports.adhoc = adhoc;
5
+ exports.vaultEncrypt = vaultEncrypt;
6
+ exports.vaultDecrypt = vaultDecrypt;
7
+ exports.galaxyInstall = galaxyInstall;
8
+ const shell_1 = require("./shell");
9
+ function playbook(playbookPath, { inventory, extraVars = {}, tags, exec } = {}) {
10
+ const args = ["-i", inventory || "inventory.ini", playbookPath];
11
+ Object.entries(extraVars).forEach(([k, v]) => {
12
+ args.push("--extra-vars", `${k}=${v}`);
13
+ });
14
+ if (tags) {
15
+ args.push("--tags", tags);
16
+ }
17
+ return shell_1.shell.exec("ansible-playbook", ...(0, shell_1.withExecOptions)(args, exec));
18
+ }
19
+ function adhoc(host, module, moduleArgs, exec) {
20
+ const args = [host, "-m", module];
21
+ if (moduleArgs) {
22
+ args.push("-a", moduleArgs);
23
+ }
24
+ return shell_1.shell.exec("ansible", ...(0, shell_1.withExecOptions)(args, exec));
25
+ }
26
+ function vaultEncrypt(file, exec) {
27
+ return shell_1.shell.exec("ansible-vault", ...(0, shell_1.withExecOptions)(["encrypt", file], exec));
28
+ }
29
+ function vaultDecrypt(file, exec) {
30
+ return shell_1.shell.exec("ansible-vault", ...(0, shell_1.withExecOptions)(["decrypt", file], exec));
31
+ }
32
+ function galaxyInstall(requirementsFile, exec) {
33
+ return shell_1.shell.exec("ansible-galaxy", ...(0, shell_1.withExecOptions)(["install", "-r", requirementsFile], exec));
34
+ }
35
+ //# sourceMappingURL=ansible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansible.js","sourceRoot":"","sources":["../../src/services/ansible.ts"],"names":[],"mappings":";;AAUA,4BAcC;AAED,sBAUC;AAED,oCAEC;AAED,oCAEC;AAED,sCAEC;AAhDD,mCAAiD;AAUjD,SAAgB,QAAQ,CAAC,YAAoB,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,KAA6B,EAAE;IAEjH,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,IAAI,eAAe,EAAE,YAAY,CAAC,CAAC;IAEhE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,EAAE,CAAC;QACP,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAA,uBAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE1E,CAAC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,MAAc,EAAE,UAAmB,EAAE,IAAkB;IAEvF,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAElC,IAAI,UAAU,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAA,uBAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEjE,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY,EAAE,IAAkB;IACzD,OAAO,aAAK,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY,EAAE,IAAkB;IACzD,OAAO,aAAK,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAgB,aAAa,CAAC,gBAAwB,EAAE,IAAkB;IACtE,OAAO,aAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,SAAS,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACvG,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ExecOptions, ExecResult } from "../core/types";
2
+ export declare function zip(source: string, target: string, exec?: ExecOptions): Promise<ExecResult>;
3
+ export declare function unzip(file: string, target: string, exec?: ExecOptions): Promise<ExecResult>;
4
+ export declare function tar(source: string, target: string, exec?: ExecOptions): Promise<ExecResult>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.zip = zip;
4
+ exports.unzip = unzip;
5
+ exports.tar = tar;
6
+ const shell_1 = require("./shell");
7
+ function zip(source, target, exec) {
8
+ return shell_1.shell.exec("zip", ...(0, shell_1.withExecOptions)(["-r", target, source], exec));
9
+ }
10
+ function unzip(file, target, exec) {
11
+ return shell_1.shell.exec("unzip", ...(0, shell_1.withExecOptions)([file, "-d", target], exec));
12
+ }
13
+ function tar(source, target, exec) {
14
+ return shell_1.shell.exec("tar", ...(0, shell_1.withExecOptions)(["-czf", target, source], exec));
15
+ }
16
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/services/archive.ts"],"names":[],"mappings":";;AAGA,kBAEC;AAED,sBAEC;AAED,kBAEC;AAbD,mCAAiD;AAGjD,SAAgB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,IAAkB;IAClE,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,MAAc,EAAE,IAAkB;IAClE,OAAO,aAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAgB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,IAAkB;IAClE,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ExecOptions, ExecResult } from "../core/types";
2
+ export interface ArgoLoginOptions {
3
+ server: string;
4
+ username: string;
5
+ password: string;
6
+ insecure?: boolean;
7
+ exec?: ExecOptions;
8
+ }
9
+ export interface ArgoSyncOptions {
10
+ prune?: boolean;
11
+ exec?: ExecOptions;
12
+ }
13
+ export interface ArgoWaitOptions {
14
+ timeout?: number;
15
+ exec?: ExecOptions;
16
+ }
17
+ export declare function login({ server, username, password, insecure, exec }: ArgoLoginOptions): Promise<ExecResult>;
18
+ export declare function appSync(name: string, { prune, exec }?: ArgoSyncOptions): Promise<ExecResult>;
19
+ export declare function appGet(name: string, exec?: ExecOptions): Promise<ExecResult>;
20
+ export declare function appWait(name: string, { timeout, exec }?: ArgoWaitOptions): Promise<ExecResult>;
21
+ export declare function appSet(name: string, params?: Record<string, string>, exec?: ExecOptions): Promise<ExecResult>;
22
+ export declare function appList(exec?: ExecOptions): Promise<ExecResult>;
23
+ export declare function appRollback(name: string, revisionId: string, exec?: ExecOptions): Promise<ExecResult>;