@intentic/providers 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/auth/authentik-api.d.ts.map +1 -1
  2. package/dist/auth/authentik-api.js +1 -0
  3. package/dist/auth/authentik-api.js.map +1 -1
  4. package/dist/auth/authentik.js +1 -1
  5. package/dist/auth/authentik.js.map +1 -1
  6. package/dist/core/list-stamped.d.ts.map +1 -1
  7. package/dist/core/list-stamped.js +11 -1
  8. package/dist/core/list-stamped.js.map +1 -1
  9. package/dist/core/ssh-diagnostics.d.ts +6 -0
  10. package/dist/core/ssh-diagnostics.d.ts.map +1 -0
  11. package/dist/core/ssh-diagnostics.js +46 -0
  12. package/dist/core/ssh-diagnostics.js.map +1 -0
  13. package/dist/core/ssh.d.ts.map +1 -1
  14. package/dist/core/ssh.js +41 -2
  15. package/dist/core/ssh.js.map +1 -1
  16. package/dist/forgejo/forgejo-api.d.ts.map +1 -1
  17. package/dist/forgejo/forgejo-api.js +1 -0
  18. package/dist/forgejo/forgejo-api.js.map +1 -1
  19. package/dist/forgejo/forgejo.js +1 -1
  20. package/dist/forgejo/forgejo.js.map +1 -1
  21. package/dist/github/gh-ci.d.ts.map +1 -1
  22. package/dist/github/gh-ci.js +19 -35
  23. package/dist/github/gh-ci.js.map +1 -1
  24. package/dist/github/github-api.d.ts.map +1 -1
  25. package/dist/github/github-api.js +8 -4
  26. package/dist/github/github-api.js.map +1 -1
  27. package/dist/gitlab/gitlab-api.d.ts.map +1 -1
  28. package/dist/gitlab/gitlab-api.js +7 -5
  29. package/dist/gitlab/gitlab-api.js.map +1 -1
  30. package/dist/gitlab/gl-ci.d.ts.map +1 -1
  31. package/dist/gitlab/gl-ci.js +16 -33
  32. package/dist/gitlab/gl-ci.js.map +1 -1
  33. package/dist/index.d.ts +1 -2
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +1 -2
  36. package/dist/index.js.map +1 -1
  37. package/dist/integrations/discord-api.d.ts.map +1 -1
  38. package/dist/integrations/discord-api.js +1 -1
  39. package/dist/integrations/discord-api.js.map +1 -1
  40. package/dist/integrations/stripe-api.d.ts.map +1 -1
  41. package/dist/integrations/stripe-api.js +1 -1
  42. package/dist/integrations/stripe-api.js.map +1 -1
  43. package/dist/komodo/deployment.d.ts.map +1 -1
  44. package/dist/komodo/deployment.js +2 -1
  45. package/dist/komodo/deployment.js.map +1 -1
  46. package/dist/komodo/komodo-api.d.ts.map +1 -1
  47. package/dist/komodo/komodo-api.js +2 -0
  48. package/dist/komodo/komodo-api.js.map +1 -1
  49. package/dist/komodo/komodo-periphery.d.ts.map +1 -1
  50. package/dist/komodo/komodo-periphery.js +1 -0
  51. package/dist/komodo/komodo-periphery.js.map +1 -1
  52. package/dist/komodo/komodo.d.ts.map +1 -1
  53. package/dist/komodo/komodo.js +14 -18
  54. package/dist/komodo/komodo.js.map +1 -1
  55. package/dist/network/cf-route.d.ts.map +1 -1
  56. package/dist/network/cf-route.js +1 -0
  57. package/dist/network/cf-route.js.map +1 -1
  58. package/dist/network/cloudflare-api.d.ts.map +1 -1
  59. package/dist/network/cloudflare-api.js +1 -0
  60. package/dist/network/cloudflare-api.js.map +1 -1
  61. package/dist/observability/signoz.js +1 -1
  62. package/dist/observability/signoz.js.map +1 -1
  63. package/dist/providers.d.ts.map +1 -1
  64. package/dist/providers.js +0 -4
  65. package/dist/providers.js.map +1 -1
  66. package/dist/services/compose-service.js +1 -1
  67. package/dist/services/compose-service.js.map +1 -1
  68. package/package.json +4 -4
  69. package/dist/github/gh-deployment.d.ts +0 -4
  70. package/dist/github/gh-deployment.d.ts.map +0 -1
  71. package/dist/github/gh-deployment.js +0 -92
  72. package/dist/github/gh-deployment.js.map +0 -1
  73. package/dist/gitlab/gl-deployment.d.ts +0 -4
  74. package/dist/gitlab/gl-deployment.d.ts.map +0 -1
  75. package/dist/gitlab/gl-deployment.js +0 -93
  76. package/dist/gitlab/gl-deployment.js.map +0 -1
@@ -1,92 +0,0 @@
1
- import { z } from "zod";
2
- import { parseInputs, sshSchema, sshTarget } from "../core/inputs.js";
3
- import { sshExecutor } from "../core/ssh.js";
4
- const ghDeploymentSchema = z
5
- .object({
6
- owner: z.string(),
7
- repoName: z.string(),
8
- tag: z.string(),
9
- domain: z.string(),
10
- internalIp: z.string(),
11
- port: z.coerce.number(),
12
- env: z.record(z.string(), z.unknown()).default({}),
13
- })
14
- .merge(sshSchema);
15
- const parse = (inputs) => parseInputs(ghDeploymentSchema, inputs, "gh-deployment");
16
- const containerName = (ctx) => ctx.id;
17
- const ghcrImage = (parsed) => `ghcr.io/${parsed.owner}/${parsed.repoName}:${parsed.tag}`;
18
- const outputsFor = (parsed) => ({
19
- url: `https://${parsed.domain}`,
20
- internalUrl: `http://${parsed.internalIp}:${parsed.port}`,
21
- });
22
- export const createGhDeploymentProvider = (ssh = sshExecutor) => ({
23
- read: async (inputs, ctx) => {
24
- if (typeof inputs["address"] !== "string") {
25
- return undefined;
26
- }
27
- const parsed = parse(inputs);
28
- const name = containerName(ctx);
29
- try {
30
- const session = await ssh.connect(sshTarget(parsed));
31
- try {
32
- const result = await session.exec(`docker inspect --format '{{.State.Running}}' ${name} 2>/dev/null || echo "not-found"`);
33
- const output = result.stdout.trim();
34
- if (output === "not-found" || output === "") {
35
- return undefined;
36
- }
37
- return { outputs: outputsFor(parsed), detail: { running: output === "true" } };
38
- }
39
- finally {
40
- await session.dispose();
41
- }
42
- }
43
- catch (error) {
44
- ctx.log(`gh-deployment "${ctx.id}": host not reachable yet: ${String(error)}`);
45
- return undefined;
46
- }
47
- },
48
- diff: (inputs, observed) => {
49
- if (observed.detail?.["running"] !== true) {
50
- return { action: "update", reason: "container is not running" };
51
- }
52
- return { action: "noop" };
53
- },
54
- apply: async (inputs, _observed, ctx) => {
55
- const parsed = parse(inputs);
56
- const name = containerName(ctx);
57
- const img = ghcrImage(parsed);
58
- const envFlags = Object.entries(parsed.env)
59
- .map(([key, value]) => `-e ${key}='${String(value)}'`)
60
- .join(" ");
61
- const envStr = envFlags.length > 0 ? ` ${envFlags}` : "";
62
- const script = [
63
- `docker pull ${img}`,
64
- `docker stop ${name} 2>/dev/null || true`,
65
- `docker rm ${name} 2>/dev/null || true`,
66
- `docker run -d --name ${name} --restart unless-stopped -p ${parsed.port}:${parsed.port}${envStr} ${img}`,
67
- ].join(" && ");
68
- const session = await ssh.connect(sshTarget(parsed));
69
- try {
70
- await session.exec(script);
71
- }
72
- finally {
73
- await session.dispose();
74
- }
75
- return outputsFor(parsed);
76
- },
77
- delete: async (inputs, ctx) => {
78
- if (typeof inputs["address"] !== "string") {
79
- return;
80
- }
81
- const parsed = parse(inputs);
82
- const name = containerName(ctx);
83
- const session = await ssh.connect(sshTarget(parsed));
84
- try {
85
- await session.exec(`docker stop ${name} 2>/dev/null || true && docker rm ${name} 2>/dev/null || true`);
86
- }
87
- finally {
88
- await session.dispose();
89
- }
90
- },
91
- });
92
- //# sourceMappingURL=gh-deployment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gh-deployment.js","sourceRoot":"","sources":["../../src/github/gh-deployment.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { Provider } from "@intentic/engine";
2
- import type { SshExecutor } from "../core/ssh.js";
3
- export declare const createGlDeploymentProvider: (ssh?: SshExecutor) => Provider;
4
- //# sourceMappingURL=gl-deployment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gl-deployment.d.ts","sourceRoot":"","sources":["../../src/gitlab/gl-deployment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,kBAAkB,CAAC;AAGjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA8BlD,eAAO,MAAM,0BAA0B,GAAI,MAAK,WAAyB,KAAG,QAmE1E,CAAC"}
@@ -1,93 +0,0 @@
1
- import { z } from "zod";
2
- import { parseInputs, registryImage, sshSchema, sshTarget } from "../core/inputs.js";
3
- import { sshExecutor } from "../core/ssh.js";
4
- const glDeploymentSchema = z
5
- .object({
6
- owner: z.string(),
7
- repoName: z.string(),
8
- tag: z.string(),
9
- registry: z.string(),
10
- domain: z.string(),
11
- internalIp: z.string(),
12
- port: z.coerce.number(),
13
- env: z.record(z.string(), z.unknown()).default({}),
14
- })
15
- .merge(sshSchema);
16
- const parse = (inputs) => parseInputs(glDeploymentSchema, inputs, "gl-deployment");
17
- const containerName = (ctx) => ctx.id;
18
- const glImage = (parsed) => registryImage({ registry: parsed.registry, owner: parsed.owner, repoName: parsed.repoName, tag: parsed.tag });
19
- const outputsFor = (parsed) => ({
20
- url: `https://${parsed.domain}`,
21
- internalUrl: `http://${parsed.internalIp}:${parsed.port}`,
22
- });
23
- export const createGlDeploymentProvider = (ssh = sshExecutor) => ({
24
- read: async (inputs, ctx) => {
25
- if (typeof inputs["address"] !== "string") {
26
- return undefined;
27
- }
28
- const parsed = parse(inputs);
29
- const name = containerName(ctx);
30
- try {
31
- const session = await ssh.connect(sshTarget(parsed));
32
- try {
33
- const result = await session.exec(`docker inspect --format '{{.State.Running}}' ${name} 2>/dev/null || echo "not-found"`);
34
- const output = result.stdout.trim();
35
- if (output === "not-found" || output === "") {
36
- return undefined;
37
- }
38
- return { outputs: outputsFor(parsed), detail: { running: output === "true" } };
39
- }
40
- finally {
41
- await session.dispose();
42
- }
43
- }
44
- catch (error) {
45
- ctx.log(`gl-deployment "${ctx.id}": host not reachable yet: ${String(error)}`);
46
- return undefined;
47
- }
48
- },
49
- diff: (inputs, observed) => {
50
- if (observed.detail?.["running"] !== true) {
51
- return { action: "update", reason: "container is not running" };
52
- }
53
- return { action: "noop" };
54
- },
55
- apply: async (inputs, _observed, ctx) => {
56
- const parsed = parse(inputs);
57
- const name = containerName(ctx);
58
- const img = glImage(parsed);
59
- const envFlags = Object.entries(parsed.env)
60
- .map(([key, value]) => `-e ${key}='${String(value)}'`)
61
- .join(" ");
62
- const envStr = envFlags.length > 0 ? ` ${envFlags}` : "";
63
- const script = [
64
- `docker pull ${img}`,
65
- `docker stop ${name} 2>/dev/null || true`,
66
- `docker rm ${name} 2>/dev/null || true`,
67
- `docker run -d --name ${name} --restart unless-stopped -p ${parsed.port}:${parsed.port}${envStr} ${img}`,
68
- ].join(" && ");
69
- const session = await ssh.connect(sshTarget(parsed));
70
- try {
71
- await session.exec(script);
72
- }
73
- finally {
74
- await session.dispose();
75
- }
76
- return outputsFor(parsed);
77
- },
78
- delete: async (inputs, ctx) => {
79
- if (typeof inputs["address"] !== "string") {
80
- return;
81
- }
82
- const parsed = parse(inputs);
83
- const name = containerName(ctx);
84
- const session = await ssh.connect(sshTarget(parsed));
85
- try {
86
- await session.exec(`docker stop ${name} 2>/dev/null || true && docker rm ${name} 2>/dev/null || true`);
87
- }
88
- finally {
89
- await session.dispose();
90
- }
91
- },
92
- });
93
- //# sourceMappingURL=gl-deployment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gl-deployment.js","sourceRoot":"","sources":["../../src/gitlab/gl-deployment.ts"],"names":[],"mappings":"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"}