@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,580 @@
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 { log, spinner, formatTable } from '../../lib/logger.js';
10
+ import { confirm, select } from '../../lib/prompts.js';
11
+ import { exec } from '../../lib/shell.js';
12
+ import { getSSHHost, listSSHHosts, buildSSHCommand } from '../../lib/ssh-config.js';
13
+ import { getCloudflareToken, createOriginCertificate, setupDomainForVuCore } from '../../lib/cloudflare.js';
14
+ import { listDomainsFromConfig, addDomainToConfig, removeDomainFromConfig, validateNginxConfig, } from '../../lib/nginx-config.js';
15
+ export function registerNginxCommands(program) {
16
+ const nginx = program
17
+ .command('nginx')
18
+ .description('Nginx domain and SSL management');
19
+ // vu nginx domain:list
20
+ nginx
21
+ .command('domain:list')
22
+ .alias('domains')
23
+ .description('List configured domains')
24
+ .option('-h, --host <host>', 'SSH host name')
25
+ .action(async (options) => {
26
+ await listDomains(options);
27
+ });
28
+ // vu nginx domain:add
29
+ nginx
30
+ .command('domain:add')
31
+ .description('Add a new domain to nginx config')
32
+ .argument('<domain>', 'Domain name (e.g., example.com)')
33
+ .option('-h, --host <host>', 'SSH host name')
34
+ .option('-c, --core <core>', 'Core name', 'core1')
35
+ .option('--ssl-cert <name>', 'SSL certificate name')
36
+ .option('--use-cloudflare', 'Create SSL via Cloudflare')
37
+ .action(async (domain, options) => {
38
+ await addDomain(domain, options);
39
+ });
40
+ // vu nginx domain:remove
41
+ nginx
42
+ .command('domain:remove')
43
+ .description('Remove a domain from nginx config')
44
+ .argument('<domain>', 'Domain name')
45
+ .option('-h, --host <host>', 'SSH host name')
46
+ .action(async (domain, options) => {
47
+ await removeDomain(domain, options);
48
+ });
49
+ // vu nginx ssl:upload
50
+ nginx
51
+ .command('ssl:upload')
52
+ .description('Upload SSL certificate to server')
53
+ .argument('<domain>', 'Domain name')
54
+ .option('-h, --host <host>', 'SSH host name')
55
+ .option('--cert <path>', 'Path to certificate file')
56
+ .option('--key <path>', 'Path to private key file')
57
+ .option('--use-cloudflare', 'Generate via Cloudflare Origin Certificate')
58
+ .action(async (domain, options) => {
59
+ await uploadSSL(domain, options);
60
+ });
61
+ // vu nginx ssl:list
62
+ nginx
63
+ .command('ssl:list')
64
+ .description('List SSL certificates on server')
65
+ .option('-h, --host <host>', 'SSH host name')
66
+ .action(async (options) => {
67
+ await listSSLCerts(options);
68
+ });
69
+ // vu nginx reload
70
+ nginx
71
+ .command('reload')
72
+ .description('Reload nginx configuration')
73
+ .option('-h, --host <host>', 'SSH host name')
74
+ .action(async (options) => {
75
+ await reloadNginx(options);
76
+ });
77
+ // vu nginx test
78
+ nginx
79
+ .command('test')
80
+ .description('Test nginx configuration')
81
+ .option('-h, --host <host>', 'SSH host name')
82
+ .action(async (options) => {
83
+ await testNginx(options);
84
+ });
85
+ // vu nginx config:show
86
+ nginx
87
+ .command('config:show')
88
+ .description('Show current nginx config')
89
+ .option('-h, --host <host>', 'SSH host name')
90
+ .action(async (options) => {
91
+ await showConfig(options);
92
+ });
93
+ // vu nginx config:backup
94
+ nginx
95
+ .command('config:backup')
96
+ .description('Backup nginx config')
97
+ .option('-h, --host <host>', 'SSH host name')
98
+ .action(async (options) => {
99
+ await backupConfig(options);
100
+ });
101
+ // vu nginx setup
102
+ nginx
103
+ .command('setup')
104
+ .description('Full domain setup (DNS + SSL + Nginx)')
105
+ .argument('<domain>', 'Domain name')
106
+ .option('-h, --host <host>', 'SSH host name')
107
+ .option('-c, --core <core>', 'Core name', 'core1')
108
+ .action(async (domain, options) => {
109
+ await fullDomainSetup(domain, options);
110
+ });
111
+ }
112
+ // ============================================
113
+ // HELPERS
114
+ // ============================================
115
+ async function getHost(hostName) {
116
+ if (hostName) {
117
+ return await getSSHHost(hostName);
118
+ }
119
+ const hosts = await listSSHHosts();
120
+ if (hosts.length === 0) {
121
+ log.error('No SSH hosts found in ~/.ssh/config');
122
+ return null;
123
+ }
124
+ if (hosts.length === 1) {
125
+ return hosts[0];
126
+ }
127
+ const selected = await select('Select SSH host:', hosts.map(h => ({ name: h.name, message: `${h.name} (${h.hostname})` })));
128
+ return await getSSHHost(selected);
129
+ }
130
+ async function runSSH(host, command) {
131
+ const args = buildSSHCommand(host, command);
132
+ return await exec('ssh', args, { silent: true });
133
+ }
134
+ async function getNginxConfig(host) {
135
+ const result = await runSSH(host, 'cat /home/services/nginx/conf.d/vucore-global-router.conf');
136
+ if (!result.success) {
137
+ return null;
138
+ }
139
+ return result.stdout;
140
+ }
141
+ async function saveNginxConfig(host, config) {
142
+ // Escape for bash
143
+ const escapedConfig = config.replace(/'/g, "'\\''");
144
+ const result = await runSSH(host, `cat > /home/services/nginx/conf.d/vucore-global-router.conf << 'NGINX_EOF'
145
+ ${config}
146
+ NGINX_EOF`);
147
+ return result.success;
148
+ }
149
+ // ============================================
150
+ // LIST DOMAINS
151
+ // ============================================
152
+ async function listDomains(options) {
153
+ log.title('📋 Configured Domains');
154
+ log.blank();
155
+ const host = await getHost(options.host);
156
+ if (!host)
157
+ return;
158
+ const configSpinner = spinner('Fetching nginx config...').start();
159
+ const config = await getNginxConfig(host);
160
+ if (!config) {
161
+ configSpinner.fail('Failed to read nginx config');
162
+ return;
163
+ }
164
+ configSpinner.stop();
165
+ const domains = listDomainsFromConfig(config);
166
+ if (domains.length === 0) {
167
+ log.info('No domains configured');
168
+ return;
169
+ }
170
+ formatTable(['Domain', 'Core', 'SSL'], domains.map(d => [d.domain, d.core, '✅']));
171
+ }
172
+ // ============================================
173
+ // ADD DOMAIN
174
+ // ============================================
175
+ async function addDomain(domain, options) {
176
+ log.title(`➕ Add Domain: ${domain}`);
177
+ log.blank();
178
+ const host = await getHost(options.host);
179
+ if (!host)
180
+ return;
181
+ const coreName = options.core || 'core1';
182
+ const useCloudflare = options.useCloudflare || await getCloudflareToken();
183
+ log.kv('Domain', domain);
184
+ log.kv('Core', coreName);
185
+ log.kv('Server', `${host.name} (${host.hostname})`);
186
+ log.blank();
187
+ // Step 1: Get current config
188
+ const configSpinner = spinner('Reading current nginx config...').start();
189
+ const currentConfig = await getNginxConfig(host);
190
+ if (!currentConfig) {
191
+ configSpinner.fail('Failed to read nginx config');
192
+ return;
193
+ }
194
+ // Check if domain already exists
195
+ const existingDomains = listDomainsFromConfig(currentConfig);
196
+ if (existingDomains.some(d => d.domain === domain)) {
197
+ configSpinner.fail(`Domain ${domain} already configured`);
198
+ return;
199
+ }
200
+ configSpinner.succeed('Current config loaded');
201
+ // Step 2: Setup SSL
202
+ let sslCertName = options.sslCert || domain.split('.')[0];
203
+ if (useCloudflare) {
204
+ const cfSpinner = spinner('Creating Cloudflare Origin Certificate...').start();
205
+ const cfToken = await getCloudflareToken();
206
+ if (!cfToken) {
207
+ cfSpinner.warn('Cloudflare token not configured');
208
+ }
209
+ else {
210
+ // Setup DNS
211
+ cfSpinner.text = 'Setting up DNS records...';
212
+ const cfResult = await setupDomainForVuCore(domain, host.hostname, {
213
+ createWildcard: true,
214
+ createApiSubdomain: true,
215
+ sslMode: 'strict',
216
+ });
217
+ if (cfResult.success && cfResult.certificate) {
218
+ cfSpinner.text = 'Uploading certificate...';
219
+ // Upload certificate
220
+ await runSSH(host, `mkdir -p /home/services/nginx/ssl`);
221
+ await runSSH(host, `cat > /home/services/nginx/ssl/${sslCertName}.crt << 'CERT_EOF'
222
+ ${cfResult.certificate.certificate}
223
+ CERT_EOF`);
224
+ await runSSH(host, `cat > /home/services/nginx/ssl/${sslCertName}.key << 'KEY_EOF'
225
+ ${cfResult.certificate.private_key}
226
+ KEY_EOF`);
227
+ await runSSH(host, `chmod 600 /home/services/nginx/ssl/${sslCertName}.*`);
228
+ cfSpinner.succeed('Cloudflare SSL configured');
229
+ log.kv('Certificate', `/home/services/nginx/ssl/${sslCertName}.crt`);
230
+ }
231
+ else {
232
+ cfSpinner.fail('Cloudflare setup failed');
233
+ log.error(cfResult.error || 'Unknown error');
234
+ return;
235
+ }
236
+ }
237
+ }
238
+ // Step 3: Update nginx config
239
+ const updateSpinner = spinner('Updating nginx config...').start();
240
+ const newConfig = addDomainToConfig(currentConfig, domain, coreName, sslCertName);
241
+ // Validate
242
+ const validation = validateNginxConfig(newConfig);
243
+ if (!validation.valid) {
244
+ updateSpinner.fail('Config validation failed');
245
+ validation.errors.forEach(e => log.error(e));
246
+ return;
247
+ }
248
+ // Backup current config
249
+ await runSSH(host, 'cp /home/services/nginx/conf.d/vucore-global-router.conf /home/services/nginx/conf.d/vucore-global-router.conf.bak');
250
+ // Save new config
251
+ const saved = await saveNginxConfig(host, newConfig);
252
+ if (!saved) {
253
+ updateSpinner.fail('Failed to save config');
254
+ return;
255
+ }
256
+ updateSpinner.succeed('Nginx config updated');
257
+ // Step 4: Test and reload nginx
258
+ const reloadSpinner = spinner('Testing and reloading nginx...').start();
259
+ const testResult = await runSSH(host, 'docker exec cicore_nginx nginx -t');
260
+ if (!testResult.success) {
261
+ reloadSpinner.fail('Nginx config test failed');
262
+ log.error(testResult.stderr);
263
+ // Restore backup
264
+ await runSSH(host, 'cp /home/services/nginx/conf.d/vucore-global-router.conf.bak /home/services/nginx/conf.d/vucore-global-router.conf');
265
+ return;
266
+ }
267
+ await runSSH(host, 'docker exec cicore_nginx nginx -s reload');
268
+ reloadSpinner.succeed('Nginx reloaded');
269
+ // Summary
270
+ log.blank();
271
+ log.box(`✅ Domain Added: ${domain}`, [
272
+ `Core: ${coreName}`,
273
+ `SSL: ${sslCertName}.crt`,
274
+ `Server: ${host.name}`,
275
+ ]);
276
+ }
277
+ // ============================================
278
+ // REMOVE DOMAIN
279
+ // ============================================
280
+ async function removeDomain(domain, options) {
281
+ log.title(`➖ Remove Domain: ${domain}`);
282
+ log.blank();
283
+ const host = await getHost(options.host);
284
+ if (!host)
285
+ return;
286
+ // Confirm
287
+ const confirmed = await confirm(`Remove domain ${domain} from nginx config?`);
288
+ if (!confirmed) {
289
+ log.info('Cancelled');
290
+ return;
291
+ }
292
+ // Get current config
293
+ const configSpinner = spinner('Reading nginx config...').start();
294
+ const currentConfig = await getNginxConfig(host);
295
+ if (!currentConfig) {
296
+ configSpinner.fail('Failed to read nginx config');
297
+ return;
298
+ }
299
+ // Check if domain exists
300
+ const existingDomains = listDomainsFromConfig(currentConfig);
301
+ if (!existingDomains.some(d => d.domain === domain)) {
302
+ configSpinner.fail(`Domain ${domain} not found in config`);
303
+ return;
304
+ }
305
+ // Don't allow removing the last domain
306
+ if (existingDomains.length === 1) {
307
+ configSpinner.fail('Cannot remove the last domain');
308
+ return;
309
+ }
310
+ configSpinner.succeed('Config loaded');
311
+ // Update config
312
+ const updateSpinner = spinner('Removing domain from config...').start();
313
+ const newConfig = removeDomainFromConfig(currentConfig, domain);
314
+ // Backup and save
315
+ await runSSH(host, 'cp /home/services/nginx/conf.d/vucore-global-router.conf /home/services/nginx/conf.d/vucore-global-router.conf.bak');
316
+ const saved = await saveNginxConfig(host, newConfig);
317
+ if (!saved) {
318
+ updateSpinner.fail('Failed to save config');
319
+ return;
320
+ }
321
+ updateSpinner.succeed('Domain removed');
322
+ // Test and reload
323
+ const reloadSpinner = spinner('Reloading nginx...').start();
324
+ const testResult = await runSSH(host, 'docker exec cicore_nginx nginx -t');
325
+ if (!testResult.success) {
326
+ reloadSpinner.fail('Nginx config test failed - restoring backup');
327
+ await runSSH(host, 'cp /home/services/nginx/conf.d/vucore-global-router.conf.bak /home/services/nginx/conf.d/vucore-global-router.conf');
328
+ return;
329
+ }
330
+ await runSSH(host, 'docker exec cicore_nginx nginx -s reload');
331
+ reloadSpinner.succeed('Nginx reloaded');
332
+ log.blank();
333
+ log.success(`Domain ${domain} removed`);
334
+ }
335
+ // ============================================
336
+ // UPLOAD SSL
337
+ // ============================================
338
+ async function uploadSSL(domain, options) {
339
+ log.title(`🔒 Upload SSL: ${domain}`);
340
+ log.blank();
341
+ const host = await getHost(options.host);
342
+ if (!host)
343
+ return;
344
+ const certName = domain.split('.')[0];
345
+ if (options.useCloudflare) {
346
+ // Generate via Cloudflare
347
+ const cfSpinner = spinner('Creating Cloudflare Origin Certificate...').start();
348
+ const cfToken = await getCloudflareToken();
349
+ if (!cfToken) {
350
+ cfSpinner.fail('Cloudflare token not configured. Run: vu cloudflare auth');
351
+ return;
352
+ }
353
+ const hostnames = [domain, `*.${domain}`];
354
+ const cert = await createOriginCertificate(hostnames);
355
+ if (!cert) {
356
+ cfSpinner.fail('Failed to create certificate');
357
+ return;
358
+ }
359
+ cfSpinner.text = 'Uploading to server...';
360
+ await runSSH(host, `mkdir -p /home/services/nginx/ssl`);
361
+ await runSSH(host, `cat > /home/services/nginx/ssl/${certName}.crt << 'CERT_EOF'
362
+ ${cert.certificate}
363
+ CERT_EOF`);
364
+ await runSSH(host, `cat > /home/services/nginx/ssl/${certName}.key << 'KEY_EOF'
365
+ ${cert.private_key}
366
+ KEY_EOF`);
367
+ await runSSH(host, `chmod 600 /home/services/nginx/ssl/${certName}.*`);
368
+ cfSpinner.succeed('SSL certificate uploaded');
369
+ log.kv('Certificate', `/home/services/nginx/ssl/${certName}.crt`);
370
+ log.kv('Private Key', `/home/services/nginx/ssl/${certName}.key`);
371
+ log.kv('Expires', cert.expires_on);
372
+ }
373
+ else if (options.cert && options.key) {
374
+ // Upload from local files
375
+ const uploadSpinner = spinner('Uploading certificate files...').start();
376
+ // Read local files and upload
377
+ const fs = await import('fs-extra');
378
+ const certContent = await fs.default.readFile(options.cert, 'utf-8');
379
+ const keyContent = await fs.default.readFile(options.key, 'utf-8');
380
+ await runSSH(host, `mkdir -p /home/services/nginx/ssl`);
381
+ await runSSH(host, `cat > /home/services/nginx/ssl/${certName}.crt << 'CERT_EOF'
382
+ ${certContent}
383
+ CERT_EOF`);
384
+ await runSSH(host, `cat > /home/services/nginx/ssl/${certName}.key << 'KEY_EOF'
385
+ ${keyContent}
386
+ KEY_EOF`);
387
+ await runSSH(host, `chmod 600 /home/services/nginx/ssl/${certName}.*`);
388
+ uploadSpinner.succeed('SSL certificate uploaded');
389
+ }
390
+ else {
391
+ log.error('Specify --use-cloudflare or --cert and --key options');
392
+ return;
393
+ }
394
+ // Offer to reload nginx
395
+ const reload = await confirm('Reload nginx to apply changes?');
396
+ if (reload) {
397
+ await runSSH(host, 'docker exec cicore_nginx nginx -s reload');
398
+ log.success('Nginx reloaded');
399
+ }
400
+ }
401
+ // ============================================
402
+ // LIST SSL CERTS
403
+ // ============================================
404
+ async function listSSLCerts(options) {
405
+ log.title('🔒 SSL Certificates');
406
+ log.blank();
407
+ const host = await getHost(options.host);
408
+ if (!host)
409
+ return;
410
+ const listSpinner = spinner('Listing certificates...').start();
411
+ const result = await runSSH(host, 'ls -la /home/services/nginx/ssl/ 2>/dev/null || echo "No certificates found"');
412
+ listSpinner.stop();
413
+ if (result.stdout.includes('No certificates found')) {
414
+ log.info('No SSL certificates found');
415
+ return;
416
+ }
417
+ console.log(result.stdout);
418
+ }
419
+ // ============================================
420
+ // RELOAD NGINX
421
+ // ============================================
422
+ async function reloadNginx(options) {
423
+ const host = await getHost(options.host);
424
+ if (!host)
425
+ return;
426
+ const reloadSpinner = spinner('Reloading nginx...').start();
427
+ // Test first
428
+ const testResult = await runSSH(host, 'docker exec cicore_nginx nginx -t');
429
+ if (!testResult.success) {
430
+ reloadSpinner.fail('Nginx config test failed');
431
+ log.error(testResult.stderr);
432
+ return;
433
+ }
434
+ // Reload
435
+ const reloadResult = await runSSH(host, 'docker exec cicore_nginx nginx -s reload');
436
+ if (reloadResult.success) {
437
+ reloadSpinner.succeed('Nginx reloaded');
438
+ }
439
+ else {
440
+ reloadSpinner.fail('Reload failed');
441
+ log.error(reloadResult.stderr);
442
+ }
443
+ }
444
+ // ============================================
445
+ // TEST NGINX
446
+ // ============================================
447
+ async function testNginx(options) {
448
+ const host = await getHost(options.host);
449
+ if (!host)
450
+ return;
451
+ const testSpinner = spinner('Testing nginx config...').start();
452
+ const result = await runSSH(host, 'docker exec cicore_nginx nginx -t');
453
+ if (result.success) {
454
+ testSpinner.succeed('Nginx config is valid');
455
+ }
456
+ else {
457
+ testSpinner.fail('Nginx config has errors');
458
+ console.log(result.stderr);
459
+ }
460
+ }
461
+ // ============================================
462
+ // SHOW CONFIG
463
+ // ============================================
464
+ async function showConfig(options) {
465
+ const host = await getHost(options.host);
466
+ if (!host)
467
+ return;
468
+ const config = await getNginxConfig(host);
469
+ if (!config) {
470
+ log.error('Failed to read nginx config');
471
+ return;
472
+ }
473
+ console.log(config);
474
+ }
475
+ // ============================================
476
+ // BACKUP CONFIG
477
+ // ============================================
478
+ async function backupConfig(options) {
479
+ const host = await getHost(options.host);
480
+ if (!host)
481
+ return;
482
+ const backupSpinner = spinner('Creating backup...').start();
483
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
484
+ const backupPath = `/home/services/nginx/conf.d/vucore-global-router.conf.backup-${timestamp}`;
485
+ const result = await runSSH(host, `cp /home/services/nginx/conf.d/vucore-global-router.conf ${backupPath}`);
486
+ if (result.success) {
487
+ backupSpinner.succeed(`Backup created: ${backupPath}`);
488
+ }
489
+ else {
490
+ backupSpinner.fail('Backup failed');
491
+ }
492
+ }
493
+ // ============================================
494
+ // FULL DOMAIN SETUP
495
+ // ============================================
496
+ async function fullDomainSetup(domain, options) {
497
+ log.title(`🚀 Full Domain Setup: ${domain}`);
498
+ log.blank();
499
+ const host = await getHost(options.host);
500
+ if (!host)
501
+ return;
502
+ const coreName = options.core || 'core1';
503
+ log.kv('Domain', domain);
504
+ log.kv('Core', coreName);
505
+ log.kv('Server', `${host.name} (${host.hostname})`);
506
+ log.blank();
507
+ // Step 1: Cloudflare DNS + SSL
508
+ const cfToken = await getCloudflareToken();
509
+ if (!cfToken) {
510
+ log.error('Cloudflare token required. Run: vu cloudflare auth');
511
+ return;
512
+ }
513
+ const cfSpinner = spinner('Setting up Cloudflare DNS and SSL...').start();
514
+ const cfResult = await setupDomainForVuCore(domain, host.hostname, {
515
+ createWildcard: true,
516
+ createApiSubdomain: true,
517
+ sslMode: 'strict',
518
+ });
519
+ if (!cfResult.success) {
520
+ cfSpinner.fail('Cloudflare setup failed');
521
+ log.error(cfResult.error || 'Unknown error');
522
+ return;
523
+ }
524
+ cfSpinner.succeed('Cloudflare DNS configured');
525
+ log.kv('DNS Records', `${cfResult.dnsRecords?.length || 0} created`);
526
+ // Step 2: Upload SSL certificate
527
+ if (cfResult.certificate) {
528
+ const sslSpinner = spinner('Uploading SSL certificate...').start();
529
+ const certName = domain.split('.')[0];
530
+ await runSSH(host, `mkdir -p /home/services/nginx/ssl`);
531
+ await runSSH(host, `cat > /home/services/nginx/ssl/${certName}.crt << 'CERT_EOF'
532
+ ${cfResult.certificate.certificate}
533
+ CERT_EOF`);
534
+ await runSSH(host, `cat > /home/services/nginx/ssl/${certName}.key << 'KEY_EOF'
535
+ ${cfResult.certificate.private_key}
536
+ KEY_EOF`);
537
+ await runSSH(host, `chmod 600 /home/services/nginx/ssl/${certName}.*`);
538
+ sslSpinner.succeed('SSL certificate uploaded');
539
+ }
540
+ // Step 3: Update nginx config
541
+ const nginxSpinner = spinner('Updating nginx config...').start();
542
+ const currentConfig = await getNginxConfig(host);
543
+ if (!currentConfig) {
544
+ nginxSpinner.fail('Failed to read nginx config');
545
+ return;
546
+ }
547
+ const certName = domain.split('.')[0];
548
+ const newConfig = addDomainToConfig(currentConfig, domain, coreName, certName);
549
+ // Backup
550
+ await runSSH(host, 'cp /home/services/nginx/conf.d/vucore-global-router.conf /home/services/nginx/conf.d/vucore-global-router.conf.bak');
551
+ // Save
552
+ await saveNginxConfig(host, newConfig);
553
+ nginxSpinner.succeed('Nginx config updated');
554
+ // Step 4: Test and reload
555
+ const reloadSpinner = spinner('Testing and reloading nginx...').start();
556
+ const testResult = await runSSH(host, 'docker exec cicore_nginx nginx -t');
557
+ if (!testResult.success) {
558
+ reloadSpinner.fail('Nginx test failed - restoring backup');
559
+ await runSSH(host, 'cp /home/services/nginx/conf.d/vucore-global-router.conf.bak /home/services/nginx/conf.d/vucore-global-router.conf');
560
+ log.error(testResult.stderr);
561
+ return;
562
+ }
563
+ await runSSH(host, 'docker exec cicore_nginx nginx -s reload');
564
+ reloadSpinner.succeed('Nginx reloaded');
565
+ // Summary
566
+ log.blank();
567
+ log.box(`✅ Domain Setup Complete: ${domain}`, [
568
+ `Core: ${coreName}`,
569
+ `DNS: Cloudflare (${cfResult.dnsRecords?.length || 0} records)`,
570
+ `SSL: Origin Certificate (15 years)`,
571
+ `Nginx: Configured and reloaded`,
572
+ ]);
573
+ log.blank();
574
+ log.info('Your domain is now accessible at:');
575
+ log.item(`https://${domain}`);
576
+ log.item(`https://www.${domain}`);
577
+ log.item(`https://api.${domain}`);
578
+ log.item(`https://*.${domain} (tenant subdomains)`);
579
+ }
580
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/nginx/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * ci server bootstrap — sıfır-sunucu → boş-cicore
3
+ *
4
+ * Adımlar:
5
+ * 1. root/sudo kontrolü
6
+ * 2. apt-get update + temel bağımlılıklar
7
+ * 3. Docker yok → get.docker.com ile kur + systemctl enable/start
8
+ * 4. /opt/cicore dizin iskeleti oluştur
9
+ * 5. docker-compose.yml + .env yaz (secret otomatik üretilir)
10
+ * 6. docker compose pull (image-only; kaynak kodu ASLA inmez)
11
+ * 7. docker compose up -d
12
+ * 8. IP:port healthcheck loop (120s / 5s aralık)
13
+ *
14
+ * Sonraki adım: tarayıcıdan /setup/install wizard'ı veya `ci install`
15
+ */
16
+ export interface BootstrapOptions {
17
+ dir?: string;
18
+ tag?: string;
19
+ registry?: string;
20
+ port?: string;
21
+ skipDockerInstall?: boolean;
22
+ yes?: boolean;
23
+ }
24
+ export declare function runBootstrap(options: BootstrapOptions): Promise<void>;
25
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/commands/server/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgEH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiN3E"}