@intentic/providers 1.18.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 (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/dist/app.d.ts +4 -0
  4. package/dist/app.d.ts.map +1 -0
  5. package/dist/app.js +72 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/authentik-api.d.ts +23 -0
  8. package/dist/authentik-api.d.ts.map +1 -0
  9. package/dist/authentik-api.js +67 -0
  10. package/dist/authentik-api.js.map +1 -0
  11. package/dist/authentik-client.d.ts +4 -0
  12. package/dist/authentik-client.d.ts.map +1 -0
  13. package/dist/authentik-client.js +50 -0
  14. package/dist/authentik-client.js.map +1 -0
  15. package/dist/authentik.d.ts +4 -0
  16. package/dist/authentik.d.ts.map +1 -0
  17. package/dist/authentik.js +132 -0
  18. package/dist/authentik.js.map +1 -0
  19. package/dist/backing-ssh.d.ts +8 -0
  20. package/dist/backing-ssh.d.ts.map +1 -0
  21. package/dist/backing-ssh.js +44 -0
  22. package/dist/backing-ssh.js.map +1 -0
  23. package/dist/backup-restore.d.ts +15 -0
  24. package/dist/backup-restore.d.ts.map +1 -0
  25. package/dist/backup-restore.js +49 -0
  26. package/dist/backup-restore.js.map +1 -0
  27. package/dist/backup.d.ts +4 -0
  28. package/dist/backup.d.ts.map +1 -0
  29. package/dist/backup.js +150 -0
  30. package/dist/backup.js.map +1 -0
  31. package/dist/cf-route.d.ts +5 -0
  32. package/dist/cf-route.d.ts.map +1 -0
  33. package/dist/cf-route.js +74 -0
  34. package/dist/cf-route.js.map +1 -0
  35. package/dist/ci.d.ts +4 -0
  36. package/dist/ci.d.ts.map +1 -0
  37. package/dist/ci.js +151 -0
  38. package/dist/ci.js.map +1 -0
  39. package/dist/cloudflare-api.d.ts +85 -0
  40. package/dist/cloudflare-api.d.ts.map +1 -0
  41. package/dist/cloudflare-api.js +110 -0
  42. package/dist/cloudflare-api.js.map +1 -0
  43. package/dist/cloudflare.d.ts +4 -0
  44. package/dist/cloudflare.d.ts.map +1 -0
  45. package/dist/cloudflare.js +29 -0
  46. package/dist/cloudflare.js.map +1 -0
  47. package/dist/deploy-hook.d.ts +4 -0
  48. package/dist/deploy-hook.d.ts.map +1 -0
  49. package/dist/deploy-hook.js +79 -0
  50. package/dist/deploy-hook.js.map +1 -0
  51. package/dist/deployment.d.ts +4 -0
  52. package/dist/deployment.d.ts.map +1 -0
  53. package/dist/deployment.js +103 -0
  54. package/dist/deployment.js.map +1 -0
  55. package/dist/discord-api.d.ts +31 -0
  56. package/dist/discord-api.d.ts.map +1 -0
  57. package/dist/discord-api.js +85 -0
  58. package/dist/discord-api.js.map +1 -0
  59. package/dist/discord.d.ts +4 -0
  60. package/dist/discord.d.ts.map +1 -0
  61. package/dist/discord.js +133 -0
  62. package/dist/discord.js.map +1 -0
  63. package/dist/forgejo-api.d.ts +209 -0
  64. package/dist/forgejo-api.d.ts.map +1 -0
  65. package/dist/forgejo-api.fake.d.ts +3 -0
  66. package/dist/forgejo-api.fake.d.ts.map +1 -0
  67. package/dist/forgejo-api.fake.js +31 -0
  68. package/dist/forgejo-api.fake.js.map +1 -0
  69. package/dist/forgejo-api.js +181 -0
  70. package/dist/forgejo-api.js.map +1 -0
  71. package/dist/forgejo-notify.d.ts +4 -0
  72. package/dist/forgejo-notify.d.ts.map +1 -0
  73. package/dist/forgejo-notify.js +103 -0
  74. package/dist/forgejo-notify.js.map +1 -0
  75. package/dist/forgejo-org.d.ts +4 -0
  76. package/dist/forgejo-org.d.ts.map +1 -0
  77. package/dist/forgejo-org.js +43 -0
  78. package/dist/forgejo-org.js.map +1 -0
  79. package/dist/forgejo-runner.d.ts +4 -0
  80. package/dist/forgejo-runner.d.ts.map +1 -0
  81. package/dist/forgejo-runner.js +111 -0
  82. package/dist/forgejo-runner.js.map +1 -0
  83. package/dist/forgejo-team.d.ts +4 -0
  84. package/dist/forgejo-team.d.ts.map +1 -0
  85. package/dist/forgejo-team.js +68 -0
  86. package/dist/forgejo-team.js.map +1 -0
  87. package/dist/forgejo-user.d.ts +4 -0
  88. package/dist/forgejo-user.d.ts.map +1 -0
  89. package/dist/forgejo-user.js +50 -0
  90. package/dist/forgejo-user.js.map +1 -0
  91. package/dist/forgejo.d.ts +4 -0
  92. package/dist/forgejo.d.ts.map +1 -0
  93. package/dist/forgejo.js +169 -0
  94. package/dist/forgejo.js.map +1 -0
  95. package/dist/garage-bucket.d.ts +4 -0
  96. package/dist/garage-bucket.d.ts.map +1 -0
  97. package/dist/garage-bucket.js +92 -0
  98. package/dist/garage-bucket.js.map +1 -0
  99. package/dist/garage.d.ts +4 -0
  100. package/dist/garage.d.ts.map +1 -0
  101. package/dist/garage.js +124 -0
  102. package/dist/garage.js.map +1 -0
  103. package/dist/gh-ci.d.ts +4 -0
  104. package/dist/gh-ci.d.ts.map +1 -0
  105. package/dist/gh-ci.js +153 -0
  106. package/dist/gh-ci.js.map +1 -0
  107. package/dist/gh-deployment.d.ts +4 -0
  108. package/dist/gh-deployment.d.ts.map +1 -0
  109. package/dist/gh-deployment.js +92 -0
  110. package/dist/gh-deployment.js.map +1 -0
  111. package/dist/gh-repo.d.ts +4 -0
  112. package/dist/gh-repo.d.ts.map +1 -0
  113. package/dist/gh-repo.js +52 -0
  114. package/dist/gh-repo.js.map +1 -0
  115. package/dist/github-api.d.ts +70 -0
  116. package/dist/github-api.d.ts.map +1 -0
  117. package/dist/github-api.js +120 -0
  118. package/dist/github-api.js.map +1 -0
  119. package/dist/github.d.ts +4 -0
  120. package/dist/github.d.ts.map +1 -0
  121. package/dist/github.js +34 -0
  122. package/dist/github.js.map +1 -0
  123. package/dist/guarded-update.d.ts +14 -0
  124. package/dist/guarded-update.d.ts.map +1 -0
  125. package/dist/guarded-update.js +25 -0
  126. package/dist/guarded-update.js.map +1 -0
  127. package/dist/host.d.ts +4 -0
  128. package/dist/host.d.ts.map +1 -0
  129. package/dist/host.js +48 -0
  130. package/dist/host.js.map +1 -0
  131. package/dist/index.d.ts +42 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +35 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/inputs.d.ts +23 -0
  136. package/dist/inputs.d.ts.map +1 -0
  137. package/dist/inputs.js +34 -0
  138. package/dist/inputs.js.map +1 -0
  139. package/dist/komodo-api.d.ts +150 -0
  140. package/dist/komodo-api.d.ts.map +1 -0
  141. package/dist/komodo-api.js +104 -0
  142. package/dist/komodo-api.js.map +1 -0
  143. package/dist/komodo-notify.d.ts +4 -0
  144. package/dist/komodo-notify.d.ts.map +1 -0
  145. package/dist/komodo-notify.js +88 -0
  146. package/dist/komodo-notify.js.map +1 -0
  147. package/dist/komodo-periphery.d.ts +4 -0
  148. package/dist/komodo-periphery.d.ts.map +1 -0
  149. package/dist/komodo-periphery.js +92 -0
  150. package/dist/komodo-periphery.js.map +1 -0
  151. package/dist/komodo-server.d.ts +4 -0
  152. package/dist/komodo-server.d.ts.map +1 -0
  153. package/dist/komodo-server.js +54 -0
  154. package/dist/komodo-server.js.map +1 -0
  155. package/dist/komodo-user.d.ts +4 -0
  156. package/dist/komodo-user.d.ts.map +1 -0
  157. package/dist/komodo-user.js +66 -0
  158. package/dist/komodo-user.js.map +1 -0
  159. package/dist/komodo.d.ts +4 -0
  160. package/dist/komodo.d.ts.map +1 -0
  161. package/dist/komodo.js +222 -0
  162. package/dist/komodo.js.map +1 -0
  163. package/dist/postgres-database.d.ts +4 -0
  164. package/dist/postgres-database.d.ts.map +1 -0
  165. package/dist/postgres-database.js +88 -0
  166. package/dist/postgres-database.js.map +1 -0
  167. package/dist/postgres.d.ts +4 -0
  168. package/dist/postgres.d.ts.map +1 -0
  169. package/dist/postgres.js +95 -0
  170. package/dist/postgres.js.map +1 -0
  171. package/dist/providers.d.ts +21 -0
  172. package/dist/providers.d.ts.map +1 -0
  173. package/dist/providers.js +86 -0
  174. package/dist/providers.js.map +1 -0
  175. package/dist/repo.d.ts +4 -0
  176. package/dist/repo.d.ts.map +1 -0
  177. package/dist/repo.js +80 -0
  178. package/dist/repo.js.map +1 -0
  179. package/dist/signoz.d.ts +4 -0
  180. package/dist/signoz.d.ts.map +1 -0
  181. package/dist/signoz.js +386 -0
  182. package/dist/signoz.js.map +1 -0
  183. package/dist/ssh-probe.d.ts +5 -0
  184. package/dist/ssh-probe.d.ts.map +1 -0
  185. package/dist/ssh-probe.js +22 -0
  186. package/dist/ssh-probe.js.map +1 -0
  187. package/dist/ssh.d.ts +27 -0
  188. package/dist/ssh.d.ts.map +1 -0
  189. package/dist/ssh.js +79 -0
  190. package/dist/ssh.js.map +1 -0
  191. package/dist/tunnel.d.ts +5 -0
  192. package/dist/tunnel.d.ts.map +1 -0
  193. package/dist/tunnel.js +126 -0
  194. package/dist/tunnel.js.map +1 -0
  195. package/dist/valkey-namespace.d.ts +4 -0
  196. package/dist/valkey-namespace.d.ts.map +1 -0
  197. package/dist/valkey-namespace.js +78 -0
  198. package/dist/valkey-namespace.js.map +1 -0
  199. package/dist/valkey.d.ts +4 -0
  200. package/dist/valkey.d.ts.map +1 -0
  201. package/dist/valkey.js +94 -0
  202. package/dist/valkey.js.map +1 -0
  203. package/dist/workspace.d.ts +4 -0
  204. package/dist/workspace.d.ts.map +1 -0
  205. package/dist/workspace.js +97 -0
  206. package/dist/workspace.js.map +1 -0
  207. package/package.json +53 -0
@@ -0,0 +1,120 @@
1
+ import { z } from "zod";
2
+ import { parseResponse } from "./inputs.js";
3
+ const headers = (token) => ({
4
+ Authorization: `Bearer ${token}`,
5
+ Accept: "application/vnd.github+json",
6
+ "X-GitHub-Api-Version": "2022-11-28",
7
+ });
8
+ const json = async (url, init) => {
9
+ const response = await fetch(url, init);
10
+ if (!response.ok) {
11
+ const body = await response.text().catch(() => "");
12
+ throw new Error(`GitHub API ${init.method ?? "GET"} ${url}: ${response.status} ${body}`);
13
+ }
14
+ if (response.status === 204) {
15
+ return undefined;
16
+ }
17
+ return response.json();
18
+ };
19
+ const userSchema = z.object({ login: z.string() });
20
+ const repoSchema = z.object({ clone_url: z.string(), ssh_url: z.string(), full_name: z.string() });
21
+ const publicKeySchema = z.object({ key_id: z.string(), key: z.string() });
22
+ const contentSchema = z.object({ content: z.string(), sha: z.string() });
23
+ const BASE = "https://api.github.com";
24
+ export const githubApi = {
25
+ getAuthenticatedUser: async ({ token }) => {
26
+ const data = await json(`${BASE}/user`, { headers: headers(token) });
27
+ return parseResponse(userSchema, data, "GitHub /user");
28
+ },
29
+ findRepo: async ({ token, owner, name }) => {
30
+ const response = await fetch(`${BASE}/repos/${owner}/${name}`, { headers: headers(token) });
31
+ if (response.status === 404) {
32
+ return undefined;
33
+ }
34
+ if (!response.ok) {
35
+ throw new Error(`GitHub API GET /repos/${owner}/${name}: ${response.status}`);
36
+ }
37
+ const data = parseResponse(repoSchema, await response.json(), "GitHub /repos");
38
+ return { cloneUrl: data.clone_url, sshUrl: data.ssh_url };
39
+ },
40
+ createRepo: async ({ token, owner, name, private: isPrivate, ownerIsOrg }) => {
41
+ const url = ownerIsOrg ? `${BASE}/orgs/${owner}/repos` : `${BASE}/user/repos`;
42
+ await json(url, {
43
+ method: "POST",
44
+ headers: { ...headers(token), "Content-Type": "application/json" },
45
+ body: JSON.stringify({ name, private: isPrivate, auto_init: true }),
46
+ });
47
+ },
48
+ deleteRepo: async ({ token, owner, name }) => {
49
+ const response = await fetch(`${BASE}/repos/${owner}/${name}`, { method: "DELETE", headers: headers(token) });
50
+ if (response.status === 404) {
51
+ return;
52
+ }
53
+ if (!response.ok) {
54
+ throw new Error(`GitHub API DELETE /repos/${owner}/${name}: ${response.status}`);
55
+ }
56
+ },
57
+ readFile: async ({ token, owner, repo, path, branch }) => {
58
+ const response = await fetch(`${BASE}/repos/${owner}/${repo}/contents/${path}?ref=${branch}`, { headers: headers(token) });
59
+ if (response.status === 404) {
60
+ return undefined;
61
+ }
62
+ if (!response.ok) {
63
+ throw new Error(`GitHub API GET /repos/${owner}/${repo}/contents/${path}: ${response.status}`);
64
+ }
65
+ const data = parseResponse(contentSchema, await response.json(), "GitHub /contents");
66
+ return { content: Buffer.from(data.content, "base64").toString("utf-8"), sha: data.sha };
67
+ },
68
+ commitFile: async ({ token, owner, repo, path, content, branch, message, sha }) => {
69
+ await json(`${BASE}/repos/${owner}/${repo}/contents/${path}`, {
70
+ method: "PUT",
71
+ headers: { ...headers(token), "Content-Type": "application/json" },
72
+ body: JSON.stringify({
73
+ message,
74
+ content: Buffer.from(content).toString("base64"),
75
+ branch,
76
+ ...(sha !== undefined ? { sha } : {}),
77
+ }),
78
+ });
79
+ },
80
+ deleteFile: async ({ token, owner, repo, path, branch, message }) => {
81
+ const file = await githubApi.readFile({ token, owner, repo, path, branch });
82
+ if (file === undefined) {
83
+ return;
84
+ }
85
+ await json(`${BASE}/repos/${owner}/${repo}/contents/${path}`, {
86
+ method: "DELETE",
87
+ headers: { ...headers(token), "Content-Type": "application/json" },
88
+ body: JSON.stringify({ message, sha: file.sha, branch }),
89
+ });
90
+ },
91
+ setRepoSecret: async ({ token, owner, repo, secretName, value }) => {
92
+ const keyData = await json(`${BASE}/repos/${owner}/${repo}/actions/secrets/public-key`, { headers: headers(token) });
93
+ const parsed = parseResponse(publicKeySchema, keyData, "GitHub /actions/secrets/public-key");
94
+ const sodium = await import("libsodium-wrappers").then((m) => m.default ?? m, () => {
95
+ throw new Error("libsodium-wrappers is required for GitHub Actions secrets; install it: pnpm add libsodium-wrappers");
96
+ });
97
+ await sodium.ready;
98
+ const keyBytes = sodium.from_base64(parsed.key, sodium.base64_variants.ORIGINAL);
99
+ const encrypted = sodium.crypto_box_seal(Buffer.from(value), keyBytes);
100
+ const encryptedBase64 = sodium.to_base64(encrypted, sodium.base64_variants.ORIGINAL);
101
+ await json(`${BASE}/repos/${owner}/${repo}/actions/secrets/${secretName}`, {
102
+ method: "PUT",
103
+ headers: { ...headers(token), "Content-Type": "application/json" },
104
+ body: JSON.stringify({ encrypted_value: encryptedBase64, key_id: parsed.key_id }),
105
+ });
106
+ },
107
+ deleteRepoSecret: async ({ token, owner, repo, secretName }) => {
108
+ const response = await fetch(`${BASE}/repos/${owner}/${repo}/actions/secrets/${secretName}`, {
109
+ method: "DELETE",
110
+ headers: headers(token),
111
+ });
112
+ if (response.status === 404) {
113
+ return;
114
+ }
115
+ if (!response.ok) {
116
+ throw new Error(`GitHub API DELETE secret ${secretName}: ${response.status}`);
117
+ }
118
+ },
119
+ };
120
+ //# sourceMappingURL=github-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-api.js","sourceRoot":"","sources":["../src/github-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Provider } from "@intentic/engine";
2
+ import type { GitHubApi } from "./github-api.js";
3
+ export declare const createGitHubProvider: (api?: GitHubApi) => Provider;
4
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,kBAAkB,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAcjD,eAAO,MAAM,oBAAoB,GAAI,MAAK,SAAqB,KAAG,QAwBhE,CAAC"}
package/dist/github.js ADDED
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ import { githubApi } from "./github-api.js";
3
+ import { parseInputs } from "./inputs.js";
4
+ const githubSchema = z.object({
5
+ token: z.string(),
6
+ owner: z.string().optional(),
7
+ });
8
+ const parse = (inputs) => parseInputs(githubSchema, inputs, "github");
9
+ export const createGitHubProvider = (api = githubApi) => ({
10
+ read: async (inputs, ctx) => {
11
+ if (typeof inputs["token"] !== "string") {
12
+ return undefined;
13
+ }
14
+ const parsed = parse(inputs);
15
+ try {
16
+ const user = await api.getAuthenticatedUser({ token: parsed.token });
17
+ const owner = parsed.owner ?? user.login;
18
+ return { outputs: { owner } };
19
+ }
20
+ catch (error) {
21
+ ctx.log(`github "${ctx.id}": not reachable yet: ${String(error)}`);
22
+ return undefined;
23
+ }
24
+ },
25
+ diff: () => ({ action: "noop" }),
26
+ apply: async (inputs) => {
27
+ const parsed = parse(inputs);
28
+ const user = await api.getAuthenticatedUser({ token: parsed.token });
29
+ return { owner: parsed.owner ?? user.login };
30
+ },
31
+ delete: async () => {
32
+ },
33
+ });
34
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IAEjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,CAAC,MAAsB,EAAgB,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAIpG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAiB,SAAS,EAAY,EAAE,CAAC,CAAC;IAC3E,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QACxB,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,GAAG,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,yBAAyB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnE,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IACD,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAChC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACjD,CAAC;IACD,MAAM,EAAE,KAAK,IAAI,EAAE;IAEnB,CAAC;CACJ,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { SshSession } from "./ssh.js";
2
+ export interface GuardedUpdateOpts {
3
+ readonly session: SshSession;
4
+ readonly repo: string;
5
+ readonly resticImage: string;
6
+ readonly volumes: readonly string[];
7
+ readonly tag: string;
8
+ readonly recreate: () => Promise<void>;
9
+ readonly stop: () => Promise<void>;
10
+ readonly rollback: () => Promise<void>;
11
+ readonly log: (message: string) => void;
12
+ }
13
+ export declare const guardedUpdate: (opts: GuardedUpdateOpts) => Promise<void>;
14
+ //# sourceMappingURL=guarded-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guarded-update.d.ts","sourceRoot":"","sources":["../src/guarded-update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAM3C,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAWD,eAAO,MAAM,aAAa,GAAU,MAAM,iBAAiB,KAAG,OAAO,CAAC,IAAI,CAuBzE,CAAC"}
@@ -0,0 +1,25 @@
1
+ const RESTIC_ENV = "/opt/intentic/backup/restic.env";
2
+ const resticRun = (opts, volume, mode, args) => `docker run --rm --env-file ${RESTIC_ENV} -v ${volume}:/v${mode} ${opts.resticImage} -r '${opts.repo}' ${args}`;
3
+ export const guardedUpdate = async (opts) => {
4
+ for (const volume of opts.volumes) {
5
+ const snapshot = await opts.session.exec(resticRun(opts, volume, ":ro", `backup /v --tag ${opts.tag}`));
6
+ if (snapshot.code !== 0) {
7
+ throw new Error(`guarded update: pre-update snapshot of ${volume} failed (exit ${snapshot.code}): ${snapshot.stderr.trim()} — ` +
8
+ "refusing to update without a recovery point (is i.have.backup applied?)");
9
+ }
10
+ }
11
+ opts.log(`guarded update: snapshotted ${opts.volumes.length} volume(s) as tag "${opts.tag}"`);
12
+ try {
13
+ await opts.recreate();
14
+ }
15
+ catch (error) {
16
+ opts.log(`guarded update: new image failed health — rolling back image + data: ${String(error)}`);
17
+ await opts.stop();
18
+ for (const volume of opts.volumes) {
19
+ await opts.session.exec(resticRun(opts, volume, "", `restore latest --tag ${opts.tag} --target /`));
20
+ }
21
+ await opts.rollback();
22
+ throw error;
23
+ }
24
+ };
25
+ //# sourceMappingURL=guarded-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guarded-update.js","sourceRoot":"","sources":["../src/guarded-update.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,GAAG,iCAAiC,CAAC;AAmBrD,MAAM,SAAS,GAAG,CAAC,IAAuB,EAAE,MAAc,EAAE,IAAgB,EAAE,IAAY,EAAU,EAAE,CAClG,8BAA8B,UAAU,OAAO,MAAM,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;AAQpH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,IAAuB,EAAiB,EAAE;IAC1E,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxG,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACX,0CAA0C,MAAM,iBAAiB,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK;gBAC3G,yEAAyE,CAChF,CAAC;QACN,CAAC;IACL,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,OAAO,CAAC,MAAM,sBAAsB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9F,IAAI,CAAC;QACD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,wEAAwE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAEhC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,wBAAwB,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC,CAAC"}
package/dist/host.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { Provider } from "@intentic/engine";
2
+ import type { SshExecutor } from "./ssh.js";
3
+ export declare const createHostProvider: (executor?: SshExecutor) => Provider;
4
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,kBAAkB,CAAC;AAGjE,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,UAAU,CAAC;AAyBxD,eAAO,MAAM,kBAAkB,GAAI,WAAU,WAAyB,KAAG,QA+BvE,CAAC"}
package/dist/host.js ADDED
@@ -0,0 +1,48 @@
1
+ import { parseInputs, sshSchema, sshTarget } from "./inputs.js";
2
+ import { sshExecutor } from "./ssh.js";
3
+ const parse = (inputs) => parseInputs(sshSchema, inputs, "host");
4
+ const gather = async (session, address) => {
5
+ const docker = await session.exec("docker version --format '{{.Server.Version}}'");
6
+ if (docker.code !== 0) {
7
+ throw new Error(`host is not Docker-ready: \`docker version\` exited ${docker.code}: ${docker.stderr.trim()}`);
8
+ }
9
+ const route = await session.exec("ip -4 -o route get 1.1.1.1 | awk '{print $7; exit}'");
10
+ if (route.code !== 0) {
11
+ throw new Error(`failed to read host internal ip: exited ${route.code}: ${route.stderr.trim()}`);
12
+ }
13
+ return { internalIp: route.stdout.trim(), publicIp: address };
14
+ };
15
+ export const createHostProvider = (executor = sshExecutor) => ({
16
+ read: async (inputs, ctx) => {
17
+ const parsed = parse(inputs);
18
+ let session;
19
+ try {
20
+ session = await executor.connect(sshTarget(parsed));
21
+ }
22
+ catch (error) {
23
+ ctx.log(`host "${ctx.id}" is not reachable over SSH, treating as not-yet-created: ${String(error)}`);
24
+ return undefined;
25
+ }
26
+ try {
27
+ return { outputs: await gather(session, parsed.address) };
28
+ }
29
+ finally {
30
+ await session.dispose();
31
+ }
32
+ },
33
+ diff: () => ({ action: "noop" }),
34
+ apply: async (inputs) => {
35
+ const parsed = parse(inputs);
36
+ const session = await executor.connect(sshTarget(parsed));
37
+ try {
38
+ return await gather(session, parsed.address);
39
+ }
40
+ finally {
41
+ await session.dispose();
42
+ }
43
+ },
44
+ delete: async (_inputs, ctx) => {
45
+ ctx.log(`host "${ctx.id}" removed from desired state — owned infra is never torn down by intentic`);
46
+ },
47
+ });
48
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC,MAAM,KAAK,GAAG,CAAC,MAAsB,EAAc,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAK7F,MAAM,MAAM,GAAG,KAAK,EAAE,OAAmB,EAAE,OAAe,EAAoC,EAAE;IAC5F,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACnF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,uDAAuD,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACxF,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2CAA2C,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAClE,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,WAAwB,WAAW,EAAY,EAAE,CAAC,CAAC;IAClF,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,OAAmB,CAAC;QACxB,IAAI,CAAC;YACD,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,GAAG,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,6DAA6D,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrG,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,IAAI,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,CAAC;gBAAS,CAAC;YACP,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAChC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC;YACD,OAAO,MAAM,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;gBAAS,CAAC;YACP,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAGD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QAC3B,GAAG,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,2EAA2E,CAAC,CAAC;IACxG,CAAC;CACJ,CAAC,CAAC"}
@@ -0,0 +1,42 @@
1
+ export { createAuthentikProvider } from "./authentik.js";
2
+ export { type AuthentikApi, authentikApi } from "./authentik-api.js";
3
+ export { createAuthentikClientProvider } from "./authentik-client.js";
4
+ export { createBackupProvider } from "./backup.js";
5
+ export { type RestoreArgs, type RestoreScope, restoreBackup } from "./backup-restore.js";
6
+ export { createCfRouteProvider } from "./cf-route.js";
7
+ export { createCiProvider } from "./ci.js";
8
+ export { createCloudflareProvider } from "./cloudflare.js";
9
+ export type { CloudflareApi, IngressRule } from "./cloudflare-api.js";
10
+ export { cloudflareApi } from "./cloudflare-api.js";
11
+ export { createDeploymentProvider } from "./deployment.js";
12
+ export { createDiscordProvider } from "./discord.js";
13
+ export type { DiscordApi, DiscordChannel, DiscordGuild, DiscordWebhook } from "./discord-api.js";
14
+ export { discordApi } from "./discord-api.js";
15
+ export { createForgejoProvider } from "./forgejo.js";
16
+ export { fakeForgejoApi } from "./forgejo-api.fake.js";
17
+ export type { ForgejoApi, ForgejoHook, ForgejoRepo } from "./forgejo-api.js";
18
+ export { forgejoApi } from "./forgejo-api.js";
19
+ export { createForgejoNotifyProvider } from "./forgejo-notify.js";
20
+ export { createForgejoRunnerProvider } from "./forgejo-runner.js";
21
+ export { createGarageProvider } from "./garage.js";
22
+ export { createGarageBucketProvider } from "./garage-bucket.js";
23
+ export { createGhCiProvider } from "./gh-ci.js";
24
+ export { createGhDeploymentProvider } from "./gh-deployment.js";
25
+ export { createGhRepoProvider } from "./gh-repo.js";
26
+ export { createGitHubProvider } from "./github.js";
27
+ export type { GitHubApi } from "./github-api.js";
28
+ export { githubApi } from "./github-api.js";
29
+ export { createHostProvider } from "./host.js";
30
+ export { parseInputs } from "./inputs.js";
31
+ export { createKomodoProvider } from "./komodo.js";
32
+ export type { AlerterConfig, AlerterEndpoint, DeploymentConfig, KomodoApi, KomodoResource, ResourceTarget } from "./komodo-api.js";
33
+ export { komodoApi } from "./komodo-api.js";
34
+ export { createKomodoNotifyProvider } from "./komodo-notify.js";
35
+ export type { ProviderDeps } from "./providers.js";
36
+ export { createProviders } from "./providers.js";
37
+ export { createRepoProvider } from "./repo.js";
38
+ export type { HostKeyStore, SshExecutor, SshResult, SshSession, SshTarget } from "./ssh.js";
39
+ export { createSshExecutor, inMemoryHostKeyStore, sshExecutor, verifyHostKey } from "./ssh.js";
40
+ export { createSshProbe, hostTarget } from "./ssh-probe.js";
41
+ export { createTunnelProvider } from "./tunnel.js";
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ export { createAuthentikProvider } from "./authentik.js";
2
+ export { authentikApi } from "./authentik-api.js";
3
+ export { createAuthentikClientProvider } from "./authentik-client.js";
4
+ export { createBackupProvider } from "./backup.js";
5
+ export { restoreBackup } from "./backup-restore.js";
6
+ export { createCfRouteProvider } from "./cf-route.js";
7
+ export { createCiProvider } from "./ci.js";
8
+ export { createCloudflareProvider } from "./cloudflare.js";
9
+ export { cloudflareApi } from "./cloudflare-api.js";
10
+ export { createDeploymentProvider } from "./deployment.js";
11
+ export { createDiscordProvider } from "./discord.js";
12
+ export { discordApi } from "./discord-api.js";
13
+ export { createForgejoProvider } from "./forgejo.js";
14
+ export { fakeForgejoApi } from "./forgejo-api.fake.js";
15
+ export { forgejoApi } from "./forgejo-api.js";
16
+ export { createForgejoNotifyProvider } from "./forgejo-notify.js";
17
+ export { createForgejoRunnerProvider } from "./forgejo-runner.js";
18
+ export { createGarageProvider } from "./garage.js";
19
+ export { createGarageBucketProvider } from "./garage-bucket.js";
20
+ export { createGhCiProvider } from "./gh-ci.js";
21
+ export { createGhDeploymentProvider } from "./gh-deployment.js";
22
+ export { createGhRepoProvider } from "./gh-repo.js";
23
+ export { createGitHubProvider } from "./github.js";
24
+ export { githubApi } from "./github-api.js";
25
+ export { createHostProvider } from "./host.js";
26
+ export { parseInputs } from "./inputs.js";
27
+ export { createKomodoProvider } from "./komodo.js";
28
+ export { komodoApi } from "./komodo-api.js";
29
+ export { createKomodoNotifyProvider } from "./komodo-notify.js";
30
+ export { createProviders } from "./providers.js";
31
+ export { createRepoProvider } from "./repo.js";
32
+ export { createSshExecutor, inMemoryHostKeyStore, sshExecutor, verifyHostKey } from "./ssh.js";
33
+ export { createSshProbe, hostTarget } from "./ssh-probe.js";
34
+ export { createTunnelProvider } from "./tunnel.js";
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAqB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAuC,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ResolvedInputs } from "@intentic/engine";
2
+ import { z } from "zod";
3
+ import type { SshTarget } from "./ssh.js";
4
+ export declare const sshSchema: z.ZodObject<{
5
+ address: z.ZodString;
6
+ user: z.ZodString;
7
+ sshKey: z.ZodString;
8
+ port: z.ZodDefault<z.ZodNumber>;
9
+ }, z.core.$strip>;
10
+ export declare const parseInputs: <S extends z.ZodType>(schema: S, inputs: ResolvedInputs, label: string) => z.infer<S>;
11
+ export declare const parseResponse: <S extends z.ZodType>(schema: S, value: unknown, label: string) => z.infer<S>;
12
+ export declare const sshTarget: (parsed: z.infer<typeof sshSchema>) => SshTarget;
13
+ export declare const gitProvider: (forgejoUrl: string) => {
14
+ domain: string;
15
+ https: boolean;
16
+ };
17
+ export declare const registryImage: (args: {
18
+ registry: string;
19
+ owner: string;
20
+ repoName: string;
21
+ tag: string;
22
+ }) => string;
23
+ //# sourceMappingURL=inputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../src/inputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI1C,eAAO,MAAM,SAAS;;;;;iBAKpB,CAAC;AAOH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,cAAc,EAAE,OAAO,MAAM,KAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAM5G,CAAC;AAMF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,OAAO,EAAE,OAAO,MAAM,KAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAMtG,CAAC;AAGF,eAAO,MAAM,SAAS,GAAI,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,KAAG,SAK5D,CAAC;AAQH,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAG/E,CAAC;AAMH,eAAO,MAAM,aAAa,GAAI,MAAM;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,KAAG,MACxC,CAAC"}
package/dist/inputs.js ADDED
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ export const sshSchema = z.object({
3
+ address: z.string(),
4
+ user: z.string(),
5
+ sshKey: z.string(),
6
+ port: z.number().default(22),
7
+ });
8
+ const issues = (error) => error.issues.map((issue) => `${issue.path.join(".")} ${issue.message}`).join("; ");
9
+ export const parseInputs = (schema, inputs, label) => {
10
+ const result = schema.safeParse(inputs);
11
+ if (!result.success) {
12
+ throw new Error(`${label} inputs malformed: ${issues(result.error)}`);
13
+ }
14
+ return result.data;
15
+ };
16
+ export const parseResponse = (schema, value, label) => {
17
+ const result = schema.safeParse(value);
18
+ if (!result.success) {
19
+ throw new Error(`${label} returned an unexpected response: ${issues(result.error)}`);
20
+ }
21
+ return result.data;
22
+ };
23
+ export const sshTarget = (parsed) => ({
24
+ address: parsed.address,
25
+ user: parsed.user,
26
+ privateKey: parsed.sshKey,
27
+ port: parsed.port,
28
+ });
29
+ export const gitProvider = (forgejoUrl) => ({
30
+ domain: forgejoUrl.replace(/^https?:\/\//, "").replace(/\/+$/, ""),
31
+ https: forgejoUrl.startsWith("https://"),
32
+ });
33
+ export const registryImage = (args) => `${args.registry}/${args.owner}/${args.repoName}:${args.tag}`;
34
+ //# sourceMappingURL=inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../src/inputs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAU,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAKjI,MAAM,CAAC,MAAM,WAAW,GAAG,CAAsB,MAAS,EAAE,MAAsB,EAAE,KAAa,EAAc,EAAE;IAC7G,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,sBAAsB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACvB,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAsB,MAAS,EAAE,KAAc,EAAE,KAAa,EAAc,EAAE;IACvG,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,qCAAqC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACvB,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAiC,EAAa,EAAE,CAAC,CAAC;IACxE,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM;IACzB,IAAI,EAAE,MAAM,CAAC,IAAI;CACpB,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAsC,EAAE,CAAC,CAAC;IACpF,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAClE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;CAC3C,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAwE,EAAU,EAAE,CAC9G,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC"}
@@ -0,0 +1,150 @@
1
+ import { z } from "zod";
2
+ export interface KomodoResource {
3
+ readonly id: string;
4
+ readonly name: string;
5
+ }
6
+ export interface KomodoUser {
7
+ readonly id: string;
8
+ readonly username: string;
9
+ readonly enabled: boolean;
10
+ }
11
+ export type KomodoPermissionLevel = "Read" | "Execute" | "Write";
12
+ declare const deploymentConfigSchema: z.ZodObject<{
13
+ environment: z.ZodDefault<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodObject<{
14
+ variable: z.ZodString;
15
+ value: z.ZodString;
16
+ }, z.core.$strip>>]>>;
17
+ }, z.core.$loose>;
18
+ export type DeploymentConfig = z.infer<typeof deploymentConfigSchema>;
19
+ declare const alerterEndpointSchema: z.ZodObject<{
20
+ type: z.ZodEnum<{
21
+ Discord: "Discord";
22
+ Slack: "Slack";
23
+ Custom: "Custom";
24
+ }>;
25
+ params: z.ZodObject<{
26
+ url: z.ZodString;
27
+ }, z.core.$strip>;
28
+ }, z.core.$strip>;
29
+ declare const resourceTargetSchema: z.ZodObject<{
30
+ type: z.ZodString;
31
+ id: z.ZodString;
32
+ }, z.core.$strip>;
33
+ declare const alerterConfigSchema: z.ZodObject<{
34
+ enabled: z.ZodBoolean;
35
+ endpoint: z.ZodObject<{
36
+ type: z.ZodEnum<{
37
+ Discord: "Discord";
38
+ Slack: "Slack";
39
+ Custom: "Custom";
40
+ }>;
41
+ params: z.ZodObject<{
42
+ url: z.ZodString;
43
+ }, z.core.$strip>;
44
+ }, z.core.$strip>;
45
+ alert_types: z.ZodReadonly<z.ZodArray<z.ZodString>>;
46
+ resources: z.ZodReadonly<z.ZodArray<z.ZodObject<{
47
+ type: z.ZodString;
48
+ id: z.ZodString;
49
+ }, z.core.$strip>>>;
50
+ except_resources: z.ZodReadonly<z.ZodArray<z.ZodObject<{
51
+ type: z.ZodString;
52
+ id: z.ZodString;
53
+ }, z.core.$strip>>>;
54
+ }, z.core.$strip>;
55
+ export type AlerterEndpoint = z.infer<typeof alerterEndpointSchema>;
56
+ export type ResourceTarget = z.infer<typeof resourceTargetSchema>;
57
+ export type AlerterConfig = z.infer<typeof alerterConfigSchema>;
58
+ export interface KomodoApi {
59
+ readonly login: (args: {
60
+ readonly baseUrl: string;
61
+ readonly username: string;
62
+ readonly password: string;
63
+ }) => Promise<string>;
64
+ readonly listServers: (args: {
65
+ readonly baseUrl: string;
66
+ readonly jwt: string;
67
+ }) => Promise<readonly KomodoResource[]>;
68
+ readonly listDeployments: (args: {
69
+ readonly baseUrl: string;
70
+ readonly jwt: string;
71
+ }) => Promise<readonly KomodoResource[]>;
72
+ readonly getDeployment: (args: {
73
+ readonly baseUrl: string;
74
+ readonly jwt: string;
75
+ readonly deployment: string;
76
+ }) => Promise<DeploymentConfig>;
77
+ readonly createDeployment: (args: {
78
+ readonly baseUrl: string;
79
+ readonly jwt: string;
80
+ readonly name: string;
81
+ readonly config: Readonly<Record<string, unknown>>;
82
+ }) => Promise<void>;
83
+ readonly updateDeployment: (args: {
84
+ readonly baseUrl: string;
85
+ readonly jwt: string;
86
+ readonly id: string;
87
+ readonly config: Readonly<Record<string, unknown>>;
88
+ }) => Promise<void>;
89
+ readonly deleteDeployment: (args: {
90
+ readonly baseUrl: string;
91
+ readonly jwt: string;
92
+ readonly id: string;
93
+ }) => Promise<void>;
94
+ readonly listUsers: (args: {
95
+ readonly baseUrl: string;
96
+ readonly jwt: string;
97
+ }) => Promise<readonly KomodoUser[]>;
98
+ readonly deleteUser: (args: {
99
+ readonly baseUrl: string;
100
+ readonly jwt: string;
101
+ readonly userId: string;
102
+ }) => Promise<void>;
103
+ readonly createUser: (args: {
104
+ readonly baseUrl: string;
105
+ readonly jwt: string;
106
+ readonly username: string;
107
+ readonly password: string;
108
+ }) => Promise<void>;
109
+ readonly enableUser: (args: {
110
+ readonly baseUrl: string;
111
+ readonly jwt: string;
112
+ readonly userId: string;
113
+ }) => Promise<void>;
114
+ readonly setPermissionOnTarget: (args: {
115
+ readonly baseUrl: string;
116
+ readonly jwt: string;
117
+ readonly userId: string;
118
+ readonly deployment: string;
119
+ readonly level: KomodoPermissionLevel;
120
+ }) => Promise<void>;
121
+ readonly listAlerters: (args: {
122
+ readonly baseUrl: string;
123
+ readonly jwt: string;
124
+ }) => Promise<readonly KomodoResource[]>;
125
+ readonly getAlerter: (args: {
126
+ readonly baseUrl: string;
127
+ readonly jwt: string;
128
+ readonly id: string;
129
+ }) => Promise<AlerterConfig>;
130
+ readonly createAlerter: (args: {
131
+ readonly baseUrl: string;
132
+ readonly jwt: string;
133
+ readonly name: string;
134
+ readonly config: AlerterConfig;
135
+ }) => Promise<void>;
136
+ readonly updateAlerter: (args: {
137
+ readonly baseUrl: string;
138
+ readonly jwt: string;
139
+ readonly id: string;
140
+ readonly config: AlerterConfig;
141
+ }) => Promise<void>;
142
+ readonly deleteAlerter: (args: {
143
+ readonly baseUrl: string;
144
+ readonly jwt: string;
145
+ readonly id: string;
146
+ }) => Promise<void>;
147
+ }
148
+ export declare const komodoApi: KomodoApi;
149
+ export {};
150
+ //# sourceMappingURL=komodo-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"komodo-api.d.ts","sourceRoot":"","sources":["../src/komodo-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAID,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC7B;AAGD,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAOjE,QAAA,MAAM,sBAAsB;;;;;iBAIV,CAAC;AACnB,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,QAAA,MAAM,qBAAqB;;;;;;;;;iBAAoG,CAAC;AAChI,QAAA,MAAM,oBAAoB;;;iBAAiD,CAAC;AAC5E,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;iBAMvB,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAmBhE,MAAM,WAAW,SAAS;IAEtB,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9H,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IACvH,QAAQ,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAE3H,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7I,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KACtD,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KACtD,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5H,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IAEjH,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1H,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC7B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1H,QAAQ,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE;QACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;KACzC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IACxH,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/H,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE;QAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;KAClC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE;QAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;KAClC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5H;AAoCD,eAAO,MAAM,SAAS,EAAE,SAwEvB,CAAC"}