@cicore/cli 1.0.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/bin/ci.js +13 -0
  2. package/dist/commands/addon/api-actions.d.ts +45 -0
  3. package/dist/commands/addon/api-actions.d.ts.map +1 -0
  4. package/dist/commands/addon/api-actions.js +281 -0
  5. package/dist/commands/addon/api-actions.js.map +1 -0
  6. package/dist/commands/addon/build.d.ts +11 -0
  7. package/dist/commands/addon/build.d.ts.map +1 -0
  8. package/dist/commands/addon/build.js +182 -0
  9. package/dist/commands/addon/build.js.map +1 -0
  10. package/dist/commands/addon/create.d.ts +11 -0
  11. package/dist/commands/addon/create.d.ts.map +1 -0
  12. package/dist/commands/addon/create.js +1186 -0
  13. package/dist/commands/addon/create.js.map +1 -0
  14. package/dist/commands/addon/delete.d.ts +13 -0
  15. package/dist/commands/addon/delete.d.ts.map +1 -0
  16. package/dist/commands/addon/delete.js +83 -0
  17. package/dist/commands/addon/delete.js.map +1 -0
  18. package/dist/commands/addon/deploy.d.ts +27 -0
  19. package/dist/commands/addon/deploy.d.ts.map +1 -0
  20. package/dist/commands/addon/deploy.js +459 -0
  21. package/dist/commands/addon/deploy.js.map +1 -0
  22. package/dist/commands/addon/dev-deploy.d.ts +31 -0
  23. package/dist/commands/addon/dev-deploy.d.ts.map +1 -0
  24. package/dist/commands/addon/dev-deploy.js +128 -0
  25. package/dist/commands/addon/dev-deploy.js.map +1 -0
  26. package/dist/commands/addon/dev.d.ts +36 -0
  27. package/dist/commands/addon/dev.d.ts.map +1 -0
  28. package/dist/commands/addon/dev.js +323 -0
  29. package/dist/commands/addon/dev.js.map +1 -0
  30. package/dist/commands/addon/extract-classes.d.ts +23 -0
  31. package/dist/commands/addon/extract-classes.d.ts.map +1 -0
  32. package/dist/commands/addon/extract-classes.js +281 -0
  33. package/dist/commands/addon/extract-classes.js.map +1 -0
  34. package/dist/commands/addon/generate-safelist.d.ts +24 -0
  35. package/dist/commands/addon/generate-safelist.d.ts.map +1 -0
  36. package/dist/commands/addon/generate-safelist.js +276 -0
  37. package/dist/commands/addon/generate-safelist.js.map +1 -0
  38. package/dist/commands/addon/index.d.ts +19 -0
  39. package/dist/commands/addon/index.d.ts.map +1 -0
  40. package/dist/commands/addon/index.js +296 -0
  41. package/dist/commands/addon/index.js.map +1 -0
  42. package/dist/commands/addon/init-repo.d.ts +25 -0
  43. package/dist/commands/addon/init-repo.d.ts.map +1 -0
  44. package/dist/commands/addon/init-repo.js +171 -0
  45. package/dist/commands/addon/init-repo.js.map +1 -0
  46. package/dist/commands/addon/install.d.ts +23 -0
  47. package/dist/commands/addon/install.d.ts.map +1 -0
  48. package/dist/commands/addon/install.js +84 -0
  49. package/dist/commands/addon/install.js.map +1 -0
  50. package/dist/commands/addon/list.d.ts +10 -0
  51. package/dist/commands/addon/list.d.ts.map +1 -0
  52. package/dist/commands/addon/list.js +102 -0
  53. package/dist/commands/addon/list.js.map +1 -0
  54. package/dist/commands/addon/manifest-refresh.d.ts +17 -0
  55. package/dist/commands/addon/manifest-refresh.d.ts.map +1 -0
  56. package/dist/commands/addon/manifest-refresh.js +48 -0
  57. package/dist/commands/addon/manifest-refresh.js.map +1 -0
  58. package/dist/commands/addon/migrate.d.ts +40 -0
  59. package/dist/commands/addon/migrate.d.ts.map +1 -0
  60. package/dist/commands/addon/migrate.js +236 -0
  61. package/dist/commands/addon/migrate.js.map +1 -0
  62. package/dist/commands/addon/publish.d.ts +33 -0
  63. package/dist/commands/addon/publish.d.ts.map +1 -0
  64. package/dist/commands/addon/publish.js +236 -0
  65. package/dist/commands/addon/publish.js.map +1 -0
  66. package/dist/commands/addon/scaffold-quality.d.ts +21 -0
  67. package/dist/commands/addon/scaffold-quality.d.ts.map +1 -0
  68. package/dist/commands/addon/scaffold-quality.js +90 -0
  69. package/dist/commands/addon/scaffold-quality.js.map +1 -0
  70. package/dist/commands/addon/sign.d.ts +9 -0
  71. package/dist/commands/addon/sign.d.ts.map +1 -0
  72. package/dist/commands/addon/sign.js +83 -0
  73. package/dist/commands/addon/sign.js.map +1 -0
  74. package/dist/commands/addon/toggle.d.ts +6 -0
  75. package/dist/commands/addon/toggle.d.ts.map +1 -0
  76. package/dist/commands/addon/toggle.js +46 -0
  77. package/dist/commands/addon/toggle.js.map +1 -0
  78. package/dist/commands/agent/index.d.ts +34 -0
  79. package/dist/commands/agent/index.d.ts.map +1 -0
  80. package/dist/commands/agent/index.js +564 -0
  81. package/dist/commands/agent/index.js.map +1 -0
  82. package/dist/commands/brand/index.d.ts +54 -0
  83. package/dist/commands/brand/index.d.ts.map +1 -0
  84. package/dist/commands/brand/index.js +367 -0
  85. package/dist/commands/brand/index.js.map +1 -0
  86. package/dist/commands/build/index.d.ts +53 -0
  87. package/dist/commands/build/index.d.ts.map +1 -0
  88. package/dist/commands/build/index.js +726 -0
  89. package/dist/commands/build/index.js.map +1 -0
  90. package/dist/commands/cache/flush-local.d.ts +31 -0
  91. package/dist/commands/cache/flush-local.d.ts.map +1 -0
  92. package/dist/commands/cache/flush-local.js +161 -0
  93. package/dist/commands/cache/flush-local.js.map +1 -0
  94. package/dist/commands/cache/index.d.ts +14 -0
  95. package/dist/commands/cache/index.d.ts.map +1 -0
  96. package/dist/commands/cache/index.js +453 -0
  97. package/dist/commands/cache/index.js.map +1 -0
  98. package/dist/commands/check/index.d.ts +8 -0
  99. package/dist/commands/check/index.d.ts.map +1 -0
  100. package/dist/commands/check/index.js +1316 -0
  101. package/dist/commands/check/index.js.map +1 -0
  102. package/dist/commands/cloudflare/index.d.ts +8 -0
  103. package/dist/commands/cloudflare/index.d.ts.map +1 -0
  104. package/dist/commands/cloudflare/index.js +453 -0
  105. package/dist/commands/cloudflare/index.js.map +1 -0
  106. package/dist/commands/core/create.d.ts +12 -0
  107. package/dist/commands/core/create.d.ts.map +1 -0
  108. package/dist/commands/core/create.js +206 -0
  109. package/dist/commands/core/create.js.map +1 -0
  110. package/dist/commands/core/delete.d.ts +11 -0
  111. package/dist/commands/core/delete.d.ts.map +1 -0
  112. package/dist/commands/core/delete.js +64 -0
  113. package/dist/commands/core/delete.js.map +1 -0
  114. package/dist/commands/core/env.d.ts +12 -0
  115. package/dist/commands/core/env.d.ts.map +1 -0
  116. package/dist/commands/core/env.js +95 -0
  117. package/dist/commands/core/env.js.map +1 -0
  118. package/dist/commands/core/health.d.ts +6 -0
  119. package/dist/commands/core/health.d.ts.map +1 -0
  120. package/dist/commands/core/health.js +215 -0
  121. package/dist/commands/core/health.js.map +1 -0
  122. package/dist/commands/core/index.d.ts +15 -0
  123. package/dist/commands/core/index.d.ts.map +1 -0
  124. package/dist/commands/core/index.js +86 -0
  125. package/dist/commands/core/index.js.map +1 -0
  126. package/dist/commands/core/list.d.ts +11 -0
  127. package/dist/commands/core/list.d.ts.map +1 -0
  128. package/dist/commands/core/list.js +58 -0
  129. package/dist/commands/core/list.js.map +1 -0
  130. package/dist/commands/core/rebuild.d.ts +13 -0
  131. package/dist/commands/core/rebuild.d.ts.map +1 -0
  132. package/dist/commands/core/rebuild.js +119 -0
  133. package/dist/commands/core/rebuild.js.map +1 -0
  134. package/dist/commands/db/index.d.ts +23 -0
  135. package/dist/commands/db/index.d.ts.map +1 -0
  136. package/dist/commands/db/index.js +355 -0
  137. package/dist/commands/db/index.js.map +1 -0
  138. package/dist/commands/db/promote-silo.d.ts +320 -0
  139. package/dist/commands/db/promote-silo.d.ts.map +1 -0
  140. package/dist/commands/db/promote-silo.js +930 -0
  141. package/dist/commands/db/promote-silo.js.map +1 -0
  142. package/dist/commands/db/relocate.d.ts +41 -0
  143. package/dist/commands/db/relocate.d.ts.map +1 -0
  144. package/dist/commands/db/relocate.js +482 -0
  145. package/dist/commands/db/relocate.js.map +1 -0
  146. package/dist/commands/db/rollback-silo.d.ts +44 -0
  147. package/dist/commands/db/rollback-silo.d.ts.map +1 -0
  148. package/dist/commands/db/rollback-silo.js +402 -0
  149. package/dist/commands/db/rollback-silo.js.map +1 -0
  150. package/dist/commands/deploy/index.d.ts +26 -0
  151. package/dist/commands/deploy/index.d.ts.map +1 -0
  152. package/dist/commands/deploy/index.js +107 -0
  153. package/dist/commands/deploy/index.js.map +1 -0
  154. package/dist/commands/devops/index.d.ts +6 -0
  155. package/dist/commands/devops/index.d.ts.map +1 -0
  156. package/dist/commands/devops/index.js +220 -0
  157. package/dist/commands/devops/index.js.map +1 -0
  158. package/dist/commands/domain/index.d.ts +8 -0
  159. package/dist/commands/domain/index.d.ts.map +1 -0
  160. package/dist/commands/domain/index.js +386 -0
  161. package/dist/commands/domain/index.js.map +1 -0
  162. package/dist/commands/image/index.d.ts +8 -0
  163. package/dist/commands/image/index.d.ts.map +1 -0
  164. package/dist/commands/image/index.js +308 -0
  165. package/dist/commands/image/index.js.map +1 -0
  166. package/dist/commands/install/factory-reset.d.ts +21 -0
  167. package/dist/commands/install/factory-reset.d.ts.map +1 -0
  168. package/dist/commands/install/factory-reset.js +83 -0
  169. package/dist/commands/install/factory-reset.js.map +1 -0
  170. package/dist/commands/install/index.d.ts +17 -0
  171. package/dist/commands/install/index.d.ts.map +1 -0
  172. package/dist/commands/install/index.js +44 -0
  173. package/dist/commands/install/index.js.map +1 -0
  174. package/dist/commands/install/install.d.ts +35 -0
  175. package/dist/commands/install/install.d.ts.map +1 -0
  176. package/dist/commands/install/install.js +171 -0
  177. package/dist/commands/install/install.js.map +1 -0
  178. package/dist/commands/login/index.d.ts +15 -0
  179. package/dist/commands/login/index.d.ts.map +1 -0
  180. package/dist/commands/login/index.js +58 -0
  181. package/dist/commands/login/index.js.map +1 -0
  182. package/dist/commands/nginx/index.d.ts +11 -0
  183. package/dist/commands/nginx/index.d.ts.map +1 -0
  184. package/dist/commands/nginx/index.js +580 -0
  185. package/dist/commands/nginx/index.js.map +1 -0
  186. package/dist/commands/server/bootstrap.d.ts +25 -0
  187. package/dist/commands/server/bootstrap.d.ts.map +1 -0
  188. package/dist/commands/server/bootstrap.js +260 -0
  189. package/dist/commands/server/bootstrap.js.map +1 -0
  190. package/dist/commands/server/index.d.ts +8 -0
  191. package/dist/commands/server/index.d.ts.map +1 -0
  192. package/dist/commands/server/index.js +2524 -0
  193. package/dist/commands/server/index.js.map +1 -0
  194. package/dist/commands/setup/index.d.ts +34 -0
  195. package/dist/commands/setup/index.d.ts.map +1 -0
  196. package/dist/commands/setup/index.js +423 -0
  197. package/dist/commands/setup/index.js.map +1 -0
  198. package/dist/commands/ssl/index.d.ts +8 -0
  199. package/dist/commands/ssl/index.d.ts.map +1 -0
  200. package/dist/commands/ssl/index.js +275 -0
  201. package/dist/commands/ssl/index.js.map +1 -0
  202. package/dist/commands/superadmin/index.d.ts +16 -0
  203. package/dist/commands/superadmin/index.d.ts.map +1 -0
  204. package/dist/commands/superadmin/index.js +81 -0
  205. package/dist/commands/superadmin/index.js.map +1 -0
  206. package/dist/commands/tenant/index.d.ts +6 -0
  207. package/dist/commands/tenant/index.d.ts.map +1 -0
  208. package/dist/commands/tenant/index.js +192 -0
  209. package/dist/commands/tenant/index.js.map +1 -0
  210. package/dist/index.d.ts +11 -0
  211. package/dist/index.d.ts.map +1 -0
  212. package/dist/index.js +107 -0
  213. package/dist/index.js.map +1 -0
  214. package/dist/lib/addon-sign.d.ts +23 -0
  215. package/dist/lib/addon-sign.d.ts.map +1 -0
  216. package/dist/lib/addon-sign.js +39 -0
  217. package/dist/lib/addon-sign.js.map +1 -0
  218. package/dist/lib/addon-sign.test.d.ts +2 -0
  219. package/dist/lib/addon-sign.test.d.ts.map +1 -0
  220. package/dist/lib/addon-sign.test.js +27 -0
  221. package/dist/lib/addon-sign.test.js.map +1 -0
  222. package/dist/lib/cdn.d.ts +25 -0
  223. package/dist/lib/cdn.d.ts.map +1 -0
  224. package/dist/lib/cdn.js +131 -0
  225. package/dist/lib/cdn.js.map +1 -0
  226. package/dist/lib/cloudflare.d.ts +133 -0
  227. package/dist/lib/cloudflare.d.ts.map +1 -0
  228. package/dist/lib/cloudflare.js +435 -0
  229. package/dist/lib/cloudflare.js.map +1 -0
  230. package/dist/lib/config.d.ts +96 -0
  231. package/dist/lib/config.d.ts.map +1 -0
  232. package/dist/lib/config.js +132 -0
  233. package/dist/lib/config.js.map +1 -0
  234. package/dist/lib/env.d.ts +8 -0
  235. package/dist/lib/env.d.ts.map +1 -0
  236. package/dist/lib/env.js +64 -0
  237. package/dist/lib/env.js.map +1 -0
  238. package/dist/lib/hosts.d.ts +194 -0
  239. package/dist/lib/hosts.d.ts.map +1 -0
  240. package/dist/lib/hosts.js +183 -0
  241. package/dist/lib/hosts.js.map +1 -0
  242. package/dist/lib/logger.d.ts +68 -0
  243. package/dist/lib/logger.d.ts.map +1 -0
  244. package/dist/lib/logger.js +130 -0
  245. package/dist/lib/logger.js.map +1 -0
  246. package/dist/lib/nginx-config.d.ts +78 -0
  247. package/dist/lib/nginx-config.d.ts.map +1 -0
  248. package/dist/lib/nginx-config.js +736 -0
  249. package/dist/lib/nginx-config.js.map +1 -0
  250. package/dist/lib/ops/addon-dev.d.ts +93 -0
  251. package/dist/lib/ops/addon-dev.d.ts.map +1 -0
  252. package/dist/lib/ops/addon-dev.js +237 -0
  253. package/dist/lib/ops/addon-dev.js.map +1 -0
  254. package/dist/lib/ops/addon-quality.d.ts +38 -0
  255. package/dist/lib/ops/addon-quality.d.ts.map +1 -0
  256. package/dist/lib/ops/addon-quality.js +338 -0
  257. package/dist/lib/ops/addon-quality.js.map +1 -0
  258. package/dist/lib/ops/addon-routes.d.ts +49 -0
  259. package/dist/lib/ops/addon-routes.d.ts.map +1 -0
  260. package/dist/lib/ops/addon-routes.js +189 -0
  261. package/dist/lib/ops/addon-routes.js.map +1 -0
  262. package/dist/lib/ops/addon.d.ts +120 -0
  263. package/dist/lib/ops/addon.d.ts.map +1 -0
  264. package/dist/lib/ops/addon.js +260 -0
  265. package/dist/lib/ops/addon.js.map +1 -0
  266. package/dist/lib/ops/cdn.d.ts +87 -0
  267. package/dist/lib/ops/cdn.d.ts.map +1 -0
  268. package/dist/lib/ops/cdn.js +170 -0
  269. package/dist/lib/ops/cdn.js.map +1 -0
  270. package/dist/lib/ops/cf.d.ts +36 -0
  271. package/dist/lib/ops/cf.d.ts.map +1 -0
  272. package/dist/lib/ops/cf.js +114 -0
  273. package/dist/lib/ops/cf.js.map +1 -0
  274. package/dist/lib/ops/compose.d.ts +95 -0
  275. package/dist/lib/ops/compose.d.ts.map +1 -0
  276. package/dist/lib/ops/compose.js +165 -0
  277. package/dist/lib/ops/compose.js.map +1 -0
  278. package/dist/lib/ops/core.d.ts +117 -0
  279. package/dist/lib/ops/core.d.ts.map +1 -0
  280. package/dist/lib/ops/core.js +322 -0
  281. package/dist/lib/ops/core.js.map +1 -0
  282. package/dist/lib/ops/db.d.ts +116 -0
  283. package/dist/lib/ops/db.d.ts.map +1 -0
  284. package/dist/lib/ops/db.js +351 -0
  285. package/dist/lib/ops/db.js.map +1 -0
  286. package/dist/lib/ops/dns.d.ts +111 -0
  287. package/dist/lib/ops/dns.d.ts.map +1 -0
  288. package/dist/lib/ops/dns.js +306 -0
  289. package/dist/lib/ops/dns.js.map +1 -0
  290. package/dist/lib/ops/image.d.ts +94 -0
  291. package/dist/lib/ops/image.d.ts.map +1 -0
  292. package/dist/lib/ops/image.js +159 -0
  293. package/dist/lib/ops/image.js.map +1 -0
  294. package/dist/lib/ops/nginx.d.ts +114 -0
  295. package/dist/lib/ops/nginx.d.ts.map +1 -0
  296. package/dist/lib/ops/nginx.js +388 -0
  297. package/dist/lib/ops/nginx.js.map +1 -0
  298. package/dist/lib/ops/redis.d.ts +7 -0
  299. package/dist/lib/ops/redis.d.ts.map +1 -0
  300. package/dist/lib/ops/redis.js +35 -0
  301. package/dist/lib/ops/redis.js.map +1 -0
  302. package/dist/lib/ops/ssh.d.ts +127 -0
  303. package/dist/lib/ops/ssh.d.ts.map +1 -0
  304. package/dist/lib/ops/ssh.js +269 -0
  305. package/dist/lib/ops/ssh.js.map +1 -0
  306. package/dist/lib/prompts.d.ts +46 -0
  307. package/dist/lib/prompts.d.ts.map +1 -0
  308. package/dist/lib/prompts.js +113 -0
  309. package/dist/lib/prompts.js.map +1 -0
  310. package/dist/lib/sast.d.ts +43 -0
  311. package/dist/lib/sast.d.ts.map +1 -0
  312. package/dist/lib/sast.js +79 -0
  313. package/dist/lib/sast.js.map +1 -0
  314. package/dist/lib/sast.test.d.ts +2 -0
  315. package/dist/lib/sast.test.d.ts.map +1 -0
  316. package/dist/lib/sast.test.js +33 -0
  317. package/dist/lib/sast.test.js.map +1 -0
  318. package/dist/lib/shell.d.ts +61 -0
  319. package/dist/lib/shell.d.ts.map +1 -0
  320. package/dist/lib/shell.js +183 -0
  321. package/dist/lib/shell.js.map +1 -0
  322. package/dist/lib/ssh-config.d.ts +37 -0
  323. package/dist/lib/ssh-config.d.ts.map +1 -0
  324. package/dist/lib/ssh-config.js +122 -0
  325. package/dist/lib/ssh-config.js.map +1 -0
  326. package/dist/lib/tenant-scope.d.ts +38 -0
  327. package/dist/lib/tenant-scope.d.ts.map +1 -0
  328. package/dist/lib/tenant-scope.js +129 -0
  329. package/dist/lib/tenant-scope.js.map +1 -0
  330. package/dist/lib/tenant-scope.test.d.ts +2 -0
  331. package/dist/lib/tenant-scope.test.d.ts.map +1 -0
  332. package/dist/lib/tenant-scope.test.js +223 -0
  333. package/dist/lib/tenant-scope.test.js.map +1 -0
  334. package/package.json +58 -0
  335. package/templates/bootstrap/.env.template +54 -0
  336. package/templates/bootstrap/docker-compose.yml +145 -0
  337. package/templates/vhost.conf.tmpl +446 -0
@@ -0,0 +1,171 @@
1
+ /**
2
+ * ci install — interactive CLI front for SetupController::install
3
+ *
4
+ * Walks the operator through the four-step setup wizard that previously
5
+ * lived only in the `/install/setup` Nuxt page:
6
+ *
7
+ * 1. Database (name + gateway)
8
+ * 2. Super admin (name, email, password)
9
+ * 3. Tenant (mode + display name)
10
+ * 4. Confirm + POST → backend runs migrations + tenant/user creation
11
+ * inside a transaction; rolls back the whole thing on failure.
12
+ *
13
+ * Every prompt accepts a corresponding `--flag` so the same code path
14
+ * also runs in non-interactive contexts (CI, scripted setups). Required
15
+ * fields default to interactive when neither flag nor prompt value is
16
+ * provided.
17
+ *
18
+ * Talks to the API over plain HTTP — the backend exposes /install/* as
19
+ * unauthenticated only when the system is in initial-setup state; once
20
+ * the first super admin lands, the same endpoints require a super-admin
21
+ * session (handling that auth flow is FUTURE).
22
+ */
23
+ import { input, confirm, select, password as passwordPrompt } from '../../lib/prompts.js';
24
+ import { log, spinner } from '../../lib/logger.js';
25
+ const ALLOWED_TENANT_MODES = new Set(['subdomain', 'path']);
26
+ const ALLOWED_GATEWAYS = new Set(['local', 'managed']);
27
+ const EMAIL_RE = /^[^@\s]+@[^@\s]+\.[^@\s]+$/;
28
+ const DB_NAME_RE = /^[a-z_][a-z0-9_]{0,62}$/i;
29
+ export async function runInstall(options) {
30
+ const apiBase = (options.apiBase ?? 'http://localhost:3080').replace(/\/$/, '');
31
+ log.title('CiCore — Interactive Installation');
32
+ log.info(`API: ${apiBase}`);
33
+ log.blank();
34
+ // ── Step 1: Database ─────────────────────────────────────────────
35
+ log.info('Step 1/3 — Database');
36
+ const dbName = await ensureValue(options.dbName, () => input(' Database name', 'cicore_db'), (v) => (DB_NAME_RE.test(v) ? null : 'Invalid db name — use a-z 0-9 _ only, must start with a letter or underscore'));
37
+ if (dbName === null)
38
+ return;
39
+ const gateway = await ensureValue(options.gateway, () => select(' Gateway', [
40
+ { name: 'local', message: 'local — Postgres on this stack (default for dev/staging)' },
41
+ { name: 'managed', message: 'managed — external managed Postgres (DO, RDS, etc.)' },
42
+ ]), (v) => (ALLOWED_GATEWAYS.has(v) ? null : 'Gateway must be "local" or "managed"'));
43
+ if (gateway === null)
44
+ return;
45
+ // ── Step 2: Super Admin ──────────────────────────────────────────
46
+ log.blank();
47
+ log.info('Step 2/3 — Super Admin');
48
+ const adminName = await ensureValue(options.adminName, () => input(' Admin display name', 'Super Admin'), (v) => (v.trim().length > 0 ? null : 'Admin name is required'));
49
+ if (adminName === null)
50
+ return;
51
+ const adminEmail = await ensureValue(options.adminEmail, () => input(' Admin email'), (v) => (EMAIL_RE.test(v) ? null : 'Invalid email format'));
52
+ if (adminEmail === null)
53
+ return;
54
+ // Password: never echoed; min 8 chars (matches typical password policy).
55
+ // When supplied via --admin-password flag we trust it and skip the prompt,
56
+ // since CI/CD environments don't have a tty to echo through anyway.
57
+ const adminPassword = await ensureValue(options.adminPassword, () => passwordPrompt(' Admin password (min 8 chars, hidden)'), (v) => (v.length >= 8 ? null : 'Password must be at least 8 characters'));
58
+ if (adminPassword === null)
59
+ return;
60
+ // ── Step 3: Tenant ───────────────────────────────────────────────
61
+ log.blank();
62
+ log.info('Step 3/3 — Tenant');
63
+ const tenantMode = await ensureValue(options.tenantMode, () => select(' Tenant mode', [
64
+ { name: 'subdomain', message: 'subdomain — tenant1.example.com' },
65
+ { name: 'path', message: 'path — example.com/tenant1' },
66
+ ]), (v) => (ALLOWED_TENANT_MODES.has(v) ? null : 'Tenant mode must be "subdomain" or "path"'));
67
+ if (tenantMode === null)
68
+ return;
69
+ const tenantName = await ensureValue(options.tenantName, () => input(' Tenant display name', 'Main Organization'), (v) => (v.trim().length > 0 ? null : 'Tenant name is required'));
70
+ if (tenantName === null)
71
+ return;
72
+ // ── Confirm ──────────────────────────────────────────────────────
73
+ log.blank();
74
+ log.info('Summary:');
75
+ log.info(` Database: ${dbName} (gateway: ${gateway})`);
76
+ log.info(` Admin: ${adminEmail} — ${adminName}`);
77
+ log.info(` Tenant: ${tenantName} (mode: ${tenantMode})`);
78
+ log.info(` API: ${apiBase}/setup/install`);
79
+ log.blank();
80
+ if (options.yes !== true) {
81
+ const ok = await confirm('Proceed with installation?', true);
82
+ if (!ok) {
83
+ log.warn('Cancelled');
84
+ return;
85
+ }
86
+ }
87
+ // ── POST → backend ───────────────────────────────────────────────
88
+ const payload = {
89
+ db_name: dbName,
90
+ gateway,
91
+ admin_name: adminName,
92
+ admin_email: adminEmail,
93
+ admin_password: adminPassword,
94
+ tenant_mode: tenantMode,
95
+ tenant_name: tenantName,
96
+ };
97
+ const spin = spinner('Running installation (migrations + tenant + admin user)...').start();
98
+ let res;
99
+ try {
100
+ res = await fetch(`${apiBase}/setup/install`, {
101
+ method: 'POST',
102
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
103
+ body: JSON.stringify(payload),
104
+ // 5 min cap: core+addon migrations on a slow disk can run a couple
105
+ // of minutes; 30s default is far too tight.
106
+ signal: AbortSignal.timeout(5 * 60 * 1000),
107
+ });
108
+ }
109
+ catch (err) {
110
+ spin.fail('Request failed');
111
+ log.error(err instanceof Error ? err.message : String(err));
112
+ log.info(`Check the API is reachable: curl -i ${apiBase}/setup/status`);
113
+ return;
114
+ }
115
+ let body = {};
116
+ try {
117
+ body = (await res.json());
118
+ }
119
+ catch {
120
+ // non-JSON response (HTML, plain error)
121
+ spin.fail(`HTTP ${res.status} — non-JSON response`);
122
+ log.error('Server returned non-JSON. Check API logs for the full error.');
123
+ return;
124
+ }
125
+ if (!res.ok || body.success === false) {
126
+ spin.fail('Installation failed');
127
+ log.error(body.message ?? `HTTP ${res.status}`);
128
+ if (body.data !== undefined) {
129
+ log.info(`Detail: ${JSON.stringify(body.data)}`);
130
+ }
131
+ return;
132
+ }
133
+ spin.succeed('Installation complete');
134
+ const data = body.data ?? {};
135
+ log.blank();
136
+ log.success(`Database: ${String(data.database ?? dbName)}`);
137
+ log.success(`Tenant ID: ${String(data.tenant_id ?? 'n/a')}`);
138
+ log.success(`Admin user: ${String(data.user_id ?? 'n/a')} (${adminEmail})`);
139
+ const messages = Array.isArray(data.migration_messages) ? data.migration_messages : [];
140
+ if (messages.length > 0) {
141
+ log.info('Migrations:');
142
+ for (const m of messages)
143
+ log.info(` ${String(m).split('\n').join('\n ')}`);
144
+ }
145
+ log.blank();
146
+ log.info(`Login: ${apiBase}/auth/login`);
147
+ }
148
+ /**
149
+ * Either return the flag-provided value (after validating it) or fall
150
+ * back to the interactive prompt. Returns null on validation failure
151
+ * so the caller can short-circuit. Keeps the wizard symmetric between
152
+ * the flag-driven and prompt-driven paths.
153
+ */
154
+ async function ensureValue(flagValue, prompt, validate) {
155
+ if (flagValue !== undefined && flagValue !== '') {
156
+ const err = validate(flagValue);
157
+ if (err !== null) {
158
+ log.error(err);
159
+ return null;
160
+ }
161
+ return flagValue;
162
+ }
163
+ while (true) {
164
+ const v = await prompt();
165
+ const err = validate(v);
166
+ if (err === null)
167
+ return v;
168
+ log.warn(err);
169
+ }
170
+ }
171
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/install/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * ci login <token>
3
+ *
4
+ * Kaydeder: Docker Hub cisofttr PAT → ~/.config/vucore-cli/config.json
5
+ * Çalıştırır: docker login cisofttr --username cisofttr --password <token>
6
+ * ci setup otomatik olarak bu token'ı docker login'e uygular.
7
+ */
8
+ import { Command } from 'commander';
9
+ export declare function registerLoginCommand(program: Command): void;
10
+ /**
11
+ * ci setup öncesi çağrılır. Token kayıtlıysa docker login uygular, yoksa uyarır.
12
+ * Hata fırlatmaz — setup devam eder ama kullanıcı bilgilenir.
13
+ */
14
+ export declare function ensureDockerLogin(): void;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/login/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6B3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAoBxC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * ci login <token>
3
+ *
4
+ * Kaydeder: Docker Hub cisofttr PAT → ~/.config/vucore-cli/config.json
5
+ * Çalıştırır: docker login cisofttr --username cisofttr --password <token>
6
+ * ci setup otomatik olarak bu token'ı docker login'e uygular.
7
+ */
8
+ import { execSync } from 'child_process';
9
+ import chalk from 'chalk';
10
+ import { config } from '../../lib/config.js';
11
+ import { log } from '../../lib/logger.js';
12
+ const REGISTRY_USER = 'cisofttr';
13
+ const DOCKER_HUB = 'registry-1.docker.io';
14
+ export function registerLoginCommand(program) {
15
+ program
16
+ .command('login <token>')
17
+ .description('Docker Hub cisofttr erişim token\'ını kaydet ve docker login uygula')
18
+ .action(async (token) => {
19
+ if (!token || token.trim().length === 0) {
20
+ console.error(chalk.red('❌ Token boş olamaz.'));
21
+ process.exit(1);
22
+ }
23
+ // Config'e kaydet
24
+ config.set('dockerHubToken', token.trim());
25
+ log.info(`Token kaydedildi (${config.path})`);
26
+ // docker login uygula
27
+ console.log(chalk.cyan(`\n🔐 docker login ${DOCKER_HUB} (${REGISTRY_USER}) uygulanıyor...`));
28
+ try {
29
+ execSync(`echo ${JSON.stringify(token.trim())} | docker login ${DOCKER_HUB} --username ${REGISTRY_USER} --password-stdin`, { stdio: 'inherit' });
30
+ console.log(chalk.green(`\n✅ Login başarılı — artık 'ci setup' otomatik olarak özel imajları çekebilir.`));
31
+ }
32
+ catch {
33
+ console.error(chalk.red('\n❌ docker login başarısız. Token geçerli mi?'));
34
+ // Token'ı temizle (geçersiz kayıt kalmasın)
35
+ config.delete('dockerHubToken');
36
+ process.exit(1);
37
+ }
38
+ });
39
+ }
40
+ /**
41
+ * ci setup öncesi çağrılır. Token kayıtlıysa docker login uygular, yoksa uyarır.
42
+ * Hata fırlatmaz — setup devam eder ama kullanıcı bilgilenir.
43
+ */
44
+ export function ensureDockerLogin() {
45
+ const token = config.get('dockerHubToken');
46
+ if (!token) {
47
+ console.warn(chalk.yellow(`⚠️ Docker Hub token bulunamadı. Özel cicore imajlarını çekmek için önce 'ci login <token>' çalıştır.`));
48
+ return;
49
+ }
50
+ try {
51
+ execSync(`echo ${JSON.stringify(token)} | docker login ${DOCKER_HUB} --username ${REGISTRY_USER} --password-stdin`, { stdio: 'pipe' });
52
+ log.info(`Docker Hub ${REGISTRY_USER} oturumu aktif`);
53
+ }
54
+ catch {
55
+ console.warn(chalk.yellow(`⚠️ Kayıtlı token ile docker login başarısız. 'ci login <yeni-token>' ile yenile.`));
56
+ }
57
+ }
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/login/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,aAAa,GAAG,UAAU,CAAC;AACjC,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAE1C,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,kBAAkB;QAClB,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QAE9C,sBAAsB;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,UAAU,KAAK,aAAa,kBAAkB,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC;YACH,QAAQ,CACN,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,mBAAmB,UAAU,eAAe,aAAa,mBAAmB,EAChH,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC,CAAC;QAC7G,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;YAC1E,4CAA4C;YAC5C,MAAM,CAAC,MAAM,CAAC,gBAAuB,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAuB,CAAuB,CAAC;IACxE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CACvB,uGAAuG,CACxG,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,CACN,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,UAAU,eAAe,aAAa,mBAAmB,EACzG,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,cAAc,aAAa,gBAAgB,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CACvB,mFAAmF,CACpF,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CiCore CLI - Nginx Domain Management Commands
3
+ *
4
+ * Manage nginx configuration for multi-domain setup:
5
+ * - Add/remove domains
6
+ * - Upload SSL certificates
7
+ * - Reload nginx
8
+ */
9
+ import { Command } from 'commander';
10
+ export declare function registerNginxCommands(program: Command): void;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/nginx/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0G5D"}