@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 @@
1
+ {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../src/ssh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Provider } from "@intentic/engine";
2
+ import type { CloudflareApi } from "./cloudflare-api.js";
3
+ import type { SshExecutor } from "./ssh.js";
4
+ export declare const createTunnelProvider: (api?: CloudflareApi, executor?: SshExecutor) => Provider;
5
+ //# sourceMappingURL=tunnel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAmC,MAAM,kBAAkB,CAAC;AAElF,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,qBAAqB,CAAC;AAGtE,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,UAAU,CAAC;AA2FxD,eAAO,MAAM,oBAAoB,GAAI,MAAK,aAA6B,EAAE,WAAU,WAAyB,KAAG,QA8D7G,CAAC"}
package/dist/tunnel.js ADDED
@@ -0,0 +1,126 @@
1
+ import { z } from "zod";
2
+ import { cloudflareApi } from "./cloudflare-api.js";
3
+ import { parseInputs, sshSchema, sshTarget } from "./inputs.js";
4
+ import { sshExecutor } from "./ssh.js";
5
+ const tunnelSchema = sshSchema.extend({
6
+ name: z.string(),
7
+ accountId: z.string(),
8
+ apiToken: z.string(),
9
+ internalIp: z.string(),
10
+ ingress: z.array(z.object({ hostname: z.string(), port: z.coerce.number() })),
11
+ image: z.string(),
12
+ });
13
+ const parse = (inputs) => parseInputs(tunnelSchema, inputs, "tunnel");
14
+ const CATCH_ALL = { service: "http_status:404" };
15
+ const desiredRules = (parsed) => [
16
+ ...parsed.ingress.map((rule) => ({ hostname: rule.hostname, service: `http://${parsed.internalIp}:${rule.port}` })),
17
+ CATCH_ALL,
18
+ ];
19
+ const cname = (tunnelId) => `${tunnelId}.cfargotunnel.com`;
20
+ const containerName = (tunnelId) => `intentic-tunnel-${tunnelId}`;
21
+ const ingressEqual = (a, b) => {
22
+ if (a.length !== b.length) {
23
+ return false;
24
+ }
25
+ return a.every((rule, index) => {
26
+ const other = b[index];
27
+ return other !== undefined && rule.hostname === other.hostname && rule.service === other.service;
28
+ });
29
+ };
30
+ const checkConnector = async (executor, parsed, tunnelId, ctx) => {
31
+ let session;
32
+ try {
33
+ session = await executor.connect(sshTarget(parsed));
34
+ }
35
+ catch (error) {
36
+ ctx.log(`tunnel "${ctx.id}": host not reachable over SSH to check the connector: ${String(error)}`);
37
+ return { running: false, image: undefined };
38
+ }
39
+ try {
40
+ const name = containerName(tunnelId);
41
+ const result = await session.exec(`docker ps --filter "name=^${name}$" --format '{{.Names}}'`);
42
+ if (result.stdout.trim() !== name) {
43
+ return { running: false, image: undefined };
44
+ }
45
+ const image = (await session.exec(`docker inspect --format '{{.Config.Image}}' ${name} 2>/dev/null || true`)).stdout.trim();
46
+ return { running: true, image };
47
+ }
48
+ finally {
49
+ await session.dispose();
50
+ }
51
+ };
52
+ const runConnector = async (executor, parsed, tunnelId, token) => {
53
+ const session = await executor.connect(sshTarget(parsed));
54
+ try {
55
+ const name = containerName(tunnelId);
56
+ await session.exec(`docker rm -f ${name} 2>/dev/null || true`);
57
+ const run = await session.exec(`docker run -d --restart unless-stopped --network host --name ${name} ${parsed.image} tunnel --no-autoupdate run --token ${token}`);
58
+ if (run.code !== 0) {
59
+ throw new Error(`failed to start cloudflared on host: exited ${run.code}: ${run.stderr.trim()}`);
60
+ }
61
+ }
62
+ finally {
63
+ await session.dispose();
64
+ }
65
+ };
66
+ export const createTunnelProvider = (api = cloudflareApi, executor = sshExecutor) => ({
67
+ read: async (inputs, ctx) => {
68
+ const parsed = parse(inputs);
69
+ const tunnel = await api.findTunnel({ accountId: parsed.accountId, apiToken: parsed.apiToken, name: parsed.name });
70
+ if (tunnel === undefined) {
71
+ return undefined;
72
+ }
73
+ const ingress = await api.getTunnelIngress({ accountId: parsed.accountId, apiToken: parsed.apiToken, tunnelId: tunnel.id });
74
+ const connector = await checkConnector(executor, parsed, tunnel.id, ctx);
75
+ return {
76
+ outputs: { tunnelId: tunnel.id, cname: cname(tunnel.id) },
77
+ detail: { ingress: ingress ?? [], connectorRunning: connector.running, image: connector.image },
78
+ };
79
+ },
80
+ diff: (inputs, observed) => {
81
+ const parsed = parse(inputs);
82
+ const detail = observed.detail;
83
+ if (detail === undefined || detail["connectorRunning"] !== true) {
84
+ return { action: "update", reason: "cloudflared connector is not running on the host" };
85
+ }
86
+ if (detail["image"] !== parsed.image) {
87
+ return { action: "update", reason: `cloudflared image differs (running ${String(detail["image"])}, want ${parsed.image})` };
88
+ }
89
+ const current = detail["ingress"];
90
+ const actual = Array.isArray(current) ? current : [];
91
+ if (!ingressEqual(actual, desiredRules(parsed))) {
92
+ return { action: "update", reason: "tunnel ingress differs from desired" };
93
+ }
94
+ return { action: "noop" };
95
+ },
96
+ apply: async (inputs) => {
97
+ const parsed = parse(inputs);
98
+ const existing = await api.findTunnel({ accountId: parsed.accountId, apiToken: parsed.apiToken, name: parsed.name });
99
+ const tunnel = existing ?? (await api.createTunnel({ accountId: parsed.accountId, apiToken: parsed.apiToken, name: parsed.name }));
100
+ const token = await api.getTunnelToken({ accountId: parsed.accountId, apiToken: parsed.apiToken, tunnelId: tunnel.id });
101
+ await api.putTunnelIngress({
102
+ accountId: parsed.accountId,
103
+ apiToken: parsed.apiToken,
104
+ tunnelId: tunnel.id,
105
+ ingress: desiredRules(parsed),
106
+ });
107
+ await runConnector(executor, parsed, tunnel.id, token);
108
+ return { tunnelId: tunnel.id, cname: cname(tunnel.id) };
109
+ },
110
+ delete: async (inputs) => {
111
+ const parsed = parse(inputs);
112
+ const tunnel = await api.findTunnel({ accountId: parsed.accountId, apiToken: parsed.apiToken, name: parsed.name });
113
+ if (tunnel === undefined) {
114
+ return;
115
+ }
116
+ const session = await executor.connect(sshTarget(parsed));
117
+ try {
118
+ await session.exec(`docker rm -f ${containerName(tunnel.id)} 2>/dev/null || true`);
119
+ }
120
+ finally {
121
+ await session.dispose();
122
+ }
123
+ await api.deleteTunnel({ accountId: parsed.accountId, apiToken: parsed.apiToken, tunnelId: tunnel.id });
124
+ },
125
+ });
126
+ //# sourceMappingURL=tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../src/tunnel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Provider } from "@intentic/engine";
2
+ import { type SshExecutor } from "./ssh.js";
3
+ export declare const createValkeyNamespaceProvider: (executor?: SshExecutor) => Provider;
4
+ //# sourceMappingURL=valkey-namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valkey-namespace.d.ts","sourceRoot":"","sources":["../src/valkey-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,kBAAkB,CAAC;AAKjE,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,UAAU,CAAC;AAgCzD,eAAO,MAAM,6BAA6B,GAAI,WAAU,WAAyB,KAAG,QAmDlF,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { z } from "zod";
2
+ import { containerId } from "./backing-ssh.js";
3
+ import { parseInputs, sshSchema, sshTarget } from "./inputs.js";
4
+ import { sshExecutor } from "./ssh.js";
5
+ const namespaceSchema = sshSchema.extend({
6
+ instance: z.string(),
7
+ instanceHost: z.string(),
8
+ instancePort: z.string(),
9
+ adminPassword: z.string(),
10
+ username: z.string(),
11
+ password: z.string(),
12
+ keyPrefix: z.string(),
13
+ });
14
+ const parse = (inputs) => parseInputs(namespaceSchema, inputs, "valkey-namespace");
15
+ const url = (parsed) => `redis://${parsed.username}:${parsed.password}@${parsed.instanceHost}:${parsed.instancePort}/0`;
16
+ const cli = async (session, cid, parsed, args) => {
17
+ const result = await session.exec(`docker exec ${cid} valkey-cli -a '${parsed.adminPassword}' --no-auth-warning ${args}`);
18
+ if (result.code !== 0) {
19
+ throw new Error(`valkey-cli failed (${result.code}): ${result.stderr.trim()}`);
20
+ }
21
+ return result.stdout.trim();
22
+ };
23
+ export const createValkeyNamespaceProvider = (executor = sshExecutor) => ({
24
+ read: async (inputs, ctx) => {
25
+ const parsed = parse(inputs);
26
+ let session;
27
+ try {
28
+ session = await executor.connect(sshTarget(parsed));
29
+ }
30
+ catch (error) {
31
+ ctx.log(`valkey-namespace "${ctx.id}": host not reachable over SSH, treating as not-yet-created: ${String(error)}`);
32
+ return undefined;
33
+ }
34
+ try {
35
+ const cid = await containerId(session, parsed.instance);
36
+ if (cid === "") {
37
+ return undefined;
38
+ }
39
+ const user = await cli(session, cid, parsed, `ACL GETUSER ${parsed.username}`);
40
+ return user === "" ? undefined : { outputs: { url: url(parsed) } };
41
+ }
42
+ finally {
43
+ await session.dispose();
44
+ }
45
+ },
46
+ diff: () => ({ action: "noop" }),
47
+ apply: async (inputs, _observed, ctx) => {
48
+ const parsed = parse(inputs);
49
+ const session = await executor.connect(sshTarget(parsed));
50
+ try {
51
+ const cid = await containerId(session, parsed.instance);
52
+ if (cid === "") {
53
+ throw new Error(`valkey-namespace "${ctx.id}": instance "${parsed.instance}" is not running`);
54
+ }
55
+ await cli(session, cid, parsed, `ACL SETUSER ${parsed.username} on '>${parsed.password}' '~${parsed.keyPrefix}:*' +@all`);
56
+ return { url: url(parsed) };
57
+ }
58
+ finally {
59
+ await session.dispose();
60
+ }
61
+ },
62
+ delete: async (inputs, ctx) => {
63
+ const parsed = parse(inputs);
64
+ const session = await executor.connect(sshTarget(parsed));
65
+ try {
66
+ const cid = await containerId(session, parsed.instance);
67
+ if (cid === "") {
68
+ ctx.log(`valkey-namespace "${ctx.id}": instance "${parsed.instance}" already gone; nothing to drop`);
69
+ return;
70
+ }
71
+ await cli(session, cid, parsed, `ACL DELUSER ${parsed.username}`);
72
+ }
73
+ finally {
74
+ await session.dispose();
75
+ }
76
+ },
77
+ });
78
+ //# sourceMappingURL=valkey-namespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valkey-namespace.js","sourceRoot":"","sources":["../src/valkey-namespace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Provider } from "@intentic/engine";
2
+ import { type SshExecutor } from "./ssh.js";
3
+ export declare const createValkeyProvider: (executor?: SshExecutor) => Provider;
4
+ //# sourceMappingURL=valkey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valkey.d.ts","sourceRoot":"","sources":["../src/valkey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,kBAAkB,CAAC;AAKjE,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,UAAU,CAAC;AA2DzD,eAAO,MAAM,oBAAoB,GAAI,WAAU,WAAyB,KAAG,QAgDzE,CAAC"}
package/dist/valkey.js ADDED
@@ -0,0 +1,94 @@
1
+ import { z } from "zod";
2
+ import { composeDown, composeUp, containerImage, stateDir, waitReady } from "./backing-ssh.js";
3
+ import { parseInputs, sshSchema, sshTarget } from "./inputs.js";
4
+ import { sshExecutor } from "./ssh.js";
5
+ const KIND = "valkey";
6
+ const READY_TIMEOUT_MS = 60_000;
7
+ const valkeySchema = sshSchema.extend({
8
+ internalIp: z.string(),
9
+ publishPort: z.number(),
10
+ adminPassword: z.string(),
11
+ image: z.string(),
12
+ });
13
+ const parse = (inputs) => parseInputs(valkeySchema, inputs, KIND);
14
+ const outputsFor = (parsed) => ({
15
+ internalHost: parsed.internalIp,
16
+ port: String(parsed.publishPort),
17
+ });
18
+ const composeYaml = (id, parsed) => [
19
+ "services:",
20
+ " valkey:",
21
+ ` image: ${parsed.image}`,
22
+ " restart: unless-stopped",
23
+ " command: [ valkey-server, /etc/valkey/valkey.conf ]",
24
+ " volumes:",
25
+ " - data:/data",
26
+ " - ./valkey.conf:/etc/valkey/valkey.conf:ro",
27
+ ` ports: [ "${parsed.publishPort}:6379" ]`,
28
+ ` labels: [ "intentic.id=${id}" ]`,
29
+ "volumes: { data: {} }",
30
+ "",
31
+ ].join("\n");
32
+ const valkeyConf = (parsed) => [`requirepass ${parsed.adminPassword}`, "appendonly yes", ""].join("\n");
33
+ const ensureFiles = async (session, id, parsed) => {
34
+ const dir = stateDir(KIND, id);
35
+ await session.exec(`mkdir -p ${dir}`);
36
+ await session.exec(`cat > ${dir}/compose.yaml <<'COMPOSE_EOF'\n${composeYaml(id, parsed)}COMPOSE_EOF`);
37
+ await session.exec(`cat > ${dir}/valkey.conf <<'CONF_EOF'\n${valkeyConf(parsed)}CONF_EOF`);
38
+ await session.exec(`chmod 600 ${dir}/valkey.conf`);
39
+ };
40
+ const readyProbe = (id, parsed) => `cid=$(docker ps -q --filter "label=intentic.id=${id}"); [ -n "$cid" ] && docker exec "$cid" valkey-cli -a '${parsed.adminPassword}' ping | grep -q PONG`;
41
+ export const createValkeyProvider = (executor = sshExecutor) => ({
42
+ read: async (inputs, ctx) => {
43
+ const parsed = parse(inputs);
44
+ let session;
45
+ try {
46
+ session = await executor.connect(sshTarget(parsed));
47
+ }
48
+ catch (error) {
49
+ ctx.log(`valkey "${ctx.id}": host not reachable over SSH, treating as not-yet-created: ${String(error)}`);
50
+ return undefined;
51
+ }
52
+ try {
53
+ const probe = await session.exec(readyProbe(ctx.id, parsed));
54
+ if (probe.code !== 0) {
55
+ return undefined;
56
+ }
57
+ return { outputs: outputsFor(parsed), detail: { image: await containerImage(session, ctx.id) } };
58
+ }
59
+ finally {
60
+ await session.dispose();
61
+ }
62
+ },
63
+ diff: (inputs, observed) => {
64
+ const parsed = parse(inputs);
65
+ const image = (observed.detail?.["image"] ?? "");
66
+ return image === parsed.image
67
+ ? { action: "noop" }
68
+ : { action: "update", reason: `valkey image differs (running ${image}, want ${parsed.image})` };
69
+ },
70
+ apply: async (inputs, _observed, ctx) => {
71
+ const parsed = parse(inputs);
72
+ const session = await executor.connect(sshTarget(parsed));
73
+ try {
74
+ await ensureFiles(session, ctx.id, parsed);
75
+ await composeUp(session, KIND, ctx.id);
76
+ await waitReady(session, KIND, ctx.id, readyProbe(ctx.id, parsed), READY_TIMEOUT_MS);
77
+ return outputsFor(parsed);
78
+ }
79
+ finally {
80
+ await session.dispose();
81
+ }
82
+ },
83
+ delete: async (inputs, ctx) => {
84
+ const parsed = parse(inputs);
85
+ const session = await executor.connect(sshTarget(parsed));
86
+ try {
87
+ await composeDown(session, KIND, ctx.id);
88
+ }
89
+ finally {
90
+ await session.dispose();
91
+ }
92
+ },
93
+ });
94
+ //# sourceMappingURL=valkey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valkey.js","sourceRoot":"","sources":["../src/valkey.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Provider } from "@intentic/engine";
2
+ import type { SshExecutor } from "./ssh.js";
3
+ export declare const createWorkspaceRunnerProvider: (executor?: SshExecutor) => Provider;
4
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,kBAAkB,CAAC;AAGjE,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,UAAU,CAAC;AA2CxD,eAAO,MAAM,6BAA6B,GAAI,WAAU,WAAyB,KAAG,QAwElF,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { z } from "zod";
2
+ import { parseInputs, sshSchema, sshTarget } from "./inputs.js";
3
+ import { sshExecutor } from "./ssh.js";
4
+ const workspaceSchema = sshSchema.extend({
5
+ internalIp: z.string(),
6
+ domain: z.string(),
7
+ zone: z.string(),
8
+ previewPort: z.coerce.number(),
9
+ network: z.string(),
10
+ image: z.string(),
11
+ sandboxImage: z.string(),
12
+ platformUrl: z.string().optional(),
13
+ runnerToken: z.string().optional(),
14
+ agentBaseUrl: z.string().optional(),
15
+ });
16
+ const parse = (inputs) => parseInputs(workspaceSchema, inputs, "workspace");
17
+ const CONTAINER = "intentic-runner";
18
+ const internalUrl = (parsed) => `http://${parsed.internalIp}:${parsed.previewPort}`;
19
+ const outputsFor = (parsed) => ({
20
+ internalUrl: internalUrl(parsed),
21
+ healthUrl: `${internalUrl(parsed)}/healthz`,
22
+ previewBase: `preview.${parsed.zone}`,
23
+ });
24
+ const running = async (session) => {
25
+ const result = await session.exec(`docker ps --filter "name=^${CONTAINER}$" --format '{{.Names}}'`);
26
+ return result.stdout.trim() === CONTAINER;
27
+ };
28
+ const runningImage = async (session) => {
29
+ const result = await session.exec(`docker inspect --format '{{.Config.Image}}' ${CONTAINER} 2>/dev/null || true`);
30
+ return result.stdout.trim();
31
+ };
32
+ export const createWorkspaceRunnerProvider = (executor = sshExecutor) => ({
33
+ read: async (inputs, ctx) => {
34
+ const parsed = parse(inputs);
35
+ let session;
36
+ try {
37
+ session = await executor.connect(sshTarget(parsed));
38
+ }
39
+ catch (error) {
40
+ ctx.log(`workspace "${ctx.id}": host not reachable over SSH, treating as not-yet-created: ${String(error)}`);
41
+ return undefined;
42
+ }
43
+ try {
44
+ if (!(await running(session))) {
45
+ return undefined;
46
+ }
47
+ return { outputs: outputsFor(parsed), detail: { image: await runningImage(session) } };
48
+ }
49
+ finally {
50
+ await session.dispose();
51
+ }
52
+ },
53
+ diff: (inputs, observed) => {
54
+ const parsed = parse(inputs);
55
+ if (observed.detail?.["image"] !== parsed.image) {
56
+ return {
57
+ action: "update",
58
+ reason: `workspace runner image differs (running ${String(observed.detail?.["image"])}, want ${parsed.image})`,
59
+ };
60
+ }
61
+ return { action: "noop" };
62
+ },
63
+ apply: async (inputs, _observed, ctx) => {
64
+ const parsed = parse(inputs);
65
+ const session = await executor.connect(sshTarget(parsed));
66
+ try {
67
+ await session.exec(`docker network inspect ${parsed.network} >/dev/null 2>&1 || docker network create ${parsed.network}`);
68
+ await session.exec(`docker rm -f ${CONTAINER} 2>/dev/null || true`);
69
+ const channelEnv = parsed.platformUrl !== undefined && parsed.runnerToken !== undefined
70
+ ? ` -e PLATFORM_URL=${parsed.platformUrl} -e RUNNER_TOKEN=${parsed.runnerToken}`
71
+ : ``;
72
+ const agentEnv = parsed.agentBaseUrl !== undefined ? ` -e ANTHROPIC_BASE_URL=${parsed.agentBaseUrl}` : ``;
73
+ const run = await session.exec(`docker run -d --restart unless-stopped --user root --name ${CONTAINER} --label intentic.id=${ctx.id} ` +
74
+ `-p ${parsed.previewPort}:${parsed.previewPort} --network ${parsed.network} ` +
75
+ `-v /var/run/docker.sock:/var/run/docker.sock ` +
76
+ `-e ZONE=${parsed.zone} -e PREVIEW_PORT=${parsed.previewPort} -e SANDBOX_IMAGE=${parsed.sandboxImage}${channelEnv}${agentEnv} ${parsed.image}`);
77
+ if (run.code !== 0) {
78
+ throw new Error(`failed to start workspace runner on host: exited ${run.code}: ${run.stderr.trim()}`);
79
+ }
80
+ return outputsFor(parsed);
81
+ }
82
+ finally {
83
+ await session.dispose();
84
+ }
85
+ },
86
+ delete: async (inputs) => {
87
+ const parsed = parse(inputs);
88
+ const session = await executor.connect(sshTarget(parsed));
89
+ try {
90
+ await session.exec(`docker rm -f ${CONTAINER} 2>/dev/null || true`);
91
+ }
92
+ finally {
93
+ await session.dispose();
94
+ }
95
+ },
96
+ });
97
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@intentic/providers",
3
+ "version": "1.18.0",
4
+ "description": "",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/radarsu/intentic.git",
10
+ "directory": "_libs/providers"
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "publishConfig": {
16
+ "access": "public",
17
+ "registry": "https://registry.npmjs.org/"
18
+ },
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": {
23
+ "@intentic/src": "./src/index.ts",
24
+ "default": "./dist/index.js"
25
+ },
26
+ "require": {
27
+ "@intentic/src": "./src/index.ts",
28
+ "default": "./dist/index.js"
29
+ }
30
+ }
31
+ },
32
+ "dependencies": {
33
+ "ssh2": "1.17.0",
34
+ "tslib": "2.8.1",
35
+ "zod": "4.4.3",
36
+ "@intentic/engine": "1.18.0",
37
+ "@intentic/graph": "1.18.0"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "24.13.2",
41
+ "@types/ssh2": "1.15.5",
42
+ "typescript": "5.9.3",
43
+ "vitest": "4.1.9",
44
+ "@intentic/sdk": "1.18.0",
45
+ "@intentic/tsconfig": "0.0.0"
46
+ },
47
+ "scripts": {
48
+ "build": "tsc",
49
+ "watch": "tsc --build --watch",
50
+ "test": "vitest run",
51
+ "test:watch": "vitest"
52
+ }
53
+ }