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
@@ -0,0 +1,95 @@
1
+ /**
2
+ * UnderpostCron CLI index module
3
+ * @module src/cli/cron.js
4
+ * @namespace UnderpostCron
5
+ */
6
+
7
+ import { DataBaseProvider } from '../db/DataBaseProvider.js';
8
+ import BackUp from '../server/backup.js';
9
+ import { Cmd } from '../server/conf.js';
10
+ import Dns from '../server/dns.js';
11
+ import { loggerFactory } from '../server/logger.js';
12
+
13
+ import { shellExec } from '../server/process.js';
14
+ import fs from 'fs-extra';
15
+
16
+ const logger = loggerFactory(import.meta);
17
+
18
+ /**
19
+ * UnderpostCron main module methods
20
+ * @class UnderpostCron
21
+ * @memberof UnderpostCron
22
+ */
23
+ class UnderpostCron {
24
+ static JOB = {
25
+ /**
26
+ * DNS cli API
27
+ * @static
28
+ * @type {Dns}
29
+ * @memberof UnderpostCron
30
+ */
31
+ dns: Dns,
32
+ /**
33
+ * BackUp cli API
34
+ * @static
35
+ * @type {BackUp}
36
+ * @memberof UnderpostCron
37
+ */
38
+ backup: BackUp,
39
+ };
40
+ static API = {
41
+ /**
42
+ * Run the cron jobs
43
+ * @static
44
+ * @param {String} deployList - Comma separated deploy ids
45
+ * @param {String} jobList - Comma separated job ids
46
+ * @return {void}
47
+ * @memberof UnderpostCron
48
+ */
49
+ callback: async function (
50
+ deployList = 'default',
51
+ jobList = Object.keys(UnderpostCron.JOB),
52
+ options = { itc: false, init: false, git: false },
53
+ ) {
54
+ if (options.init === true) {
55
+ const jobDeployId = fs.readFileSync('./engine-private/deploy/dd.cron', 'utf8').trim();
56
+ deployList = fs.readFileSync('./engine-private/deploy/dd.router', 'utf8').trim();
57
+ const confCronConfig = JSON.parse(fs.readFileSync(`./engine-private/conf/${jobDeployId}/conf.cron.json`));
58
+ if (confCronConfig.jobs && Object.keys(confCronConfig.jobs).length > 0) {
59
+ for (const job of Object.keys(confCronConfig.jobs)) {
60
+ const name = `${jobDeployId}-${job}`;
61
+ let deployId;
62
+ shellExec(Cmd.delete(name));
63
+ deployId = UnderpostCron.API.getRelatedDeployId(job);
64
+ shellExec(Cmd.cron(deployId, job, name, confCronConfig.jobs[job].expression, options));
65
+ }
66
+ }
67
+ return;
68
+ }
69
+ for (const _jobId of jobList.split(',')) {
70
+ const jobId = _jobId.trim();
71
+ if (UnderpostCron.JOB[jobId]) await UnderpostCron.JOB[jobId].callback(deployList, options);
72
+ }
73
+ },
74
+
75
+ /**
76
+ * Get the related deploy id for the given job id
77
+ * @static
78
+ * @param {String} jobId - The job id
79
+ * @return {String} The related deploy id
80
+ * @memberof UnderpostCron
81
+ */
82
+ getRelatedDeployId(jobId) {
83
+ switch (jobId) {
84
+ case 'dns':
85
+ return fs.readFileSync('./engine-private/deploy/dd.cron', 'utf8').trim();
86
+ case 'backup':
87
+ return fs.readFileSync('./engine-private/deploy/dd.router', 'utf8').trim();
88
+ default:
89
+ return fs.readFileSync('./engine-private/deploy/dd.cron', 'utf8').trim();
90
+ }
91
+ },
92
+ };
93
+ }
94
+
95
+ export default UnderpostCron;
package/src/cli/db.js ADDED
@@ -0,0 +1,414 @@
1
+ /**
2
+ * UnderpostDB CLI index module
3
+ * @module src/cli/db.js
4
+ * @namespace UnderpostDB
5
+ */
6
+
7
+ import { mergeFile, splitFileFactory } from '../server/conf.js';
8
+ import { loggerFactory } from '../server/logger.js';
9
+ import { shellExec } from '../server/process.js';
10
+ import fs from 'fs-extra';
11
+ import UnderpostDeploy from './deploy.js';
12
+ import UnderpostCron from './cron.js';
13
+ import { DataBaseProvider } from '../db/DataBaseProvider.js';
14
+ import { loadReplicas, pathPortAssignmentFactory } from '../server/conf.js';
15
+
16
+ const logger = loggerFactory(import.meta);
17
+
18
+ /**
19
+ * @class UnderpostDB
20
+ * @description Manages database operations and backups.
21
+ * This class provides a set of static methods to handle database operations,
22
+ * including importing and exporting data, managing database backups, and
23
+ * handling database connections for different providers (e.g., MariaDB, MongoDB).
24
+ * @memberof UnderpostDB
25
+ */
26
+ class UnderpostDB {
27
+ static API = {
28
+ /**
29
+ * @method callback
30
+ * @description Initiates a database backup workflow based on the provided options.
31
+ * This method orchestrates the backup process for multiple deployments, handling
32
+ * database connections, backup storage, and optional Git integration for version control.
33
+ * @param {string} [deployList='default'] - List of deployment IDs to include in the backup.
34
+ * @param {object} [options] - An object containing boolean flags for various operations.
35
+ * @param {boolean} [options.import=false] - Flag to import data from a backup.
36
+ * @param {boolean} [options.export=false] - Flag to export data to a backup.
37
+ * @param {string} [options.podName=false] - The name of the Kubernetes pod to use for database operations.
38
+ * @param {string} [options.ns=false] - The namespace to use for database operations.
39
+ * @param {string} [options.collections=''] - Comma-separated list of collections to include in the backup.
40
+ * @param {string} [options.outPath=''] - Output path for the backup file.
41
+ * @param {boolean} [options.drop=false] - Flag to drop the database before importing.
42
+ * @param {boolean} [options.preserveUUID=false] - Flag to preserve UUIDs during import.
43
+ * @param {boolean} [options.git=false] - Flag to enable Git integration for version control.
44
+ * @param {string} [options.hosts=''] - Comma-separated list of hosts to include in the backup.
45
+ * @param {string} [options.paths=''] - Comma-separated list of paths to include in the backup.
46
+ * @memberof UnderpostDB
47
+ */
48
+ async callback(
49
+ deployList = 'default',
50
+ options = {
51
+ import: false,
52
+ export: false,
53
+ podName: false,
54
+ ns: false,
55
+ collections: '',
56
+ outPath: '',
57
+ drop: false,
58
+ preserveUUID: false,
59
+ git: false,
60
+ hosts: '',
61
+ paths: '',
62
+ },
63
+ ) {
64
+ const newBackupTimestamp = new Date().getTime();
65
+ const nameSpace = options.ns && typeof options.ns === 'string' ? options.ns : 'default';
66
+ for (const _deployId of deployList.split(',')) {
67
+ const deployId = _deployId.trim();
68
+ if (!deployId) continue;
69
+ const dbs = {};
70
+ const repoName = `engine-${deployId.split('dd-')[1]}-cron-backups`;
71
+
72
+ const confServer = JSON.parse(fs.readFileSync(`./engine-private/conf/${deployId}/conf.server.json`, 'utf8'));
73
+ for (const host of Object.keys(confServer)) {
74
+ for (const path of Object.keys(confServer[host])) {
75
+ const { db } = confServer[host][path];
76
+ if (db) {
77
+ const { provider, name, user, password } = db;
78
+ if (!dbs[provider]) dbs[provider] = {};
79
+
80
+ if (!(name in dbs[provider]))
81
+ dbs[provider][name] = { user, password, hostFolder: host + path.replaceAll('/', '-'), host, path };
82
+ }
83
+ }
84
+ }
85
+
86
+ if (options.git === true) {
87
+ if (!fs.existsSync(`../${repoName}`)) {
88
+ shellExec(`cd .. && underpost clone ${process.env.GITHUB_USERNAME}/${repoName}`);
89
+ } else {
90
+ shellExec(`cd ../${repoName} && git checkout . && git clean -f -d`);
91
+ shellExec(`cd ../${repoName} && underpost pull . ${process.env.GITHUB_USERNAME}/${repoName}`);
92
+ }
93
+ }
94
+
95
+ for (const provider of Object.keys(dbs)) {
96
+ for (const dbName of Object.keys(dbs[provider])) {
97
+ const { hostFolder, user, password, host, path } = dbs[provider][dbName];
98
+ if (
99
+ (options.hosts && !options.hosts.split(',').includes(host)) ||
100
+ (options.paths && !options.paths.split(',').includes(path))
101
+ )
102
+ continue;
103
+ if (hostFolder) {
104
+ logger.info('', { hostFolder, provider, dbName });
105
+
106
+ const backUpPath = `../${repoName}/${hostFolder}`;
107
+ if (!fs.existsSync(backUpPath)) fs.mkdirSync(backUpPath, { recursive: true });
108
+ shellExec(`cd ${backUpPath} && find . -type d -empty -delete`); // delete empty folders
109
+ const times = await fs.readdir(backUpPath);
110
+ const currentBackupTimestamp = Math.max(...times.map((t) => parseInt(t)).filter((t) => !isNaN(t)));
111
+ dbs[provider][dbName].currentBackupTimestamp = currentBackupTimestamp;
112
+ const removeBackupTimestamp = Math.min(...times.map((t) => parseInt(t)).filter((t) => !isNaN(t)));
113
+
114
+ const sqlContainerPath = `/home/${dbName}.sql`;
115
+ const _fromPartsParts = `../${repoName}/${hostFolder}/${currentBackupTimestamp}/${dbName}-parths.json`;
116
+ const _toSqlPath = `../${repoName}/${hostFolder}/${currentBackupTimestamp}/${dbName}.sql`;
117
+ const _toNewSqlPath = `../${repoName}/${hostFolder}/${newBackupTimestamp}/${dbName}.sql`;
118
+ const _toBsonPath = `../${repoName}/${hostFolder}/${currentBackupTimestamp}/${dbName}`;
119
+ const _toNewBsonPath = `../${repoName}/${hostFolder}/${newBackupTimestamp}/${dbName}`;
120
+
121
+ if (options.import === true && fs.existsSync(_fromPartsParts) && !fs.existsSync(_toSqlPath)) {
122
+ const names = JSON.parse(fs.readFileSync(_fromPartsParts, 'utf8')).map((_path) => {
123
+ return `../${repoName}/${hostFolder}/${currentBackupTimestamp}/${_path.split('/').pop()}`;
124
+ });
125
+ logger.info('merge Back Up paths', {
126
+ _fromPartsParts,
127
+ _toSqlPath,
128
+ names,
129
+ });
130
+ await mergeFile(names, _toSqlPath);
131
+ }
132
+
133
+ if (options.export === true && times.length >= 5) {
134
+ logger.info('remove', `../${repoName}/${hostFolder}/${removeBackupTimestamp}`);
135
+ fs.removeSync(`../${repoName}/${hostFolder}/${removeBackupTimestamp}`);
136
+ logger.info('create', `../${repoName}/${hostFolder}/${newBackupTimestamp}`);
137
+ fs.mkdirSync(`../${repoName}/${hostFolder}/${newBackupTimestamp}`, { recursive: true });
138
+ }
139
+
140
+ switch (provider) {
141
+ case 'mariadb': {
142
+ const podNames =
143
+ options.podName && typeof options.podName === 'string'
144
+ ? options.podName.split(',')
145
+ : UnderpostDeploy.API.get('mariadb'); // `mariadb-statefulset-0`;
146
+ const serviceName = 'mariadb';
147
+ for (const podNameData of [podNames[0]]) {
148
+ const podName = podNameData.NAME;
149
+ if (options.import === true) {
150
+ shellExec(`sudo kubectl exec -i ${podName} -- sh -c "rm -rf /${dbName}.sql"`);
151
+ shellExec(`sudo kubectl cp ${_toSqlPath} ${nameSpace}/${podName}:/${dbName}.sql`);
152
+ const cmd = `mariadb -u ${user} -p${password} ${dbName} < /${dbName}.sql`;
153
+ shellExec(
154
+ `kubectl exec -i ${podName} -- ${serviceName} -p${password} -e 'CREATE DATABASE ${dbName};'`,
155
+ );
156
+ shellExec(`sudo kubectl exec -i ${podName} -- sh -c "${cmd}"`);
157
+ }
158
+ if (options.export === true) {
159
+ shellExec(`sudo kubectl exec -i ${podName} -- sh -c "rm -rf ${sqlContainerPath}"`);
160
+ const cmd = `mariadb-dump --user=${user} --password=${password} --lock-tables ${dbName} > ${sqlContainerPath}`;
161
+ shellExec(`sudo kubectl exec -i ${podName} -- sh -c "${cmd}"`);
162
+ shellExec(
163
+ `sudo kubectl cp ${nameSpace}/${podName}:${sqlContainerPath} ${
164
+ options.outPath ? options.outPath : _toNewSqlPath
165
+ }`,
166
+ );
167
+ await splitFileFactory(dbName, options.outPath ? options.outPath : _toNewSqlPath);
168
+ }
169
+ }
170
+ break;
171
+ }
172
+
173
+ case 'mongoose': {
174
+ if (options.import === true) {
175
+ const podNames =
176
+ options.podName && typeof options.podName === 'string'
177
+ ? options.podName.split(',')
178
+ : UnderpostDeploy.API.get('mongo');
179
+ // `mongodb-0`;
180
+ for (const podNameData of [podNames[0]]) {
181
+ const podName = podNameData.NAME;
182
+ shellExec(`sudo kubectl exec -i ${podName} -- sh -c "rm -rf /${dbName}"`);
183
+ shellExec(
184
+ `sudo kubectl cp ${
185
+ options.outPath ? options.outPath : _toBsonPath
186
+ } ${nameSpace}/${podName}:/${dbName}`,
187
+ );
188
+ const cmd = `mongorestore -d ${dbName} /${dbName}${options.drop ? ' --drop' : ''}${
189
+ options.preserveUUID ? ' --preserveUUID' : ''
190
+ }`;
191
+ shellExec(`sudo kubectl exec -i ${podName} -- sh -c "${cmd}"`);
192
+ }
193
+ }
194
+ if (options.export === true) {
195
+ const podNames =
196
+ options.podName && typeof options.podName === 'string'
197
+ ? options.podName.split(',')
198
+ : UnderpostDeploy.API.get('mongo'); // `backup-access`;
199
+ for (const podNameData of [podNames[0]]) {
200
+ const podName = podNameData.NAME;
201
+ shellExec(`sudo kubectl exec -i ${podName} -- sh -c "rm -rf /${dbName}"`);
202
+ if (options.collections)
203
+ for (const collection of options.collections.split(','))
204
+ shellExec(
205
+ `sudo kubectl exec -i ${podName} -- sh -c "mongodump -d ${dbName} --collection ${collection} -o /"`,
206
+ );
207
+ else shellExec(`sudo kubectl exec -i ${podName} -- sh -c "mongodump -d ${dbName} -o /"`);
208
+ shellExec(
209
+ `sudo kubectl cp ${nameSpace}/${podName}:/${dbName} ${
210
+ options.outPath ? options.outPath : _toNewBsonPath
211
+ }`,
212
+ );
213
+ }
214
+ }
215
+ break;
216
+ }
217
+
218
+ default:
219
+ break;
220
+ }
221
+ }
222
+ }
223
+ }
224
+ if (options.export === true && options.git === true) {
225
+ shellExec(`cd ../${repoName} && git add .`);
226
+ shellExec(
227
+ `underpost cmt ../${repoName} backup '' '${new Date(newBackupTimestamp).toLocaleDateString()} ${new Date(
228
+ newBackupTimestamp,
229
+ ).toLocaleTimeString()}'`,
230
+ );
231
+ shellExec(`cd ../${repoName} && underpost push . ${process.env.GITHUB_USERNAME}/${repoName}`, {
232
+ disableLog: true,
233
+ });
234
+ }
235
+ }
236
+ },
237
+
238
+ /**
239
+ * @method clusterMetadataFactory
240
+ * @description Creates a cluster metadata object for the specified deployment.
241
+ * This method loads database configuration and initializes a cluster metadata object
242
+ * using the provided deployment ID, host, and path.
243
+ * @param {string} [deployId=process.env.DEFAULT_DEPLOY_ID] - The deployment ID to use.
244
+ * @param {string} [host=process.env.DEFAULT_DEPLOY_HOST] - The host to use.
245
+ * @param {string} [path=process.env.DEFAULT_DEPLOY_PATH] - The path to use.
246
+ * @memberof UnderpostDB
247
+ */
248
+ async clusterMetadataFactory(
249
+ deployId = process.env.DEFAULT_DEPLOY_ID,
250
+ host = process.env.DEFAULT_DEPLOY_HOST,
251
+ path = process.env.DEFAULT_DEPLOY_PATH,
252
+ ) {
253
+ deployId = deployId ?? process.env.DEFAULT_DEPLOY_ID;
254
+ host = host ?? process.env.DEFAULT_DEPLOY_HOST;
255
+ path = path ?? process.env.DEFAULT_DEPLOY_PATH;
256
+ const env = 'production';
257
+ const deployList = fs.readFileSync('./engine-private/deploy/dd.router', 'utf8').split(',');
258
+
259
+ const { db } = JSON.parse(fs.readFileSync(`./engine-private/conf/${deployId}/conf.server.json`, 'utf8'))[host][
260
+ path
261
+ ];
262
+ try {
263
+ await DataBaseProvider.load({ apis: ['instance', 'cron'], host, path, db });
264
+
265
+ /** @type {import('../api/instance/instance.model.js').InstanceModel} */
266
+ const Instance = DataBaseProvider.instance[`${host}${path}`].mongoose.models.Instance;
267
+
268
+ await Instance.deleteMany();
269
+
270
+ for (const _deployId of deployList) {
271
+ const deployId = _deployId.trim();
272
+ if (!deployId) continue;
273
+ const confServer = loadReplicas(
274
+ JSON.parse(fs.readFileSync(`./engine-private/conf/${deployId}/conf.server.json`, 'utf8')),
275
+ );
276
+ const router = await UnderpostDeploy.API.routerFactory(deployId, env);
277
+ const pathPortAssignmentData = pathPortAssignmentFactory(router, confServer);
278
+
279
+ for (const host of Object.keys(confServer)) {
280
+ for (const { path, port } of pathPortAssignmentData[host]) {
281
+ if (!confServer[host][path]) continue;
282
+
283
+ const { client, runtime, apis, peer } = confServer[host][path];
284
+ {
285
+ const body = {
286
+ deployId,
287
+ host,
288
+ path,
289
+ port,
290
+ client,
291
+ runtime,
292
+ apis,
293
+ };
294
+
295
+ logger.info('Instance save', body);
296
+ await new Instance(body).save();
297
+ }
298
+
299
+ if (peer) {
300
+ const body = {
301
+ deployId,
302
+ host,
303
+ path: path === '/' ? '/peer' : `${path}/peer`,
304
+ port: port + 1,
305
+ runtime: 'nodejs',
306
+ };
307
+
308
+ logger.info('Instance save', body);
309
+ await new Instance(body).save();
310
+ }
311
+ }
312
+ }
313
+ }
314
+ } catch (error) {
315
+ logger.error(error, error.stack);
316
+ }
317
+
318
+ try {
319
+ const cronDeployId = fs.readFileSync('./engine-private/deploy/dd.cron', 'utf8').trim();
320
+ const confCronPath = `./engine-private/conf/${cronDeployId}/conf.cron.json`;
321
+ const confCron = JSON.parse(fs.readFileSync(confCronPath, 'utf8'));
322
+
323
+ await DataBaseProvider.load({ apis: ['cron'], host, path, db });
324
+
325
+ /** @type {import('../api/cron/cron.model.js').CronModel} */
326
+ const Cron = DataBaseProvider.instance[`${host}${path}`].mongoose.models.Cron;
327
+
328
+ await Cron.deleteMany();
329
+
330
+ for (const jobId of Object.keys(confCron.jobs)) {
331
+ const body = {
332
+ jobId,
333
+ deployId: UnderpostCron.API.getRelatedDeployId(jobId),
334
+ expression: confCron.jobs[jobId].expression,
335
+ enabled: confCron.jobs[jobId].enabled,
336
+ };
337
+ logger.info('Cron save', body);
338
+ await new Cron(body).save();
339
+ }
340
+ } catch (error) {
341
+ logger.error(error, error.stack);
342
+ }
343
+ await DataBaseProvider.instance[`${host}${path}`].mongoose.close();
344
+ },
345
+
346
+ /**
347
+ * @method clusterMetadataBackupCallback
348
+ * @description Handles the backup of cluster metadata for the specified deployment.
349
+ * This method orchestrates the backup process for cluster metadata, including
350
+ * instances and crons, and handles optional Git integration for version control.
351
+ * @param {string} [deployId=process.env.DEFAULT_DEPLOY_ID] - The deployment ID to use.
352
+ * @param {string} [host=process.env.DEFAULT_DEPLOY_HOST] - The host to use.
353
+ * @param {string} [path=process.env.DEFAULT_DEPLOY_PATH] - The path to use.
354
+ * @param {object} [options] - An object containing boolean flags for various operations.
355
+ * @param {boolean} [options.generate=false] - Flag to generate cluster metadata.
356
+ * @param {boolean} [options.itc=false] - Flag to enable Git integration for version control.
357
+ * @param {boolean} [options.import=false] - Flag to import data from a backup.
358
+ * @param {boolean} [options.export=false] - Flag to export data to a backup.
359
+ * @param {boolean} [options.instances=false] - Flag to backup instances.
360
+ * @param {boolean} [options.crons=false] - Flag to backup crons.
361
+ * @memberof UnderpostDB
362
+ */
363
+ clusterMetadataBackupCallback(
364
+ deployId = process.env.DEFAULT_DEPLOY_ID,
365
+ host = process.env.DEFAULT_DEPLOY_HOST,
366
+ path = process.env.DEFAULT_DEPLOY_PATH,
367
+ options = {
368
+ generate: false,
369
+ itc: false,
370
+ import: false,
371
+ export: false,
372
+ instances: false,
373
+ crons: false,
374
+ },
375
+ ) {
376
+ deployId = deployId ?? process.env.DEFAULT_DEPLOY_ID;
377
+ host = host ?? process.env.DEFAULT_DEPLOY_HOST;
378
+ path = path ?? process.env.DEFAULT_DEPLOY_PATH;
379
+
380
+ if (options.generate === true) {
381
+ UnderpostDB.API.clusterMetadataFactory(deployId, host, path);
382
+ }
383
+
384
+ if (options.instances === true) {
385
+ const outputPath = './engine-private/instances';
386
+ if (fs.existsSync(outputPath)) fs.mkdirSync(outputPath, { recursive: true });
387
+ const collection = 'instances';
388
+ if (options.export === true)
389
+ shellExec(
390
+ `node bin db --export --collections ${collection} --out-path ${outputPath} --hosts ${host} --paths '${path}' ${deployId}`,
391
+ );
392
+ if (options.import === true)
393
+ shellExec(
394
+ `node bin db --import --drop --preserveUUID --out-path ${outputPath} --hosts ${host} --paths '${path}' ${deployId}`,
395
+ );
396
+ }
397
+ if (options.crons === true) {
398
+ const outputPath = './engine-private/crons';
399
+ if (fs.existsSync(outputPath)) fs.mkdirSync(outputPath, { recursive: true });
400
+ const collection = 'crons';
401
+ if (options.export === true)
402
+ shellExec(
403
+ `node bin db --export --collections ${collection} --out-path ${outputPath} --hosts ${host} --paths '${path}' ${deployId}`,
404
+ );
405
+ if (options.import === true)
406
+ shellExec(
407
+ `node bin db --import --drop --preserveUUID --out-path ${outputPath} --hosts ${host} --paths '${path}' ${deployId}`,
408
+ );
409
+ }
410
+ },
411
+ };
412
+ }
413
+
414
+ export default UnderpostDB;