@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.
- package/LICENSE +21 -0
- package/README.md +1254 -0
- package/dist/bin/devops-cli.d.ts +2 -0
- package/dist/bin/devops-cli.js +132 -0
- package/dist/bin/devops-cli.js.map +1 -0
- package/dist/core/Context.d.ts +56 -0
- package/dist/core/Context.js +197 -0
- package/dist/core/Context.js.map +1 -0
- package/dist/core/Menu.d.ts +23 -0
- package/dist/core/Menu.js +160 -0
- package/dist/core/Menu.js.map +1 -0
- package/dist/core/Notifier.d.ts +42 -0
- package/dist/core/Notifier.js +128 -0
- package/dist/core/Notifier.js.map +1 -0
- package/dist/core/classifiers.d.ts +45 -0
- package/dist/core/classifiers.js +90 -0
- package/dist/core/classifiers.js.map +1 -0
- package/dist/core/logger.d.ts +8 -0
- package/dist/core/logger.js +37 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/messages.d.ts +102 -0
- package/dist/core/messages.js +163 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/prompt.d.ts +10 -0
- package/dist/core/prompt.js +87 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/senders.d.ts +27 -0
- package/dist/core/senders.js +109 -0
- package/dist/core/senders.js.map +1 -0
- package/dist/core/types.d.ts +135 -0
- package/dist/core/types.js +33 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/services/ansible.d.ts +12 -0
- package/dist/services/ansible.js +35 -0
- package/dist/services/ansible.js.map +1 -0
- package/dist/services/archive.d.ts +4 -0
- package/dist/services/archive.js +16 -0
- package/dist/services/archive.js.map +1 -0
- package/dist/services/argocd.d.ts +23 -0
- package/dist/services/argocd.js +48 -0
- package/dist/services/argocd.js.map +1 -0
- package/dist/services/az.d.ts +38 -0
- package/dist/services/az.js +51 -0
- package/dist/services/az.js.map +1 -0
- package/dist/services/azdo-api.d.ts +213 -0
- package/dist/services/azdo-api.js +247 -0
- package/dist/services/azdo-api.js.map +1 -0
- package/dist/services/azdo.d.ts +13 -0
- package/dist/services/azdo.js +57 -0
- package/dist/services/azdo.js.map +1 -0
- package/dist/services/docker.d.ts +21 -0
- package/dist/services/docker.js +36 -0
- package/dist/services/docker.js.map +1 -0
- package/dist/services/git.d.ts +9 -0
- package/dist/services/git.js +36 -0
- package/dist/services/git.js.map +1 -0
- package/dist/services/helm.d.ts +4 -0
- package/dist/services/helm.js +24 -0
- package/dist/services/helm.js.map +1 -0
- package/dist/services/http-types.d.ts +57 -0
- package/dist/services/http-types.js +3 -0
- package/dist/services/http-types.js.map +1 -0
- package/dist/services/http.d.ts +64 -0
- package/dist/services/http.js +288 -0
- package/dist/services/http.js.map +1 -0
- package/dist/services/index.d.ts +37 -0
- package/dist/services/index.js +88 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/kubectl.d.ts +137 -0
- package/dist/services/kubectl.js +271 -0
- package/dist/services/kubectl.js.map +1 -0
- package/dist/services/npm.d.ts +5 -0
- package/dist/services/npm.js +20 -0
- package/dist/services/npm.js.map +1 -0
- package/dist/services/oc.d.ts +156 -0
- package/dist/services/oc.js +309 -0
- package/dist/services/oc.js.map +1 -0
- package/dist/services/pipeline.d.ts +116 -0
- package/dist/services/pipeline.js +474 -0
- package/dist/services/pipeline.js.map +1 -0
- package/dist/services/shell.d.ts +28 -0
- package/dist/services/shell.js +206 -0
- package/dist/services/shell.js.map +1 -0
- package/dist/services/tekton.d.ts +16 -0
- package/dist/services/tekton.js +46 -0
- package/dist/services/tekton.js.map +1 -0
- package/dist/services/terraform.d.ts +31 -0
- package/dist/services/terraform.js +63 -0
- package/dist/services/terraform.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Azure Pipelines "logging commands": https://learn.microsoft.com/azure/devops/pipelines/scripts/logging-commands
|
|
3
|
+
// Estos deben imprimirse en stdout tal cual, sin el formato/color del logger interno,
|
|
4
|
+
// porque el agente de Azure DevOps los parsea línea por línea.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.setVariable = setVariable;
|
|
7
|
+
exports.logError = logError;
|
|
8
|
+
exports.logWarning = logWarning;
|
|
9
|
+
exports.setProgress = setProgress;
|
|
10
|
+
exports.complete = complete;
|
|
11
|
+
exports.addBuildTag = addBuildTag;
|
|
12
|
+
exports.uploadArtifact = uploadArtifact;
|
|
13
|
+
exports.group = group;
|
|
14
|
+
exports.endGroup = endGroup;
|
|
15
|
+
function escape(value) {
|
|
16
|
+
return String(value)
|
|
17
|
+
.replace(/%/g, "%AZP25")
|
|
18
|
+
.replace(/\r/g, "%0D")
|
|
19
|
+
.replace(/\n/g, "%0A")
|
|
20
|
+
.replace(/]/g, "%5D")
|
|
21
|
+
.replace(/;/g, "%3B");
|
|
22
|
+
}
|
|
23
|
+
function print(command, properties, message = "") {
|
|
24
|
+
const props = Object.entries(properties)
|
|
25
|
+
.filter(([, v]) => v !== undefined && v !== null)
|
|
26
|
+
.map(([k, v]) => `${k}=${escape(v)}`)
|
|
27
|
+
.join(";");
|
|
28
|
+
console.log(`##vso[${command}${props ? ` ${props}` : ""}]${message}`);
|
|
29
|
+
}
|
|
30
|
+
function setVariable(name, value, { isSecret = false, isOutput = false } = {}) {
|
|
31
|
+
print("task.setvariable", { variable: name, issecret: isSecret, isoutput: isOutput }, String(value));
|
|
32
|
+
}
|
|
33
|
+
function logError(message) {
|
|
34
|
+
print("task.logissue", { type: "error" }, message);
|
|
35
|
+
}
|
|
36
|
+
function logWarning(message) {
|
|
37
|
+
print("task.logissue", { type: "warning" }, message);
|
|
38
|
+
}
|
|
39
|
+
function setProgress(percent, currentOperation = "") {
|
|
40
|
+
print("task.setprogress", { value: percent }, currentOperation);
|
|
41
|
+
}
|
|
42
|
+
function complete(result = "Succeeded", message = "") {
|
|
43
|
+
print("task.complete", { result }, message);
|
|
44
|
+
}
|
|
45
|
+
function addBuildTag(tag) {
|
|
46
|
+
print("build.addbuildtag", {}, tag);
|
|
47
|
+
}
|
|
48
|
+
function uploadArtifact(name, path, containerFolder = "") {
|
|
49
|
+
print("artifact.upload", { artifactname: name, containerfolder: containerFolder }, path);
|
|
50
|
+
}
|
|
51
|
+
function group(name) {
|
|
52
|
+
console.log(`##[group]${name}`);
|
|
53
|
+
}
|
|
54
|
+
function endGroup() {
|
|
55
|
+
console.log("##[endgroup]");
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=azdo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azdo.js","sourceRoot":"","sources":["../../src/services/azdo.ts"],"names":[],"mappings":";AAAA,kHAAkH;AAClH,sFAAsF;AACtF,+DAA+D;;AA2B/D,kCAEC;AAED,4BAEC;AAED,gCAEC;AAED,kCAEC;AAED,4BAEC;AAED,kCAEC;AAED,wCAEC;AAED,sBAEC;AAED,4BAEC;AA3DD,SAAS,MAAM,CAAC,KAAc;IAC1B,OAAO,MAAM,CAAC,KAAK,CAAC;SACf,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,KAAK,CAAC,OAAe,EAAE,UAAmC,EAAE,OAAO,GAAG,EAAE;IAE7E,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC;SAChD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEf,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC;AAE1E,CAAC;AAOD,SAAgB,WAAW,CAAC,IAAY,EAAE,KAAc,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,KAAyB,EAAE;IACrH,KAAK,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,SAAgB,QAAQ,CAAC,OAAe;IACpC,KAAK,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,UAAU,CAAC,OAAe;IACtC,KAAK,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,WAAW,CAAC,OAAe,EAAE,gBAAgB,GAAG,EAAE;IAC9D,KAAK,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AACpE,CAAC;AAED,SAAgB,QAAQ,CAAC,SAAyD,WAAW,EAAE,OAAO,GAAG,EAAE;IACvG,KAAK,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,WAAW,CAAC,GAAW;IACnC,KAAK,CAAC,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY,EAAE,IAAY,EAAE,eAAe,GAAG,EAAE;IAC3E,KAAK,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;AAC7F,CAAC;AAED,SAAgB,KAAK,CAAC,IAAY;IAC9B,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,QAAQ;IACpB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ExecOptions, ExecResult } from "../core/types";
|
|
2
|
+
export interface DockerBuildOptions {
|
|
3
|
+
image: string;
|
|
4
|
+
context?: string;
|
|
5
|
+
dockerfile?: string;
|
|
6
|
+
buildArgs?: Record<string, string>;
|
|
7
|
+
/** retry/timeout/dryRun para esta llamada puntual. */
|
|
8
|
+
exec?: ExecOptions;
|
|
9
|
+
}
|
|
10
|
+
export interface DockerLoginOptions {
|
|
11
|
+
registry: string;
|
|
12
|
+
username: string;
|
|
13
|
+
password: string;
|
|
14
|
+
exec?: ExecOptions;
|
|
15
|
+
}
|
|
16
|
+
export declare function build({ image, context, dockerfile, buildArgs, exec }: DockerBuildOptions): Promise<ExecResult>;
|
|
17
|
+
export declare function push(image: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
18
|
+
export declare function tag(source: string, target: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
19
|
+
export declare function login({ registry, username, password, exec }: DockerLoginOptions): Promise<ExecResult>;
|
|
20
|
+
export declare function pull(image: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
21
|
+
export declare function rmi(image: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.build = build;
|
|
4
|
+
exports.push = push;
|
|
5
|
+
exports.tag = tag;
|
|
6
|
+
exports.login = login;
|
|
7
|
+
exports.pull = pull;
|
|
8
|
+
exports.rmi = rmi;
|
|
9
|
+
const shell_1 = require("./shell");
|
|
10
|
+
function build({ image, context = ".", dockerfile, buildArgs = {}, exec }) {
|
|
11
|
+
const args = ["build", "-t", image];
|
|
12
|
+
if (dockerfile) {
|
|
13
|
+
args.push("-f", dockerfile);
|
|
14
|
+
}
|
|
15
|
+
Object.entries(buildArgs).forEach(([k, v]) => {
|
|
16
|
+
args.push("--build-arg", `${k}=${v}`);
|
|
17
|
+
});
|
|
18
|
+
args.push(context);
|
|
19
|
+
return shell_1.shell.exec("docker", ...(0, shell_1.withExecOptions)(args, exec));
|
|
20
|
+
}
|
|
21
|
+
function push(image, exec) {
|
|
22
|
+
return shell_1.shell.exec("docker", ...(0, shell_1.withExecOptions)(["push", image], exec));
|
|
23
|
+
}
|
|
24
|
+
function tag(source, target, exec) {
|
|
25
|
+
return shell_1.shell.exec("docker", ...(0, shell_1.withExecOptions)(["tag", source, target], exec));
|
|
26
|
+
}
|
|
27
|
+
function login({ registry, username, password, exec }) {
|
|
28
|
+
return shell_1.shell.exec("docker", ...(0, shell_1.withExecOptions)(["login", registry, "-u", username, "-p", password], exec));
|
|
29
|
+
}
|
|
30
|
+
function pull(image, exec) {
|
|
31
|
+
return shell_1.shell.exec("docker", ...(0, shell_1.withExecOptions)(["pull", image], exec));
|
|
32
|
+
}
|
|
33
|
+
function rmi(image, exec) {
|
|
34
|
+
return shell_1.shell.exec("docker", ...(0, shell_1.withExecOptions)(["rmi", image], exec));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=docker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/services/docker.ts"],"names":[],"mappings":";;AAmBA,sBAsBC;AAED,oBAEC;AAED,kBAEC;AAED,sBAEC;AAED,oBAEC;AAED,kBAEC;AA7DD,mCAAiD;AAmBjD,SAAgB,KAAK,CAAC,EAClB,KAAK,EACL,OAAO,GAAG,GAAG,EACb,UAAU,EACV,SAAS,GAAG,EAAE,EACd,IAAI,EACa;IAEjB,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAEpC,IAAI,UAAU,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAA,uBAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEhE,CAAC;AAED,SAAgB,IAAI,CAAC,KAAa,EAAE,IAAkB;IAClD,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAgB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,IAAkB;IAClE,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAsB;IAC5E,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/G,CAAC;AAED,SAAgB,IAAI,CAAC,KAAa,EAAE,IAAkB;IAClD,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAgB,GAAG,CAAC,KAAa,EAAE,IAAkB;IACjD,OAAO,aAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ExecOptions, ExecResult } from "../core/types";
|
|
2
|
+
export declare function clone(url: string, targetPath: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
3
|
+
export declare function checkout(branch: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
4
|
+
export declare function pull(exec?: ExecOptions): Promise<ExecResult>;
|
|
5
|
+
export declare function fetch(exec?: ExecOptions): Promise<ExecResult>;
|
|
6
|
+
export declare function tag(name: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
7
|
+
export declare function commit(message: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
8
|
+
export declare function push(exec?: ExecOptions): Promise<ExecResult>;
|
|
9
|
+
export declare function revParse(exec?: ExecOptions): Promise<ExecResult>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clone = clone;
|
|
4
|
+
exports.checkout = checkout;
|
|
5
|
+
exports.pull = pull;
|
|
6
|
+
exports.fetch = fetch;
|
|
7
|
+
exports.tag = tag;
|
|
8
|
+
exports.commit = commit;
|
|
9
|
+
exports.push = push;
|
|
10
|
+
exports.revParse = revParse;
|
|
11
|
+
const shell_1 = require("./shell");
|
|
12
|
+
function clone(url, targetPath, exec) {
|
|
13
|
+
return shell_1.shell.exec("git", ...(0, shell_1.withExecOptions)(["clone", url, targetPath], exec));
|
|
14
|
+
}
|
|
15
|
+
function checkout(branch, exec) {
|
|
16
|
+
return shell_1.shell.exec("git", ...(0, shell_1.withExecOptions)(["checkout", branch], exec));
|
|
17
|
+
}
|
|
18
|
+
function pull(exec) {
|
|
19
|
+
return shell_1.shell.exec("git", ...(0, shell_1.withExecOptions)(["pull"], exec));
|
|
20
|
+
}
|
|
21
|
+
function fetch(exec) {
|
|
22
|
+
return shell_1.shell.exec("git", ...(0, shell_1.withExecOptions)(["fetch", "--all"], exec));
|
|
23
|
+
}
|
|
24
|
+
function tag(name, exec) {
|
|
25
|
+
return shell_1.shell.exec("git", ...(0, shell_1.withExecOptions)(["tag", name], exec));
|
|
26
|
+
}
|
|
27
|
+
function commit(message, exec) {
|
|
28
|
+
return shell_1.shell.exec("git", ...(0, shell_1.withExecOptions)(["commit", "-m", message], exec));
|
|
29
|
+
}
|
|
30
|
+
function push(exec) {
|
|
31
|
+
return shell_1.shell.exec("git", ...(0, shell_1.withExecOptions)(["push"], exec));
|
|
32
|
+
}
|
|
33
|
+
function revParse(exec) {
|
|
34
|
+
return shell_1.shell.exec("git", ...(0, shell_1.withExecOptions)(["rev-parse", "HEAD"], exec));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/services/git.ts"],"names":[],"mappings":";;AAGA,sBAEC;AAED,4BAEC;AAED,oBAEC;AAED,sBAEC;AAED,kBAEC;AAED,wBAEC;AAED,oBAEC;AAED,4BAEC;AAjCD,mCAAiD;AAGjD,SAAgB,KAAK,CAAC,GAAW,EAAE,UAAkB,EAAE,IAAkB;IACrE,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAgB,QAAQ,CAAC,MAAc,EAAE,IAAkB;IACvD,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,IAAI,CAAC,IAAkB;IACnC,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,KAAK,CAAC,IAAkB;IACpC,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAgB,GAAG,CAAC,IAAY,EAAE,IAAkB;IAChD,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,MAAM,CAAC,OAAe,EAAE,IAAkB;IACtD,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,SAAgB,IAAI,CAAC,IAAkB;IACnC,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,QAAQ,CAAC,IAAkB;IACvC,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ExecOptions, ExecResult } from "../core/types";
|
|
2
|
+
export declare function install(name: string, chart: string, values?: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
3
|
+
export declare function upgrade(name: string, chart: string, values?: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
4
|
+
export declare function uninstall(name: string, exec?: ExecOptions): Promise<ExecResult>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.install = install;
|
|
4
|
+
exports.upgrade = upgrade;
|
|
5
|
+
exports.uninstall = uninstall;
|
|
6
|
+
const shell_1 = require("./shell");
|
|
7
|
+
function install(name, chart, values, exec) {
|
|
8
|
+
const args = ["install", name, chart];
|
|
9
|
+
if (values) {
|
|
10
|
+
args.push("-f", values);
|
|
11
|
+
}
|
|
12
|
+
return shell_1.shell.exec("helm", ...(0, shell_1.withExecOptions)(args, exec));
|
|
13
|
+
}
|
|
14
|
+
function upgrade(name, chart, values, exec) {
|
|
15
|
+
const args = ["upgrade", name, chart];
|
|
16
|
+
if (values) {
|
|
17
|
+
args.push("-f", values);
|
|
18
|
+
}
|
|
19
|
+
return shell_1.shell.exec("helm", ...(0, shell_1.withExecOptions)(args, exec));
|
|
20
|
+
}
|
|
21
|
+
function uninstall(name, exec) {
|
|
22
|
+
return shell_1.shell.exec("helm", ...(0, shell_1.withExecOptions)(["uninstall", name], exec));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=helm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helm.js","sourceRoot":"","sources":["../../src/services/helm.ts"],"names":[],"mappings":";;AAGA,0BAUC;AAED,0BAUC;AAED,8BAEC;AA7BD,mCAAiD;AAGjD,SAAgB,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,MAAe,EAAE,IAAkB;IAEpF,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAEtC,IAAI,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAA,uBAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE9D,CAAC;AAED,SAAgB,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,MAAe,EAAE,IAAkB;IAEpF,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAEtC,IAAI,MAAM,EAAE,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,aAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAA,uBAAe,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE9D,CAAC;AAED,SAAgB,SAAS,CAAC,IAAY,EAAE,IAAkB;IACtD,OAAO,aAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAA,uBAAe,EAAC,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { ExecOptions } from "../core/types";
|
|
2
|
+
export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
|
|
3
|
+
export interface HttpRequest {
|
|
4
|
+
url: string;
|
|
5
|
+
method?: HttpMethod;
|
|
6
|
+
headers?: Record<string, string>;
|
|
7
|
+
body?: unknown;
|
|
8
|
+
query?: Record<string, string | number | boolean | undefined>;
|
|
9
|
+
timeout?: number;
|
|
10
|
+
exec?: ExecOptions;
|
|
11
|
+
}
|
|
12
|
+
export interface HttpResponse<T = unknown> {
|
|
13
|
+
status: number;
|
|
14
|
+
headers: Record<string, string>;
|
|
15
|
+
body: T;
|
|
16
|
+
request: HttpRequest;
|
|
17
|
+
}
|
|
18
|
+
export interface HttpError<T = unknown> extends Error {
|
|
19
|
+
status: number;
|
|
20
|
+
headers: Record<string, string>;
|
|
21
|
+
body: T;
|
|
22
|
+
request: HttpRequest;
|
|
23
|
+
}
|
|
24
|
+
export interface RequestContext {
|
|
25
|
+
request: HttpRequest;
|
|
26
|
+
/** Permite abortar la cadena de interceptores y la petición. */
|
|
27
|
+
abort: (reason?: string) => void;
|
|
28
|
+
aborted: boolean;
|
|
29
|
+
abortReason?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ResponseContext<T = unknown> {
|
|
32
|
+
response: HttpResponse<T>;
|
|
33
|
+
request: HttpRequest;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Interceptor de request: se ejecuta ANTES de enviar la petición.
|
|
37
|
+
* Puede mutar el request (agregar headers, auth, logging, etc.).
|
|
38
|
+
* Si aborta, no se envía la petición y se lanza un error.
|
|
39
|
+
*/
|
|
40
|
+
export type RequestInterceptor = (ctx: RequestContext) => void | Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Interceptor de response: se ejecuta DESPUÉS de recibir la respuesta.
|
|
43
|
+
* Puede mutar la respuesta (transformar datos, logging, retry, etc.).
|
|
44
|
+
*/
|
|
45
|
+
export type ResponseInterceptor<T = unknown> = (ctx: ResponseContext<T>) => void | Promise<void>;
|
|
46
|
+
export interface HttpServiceConfig {
|
|
47
|
+
/** URL base que se antepone a todas las peticiones relativas. */
|
|
48
|
+
baseUrl?: string;
|
|
49
|
+
/** Headers por defecto que se envían en todas las peticiones. */
|
|
50
|
+
defaultHeaders?: Record<string, string>;
|
|
51
|
+
/** Timeout por defecto en ms (0 = sin límite). */
|
|
52
|
+
defaultTimeout?: number;
|
|
53
|
+
/** Interceptors de request que se ejecutan antes de cada petición. */
|
|
54
|
+
requestInterceptors?: RequestInterceptor[];
|
|
55
|
+
/** Interceptors de response que se ejecutan después de cada respuesta. */
|
|
56
|
+
responseInterceptors?: ResponseInterceptor[];
|
|
57
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-types.js","sourceRoot":"","sources":["../../src/services/http-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { HttpRequest, HttpResponse, HttpServiceConfig, RequestInterceptor, ResponseInterceptor } from "./http-types";
|
|
2
|
+
declare class HttpService {
|
|
3
|
+
private baseUrl;
|
|
4
|
+
private defaultHeaders;
|
|
5
|
+
private defaultTimeout;
|
|
6
|
+
private requestInterceptors;
|
|
7
|
+
private responseInterceptors;
|
|
8
|
+
configure(config: HttpServiceConfig): this;
|
|
9
|
+
addRequestInterceptor(interceptor: RequestInterceptor): this;
|
|
10
|
+
removeRequestInterceptor(interceptor: RequestInterceptor): this;
|
|
11
|
+
clearRequestInterceptors(): this;
|
|
12
|
+
addResponseInterceptor(interceptor: ResponseInterceptor): this;
|
|
13
|
+
removeResponseInterceptor(interceptor: ResponseInterceptor): this;
|
|
14
|
+
clearResponseInterceptors(): this;
|
|
15
|
+
request<T = unknown>(req: HttpRequest): Promise<HttpResponse<T>>;
|
|
16
|
+
get<T = unknown>(url: string, options?: Omit<HttpRequest, "url" | "method">): Promise<HttpResponse<T>>;
|
|
17
|
+
post<T = unknown>(url: string, body?: unknown, options?: Omit<HttpRequest, "url" | "method" | "body">): Promise<HttpResponse<T>>;
|
|
18
|
+
put<T = unknown>(url: string, body?: unknown, options?: Omit<HttpRequest, "url" | "method" | "body">): Promise<HttpResponse<T>>;
|
|
19
|
+
patch<T = unknown>(url: string, body?: unknown, options?: Omit<HttpRequest, "url" | "method" | "body">): Promise<HttpResponse<T>>;
|
|
20
|
+
delete<T = unknown>(url: string, options?: Omit<HttpRequest, "url" | "method">): Promise<HttpResponse<T>>;
|
|
21
|
+
head<T = unknown>(url: string, options?: Omit<HttpRequest, "url" | "method">): Promise<HttpResponse<T>>;
|
|
22
|
+
options<T = unknown>(url: string, options?: Omit<HttpRequest, "url" | "method">): Promise<HttpResponse<T>>;
|
|
23
|
+
}
|
|
24
|
+
declare class HttpRegistry {
|
|
25
|
+
private defaultAgent;
|
|
26
|
+
private agents;
|
|
27
|
+
constructor(defaultAgent?: HttpService);
|
|
28
|
+
/**
|
|
29
|
+
* Registra un agente nombrado con su propia configuración, interceptores
|
|
30
|
+
* y defaults. Si ya existe un agente con ese nombre, lo reemplaza.
|
|
31
|
+
*/
|
|
32
|
+
createAgent(agent: HttpService, name: string): this;
|
|
33
|
+
/**
|
|
34
|
+
* Devuelve el agente registrado con el nombre indicado.
|
|
35
|
+
* Lanza si no existe.
|
|
36
|
+
*/
|
|
37
|
+
agent(name: string): HttpService;
|
|
38
|
+
/**
|
|
39
|
+
* Elimina un agente nombrado. Devuelve true si existía.
|
|
40
|
+
*/
|
|
41
|
+
removeAgent(name: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Lista los nombres de todos los agentes registrados.
|
|
44
|
+
*/
|
|
45
|
+
listAgents(): string[];
|
|
46
|
+
configure(config: HttpServiceConfig): this;
|
|
47
|
+
addRequestInterceptor(interceptor: RequestInterceptor): this;
|
|
48
|
+
removeRequestInterceptor(interceptor: RequestInterceptor): this;
|
|
49
|
+
clearRequestInterceptors(): this;
|
|
50
|
+
addResponseInterceptor(interceptor: ResponseInterceptor): this;
|
|
51
|
+
removeResponseInterceptor(interceptor: ResponseInterceptor): this;
|
|
52
|
+
clearResponseInterceptors(): this;
|
|
53
|
+
request<T = unknown>(req: HttpRequest): Promise<HttpResponse<T>>;
|
|
54
|
+
get<T = unknown>(url: string, options?: Omit<HttpRequest, "url" | "method">): Promise<HttpResponse<T>>;
|
|
55
|
+
post<T = unknown>(url: string, body?: unknown, options?: Omit<HttpRequest, "url" | "method" | "body">): Promise<HttpResponse<T>>;
|
|
56
|
+
put<T = unknown>(url: string, body?: unknown, options?: Omit<HttpRequest, "url" | "method" | "body">): Promise<HttpResponse<T>>;
|
|
57
|
+
patch<T = unknown>(url: string, body?: unknown, options?: Omit<HttpRequest, "url" | "method" | "body">): Promise<HttpResponse<T>>;
|
|
58
|
+
delete<T = unknown>(url: string, options?: Omit<HttpRequest, "url" | "method">): Promise<HttpResponse<T>>;
|
|
59
|
+
head<T = unknown>(url: string, options?: Omit<HttpRequest, "url" | "method">): Promise<HttpResponse<T>>;
|
|
60
|
+
options<T = unknown>(url: string, options?: Omit<HttpRequest, "url" | "method">): Promise<HttpResponse<T>>;
|
|
61
|
+
}
|
|
62
|
+
declare const http: HttpService & HttpRegistry;
|
|
63
|
+
export { http, HttpService, HttpRegistry };
|
|
64
|
+
export type { HttpMethod, HttpRequest, HttpResponse, HttpServiceConfig, RequestInterceptor, ResponseInterceptor, RequestContext, ResponseContext } from "./http-types";
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HttpRegistry = exports.HttpService = exports.http = void 0;
|
|
4
|
+
const logger_1 = require("../core/logger");
|
|
5
|
+
function buildQueryString(query) {
|
|
6
|
+
if (!query)
|
|
7
|
+
return "";
|
|
8
|
+
const params = new URLSearchParams();
|
|
9
|
+
for (const [key, value] of Object.entries(query)) {
|
|
10
|
+
if (value !== undefined) {
|
|
11
|
+
params.set(key, String(value));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const qs = params.toString();
|
|
15
|
+
return qs ? `?${qs}` : "";
|
|
16
|
+
}
|
|
17
|
+
function parseHeaders(raw) {
|
|
18
|
+
const headers = {};
|
|
19
|
+
raw.forEach((value, key) => {
|
|
20
|
+
headers[key] = value;
|
|
21
|
+
});
|
|
22
|
+
return headers;
|
|
23
|
+
}
|
|
24
|
+
async function parseBody(res) {
|
|
25
|
+
const contentType = res.headers.get("content-type") ?? "";
|
|
26
|
+
if (contentType.includes("application/json")) {
|
|
27
|
+
return res.json();
|
|
28
|
+
}
|
|
29
|
+
return res.text();
|
|
30
|
+
}
|
|
31
|
+
function createHttpError(message, status, headers, body, request) {
|
|
32
|
+
const err = new Error(message);
|
|
33
|
+
err.status = status;
|
|
34
|
+
err.headers = headers;
|
|
35
|
+
err.body = body;
|
|
36
|
+
err.request = request;
|
|
37
|
+
return err;
|
|
38
|
+
}
|
|
39
|
+
class HttpService {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.baseUrl = "";
|
|
42
|
+
this.defaultHeaders = {};
|
|
43
|
+
this.defaultTimeout = 0;
|
|
44
|
+
this.requestInterceptors = [];
|
|
45
|
+
this.responseInterceptors = [];
|
|
46
|
+
}
|
|
47
|
+
configure(config) {
|
|
48
|
+
if (config.baseUrl !== undefined)
|
|
49
|
+
this.baseUrl = config.baseUrl;
|
|
50
|
+
if (config.defaultHeaders !== undefined)
|
|
51
|
+
this.defaultHeaders = { ...config.defaultHeaders };
|
|
52
|
+
if (config.defaultTimeout !== undefined)
|
|
53
|
+
this.defaultTimeout = config.defaultTimeout;
|
|
54
|
+
if (config.requestInterceptors)
|
|
55
|
+
this.requestInterceptors = [...config.requestInterceptors];
|
|
56
|
+
if (config.responseInterceptors)
|
|
57
|
+
this.responseInterceptors = [...config.responseInterceptors];
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
addRequestInterceptor(interceptor) {
|
|
61
|
+
this.requestInterceptors.push(interceptor);
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
removeRequestInterceptor(interceptor) {
|
|
65
|
+
const idx = this.requestInterceptors.indexOf(interceptor);
|
|
66
|
+
if (idx !== -1)
|
|
67
|
+
this.requestInterceptors.splice(idx, 1);
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
clearRequestInterceptors() {
|
|
71
|
+
this.requestInterceptors = [];
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
addResponseInterceptor(interceptor) {
|
|
75
|
+
this.responseInterceptors.push(interceptor);
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
removeResponseInterceptor(interceptor) {
|
|
79
|
+
const idx = this.responseInterceptors.indexOf(interceptor);
|
|
80
|
+
if (idx !== -1)
|
|
81
|
+
this.responseInterceptors.splice(idx, 1);
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
clearResponseInterceptors() {
|
|
85
|
+
this.responseInterceptors = [];
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
async request(req) {
|
|
89
|
+
const fullUrl = this.baseUrl + req.url + buildQueryString(req.query);
|
|
90
|
+
const method = (req.method ?? "GET").toUpperCase();
|
|
91
|
+
const timeout = req.timeout ?? this.defaultTimeout;
|
|
92
|
+
const mergedHeaders = {
|
|
93
|
+
...this.defaultHeaders,
|
|
94
|
+
...req.headers
|
|
95
|
+
};
|
|
96
|
+
if (req.body !== undefined && !mergedHeaders["Content-Type"] && !mergedHeaders["content-type"]) {
|
|
97
|
+
mergedHeaders["Content-Type"] = "application/json";
|
|
98
|
+
}
|
|
99
|
+
// --- request interceptors ---
|
|
100
|
+
const ctx = {
|
|
101
|
+
request: { url: fullUrl, method, headers: mergedHeaders, body: req.body, timeout },
|
|
102
|
+
abort: (reason) => {
|
|
103
|
+
ctx.aborted = true;
|
|
104
|
+
ctx.abortReason = reason ?? "Request aborted by interceptor";
|
|
105
|
+
},
|
|
106
|
+
aborted: false
|
|
107
|
+
};
|
|
108
|
+
for (const interceptor of this.requestInterceptors) {
|
|
109
|
+
await interceptor(ctx);
|
|
110
|
+
if (ctx.aborted) {
|
|
111
|
+
throw new Error(ctx.abortReason ?? "Request aborted by interceptor");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// --- dry-run support ---
|
|
115
|
+
const execOpts = req.exec;
|
|
116
|
+
if (execOpts?.dryRun) {
|
|
117
|
+
logger_1.logger.warn(`DRY-RUN HTTP: ${method} ${ctx.request.url}`);
|
|
118
|
+
return {
|
|
119
|
+
status: 0,
|
|
120
|
+
headers: {},
|
|
121
|
+
body: null,
|
|
122
|
+
request: ctx.request
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// --- fetch ---
|
|
126
|
+
const fetchInit = {
|
|
127
|
+
method: ctx.request.method,
|
|
128
|
+
headers: ctx.request.headers
|
|
129
|
+
};
|
|
130
|
+
if (ctx.request.body !== undefined && method !== "GET" && method !== "HEAD") {
|
|
131
|
+
fetchInit.body = typeof ctx.request.body === "string"
|
|
132
|
+
? ctx.request.body
|
|
133
|
+
: JSON.stringify(ctx.request.body);
|
|
134
|
+
}
|
|
135
|
+
if (timeout > 0) {
|
|
136
|
+
fetchInit.signal = AbortSignal.timeout(timeout);
|
|
137
|
+
}
|
|
138
|
+
logger_1.logger.info(`HTTP ${method} ${ctx.request.url}`);
|
|
139
|
+
let rawRes;
|
|
140
|
+
try {
|
|
141
|
+
rawRes = await fetch(ctx.request.url, fetchInit);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (error instanceof DOMException && error.name === "TimeoutError") {
|
|
145
|
+
throw createHttpError(`HTTP ${method} ${ctx.request.url} timeout after ${timeout}ms`, 0, {}, null, ctx.request);
|
|
146
|
+
}
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
const responseHeaders = parseHeaders(rawRes.headers);
|
|
150
|
+
const body = await parseBody(rawRes);
|
|
151
|
+
const response = {
|
|
152
|
+
status: rawRes.status,
|
|
153
|
+
headers: responseHeaders,
|
|
154
|
+
body,
|
|
155
|
+
request: ctx.request
|
|
156
|
+
};
|
|
157
|
+
// --- response interceptors ---
|
|
158
|
+
const resCtx = { response, request: ctx.request };
|
|
159
|
+
for (const interceptor of this.responseInterceptors) {
|
|
160
|
+
await interceptor(resCtx);
|
|
161
|
+
}
|
|
162
|
+
// --- error on non-2xx ---
|
|
163
|
+
if (!rawRes.ok) {
|
|
164
|
+
throw createHttpError(`HTTP ${method} ${ctx.request.url} responded with ${rawRes.status}`, rawRes.status, responseHeaders, body, ctx.request);
|
|
165
|
+
}
|
|
166
|
+
return resCtx.response;
|
|
167
|
+
}
|
|
168
|
+
get(url, options) {
|
|
169
|
+
return this.request({ ...options, url, method: "GET" });
|
|
170
|
+
}
|
|
171
|
+
post(url, body, options) {
|
|
172
|
+
return this.request({ ...options, url, method: "POST", body });
|
|
173
|
+
}
|
|
174
|
+
put(url, body, options) {
|
|
175
|
+
return this.request({ ...options, url, method: "PUT", body });
|
|
176
|
+
}
|
|
177
|
+
patch(url, body, options) {
|
|
178
|
+
return this.request({ ...options, url, method: "PATCH", body });
|
|
179
|
+
}
|
|
180
|
+
delete(url, options) {
|
|
181
|
+
return this.request({ ...options, url, method: "DELETE" });
|
|
182
|
+
}
|
|
183
|
+
head(url, options) {
|
|
184
|
+
return this.request({ ...options, url, method: "HEAD" });
|
|
185
|
+
}
|
|
186
|
+
options(url, options) {
|
|
187
|
+
return this.request({ ...options, url, method: "OPTIONS" });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
exports.HttpService = HttpService;
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
// HttpRegistry — gestor de agentes HTTP nombrados
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
class HttpRegistry {
|
|
195
|
+
constructor(defaultAgent) {
|
|
196
|
+
this.agents = new Map();
|
|
197
|
+
this.defaultAgent = defaultAgent ?? new HttpService();
|
|
198
|
+
}
|
|
199
|
+
// ---- agent management ----
|
|
200
|
+
/**
|
|
201
|
+
* Registra un agente nombrado con su propia configuración, interceptores
|
|
202
|
+
* y defaults. Si ya existe un agente con ese nombre, lo reemplaza.
|
|
203
|
+
*/
|
|
204
|
+
createAgent(agent, name) {
|
|
205
|
+
this.agents.set(name, agent);
|
|
206
|
+
return this;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Devuelve el agente registrado con el nombre indicado.
|
|
210
|
+
* Lanza si no existe.
|
|
211
|
+
*/
|
|
212
|
+
agent(name) {
|
|
213
|
+
const a = this.agents.get(name);
|
|
214
|
+
if (!a) {
|
|
215
|
+
throw new Error(`HTTP agent "${name}" not found. Available: ${this.listAgents().join(", ") || "(none)"}`);
|
|
216
|
+
}
|
|
217
|
+
return a;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Elimina un agente nombrado. Devuelve true si existía.
|
|
221
|
+
*/
|
|
222
|
+
removeAgent(name) {
|
|
223
|
+
return this.agents.delete(name);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Lista los nombres de todos los agentes registrados.
|
|
227
|
+
*/
|
|
228
|
+
listAgents() {
|
|
229
|
+
return Array.from(this.agents.keys());
|
|
230
|
+
}
|
|
231
|
+
// ---- delegation to default agent ----
|
|
232
|
+
configure(config) {
|
|
233
|
+
this.defaultAgent.configure(config);
|
|
234
|
+
return this;
|
|
235
|
+
}
|
|
236
|
+
addRequestInterceptor(interceptor) {
|
|
237
|
+
this.defaultAgent.addRequestInterceptor(interceptor);
|
|
238
|
+
return this;
|
|
239
|
+
}
|
|
240
|
+
removeRequestInterceptor(interceptor) {
|
|
241
|
+
this.defaultAgent.removeRequestInterceptor(interceptor);
|
|
242
|
+
return this;
|
|
243
|
+
}
|
|
244
|
+
clearRequestInterceptors() {
|
|
245
|
+
this.defaultAgent.clearRequestInterceptors();
|
|
246
|
+
return this;
|
|
247
|
+
}
|
|
248
|
+
addResponseInterceptor(interceptor) {
|
|
249
|
+
this.defaultAgent.addResponseInterceptor(interceptor);
|
|
250
|
+
return this;
|
|
251
|
+
}
|
|
252
|
+
removeResponseInterceptor(interceptor) {
|
|
253
|
+
this.defaultAgent.removeResponseInterceptor(interceptor);
|
|
254
|
+
return this;
|
|
255
|
+
}
|
|
256
|
+
clearResponseInterceptors() {
|
|
257
|
+
this.defaultAgent.clearResponseInterceptors();
|
|
258
|
+
return this;
|
|
259
|
+
}
|
|
260
|
+
request(req) {
|
|
261
|
+
return this.defaultAgent.request(req);
|
|
262
|
+
}
|
|
263
|
+
get(url, options) {
|
|
264
|
+
return this.defaultAgent.get(url, options);
|
|
265
|
+
}
|
|
266
|
+
post(url, body, options) {
|
|
267
|
+
return this.defaultAgent.post(url, body, options);
|
|
268
|
+
}
|
|
269
|
+
put(url, body, options) {
|
|
270
|
+
return this.defaultAgent.put(url, body, options);
|
|
271
|
+
}
|
|
272
|
+
patch(url, body, options) {
|
|
273
|
+
return this.defaultAgent.patch(url, body, options);
|
|
274
|
+
}
|
|
275
|
+
delete(url, options) {
|
|
276
|
+
return this.defaultAgent.delete(url, options);
|
|
277
|
+
}
|
|
278
|
+
head(url, options) {
|
|
279
|
+
return this.defaultAgent.head(url, options);
|
|
280
|
+
}
|
|
281
|
+
options(url, options) {
|
|
282
|
+
return this.defaultAgent.options(url, options);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
exports.HttpRegistry = HttpRegistry;
|
|
286
|
+
const http = new HttpRegistry();
|
|
287
|
+
exports.http = http;
|
|
288
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/services/http.ts"],"names":[],"mappings":"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"}
|