cyberia 2.8.885

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 (525) hide show
  1. package/.dockerignore +15 -0
  2. package/.env.development +45 -0
  3. package/.env.production +50 -0
  4. package/.env.test +45 -0
  5. package/.github/workflows/engine-cyberia.cd.yml +31 -0
  6. package/.github/workflows/engine-cyberia.ci.yml +60 -0
  7. package/.github/workflows/ghpkg.ci.yml +87 -0
  8. package/.github/workflows/npmpkg.ci.yml +72 -0
  9. package/.github/workflows/publish.ci.yml +84 -0
  10. package/.github/workflows/publish.cyberia.ci.yml +84 -0
  11. package/.github/workflows/pwa-microservices-template-page.cd.yml +72 -0
  12. package/.github/workflows/pwa-microservices-template-test.ci.yml +33 -0
  13. package/.github/workflows/release.cd.yml +37 -0
  14. package/.nycrc +9 -0
  15. package/.prettierignore +13 -0
  16. package/.prettierrc +9 -0
  17. package/.vscode/extensions.json +51 -0
  18. package/.vscode/settings.json +87 -0
  19. package/AUTHORS.md +21 -0
  20. package/CHANGELOG.md +205 -0
  21. package/Dockerfile +28 -0
  22. package/LICENSE +21 -0
  23. package/README.md +85 -0
  24. package/bin/build.js +209 -0
  25. package/bin/cron.js +47 -0
  26. package/bin/cyberia.js +145 -0
  27. package/bin/db.js +199 -0
  28. package/bin/deploy.js +1293 -0
  29. package/bin/file.js +197 -0
  30. package/bin/hwt.js +49 -0
  31. package/bin/index.js +145 -0
  32. package/bin/ssl.js +63 -0
  33. package/bin/util.js +80 -0
  34. package/bin/vs.js +74 -0
  35. package/cli.md +714 -0
  36. package/conf.js +204 -0
  37. package/deployment.yaml +138 -0
  38. package/jsconfig.json +7 -0
  39. package/jsdoc.json +32 -0
  40. package/manifests/deployment/adminer/deployment.yaml +32 -0
  41. package/manifests/deployment/adminer/kustomization.yaml +7 -0
  42. package/manifests/deployment/adminer/service.yaml +13 -0
  43. package/manifests/deployment/dd-default-development/deployment.yaml +167 -0
  44. package/manifests/deployment/dd-default-development/proxy.yaml +46 -0
  45. package/manifests/deployment/dd-test-development/deployment.yaml +174 -0
  46. package/manifests/deployment/dd-test-development/proxy.yaml +51 -0
  47. package/manifests/deployment/fastapi/backend-deployment.yml +120 -0
  48. package/manifests/deployment/fastapi/backend-service.yml +19 -0
  49. package/manifests/deployment/fastapi/frontend-deployment.yml +54 -0
  50. package/manifests/deployment/fastapi/frontend-service.yml +15 -0
  51. package/manifests/deployment/fastapi/initial_data.sh +56 -0
  52. package/manifests/deployment/kafka/deployment.yaml +69 -0
  53. package/manifests/deployment/mongo-express/deployment.yaml +60 -0
  54. package/manifests/deployment/phpmyadmin/deployment.yaml +54 -0
  55. package/manifests/deployment/spark/spark-pi-py.yaml +21 -0
  56. package/manifests/deployment/tensorflow/tf-gpu-test.yaml +65 -0
  57. package/manifests/envoy-service-nodeport.yaml +23 -0
  58. package/manifests/grafana/deployment.yaml +57 -0
  59. package/manifests/grafana/kustomization.yaml +7 -0
  60. package/manifests/grafana/pvc.yaml +12 -0
  61. package/manifests/grafana/service.yaml +14 -0
  62. package/manifests/kind-config-dev.yaml +12 -0
  63. package/manifests/kind-config.yaml +12 -0
  64. package/manifests/kubeadm-calico-config.yaml +119 -0
  65. package/manifests/kubelet-config.yaml +65 -0
  66. package/manifests/letsencrypt-prod.yaml +15 -0
  67. package/manifests/lxd/lxd-admin-profile.yaml +17 -0
  68. package/manifests/lxd/lxd-preseed.yaml +30 -0
  69. package/manifests/lxd/underpost-setup.sh +163 -0
  70. package/manifests/mariadb/config.yaml +10 -0
  71. package/manifests/mariadb/kustomization.yaml +9 -0
  72. package/manifests/mariadb/pv.yaml +12 -0
  73. package/manifests/mariadb/pvc.yaml +10 -0
  74. package/manifests/mariadb/secret.yaml +8 -0
  75. package/manifests/mariadb/service.yaml +10 -0
  76. package/manifests/mariadb/statefulset.yaml +56 -0
  77. package/manifests/mariadb/storage-class.yaml +10 -0
  78. package/manifests/mongodb/backup-access.yaml +16 -0
  79. package/manifests/mongodb/backup-cronjob.yaml +42 -0
  80. package/manifests/mongodb/backup-pv-pvc.yaml +22 -0
  81. package/manifests/mongodb/configmap.yaml +26 -0
  82. package/manifests/mongodb/headless-service.yaml +10 -0
  83. package/manifests/mongodb/kustomization.yaml +11 -0
  84. package/manifests/mongodb/pv-pvc.yaml +23 -0
  85. package/manifests/mongodb/statefulset.yaml +126 -0
  86. package/manifests/mongodb/storage-class.yaml +9 -0
  87. package/manifests/mongodb-4.4/kustomization.yaml +7 -0
  88. package/manifests/mongodb-4.4/pv-pvc.yaml +23 -0
  89. package/manifests/mongodb-4.4/service-deployment.yaml +63 -0
  90. package/manifests/mysql/kustomization.yaml +7 -0
  91. package/manifests/mysql/pv-pvc.yaml +27 -0
  92. package/manifests/mysql/statefulset.yaml +55 -0
  93. package/manifests/postgresql/configmap.yaml +9 -0
  94. package/manifests/postgresql/kustomization.yaml +10 -0
  95. package/manifests/postgresql/pv.yaml +15 -0
  96. package/manifests/postgresql/pvc.yaml +13 -0
  97. package/manifests/postgresql/service.yaml +10 -0
  98. package/manifests/postgresql/statefulset.yaml +37 -0
  99. package/manifests/prometheus/deployment.yaml +82 -0
  100. package/manifests/valkey/kustomization.yaml +7 -0
  101. package/manifests/valkey/service.yaml +11 -0
  102. package/manifests/valkey/statefulset.yaml +38 -0
  103. package/nodemon.json +6 -0
  104. package/package.json +118 -0
  105. package/proxy.yaml +35 -0
  106. package/scripts/device-scan.sh +43 -0
  107. package/scripts/gpu-diag.sh +19 -0
  108. package/scripts/maas-setup.sh +120 -0
  109. package/scripts/nat-iptables.sh +26 -0
  110. package/scripts/nvim.sh +91 -0
  111. package/scripts/snap-clean.sh +26 -0
  112. package/scripts/ssh-cluster-info.sh +14 -0
  113. package/scripts/ssl.sh +164 -0
  114. package/src/api/blockchain/blockchain.controller.js +51 -0
  115. package/src/api/blockchain/blockchain.model.js +90 -0
  116. package/src/api/blockchain/blockchain.router.js +21 -0
  117. package/src/api/blockchain/blockchain.service.js +24 -0
  118. package/src/api/core/core.controller.js +69 -0
  119. package/src/api/core/core.model.js +11 -0
  120. package/src/api/core/core.router.js +24 -0
  121. package/src/api/core/core.service.js +35 -0
  122. package/src/api/crypto/crypto.controller.js +51 -0
  123. package/src/api/crypto/crypto.model.js +23 -0
  124. package/src/api/crypto/crypto.router.js +20 -0
  125. package/src/api/crypto/crypto.service.js +64 -0
  126. package/src/api/default/default.controller.js +74 -0
  127. package/src/api/default/default.model.js +20 -0
  128. package/src/api/default/default.router.js +27 -0
  129. package/src/api/default/default.service.js +40 -0
  130. package/src/api/document/document.controller.js +66 -0
  131. package/src/api/document/document.model.js +51 -0
  132. package/src/api/document/document.router.js +24 -0
  133. package/src/api/document/document.service.js +133 -0
  134. package/src/api/file/file.controller.js +67 -0
  135. package/src/api/file/file.model.js +19 -0
  136. package/src/api/file/file.router.js +22 -0
  137. package/src/api/file/file.service.js +100 -0
  138. package/src/api/instance/instance.controller.js +69 -0
  139. package/src/api/instance/instance.model.js +40 -0
  140. package/src/api/instance/instance.router.js +34 -0
  141. package/src/api/instance/instance.service.js +70 -0
  142. package/src/api/ipfs/ipfs.controller.js +51 -0
  143. package/src/api/ipfs/ipfs.model.js +17 -0
  144. package/src/api/ipfs/ipfs.router.js +20 -0
  145. package/src/api/ipfs/ipfs.service.js +25 -0
  146. package/src/api/object-layer/README.md +85 -0
  147. package/src/api/object-layer/object-layer.controller.js +69 -0
  148. package/src/api/object-layer/object-layer.model.js +181 -0
  149. package/src/api/object-layer/object-layer.router.js +29 -0
  150. package/src/api/object-layer/object-layer.service.js +49 -0
  151. package/src/api/test/test.controller.js +59 -0
  152. package/src/api/test/test.model.js +14 -0
  153. package/src/api/test/test.router.js +21 -0
  154. package/src/api/test/test.service.js +35 -0
  155. package/src/api/user/postman_collection.json +216 -0
  156. package/src/api/user/user.build.js +16 -0
  157. package/src/api/user/user.controller.js +35 -0
  158. package/src/api/user/user.model.js +100 -0
  159. package/src/api/user/user.router.js +400 -0
  160. package/src/api/user/user.service.js +500 -0
  161. package/src/api.js +23 -0
  162. package/src/cli/baremetal.js +1310 -0
  163. package/src/cli/cloud-init.js +548 -0
  164. package/src/cli/cluster.js +834 -0
  165. package/src/cli/cron.js +95 -0
  166. package/src/cli/db.js +414 -0
  167. package/src/cli/deploy.js +661 -0
  168. package/src/cli/env.js +101 -0
  169. package/src/cli/fs.js +256 -0
  170. package/src/cli/image.js +156 -0
  171. package/src/cli/index.js +436 -0
  172. package/src/cli/lxd.js +402 -0
  173. package/src/cli/monitor.js +260 -0
  174. package/src/cli/repository.js +274 -0
  175. package/src/cli/run.js +728 -0
  176. package/src/cli/script.js +85 -0
  177. package/src/cli/secrets.js +71 -0
  178. package/src/cli/ssh.js +46 -0
  179. package/src/cli/test.js +159 -0
  180. package/src/client/Cyberia.index.js +50 -0
  181. package/src/client/CyberiaAdmin.index.js +34 -0
  182. package/src/client/CyberiaPortal.index.js +36 -0
  183. package/src/client/Default.index.js +84 -0
  184. package/src/client/components/core/404.js +20 -0
  185. package/src/client/components/core/500.js +20 -0
  186. package/src/client/components/core/Account.js +326 -0
  187. package/src/client/components/core/AgGrid.js +191 -0
  188. package/src/client/components/core/Alert.js +77 -0
  189. package/src/client/components/core/Auth.js +342 -0
  190. package/src/client/components/core/Badge.js +32 -0
  191. package/src/client/components/core/Blockchain.js +41 -0
  192. package/src/client/components/core/Blog.js +9 -0
  193. package/src/client/components/core/BtnIcon.js +111 -0
  194. package/src/client/components/core/CalendarCore.js +464 -0
  195. package/src/client/components/core/Chat.js +64 -0
  196. package/src/client/components/core/ColorPalette.js +5267 -0
  197. package/src/client/components/core/CommonJs.js +1010 -0
  198. package/src/client/components/core/Content.js +196 -0
  199. package/src/client/components/core/Css.js +1099 -0
  200. package/src/client/components/core/CssCore.js +882 -0
  201. package/src/client/components/core/D3Chart.js +44 -0
  202. package/src/client/components/core/Docs.js +376 -0
  203. package/src/client/components/core/DropDown.js +223 -0
  204. package/src/client/components/core/EventsUI.js +133 -0
  205. package/src/client/components/core/FileExplorer.js +707 -0
  206. package/src/client/components/core/FullScreen.js +36 -0
  207. package/src/client/components/core/Input.js +383 -0
  208. package/src/client/components/core/JoyStick.js +80 -0
  209. package/src/client/components/core/Keyboard.js +73 -0
  210. package/src/client/components/core/LoadingAnimation.js +159 -0
  211. package/src/client/components/core/LogIn.js +190 -0
  212. package/src/client/components/core/LogOut.js +63 -0
  213. package/src/client/components/core/Logger.js +29 -0
  214. package/src/client/components/core/Modal.js +2494 -0
  215. package/src/client/components/core/NotificationManager.js +84 -0
  216. package/src/client/components/core/ObjectLayerEngine.js +1229 -0
  217. package/src/client/components/core/ObjectLayerEngineModal.js +443 -0
  218. package/src/client/components/core/Pagination.js +207 -0
  219. package/src/client/components/core/Panel.js +772 -0
  220. package/src/client/components/core/PanelForm.js +627 -0
  221. package/src/client/components/core/Polyhedron.js +162 -0
  222. package/src/client/components/core/Recover.js +207 -0
  223. package/src/client/components/core/Responsive.js +82 -0
  224. package/src/client/components/core/RichText.js +43 -0
  225. package/src/client/components/core/Router.js +317 -0
  226. package/src/client/components/core/Scroll.js +76 -0
  227. package/src/client/components/core/SignUp.js +125 -0
  228. package/src/client/components/core/SocketIo.js +74 -0
  229. package/src/client/components/core/Stream.js +113 -0
  230. package/src/client/components/core/ToggleSwitch.js +101 -0
  231. package/src/client/components/core/ToolTip.js +90 -0
  232. package/src/client/components/core/Translate.js +522 -0
  233. package/src/client/components/core/Validator.js +115 -0
  234. package/src/client/components/core/VanillaJs.js +423 -0
  235. package/src/client/components/core/Wallet.js +106 -0
  236. package/src/client/components/core/WebComponent.js +44 -0
  237. package/src/client/components/core/Webhook.js +25 -0
  238. package/src/client/components/core/Worker.js +371 -0
  239. package/src/client/components/core/windowGetDimensions.js +269 -0
  240. package/src/client/components/cyberia/BagCyberia.js +1253 -0
  241. package/src/client/components/cyberia/BiomeCyberia.js +130 -0
  242. package/src/client/components/cyberia/CharacterCyberia.js +321 -0
  243. package/src/client/components/cyberia/CommonCyberia.js +1834 -0
  244. package/src/client/components/cyberia/CssCyberia.js +816 -0
  245. package/src/client/components/cyberia/ElementPreviewCyberia.js +183 -0
  246. package/src/client/components/cyberia/ElementsCyberia.js +146 -0
  247. package/src/client/components/cyberia/InteractionPanelCyberia.js +1043 -0
  248. package/src/client/components/cyberia/JoyStickCyberia.js +53 -0
  249. package/src/client/components/cyberia/LogInCyberia.js +68 -0
  250. package/src/client/components/cyberia/LogOutCyberia.js +24 -0
  251. package/src/client/components/cyberia/MainUserCyberia.js +424 -0
  252. package/src/client/components/cyberia/MapCyberia.js +160 -0
  253. package/src/client/components/cyberia/MatrixCyberia.js +147 -0
  254. package/src/client/components/cyberia/MenuCyberia.js +575 -0
  255. package/src/client/components/cyberia/PixiCyberia.js +1639 -0
  256. package/src/client/components/cyberia/PointAndClickMovementCyberia.js +146 -0
  257. package/src/client/components/cyberia/QuestCyberia.js +1420 -0
  258. package/src/client/components/cyberia/RoutesCyberia.js +47 -0
  259. package/src/client/components/cyberia/SettingsCyberia.js +16 -0
  260. package/src/client/components/cyberia/SignUpCyberia.js +14 -0
  261. package/src/client/components/cyberia/SkillCyberia.js +124 -0
  262. package/src/client/components/cyberia/SocketIoCyberia.js +211 -0
  263. package/src/client/components/cyberia/TileCyberia.js +685 -0
  264. package/src/client/components/cyberia/TranslateCyberia.js +96 -0
  265. package/src/client/components/cyberia/UniverseCyberia.js +14 -0
  266. package/src/client/components/cyberia/WebhookCyberia.js +13 -0
  267. package/src/client/components/cyberia/WikiCyberia.js +144 -0
  268. package/src/client/components/cyberia/WorldCyberia.js +680 -0
  269. package/src/client/components/cyberia-admin/BiomeCyberiaAdmin.js +978 -0
  270. package/src/client/components/cyberia-admin/CommonCyberiaAdmin.js +29 -0
  271. package/src/client/components/cyberia-admin/CssCyberiaAdmin.js +15 -0
  272. package/src/client/components/cyberia-admin/ElementsCyberiaAdmin.js +38 -0
  273. package/src/client/components/cyberia-admin/InstanceEngineCyberiaAdmin.js +180 -0
  274. package/src/client/components/cyberia-admin/LogInCyberiaAdmin.js +34 -0
  275. package/src/client/components/cyberia-admin/LogOutCyberiaAdmin.js +24 -0
  276. package/src/client/components/cyberia-admin/MenuCyberiaAdmin.js +660 -0
  277. package/src/client/components/cyberia-admin/RoutesCyberiaAdmin.js +57 -0
  278. package/src/client/components/cyberia-admin/ServerCyberiaAdmin.js +129 -0
  279. package/src/client/components/cyberia-admin/SettingsCyberiaAdmin.js +16 -0
  280. package/src/client/components/cyberia-admin/SignUpCyberiaAdmin.js +11 -0
  281. package/src/client/components/cyberia-admin/SocketIoCyberiaAdmin.js +53 -0
  282. package/src/client/components/cyberia-admin/TranslateCyberiaAdmin.js +7 -0
  283. package/src/client/components/cyberia-biome/CityCyberiaBiome.js +209 -0
  284. package/src/client/components/cyberia-biome/CityInteriorCyberiaBiome.js +253 -0
  285. package/src/client/components/cyberia-biome/ColorChaosCyberiaBiome.js +26 -0
  286. package/src/client/components/cyberia-biome/ForestCyberiaBiome.js +191 -0
  287. package/src/client/components/cyberia-biome/GridBaseCyberiaBiome.js +364 -0
  288. package/src/client/components/cyberia-biome/SeedCityCyberiaBiome.js +347 -0
  289. package/src/client/components/cyberia-biome/ShopCyberiaBiome.js +12 -0
  290. package/src/client/components/cyberia-biome/SpaceCyberiaBiome.js +58 -0
  291. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +29 -0
  292. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +132 -0
  293. package/src/client/components/cyberia-portal/ElementsCyberiaPortal.js +38 -0
  294. package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +18 -0
  295. package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +12 -0
  296. package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +487 -0
  297. package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +45 -0
  298. package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +136 -0
  299. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +16 -0
  300. package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +11 -0
  301. package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +52 -0
  302. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +12 -0
  303. package/src/client/components/default/CommonDefault.js +29 -0
  304. package/src/client/components/default/CssDefault.js +27 -0
  305. package/src/client/components/default/ElementsDefault.js +38 -0
  306. package/src/client/components/default/LogInDefault.js +14 -0
  307. package/src/client/components/default/LogOutDefault.js +10 -0
  308. package/src/client/components/default/MenuDefault.js +743 -0
  309. package/src/client/components/default/RoutesDefault.js +48 -0
  310. package/src/client/components/default/SettingsDefault.js +16 -0
  311. package/src/client/components/default/SignUpDefault.js +9 -0
  312. package/src/client/components/default/SocketIoDefault.js +54 -0
  313. package/src/client/components/default/TranslateDefault.js +7 -0
  314. package/src/client/public/default/android-chrome-144x144.png +0 -0
  315. package/src/client/public/default/android-chrome-192x192.png +0 -0
  316. package/src/client/public/default/android-chrome-256x256.png +0 -0
  317. package/src/client/public/default/android-chrome-36x36.png +0 -0
  318. package/src/client/public/default/android-chrome-384x384.png +0 -0
  319. package/src/client/public/default/android-chrome-48x48.png +0 -0
  320. package/src/client/public/default/android-chrome-512x512.png +0 -0
  321. package/src/client/public/default/android-chrome-72x72.png +0 -0
  322. package/src/client/public/default/android-chrome-96x96.png +0 -0
  323. package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
  324. package/src/client/public/default/apple-touch-icon-114x114-precomposed.png +0 -0
  325. package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
  326. package/src/client/public/default/apple-touch-icon-120x120-precomposed.png +0 -0
  327. package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
  328. package/src/client/public/default/apple-touch-icon-144x144-precomposed.png +0 -0
  329. package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
  330. package/src/client/public/default/apple-touch-icon-152x152-precomposed.png +0 -0
  331. package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
  332. package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
  333. package/src/client/public/default/apple-touch-icon-180x180-precomposed.png +0 -0
  334. package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
  335. package/src/client/public/default/apple-touch-icon-57x57-precomposed.png +0 -0
  336. package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
  337. package/src/client/public/default/apple-touch-icon-60x60-precomposed.png +0 -0
  338. package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
  339. package/src/client/public/default/apple-touch-icon-72x72-precomposed.png +0 -0
  340. package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
  341. package/src/client/public/default/apple-touch-icon-76x76-precomposed.png +0 -0
  342. package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
  343. package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
  344. package/src/client/public/default/apple-touch-icon.png +0 -0
  345. package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
  346. package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
  347. package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
  348. package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
  349. package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
  350. package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
  351. package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
  352. package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
  353. package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
  354. package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
  355. package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
  356. package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
  357. package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
  358. package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
  359. package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
  360. package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
  361. package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
  362. package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
  363. package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
  364. package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
  365. package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
  366. package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
  367. package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
  368. package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
  369. package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
  370. package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
  371. package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
  372. package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
  373. package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
  374. package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
  375. package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
  376. package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
  377. package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
  378. package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
  379. package/src/client/public/default/assets/background/dark.jpg +0 -0
  380. package/src/client/public/default/assets/background/dark.svg +557 -0
  381. package/src/client/public/default/assets/background/white.jpg +0 -0
  382. package/src/client/public/default/assets/background/white0-min.jpg +0 -0
  383. package/src/client/public/default/assets/background/white0.jpg +0 -0
  384. package/src/client/public/default/assets/logo/base-icon.png +0 -0
  385. package/src/client/public/default/assets/logo/underpost.gif +0 -0
  386. package/src/client/public/default/assets/mailer/api-user-check.png +0 -0
  387. package/src/client/public/default/assets/mailer/api-user-default-avatar.png +0 -0
  388. package/src/client/public/default/assets/mailer/api-user-invalid-token.png +0 -0
  389. package/src/client/public/default/assets/mailer/api-user-recover.png +0 -0
  390. package/src/client/public/default/browserconfig.xml +12 -0
  391. package/src/client/public/default/favicon-16x16.png +0 -0
  392. package/src/client/public/default/favicon-32x32.png +0 -0
  393. package/src/client/public/default/favicon-48x48.png +0 -0
  394. package/src/client/public/default/favicon.ico +0 -0
  395. package/src/client/public/default/manifest.webmanifest +69 -0
  396. package/src/client/public/default/mstile-144x144.png +0 -0
  397. package/src/client/public/default/mstile-150x150.png +0 -0
  398. package/src/client/public/default/mstile-310x150.png +0 -0
  399. package/src/client/public/default/mstile-310x310.png +0 -0
  400. package/src/client/public/default/mstile-70x70.png +0 -0
  401. package/src/client/public/default/plantuml/client-conf.svg +1 -0
  402. package/src/client/public/default/plantuml/client-schema.svg +1 -0
  403. package/src/client/public/default/plantuml/cron-conf.svg +1 -0
  404. package/src/client/public/default/plantuml/cron-schema.svg +1 -0
  405. package/src/client/public/default/plantuml/server-conf.svg +1 -0
  406. package/src/client/public/default/plantuml/server-schema.svg +1 -0
  407. package/src/client/public/default/plantuml/ssr-conf.svg +1 -0
  408. package/src/client/public/default/plantuml/ssr-schema.svg +1 -0
  409. package/src/client/public/default/safari-pinned-tab.svg +24 -0
  410. package/src/client/public/default/site.webmanifest +69 -0
  411. package/src/client/public/default/sitemap +148 -0
  412. package/src/client/public/default/yandex-browser-50x50.png +0 -0
  413. package/src/client/public/default/yandex-browser-manifest.json +9 -0
  414. package/src/client/public/doc/favicon.ico +0 -0
  415. package/src/client/public/doc/sitemap +148 -0
  416. package/src/client/public/test/favicon.ico +0 -0
  417. package/src/client/public/test/sitemap +148 -0
  418. package/src/client/services/blockchain/blockchain.service.js +73 -0
  419. package/src/client/services/core/core.service.js +165 -0
  420. package/src/client/services/crypto/crypto.service.js +73 -0
  421. package/src/client/services/default/default.management.js +450 -0
  422. package/src/client/services/default/default.service.js +98 -0
  423. package/src/client/services/document/document.service.js +97 -0
  424. package/src/client/services/file/file.service.js +72 -0
  425. package/src/client/services/instance/instance.management.js +78 -0
  426. package/src/client/services/instance/instance.service.js +97 -0
  427. package/src/client/services/ipfs/ipfs.service.js +73 -0
  428. package/src/client/services/object-layer/object-layer.service.js +93 -0
  429. package/src/client/services/test/test.service.js +73 -0
  430. package/src/client/services/user/user.management.js +56 -0
  431. package/src/client/services/user/user.service.js +108 -0
  432. package/src/client/ssr/Render.js +237 -0
  433. package/src/client/ssr/body/404.js +73 -0
  434. package/src/client/ssr/body/500.js +72 -0
  435. package/src/client/ssr/body/CacheControl.js +114 -0
  436. package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +90 -0
  437. package/src/client/ssr/body/CyberiaSplashScreenLore.js +424 -0
  438. package/src/client/ssr/body/DefaultSplashScreen.js +90 -0
  439. package/src/client/ssr/email/DefaultRecoverEmail.js +21 -0
  440. package/src/client/ssr/email/DefaultVerifyEmail.js +17 -0
  441. package/src/client/ssr/head/Css.js +241 -0
  442. package/src/client/ssr/head/CyberiaAdminScripts.js +6 -0
  443. package/src/client/ssr/head/CyberiaPortalScripts.js +6 -0
  444. package/src/client/ssr/head/CyberiaScripts.js +6 -0
  445. package/src/client/ssr/head/DefaultScripts.js +6 -0
  446. package/src/client/ssr/head/Microdata.js +11 -0
  447. package/src/client/ssr/head/Production.js +1 -0
  448. package/src/client/ssr/head/Pwa.js +146 -0
  449. package/src/client/ssr/head/Seo.js +15 -0
  450. package/src/client/ssr/mailer/DefaultRecoverEmail.js +21 -0
  451. package/src/client/ssr/mailer/DefaultVerifyEmail.js +17 -0
  452. package/src/client/ssr/offline/Maintenance.js +63 -0
  453. package/src/client/ssr/offline/NoNetworkConnection.js +67 -0
  454. package/src/client/ssr/pages/404.js +12 -0
  455. package/src/client/ssr/pages/500.js +12 -0
  456. package/src/client/ssr/pages/Test.js +198 -0
  457. package/src/client/ssr/pages/maintenance.js +14 -0
  458. package/src/client/ssr/pages/offline.js +21 -0
  459. package/src/client/sw/default.sw.js +108 -0
  460. package/src/client/sw/template.sw.js +84 -0
  461. package/src/client.build.js +22 -0
  462. package/src/client.dev.js +24 -0
  463. package/src/db/DataBaseProvider.js +98 -0
  464. package/src/db/mariadb/MariaDB.js +66 -0
  465. package/src/db/mongo/MongooseDB.js +70 -0
  466. package/src/index.js +198 -0
  467. package/src/mailer/EmailRender.js +116 -0
  468. package/src/mailer/MailerProvider.js +213 -0
  469. package/src/monitor.js +24 -0
  470. package/src/proxy.js +22 -0
  471. package/src/runtime/express/Express.js +256 -0
  472. package/src/runtime/lampp/Dockerfile +50 -0
  473. package/src/runtime/lampp/Lampp.js +343 -0
  474. package/src/server/auth.js +689 -0
  475. package/src/server/backup.js +96 -0
  476. package/src/server/client-build-docs.js +205 -0
  477. package/src/server/client-build-live.js +109 -0
  478. package/src/server/client-build.js +690 -0
  479. package/src/server/client-dev-server.js +87 -0
  480. package/src/server/client-formatted.js +87 -0
  481. package/src/server/client-icons.js +108 -0
  482. package/src/server/conf.js +1071 -0
  483. package/src/server/crypto.js +210 -0
  484. package/src/server/dns.js +276 -0
  485. package/src/server/downloader.js +74 -0
  486. package/src/server/json-schema.js +77 -0
  487. package/src/server/logger.js +197 -0
  488. package/src/server/network.js +72 -0
  489. package/src/server/object-layer.js +294 -0
  490. package/src/server/peer.js +69 -0
  491. package/src/server/process.js +171 -0
  492. package/src/server/proxy.js +110 -0
  493. package/src/server/runtime.js +170 -0
  494. package/src/server/ssr.js +127 -0
  495. package/src/server/start.js +161 -0
  496. package/src/server/tls.js +251 -0
  497. package/src/server/valkey.js +293 -0
  498. package/src/server.js +25 -0
  499. package/src/ws/IoInterface.js +139 -0
  500. package/src/ws/IoServer.js +88 -0
  501. package/src/ws/core/channels/core.ws.chat.js +23 -0
  502. package/src/ws/core/channels/core.ws.mailer.js +35 -0
  503. package/src/ws/core/channels/core.ws.stream.js +31 -0
  504. package/src/ws/core/core.ws.connection.js +62 -0
  505. package/src/ws/core/core.ws.emit.js +53 -0
  506. package/src/ws/core/core.ws.server.js +76 -0
  507. package/src/ws/core/management/core.ws.chat.js +8 -0
  508. package/src/ws/core/management/core.ws.mailer.js +16 -0
  509. package/src/ws/core/management/core.ws.stream.js +8 -0
  510. package/src/ws/cyberia/channels/cyberia.ws.bot.js +56 -0
  511. package/src/ws/cyberia/channels/cyberia.ws.skill.js +51 -0
  512. package/src/ws/cyberia/channels/cyberia.ws.user.js +437 -0
  513. package/src/ws/cyberia/cyberia.ws.connection.js +36 -0
  514. package/src/ws/cyberia/cyberia.ws.emit.js +14 -0
  515. package/src/ws/cyberia/cyberia.ws.server.js +67 -0
  516. package/src/ws/cyberia/management/cyberia.ws.bot.js +669 -0
  517. package/src/ws/cyberia/management/cyberia.ws.skill.js +441 -0
  518. package/src/ws/cyberia/management/cyberia.ws.user.js +188 -0
  519. package/src/ws/default/channels/default.ws.main.js +16 -0
  520. package/src/ws/default/default.ws.connection.js +22 -0
  521. package/src/ws/default/default.ws.emit.js +14 -0
  522. package/src/ws/default/default.ws.server.js +20 -0
  523. package/src/ws/default/management/default.ws.main.js +8 -0
  524. package/test/api.test.js +53 -0
  525. package/test/crypto.test.js +117 -0
package/src/cli/run.js ADDED
@@ -0,0 +1,728 @@
1
+ /**
2
+ * @description The main entry point for the Underpost CLI applications.
3
+ * @module src/cli/run.js
4
+ * @namespace UnderpostRun
5
+ */
6
+
7
+ import { daemonProcess, getTerminalPid, openTerminal, pbcopy, shellCd, shellExec } from '../server/process.js';
8
+ import read from 'read';
9
+ import { getNpmRootPath } from '../server/conf.js';
10
+ import { actionInitLog, loggerFactory } from '../server/logger.js';
11
+ import UnderpostTest from './test.js';
12
+ import fs from 'fs-extra';
13
+ import { range, setPad, timer } from '../client/components/core/CommonJs.js';
14
+ import UnderpostDeploy from './deploy.js';
15
+ import UnderpostRootEnv from './env.js';
16
+ import UnderpostRepository from './repository.js';
17
+ import os from 'os';
18
+
19
+ const logger = loggerFactory(import.meta);
20
+
21
+ /**
22
+ * @class UnderpostRun
23
+ * @description Manages the execution of various CLI commands and operations.
24
+ * This class provides a set of static methods to perform different tasks
25
+ * such as running tests, deploying applications, managing environment variables,
26
+ * and more. It also includes a default option configuration and a collection of
27
+ * runners for executing specific commands.
28
+ * @memberof UnderpostRun
29
+ */
30
+ class UnderpostRun {
31
+ /**
32
+ * @static
33
+ * @description Default options for the UnderpostRun class.
34
+ * @type {Object}
35
+ * @property {boolean} dev - Whether to run in development mode.
36
+ * @property {string} podName - The name of the pod to run.
37
+ * @property {string} volumeHostPath - The host path for the volume.
38
+ * @property {string} volumeMountPath - The mount path for the volume.
39
+ * @property {string} imageName - The name of the image to run.
40
+ * @property {string} containerName - The name of the container to run.
41
+ * @property {string} namespace - The namespace to run in.
42
+ * @property {boolean} build - Whether to build the image.
43
+ * @property {number} replicas - The number of replicas to run.
44
+ * @property {boolean} k3s - Whether to run in k3s mode.
45
+ * @property {boolean} kubeadm - Whether to run in kubeadm mode.
46
+ * @memberof UnderpostRun
47
+ */
48
+ static DEFAULT_OPTION = {
49
+ dev: false,
50
+ podName: '',
51
+ volumeHostPath: '',
52
+ volumeMountPath: '',
53
+ imageName: '',
54
+ containerName: '',
55
+ namespace: '',
56
+ build: false,
57
+ replicas: 1,
58
+ k3s: false,
59
+ kubeadm: false,
60
+ };
61
+ /**
62
+ * @static
63
+ * @description Collection of runners for executing specific commands.
64
+ * @type {Object}
65
+ * @memberof UnderpostRun
66
+ */
67
+ static RUNNERS = {
68
+ /**
69
+ * @method spark-template
70
+ * @description Creates a new Spark template project.
71
+ * @param {string} path - The path to the directory where the template will be created.
72
+ * @param {Object} options - The default underpost runner options for customizing workflow
73
+ * @memberof UnderpostRun
74
+ */
75
+ 'spark-template': (path, options = UnderpostRun.DEFAULT_OPTION) => {
76
+ const dir = '/home/dd/spark-template';
77
+ shellExec(`sudo rm -rf ${dir}`);
78
+ shellCd('/home/dd');
79
+
80
+ // pbcopy(`cd /home/dd && sbt new ${process.env.GITHUB_USERNAME}/spark-template.g8`);
81
+ // await read({ prompt: 'Command copy to clipboard, press enter to continue.\n' });
82
+ shellExec(`cd /home/dd && sbt new ${process.env.GITHUB_USERNAME}/spark-template.g8 '--name=spark-template'`);
83
+
84
+ shellCd(dir);
85
+
86
+ shellExec(`git init && git add . && git commit -m "Base implementation"`);
87
+ shellExec(`chmod +x ./replace_params.sh`);
88
+ shellExec(`chmod +x ./build.sh`);
89
+
90
+ shellExec(`./replace_params.sh`);
91
+ shellExec(`./build.sh`);
92
+
93
+ shellCd('/home/dd/engine');
94
+ },
95
+ /**
96
+ * @method rmi
97
+ * @description Removes all podman images.
98
+ * @param {string} path - The path to the directory where the template will be created.
99
+ * @param {Object} options - The default underpost runner options for customizing workflow
100
+ * @memberof UnderpostRun
101
+ */
102
+ rmi: (path, options = UnderpostRun.DEFAULT_OPTION) => {
103
+ shellExec(`podman rmi $(podman images -qa) --force`);
104
+ },
105
+ /**
106
+ * @method kill
107
+ * @description Kills a process by its port.
108
+ * @param {string} path - The path to the directory where the template will be created.
109
+ * @param {Object} options - The default underpost runner options for customizing workflow
110
+ * @memberof UnderpostRun
111
+ */
112
+ kill: (path, options = UnderpostRun.DEFAULT_OPTION) => {
113
+ shellExec(`sudo kill -9 $(lsof -t -i:${path})`);
114
+ },
115
+ /**
116
+ * @method secret
117
+ * @description Creates a new secret from a file.
118
+ * @param {string} path - The path to the directory where the template will be created.
119
+ * @param {Object} options - The default underpost runner options for customizing workflow
120
+ * @memberof UnderpostRun
121
+ */
122
+ secret: (path, options = UnderpostRun.DEFAULT_OPTION) => {
123
+ shellExec(
124
+ `underpost secret underpost --create-from-file ${
125
+ path ? path : `/home/dd/engine/engine-private/conf/dd-cron/.env.production`
126
+ }`,
127
+ );
128
+ },
129
+ /**
130
+ * @method underpost-config
131
+ * @description Creates a new configmap from a file.
132
+ * @param {string} path - The path to the directory where the template will be created.
133
+ * @param {Object} options - The default underpost runner options for customizing workflow
134
+ * @memberof UnderpostRun
135
+ */
136
+ 'underpost-config': (path, options = UnderpostRun.DEFAULT_OPTION) => {
137
+ UnderpostDeploy.API.configMap(path ?? 'production');
138
+ },
139
+ /**
140
+ * @method gpu-env
141
+ * @description Creates a new configmap from a file.
142
+ * @param {string} path - The path to the directory where the template will be created.
143
+ * @param {Object} options - The default underpost runner options for customizing workflow
144
+ * @memberof UnderpostRun
145
+ */
146
+ 'gpu-env': (path, options = UnderpostRun.DEFAULT_OPTION) => {
147
+ shellExec(
148
+ `node bin cluster --dev --reset && node bin cluster --dev --dedicated-gpu --kubeadm && kubectl get pods --all-namespaces -o wide -w`,
149
+ );
150
+ },
151
+ /**
152
+ * @method tf-gpu-test
153
+ * @description Creates a new configmap from a file.
154
+ * @param {string} path - The path to the directory where the template will be created.
155
+ * @param {Object} options - The default underpost runner options for customizing workflow
156
+ * @memberof UnderpostRun
157
+ */
158
+ 'tf-gpu-test': (path, options = UnderpostRun.DEFAULT_OPTION) => {
159
+ const { underpostRoot } = options;
160
+ shellExec(`kubectl delete configmap tf-gpu-test-script`);
161
+ shellExec(`kubectl delete pod tf-gpu-test-pod`);
162
+ shellExec(`kubectl apply -f ${underpostRoot}/manifests/deployment/tensorflow/tf-gpu-test.yaml`);
163
+ },
164
+ /**
165
+ * @method dev-cluster
166
+ * @description Creates a new configmap from a file.
167
+ * @param {string} path - The path to the directory where the template will be created.
168
+ * @param {Object} options - The default underpost runner options for customizing workflow
169
+ * @memberof UnderpostRun
170
+ */
171
+ 'dev-cluster': (path, options = UnderpostRun.DEFAULT_OPTION) => {
172
+ const baseCommand = options.dev ? 'node bin' : 'underpost';
173
+ shellExec(`${baseCommand} cluster${options.dev ? ' --dev' : ''} --reset`);
174
+ shellExec(`${baseCommand} cluster${options.dev ? ' --dev' : ''}`);
175
+ const mongoHosts = ['mongodb-0.mongodb-service'];
176
+ shellExec(
177
+ `${baseCommand} cluster${options.dev ? ' --dev' : ''} --mongodb --mongo-db-host ${mongoHosts.join(
178
+ ',',
179
+ )} --pull-image`,
180
+ );
181
+ shellExec(`${baseCommand} cluster${options.dev ? ' --dev' : ''} --valkey --pull-image`);
182
+ shellExec(`${baseCommand} deploy --expose mongo`, { async: true });
183
+ shellExec(`${baseCommand} deploy --expose valkey`, { async: true });
184
+ {
185
+ const hostListenResult = UnderpostDeploy.API.etcHostFactory(mongoHosts);
186
+ logger.info(hostListenResult.renderHosts);
187
+ }
188
+ },
189
+ /**
190
+ * @method ssh-cluster-info
191
+ * @description Creates a new configmap from a file.
192
+ * @param {string} path - The path to the directory where the template will be created.
193
+ * @param {Object} options - The default underpost runner options for customizing workflow
194
+ * @memberof UnderpostRun
195
+ */
196
+ 'ssh-cluster-info': (path, options = UnderpostRun.DEFAULT_OPTION) => {
197
+ const { underpostRoot } = options;
198
+ shellExec(`chmod +x ${underpostRoot}/scripts/ssh-cluster-info.sh`);
199
+ shellExec(`${underpostRoot}/scripts/ssh-cluster-info.sh`);
200
+ },
201
+ /**
202
+ * @method cyberia-ide
203
+ * @description Creates a new configmap from a file.
204
+ * @param {string} path - The path to the directory where the template will be created.
205
+ * @param {Object} options - The default underpost runner options for customizing workflow
206
+ * @memberof UnderpostRun
207
+ */
208
+ 'cyberia-ide': (path, options = UnderpostRun.DEFAULT_OPTION) => {
209
+ const baseCommand = options.dev ? 'node bin' : 'underpost';
210
+ shellExec(`${baseCommand} run ide /home/dd/cyberia-server`);
211
+ shellExec(`${baseCommand} run ide /home/dd/cyberia-client`);
212
+ },
213
+ /**
214
+ * @method engine-ide
215
+ * @description Creates a new configmap from a file.
216
+ * @param {string} path - The path to the directory where the template will be created.
217
+ * @param {Object} options - The default underpost runner options for customizing workflow
218
+ * @memberof UnderpostRun
219
+ */
220
+ 'engine-ide': (path, options = UnderpostRun.DEFAULT_OPTION) => {
221
+ const baseCommand = options.dev ? 'node bin' : 'underpost';
222
+ shellExec(`${baseCommand} run ide /home/dd/engine`);
223
+ shellExec(`${baseCommand} run ide /home/dd/engine/engine-private`);
224
+ },
225
+ /**
226
+ * @method template-deploy
227
+ * @description Creates a new configmap from a file.
228
+ * @param {string} path - The path to the directory where the template will be created.
229
+ * @param {Object} options - The default underpost runner options for customizing workflow
230
+ * @memberof UnderpostRun
231
+ */
232
+ 'template-deploy': (path, options = UnderpostRun.DEFAULT_OPTION) => {
233
+ const baseCommand = options.dev || true ? 'node bin' : 'underpost';
234
+ shellExec(`${baseCommand} run clean`);
235
+ shellExec(`${baseCommand} push ./engine-private ${process.env.GITHUB_USERNAME}/engine-private`);
236
+ shellCd('/home/dd/engine');
237
+ shellExec(`git reset`);
238
+ shellExec(`${baseCommand} cmt . --empty ci package-pwa-microservices-template`);
239
+ shellExec(`${baseCommand} push . ${process.env.GITHUB_USERNAME}/engine`);
240
+ },
241
+ /**
242
+ * @method clean
243
+ * @description Creates a new configmap from a file.
244
+ * @param {string} path - The path to the directory where the template will be created.
245
+ * @param {Object} options - The default underpost runner options for customizing workflow
246
+ * @memberof UnderpostRun
247
+ */
248
+ clean: (path, options = UnderpostRun.DEFAULT_OPTION) => {
249
+ shellCd(path ?? `/home/dd/engine`);
250
+ shellExec(`node bin/deploy clean-core-repo`);
251
+ },
252
+ /**
253
+ * @method pull
254
+ * @description Creates a new configmap from a file.
255
+ * @param {string} path - The path to the directory where the template will be created.
256
+ * @param {Object} options - The default underpost runner options for customizing workflow
257
+ * @memberof UnderpostRun
258
+ */
259
+ pull: (path, options = UnderpostRun.DEFAULT_OPTION) => {
260
+ shellCd(`/home/dd/engine`);
261
+ shellExec(`node bin/deploy clean-core-repo`);
262
+ shellExec(`underpost pull . ${process.env.GITHUB_USERNAME}/engine`);
263
+ shellExec(`underpost pull ./engine-private ${process.env.GITHUB_USERNAME}/engine-private`);
264
+ },
265
+ /**
266
+ * @method release-deploy
267
+ * @description Creates a new configmap from a file.
268
+ * @param {string} path - The path to the directory where the template will be created.
269
+ * @param {Object} options - The default underpost runner options for customizing workflow
270
+ * @memberof UnderpostRun
271
+ */
272
+ 'release-deploy': (path, options = UnderpostRun.DEFAULT_OPTION) => {
273
+ actionInitLog();
274
+ shellExec(`underpost --version`);
275
+ shellCd(`/home/dd/engine`);
276
+ for (const _deployId of fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',')) {
277
+ const deployId = _deployId.trim();
278
+ shellExec(`underpost run deploy ${deployId}`, { async: true });
279
+ }
280
+ },
281
+ /**
282
+ * @method ssh-deploy
283
+ * @description Creates a new configmap from a file.
284
+ * @param {string} path - The path to the directory where the template will be created.
285
+ * @param {Object} options - The default underpost runner options for customizing workflow
286
+ * @memberof UnderpostRun
287
+ */
288
+ 'ssh-deploy': (path, options = UnderpostRun.DEFAULT_OPTION) => {
289
+ actionInitLog();
290
+ const baseCommand = options.dev || true ? 'node bin' : 'underpost';
291
+ shellCd('/home/dd/engine');
292
+ shellExec(`git reset`);
293
+ shellExec(`${baseCommand} cmt . --empty cd ssh-${path}`);
294
+ shellExec(`${baseCommand} push . ${process.env.GITHUB_USERNAME}/engine`);
295
+ },
296
+ /**
297
+ * @method ide
298
+ * @description Creates a new configmap from a file.
299
+ * @param {string} path - The path to the directory where the template will be created.
300
+ * @param {Object} options - The default underpost runner options for customizing workflow
301
+ * @memberof UnderpostRun
302
+ */
303
+ ide: (path, options = UnderpostRun.DEFAULT_OPTION) => {
304
+ const { underpostRoot } = options;
305
+ shellExec(`node ${underpostRoot}/bin/vs ${path}`);
306
+ },
307
+ /**
308
+ * @method sync
309
+ * @description Creates a new configmap from a file.
310
+ * @param {string} path - The path to the directory where the template will be created.
311
+ * @param {Object} options - The default underpost runner options for customizing workflow
312
+ * @memberof UnderpostRun
313
+ */
314
+ sync: (path, options = UnderpostRun.DEFAULT_OPTION) => {
315
+ const env = options.dev ? 'development' : 'production';
316
+ const baseCommand = options.dev || true ? 'node bin' : 'underpost';
317
+ shellExec(`${baseCommand} run clean`);
318
+ const defaultPath = ['dd-default', 1, ``, ``, 'kind-control-plane'];
319
+ let [deployId, replicas, versions, image, node] = path ? path.split(',') : defaultPath;
320
+ deployId = deployId ?? defaultPath[0];
321
+ replicas = replicas ?? defaultPath[1];
322
+ versions = versions ?? defaultPath[2];
323
+ image = image ?? defaultPath[3];
324
+ node = node ?? defaultPath[4];
325
+ shellExec(
326
+ `${baseCommand} deploy --kubeadm --build-manifest --sync --info-router --replicas ${
327
+ replicas ?? 1
328
+ } --node ${node}${image ? ` --image ${image}` : ''}${
329
+ versions ? ` --versions ${versions.replaceAll('+', ',')}` : ''
330
+ } dd ${env}`,
331
+ );
332
+ if (!options.build) shellExec(`${baseCommand} deploy --kubeadm ${deployId} ${env}`);
333
+ },
334
+ /**
335
+ * @method ls-deployments
336
+ * @description Creates a new configmap from a file.
337
+ * @param {string} path - The path to the directory where the template will be created.
338
+ * @param {Object} options - The default underpost runner options for customizing workflow
339
+ * @memberof UnderpostRun
340
+ */
341
+ 'ls-deployments': async (path, options = UnderpostRun.DEFAULT_OPTION) => {
342
+ console.table(await UnderpostDeploy.API.get(path, 'deployments'));
343
+ },
344
+ /**
345
+ * @method monitor
346
+ * @description Creates a new configmap from a file.
347
+ * @param {string} path - The path to the directory where the template will be created.
348
+ * @param {Object} options - The default underpost runner options for customizing workflow
349
+ * @memberof UnderpostRun
350
+ */
351
+ monitor: (path, options = UnderpostRun.DEFAULT_OPTION) => {
352
+ const pid = getTerminalPid();
353
+ logger.info('monitor pid', pid);
354
+ const checkPath = '/await';
355
+ const _monitor = async () => {
356
+ const result = UnderpostDeploy.API.existsContainerFile({ podName: path, path: checkPath });
357
+ logger.info('monitor', result);
358
+ if (result === true) {
359
+ switch (path) {
360
+ case 'tf-vae-test':
361
+ {
362
+ const nameSpace = 'default';
363
+ const podName = path;
364
+ const basePath = '/home/dd';
365
+ const scriptPath = '/site/en/tutorials/generative/cvae.py';
366
+ // shellExec(
367
+ // `sudo kubectl cp ${nameSpace}/${podName}:${basePath}/docs${scriptPath} ${basePath}/lab/src/${scriptPath
368
+ // .split('/')
369
+ // .pop()}`,
370
+ // );
371
+ // const file = fs.readFileSync(`${basePath}/lab/src/${scriptPath.split('/').pop()}`, 'utf8');
372
+ // fs.writeFileSync(
373
+ // `${basePath}/lab/src/${scriptPath.split('/').pop()}`,
374
+ // file.replace(
375
+ // `import time`,
376
+ // `import time
377
+ // print('=== SCRIPT UPDATE TEST ===')`,
378
+ // ),
379
+ // 'utf8',
380
+ // );
381
+ shellExec(
382
+ `sudo kubectl cp ${basePath}/lab/src/${scriptPath
383
+ .split('/')
384
+ .pop()} ${nameSpace}/${podName}:${basePath}/docs${scriptPath}`,
385
+ );
386
+ // shellExec(`sudo kubectl exec -i ${podName} -- sh -c "ipython ${basePath}/docs${scriptPath}"`);
387
+ shellExec(`sudo kubectl exec -i ${podName} -- sh -c "rm -rf ${checkPath}"`);
388
+
389
+ {
390
+ const checkPath = `/latent_space_plot.png`;
391
+ const outsPaths = [];
392
+ logger.info('monitor', checkPath);
393
+ while (!UnderpostDeploy.API.existsContainerFile({ podName, path: `/home/dd/docs${checkPath}` }))
394
+ await timer(1000);
395
+
396
+ {
397
+ const toPath = `${basePath}/lab${checkPath}`;
398
+ outsPaths.push(toPath);
399
+ shellExec(`sudo kubectl cp ${nameSpace}/${podName}:${basePath}/docs${checkPath} ${toPath}`);
400
+ }
401
+
402
+ for (let i of range(1, 10)) {
403
+ i = `/image_at_epoch_${setPad(i, '0', 4)}.png`;
404
+ const toPath = `${basePath}/lab/${i}`;
405
+ outsPaths.push(toPath);
406
+ shellExec(`sudo kubectl cp ${nameSpace}/${podName}:${basePath}/docs${i} ${toPath}`);
407
+ }
408
+ openTerminal(`firefox ${outsPaths.join(' ')}`, { single: true });
409
+ }
410
+ shellExec(`sudo kill -9 ${pid}`);
411
+ }
412
+ break;
413
+
414
+ default:
415
+ break;
416
+ }
417
+ return;
418
+ }
419
+ await timer(1000);
420
+ _monitor();
421
+ };
422
+ _monitor();
423
+ },
424
+ /**
425
+ * @method db-client
426
+ * @description Creates a new configmap from a file.
427
+ * @param {string} path - The path to the directory where the template will be created.
428
+ * @param {Object} options - The default underpost runner options for customizing workflow
429
+ * @memberof UnderpostRun
430
+ */
431
+ 'db-client': async (path, options = UnderpostRun.DEFAULT_OPTION) => {
432
+ const { underpostRoot } = options;
433
+
434
+ const image = 'adminer:4.7.6-standalone';
435
+
436
+ if (!options.kubeadm && !options.k3s) {
437
+ // Only load if not kubeadm/k3s (Kind needs it)
438
+ shellExec(`docker pull ${image}`);
439
+ shellExec(`sudo kind load docker-image ${image}`);
440
+ } else if (options.kubeadm || options.k3s)
441
+ // For kubeadm/k3s, ensure it's available for containerd
442
+ shellExec(`sudo crictl pull ${image}`);
443
+
444
+ shellExec(`kubectl delete deployment adminer`);
445
+ shellExec(`kubectl apply -k ${underpostRoot}/manifests/deployment/adminer/.`);
446
+ const successInstance = await UnderpostTest.API.statusMonitor('adminer', 'Running', 'pods', 1000, 60 * 10);
447
+
448
+ if (successInstance) {
449
+ shellExec(`underpost deploy --expose adminer`);
450
+ }
451
+ },
452
+ /**
453
+ * @method promote
454
+ * @description Creates a new configmap from a file.
455
+ * @param {string} path - The path to the directory where the template will be created.
456
+ * @param {Object} options - The default underpost runner options for customizing workflow
457
+ * @memberof UnderpostRun
458
+ */
459
+ promote: async (path, options = UnderpostRun.DEFAULT_OPTION) => {
460
+ let [inputDeployId, inputEnv, inputReplicas] = path.split(',');
461
+ if (!inputEnv) inputEnv = 'production';
462
+ if (!inputReplicas) inputReplicas = 1;
463
+ if (inputDeployId === 'dd') {
464
+ for (const deployId of fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',')) {
465
+ const currentTraffic = UnderpostDeploy.API.getCurrentTraffic(deployId);
466
+ const targetTraffic = currentTraffic === 'blue' ? 'green' : 'blue';
467
+ UnderpostDeploy.API.switchTraffic(deployId, inputEnv, targetTraffic, inputReplicas);
468
+ }
469
+ } else {
470
+ const currentTraffic = UnderpostDeploy.API.getCurrentTraffic(inputDeployId);
471
+ const targetTraffic = currentTraffic === 'blue' ? 'green' : 'blue';
472
+ UnderpostDeploy.API.switchTraffic(inputDeployId, inputEnv, targetTraffic, inputReplicas);
473
+ }
474
+ },
475
+ /**
476
+ * @method metrics
477
+ * @description Creates a new configmap from a file.
478
+ * @param {string} path - The path to the directory where the template will be created.
479
+ * @param {Object} options - The default underpost runner options for customizing workflow
480
+ * @memberof UnderpostRun
481
+ */
482
+ metrics: async (path, options = UnderpostRun.DEFAULT_OPTION) => {
483
+ const deployList = fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',');
484
+ let hosts = [];
485
+ for (const deployId of deployList) {
486
+ const confServer = JSON.parse(fs.readFileSync(`./engine-private/conf/${deployId}/conf.server.json`, 'utf8'));
487
+ hosts = hosts.concat(Object.keys(confServer));
488
+ }
489
+ shellExec(`node bin cluster --prom ${hosts.join(',')}`);
490
+ shellExec(`node bin cluster --grafana`);
491
+ },
492
+ /**
493
+ * @method cluster
494
+ * @description Creates a new configmap from a file.
495
+ * @param {string} path - The path to the directory where the template will be created.
496
+ * @param {Object} options - The default underpost runner options for customizing workflow
497
+ * @memberof UnderpostRun
498
+ */
499
+ cluster: async (path, options = UnderpostRun.DEFAULT_OPTION) => {
500
+ const deployList = fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',');
501
+ const env = 'production';
502
+ shellCd(`/home/dd/engine`);
503
+ shellExec(`underpost cluster --reset`);
504
+ await timer(5000);
505
+ shellExec(`underpost cluster --kubeadm`);
506
+ await timer(5000);
507
+ shellExec(`underpost dockerfile-pull-base-images --path /home/dd/engine/src/runtime/lampp --kubeadm-load`);
508
+ await timer(5000);
509
+ shellExec(`underpost cluster --kubeadm --pull-image --mongodb`);
510
+ await timer(5000);
511
+ shellExec(`underpost cluster --kubeadm --pull-image --mariadb`);
512
+ await timer(5000);
513
+ for (const deployId of deployList) {
514
+ shellExec(`underpost db ${deployId} --import --git`);
515
+ }
516
+ await timer(5000);
517
+ shellExec(`underpost cluster --kubeadm --pull-image --valkey`);
518
+ await timer(5000);
519
+ shellExec(`underpost cluster --kubeadm --contour`);
520
+ await timer(5000);
521
+ shellExec(`underpost cluster --kubeadm --cert-manager`);
522
+ for (const deployId of deployList) {
523
+ shellExec(`underpost deploy ${deployId} ${env} --kubeadm --cert`);
524
+ }
525
+ },
526
+ /**
527
+ * @method deploy
528
+ * @description Creates a new configmap from a file.
529
+ * @param {string} path - The path to the directory where the template will be created.
530
+ * @param {Object} options - The default underpost runner options for customizing workflow
531
+ * @memberof UnderpostRun
532
+ */
533
+ deploy: async (path, options = UnderpostRun.DEFAULT_OPTION) => {
534
+ const deployId = path;
535
+ const { validVersion, deployVersion } = UnderpostRepository.API.privateConfUpdate(deployId);
536
+ if (!validVersion) throw new Error('Version mismatch');
537
+ const currentTraffic = UnderpostDeploy.API.getCurrentTraffic(deployId);
538
+ const targetTraffic = currentTraffic === 'blue' ? 'green' : 'blue';
539
+ const env = 'production';
540
+ const ignorePods = UnderpostDeploy.API.get(`${deployId}-${env}-${targetTraffic}`).map((p) => p.NAME);
541
+
542
+ if (options.build === true) {
543
+ // deployId, replicas, versions, image, node
544
+ shellExec(
545
+ `node bin run sync ${deployId},${options.replicas ?? 1},${targetTraffic},${
546
+ options.imageName ?? `localhost/rockylinux9-underpost:${deployVersion}`
547
+ },${os.hostname()}`,
548
+ );
549
+ } else shellExec(`sudo kubectl rollout restart deployment/${deployId}-${env}-${targetTraffic}`);
550
+
551
+ let checkStatusIteration = 0;
552
+ const checkStatusIterationMsDelay = 1000;
553
+ const iteratorTag = `[${deployId}-${env}-${targetTraffic}]`;
554
+ logger.info('Deployment init', { deployId, env, targetTraffic, checkStatusIterationMsDelay });
555
+ const minReadyOk = 3;
556
+ let readyOk = 0;
557
+
558
+ while (readyOk < minReadyOk) {
559
+ const ready = UnderpostDeploy.API.checkDeploymentReadyStatus(deployId, env, targetTraffic, ignorePods).ready;
560
+ if (ready === true) {
561
+ readyOk++;
562
+ logger.info(`${iteratorTag} | Deployment ready. Verification number: ${readyOk}`);
563
+ }
564
+ await timer(checkStatusIterationMsDelay);
565
+ checkStatusIteration++;
566
+ logger.info(
567
+ `${iteratorTag} | Deployment in progress... | Delay number check iterations: ${checkStatusIteration}`,
568
+ );
569
+ }
570
+
571
+ logger.info(`${iteratorTag} | Deployment ready. | Total delay number check iterations: ${checkStatusIteration}`);
572
+
573
+ UnderpostDeploy.API.switchTraffic(deployId, env, targetTraffic);
574
+
575
+ // shellExec(`sudo kubectl rollout restart deployment/${deployId}-${env}-${currentTraffic}`);
576
+ },
577
+ /**
578
+ * @method tf-vae-test
579
+ * @description Creates a new configmap from a file.
580
+ * @param {string} path - The path to the directory where the template will be created.
581
+ * @param {Object} options - The default underpost runner options for customizing workflow
582
+ * @memberof UnderpostRun
583
+ */
584
+ 'tf-vae-test': async (path, options = UnderpostRun.DEFAULT_OPTION) => {
585
+ const { underpostRoot } = options;
586
+ const podName = 'tf-vae-test';
587
+ await UnderpostRun.RUNNERS['deploy-job']('', {
588
+ podName,
589
+ // volumeMountPath: '/custom_images',
590
+ // volumeHostPath: '/home/dd/engine/src/client/public/cyberia/assets/skin',
591
+ on: {
592
+ init: async () => {
593
+ openTerminal(`node bin run --dev monitor ${podName}`);
594
+ },
595
+ },
596
+ args: [
597
+ `pip install --upgrade \
598
+ nbconvert \
599
+ tensorflow-probability==0.23.0 \
600
+ imageio \
601
+ git+https://github.com/tensorflow/docs \
602
+ matplotlib \
603
+ "numpy<1.25,>=1.21"`,
604
+ 'mkdir -p /home/dd',
605
+ 'cd /home/dd',
606
+ 'git clone https://github.com/tensorflow/docs.git',
607
+ 'cd docs',
608
+ 'jupyter nbconvert --to python site/en/tutorials/generative/cvae.ipynb',
609
+ `echo '' > /await`,
610
+ `echo '=== WAITING SCRIPT LAUNCH ==='`,
611
+ `while [ -f /await ]; do sleep 1; done`,
612
+ `echo '=== FINISHED ==='`,
613
+ daemonProcess(`ipython site/en/tutorials/generative/cvae.py`),
614
+ ],
615
+ });
616
+ },
617
+ /**
618
+ * @method deploy-job
619
+ * @description Creates a new configmap from a file.
620
+ * @param {string} path - The path to the directory where the template will be created.
621
+ * @param {Object} options - The default underpost runner options for customizing workflow
622
+ * @memberof UnderpostRun
623
+ */
624
+ 'deploy-job': async (path, options = UnderpostRun.DEFAULT_OPTION) => {
625
+ const podName = options.podName || 'deploy-job';
626
+ const volumeName = `${podName}-volume`;
627
+ const args = (options.args ? options.args : path ? [`python ${path}`] : []).filter((c) => c.trim());
628
+ const imageName = options.imageName || 'nvcr.io/nvidia/tensorflow:24.04-tf2-py3';
629
+ const containerName = options.containerName || `${podName}-container`;
630
+ const gpuEnable = imageName.match('nvidia');
631
+ const runtimeClassName = gpuEnable ? 'nvidia' : '';
632
+ const namespace = options.namespace || 'default';
633
+ const volumeMountPath = options.volumeMountPath || path;
634
+ const volumeHostPath = options.volumeHostPath || path;
635
+ const enableVolumeMount = volumeHostPath && volumeMountPath;
636
+
637
+ if (options.volumeType === 'dev') options.volumeType = 'FileOrCreate';
638
+ const volumeType =
639
+ options.volumeType || (enableVolumeMount && fs.statSync(volumeHostPath).isDirectory()) ? 'Directory' : 'File';
640
+
641
+ const envs = UnderpostRootEnv.API.list();
642
+
643
+ const cmd = `kubectl apply -f - <<EOF
644
+ apiVersion: v1
645
+ kind: Pod
646
+ metadata:
647
+ name: ${podName}
648
+ namespace: ${namespace}
649
+ spec:
650
+ restartPolicy: Never
651
+ ${runtimeClassName ? ` runtimeClassName: ${runtimeClassName}` : ''}
652
+ containers:
653
+ - name: ${containerName}
654
+ image: ${imageName}
655
+ imagePullPolicy: IfNotPresent
656
+ tty: true
657
+ stdin: true
658
+ command: ${JSON.stringify(options.command ? options.command : ['/bin/bash', '-c'])}
659
+ ${
660
+ args.length > 0
661
+ ? ` args:
662
+ - |
663
+ ${args.map((arg) => ` ${arg}`).join('\n')}`
664
+ : ''
665
+ }
666
+ ${`${
667
+ gpuEnable
668
+ ? ` resources:
669
+ limits:
670
+ nvidia.com/gpu: '1'
671
+ `
672
+ : ''
673
+ } env:
674
+ ${Object.keys(envs)
675
+ .map((key) => ({ key, value: typeof envs[key] === 'number' ? envs[key] : `"${envs[key]}"` }))
676
+ .concat(gpuEnable ? [{ key: 'NVIDIA_VISIBLE_DEVICES', value: 'all' }] : [])
677
+ .map((env) => ` - name: ${env.key}\n value: ${env.value}`)
678
+ .join('\n')}`}
679
+ ${
680
+ enableVolumeMount
681
+ ? `
682
+ volumeMounts:
683
+ - name: ${volumeName}
684
+ mountPath: ${volumeMountPath}
685
+ volumes:
686
+ - name: ${volumeName}
687
+ hostPath:
688
+ path: ${volumeHostPath}
689
+ type: ${volumeType}`
690
+ : ''
691
+ }
692
+ EOF`;
693
+ shellExec(`kubectl delete pod ${podName}`);
694
+ console.log(cmd);
695
+ shellExec(cmd, { disableLog: true });
696
+ const successInstance = await UnderpostTest.API.statusMonitor(podName);
697
+ if (successInstance) {
698
+ options.on?.init ? await options.on.init() : null;
699
+ shellExec(`kubectl logs -f ${podName}`);
700
+ }
701
+ },
702
+ };
703
+
704
+ static API = {
705
+ /**
706
+ * @method callback
707
+ * @description Initiates a callback to a specified runner with the provided path and options.
708
+ * @param {string} runner - The name of the runner to execute.
709
+ * @param {string} path - The path to the directory where the template will be created.
710
+ * @param {Object} options - The default underpost runner options for customizing workflow
711
+ * @memberof UnderpostRun
712
+ * @returns {Promise<any>} The result of the callback execution.
713
+ */
714
+ async callback(runner, path, options = UnderpostRun.DEFAULT_OPTION) {
715
+ const npmRoot = getNpmRootPath();
716
+ const underpostRoot = options?.dev === true ? '.' : `${npmRoot}/underpost`;
717
+ if (options.command) options.command = options.command.split(',');
718
+ if (options.args) options.args = options.args.split(',');
719
+ options.underpostRoot = underpostRoot;
720
+ options.npmRoot = npmRoot;
721
+ logger.info('callback', { path, options });
722
+ const result = await UnderpostRun.RUNNERS[runner](path, options);
723
+ return result;
724
+ },
725
+ };
726
+ }
727
+
728
+ export default UnderpostRun;