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,69 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { InstanceService } from './instance.service.js';
3
+
4
+ const logger = loggerFactory(import.meta);
5
+
6
+ const InstanceController = {
7
+ post: async (req, res, options) => {
8
+ try {
9
+ const result = await InstanceService.post(req, res, options);
10
+ return res.status(200).json({
11
+ status: 'success',
12
+ data: result,
13
+ });
14
+ } catch (error) {
15
+ logger.error(error, error.stack);
16
+ return res.status(400).json({
17
+ status: 'error',
18
+ message: error.message,
19
+ });
20
+ }
21
+ },
22
+ get: async (req, res, options) => {
23
+ try {
24
+ const result = await InstanceService.get(req, res, options);
25
+ return res.status(200).json({
26
+ status: 'success',
27
+ data: result,
28
+ });
29
+ } catch (error) {
30
+ logger.error(error, error.stack);
31
+ return res.status(400).json({
32
+ status: 'error',
33
+ message: error.message,
34
+ });
35
+ }
36
+ },
37
+ put: async (req, res, options) => {
38
+ try {
39
+ const result = await InstanceService.put(req, res, options);
40
+ return res.status(200).json({
41
+ status: 'success',
42
+ data: result,
43
+ });
44
+ } catch (error) {
45
+ logger.error(error, error.stack);
46
+ return res.status(400).json({
47
+ status: 'error',
48
+ message: error.message,
49
+ });
50
+ }
51
+ },
52
+ delete: async (req, res, options) => {
53
+ try {
54
+ const result = await InstanceService.delete(req, res, options);
55
+ return res.status(200).json({
56
+ status: 'success',
57
+ data: result,
58
+ });
59
+ } catch (error) {
60
+ logger.error(error, error.stack);
61
+ return res.status(400).json({
62
+ status: 'error',
63
+ message: error.message,
64
+ });
65
+ }
66
+ },
67
+ };
68
+
69
+ export { InstanceController };
@@ -0,0 +1,40 @@
1
+ import { Schema, model, Types } from 'mongoose';
2
+
3
+ // https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
4
+
5
+ const InstanceSchema = new Schema(
6
+ {
7
+ deployId: { type: String },
8
+ host: { type: String },
9
+ path: { type: String },
10
+ port: { type: String },
11
+ client: { type: String },
12
+ runtime: { type: String },
13
+ userId: {
14
+ type: Schema.Types.ObjectId,
15
+ ref: 'User',
16
+ },
17
+ apis: [{ type: String }],
18
+ },
19
+ {
20
+ timestamps: true,
21
+ },
22
+ );
23
+
24
+ const InstanceDto = {
25
+ populate: {
26
+ get: () => {
27
+ return {
28
+ path: 'userId',
29
+ model: 'User',
30
+ select: '_id email',
31
+ };
32
+ },
33
+ },
34
+ };
35
+
36
+ const InstanceModel = model('Instance', InstanceSchema);
37
+
38
+ const ProviderSchema = InstanceSchema;
39
+
40
+ export { InstanceSchema, InstanceModel, ProviderSchema, InstanceDto };
@@ -0,0 +1,34 @@
1
+ import { adminGuard } from '../../server/auth.js';
2
+ import { loggerFactory } from '../../server/logger.js';
3
+ import { InstanceController } from './instance.controller.js';
4
+ import express from 'express';
5
+
6
+ const logger = loggerFactory(import.meta);
7
+
8
+ const InstanceRouter = (options) => {
9
+ const router = express.Router();
10
+ const authMiddleware = options.authMiddleware;
11
+ router.post(`/:id`, authMiddleware, adminGuard, async (req, res) => await InstanceController.post(req, res, options));
12
+ router.post(`/`, authMiddleware, adminGuard, async (req, res) => await InstanceController.post(req, res, options));
13
+ router.get(`/:id`, authMiddleware, adminGuard, async (req, res) => await InstanceController.get(req, res, options));
14
+ router.get(`/`, authMiddleware, async (req, res) => await InstanceController.get(req, res, options));
15
+ router.put(`/:id`, authMiddleware, adminGuard, async (req, res) => await InstanceController.put(req, res, options));
16
+ router.put(`/`, authMiddleware, adminGuard, async (req, res) => await InstanceController.put(req, res, options));
17
+ router.delete(
18
+ `/:id`,
19
+ authMiddleware,
20
+ adminGuard,
21
+ async (req, res) => await InstanceController.delete(req, res, options),
22
+ );
23
+ router.delete(
24
+ `/`,
25
+ authMiddleware,
26
+ adminGuard,
27
+ async (req, res) => await InstanceController.delete(req, res, options),
28
+ );
29
+ return router;
30
+ };
31
+
32
+ const ApiRouter = InstanceRouter;
33
+
34
+ export { ApiRouter, InstanceRouter };
@@ -0,0 +1,70 @@
1
+ import { DataBaseProvider } from '../../db/DataBaseProvider.js';
2
+ import { loggerFactory } from '../../server/logger.js';
3
+ import { InstanceDto } from './instance.model.js';
4
+
5
+ const logger = loggerFactory(import.meta);
6
+
7
+ const InstanceService = {
8
+ post: async (req, res, options) => {
9
+ /** @type {import('./instance.model.js').InstanceModel} */
10
+ const Instance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Instance;
11
+ return await new Instance(req.body).save();
12
+ },
13
+ get: async (req, res, options) => {
14
+ /** @type {import('./instance.model.js').InstanceModel} */
15
+ const Instance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Instance;
16
+
17
+ /** @type {import('../user/user.model.js').UserModel} */
18
+ const User = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.User;
19
+
20
+ const user = await User.findOne({
21
+ _id: req.auth.user._id,
22
+ });
23
+ switch (req.params.id) {
24
+ case 'count': {
25
+ switch (user.role) {
26
+ case 'admin':
27
+ return { total: await Instance.countDocuments() };
28
+ default:
29
+ return { total: await Instance.countDocuments({ userId: req.auth.user._id }) };
30
+ }
31
+ }
32
+ default:
33
+ const { page = 1, limit = 10, sort = { updatedAt: -1 } } = req.query;
34
+ const skip = (page - 1) * limit;
35
+
36
+ switch (user.role) {
37
+ case 'admin':
38
+ if (req.params.id) return await Instance.findById(req.params.id);
39
+ const [dataAdmin, totalAdmin] = await Promise.all([
40
+ Instance.find({}).sort(sort).limit(limit).skip(skip).populate(InstanceDto.populate.get()),
41
+ Instance.countDocuments({}),
42
+ ]);
43
+ return { data: dataAdmin, total: totalAdmin, page, totalPages: Math.ceil(totalAdmin / limit) };
44
+ default:
45
+ const [dataUser, totalUser] = await Promise.all([
46
+ Instance.find({ userId: req.auth.user._id })
47
+ .sort(sort)
48
+ .limit(limit)
49
+ .skip(skip)
50
+ .populate(InstanceDto.populate.get()),
51
+ Instance.countDocuments({ userId: req.auth.user._id }),
52
+ ]);
53
+ return { data: dataUser, total: totalUser, page, totalPages: Math.ceil(totalUser / limit) };
54
+ }
55
+ }
56
+ },
57
+ put: async (req, res, options) => {
58
+ /** @type {import('./instance.model.js').InstanceModel} */
59
+ const Instance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Instance;
60
+ return await Instance.findByIdAndUpdate(req.params.id, req.body);
61
+ },
62
+ delete: async (req, res, options) => {
63
+ /** @type {import('./instance.model.js').InstanceModel} */
64
+ const Instance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Instance;
65
+ if (req.params.id) return await Instance.findByIdAndDelete(req.params.id);
66
+ else return await Instance.deleteMany();
67
+ },
68
+ };
69
+
70
+ export { InstanceService };
@@ -0,0 +1,51 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { IPFSService } from './ipfs.service.js';
3
+ const logger = loggerFactory(import.meta);
4
+
5
+ const IPFSController = {
6
+ post: async (req, res, options) => {
7
+ try {
8
+ return res.status(200).json({
9
+ status: 'success',
10
+ data: await IPFSService.post(req, res, options),
11
+ });
12
+ } catch (error) {
13
+ logger.error(error, error.stack);
14
+ return res.status(400).json({
15
+ status: 'error',
16
+ message: error.message,
17
+ });
18
+ }
19
+ },
20
+ get: async (req, res, options) => {
21
+ try {
22
+ return res.status(200).json({
23
+ status: 'success',
24
+ data: await IPFSService.get(req, res, options),
25
+ });
26
+ } catch (error) {
27
+ logger.error(error, error.stack);
28
+ return res.status(400).json({
29
+ status: 'error',
30
+ message: error.message,
31
+ });
32
+ }
33
+ },
34
+ delete: async (req, res, options) => {
35
+ try {
36
+ const result = await IPFSService.delete(req, res, options);
37
+ return res.status(200).json({
38
+ status: 'success',
39
+ data: result,
40
+ });
41
+ } catch (error) {
42
+ logger.error(error, error.stack);
43
+ return res.status(400).json({
44
+ status: 'error',
45
+ message: error.message,
46
+ });
47
+ }
48
+ },
49
+ };
50
+
51
+ export { IPFSController };
@@ -0,0 +1,17 @@
1
+ import { Schema, model } from 'mongoose';
2
+
3
+ // https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
4
+
5
+ const PinSchema = new Schema({
6
+ userId: {
7
+ type: Schema.Types.ObjectId,
8
+ ref: 'User',
9
+ },
10
+ cid: { type: String },
11
+ });
12
+
13
+ const PinModel = model('Pin', PinSchema);
14
+
15
+ const ProviderSchema = PinSchema;
16
+
17
+ export { PinSchema, PinModel, ProviderSchema };
@@ -0,0 +1,20 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { IPFSController } from './ipfs.controller.js';
3
+ import express from 'express';
4
+ const logger = loggerFactory(import.meta);
5
+
6
+ const IPFSRouter = (options) => {
7
+ const router = express.Router();
8
+ const authMiddleware = options.authMiddleware;
9
+ router.post(`/:id`, async (req, res) => await IPFSController.post(req, res, options));
10
+ router.post(`/`, authMiddleware, async (req, res) => await IPFSController.post(req, res, options));
11
+ router.get(`/:id`, async (req, res) => await IPFSController.get(req, res, options));
12
+ router.get(`/`, async (req, res) => await IPFSController.get(req, res, options));
13
+ router.delete(`/:id`, async (req, res) => await IPFSController.delete(req, res, options));
14
+ router.delete(`/`, async (req, res) => await IPFSController.delete(req, res, options));
15
+ return router;
16
+ };
17
+
18
+ const ApiRouter = IPFSRouter;
19
+
20
+ export { ApiRouter, IPFSRouter };
@@ -0,0 +1,25 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import dotenv from 'dotenv';
3
+
4
+ dotenv.config();
5
+ const logger = loggerFactory(import.meta);
6
+
7
+ const IPFSService = {
8
+ post: async (req, res, options) => {
9
+ switch (req.params.id) {
10
+ default:
11
+ }
12
+ },
13
+ get: async (req, res, options) => {
14
+ switch (req.params.id) {
15
+ default:
16
+ }
17
+ },
18
+ delete: async (req, res, options) => {
19
+ switch (req.params.id) {
20
+ default:
21
+ }
22
+ },
23
+ };
24
+
25
+ export { IPFSService };
@@ -0,0 +1,85 @@
1
+ <p align="center">
2
+ <img src="https://www.cyberiaonline.com/assets/splash/apple-touch-icon-precomposed.png" alt="CYBERIA Network Object Layer Engine CLI"/>
3
+ </p>
4
+
5
+ <div align="center">
6
+
7
+ <h1>cyberia</h1>
8
+
9
+ <h2>Network Object Layer Engine CLI</h2>
10
+
11
+ [![Downloads](https://img.shields.io/npm/dm/cyberia.svg)](https://www.npmjs.com/package/cyberia) [![Version](https://img.shields.io/npm/v/cyberia.svg)](https://www.npmjs.org/package/cyberia)
12
+
13
+ </div>
14
+
15
+ This Command Line Interface (CLI) is a core tool for the **Cyberia Network Object Layer Engine**, specifically designed for processing, generating, and managing game assets, primarily **Object Layer** elements like skins, floors, and weapons.
16
+
17
+ It handles image asset quantization, generates data matrices and color palettes, and persists the resulting structured data into the game's database.
18
+
19
+ ## **🚀 Getting Started**
20
+
21
+ ### **Prerequisites**
22
+
23
+ You must have the following installed in your environment:
24
+
25
+ - **Node.js** (v24.10.0 recommended)
26
+ - **npm** or **yarn**
27
+ - **MongoDB** (or access to the configured MongoDB instance)
28
+
29
+ ### **Installation**
30
+
31
+ 1. **Clone the Repository** (If applicable):
32
+ git clone \[Your Repository URL\]
33
+ cd \[Your Project Directory\]
34
+
35
+ 2. **Install Dependencies:**
36
+ npm install
37
+ \# or
38
+ yarn install
39
+
40
+ 3. Environment Setup:
41
+ Ensure your required environment variables (e.g., DEFAULT_DEPLOY_ID, DEFAULT_DEPLOY_HOST, DEFAULT_DEPLOY_PATH) are correctly configured, typically in a .env file, to point the CLI to the correct database instance defined in conf.server.json.
42
+
43
+ ## **🛠️ Usage**
44
+
45
+ The CLI is executed via Node.js, running the primary script cyberia.js. You can use your project's package.json scripts or run it directly.
46
+
47
+ The main execution pattern is:
48
+
49
+ node cyberia.js \[command\] \[options\]
50
+
51
+ ### **Main Commands**
52
+
53
+ #### **1\. Processing and Saving Object Layer Assets**
54
+
55
+ The primary function of this CLI is to process raw PNG/GIF assets, convert them into game-ready tile matrices and color palettes, and store the final data object in the database.
56
+
57
+ | Option | Description |
58
+ | :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
59
+ | \--process-object-layer | Iterates through all asset directories (/cyberia/assets/{type}/{id}/{direction}/{frame}), runs the frameFactory quantization logic, generates map_color and frame_matrix, and saves the final object to the database (with a SHA-256 hash). |
60
+
61
+ **Example:** To process all defined assets (skins, floors, etc.):
62
+
63
+ node cyberia.js \--process-object-layer
64
+
65
+ #### **2\. Visualizing Processed Frames**
66
+
67
+ This command allows developers to quickly visualize a single processed frame matrix, regenerating a standard PNG image from the tile data. This is useful for debugging the asset processing and quantization logic.
68
+
69
+ | Option | Format | Description |
70
+ | :------------ | :--------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- |
71
+ | \--show-frame | objectLayerId_direction_frameIndex | Takes a processed asset ID, direction, and frame index, reconstructs the PNG, saves it locally, and opens it using firefox. |
72
+
73
+ **Example:** To show the first frame (index 0\) of the skin-001 asset in direction 08:
74
+
75
+ node cyberia.js \--show-frame skin-001_08_0
76
+
77
+ This will create a file named skin-001_08_0.png in the current directory and open it.
78
+
79
+ ## **⚙️ Core Logic (from object-layer.js)**
80
+
81
+ The CLI relies on the logic provided by the ObjectLayerEngine class, which handles:
82
+
83
+ - **pngDirectoryIteratorByObjectLayerType**: Walks the file system to find all relevant asset files.
84
+ - **frameFactory**: The core image processing method that converts raw image data (PNG/GIF) into a grid of color indices (frame_matrix) and a global color palette (map_color).
85
+ - **buildImgFromTile**: Reverses the process, taking the stored frame_matrix and map_color to reconstruct and save a visual PNG.
@@ -0,0 +1,69 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { ObjectLayerService } from './object-layer.service.js';
3
+
4
+ const logger = loggerFactory(import.meta);
5
+
6
+ const ObjectLayerController = {
7
+ post: async (req, res, options) => {
8
+ try {
9
+ const result = await ObjectLayerService.post(req, res, options);
10
+ return res.status(200).json({
11
+ status: 'success',
12
+ data: result,
13
+ });
14
+ } catch (error) {
15
+ logger.error(error, error.stack);
16
+ return res.status(400).json({
17
+ status: 'error',
18
+ message: error.message,
19
+ });
20
+ }
21
+ },
22
+ get: async (req, res, options) => {
23
+ try {
24
+ const result = await ObjectLayerService.get(req, res, options);
25
+ return res.status(200).json({
26
+ status: 'success',
27
+ data: result,
28
+ });
29
+ } catch (error) {
30
+ logger.error(error, error.stack);
31
+ return res.status(400).json({
32
+ status: 'error',
33
+ message: error.message,
34
+ });
35
+ }
36
+ },
37
+ put: async (req, res, options) => {
38
+ try {
39
+ const result = await ObjectLayerService.put(req, res, options);
40
+ return res.status(200).json({
41
+ status: 'success',
42
+ data: result,
43
+ });
44
+ } catch (error) {
45
+ logger.error(error, error.stack);
46
+ return res.status(400).json({
47
+ status: 'error',
48
+ message: error.message,
49
+ });
50
+ }
51
+ },
52
+ delete: async (req, res, options) => {
53
+ try {
54
+ const result = await ObjectLayerService.delete(req, res, options);
55
+ return res.status(200).json({
56
+ status: 'success',
57
+ data: result,
58
+ });
59
+ } catch (error) {
60
+ logger.error(error, error.stack);
61
+ return res.status(400).json({
62
+ status: 'error',
63
+ message: error.message,
64
+ });
65
+ }
66
+ },
67
+ };
68
+
69
+ export { ObjectLayerController };
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Object layer model for managing the generation and deployment of cloud-init configuration files
3
+ * and associated scripts for baremetal provisioning.
4
+ * @module src/api/object-layer/object-layer.model.js
5
+ * @namespace CyberiaObjectLayerModel
6
+ */
7
+
8
+ import { Schema, model } from 'mongoose';
9
+
10
+ /**
11
+ * @typedef {Object} Stats
12
+ * @property {number} effect - The effect attribute value
13
+ * @property {number} resistance - The resistance attribute value
14
+ * @property {number} agility - The agility attribute value
15
+ * @property {number} range - The range attribute value
16
+ * @property {number} intelligence - The intelligence attribute value
17
+ * @property {number} utility - The utility attribute value
18
+ * @memberof CyberiaObjectLayerModel
19
+ */
20
+ const StatsSchema = new Schema(
21
+ {
22
+ effect: { type: Number, required: true, min: 0 },
23
+ resistance: { type: Number, required: true, min: 0 },
24
+ agility: { type: Number, required: true, min: 0 },
25
+ range: { type: Number, required: true, min: 0 },
26
+ intelligence: { type: Number, required: true, min: 0 },
27
+ utility: { type: Number, required: true, min: 0 },
28
+ },
29
+ { _id: false },
30
+ );
31
+
32
+ /**
33
+ * @typedef {Object} RenderFrames
34
+ * @property {number[][][]} up_idle - Up idle animation frames
35
+ * @property {number[][][]} down_idle - Down idle animation frames
36
+ * @property {number[][][]} right_idle - Right idle animation frames
37
+ * @property {number[][][]} left_idle - Left idle animation frames
38
+ * @property {number[][][]} up_right_idle - Up-right idle animation frames
39
+ * @property {number[][][]} down_right_idle - Down-right idle animation frames
40
+ * @property {number[][][]} up_left_idle - Up-left idle animation frames
41
+ * @property {number[][][]} down_left_idle - Down-left idle animation frames
42
+ * @property {number[][][]} default_idle - Default idle animation frames
43
+ * @property {number[][][]} up_walking - Up walking animation frames
44
+ * @property {number[][][]} down_walking - Down walking animation frames
45
+ * @property {number[][][]} right_walking - Right walking animation frames
46
+ * @property {number[][][]} left_walking - Left walking animation frames
47
+ * @property {number[][][]} up_right_walking - Up-right walking animation frames
48
+ * @property {number[][][]} down_right_walking - Down-right walking frames
49
+ * @property {number[][][]} up_left_walking - Up-left walking animation frames
50
+ * @property {number[][][]} down_left_walking - Down-left walking frames
51
+ * @property {number[][][]} none_idle - None state animation frames
52
+ * @memberof CyberiaObjectLayerModel
53
+ */
54
+ const RenderFramesSchema = new Schema(
55
+ {
56
+ up_idle: { type: [[[Number]]], default: [] },
57
+ down_idle: { type: [[[Number]]], default: [] },
58
+ right_idle: { type: [[[Number]]], default: [] },
59
+ left_idle: { type: [[[Number]]], default: [] },
60
+ up_right_idle: { type: [[[Number]]], default: [] },
61
+ down_right_idle: { type: [[[Number]]], default: [] },
62
+ up_left_idle: { type: [[[Number]]], default: [] },
63
+ down_left_idle: { type: [[[Number]]], default: [] },
64
+ default_idle: { type: [[[Number]]], default: [] },
65
+ up_walking: { type: [[[Number]]], default: [] },
66
+ down_walking: { type: [[[Number]]], default: [] },
67
+ right_walking: { type: [[[Number]]], default: [] },
68
+ left_walking: { type: [[[Number]]], default: [] },
69
+ up_right_walking: { type: [[[Number]]], default: [] },
70
+ down_right_walking: { type: [[[Number]]], default: [] },
71
+ up_left_walking: { type: [[[Number]]], default: [] },
72
+ down_left_walking: { type: [[[Number]]], default: [] },
73
+ none_idle: { type: [[[Number]]], default: [] },
74
+ },
75
+ { _id: false },
76
+ );
77
+
78
+ /**
79
+ * @typedef {Object} Render
80
+ * @property {RenderFrames} frames - Animation frames for different states
81
+ * @property {number[][]} colors - Color palette for rendering
82
+ * @property {number} frame_duration - Duration of each frame in milliseconds
83
+ * @property {boolean} is_stateless - Whether the render is stateless
84
+ * @memberof CyberiaObjectLayerModel
85
+ */
86
+ const RenderSchema = new Schema(
87
+ {
88
+ frames: { type: RenderFramesSchema, required: true },
89
+ colors: { type: [[Number]], required: true },
90
+ frame_duration: { type: Number, required: true, min: 0 },
91
+ is_stateless: { type: Boolean, default: false },
92
+ },
93
+ { _id: false },
94
+ );
95
+
96
+ /**
97
+ * @typedef {Object} Item
98
+ * @property {string} id - Unique identifier for the item
99
+ * @property {string} type - Type of the item
100
+ * @property {string} description - Description of the item
101
+ * @property {boolean} activable - Whether the item can be activated
102
+ * @memberof CyberiaObjectLayerModel
103
+ */
104
+ const ItemSchema = new Schema(
105
+ {
106
+ id: { type: String, required: true, trim: true },
107
+ type: { type: String, required: true, trim: true },
108
+ description: { type: String, default: '', trim: true },
109
+ activable: { type: Boolean, default: false },
110
+ },
111
+ { _id: false },
112
+ );
113
+
114
+ /**
115
+ * @typedef {Object} ObjectLayer
116
+ * @property {Object} data - Object layer data
117
+ * @property {Data.Stats} data.stats - Statistical attributes of the object layer
118
+ * @property {Data.Render} data.render - Rendering information and animations
119
+ * @property {Data.Item} data.item - Item information this layer represents
120
+ * @property {string} sha256 - SHA-256 hash of the object layer data
121
+ * @property {Date} createdAt - When the document was created
122
+ * @property {Date} updatedAt - When the document was last updated
123
+ * @memberof CyberiaObjectLayerModel
124
+ */
125
+ const ObjectLayerSchema = new Schema(
126
+ {
127
+ data: {
128
+ stats: { type: StatsSchema, required: true },
129
+ render: { type: RenderSchema, required: true },
130
+ item: { type: ItemSchema, required: true },
131
+ },
132
+ sha256: {
133
+ type: String,
134
+ required: true,
135
+ unique: true,
136
+ match: [/^[a-f0-9]{64}$/, 'Please provide a valid SHA-256 hash'],
137
+ },
138
+ },
139
+ {
140
+ timestamps: true,
141
+ toJSON: { virtuals: true },
142
+ toObject: { virtuals: true },
143
+ },
144
+ );
145
+
146
+ // Index for faster querying
147
+ ObjectLayerSchema.index({ 'data.item.id': 1 });
148
+ ObjectLayerSchema.index({ 'data.item.type': 1 });
149
+ ObjectLayerSchema.index({ sha256: 1 }, { unique: true });
150
+
151
+ // Add text index for searchable fields
152
+ ObjectLayerSchema.index(
153
+ {
154
+ 'data.item.id': 'text',
155
+ 'data.item.type': 'text',
156
+ 'data.item.description': 'text',
157
+ },
158
+ {
159
+ weights: {
160
+ 'data.item.id': 10,
161
+ 'data.item.type': 5,
162
+ 'data.item.description': 1,
163
+ },
164
+ },
165
+ );
166
+
167
+ // Pre-save hook to ensure data consistency
168
+ ObjectLayerSchema.pre('save', function (next) {
169
+ // Ensure all required fields are present
170
+ if (!this.data.stats || !this.data.render || !this.data.item || !this.sha256) {
171
+ throw new Error('Missing required fields');
172
+ }
173
+ next();
174
+ });
175
+
176
+ // Create and export the model
177
+ const ObjectLayerModel = model('ObjectLayer', ObjectLayerSchema);
178
+
179
+ const ProviderSchema = ObjectLayerSchema;
180
+
181
+ export { ObjectLayerSchema, ObjectLayerModel, ProviderSchema };