iec-builder 0.1.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 (337) hide show
  1. package/.claude/settings.local.json +111 -0
  2. package/.iec.yaml +5 -0
  3. package/CLAUDE.md +174 -0
  4. package/Dockerfile +34 -0
  5. package/README.md +84 -0
  6. package/catalog-info.yaml +11 -0
  7. package/dist/config/env.d.ts +219 -0
  8. package/dist/config/env.d.ts.map +1 -0
  9. package/dist/config/env.js +89 -0
  10. package/dist/config/env.js.map +1 -0
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +148 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/middleware/auth.d.ts +43 -0
  16. package/dist/middleware/auth.d.ts.map +1 -0
  17. package/dist/middleware/auth.js +217 -0
  18. package/dist/middleware/auth.js.map +1 -0
  19. package/dist/middleware/org-access.d.ts +28 -0
  20. package/dist/middleware/org-access.d.ts.map +1 -0
  21. package/dist/middleware/org-access.js +102 -0
  22. package/dist/middleware/org-access.js.map +1 -0
  23. package/dist/models/types.d.ts +254 -0
  24. package/dist/models/types.d.ts.map +1 -0
  25. package/dist/models/types.js +2 -0
  26. package/dist/models/types.js.map +1 -0
  27. package/dist/routes/ai.d.ts +2 -0
  28. package/dist/routes/ai.d.ts.map +1 -0
  29. package/dist/routes/ai.js +77 -0
  30. package/dist/routes/ai.js.map +1 -0
  31. package/dist/routes/audit.d.ts +2 -0
  32. package/dist/routes/audit.d.ts.map +1 -0
  33. package/dist/routes/audit.js +102 -0
  34. package/dist/routes/audit.js.map +1 -0
  35. package/dist/routes/builds.d.ts +2 -0
  36. package/dist/routes/builds.d.ts.map +1 -0
  37. package/dist/routes/builds.js +262 -0
  38. package/dist/routes/builds.js.map +1 -0
  39. package/dist/routes/cluster.d.ts +2 -0
  40. package/dist/routes/cluster.d.ts.map +1 -0
  41. package/dist/routes/cluster.js +181 -0
  42. package/dist/routes/cluster.js.map +1 -0
  43. package/dist/routes/config.d.ts +2 -0
  44. package/dist/routes/config.d.ts.map +1 -0
  45. package/dist/routes/config.js +291 -0
  46. package/dist/routes/config.js.map +1 -0
  47. package/dist/routes/databases.d.ts +2 -0
  48. package/dist/routes/databases.d.ts.map +1 -0
  49. package/dist/routes/databases.js +161 -0
  50. package/dist/routes/databases.js.map +1 -0
  51. package/dist/routes/db-whitelist.d.ts +2 -0
  52. package/dist/routes/db-whitelist.d.ts.map +1 -0
  53. package/dist/routes/db-whitelist.js +148 -0
  54. package/dist/routes/db-whitelist.js.map +1 -0
  55. package/dist/routes/domains.d.ts +2 -0
  56. package/dist/routes/domains.d.ts.map +1 -0
  57. package/dist/routes/domains.js +449 -0
  58. package/dist/routes/domains.js.map +1 -0
  59. package/dist/routes/oauth.d.ts +2 -0
  60. package/dist/routes/oauth.d.ts.map +1 -0
  61. package/dist/routes/oauth.js +180 -0
  62. package/dist/routes/oauth.js.map +1 -0
  63. package/dist/routes/observability.d.ts +2 -0
  64. package/dist/routes/observability.d.ts.map +1 -0
  65. package/dist/routes/observability.js +167 -0
  66. package/dist/routes/observability.js.map +1 -0
  67. package/dist/routes/orgs.d.ts +2 -0
  68. package/dist/routes/orgs.d.ts.map +1 -0
  69. package/dist/routes/orgs.js +270 -0
  70. package/dist/routes/orgs.js.map +1 -0
  71. package/dist/routes/platform.d.ts +2 -0
  72. package/dist/routes/platform.d.ts.map +1 -0
  73. package/dist/routes/platform.js +107 -0
  74. package/dist/routes/platform.js.map +1 -0
  75. package/dist/routes/push.d.ts +2 -0
  76. package/dist/routes/push.d.ts.map +1 -0
  77. package/dist/routes/push.js +233 -0
  78. package/dist/routes/push.js.map +1 -0
  79. package/dist/routes/rotation.d.ts +3 -0
  80. package/dist/routes/rotation.d.ts.map +1 -0
  81. package/dist/routes/rotation.js +154 -0
  82. package/dist/routes/rotation.js.map +1 -0
  83. package/dist/routes/services.d.ts +2 -0
  84. package/dist/routes/services.d.ts.map +1 -0
  85. package/dist/routes/services.js +246 -0
  86. package/dist/routes/services.js.map +1 -0
  87. package/dist/routes/storage.d.ts +2 -0
  88. package/dist/routes/storage.d.ts.map +1 -0
  89. package/dist/routes/storage.js +118 -0
  90. package/dist/routes/storage.js.map +1 -0
  91. package/dist/routes/users.d.ts +2 -0
  92. package/dist/routes/users.d.ts.map +1 -0
  93. package/dist/routes/users.js +183 -0
  94. package/dist/routes/users.js.map +1 -0
  95. package/dist/routes/versions.d.ts +2 -0
  96. package/dist/routes/versions.d.ts.map +1 -0
  97. package/dist/routes/versions.js +195 -0
  98. package/dist/routes/versions.js.map +1 -0
  99. package/dist/routes/webhooks.d.ts +2 -0
  100. package/dist/routes/webhooks.d.ts.map +1 -0
  101. package/dist/routes/webhooks.js +334 -0
  102. package/dist/routes/webhooks.js.map +1 -0
  103. package/dist/services/__tests__/deploy-pipeline.integration.test.d.ts +2 -0
  104. package/dist/services/__tests__/deploy-pipeline.integration.test.d.ts.map +1 -0
  105. package/dist/services/__tests__/deploy-pipeline.integration.test.js +482 -0
  106. package/dist/services/__tests__/deploy-pipeline.integration.test.js.map +1 -0
  107. package/dist/services/bio-client.d.ts +68 -0
  108. package/dist/services/bio-client.d.ts.map +1 -0
  109. package/dist/services/bio-client.js +110 -0
  110. package/dist/services/bio-client.js.map +1 -0
  111. package/dist/services/build-queue.d.ts +7 -0
  112. package/dist/services/build-queue.d.ts.map +1 -0
  113. package/dist/services/build-queue.js +114 -0
  114. package/dist/services/build-queue.js.map +1 -0
  115. package/dist/services/builder.d.ts +7 -0
  116. package/dist/services/builder.d.ts.map +1 -0
  117. package/dist/services/builder.js +1384 -0
  118. package/dist/services/builder.js.map +1 -0
  119. package/dist/services/catalog.d.ts +177 -0
  120. package/dist/services/catalog.d.ts.map +1 -0
  121. package/dist/services/catalog.js +805 -0
  122. package/dist/services/catalog.js.map +1 -0
  123. package/dist/services/catalog.test.d.ts +2 -0
  124. package/dist/services/catalog.test.d.ts.map +1 -0
  125. package/dist/services/catalog.test.js +467 -0
  126. package/dist/services/catalog.test.js.map +1 -0
  127. package/dist/services/cloudflare.d.ts +43 -0
  128. package/dist/services/cloudflare.d.ts.map +1 -0
  129. package/dist/services/cloudflare.js +182 -0
  130. package/dist/services/cloudflare.js.map +1 -0
  131. package/dist/services/config-validator.d.ts +28 -0
  132. package/dist/services/config-validator.d.ts.map +1 -0
  133. package/dist/services/config-validator.js +68 -0
  134. package/dist/services/config-validator.js.map +1 -0
  135. package/dist/services/config-validator.test.d.ts +2 -0
  136. package/dist/services/config-validator.test.d.ts.map +1 -0
  137. package/dist/services/config-validator.test.js +151 -0
  138. package/dist/services/config-validator.test.js.map +1 -0
  139. package/dist/services/crypto.d.ts +19 -0
  140. package/dist/services/crypto.d.ts.map +1 -0
  141. package/dist/services/crypto.js +63 -0
  142. package/dist/services/crypto.js.map +1 -0
  143. package/dist/services/database.d.ts +26 -0
  144. package/dist/services/database.d.ts.map +1 -0
  145. package/dist/services/database.js +100 -0
  146. package/dist/services/database.js.map +1 -0
  147. package/dist/services/db-credential-manager.d.ts +73 -0
  148. package/dist/services/db-credential-manager.d.ts.map +1 -0
  149. package/dist/services/db-credential-manager.js +342 -0
  150. package/dist/services/db-credential-manager.js.map +1 -0
  151. package/dist/services/db-provisioner.d.ts +57 -0
  152. package/dist/services/db-provisioner.d.ts.map +1 -0
  153. package/dist/services/db-provisioner.js +400 -0
  154. package/dist/services/db-provisioner.js.map +1 -0
  155. package/dist/services/db-provisioner.test.d.ts +2 -0
  156. package/dist/services/db-provisioner.test.d.ts.map +1 -0
  157. package/dist/services/db-provisioner.test.js +141 -0
  158. package/dist/services/db-provisioner.test.js.map +1 -0
  159. package/dist/services/db-whitelist.d.ts +58 -0
  160. package/dist/services/db-whitelist.d.ts.map +1 -0
  161. package/dist/services/db-whitelist.js +379 -0
  162. package/dist/services/db-whitelist.js.map +1 -0
  163. package/dist/services/dependency-resolver.d.ts +58 -0
  164. package/dist/services/dependency-resolver.d.ts.map +1 -0
  165. package/dist/services/dependency-resolver.js +180 -0
  166. package/dist/services/dependency-resolver.js.map +1 -0
  167. package/dist/services/dependency-resolver.test.d.ts +2 -0
  168. package/dist/services/dependency-resolver.test.d.ts.map +1 -0
  169. package/dist/services/dependency-resolver.test.js +195 -0
  170. package/dist/services/dependency-resolver.test.js.map +1 -0
  171. package/dist/services/deploy-gate.d.ts +19 -0
  172. package/dist/services/deploy-gate.d.ts.map +1 -0
  173. package/dist/services/deploy-gate.js +56 -0
  174. package/dist/services/deploy-gate.js.map +1 -0
  175. package/dist/services/deploy-gate.test.d.ts +2 -0
  176. package/dist/services/deploy-gate.test.d.ts.map +1 -0
  177. package/dist/services/deploy-gate.test.js +199 -0
  178. package/dist/services/deploy-gate.test.js.map +1 -0
  179. package/dist/services/dockerfile-generator.d.ts +31 -0
  180. package/dist/services/dockerfile-generator.d.ts.map +1 -0
  181. package/dist/services/dockerfile-generator.js +544 -0
  182. package/dist/services/dockerfile-generator.js.map +1 -0
  183. package/dist/services/dockerfile-generator.test.d.ts +2 -0
  184. package/dist/services/dockerfile-generator.test.d.ts.map +1 -0
  185. package/dist/services/dockerfile-generator.test.js +144 -0
  186. package/dist/services/dockerfile-generator.test.js.map +1 -0
  187. package/dist/services/forgejo.d.ts +58 -0
  188. package/dist/services/forgejo.d.ts.map +1 -0
  189. package/dist/services/forgejo.js +131 -0
  190. package/dist/services/forgejo.js.map +1 -0
  191. package/dist/services/koko.d.ts +153 -0
  192. package/dist/services/koko.d.ts.map +1 -0
  193. package/dist/services/koko.js +260 -0
  194. package/dist/services/koko.js.map +1 -0
  195. package/dist/services/kubernetes.d.ts +16 -0
  196. package/dist/services/kubernetes.d.ts.map +1 -0
  197. package/dist/services/kubernetes.js +102 -0
  198. package/dist/services/kubernetes.js.map +1 -0
  199. package/dist/services/oauth-provisioner.d.ts +30 -0
  200. package/dist/services/oauth-provisioner.d.ts.map +1 -0
  201. package/dist/services/oauth-provisioner.js +182 -0
  202. package/dist/services/oauth-provisioner.js.map +1 -0
  203. package/dist/services/oauth-provisioner.test.d.ts +2 -0
  204. package/dist/services/oauth-provisioner.test.d.ts.map +1 -0
  205. package/dist/services/oauth-provisioner.test.js +349 -0
  206. package/dist/services/oauth-provisioner.test.js.map +1 -0
  207. package/dist/services/pod-diagnostics.d.ts +11 -0
  208. package/dist/services/pod-diagnostics.d.ts.map +1 -0
  209. package/dist/services/pod-diagnostics.js +201 -0
  210. package/dist/services/pod-diagnostics.js.map +1 -0
  211. package/dist/services/rotation-scheduler.d.ts +2 -0
  212. package/dist/services/rotation-scheduler.d.ts.map +1 -0
  213. package/dist/services/rotation-scheduler.js +215 -0
  214. package/dist/services/rotation-scheduler.js.map +1 -0
  215. package/dist/services/storage-credential-manager.d.ts +43 -0
  216. package/dist/services/storage-credential-manager.d.ts.map +1 -0
  217. package/dist/services/storage-credential-manager.js +159 -0
  218. package/dist/services/storage-credential-manager.js.map +1 -0
  219. package/dist/services/storage-provisioner.d.ts +32 -0
  220. package/dist/services/storage-provisioner.d.ts.map +1 -0
  221. package/dist/services/storage-provisioner.js +136 -0
  222. package/dist/services/storage-provisioner.js.map +1 -0
  223. package/dist/services/storage.d.ts +65 -0
  224. package/dist/services/storage.d.ts.map +1 -0
  225. package/dist/services/storage.js +204 -0
  226. package/dist/services/storage.js.map +1 -0
  227. package/dist/services/troubleshooter.d.ts +22 -0
  228. package/dist/services/troubleshooter.d.ts.map +1 -0
  229. package/dist/services/troubleshooter.js +168 -0
  230. package/dist/services/troubleshooter.js.map +1 -0
  231. package/dist/services/vault-client.d.ts +114 -0
  232. package/dist/services/vault-client.d.ts.map +1 -0
  233. package/dist/services/vault-client.js +411 -0
  234. package/dist/services/vault-client.js.map +1 -0
  235. package/dist/utils/logger.d.ts +2 -0
  236. package/dist/utils/logger.d.ts.map +1 -0
  237. package/dist/utils/logger.js +6 -0
  238. package/dist/utils/logger.js.map +1 -0
  239. package/dist/utils/response.d.ts +13 -0
  240. package/dist/utils/response.d.ts.map +1 -0
  241. package/dist/utils/response.js +12 -0
  242. package/dist/utils/response.js.map +1 -0
  243. package/docs/registry-migration.md +301 -0
  244. package/docs/registry-quickstart.md +169 -0
  245. package/ecosystem.config.cjs +14 -0
  246. package/findings.md +168 -0
  247. package/helm/default-service/Chart.yaml +6 -0
  248. package/helm/default-service/templates/deployment.yaml +97 -0
  249. package/helm/default-service/templates/ingress.yaml +43 -0
  250. package/helm/default-service/templates/service.yaml +17 -0
  251. package/helm/default-service/values.yaml +82 -0
  252. package/helm/services/iec-builder/Chart.yaml +6 -0
  253. package/helm/services/iec-builder/templates/_helpers.tpl +61 -0
  254. package/helm/services/iec-builder/templates/deployment.yaml +73 -0
  255. package/helm/services/iec-builder/templates/service.yaml +15 -0
  256. package/helm/services/iec-builder/templates/serviceaccount.yaml +12 -0
  257. package/helm/services/iec-builder/values.yaml +56 -0
  258. package/helm/vault-values.yaml +127 -0
  259. package/package.json +45 -0
  260. package/progress.md +156 -0
  261. package/scripts/.vault-init-keys.json +23 -0
  262. package/scripts/backfill-ownership.ts +113 -0
  263. package/scripts/finalize-mongo-auth.sh +212 -0
  264. package/scripts/setup-ipset.sh +107 -0
  265. package/scripts/setup-mongo-auth.sh +163 -0
  266. package/scripts/setup-neo4j-auth.sh +62 -0
  267. package/scripts/setup-redis-auth.sh +55 -0
  268. package/scripts/setup-registry-secret.sh +71 -0
  269. package/scripts/setup-vault.sh +308 -0
  270. package/src/config/env.ts +117 -0
  271. package/src/index.ts +153 -0
  272. package/src/middleware/auth.ts +294 -0
  273. package/src/middleware/org-access.ts +126 -0
  274. package/src/models/types.ts +288 -0
  275. package/src/routes/ai.ts +115 -0
  276. package/src/routes/audit.ts +121 -0
  277. package/src/routes/builds.ts +320 -0
  278. package/src/routes/cluster.ts +235 -0
  279. package/src/routes/config.ts +369 -0
  280. package/src/routes/databases.ts +201 -0
  281. package/src/routes/db-whitelist.ts +204 -0
  282. package/src/routes/domains.ts +547 -0
  283. package/src/routes/oauth.ts +195 -0
  284. package/src/routes/observability.ts +205 -0
  285. package/src/routes/orgs.ts +330 -0
  286. package/src/routes/platform.ts +134 -0
  287. package/src/routes/rotation.ts +191 -0
  288. package/src/routes/services.ts +290 -0
  289. package/src/routes/storage.ts +153 -0
  290. package/src/routes/users.ts +235 -0
  291. package/src/routes/webhooks.ts +384 -0
  292. package/src/services/__tests__/catalog-storage.test.ts +186 -0
  293. package/src/services/__tests__/deploy-pipeline.integration.test.ts +624 -0
  294. package/src/services/__tests__/pod-diagnostics.test.ts +332 -0
  295. package/src/services/__tests__/storage-credential-manager.test.ts +129 -0
  296. package/src/services/__tests__/storage-provisioner.test.ts +166 -0
  297. package/src/services/__tests__/troubleshooter.test.ts +329 -0
  298. package/src/services/bio-client.ts +189 -0
  299. package/src/services/build-queue.ts +137 -0
  300. package/src/services/builder.ts +1800 -0
  301. package/src/services/catalog.test.ts +1389 -0
  302. package/src/services/catalog.ts +1187 -0
  303. package/src/services/cloudflare.ts +259 -0
  304. package/src/services/config-validator.test.ts +190 -0
  305. package/src/services/config-validator.ts +108 -0
  306. package/src/services/crypto.ts +78 -0
  307. package/src/services/database.ts +122 -0
  308. package/src/services/db-credential-manager.test.ts +101 -0
  309. package/src/services/db-credential-manager.ts +447 -0
  310. package/src/services/db-provisioner.test.ts +602 -0
  311. package/src/services/db-provisioner.ts +589 -0
  312. package/src/services/db-whitelist.test.ts +671 -0
  313. package/src/services/db-whitelist.ts +496 -0
  314. package/src/services/dependency-resolver.test.ts +677 -0
  315. package/src/services/dependency-resolver.ts +319 -0
  316. package/src/services/deploy-gate.test.ts +247 -0
  317. package/src/services/deploy-gate.ts +75 -0
  318. package/src/services/dockerfile-generator.test.ts +401 -0
  319. package/src/services/dockerfile-generator.ts +606 -0
  320. package/src/services/forgejo.ts +212 -0
  321. package/src/services/koko.ts +492 -0
  322. package/src/services/kubernetes.ts +141 -0
  323. package/src/services/oauth-provisioner.test.ts +477 -0
  324. package/src/services/oauth-provisioner.ts +286 -0
  325. package/src/services/pod-diagnostics.ts +261 -0
  326. package/src/services/rotation-scheduler.ts +293 -0
  327. package/src/services/storage-credential-manager.ts +223 -0
  328. package/src/services/storage-provisioner.ts +216 -0
  329. package/src/services/storage.ts +274 -0
  330. package/src/services/troubleshooter.ts +208 -0
  331. package/src/services/vault-client.test.ts +272 -0
  332. package/src/services/vault-client.ts +587 -0
  333. package/src/utils/logger.ts +6 -0
  334. package/src/utils/response.ts +23 -0
  335. package/task_plan.md +171 -0
  336. package/tsconfig.json +20 -0
  337. package/vitest.config.ts +19 -0
@@ -0,0 +1,111 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "mcp__filesystem__directory_tree",
5
+ "mcp__filesystem__read_multiple_files",
6
+ "Bash(git config:*)",
7
+ "mcp__filesystem__list_directory",
8
+ "mcp__filesystem__list_allowed_directories",
9
+ "mcp__jci-mcp__bible_create",
10
+ "mcp__jci-mcp__bible_publish",
11
+ "mcp__jci-mcp__bible_append",
12
+ "Bash(git add:*)",
13
+ "Bash(git commit:*)",
14
+ "Bash(iec deploy:*)",
15
+ "Bash(iec logs:*)",
16
+ "Bash(npm install)",
17
+ "Bash(git push)",
18
+ "Bash(gh run list:*)",
19
+ "Bash(ssh:*)",
20
+ "Bash(pnpm iec link:*)",
21
+ "Bash(pnpm iec deploy:*)",
22
+ "Bash(pnpm iec logs:*)",
23
+ "Bash(kubectl get:*)",
24
+ "Bash(kubectl describe:*)",
25
+ "Bash(doctl compute droplet-size list:*)",
26
+ "Bash(doctl compute size list:*)",
27
+ "Bash(doctl compute size:*)",
28
+ "Bash(sort:*)",
29
+ "Bash(kubectl apply:*)",
30
+ "mcp__filesystem__search_files",
31
+ "Read(//Users/daryx/dev/**)",
32
+ "Bash(ls:*)",
33
+ "Bash(iec status:*)",
34
+ "Bash(npm run build:*)",
35
+ "Bash(git -C /Users/daryx/dev/tawa-web log --oneline -3)",
36
+ "WebFetch(domain:tawa.insureco.io)",
37
+ "Bash(npx tsc:*)",
38
+ "Bash(npx tsx:*)",
39
+ "Bash(doctl kubernetes cluster:*)",
40
+ "Bash(scp:*)",
41
+ "Bash(dig:*)",
42
+ "mcp__firecrawl__firecrawl_search",
43
+ "mcp__firecrawl__firecrawl_scrape",
44
+ "Bash(FORGEJO_TOKEN=\"afa025a5fa8a07633ddc50acb32945da5c1f86b3\")",
45
+ "Bash(for name in iec-builder iec-koko iec-janus iec-bio checkcle iec-wallet tawa-web resi-tech icap-portal iec-relay sandiego-site)",
46
+ "Bash(do echo -n \"$name: \")",
47
+ "Bash(python3:*)",
48
+ "Bash(done)",
49
+ "Bash(bash -c '\nFORGEJO_TOKEN=\"\"afa025a5fa8a07633ddc50acb32945da5c1f86b3\"\"\nWORK_DIR=\"\"/tmp/git-migration\"\"\nmkdir -p \"\"$WORK_DIR\"\"\n\ndeclare -A REPOS\nREPOS[\"\"git@github.com:insurecosys/iec-builder.git\"\"]=\"\"iec-builder\"\"\nREPOS[\"\"git@github.com:insurecosys/iec-koko.git\"\"]=\"\"iec-koko\"\"\nREPOS[\"\"git@github.com:insurecosys/iec-janus.git\"\"]=\"\"iec-janus\"\"\nREPOS[\"\"git@github.com:insurecosys/iec-bio.git\"\"]=\"\"iec-bio\"\"\nREPOS[\"\"git@github.com:insurecosys/checkcle.git\"\"]=\"\"checkcle\"\"\nREPOS[\"\"git@github.com:insurecosys/iec-wallet.git\"\"]=\"\"iec-wallet\"\"\nREPOS[\"\"git@github.com:insurecosys/tawa-web.git\"\"]=\"\"tawa-web\"\"\nREPOS[\"\"git@github.com:insureco/resi-tech.git\"\"]=\"\"resi-tech\"\"\nREPOS[\"\"git@github.com:insurecosys/icap-portal.git\"\"]=\"\"icap-portal\"\"\nREPOS[\"\"git@github.com:insurecosys/iec-relay.git\"\"]=\"\"iec-relay\"\"\nREPOS[\"\"git@github.com:sagmahajan/sandiego-site.git\"\"]=\"\"sandiego-site\"\"\n\nfor github_url in \"\"${!REPOS[@]}\"\"; do\n name=\"\"${REPOS[$github_url]}\"\"\n echo \"\"=== $name ===\"\"\n cd \"\"$WORK_DIR\"\"\n rm -rf \"\"${name}.git\"\"\n git clone --bare \"\"$github_url\"\" \"\"${name}.git\"\" 2>&1 | tail -1\n cd \"\"${name}.git\"\"\n git push --mirror \"\"https://forgejo-token:${FORGEJO_TOKEN}@git.insureco.io/insureco/${name}.git\"\" 2>&1 | tail -3\n echo \"\"\"\"\ndone\n')",
50
+ "Bash(wc:*)",
51
+ "Bash(chmod:*)",
52
+ "Bash(git -C /Users/daryx/dev/tawa-cli add src/commands/org.ts src/commands/login.ts src/index.ts src/lib/builder.ts)",
53
+ "Bash(git -C /Users/daryx/dev/tawa-cli diff --cached --stat)",
54
+ "Bash(git -C /Users/daryx/dev/tawa-cli push)",
55
+ "Bash(npm publish:*)",
56
+ "Bash(npx turbo run build:*)",
57
+ "Bash(mongosh:*)",
58
+ "Bash(tawa config list:*)",
59
+ "Bash(tawa deploy:*)",
60
+ "Bash(NEW_URI=\"mongodb://svc_relay_prod:W143iTjsvqrqyTgGIWq1fYsaKSLwPrgv@64.23.181.20:27017/relay?authSource=relay\")",
61
+ "Bash(tawa status:*)",
62
+ "Bash(kubectl logs:*)",
63
+ "Bash(tawa login:*)",
64
+ "Bash(tawa services:*)",
65
+ "Bash(git clone:*)",
66
+ "Bash(node dist/index.js:*)",
67
+ "Bash(kubectl exec:*)",
68
+ "Bash(tawa logs:*)",
69
+ "Skill(planning-with-files)",
70
+ "Skill(planning-with-files:*)",
71
+ "Bash(kubectl run:*)",
72
+ "Bash(kubectl delete:*)",
73
+ "Bash(aws kms create-alias:*)",
74
+ "Bash(aws iam create-user:*)",
75
+ "Bash(aws iam put-user-policy:*)",
76
+ "Bash(aws iam create-access-key:*)",
77
+ "Bash(bash:*)",
78
+ "Bash(git fetch:*)",
79
+ "WebFetch(domain:paketo.io)",
80
+ "WebFetch(domain:nixpacks.com)",
81
+ "WebFetch(domain:buildpacks.io)",
82
+ "WebFetch(domain:github.com)",
83
+ "WebFetch(domain:raw.githubusercontent.com)",
84
+ "Bash(gh api:*)",
85
+ "Bash(npm info:*)",
86
+ "Bash(go version:*)",
87
+ "Bash(git stash:*)",
88
+ "Bash(git revert:*)",
89
+ "Bash(git rm:*)",
90
+ "Bash(host:*)",
91
+ "Bash(nslookup:*)",
92
+ "Bash(npm view:*)",
93
+ "Bash(head:*)",
94
+ "Bash(tail:*)",
95
+ "Bash(git -C /Users/daryx/dev/tawa-cli add src/commands/sample.ts src/lib/scaffold.ts src/index.ts)",
96
+ "Bash(git -C /Users/daryx/dev/tawa-cli commit -m \"$\\(cat <<''EOF''\nfeat: add --with-storage flag to tawa sample scaffold\n\nAdds S3 object storage support to scaffolded projects. When used,\npatches package.json with tawa-storage dependency, adds spec.storage\nto catalog-info.yaml, and creates src/storage.ts helper file.\nEOF\n\\)\")",
97
+ "Bash(git -C /Users/daryx/dev/tawa-web add \"src/app/\\(public\\)/docs/storage/page.tsx\" \"src/app/\\(public\\)/docs/layout.tsx\" \"src/app/\\(public\\)/docs/page.tsx\")",
98
+ "Bash(git -C /Users/daryx/dev/tawa-web commit -m \"$\\(cat <<''EOF''\ndocs: add Object Storage guide\n\nCovers YAML config, storage tiers, env vars, tawa-storage SDK usage,\nAPI reference, local development with Docker MinIO, and scaffold support.\nEOF\n\\)\")",
99
+ "Bash(npx turbo build:*)",
100
+ "Bash(git -C /Users/daryx/dev/iec-bio remote:*)",
101
+ "mcp__iec-cf__list_dns_records",
102
+ "Bash(tawa domain add:*)",
103
+ "Bash(npx tawa:*)",
104
+ "Bash(xargs:*)",
105
+ "Bash(for i in {1..3})",
106
+ "Bash(do echo \"Attempt $i:\")",
107
+ "Bash(sudo dscacheutil:*)",
108
+ "Bash(sudo killall:*)"
109
+ ]
110
+ }
111
+ }
package/.iec.yaml ADDED
@@ -0,0 +1,5 @@
1
+ serviceId: c77af113-c779-4bb9-8e17-ef8d3d0d4708
2
+ serviceName: iec-builder
3
+ repoUrl: git@github.com:insurecosys/iec-builder.git
4
+ branch: main
5
+ linkedAt: 2026-01-23T01:57:21.894Z
package/CLAUDE.md ADDED
@@ -0,0 +1,174 @@
1
+ # iec-builder
2
+
3
+ Build and deployment server for Tawa platform services. Runs on tawa-builder server (64.23.181.20, PM2 process 0).
4
+
5
+ ## Architecture
6
+
7
+ ### Deployment Flow
8
+
9
+ `tawa deploy` triggers the builder which:
10
+ 1. Clones repo at specified commit
11
+ 2. Reads `catalog-info.yaml` for service metadata (framework, databases, auth, routes)
12
+ 3. Builds Docker image (auto-generates Dockerfile if missing)
13
+ 4. Pushes to DigitalOcean Container Registry
14
+ 5. Provisions databases (MongoDB, Redis, Neo4j) and creates K8s secrets
15
+ 6. Provisions OAuth client via Bio-ID and creates K8s secret
16
+ 7. Deploys via Helm (default-service chart or custom chart)
17
+ 8. Registers service in Koko (service mesh)
18
+ 9. Configures DNS
19
+
20
+ ### Key Source Files
21
+
22
+ | File | Purpose |
23
+ |------|---------|
24
+ | `src/services/builder.ts` | Core build/deploy orchestration |
25
+ | `src/services/crypto.ts` | AES-256-GCM encryption for secrets |
26
+ | `src/services/db-provisioner.ts` | Database provisioning and secret creation |
27
+ | `src/services/db-credential-manager.ts` | Per-service MongoDB user management |
28
+ | `src/services/oauth-provisioner.ts` | Bio-ID OAuth client provisioning |
29
+ | `src/routes/config.ts` | Config/secrets CRUD API |
30
+ | `src/routes/builds.ts` | Build trigger and status API |
31
+ | `src/routes/databases.ts` | Database credential listing and rotation API |
32
+ | `src/services/db-whitelist.ts` | Self-service DB access (IP whitelist + ipset) |
33
+ | `src/routes/db-whitelist.ts` | Whitelist API endpoints |
34
+ | `helm/default-service/` | Default Helm chart used for most services |
35
+
36
+ ## Managed Secrets System
37
+
38
+ Secrets are stored encrypted in MongoDB and injected into Kubernetes on deploy.
39
+
40
+ ### Flow
41
+
42
+ 1. Developer sets secret: `tawa config set KEY=VALUE --secret`
43
+ 2. API encrypts value with AES-256-GCM using `CONFIG_ENCRYPTION_KEY`
44
+ 3. Encrypted value stored in `service.secrets` in MongoDB
45
+ 4. On deploy, builder decrypts and creates K8s Secret: `{service}-managed-secrets`
46
+ 5. Helm receives `--set secretRef={service}-managed-secrets`
47
+ 6. Pod mounts the secret via `envFrom.secretRef`
48
+
49
+ ### Secret Naming Convention
50
+
51
+ | Type | K8s Secret Name | Created By |
52
+ |------|----------------|------------|
53
+ | Managed (user-defined) | `{service}-managed-secrets` | builder.ts (deploy) |
54
+ | MongoDB | `{service}-db-mongodb` | db-provisioner.ts |
55
+ | Redis | `{service}-db-redis` | db-provisioner.ts |
56
+ | Neo4j | `{service}-db-neo4j` | db-provisioner.ts |
57
+ | OAuth | `{service}-oauth` | oauth-provisioner.ts |
58
+ | DB Credentials (auth) | `{service}-db-{type}` | db-provisioner.ts (with credentials) |
59
+
60
+ ### Important
61
+
62
+ - `CONFIG_ENCRYPTION_KEY` (env var, 64-char hex) is required for secret operations
63
+ - Secret values are NEVER returned by the API -- only key names
64
+ - `tawa config pull` decrypts and writes to `.env.local` (audited)
65
+ - Do NOT create Helm `secret.yaml` templates -- let the builder handle secrets
66
+
67
+ ## Helm Charts
68
+
69
+ ### Default Service Chart (`helm/default-service/`)
70
+
71
+ Used for most services. The deployment template mounts:
72
+ - `{release}-config` (ConfigMap, optional) -- plain env vars via `--set env.KEY=val`
73
+ - `{release}-secrets` (Secret, optional) -- legacy, not actively created
74
+ - `secretRef` value (Secret) -- managed secrets, set via `--set secretRef=`
75
+
76
+ ### Custom Charts
77
+
78
+ Services with custom Helm charts (in their own repo or `iec-tawa/helm/services/`) should:
79
+ - Reference secrets via `secretRef` in values.yaml, NOT create secret templates
80
+ - Let the builder inject `--set secretRef=` during deploy
81
+
82
+ ## Per-Service Database Credentials
83
+
84
+ When `DB_MONGODB_ADMIN_URI` is set, the builder provisions per-service MongoDB users with `readWrite` role scoped to the service's database. This is opt-in and backwards-compatible -- when the env var is empty, the builder falls back to unauthenticated connection strings.
85
+
86
+ ### Flow
87
+
88
+ 1. On deploy, `db-provisioner.ts` checks if `DB_MONGODB_ADMIN_URI` is configured
89
+ 2. If configured: generates username (`svc_{service}_{env}`), password (32 random bytes, base64url)
90
+ 3. Calls `ensureMongoUser()` -- idempotent create/update of MongoDB user via admin connection
91
+ 4. Builds authenticated connection string: `mongodb://user:pass@host:port/db?authSource=db`
92
+ 5. Creates K8s secret with authenticated URI
93
+ 6. Encrypts password and stores in `service.databaseCredentials`
94
+
95
+ ### Credential Rotation
96
+
97
+ `POST /services/:name/databases/:type/rotate` generates a new password, updates the MongoDB user, updates the K8s secret, and stores the new encrypted password. Requires org admin role. Services must redeploy to pick up rotated credentials.
98
+
99
+ ### Environment Variable
100
+
101
+ `DB_MONGODB_ADMIN_URI` -- MongoDB admin connection string (e.g., `mongodb://admin:pass@host:27017/admin?authSource=admin`). Required for credential provisioning. When empty, databases are provisioned without authentication (legacy behavior).
102
+
103
+ ## Database Whitelist (Self-Service DB Access)
104
+
105
+ Developers can temporarily whitelist their IP for direct MongoDB access from tools like Studio 3T via `tawa db connect`. No SSH tunnels needed.
106
+
107
+ ### How It Works
108
+
109
+ 1. Developer runs `tawa db connect <service> --prod`
110
+ 2. CLI calls `POST /services/:name/databases/whitelist` on the builder
111
+ 3. Builder adds caller's IP to Linux `ipset` with TTL (auto-expires)
112
+ 4. Builder decrypts service credentials and returns a MongoDB connection string
113
+ 5. Audit record inserted in `db_whitelists` collection (TTL index auto-cleans)
114
+
115
+ ### Firewall (ipset + iptables)
116
+
117
+ Port 27017 is firewalled on tawa-builder. A named `ipset` (`mongodb-access`) controls which external IPs can connect:
118
+
119
+ ```
120
+ Rule 1: ACCEPT tcp/27017 from ipset mongodb-access (whitelisted IPs)
121
+ Rule 2: ACCEPT tcp/27017 from 127.0.0.1 (localhost/builder)
122
+ Rule 3: ACCEPT tcp/27017 from 10.0.0.0/8 (K8s nodes)
123
+ Rule 4: DROP tcp/27017 (everything else)
124
+ ```
125
+
126
+ The builder manages ipset entries via `sudo ipset add/del` (NOPASSWD configured in `/etc/sudoers.d/ipset-tawa`). Each entry has a kernel-level TTL that auto-removes it when expired.
127
+
128
+ ### Access Levels
129
+
130
+ | Org Role | Access Level | MongoDB User |
131
+ |----------|-------------|-------------|
132
+ | member | `read` | `svc_{service}_{env}_ro` (lazy-provisioned) |
133
+ | admin | `readWrite` | `svc_{service}_{env}` (existing deploy cred) |
134
+
135
+ ### API Endpoints
136
+
137
+ | Method | Endpoint | Role | Purpose |
138
+ |--------|----------|------|---------|
139
+ | `POST` | `/services/:name/databases/whitelist` | member | Whitelist IP, get connection string |
140
+ | `GET` | `/services/:name/databases/whitelist` | viewer | List active entries (no credentials) |
141
+ | `DELETE` | `/services/:name/databases/whitelist/:id` | admin | Revoke entry, remove IP from firewall |
142
+ | `GET` | `/databases/whitelist` | platform admin | List all entries across orgs |
143
+
144
+ ### Key Source Files
145
+
146
+ | File | Purpose |
147
+ |------|---------|
148
+ | `src/services/db-whitelist.ts` | Core service: IP validation, ipset management, credential lookup, audit |
149
+ | `src/routes/db-whitelist.ts` | API endpoints with org-scoped auth |
150
+ | `scripts/setup-ipset.sh` | One-time server setup (ipset + iptables rules) |
151
+
152
+ ### Startup Reconciliation
153
+
154
+ On builder restart, `reconcileOnStartup()` re-adds active whitelist entries to ipset (kernel ipset is cleared on reboot, but MongoDB records persist). Entries with expired TTLs are skipped.
155
+
156
+ ### Environment Variables
157
+
158
+ - `DB_MONGODB_PUBLIC_HOST` -- public IP for connection strings (falls back to `DB_MONGODB_HOST`)
159
+
160
+ ## Config API
161
+
162
+ | Method | Endpoint | Purpose |
163
+ |--------|----------|---------|
164
+ | `GET` | `/services/:name/config` | List config vars + secret key names |
165
+ | `PATCH` | `/services/:name/config` | Set config vars or secrets |
166
+ | `DELETE` | `/services/:name/config` | Remove config vars or secrets |
167
+ | `GET` | `/services/:name/config/pull` | Download decrypted config (audited) |
168
+
169
+ ## Testing
170
+
171
+ ```bash
172
+ npm test # unit tests (vitest)
173
+ npm run build # TypeScript compilation check
174
+ ```
package/Dockerfile ADDED
@@ -0,0 +1,34 @@
1
+ FROM node:20-alpine AS builder
2
+
3
+ WORKDIR /app
4
+
5
+ # Copy package files
6
+ COPY package*.json ./
7
+
8
+ # Install all dependencies (including dev for building)
9
+ RUN npm ci
10
+
11
+ # Copy source code
12
+ COPY tsconfig.json ./
13
+ COPY src/ ./src/
14
+
15
+ # Build TypeScript
16
+ RUN npm run build
17
+
18
+ # Production stage
19
+ FROM node:20-alpine
20
+
21
+ WORKDIR /app
22
+
23
+ COPY package*.json ./
24
+ RUN npm ci --omit=dev
25
+
26
+ # Copy built application from builder stage
27
+ COPY --from=builder /app/dist ./dist
28
+
29
+ ENV NODE_ENV=production
30
+ ENV PORT=3002
31
+
32
+ EXPOSE 3002
33
+
34
+ CMD ["node", "dist/index.js"]
package/README.md ADDED
@@ -0,0 +1,84 @@
1
+ # iec-builder
2
+
3
+ CI/CD Build Service for InsurEco Tawa platform.
4
+
5
+ ## Overview
6
+
7
+ iec-builder receives webhooks from Git providers (GitHub, GitLab, Bitbucket), builds Docker images, and deploys to Kubernetes. It runs on the tawa-builder server (64.23.181.20) alongside Docker.
8
+
9
+ ## Architecture
10
+
11
+ ```
12
+ Developer's Repo → Webhook → iec-builder → Docker Build → registry.insureco.io → K8s Deploy
13
+ ```
14
+
15
+ ## API Endpoints
16
+
17
+ ### Webhooks
18
+ - `POST /webhooks/github` - GitHub push webhook
19
+ - `POST /webhooks/gitlab` - GitLab push webhook
20
+ - `POST /webhooks/generic` - Generic webhook
21
+
22
+ ### Services (registered apps)
23
+ - `GET /services` - List registered services
24
+ - `POST /services` - Register a new service
25
+ - `GET /services/:id` - Get service details
26
+ - `PATCH /services/:id` - Update service config
27
+ - `DELETE /services/:id` - Unregister service
28
+ - `GET /services/:id/builds` - Get builds for service
29
+
30
+ ### Builds
31
+ - `GET /builds` - List builds
32
+ - `GET /builds/:id` - Get build details
33
+ - `GET /builds/:id/logs` - Get build logs
34
+ - `POST /builds/trigger` - Manually trigger build
35
+ - `POST /builds/:id/cancel` - Cancel a build
36
+ - `POST /builds/:id/retry` - Retry a failed build
37
+
38
+ ## Development
39
+
40
+ ```bash
41
+ npm install
42
+ npm run dev
43
+ ```
44
+
45
+ ## Deployment (tawa-builder)
46
+
47
+ ```bash
48
+ # SSH into tawa-builder
49
+ ssh tawa
50
+
51
+ # Deploy updates
52
+ cd /opt/iec-builder
53
+ git pull origin main
54
+ npm install
55
+ npm run build
56
+ pm2 restart iec-builder
57
+ pm2 save
58
+ ```
59
+
60
+ ### Server Details
61
+ - **Host**: 64.23.181.20 (ssh alias: `tawa`)
62
+ - **User**: tawa
63
+ - **SSH Key**: ~/.ssh/do_2025
64
+ - **App Path**: /opt/iec-builder
65
+ - **PM2 ID**: 0
66
+
67
+ ### Quick Deploy Command
68
+ ```bash
69
+ ssh tawa "cd /opt/iec-builder && git pull && npm install && npm run build && pm2 restart iec-builder"
70
+ ```
71
+
72
+ ## Environment Variables
73
+
74
+ | Variable | Default | Description |
75
+ |----------|---------|-------------|
76
+ | PORT | 3002 | HTTP port |
77
+ | MONGODB_URI | mongodb://localhost:27017/builder | MongoDB connection |
78
+ | REDIS_URL | redis://localhost:6379 | Redis connection |
79
+ | KOKO_URL | http://koko... | Koko service URL |
80
+ | WORKSPACE_DIR | /tmp/iec-builds | Build workspace |
81
+ | DOCKER_REGISTRY | registry.insureco.io/insureco | Container registry |
82
+ | DOCKER_REGISTRY_USER | | Registry username (Forgejo user) |
83
+ | DOCKER_REGISTRY_TOKEN | | Registry password (Forgejo access token) |
84
+ | K8S_NAMESPACE | iec-platform | Kubernetes namespace |
@@ -0,0 +1,11 @@
1
+ apiVersion: backstage.io/v1alpha1
2
+ kind: Component
3
+ metadata:
4
+ name: iec-builder
5
+ description: CI/CD build service for InsurEco Tawa platform
6
+ annotations:
7
+ github.com/project-slug: insurecosys/iec-builder
8
+ spec:
9
+ type: service
10
+ lifecycle: production
11
+ owner: platform-team
@@ -0,0 +1,219 @@
1
+ import { z } from 'zod';
2
+ declare const envSchema: z.ZodObject<{
3
+ NODE_ENV: z.ZodDefault<z.ZodEnum<["development", "staging", "production", "test"]>>;
4
+ PORT: z.ZodDefault<z.ZodEffects<z.ZodString, number, string>>;
5
+ LOG_LEVEL: z.ZodDefault<z.ZodEnum<["fatal", "error", "warn", "info", "debug", "trace"]>>;
6
+ MONGODB_URI: z.ZodDefault<z.ZodString>;
7
+ BIO_MONGODB_URI: z.ZodDefault<z.ZodString>;
8
+ REDIS_URL: z.ZodDefault<z.ZodString>;
9
+ DB_MONGODB_ADMIN_URI: z.ZodDefault<z.ZodString>;
10
+ DB_MONGODB_HOST: z.ZodDefault<z.ZodString>;
11
+ DB_MONGODB_PUBLIC_HOST: z.ZodDefault<z.ZodString>;
12
+ DB_MONGODB_PORT: z.ZodDefault<z.ZodEffects<z.ZodString, number, string>>;
13
+ DB_REDIS_ADMIN_URL: z.ZodDefault<z.ZodString>;
14
+ DB_REDIS_HOST: z.ZodDefault<z.ZodString>;
15
+ DB_REDIS_PORT: z.ZodDefault<z.ZodEffects<z.ZodString, number, string>>;
16
+ DB_NEO4J_ADMIN_URI: z.ZodDefault<z.ZodString>;
17
+ DB_NEO4J_ADMIN_USER: z.ZodDefault<z.ZodString>;
18
+ DB_NEO4J_ADMIN_PASSWORD: z.ZodDefault<z.ZodString>;
19
+ DB_NEO4J_HOST: z.ZodDefault<z.ZodString>;
20
+ DB_NEO4J_PORT: z.ZodDefault<z.ZodEffects<z.ZodString, number, string>>;
21
+ MINIO_HOST: z.ZodDefault<z.ZodString>;
22
+ MINIO_PORT: z.ZodDefault<z.ZodEffects<z.ZodString, number, string>>;
23
+ KOKO_URL: z.ZodDefault<z.ZodString>;
24
+ BIO_ID_URL: z.ZodDefault<z.ZodString>;
25
+ BIO_INTERNAL_KEY: z.ZodDefault<z.ZodString>;
26
+ WORKSPACE_DIR: z.ZodDefault<z.ZodString>;
27
+ DOCKER_REGISTRY: z.ZodDefault<z.ZodString>;
28
+ MAX_UPLOAD_SIZE_MB: z.ZodDefault<z.ZodEffects<z.ZodString, number, string>>;
29
+ ENABLE_AUTO_DOCKERFILE: z.ZodDefault<z.ZodString>;
30
+ ENFORCE_MINIMUM_CATALOG_VERSION: z.ZodDefault<z.ZodString>;
31
+ KUBECONFIG: z.ZodDefault<z.ZodString>;
32
+ K8S_NAMESPACE: z.ZodDefault<z.ZodString>;
33
+ ENABLE_K8S_DEPLOY: z.ZodDefault<z.ZodString>;
34
+ CLOUDFLARE_API_TOKEN: z.ZodDefault<z.ZodString>;
35
+ CLOUDFLARE_ZONE_ID: z.ZodDefault<z.ZodString>;
36
+ INGRESS_TARGET: z.ZodDefault<z.ZodString>;
37
+ ENABLE_DNS_MANAGEMENT: z.ZodDefault<z.ZodString>;
38
+ FORGEJO_URL: z.ZodDefault<z.ZodString>;
39
+ FORGEJO_TOKEN: z.ZodDefault<z.ZodString>;
40
+ FORGEJO_ADMIN_USER: z.ZodDefault<z.ZodString>;
41
+ FORGEJO_ADMIN_PASSWORD: z.ZodDefault<z.ZodString>;
42
+ GITHUB_TOKEN: z.ZodDefault<z.ZodString>;
43
+ GITHUB_WEBHOOK_SECRET: z.ZodDefault<z.ZodString>;
44
+ GITLAB_WEBHOOK_SECRET: z.ZodDefault<z.ZodString>;
45
+ WALLET_URL: z.ZodDefault<z.ZodString>;
46
+ INTERNAL_SERVICE_KEY: z.ZodDefault<z.ZodString>;
47
+ BUILD_CONCURRENCY: z.ZodDefault<z.ZodEffects<z.ZodString, number, string>>;
48
+ VAULT_ADDR: z.ZodDefault<z.ZodString>;
49
+ VAULT_TOKEN: z.ZodDefault<z.ZodString>;
50
+ VAULT_ENABLED: z.ZodDefault<z.ZodString>;
51
+ ROTATION_TTL_DAYS: z.ZodDefault<z.ZodEffects<z.ZodString, number, string>>;
52
+ RELAY_DIRECT_URL: z.ZodDefault<z.ZodString>;
53
+ RELAY_INTERNAL_KEY: z.ZodDefault<z.ZodString>;
54
+ ANTHROPIC_API_KEY: z.ZodDefault<z.ZodString>;
55
+ }, "strip", z.ZodTypeAny, {
56
+ NODE_ENV: "development" | "staging" | "production" | "test";
57
+ PORT: number;
58
+ LOG_LEVEL: "fatal" | "error" | "warn" | "info" | "debug" | "trace";
59
+ MONGODB_URI: string;
60
+ BIO_MONGODB_URI: string;
61
+ REDIS_URL: string;
62
+ DB_MONGODB_ADMIN_URI: string;
63
+ DB_MONGODB_HOST: string;
64
+ DB_MONGODB_PUBLIC_HOST: string;
65
+ DB_MONGODB_PORT: number;
66
+ DB_REDIS_ADMIN_URL: string;
67
+ DB_REDIS_HOST: string;
68
+ DB_REDIS_PORT: number;
69
+ DB_NEO4J_ADMIN_URI: string;
70
+ DB_NEO4J_ADMIN_USER: string;
71
+ DB_NEO4J_ADMIN_PASSWORD: string;
72
+ DB_NEO4J_HOST: string;
73
+ DB_NEO4J_PORT: number;
74
+ MINIO_HOST: string;
75
+ MINIO_PORT: number;
76
+ KOKO_URL: string;
77
+ BIO_ID_URL: string;
78
+ BIO_INTERNAL_KEY: string;
79
+ WORKSPACE_DIR: string;
80
+ DOCKER_REGISTRY: string;
81
+ MAX_UPLOAD_SIZE_MB: number;
82
+ ENABLE_AUTO_DOCKERFILE: string;
83
+ ENFORCE_MINIMUM_CATALOG_VERSION: string;
84
+ KUBECONFIG: string;
85
+ K8S_NAMESPACE: string;
86
+ ENABLE_K8S_DEPLOY: string;
87
+ CLOUDFLARE_API_TOKEN: string;
88
+ CLOUDFLARE_ZONE_ID: string;
89
+ INGRESS_TARGET: string;
90
+ ENABLE_DNS_MANAGEMENT: string;
91
+ FORGEJO_URL: string;
92
+ FORGEJO_TOKEN: string;
93
+ FORGEJO_ADMIN_USER: string;
94
+ FORGEJO_ADMIN_PASSWORD: string;
95
+ GITHUB_TOKEN: string;
96
+ GITHUB_WEBHOOK_SECRET: string;
97
+ GITLAB_WEBHOOK_SECRET: string;
98
+ WALLET_URL: string;
99
+ INTERNAL_SERVICE_KEY: string;
100
+ BUILD_CONCURRENCY: number;
101
+ VAULT_ADDR: string;
102
+ VAULT_TOKEN: string;
103
+ VAULT_ENABLED: string;
104
+ ROTATION_TTL_DAYS: number;
105
+ RELAY_DIRECT_URL: string;
106
+ RELAY_INTERNAL_KEY: string;
107
+ ANTHROPIC_API_KEY: string;
108
+ }, {
109
+ NODE_ENV?: "development" | "staging" | "production" | "test" | undefined;
110
+ PORT?: string | undefined;
111
+ LOG_LEVEL?: "fatal" | "error" | "warn" | "info" | "debug" | "trace" | undefined;
112
+ MONGODB_URI?: string | undefined;
113
+ BIO_MONGODB_URI?: string | undefined;
114
+ REDIS_URL?: string | undefined;
115
+ DB_MONGODB_ADMIN_URI?: string | undefined;
116
+ DB_MONGODB_HOST?: string | undefined;
117
+ DB_MONGODB_PUBLIC_HOST?: string | undefined;
118
+ DB_MONGODB_PORT?: string | undefined;
119
+ DB_REDIS_ADMIN_URL?: string | undefined;
120
+ DB_REDIS_HOST?: string | undefined;
121
+ DB_REDIS_PORT?: string | undefined;
122
+ DB_NEO4J_ADMIN_URI?: string | undefined;
123
+ DB_NEO4J_ADMIN_USER?: string | undefined;
124
+ DB_NEO4J_ADMIN_PASSWORD?: string | undefined;
125
+ DB_NEO4J_HOST?: string | undefined;
126
+ DB_NEO4J_PORT?: string | undefined;
127
+ MINIO_HOST?: string | undefined;
128
+ MINIO_PORT?: string | undefined;
129
+ KOKO_URL?: string | undefined;
130
+ BIO_ID_URL?: string | undefined;
131
+ BIO_INTERNAL_KEY?: string | undefined;
132
+ WORKSPACE_DIR?: string | undefined;
133
+ DOCKER_REGISTRY?: string | undefined;
134
+ MAX_UPLOAD_SIZE_MB?: string | undefined;
135
+ ENABLE_AUTO_DOCKERFILE?: string | undefined;
136
+ ENFORCE_MINIMUM_CATALOG_VERSION?: string | undefined;
137
+ KUBECONFIG?: string | undefined;
138
+ K8S_NAMESPACE?: string | undefined;
139
+ ENABLE_K8S_DEPLOY?: string | undefined;
140
+ CLOUDFLARE_API_TOKEN?: string | undefined;
141
+ CLOUDFLARE_ZONE_ID?: string | undefined;
142
+ INGRESS_TARGET?: string | undefined;
143
+ ENABLE_DNS_MANAGEMENT?: string | undefined;
144
+ FORGEJO_URL?: string | undefined;
145
+ FORGEJO_TOKEN?: string | undefined;
146
+ FORGEJO_ADMIN_USER?: string | undefined;
147
+ FORGEJO_ADMIN_PASSWORD?: string | undefined;
148
+ GITHUB_TOKEN?: string | undefined;
149
+ GITHUB_WEBHOOK_SECRET?: string | undefined;
150
+ GITLAB_WEBHOOK_SECRET?: string | undefined;
151
+ WALLET_URL?: string | undefined;
152
+ INTERNAL_SERVICE_KEY?: string | undefined;
153
+ BUILD_CONCURRENCY?: string | undefined;
154
+ VAULT_ADDR?: string | undefined;
155
+ VAULT_TOKEN?: string | undefined;
156
+ VAULT_ENABLED?: string | undefined;
157
+ ROTATION_TTL_DAYS?: string | undefined;
158
+ RELAY_DIRECT_URL?: string | undefined;
159
+ RELAY_INTERNAL_KEY?: string | undefined;
160
+ ANTHROPIC_API_KEY?: string | undefined;
161
+ }>;
162
+ export type Env = z.infer<typeof envSchema>;
163
+ export declare function loadEnv(): Env;
164
+ export declare const env: {
165
+ NODE_ENV: "development" | "staging" | "production" | "test";
166
+ PORT: number;
167
+ LOG_LEVEL: "fatal" | "error" | "warn" | "info" | "debug" | "trace";
168
+ MONGODB_URI: string;
169
+ BIO_MONGODB_URI: string;
170
+ REDIS_URL: string;
171
+ DB_MONGODB_ADMIN_URI: string;
172
+ DB_MONGODB_HOST: string;
173
+ DB_MONGODB_PUBLIC_HOST: string;
174
+ DB_MONGODB_PORT: number;
175
+ DB_REDIS_ADMIN_URL: string;
176
+ DB_REDIS_HOST: string;
177
+ DB_REDIS_PORT: number;
178
+ DB_NEO4J_ADMIN_URI: string;
179
+ DB_NEO4J_ADMIN_USER: string;
180
+ DB_NEO4J_ADMIN_PASSWORD: string;
181
+ DB_NEO4J_HOST: string;
182
+ DB_NEO4J_PORT: number;
183
+ MINIO_HOST: string;
184
+ MINIO_PORT: number;
185
+ KOKO_URL: string;
186
+ BIO_ID_URL: string;
187
+ BIO_INTERNAL_KEY: string;
188
+ WORKSPACE_DIR: string;
189
+ DOCKER_REGISTRY: string;
190
+ MAX_UPLOAD_SIZE_MB: number;
191
+ ENABLE_AUTO_DOCKERFILE: string;
192
+ ENFORCE_MINIMUM_CATALOG_VERSION: string;
193
+ KUBECONFIG: string;
194
+ K8S_NAMESPACE: string;
195
+ ENABLE_K8S_DEPLOY: string;
196
+ CLOUDFLARE_API_TOKEN: string;
197
+ CLOUDFLARE_ZONE_ID: string;
198
+ INGRESS_TARGET: string;
199
+ ENABLE_DNS_MANAGEMENT: string;
200
+ FORGEJO_URL: string;
201
+ FORGEJO_TOKEN: string;
202
+ FORGEJO_ADMIN_USER: string;
203
+ FORGEJO_ADMIN_PASSWORD: string;
204
+ GITHUB_TOKEN: string;
205
+ GITHUB_WEBHOOK_SECRET: string;
206
+ GITLAB_WEBHOOK_SECRET: string;
207
+ WALLET_URL: string;
208
+ INTERNAL_SERVICE_KEY: string;
209
+ BUILD_CONCURRENCY: number;
210
+ VAULT_ADDR: string;
211
+ VAULT_TOKEN: string;
212
+ VAULT_ENABLED: string;
213
+ ROTATION_TTL_DAYS: number;
214
+ RELAY_DIRECT_URL: string;
215
+ RELAY_INTERNAL_KEY: string;
216
+ ANTHROPIC_API_KEY: string;
217
+ };
218
+ export {};
219
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAQvB,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2Fb,CAAA;AAEF,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AAE3C,wBAAgB,OAAO,IAAI,GAAG,CAS7B;AAED,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAY,CAAA"}