@intentic/state-resolver 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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/dist/app-github.d.ts +9 -0
  4. package/dist/app-github.d.ts.map +1 -0
  5. package/dist/app-github.js +64 -0
  6. package/dist/app-github.js.map +1 -0
  7. package/dist/app.d.ts +13 -0
  8. package/dist/app.d.ts.map +1 -0
  9. package/dist/app.js +108 -0
  10. package/dist/app.js.map +1 -0
  11. package/dist/backing.d.ts +11 -0
  12. package/dist/backing.d.ts.map +1 -0
  13. package/dist/backing.js +147 -0
  14. package/dist/backing.js.map +1 -0
  15. package/dist/backup.d.ts +4 -0
  16. package/dist/backup.d.ts.map +1 -0
  17. package/dist/backup.js +27 -0
  18. package/dist/backup.js.map +1 -0
  19. package/dist/catalog.d.ts +12 -0
  20. package/dist/catalog.d.ts.map +1 -0
  21. package/dist/catalog.js +17 -0
  22. package/dist/catalog.js.map +1 -0
  23. package/dist/emit-github.d.ts +4 -0
  24. package/dist/emit-github.d.ts.map +1 -0
  25. package/dist/emit-github.js +94 -0
  26. package/dist/emit-github.js.map +1 -0
  27. package/dist/emit.d.ts +7 -0
  28. package/dist/emit.d.ts.map +1 -0
  29. package/dist/emit.js +205 -0
  30. package/dist/emit.js.map +1 -0
  31. package/dist/identity.d.ts +5 -0
  32. package/dist/identity.d.ts.map +1 -0
  33. package/dist/identity.js +112 -0
  34. package/dist/identity.js.map +1 -0
  35. package/dist/ids.d.ts +33 -0
  36. package/dist/ids.d.ts.map +1 -0
  37. package/dist/ids.js +36 -0
  38. package/dist/ids.js.map +1 -0
  39. package/dist/images.d.ts +22 -0
  40. package/dist/images.d.ts.map +1 -0
  41. package/dist/images.js +22 -0
  42. package/dist/images.js.map +1 -0
  43. package/dist/index.d.ts +17 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +14 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/platform.d.ts +20 -0
  48. package/dist/platform.d.ts.map +1 -0
  49. package/dist/platform.js +81 -0
  50. package/dist/platform.js.map +1 -0
  51. package/dist/route.d.ts +12 -0
  52. package/dist/route.d.ts.map +1 -0
  53. package/dist/route.js +17 -0
  54. package/dist/route.js.map +1 -0
  55. package/dist/service.d.ts +9 -0
  56. package/dist/service.d.ts.map +1 -0
  57. package/dist/service.js +46 -0
  58. package/dist/service.js.map +1 -0
  59. package/dist/state.d.ts +5 -0
  60. package/dist/state.d.ts.map +1 -0
  61. package/dist/state.js +19 -0
  62. package/dist/state.js.map +1 -0
  63. package/dist/workspace.d.ts +9 -0
  64. package/dist/workspace.d.ts.map +1 -0
  65. package/dist/workspace.js +40 -0
  66. package/dist/workspace.js.map +1 -0
  67. package/dist/zone.d.ts +4 -0
  68. package/dist/zone.d.ts.map +1 -0
  69. package/dist/zone.js +33 -0
  70. package/dist/zone.js.map +1 -0
  71. package/package.json +49 -0
@@ -0,0 +1,94 @@
1
+ import { makeRef } from "@intentic/graph";
2
+ import { resolveAppGitHub } from "./app-github.js";
3
+ import { tunnelId, tunnelName } from "./ids.js";
4
+ import { IMAGES } from "./images.js";
5
+ import { resolveService } from "./service.js";
6
+ const sshOf = (input) => ({
7
+ address: input.address,
8
+ user: input.user,
9
+ sshKey: input.sshKey,
10
+ ...(input.port !== undefined ? { port: input.port } : {}),
11
+ });
12
+ export const emitGitHub = (intent, zone) => {
13
+ if (intent.apps.length === 0 && intent.services.length === 0) {
14
+ return [];
15
+ }
16
+ const cloudflare = intent.cloudflare;
17
+ if (cloudflare === undefined) {
18
+ throw new Error("intent declares apps/services but no Cloudflare; declare it with i.have.cloudflare");
19
+ }
20
+ const github = intent.github;
21
+ if (github === undefined) {
22
+ throw new Error("GitHub emit called but no GitHub declared; this is a resolver bug");
23
+ }
24
+ const apiToken = cloudflare.input.apiToken;
25
+ const hostById = new Map(intent.hosts.map((h) => [h.id, h]));
26
+ const nodes = [];
27
+ for (const host of intent.hosts) {
28
+ nodes.push({
29
+ id: host.id,
30
+ type: "host",
31
+ inputs: { ...sshOf(host.input) },
32
+ explicitDependsOn: [],
33
+ });
34
+ }
35
+ nodes.push({
36
+ id: cloudflare.id,
37
+ type: "cloudflare",
38
+ inputs: { apiToken, zone },
39
+ explicitDependsOn: [],
40
+ });
41
+ nodes.push({
42
+ id: github.id,
43
+ type: "github",
44
+ inputs: {
45
+ token: github.input.token,
46
+ ...(github.input.owner !== undefined ? { owner: github.input.owner } : {}),
47
+ },
48
+ explicitDependsOn: [],
49
+ });
50
+ const ingressByHost = new Map();
51
+ const serviceIds = new Set(intent.services.map((service) => service.id));
52
+ for (const app of intent.apps) {
53
+ if (app.observe !== undefined && !serviceIds.has(app.observe)) {
54
+ throw new Error(`app "${app.id}" observes unknown service "${app.observe}"; declare it with i.want.service`);
55
+ }
56
+ }
57
+ for (const app of intent.apps) {
58
+ const resolved = resolveAppGitHub(app, github.id, apiToken, zone, github.input.token);
59
+ nodes.push(...resolved.nodes);
60
+ const hostIngress = ingressByHost.get(app.on) ?? [];
61
+ hostIngress.push(...resolved.ingress);
62
+ ingressByHost.set(app.on, hostIngress);
63
+ }
64
+ for (const service of intent.services) {
65
+ const host = hostById.get(service.on);
66
+ const resolved = resolveService(service, host.input, zone, apiToken);
67
+ nodes.push(...resolved.nodes);
68
+ const hostIngress = ingressByHost.get(service.on) ?? [];
69
+ hostIngress.push(...resolved.ingress);
70
+ ingressByHost.set(service.on, hostIngress);
71
+ }
72
+ for (const [hostId, ingress] of ingressByHost) {
73
+ if (ingress.length === 0) {
74
+ continue;
75
+ }
76
+ const host = hostById.get(hostId);
77
+ nodes.push({
78
+ id: tunnelId(hostId),
79
+ type: "tunnel",
80
+ inputs: {
81
+ name: tunnelName(hostId),
82
+ accountId: makeRef(cloudflare.id, "accountId"),
83
+ apiToken,
84
+ ...sshOf(host.input),
85
+ internalIp: makeRef(hostId, "internalIp"),
86
+ ingress,
87
+ image: IMAGES.cloudflared,
88
+ },
89
+ explicitDependsOn: [cloudflare.id, hostId],
90
+ });
91
+ }
92
+ return nodes;
93
+ };
94
+ //# sourceMappingURL=emit-github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-github.js","sourceRoot":"","sources":["../src/emit-github.ts"],"names":[],"mappings":"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"}
package/dist/emit.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import type { IntentSet } from "@intentic/need-resolver";
2
+ import type { ResolvedNode } from "@intentic/resources";
3
+ export interface Assignment {
4
+ readonly byNeed: ReadonlyMap<string, string>;
5
+ }
6
+ export declare const emit: (intent: IntentSet, assignment: Assignment, zone: string | undefined) => ResolvedNode[];
7
+ //# sourceMappingURL=emit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAexD,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChD;AAkBD,eAAO,MAAM,IAAI,GAAI,QAAQ,SAAS,EAAE,YAAY,UAAU,EAAE,MAAM,MAAM,GAAG,SAAS,KAAG,YAAY,EAyPtG,CAAC"}
package/dist/emit.js ADDED
@@ -0,0 +1,205 @@
1
+ import { generated, makeRef } from "@intentic/graph";
2
+ import { controlPlaneHostId } from "@intentic/need-resolver";
3
+ import { resolveApp } from "./app.js";
4
+ import { resolveBacking } from "./backing.js";
5
+ import { resolveBackup } from "./backup.js";
6
+ import { emitGitHub } from "./emit-github.js";
7
+ import { resolveIdentities } from "./identity.js";
8
+ import { adminUsername, tunnelId, tunnelName } from "./ids.js";
9
+ import { IMAGES } from "./images.js";
10
+ import { resolvePlatform } from "./platform.js";
11
+ import { resolveService } from "./service.js";
12
+ import { resolveWorkspace } from "./workspace.js";
13
+ const supportedOptions = new Set(["forgejo", "komodo", "ssh-linux", "cloudflare-tunnel"]);
14
+ const sshOf = (input) => ({
15
+ address: input.address,
16
+ user: input.user,
17
+ sshKey: input.sshKey,
18
+ ...(input.port !== undefined ? { port: input.port } : {}),
19
+ });
20
+ export const emit = (intent, assignment, zone) => {
21
+ const isGitHub = [...assignment.byNeed.values()].includes("github");
22
+ if (isGitHub) {
23
+ if (intent.backings.length > 0) {
24
+ throw new Error("backings (i.want.database/cache/…) are not yet supported on the GitHub stack; use the Forgejo stack");
25
+ }
26
+ if (zone === undefined && (intent.apps.length > 0 || intent.services.length > 0)) {
27
+ throw new Error("intent exposes apps/services through Cloudflare but no zone was provided; the CLI discovers it from the API token before resolving");
28
+ }
29
+ return emitGitHub(intent, zone);
30
+ }
31
+ for (const optionId of assignment.byNeed.values()) {
32
+ if (!supportedOptions.has(optionId)) {
33
+ throw new Error(`unsupported option "${optionId}"; the emitter only implements ${[...supportedOptions].join("/")}`);
34
+ }
35
+ }
36
+ if (intent.apps.length === 0 && intent.services.length === 0 && intent.workspaces.length === 0 && intent.backings.length === 0) {
37
+ return [];
38
+ }
39
+ const cloudflare = intent.cloudflare;
40
+ if (cloudflare === undefined) {
41
+ throw new Error("intent declares apps/services/workspaces/backings but no Cloudflare; declare it with i.have.cloudflare");
42
+ }
43
+ if (zone === undefined) {
44
+ throw new Error("intent exposes apps/services through Cloudflare but no zone was provided; the CLI discovers it from the API token before resolving");
45
+ }
46
+ const cpId = controlPlaneHostId(intent);
47
+ if (cpId === undefined) {
48
+ throw new Error("intent declares apps/services/backings but no host; declare one with i.have.host");
49
+ }
50
+ const apiToken = cloudflare.input.apiToken;
51
+ const hostById = new Map(intent.hosts.map((h) => [h.id, h]));
52
+ const backingById = new Map();
53
+ for (const backing of intent.backings) {
54
+ const host = hostById.get(backing.on);
55
+ if (host === undefined) {
56
+ throw new Error(`backing "${backing.id}" targets undeclared host "${backing.on}"; declare it with i.have.host`);
57
+ }
58
+ backingById.set(backing.id, { intent: backing, host: host.input });
59
+ }
60
+ const cpHost = hostById.get(cpId);
61
+ const nodes = [];
62
+ for (const host of intent.hosts) {
63
+ nodes.push({
64
+ id: host.id,
65
+ type: "host",
66
+ inputs: { ...sshOf(host.input) },
67
+ explicitDependsOn: [],
68
+ });
69
+ }
70
+ nodes.push({
71
+ id: cloudflare.id,
72
+ type: "cloudflare",
73
+ inputs: { apiToken, zone },
74
+ explicitDependsOn: [],
75
+ });
76
+ if (intent.discord !== undefined) {
77
+ const notifiedApps = intent.apps.filter((app) => app.notify === intent.discord.id).map((app) => app.id);
78
+ nodes.push({
79
+ id: intent.discord.id,
80
+ type: "discord",
81
+ inputs: {
82
+ botToken: intent.discord.input.botToken,
83
+ zone,
84
+ apps: notifiedApps,
85
+ },
86
+ explicitDependsOn: [],
87
+ });
88
+ }
89
+ const ingressByHost = new Map();
90
+ const serviceIds = new Set(intent.services.map((service) => service.id));
91
+ if (intent.apps.length > 0) {
92
+ const guard = cpHost.input.updatePolicy === "guarded" && intent.backup !== undefined
93
+ ? { repo: intent.backup.input.repo, resticImage: IMAGES.backup }
94
+ : undefined;
95
+ const platform = resolvePlatform(cpId, cloudflare.id, zone, apiToken, cpHost.input, guard);
96
+ nodes.push(...platform.nodes);
97
+ const cpIngress = [...platform.ingress];
98
+ ingressByHost.set(cpId, cpIngress);
99
+ for (const app of intent.apps) {
100
+ if (app.observe !== undefined && !serviceIds.has(app.observe)) {
101
+ throw new Error(`app "${app.id}" observes unknown service "${app.observe}"; declare it with i.want.service`);
102
+ }
103
+ for (const binding of app.use ?? []) {
104
+ const backing = backingById.get(binding.target);
105
+ if (backing === undefined) {
106
+ throw new Error(`app "${app.id}" uses unknown backing "${binding.target}"; declare it with i.want.${binding.capability}`);
107
+ }
108
+ if (backing.intent.capability !== binding.capability) {
109
+ throw new Error(`app "${app.id}" uses "${binding.target}" as ${binding.capability} but it is a ${backing.intent.capability}`);
110
+ }
111
+ }
112
+ }
113
+ const workerHostIds = new Set([...intent.apps.map((a) => a.on), ...intent.services.map((s) => s.on)].filter((id) => id !== cpId));
114
+ for (const hostId of workerHostIds) {
115
+ const host = hostById.get(hostId);
116
+ const peripheryId = `${hostId}-periphery`;
117
+ const serverId = `${hostId}-server`;
118
+ nodes.push({
119
+ id: peripheryId,
120
+ type: "komodo-periphery",
121
+ inputs: {
122
+ ...sshOf(host.input),
123
+ coreAddress: makeRef(platform.refs.deploy, "url"),
124
+ serverName: hostId,
125
+ image: IMAGES.komodoPeriphery,
126
+ },
127
+ explicitDependsOn: [hostId, platform.refs.deploy, platform.refs.deployRoute],
128
+ });
129
+ nodes.push({
130
+ id: serverId,
131
+ type: "komodo-server",
132
+ inputs: {
133
+ komodoUrl: makeRef(platform.refs.deploy, "url"),
134
+ adminUser: adminUsername,
135
+ adminPassword: generated("KOMODO_ADMIN_PASSWORD"),
136
+ serverName: hostId,
137
+ },
138
+ explicitDependsOn: [peripheryId, platform.refs.deploy, platform.refs.deployRoute],
139
+ });
140
+ if (!ingressByHost.has(hostId)) {
141
+ ingressByHost.set(hostId, []);
142
+ }
143
+ }
144
+ for (const app of intent.apps) {
145
+ const resolved = resolveApp(app, platform.refs, apiToken, zone, cpId, backingById);
146
+ nodes.push(...resolved.nodes);
147
+ const hostIngress = ingressByHost.get(app.on) ?? [];
148
+ hostIngress.push(...resolved.ingress);
149
+ ingressByHost.set(app.on, hostIngress);
150
+ }
151
+ nodes.push(...resolveIdentities(intent, platform.refs, cpId));
152
+ }
153
+ for (const service of intent.services) {
154
+ const host = hostById.get(service.on);
155
+ const resolved = resolveService(service, host.input, zone, apiToken);
156
+ nodes.push(...resolved.nodes);
157
+ const hostIngress = ingressByHost.get(service.on) ?? [];
158
+ hostIngress.push(...resolved.ingress);
159
+ ingressByHost.set(service.on, hostIngress);
160
+ }
161
+ for (const workspace of intent.workspaces) {
162
+ const host = hostById.get(workspace.on);
163
+ const resolved = resolveWorkspace(workspace, host.input, zone, apiToken);
164
+ nodes.push(...resolved.nodes);
165
+ const hostIngress = ingressByHost.get(workspace.on) ?? [];
166
+ hostIngress.push(...resolved.ingress);
167
+ ingressByHost.set(workspace.on, hostIngress);
168
+ }
169
+ for (const backing of intent.backings) {
170
+ const host = hostById.get(backing.on);
171
+ const resolved = resolveBacking(backing, host.input, apiToken);
172
+ nodes.push(...resolved.nodes);
173
+ if (resolved.ingress.length > 0) {
174
+ const hostIngress = ingressByHost.get(backing.on) ?? [];
175
+ hostIngress.push(...resolved.ingress);
176
+ ingressByHost.set(backing.on, hostIngress);
177
+ }
178
+ }
179
+ if (intent.backup !== undefined && intent.apps.length > 0) {
180
+ const signozService = intent.services.find((service) => service.kind === "signoz");
181
+ nodes.push(resolveBackup(cpId, cpHost.input, intent.backup.input, signozService?.id));
182
+ }
183
+ for (const [hostId, ingress] of ingressByHost) {
184
+ if (ingress.length === 0) {
185
+ continue;
186
+ }
187
+ const host = hostById.get(hostId);
188
+ nodes.push({
189
+ id: tunnelId(hostId),
190
+ type: "tunnel",
191
+ inputs: {
192
+ name: tunnelName(hostId),
193
+ accountId: makeRef(cloudflare.id, "accountId"),
194
+ apiToken,
195
+ ...sshOf(host.input),
196
+ internalIp: makeRef(hostId, "internalIp"),
197
+ ingress,
198
+ image: IMAGES.cloudflared,
199
+ },
200
+ explicitDependsOn: [cloudflare.id, hostId],
201
+ });
202
+ }
203
+ return nodes;
204
+ };
205
+ //# sourceMappingURL=emit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { IntentSet } from "@intentic/need-resolver";
2
+ import type { ResolvedNode } from "@intentic/resources";
3
+ import type { PlatformRefs } from "./platform.js";
4
+ export declare const resolveIdentities: (intent: IntentSet, platform: PlatformRefs, hostId: string) => ResolvedNode[];
5
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,SAAS,EAAc,MAAM,yBAAyB,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AA4BlD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,EAAE,UAAU,YAAY,EAAE,QAAQ,MAAM,KAAG,YAAY,EAuHzG,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { generated, makeRef } from "@intentic/graph";
2
+ import { adminUsername, deploymentId, forgejoOrgId, forgejoTeamId, forgejoUserId, komodoUserId, orgName, repoId, userPasswordKey } from "./ids.js";
3
+ const TEAM_NAME = "members";
4
+ const forgejoRoleRank = { read: 1, write: 2, admin: 3 };
5
+ const strongerForgejoRole = (a, b) => (forgejoRoleRank[a] >= forgejoRoleRank[b] ? a : b);
6
+ const komodoLevel = { read: "Read", execute: "Execute", admin: "Write" };
7
+ const komodoLevelRank = { Read: 1, Execute: 2, Write: 3 };
8
+ export const resolveIdentities = (intent, platform, hostId) => {
9
+ const forgejoUrl = makeRef(platform.forgejo, "url");
10
+ const komodoUrl = makeRef(platform.deploy, "url");
11
+ const forgejoAdmin = { adminUser: adminUsername, adminPassword: generated("FORGEJO_ADMIN_PASSWORD") };
12
+ const komodoAdmin = { adminUser: adminUsername, adminPassword: generated("KOMODO_ADMIN_PASSWORD") };
13
+ const userById = new Map(intent.users.map((user) => [user.id, user.input]));
14
+ const teamById = new Map(intent.teams.map((team) => [team.id, team.input]));
15
+ for (const team of intent.teams) {
16
+ for (const member of team.input.members) {
17
+ if (!userById.has(member)) {
18
+ throw new Error(`team "${team.id}" references unknown user "${member}"; declare it with i.want.user`);
19
+ }
20
+ }
21
+ }
22
+ for (const app of intent.apps) {
23
+ for (const grant of app.teams ?? []) {
24
+ if (!teamById.has(grant.team)) {
25
+ throw new Error(`app "${app.id}" grants unknown team "${grant.team}"; declare it with i.want.team`);
26
+ }
27
+ }
28
+ }
29
+ const teamPermission = new Map();
30
+ const teamRepos = new Map();
31
+ const userGrants = new Map();
32
+ const teamMembers = (teamId) => teamById.get(teamId)?.members ?? [];
33
+ for (const app of intent.apps) {
34
+ const grants = app.teams ?? [];
35
+ const ownerGrant = grants[0];
36
+ if (ownerGrant === undefined) {
37
+ continue;
38
+ }
39
+ const owner = orgName(ownerGrant.team);
40
+ const deployments = Object.keys(app.environments).map((environment) => deploymentId(app.id, environment));
41
+ for (const grant of grants) {
42
+ const current = teamPermission.get(grant.team);
43
+ teamPermission.set(grant.team, current === undefined ? grant.role : strongerForgejoRole(current, grant.role));
44
+ const repos = teamRepos.get(grant.team) ?? [];
45
+ repos.push({ owner, name: app.id });
46
+ teamRepos.set(grant.team, repos);
47
+ const level = komodoLevel[teamById.get(grant.team)?.komodo ?? "read"];
48
+ for (const member of teamMembers(grant.team)) {
49
+ const grantsForUser = userGrants.get(member) ?? new Map();
50
+ for (const deployment of deployments) {
51
+ const existing = grantsForUser.get(deployment);
52
+ if (existing === undefined || komodoLevelRank[level] > komodoLevelRank[existing]) {
53
+ grantsForUser.set(deployment, level);
54
+ }
55
+ }
56
+ userGrants.set(member, grantsForUser);
57
+ }
58
+ }
59
+ }
60
+ const nodes = [];
61
+ for (const user of intent.users) {
62
+ const grants = [...(userGrants.get(user.id) ?? new Map()).entries()].map(([deployment, level]) => ({ deployment, level }));
63
+ nodes.push({
64
+ id: forgejoUserId(hostId, user.id),
65
+ type: "forgejo-user",
66
+ inputs: {
67
+ forgejoUrl,
68
+ ...forgejoAdmin,
69
+ username: user.input.username,
70
+ email: user.input.email,
71
+ accountPassword: generated(userPasswordKey(user.id)),
72
+ },
73
+ explicitDependsOn: [platform.forgejo, platform.gitRoute],
74
+ });
75
+ nodes.push({
76
+ id: komodoUserId(hostId, user.id),
77
+ type: "komodo-user",
78
+ inputs: { komodoUrl, ...komodoAdmin, username: user.input.username, password: generated(userPasswordKey(user.id)), grants },
79
+ explicitDependsOn: [platform.deploy, platform.deployRoute, ...grants.map((grant) => grant.deployment)],
80
+ });
81
+ }
82
+ for (const team of intent.teams) {
83
+ const org = orgName(team.id);
84
+ const repos = teamRepos.get(team.id) ?? [];
85
+ nodes.push({
86
+ id: forgejoOrgId(hostId, team.id),
87
+ type: "forgejo-org",
88
+ inputs: { forgejoUrl, ...forgejoAdmin, org },
89
+ explicitDependsOn: [platform.forgejo, platform.gitRoute],
90
+ });
91
+ nodes.push({
92
+ id: forgejoTeamId(hostId, team.id),
93
+ type: "forgejo-team",
94
+ inputs: {
95
+ forgejoUrl,
96
+ ...forgejoAdmin,
97
+ org,
98
+ name: TEAM_NAME,
99
+ permission: teamPermission.get(team.id) ?? "read",
100
+ members: team.input.members.map((member) => userById.get(member)?.username ?? member),
101
+ repos,
102
+ },
103
+ explicitDependsOn: [
104
+ forgejoOrgId(hostId, team.id),
105
+ ...team.input.members.map((member) => forgejoUserId(hostId, member)),
106
+ ...repos.map((repo) => repoId(repo.name)),
107
+ ],
108
+ });
109
+ }
110
+ return nodes;
111
+ };
112
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
package/dist/ids.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ export declare const forgejoId: (hostId: string) => string;
2
+ export declare const runnerId: (hostId: string) => string;
3
+ export declare const komodoId: (hostId: string) => string;
4
+ export declare const tunnelId: (hostId: string) => string;
5
+ export declare const backupId: (hostId: string) => string;
6
+ export declare const tunnelName: (hostId: string) => string;
7
+ export declare const repoId: (appId: string) => string;
8
+ export declare const forgejoUserId: (hostId: string, userId: string) => string;
9
+ export declare const forgejoOrgId: (hostId: string, teamId: string) => string;
10
+ export declare const forgejoTeamId: (hostId: string, teamId: string) => string;
11
+ export declare const komodoUserId: (hostId: string, userId: string) => string;
12
+ export declare const orgName: (teamId: string) => string;
13
+ export declare const userPasswordKey: (userId: string) => string;
14
+ export declare const deploymentId: (appId: string, environment: string) => string;
15
+ export declare const ciId: (appId: string, environment: string) => string;
16
+ export declare const forgejoNotifyId: (appId: string) => string;
17
+ export declare const komodoNotifyId: (appId: string) => string;
18
+ export declare const gitDomain: (zone: string) => string;
19
+ export declare const deployDomain: (zone: string) => string;
20
+ export declare const previewDomain: (zone: string) => string;
21
+ export declare const previewBase: (zone: string) => string;
22
+ export declare const deploymentPort: (deploymentId: string) => number;
23
+ export declare const adminUsername = "intentic";
24
+ export declare const registryAuthority: (zone: string) => string;
25
+ export declare const bindingId: (appId: string, instanceId: string) => string;
26
+ export declare const dbName: (appId: string) => string;
27
+ export declare const cacheUser: (appId: string) => string;
28
+ export declare const appSlug: (appId: string) => string;
29
+ export declare const bucketName: (appId: string) => string;
30
+ export declare const backingPort: (instanceId: string) => number;
31
+ export declare const secretKey: (prefix: string, id: string) => string;
32
+ export declare const ghCiId: (appId: string, environment: string) => string;
33
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,MAAyB,CAAC;AACrE,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,KAAG,MAAuC,CAAC;AAClF,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,KAAG,MAA4B,CAAC;AACvE,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,KAAG,MAA4B,CAAC;AAEvE,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,KAAG,MAA4B,CAAC;AAEvE,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,KAAG,MAA8B,CAAC;AAC3E,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,KAAG,MAAyB,CAAC;AAGjE,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,MAA+C,CAAC;AAC/G,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,MAA8C,CAAC;AAC7G,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAgD,CAAC;AAEhH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,MAA8C,CAAC;AAI7G,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,KAAG,MAAgB,CAAC;AAE1D,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAAwF,CAAC;AAC1I,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,aAAa,MAAM,KAAG,MAAmC,CAAC;AAEtG,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,EAAE,aAAa,MAAM,KAAG,MAAkD,CAAC;AAE7G,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAAmC,CAAC;AACpF,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MAA2B,CAAC;AAC3E,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAuB,CAAC;AACjE,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAA0B,CAAC;AAGvE,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAA6B,CAAC;AAC3E,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAA2B,CAAC;AAIvE,eAAO,MAAM,cAAc,GAAI,cAAc,MAAM,KAAG,MACqC,CAAC;AAI5F,eAAO,MAAM,aAAa,aAAa,CAAC;AAIxC,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAAyB,CAAC;AAK3E,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,EAAE,YAAY,MAAM,KAAG,MAAuC,CAAC;AAKtG,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,KAAG,MAA4D,CAAC;AACpG,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAA4D,CAAC;AAKvG,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,KAAG,MAIR,CAAC;AACjC,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAAwB,CAAC;AAKpE,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG,MAA+F,CAAC;AAIjJ,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,EAAE,IAAI,MAAM,KAAG,MAAuE,CAAC;AAK/H,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,EAAE,aAAa,MAAM,KAAG,MAAqD,CAAC"}
package/dist/ids.js ADDED
@@ -0,0 +1,36 @@
1
+ export const forgejoId = (hostId) => `${hostId}-git`;
2
+ export const runnerId = (hostId) => `${forgejoId(hostId)}-runner`;
3
+ export const komodoId = (hostId) => `${hostId}-deploy`;
4
+ export const tunnelId = (hostId) => `${hostId}-tunnel`;
5
+ export const backupId = (hostId) => `${hostId}-backup`;
6
+ export const tunnelName = (hostId) => `intentic-${hostId}`;
7
+ export const repoId = (appId) => `${appId}-repo`;
8
+ export const forgejoUserId = (hostId, userId) => `${forgejoId(hostId)}-user-${userId}`;
9
+ export const forgejoOrgId = (hostId, teamId) => `${forgejoId(hostId)}-org-${teamId}`;
10
+ export const forgejoTeamId = (hostId, teamId) => `${forgejoOrgId(hostId, teamId)}-team`;
11
+ export const komodoUserId = (hostId, userId) => `${komodoId(hostId)}-user-${userId}`;
12
+ export const orgName = (teamId) => teamId;
13
+ export const userPasswordKey = (userId) => `INTENTIC_USER_PASSWORD_${userId.replace(/[^A-Za-z0-9]/g, "_").toUpperCase()}`;
14
+ export const deploymentId = (appId, environment) => `${appId}.${environment}`;
15
+ export const ciId = (appId, environment) => `${deploymentId(appId, environment)}-ci`;
16
+ export const forgejoNotifyId = (appId) => `${repoId(appId)}-notify`;
17
+ export const komodoNotifyId = (appId) => `${appId}-notify`;
18
+ export const gitDomain = (zone) => `git.${zone}`;
19
+ export const deployDomain = (zone) => `deploy.${zone}`;
20
+ export const previewDomain = (zone) => `*.preview.${zone}`;
21
+ export const previewBase = (zone) => `preview.${zone}`;
22
+ export const deploymentPort = (deploymentId) => 20000 + [...deploymentId].reduce((acc, ch) => (acc * 31 + ch.charCodeAt(0)) % 10000, 7);
23
+ export const adminUsername = "intentic";
24
+ export const registryAuthority = (zone) => gitDomain(zone);
25
+ export const bindingId = (appId, instanceId) => `${appId}-uses-${instanceId}`;
26
+ export const dbName = (appId) => appId.replace(/[^A-Za-z0-9]+/g, "_").toLowerCase();
27
+ export const cacheUser = (appId) => appId.replace(/[^A-Za-z0-9]+/g, "_").toLowerCase();
28
+ export const appSlug = (appId) => appId
29
+ .toLowerCase()
30
+ .replace(/[^a-z0-9]+/g, "-")
31
+ .replace(/^-+|-+$/g, "");
32
+ export const bucketName = (appId) => appSlug(appId);
33
+ export const backingPort = (instanceId) => 40000 + [...instanceId].reduce((acc, ch) => (acc * 31 + ch.charCodeAt(0)) % 10000, 7);
34
+ export const secretKey = (prefix, id) => `${prefix}_${id.replace(/[^A-Za-z0-9]/g, "_").toUpperCase()}`;
35
+ export const ghCiId = (appId, environment) => `${deploymentId(appId, environment)}-gh-ci`;
36
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare const IMAGES: Readonly<{
2
+ readonly forgejo: "codeberg.org/forgejo/forgejo:15.0.3@sha256:55bb42bec9abef5223744804f164e37d37b20df7e8b8b4807ba213ad4f071d6d";
3
+ readonly forgejoRunner: "data.forgejo.org/forgejo/runner:12.12.0@sha256:268ad0d1d24bd7ecf2386b7c44e8211398dc014ca81d4fd5fbad96fe79af18f5";
4
+ readonly forgejoRunnerJob: "data.forgejo.org/oci/node:24-bookworm@sha256:fdddfb3e688158251943d52eba361de991548f6814007acba4917ae6b512d6be";
5
+ readonly cloudflared: "cloudflare/cloudflared:2026.6.1@sha256:6d91c121b803126f7a5344005d17a9324788fc09d305b6e2560ec6040a7ae283";
6
+ readonly komodoCore: "ghcr.io/moghtech/komodo-core:2.1.0@sha256:4915d91b5c6e9de4e8fd59391eed5cad090ec84dcf6a1a9233d97edfdbbb88e7";
7
+ readonly komodoPeriphery: "ghcr.io/moghtech/komodo-periphery:2.1.0@sha256:f5b272e3d9acd60d4eac69ea4fa0292dcaddfdecfc2be64ba5575e5ae18e72ae";
8
+ readonly ferretdb: "ghcr.io/ferretdb/ferretdb:2.7.0@sha256:5706414241eb84f0515512c37b46db0f1b1eac9e5ceb7e4c2523211c184b1985";
9
+ readonly postgresDocumentdb: "ghcr.io/ferretdb/postgres-documentdb:17-0.107.0-ferretdb-2.7.0@sha256:2386795ec2aa7ae559304361979f1dc5708d383ee9020ae63dadc2940dfe58f7";
10
+ readonly clickhouse: "clickhouse/clickhouse-server:25.5.6@sha256:4536143e22dc9bddb217c7e610f6b7ed5e6efd8fefdbc61acdeadb5d8022213a";
11
+ readonly signoz: "signoz/signoz:v0.129.0@sha256:50447bb4461c075f52b8fe331324db389f7475b0b6abd1f0a4c9ce7ab3967ca8";
12
+ readonly signozOtelCollector: "signoz/signoz-otel-collector:v0.144.5@sha256:f9bf94d566055d06581f3befbf361cc26d670f31ad00cb31fda2ec380210c5ec";
13
+ readonly signozZookeeper: "signoz/zookeeper:3.7.1@sha256:fcc4a3288154ccaa3bdb5ae6dc10180c084d29a8a6a26b62ac8e30a8940dc2e6";
14
+ readonly backup: "restic/restic:0.19.0@sha256:7f44e0057b82348597568ea209360762d0b38f8e1dbc8ad859661ac1055e45f2";
15
+ readonly postgres: "postgres:18.4-alpine@sha256:1b1689b20d16a014a3d195653381cf2caa75a41a92d93b255a9d6ea29fd353aa";
16
+ readonly valkey: "valkey/valkey:9.1.0-alpine@sha256:a35428eba9043cc0b79dbe54100f0c92784f2de00ad09b01182bfb1c5c83d1bd";
17
+ readonly authentik: "ghcr.io/goauthentik/server:2026.2.4@sha256:0ed7e84cef9d0051659dba5cf63a860a485f85b3fff698c8d2fff17fa3cbe596";
18
+ readonly garage: "dxflrs/garage:v2.3.0@sha256:866bd13ed2038ba7e7190e840482bc27234c4afaf77be8cfa439ae088c1e4690";
19
+ readonly runner: "ghcr.io/radarsu/intentic/runner:0.1.0@sha256:1f147f3716f4ea05bbb9a456d538d55d645835e1529b8b07548858be12f6b26f";
20
+ readonly sandbox: "ghcr.io/radarsu/intentic/sandbox:0.1.0";
21
+ }>;
22
+ //# sourceMappingURL=images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;EA6DR,CAAC"}
package/dist/images.js ADDED
@@ -0,0 +1,22 @@
1
+ export const IMAGES = Object.freeze({
2
+ forgejo: "codeberg.org/forgejo/forgejo:15.0.3@sha256:55bb42bec9abef5223744804f164e37d37b20df7e8b8b4807ba213ad4f071d6d",
3
+ forgejoRunner: "data.forgejo.org/forgejo/runner:12.12.0@sha256:268ad0d1d24bd7ecf2386b7c44e8211398dc014ca81d4fd5fbad96fe79af18f5",
4
+ forgejoRunnerJob: "data.forgejo.org/oci/node:24-bookworm@sha256:fdddfb3e688158251943d52eba361de991548f6814007acba4917ae6b512d6be",
5
+ cloudflared: "cloudflare/cloudflared:2026.6.1@sha256:6d91c121b803126f7a5344005d17a9324788fc09d305b6e2560ec6040a7ae283",
6
+ komodoCore: "ghcr.io/moghtech/komodo-core:2.1.0@sha256:4915d91b5c6e9de4e8fd59391eed5cad090ec84dcf6a1a9233d97edfdbbb88e7",
7
+ komodoPeriphery: "ghcr.io/moghtech/komodo-periphery:2.1.0@sha256:f5b272e3d9acd60d4eac69ea4fa0292dcaddfdecfc2be64ba5575e5ae18e72ae",
8
+ ferretdb: "ghcr.io/ferretdb/ferretdb:2.7.0@sha256:5706414241eb84f0515512c37b46db0f1b1eac9e5ceb7e4c2523211c184b1985",
9
+ postgresDocumentdb: "ghcr.io/ferretdb/postgres-documentdb:17-0.107.0-ferretdb-2.7.0@sha256:2386795ec2aa7ae559304361979f1dc5708d383ee9020ae63dadc2940dfe58f7",
10
+ clickhouse: "clickhouse/clickhouse-server:25.5.6@sha256:4536143e22dc9bddb217c7e610f6b7ed5e6efd8fefdbc61acdeadb5d8022213a",
11
+ signoz: "signoz/signoz:v0.129.0@sha256:50447bb4461c075f52b8fe331324db389f7475b0b6abd1f0a4c9ce7ab3967ca8",
12
+ signozOtelCollector: "signoz/signoz-otel-collector:v0.144.5@sha256:f9bf94d566055d06581f3befbf361cc26d670f31ad00cb31fda2ec380210c5ec",
13
+ signozZookeeper: "signoz/zookeeper:3.7.1@sha256:fcc4a3288154ccaa3bdb5ae6dc10180c084d29a8a6a26b62ac8e30a8940dc2e6",
14
+ backup: "restic/restic:0.19.0@sha256:7f44e0057b82348597568ea209360762d0b38f8e1dbc8ad859661ac1055e45f2",
15
+ postgres: "postgres:18.4-alpine@sha256:1b1689b20d16a014a3d195653381cf2caa75a41a92d93b255a9d6ea29fd353aa",
16
+ valkey: "valkey/valkey:9.1.0-alpine@sha256:a35428eba9043cc0b79dbe54100f0c92784f2de00ad09b01182bfb1c5c83d1bd",
17
+ authentik: "ghcr.io/goauthentik/server:2026.2.4@sha256:0ed7e84cef9d0051659dba5cf63a860a485f85b3fff698c8d2fff17fa3cbe596",
18
+ garage: "dxflrs/garage:v2.3.0@sha256:866bd13ed2038ba7e7190e840482bc27234c4afaf77be8cfa439ae088c1e4690",
19
+ runner: "ghcr.io/radarsu/intentic/runner:0.1.0@sha256:1f147f3716f4ea05bbb9a456d538d55d645835e1529b8b07548858be12f6b26f",
20
+ sandbox: "ghcr.io/radarsu/intentic/sandbox:0.1.0",
21
+ });
22
+ //# sourceMappingURL=images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.js","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAEhC,OAAO,EAAE,6GAA6G;IAEtH,aAAa,EAAE,iHAAiH;IAGhI,gBAAgB,EAAE,+GAA+G;IAEjI,WAAW,EAAE,yGAAyG;IAEtH,UAAU,EAAE,4GAA4G;IAExH,eAAe,EAAE,iHAAiH;IAElI,QAAQ,EAAE,yGAAyG;IAGnH,kBAAkB,EACd,wIAAwI;IAK5I,UAAU,EAAE,6GAA6G;IAEzH,MAAM,EAAE,gGAAgG;IAGxG,mBAAmB,EAAE,+GAA+G;IAEpI,eAAe,EAAE,gGAAgG;IAIjH,MAAM,EAAE,8FAA8F;IAItG,QAAQ,EAAE,8FAA8F;IAIxG,MAAM,EAAE,oGAAoG;IAI5G,SAAS,EAAE,6GAA6G;IAGxH,MAAM,EAAE,8FAA8F;IAQtG,MAAM,EAAE,+GAA+G;IAEvH,OAAO,EAAE,wCAAwC;CAC3C,CAAC,CAAC"}