cyberia 2.8.885

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/.dockerignore +15 -0
  2. package/.env.development +45 -0
  3. package/.env.production +50 -0
  4. package/.env.test +45 -0
  5. package/.github/workflows/engine-cyberia.cd.yml +31 -0
  6. package/.github/workflows/engine-cyberia.ci.yml +60 -0
  7. package/.github/workflows/ghpkg.ci.yml +87 -0
  8. package/.github/workflows/npmpkg.ci.yml +72 -0
  9. package/.github/workflows/publish.ci.yml +84 -0
  10. package/.github/workflows/publish.cyberia.ci.yml +84 -0
  11. package/.github/workflows/pwa-microservices-template-page.cd.yml +72 -0
  12. package/.github/workflows/pwa-microservices-template-test.ci.yml +33 -0
  13. package/.github/workflows/release.cd.yml +37 -0
  14. package/.nycrc +9 -0
  15. package/.prettierignore +13 -0
  16. package/.prettierrc +9 -0
  17. package/.vscode/extensions.json +51 -0
  18. package/.vscode/settings.json +87 -0
  19. package/AUTHORS.md +21 -0
  20. package/CHANGELOG.md +205 -0
  21. package/Dockerfile +28 -0
  22. package/LICENSE +21 -0
  23. package/README.md +85 -0
  24. package/bin/build.js +209 -0
  25. package/bin/cron.js +47 -0
  26. package/bin/cyberia.js +145 -0
  27. package/bin/db.js +199 -0
  28. package/bin/deploy.js +1293 -0
  29. package/bin/file.js +197 -0
  30. package/bin/hwt.js +49 -0
  31. package/bin/index.js +145 -0
  32. package/bin/ssl.js +63 -0
  33. package/bin/util.js +80 -0
  34. package/bin/vs.js +74 -0
  35. package/cli.md +714 -0
  36. package/conf.js +204 -0
  37. package/deployment.yaml +138 -0
  38. package/jsconfig.json +7 -0
  39. package/jsdoc.json +32 -0
  40. package/manifests/deployment/adminer/deployment.yaml +32 -0
  41. package/manifests/deployment/adminer/kustomization.yaml +7 -0
  42. package/manifests/deployment/adminer/service.yaml +13 -0
  43. package/manifests/deployment/dd-default-development/deployment.yaml +167 -0
  44. package/manifests/deployment/dd-default-development/proxy.yaml +46 -0
  45. package/manifests/deployment/dd-test-development/deployment.yaml +174 -0
  46. package/manifests/deployment/dd-test-development/proxy.yaml +51 -0
  47. package/manifests/deployment/fastapi/backend-deployment.yml +120 -0
  48. package/manifests/deployment/fastapi/backend-service.yml +19 -0
  49. package/manifests/deployment/fastapi/frontend-deployment.yml +54 -0
  50. package/manifests/deployment/fastapi/frontend-service.yml +15 -0
  51. package/manifests/deployment/fastapi/initial_data.sh +56 -0
  52. package/manifests/deployment/kafka/deployment.yaml +69 -0
  53. package/manifests/deployment/mongo-express/deployment.yaml +60 -0
  54. package/manifests/deployment/phpmyadmin/deployment.yaml +54 -0
  55. package/manifests/deployment/spark/spark-pi-py.yaml +21 -0
  56. package/manifests/deployment/tensorflow/tf-gpu-test.yaml +65 -0
  57. package/manifests/envoy-service-nodeport.yaml +23 -0
  58. package/manifests/grafana/deployment.yaml +57 -0
  59. package/manifests/grafana/kustomization.yaml +7 -0
  60. package/manifests/grafana/pvc.yaml +12 -0
  61. package/manifests/grafana/service.yaml +14 -0
  62. package/manifests/kind-config-dev.yaml +12 -0
  63. package/manifests/kind-config.yaml +12 -0
  64. package/manifests/kubeadm-calico-config.yaml +119 -0
  65. package/manifests/kubelet-config.yaml +65 -0
  66. package/manifests/letsencrypt-prod.yaml +15 -0
  67. package/manifests/lxd/lxd-admin-profile.yaml +17 -0
  68. package/manifests/lxd/lxd-preseed.yaml +30 -0
  69. package/manifests/lxd/underpost-setup.sh +163 -0
  70. package/manifests/mariadb/config.yaml +10 -0
  71. package/manifests/mariadb/kustomization.yaml +9 -0
  72. package/manifests/mariadb/pv.yaml +12 -0
  73. package/manifests/mariadb/pvc.yaml +10 -0
  74. package/manifests/mariadb/secret.yaml +8 -0
  75. package/manifests/mariadb/service.yaml +10 -0
  76. package/manifests/mariadb/statefulset.yaml +56 -0
  77. package/manifests/mariadb/storage-class.yaml +10 -0
  78. package/manifests/mongodb/backup-access.yaml +16 -0
  79. package/manifests/mongodb/backup-cronjob.yaml +42 -0
  80. package/manifests/mongodb/backup-pv-pvc.yaml +22 -0
  81. package/manifests/mongodb/configmap.yaml +26 -0
  82. package/manifests/mongodb/headless-service.yaml +10 -0
  83. package/manifests/mongodb/kustomization.yaml +11 -0
  84. package/manifests/mongodb/pv-pvc.yaml +23 -0
  85. package/manifests/mongodb/statefulset.yaml +126 -0
  86. package/manifests/mongodb/storage-class.yaml +9 -0
  87. package/manifests/mongodb-4.4/kustomization.yaml +7 -0
  88. package/manifests/mongodb-4.4/pv-pvc.yaml +23 -0
  89. package/manifests/mongodb-4.4/service-deployment.yaml +63 -0
  90. package/manifests/mysql/kustomization.yaml +7 -0
  91. package/manifests/mysql/pv-pvc.yaml +27 -0
  92. package/manifests/mysql/statefulset.yaml +55 -0
  93. package/manifests/postgresql/configmap.yaml +9 -0
  94. package/manifests/postgresql/kustomization.yaml +10 -0
  95. package/manifests/postgresql/pv.yaml +15 -0
  96. package/manifests/postgresql/pvc.yaml +13 -0
  97. package/manifests/postgresql/service.yaml +10 -0
  98. package/manifests/postgresql/statefulset.yaml +37 -0
  99. package/manifests/prometheus/deployment.yaml +82 -0
  100. package/manifests/valkey/kustomization.yaml +7 -0
  101. package/manifests/valkey/service.yaml +11 -0
  102. package/manifests/valkey/statefulset.yaml +38 -0
  103. package/nodemon.json +6 -0
  104. package/package.json +118 -0
  105. package/proxy.yaml +35 -0
  106. package/scripts/device-scan.sh +43 -0
  107. package/scripts/gpu-diag.sh +19 -0
  108. package/scripts/maas-setup.sh +120 -0
  109. package/scripts/nat-iptables.sh +26 -0
  110. package/scripts/nvim.sh +91 -0
  111. package/scripts/snap-clean.sh +26 -0
  112. package/scripts/ssh-cluster-info.sh +14 -0
  113. package/scripts/ssl.sh +164 -0
  114. package/src/api/blockchain/blockchain.controller.js +51 -0
  115. package/src/api/blockchain/blockchain.model.js +90 -0
  116. package/src/api/blockchain/blockchain.router.js +21 -0
  117. package/src/api/blockchain/blockchain.service.js +24 -0
  118. package/src/api/core/core.controller.js +69 -0
  119. package/src/api/core/core.model.js +11 -0
  120. package/src/api/core/core.router.js +24 -0
  121. package/src/api/core/core.service.js +35 -0
  122. package/src/api/crypto/crypto.controller.js +51 -0
  123. package/src/api/crypto/crypto.model.js +23 -0
  124. package/src/api/crypto/crypto.router.js +20 -0
  125. package/src/api/crypto/crypto.service.js +64 -0
  126. package/src/api/default/default.controller.js +74 -0
  127. package/src/api/default/default.model.js +20 -0
  128. package/src/api/default/default.router.js +27 -0
  129. package/src/api/default/default.service.js +40 -0
  130. package/src/api/document/document.controller.js +66 -0
  131. package/src/api/document/document.model.js +51 -0
  132. package/src/api/document/document.router.js +24 -0
  133. package/src/api/document/document.service.js +133 -0
  134. package/src/api/file/file.controller.js +67 -0
  135. package/src/api/file/file.model.js +19 -0
  136. package/src/api/file/file.router.js +22 -0
  137. package/src/api/file/file.service.js +100 -0
  138. package/src/api/instance/instance.controller.js +69 -0
  139. package/src/api/instance/instance.model.js +40 -0
  140. package/src/api/instance/instance.router.js +34 -0
  141. package/src/api/instance/instance.service.js +70 -0
  142. package/src/api/ipfs/ipfs.controller.js +51 -0
  143. package/src/api/ipfs/ipfs.model.js +17 -0
  144. package/src/api/ipfs/ipfs.router.js +20 -0
  145. package/src/api/ipfs/ipfs.service.js +25 -0
  146. package/src/api/object-layer/README.md +85 -0
  147. package/src/api/object-layer/object-layer.controller.js +69 -0
  148. package/src/api/object-layer/object-layer.model.js +181 -0
  149. package/src/api/object-layer/object-layer.router.js +29 -0
  150. package/src/api/object-layer/object-layer.service.js +49 -0
  151. package/src/api/test/test.controller.js +59 -0
  152. package/src/api/test/test.model.js +14 -0
  153. package/src/api/test/test.router.js +21 -0
  154. package/src/api/test/test.service.js +35 -0
  155. package/src/api/user/postman_collection.json +216 -0
  156. package/src/api/user/user.build.js +16 -0
  157. package/src/api/user/user.controller.js +35 -0
  158. package/src/api/user/user.model.js +100 -0
  159. package/src/api/user/user.router.js +400 -0
  160. package/src/api/user/user.service.js +500 -0
  161. package/src/api.js +23 -0
  162. package/src/cli/baremetal.js +1310 -0
  163. package/src/cli/cloud-init.js +548 -0
  164. package/src/cli/cluster.js +834 -0
  165. package/src/cli/cron.js +95 -0
  166. package/src/cli/db.js +414 -0
  167. package/src/cli/deploy.js +661 -0
  168. package/src/cli/env.js +101 -0
  169. package/src/cli/fs.js +256 -0
  170. package/src/cli/image.js +156 -0
  171. package/src/cli/index.js +436 -0
  172. package/src/cli/lxd.js +402 -0
  173. package/src/cli/monitor.js +260 -0
  174. package/src/cli/repository.js +274 -0
  175. package/src/cli/run.js +728 -0
  176. package/src/cli/script.js +85 -0
  177. package/src/cli/secrets.js +71 -0
  178. package/src/cli/ssh.js +46 -0
  179. package/src/cli/test.js +159 -0
  180. package/src/client/Cyberia.index.js +50 -0
  181. package/src/client/CyberiaAdmin.index.js +34 -0
  182. package/src/client/CyberiaPortal.index.js +36 -0
  183. package/src/client/Default.index.js +84 -0
  184. package/src/client/components/core/404.js +20 -0
  185. package/src/client/components/core/500.js +20 -0
  186. package/src/client/components/core/Account.js +326 -0
  187. package/src/client/components/core/AgGrid.js +191 -0
  188. package/src/client/components/core/Alert.js +77 -0
  189. package/src/client/components/core/Auth.js +342 -0
  190. package/src/client/components/core/Badge.js +32 -0
  191. package/src/client/components/core/Blockchain.js +41 -0
  192. package/src/client/components/core/Blog.js +9 -0
  193. package/src/client/components/core/BtnIcon.js +111 -0
  194. package/src/client/components/core/CalendarCore.js +464 -0
  195. package/src/client/components/core/Chat.js +64 -0
  196. package/src/client/components/core/ColorPalette.js +5267 -0
  197. package/src/client/components/core/CommonJs.js +1010 -0
  198. package/src/client/components/core/Content.js +196 -0
  199. package/src/client/components/core/Css.js +1099 -0
  200. package/src/client/components/core/CssCore.js +882 -0
  201. package/src/client/components/core/D3Chart.js +44 -0
  202. package/src/client/components/core/Docs.js +376 -0
  203. package/src/client/components/core/DropDown.js +223 -0
  204. package/src/client/components/core/EventsUI.js +133 -0
  205. package/src/client/components/core/FileExplorer.js +707 -0
  206. package/src/client/components/core/FullScreen.js +36 -0
  207. package/src/client/components/core/Input.js +383 -0
  208. package/src/client/components/core/JoyStick.js +80 -0
  209. package/src/client/components/core/Keyboard.js +73 -0
  210. package/src/client/components/core/LoadingAnimation.js +159 -0
  211. package/src/client/components/core/LogIn.js +190 -0
  212. package/src/client/components/core/LogOut.js +63 -0
  213. package/src/client/components/core/Logger.js +29 -0
  214. package/src/client/components/core/Modal.js +2494 -0
  215. package/src/client/components/core/NotificationManager.js +84 -0
  216. package/src/client/components/core/ObjectLayerEngine.js +1229 -0
  217. package/src/client/components/core/ObjectLayerEngineModal.js +443 -0
  218. package/src/client/components/core/Pagination.js +207 -0
  219. package/src/client/components/core/Panel.js +772 -0
  220. package/src/client/components/core/PanelForm.js +627 -0
  221. package/src/client/components/core/Polyhedron.js +162 -0
  222. package/src/client/components/core/Recover.js +207 -0
  223. package/src/client/components/core/Responsive.js +82 -0
  224. package/src/client/components/core/RichText.js +43 -0
  225. package/src/client/components/core/Router.js +317 -0
  226. package/src/client/components/core/Scroll.js +76 -0
  227. package/src/client/components/core/SignUp.js +125 -0
  228. package/src/client/components/core/SocketIo.js +74 -0
  229. package/src/client/components/core/Stream.js +113 -0
  230. package/src/client/components/core/ToggleSwitch.js +101 -0
  231. package/src/client/components/core/ToolTip.js +90 -0
  232. package/src/client/components/core/Translate.js +522 -0
  233. package/src/client/components/core/Validator.js +115 -0
  234. package/src/client/components/core/VanillaJs.js +423 -0
  235. package/src/client/components/core/Wallet.js +106 -0
  236. package/src/client/components/core/WebComponent.js +44 -0
  237. package/src/client/components/core/Webhook.js +25 -0
  238. package/src/client/components/core/Worker.js +371 -0
  239. package/src/client/components/core/windowGetDimensions.js +269 -0
  240. package/src/client/components/cyberia/BagCyberia.js +1253 -0
  241. package/src/client/components/cyberia/BiomeCyberia.js +130 -0
  242. package/src/client/components/cyberia/CharacterCyberia.js +321 -0
  243. package/src/client/components/cyberia/CommonCyberia.js +1834 -0
  244. package/src/client/components/cyberia/CssCyberia.js +816 -0
  245. package/src/client/components/cyberia/ElementPreviewCyberia.js +183 -0
  246. package/src/client/components/cyberia/ElementsCyberia.js +146 -0
  247. package/src/client/components/cyberia/InteractionPanelCyberia.js +1043 -0
  248. package/src/client/components/cyberia/JoyStickCyberia.js +53 -0
  249. package/src/client/components/cyberia/LogInCyberia.js +68 -0
  250. package/src/client/components/cyberia/LogOutCyberia.js +24 -0
  251. package/src/client/components/cyberia/MainUserCyberia.js +424 -0
  252. package/src/client/components/cyberia/MapCyberia.js +160 -0
  253. package/src/client/components/cyberia/MatrixCyberia.js +147 -0
  254. package/src/client/components/cyberia/MenuCyberia.js +575 -0
  255. package/src/client/components/cyberia/PixiCyberia.js +1639 -0
  256. package/src/client/components/cyberia/PointAndClickMovementCyberia.js +146 -0
  257. package/src/client/components/cyberia/QuestCyberia.js +1420 -0
  258. package/src/client/components/cyberia/RoutesCyberia.js +47 -0
  259. package/src/client/components/cyberia/SettingsCyberia.js +16 -0
  260. package/src/client/components/cyberia/SignUpCyberia.js +14 -0
  261. package/src/client/components/cyberia/SkillCyberia.js +124 -0
  262. package/src/client/components/cyberia/SocketIoCyberia.js +211 -0
  263. package/src/client/components/cyberia/TileCyberia.js +685 -0
  264. package/src/client/components/cyberia/TranslateCyberia.js +96 -0
  265. package/src/client/components/cyberia/UniverseCyberia.js +14 -0
  266. package/src/client/components/cyberia/WebhookCyberia.js +13 -0
  267. package/src/client/components/cyberia/WikiCyberia.js +144 -0
  268. package/src/client/components/cyberia/WorldCyberia.js +680 -0
  269. package/src/client/components/cyberia-admin/BiomeCyberiaAdmin.js +978 -0
  270. package/src/client/components/cyberia-admin/CommonCyberiaAdmin.js +29 -0
  271. package/src/client/components/cyberia-admin/CssCyberiaAdmin.js +15 -0
  272. package/src/client/components/cyberia-admin/ElementsCyberiaAdmin.js +38 -0
  273. package/src/client/components/cyberia-admin/InstanceEngineCyberiaAdmin.js +180 -0
  274. package/src/client/components/cyberia-admin/LogInCyberiaAdmin.js +34 -0
  275. package/src/client/components/cyberia-admin/LogOutCyberiaAdmin.js +24 -0
  276. package/src/client/components/cyberia-admin/MenuCyberiaAdmin.js +660 -0
  277. package/src/client/components/cyberia-admin/RoutesCyberiaAdmin.js +57 -0
  278. package/src/client/components/cyberia-admin/ServerCyberiaAdmin.js +129 -0
  279. package/src/client/components/cyberia-admin/SettingsCyberiaAdmin.js +16 -0
  280. package/src/client/components/cyberia-admin/SignUpCyberiaAdmin.js +11 -0
  281. package/src/client/components/cyberia-admin/SocketIoCyberiaAdmin.js +53 -0
  282. package/src/client/components/cyberia-admin/TranslateCyberiaAdmin.js +7 -0
  283. package/src/client/components/cyberia-biome/CityCyberiaBiome.js +209 -0
  284. package/src/client/components/cyberia-biome/CityInteriorCyberiaBiome.js +253 -0
  285. package/src/client/components/cyberia-biome/ColorChaosCyberiaBiome.js +26 -0
  286. package/src/client/components/cyberia-biome/ForestCyberiaBiome.js +191 -0
  287. package/src/client/components/cyberia-biome/GridBaseCyberiaBiome.js +364 -0
  288. package/src/client/components/cyberia-biome/SeedCityCyberiaBiome.js +347 -0
  289. package/src/client/components/cyberia-biome/ShopCyberiaBiome.js +12 -0
  290. package/src/client/components/cyberia-biome/SpaceCyberiaBiome.js +58 -0
  291. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +29 -0
  292. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +132 -0
  293. package/src/client/components/cyberia-portal/ElementsCyberiaPortal.js +38 -0
  294. package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +18 -0
  295. package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +12 -0
  296. package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +487 -0
  297. package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +45 -0
  298. package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +136 -0
  299. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +16 -0
  300. package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +11 -0
  301. package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +52 -0
  302. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +12 -0
  303. package/src/client/components/default/CommonDefault.js +29 -0
  304. package/src/client/components/default/CssDefault.js +27 -0
  305. package/src/client/components/default/ElementsDefault.js +38 -0
  306. package/src/client/components/default/LogInDefault.js +14 -0
  307. package/src/client/components/default/LogOutDefault.js +10 -0
  308. package/src/client/components/default/MenuDefault.js +743 -0
  309. package/src/client/components/default/RoutesDefault.js +48 -0
  310. package/src/client/components/default/SettingsDefault.js +16 -0
  311. package/src/client/components/default/SignUpDefault.js +9 -0
  312. package/src/client/components/default/SocketIoDefault.js +54 -0
  313. package/src/client/components/default/TranslateDefault.js +7 -0
  314. package/src/client/public/default/android-chrome-144x144.png +0 -0
  315. package/src/client/public/default/android-chrome-192x192.png +0 -0
  316. package/src/client/public/default/android-chrome-256x256.png +0 -0
  317. package/src/client/public/default/android-chrome-36x36.png +0 -0
  318. package/src/client/public/default/android-chrome-384x384.png +0 -0
  319. package/src/client/public/default/android-chrome-48x48.png +0 -0
  320. package/src/client/public/default/android-chrome-512x512.png +0 -0
  321. package/src/client/public/default/android-chrome-72x72.png +0 -0
  322. package/src/client/public/default/android-chrome-96x96.png +0 -0
  323. package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
  324. package/src/client/public/default/apple-touch-icon-114x114-precomposed.png +0 -0
  325. package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
  326. package/src/client/public/default/apple-touch-icon-120x120-precomposed.png +0 -0
  327. package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
  328. package/src/client/public/default/apple-touch-icon-144x144-precomposed.png +0 -0
  329. package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
  330. package/src/client/public/default/apple-touch-icon-152x152-precomposed.png +0 -0
  331. package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
  332. package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
  333. package/src/client/public/default/apple-touch-icon-180x180-precomposed.png +0 -0
  334. package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
  335. package/src/client/public/default/apple-touch-icon-57x57-precomposed.png +0 -0
  336. package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
  337. package/src/client/public/default/apple-touch-icon-60x60-precomposed.png +0 -0
  338. package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
  339. package/src/client/public/default/apple-touch-icon-72x72-precomposed.png +0 -0
  340. package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
  341. package/src/client/public/default/apple-touch-icon-76x76-precomposed.png +0 -0
  342. package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
  343. package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
  344. package/src/client/public/default/apple-touch-icon.png +0 -0
  345. package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
  346. package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
  347. package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
  348. package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
  349. package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
  350. package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
  351. package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
  352. package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
  353. package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
  354. package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
  355. package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
  356. package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
  357. package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
  358. package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
  359. package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
  360. package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
  361. package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
  362. package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
  363. package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
  364. package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
  365. package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
  366. package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
  367. package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
  368. package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
  369. package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
  370. package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
  371. package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
  372. package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
  373. package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
  374. package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
  375. package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
  376. package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
  377. package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
  378. package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
  379. package/src/client/public/default/assets/background/dark.jpg +0 -0
  380. package/src/client/public/default/assets/background/dark.svg +557 -0
  381. package/src/client/public/default/assets/background/white.jpg +0 -0
  382. package/src/client/public/default/assets/background/white0-min.jpg +0 -0
  383. package/src/client/public/default/assets/background/white0.jpg +0 -0
  384. package/src/client/public/default/assets/logo/base-icon.png +0 -0
  385. package/src/client/public/default/assets/logo/underpost.gif +0 -0
  386. package/src/client/public/default/assets/mailer/api-user-check.png +0 -0
  387. package/src/client/public/default/assets/mailer/api-user-default-avatar.png +0 -0
  388. package/src/client/public/default/assets/mailer/api-user-invalid-token.png +0 -0
  389. package/src/client/public/default/assets/mailer/api-user-recover.png +0 -0
  390. package/src/client/public/default/browserconfig.xml +12 -0
  391. package/src/client/public/default/favicon-16x16.png +0 -0
  392. package/src/client/public/default/favicon-32x32.png +0 -0
  393. package/src/client/public/default/favicon-48x48.png +0 -0
  394. package/src/client/public/default/favicon.ico +0 -0
  395. package/src/client/public/default/manifest.webmanifest +69 -0
  396. package/src/client/public/default/mstile-144x144.png +0 -0
  397. package/src/client/public/default/mstile-150x150.png +0 -0
  398. package/src/client/public/default/mstile-310x150.png +0 -0
  399. package/src/client/public/default/mstile-310x310.png +0 -0
  400. package/src/client/public/default/mstile-70x70.png +0 -0
  401. package/src/client/public/default/plantuml/client-conf.svg +1 -0
  402. package/src/client/public/default/plantuml/client-schema.svg +1 -0
  403. package/src/client/public/default/plantuml/cron-conf.svg +1 -0
  404. package/src/client/public/default/plantuml/cron-schema.svg +1 -0
  405. package/src/client/public/default/plantuml/server-conf.svg +1 -0
  406. package/src/client/public/default/plantuml/server-schema.svg +1 -0
  407. package/src/client/public/default/plantuml/ssr-conf.svg +1 -0
  408. package/src/client/public/default/plantuml/ssr-schema.svg +1 -0
  409. package/src/client/public/default/safari-pinned-tab.svg +24 -0
  410. package/src/client/public/default/site.webmanifest +69 -0
  411. package/src/client/public/default/sitemap +148 -0
  412. package/src/client/public/default/yandex-browser-50x50.png +0 -0
  413. package/src/client/public/default/yandex-browser-manifest.json +9 -0
  414. package/src/client/public/doc/favicon.ico +0 -0
  415. package/src/client/public/doc/sitemap +148 -0
  416. package/src/client/public/test/favicon.ico +0 -0
  417. package/src/client/public/test/sitemap +148 -0
  418. package/src/client/services/blockchain/blockchain.service.js +73 -0
  419. package/src/client/services/core/core.service.js +165 -0
  420. package/src/client/services/crypto/crypto.service.js +73 -0
  421. package/src/client/services/default/default.management.js +450 -0
  422. package/src/client/services/default/default.service.js +98 -0
  423. package/src/client/services/document/document.service.js +97 -0
  424. package/src/client/services/file/file.service.js +72 -0
  425. package/src/client/services/instance/instance.management.js +78 -0
  426. package/src/client/services/instance/instance.service.js +97 -0
  427. package/src/client/services/ipfs/ipfs.service.js +73 -0
  428. package/src/client/services/object-layer/object-layer.service.js +93 -0
  429. package/src/client/services/test/test.service.js +73 -0
  430. package/src/client/services/user/user.management.js +56 -0
  431. package/src/client/services/user/user.service.js +108 -0
  432. package/src/client/ssr/Render.js +237 -0
  433. package/src/client/ssr/body/404.js +73 -0
  434. package/src/client/ssr/body/500.js +72 -0
  435. package/src/client/ssr/body/CacheControl.js +114 -0
  436. package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +90 -0
  437. package/src/client/ssr/body/CyberiaSplashScreenLore.js +424 -0
  438. package/src/client/ssr/body/DefaultSplashScreen.js +90 -0
  439. package/src/client/ssr/email/DefaultRecoverEmail.js +21 -0
  440. package/src/client/ssr/email/DefaultVerifyEmail.js +17 -0
  441. package/src/client/ssr/head/Css.js +241 -0
  442. package/src/client/ssr/head/CyberiaAdminScripts.js +6 -0
  443. package/src/client/ssr/head/CyberiaPortalScripts.js +6 -0
  444. package/src/client/ssr/head/CyberiaScripts.js +6 -0
  445. package/src/client/ssr/head/DefaultScripts.js +6 -0
  446. package/src/client/ssr/head/Microdata.js +11 -0
  447. package/src/client/ssr/head/Production.js +1 -0
  448. package/src/client/ssr/head/Pwa.js +146 -0
  449. package/src/client/ssr/head/Seo.js +15 -0
  450. package/src/client/ssr/mailer/DefaultRecoverEmail.js +21 -0
  451. package/src/client/ssr/mailer/DefaultVerifyEmail.js +17 -0
  452. package/src/client/ssr/offline/Maintenance.js +63 -0
  453. package/src/client/ssr/offline/NoNetworkConnection.js +67 -0
  454. package/src/client/ssr/pages/404.js +12 -0
  455. package/src/client/ssr/pages/500.js +12 -0
  456. package/src/client/ssr/pages/Test.js +198 -0
  457. package/src/client/ssr/pages/maintenance.js +14 -0
  458. package/src/client/ssr/pages/offline.js +21 -0
  459. package/src/client/sw/default.sw.js +108 -0
  460. package/src/client/sw/template.sw.js +84 -0
  461. package/src/client.build.js +22 -0
  462. package/src/client.dev.js +24 -0
  463. package/src/db/DataBaseProvider.js +98 -0
  464. package/src/db/mariadb/MariaDB.js +66 -0
  465. package/src/db/mongo/MongooseDB.js +70 -0
  466. package/src/index.js +198 -0
  467. package/src/mailer/EmailRender.js +116 -0
  468. package/src/mailer/MailerProvider.js +213 -0
  469. package/src/monitor.js +24 -0
  470. package/src/proxy.js +22 -0
  471. package/src/runtime/express/Express.js +256 -0
  472. package/src/runtime/lampp/Dockerfile +50 -0
  473. package/src/runtime/lampp/Lampp.js +343 -0
  474. package/src/server/auth.js +689 -0
  475. package/src/server/backup.js +96 -0
  476. package/src/server/client-build-docs.js +205 -0
  477. package/src/server/client-build-live.js +109 -0
  478. package/src/server/client-build.js +690 -0
  479. package/src/server/client-dev-server.js +87 -0
  480. package/src/server/client-formatted.js +87 -0
  481. package/src/server/client-icons.js +108 -0
  482. package/src/server/conf.js +1071 -0
  483. package/src/server/crypto.js +210 -0
  484. package/src/server/dns.js +276 -0
  485. package/src/server/downloader.js +74 -0
  486. package/src/server/json-schema.js +77 -0
  487. package/src/server/logger.js +197 -0
  488. package/src/server/network.js +72 -0
  489. package/src/server/object-layer.js +294 -0
  490. package/src/server/peer.js +69 -0
  491. package/src/server/process.js +171 -0
  492. package/src/server/proxy.js +110 -0
  493. package/src/server/runtime.js +170 -0
  494. package/src/server/ssr.js +127 -0
  495. package/src/server/start.js +161 -0
  496. package/src/server/tls.js +251 -0
  497. package/src/server/valkey.js +293 -0
  498. package/src/server.js +25 -0
  499. package/src/ws/IoInterface.js +139 -0
  500. package/src/ws/IoServer.js +88 -0
  501. package/src/ws/core/channels/core.ws.chat.js +23 -0
  502. package/src/ws/core/channels/core.ws.mailer.js +35 -0
  503. package/src/ws/core/channels/core.ws.stream.js +31 -0
  504. package/src/ws/core/core.ws.connection.js +62 -0
  505. package/src/ws/core/core.ws.emit.js +53 -0
  506. package/src/ws/core/core.ws.server.js +76 -0
  507. package/src/ws/core/management/core.ws.chat.js +8 -0
  508. package/src/ws/core/management/core.ws.mailer.js +16 -0
  509. package/src/ws/core/management/core.ws.stream.js +8 -0
  510. package/src/ws/cyberia/channels/cyberia.ws.bot.js +56 -0
  511. package/src/ws/cyberia/channels/cyberia.ws.skill.js +51 -0
  512. package/src/ws/cyberia/channels/cyberia.ws.user.js +437 -0
  513. package/src/ws/cyberia/cyberia.ws.connection.js +36 -0
  514. package/src/ws/cyberia/cyberia.ws.emit.js +14 -0
  515. package/src/ws/cyberia/cyberia.ws.server.js +67 -0
  516. package/src/ws/cyberia/management/cyberia.ws.bot.js +669 -0
  517. package/src/ws/cyberia/management/cyberia.ws.skill.js +441 -0
  518. package/src/ws/cyberia/management/cyberia.ws.user.js +188 -0
  519. package/src/ws/default/channels/default.ws.main.js +16 -0
  520. package/src/ws/default/default.ws.connection.js +22 -0
  521. package/src/ws/default/default.ws.emit.js +14 -0
  522. package/src/ws/default/default.ws.server.js +20 -0
  523. package/src/ws/default/management/default.ws.main.js +8 -0
  524. package/test/api.test.js +53 -0
  525. package/test/crypto.test.js +117 -0
package/scripts/ssl.sh ADDED
@@ -0,0 +1,164 @@
1
+ #!/usr/bin/env bash
2
+ # RHEL / Rocky Linux — Generate local TLS cert + fullchain (cert + root CA) using mkcert
3
+ # Usage:
4
+ # ./generate-local-ssl-fullchain.sh /path/to/target "localhost 127.0.0.1 ::1"
5
+
6
+ set -euo pipefail
7
+ IFS=$'\n\t'
8
+
9
+ err() { echo "[ERROR] $*" >&2; }
10
+ info() { echo "[INFO] $*"; }
11
+
12
+ print_usage() {
13
+ cat <<'EOF'
14
+ Usage: $0 TARGET_DIR "domain1 domain2 ..."
15
+ Example: $0 /etc/ssl/local "localhost 127.0.0.1 ::1"
16
+
17
+ Outputs created in TARGET_DIR:
18
+ - <name>.pem : leaf/server certificate
19
+ - <name>-key.pem : private key
20
+ - <name>-fullchain.pem: certificate followed by root CA (use for servers needing full chain)
21
+ - rootCA.pem : local root CA (if OpenSSL fallback used or copied from mkcert CAROOT)
22
+ EOF
23
+ }
24
+
25
+ if [[ ${1-} == "-h" || ${1-} == "--help" ]]; then
26
+ print_usage; exit 0; fi
27
+
28
+ TARGET_DIR="${1-}"
29
+ DOMAINS="${2-}"
30
+
31
+ if [[ -z "$TARGET_DIR" ]]; then read -rp "Target directory to store certificates (absolute path): " TARGET_DIR; fi
32
+ if [[ -z "$DOMAINS" ]]; then read -rp "Space-separated domains/IPs to include (e.g. 'localhost 127.0.0.1 api.myapp.test'): " DOMAINS; fi
33
+
34
+ TARGET_DIR="$(realpath -m "$TARGET_DIR")"
35
+ mkdir -p "$TARGET_DIR"
36
+ IFS=' ' read -r -a DOMAIN_ARR <<< "$DOMAINS"
37
+ if [[ ${#DOMAIN_ARR[@]} -eq 0 ]]; then err "No domains provided. Exiting."; exit 1; fi
38
+
39
+ NAME_SAFE="${DOMAIN_ARR[0]//[^a-zA-Z0-9_.-]/_}"
40
+ CERT_FILE="$TARGET_DIR/${NAME_SAFE}.pem"
41
+ KEY_FILE="$TARGET_DIR/${NAME_SAFE}-key.pem"
42
+ FULLCHAIN_FILE="$TARGET_DIR/${NAME_SAFE}-fullchain.pem"
43
+ ROOT_PEM="$TARGET_DIR/rootCA.pem"
44
+
45
+ info "Target dir: $TARGET_DIR"
46
+ info "Domains: ${DOMAIN_ARR[*]}"
47
+ info "Outputs: $CERT_FILE, $KEY_FILE, $FULLCHAIN_FILE, $ROOT_PEM"
48
+
49
+ # Install prerequisites
50
+ if ! command -v dnf >/dev/null 2>&1; then err "dnf not found. This script expects RHEL/Rocky with dnf."; exit 1; fi
51
+ sudo dnf install -y curl nss-tools ca-certificates || true
52
+
53
+ # Download and install mkcert binary (no 'go install')
54
+ download_mkcert_binary() {
55
+ UNAME_M=$(uname -m)
56
+ case "$UNAME_M" in
57
+ x86_64|amd64) ARCH_STR='linux-amd64' ;;
58
+ aarch64|arm64) ARCH_STR='linux-arm64' ;;
59
+ *) ARCH_STR='linux-amd64' ;;
60
+ esac
61
+ info "Searching mkcert release for $ARCH_STR"
62
+ ASSET_URL=$(curl -sS "https://api.github.com/repos/FiloSottile/mkcert/releases/latest" | \
63
+ grep -E '"browser_download_url":' | grep -i "$ARCH_STR" | head -n1 | sed -E 's/.*"(https:[^"]+)".*/\1/' || true)
64
+ if [[ -z "$ASSET_URL" ]]; then
65
+ ASSET_URL=$(curl -sS "https://api.github.com/repos/FiloSottile/mkcert/releases/latest" | \
66
+ grep -E '"browser_download_url":' | grep -i 'linux' | grep -i 'amd64' | head -n1 | sed -E 's/.*"(https:[^"]+)".*/\1/' || true)
67
+ fi
68
+ if [[ -z "$ASSET_URL" ]]; then err "Could not find mkcert asset for your arch"; return 1; fi
69
+ TMP_BIN="$(mktemp -u /tmp/mkcert.XXXXXX)"
70
+ if curl -fSL -o "$TMP_BIN" "$ASSET_URL"; then
71
+ sudo mv "$TMP_BIN" /usr/local/bin/mkcert
72
+ sudo chmod +x /usr/local/bin/mkcert
73
+ info "mkcert installed to /usr/local/bin/mkcert"
74
+ return 0
75
+ fi
76
+ return 1
77
+ }
78
+
79
+ use_mkcert() {
80
+ if ! command -v mkcert >/dev/null 2>&1; then
81
+ info "mkcert not found — attempting to download/install binary"
82
+ download_mkcert_binary || return 1
83
+ fi
84
+ MKCERT_BIN="$(command -v mkcert || echo /usr/local/bin/mkcert)"
85
+ info "Running mkcert -install as sudo (if necessary)"
86
+ if ! sudo "$MKCERT_BIN" -install >/dev/null 2>&1; then
87
+ if ! "$MKCERT_BIN" -install >/dev/null 2>&1; then
88
+ err "mkcert -install failed"; return 1
89
+ fi
90
+ fi
91
+ MK_ARGS=()
92
+ for d in "${DOMAIN_ARR[@]}"; do MK_ARGS+=("$d"); done
93
+ info "Generating cert+key with mkcert"
94
+ if ! "$MKCERT_BIN" -cert-file "$CERT_FILE" -key-file "$KEY_FILE" "${MK_ARGS[@]}"; then err "mkcert failed to generate"; return 1; fi
95
+ # copy root CA from mkcert CAROOT into TARGET_DIR
96
+ if ROOT_FROM_MKCERT="$($MKCERT_BIN -CAROOT 2>/dev/null || true)"; then
97
+ if [[ -f "$ROOT_FROM_MKCERT/rootCA.pem" ]]; then
98
+ cp "$ROOT_FROM_MKCERT/rootCA.pem" "$ROOT_PEM"
99
+ info "Copied mkcert root CA to $ROOT_PEM"
100
+ fi
101
+ fi
102
+ # create fullchain (cert followed by root CA)
103
+ if [[ -f "$ROOT_PEM" ]]; then
104
+ cat "$CERT_FILE" "$ROOT_PEM" > "$FULLCHAIN_FILE"
105
+ info "Created fullchain: $FULLCHAIN_FILE"
106
+ else
107
+ cp "$CERT_FILE" "$FULLCHAIN_FILE"
108
+ info "No root CA found to append; fullchain contains only leaf cert: $FULLCHAIN_FILE"
109
+ fi
110
+ return 0
111
+ }
112
+
113
+ use_openssl() {
114
+ command -v openssl >/dev/null 2>&1 || { err "openssl required"; return 1; }
115
+ ROOT_KEY="$TARGET_DIR/rootCA.key"
116
+ if [[ ! -f "$ROOT_KEY" || ! -f "$ROOT_PEM" ]]; then
117
+ openssl genrsa -out "$ROOT_KEY" 4096
118
+ openssl req -x509 -new -nodes -key "$ROOT_KEY" -sha256 -days 3650 -out "$ROOT_PEM" -subj "/CN=Local Development Root CA"
119
+ fi
120
+ CSR_KEY="$TARGET_DIR/${NAME_SAFE}.key"
121
+ CSR_PEM="$TARGET_DIR/${NAME_SAFE}.csr"
122
+ openssl genrsa -out "$CSR_KEY" 2048
123
+ openssl req -new -key "$CSR_KEY" -out "$CSR_PEM" -subj "/CN=${DOMAIN_ARR[0]}"
124
+ V3EXT="$TARGET_DIR/v3.ext"
125
+ printf 'authorityKeyIdentifier=keyid,issuer\nbasicConstraints=CA:FALSE\nkeyUsage = digitalSignature, keyEncipherment\nsubjectAltName = @alt_names\n\n[alt_names]\n' > "$V3EXT"
126
+ DNS=1; IP=1
127
+ for d in "${DOMAIN_ARR[@]}"; do
128
+ if [[ "$d" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] || [[ "$d" == *":"* ]]; then
129
+ printf 'IP.%d = %s\n' "$IP" "$d" >> "$V3EXT"; IP=$((IP+1))
130
+ else
131
+ printf 'DNS.%d = %s\n' "$DNS" "$d" >> "$V3EXT"; DNS=$((DNS+1))
132
+ fi
133
+ done
134
+ if openssl x509 -req -in "$CSR_PEM" -CA "$ROOT_PEM" -CAkey "$ROOT_KEY" -CAcreateserial -out "$CERT_FILE" -days 825 -sha256 -extfile "$V3EXT"; then
135
+ mv -f "$CSR_KEY" "$KEY_FILE"
136
+ # create fullchain: leaf + root
137
+ cat "$CERT_FILE" "$ROOT_PEM" > "$FULLCHAIN_FILE"
138
+ sudo cp "$ROOT_PEM" /etc/pki/ca-trust/source/anchors/ || true
139
+ sudo update-ca-trust extract || true
140
+ if command -v certutil >/dev/null 2>&1; then
141
+ mkdir -p "$HOME/.pki/nssdb"
142
+ certutil -d sql:$HOME/.pki/nssdb -A -t "CT,C,C" -n "Local Dev Root CA" -i "$ROOT_PEM" || true
143
+ fi
144
+ info "OpenSSL created cert, key and fullchain"
145
+ return 0
146
+ fi
147
+ err "OpenSSL failed to create certificate"
148
+ return 1
149
+ }
150
+
151
+ # main
152
+ if use_mkcert; then
153
+ info "Done: created cert, key, fullchain and root CA in $TARGET_DIR"
154
+ exit 0
155
+ else
156
+ info "mkcert flow failed — trying OpenSSL fallback"
157
+ if use_openssl; then
158
+ info "Done: created cert, key, fullchain and root CA in $TARGET_DIR"
159
+ exit 0
160
+ fi
161
+ fi
162
+
163
+ err "Failed to create certificates with mkcert or OpenSSL"
164
+ exit 2
@@ -0,0 +1,51 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { BlockChainService } from './blockchain.service.js';
3
+
4
+ const logger = loggerFactory(import.meta);
5
+
6
+ const BlockChainController = {
7
+ post: async (req, res, options) => {
8
+ try {
9
+ return res.status(200).json({
10
+ status: 'success',
11
+ data: await BlockChainService.post(req, res, options),
12
+ });
13
+ } catch (error) {
14
+ logger.error(error, error.stack);
15
+ return res.status(400).json({
16
+ status: 'error',
17
+ message: error.message,
18
+ });
19
+ }
20
+ },
21
+ get: async (req, res, options) => {
22
+ try {
23
+ return res.status(200).json({
24
+ status: 'success',
25
+ data: await BlockChainService.get(req, res, options),
26
+ });
27
+ } catch (error) {
28
+ logger.error(error, error.stack);
29
+ return res.status(400).json({
30
+ status: 'error',
31
+ message: error.message,
32
+ });
33
+ }
34
+ },
35
+ delete: async (req, res, options) => {
36
+ try {
37
+ return res.status(200).json({
38
+ status: 'success',
39
+ data: await BlockChainService.delete(req, res, options),
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 { BlockChainController };
@@ -0,0 +1,90 @@
1
+ import { Schema, model, Types } from 'mongoose';
2
+
3
+ // https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
4
+
5
+ // Data to hyperledger besu
6
+ const TransactionSchema = new Schema({
7
+ transaction: {
8
+ // The sender public key of the transaction.
9
+ // In a reward transaction the sender is null.
10
+ sender: { type: String, required: true, immutable: true },
11
+ // The recipient public key of the transaction.
12
+ recipient: { type: String, required: true, immutable: true },
13
+ // The value of the transaction, which can be an amount of currencies or array ipfs cid.
14
+ // @link reward algorithm
15
+ value: { type: String, required: true, immutable: true },
16
+ // The timestamp of the transaction.
17
+ timestamp: { type: Number, required: true, immutable: true },
18
+ },
19
+ // The signature of the transaction, which validates the sender and the value.
20
+ // In a reward transaction the signature is null.
21
+ signature: { type: String, required: true, immutable: true },
22
+ });
23
+
24
+ // Accountant validator protocol
25
+
26
+ // internal registration
27
+ const PoSBlockSchema = new Schema({
28
+ // The hash of the previous block in the blockchain.
29
+ // If it is the first block previousHash is null
30
+ previousHash: { type: String, required: true, immutable: true },
31
+ // A list of transactions included in the block.
32
+ transactions: { type: [TransactionSchema], required: true, immutable: true },
33
+ });
34
+
35
+ const PoSBlockChainSchema = new Schema({
36
+ // A list of blocks in the blockchain.
37
+ blocks: [PoSBlockSchema],
38
+ });
39
+
40
+ // PoW test Block version
41
+ const PoWBlockSchema = new Schema({
42
+ // The hash of the previous block in the blockchain.
43
+ // If it is the first block previousHash is null
44
+ previousHash: { type: String, required: true, immutable: true },
45
+ // A random value used in the mining process.
46
+ nonce: { type: String, required: true, immutable: true },
47
+ // The target hash for the block, which determines the difficulty of mining.
48
+ // @link difficulty algorithm
49
+ target: { type: String, required: true, immutable: true },
50
+ // A list of transactions included in the block.
51
+ transactions: { type: [TransactionSchema], required: true, immutable: true },
52
+ // The timestamp of the block
53
+ timestamp: { type: Number, required: true, immutable: true },
54
+ });
55
+
56
+ // PoW test BlockChain version
57
+ const PoWBlockChainSchema = new Schema({
58
+ // @link blockchain validator logic protocol
59
+ // - previousHash with hashing block algorithm defined
60
+ // - transaction key format
61
+ // - sort timestamp transactions and validate with last transaction timestamp of last block
62
+ // - block timestamp with last block
63
+
64
+ // A list of blocks in the blockchain.
65
+ blocks: [PoWBlockSchema],
66
+ // The format of the transaction public keys, such as JWK.
67
+ transactionKeyFormat: {
68
+ format: { type: String, required: true, immutable: true },
69
+ algorithm: {
70
+ name: { type: String, required: true, immutable: true },
71
+ namedCurve: { type: String, required: true, immutable: true },
72
+ hash: { type: String, required: true, immutable: true },
73
+ },
74
+ },
75
+ hashingBlockAlgorithm: {
76
+ // The hash function used, such as SHA-256.
77
+ hash: { type: String, immutable: true },
78
+ // The format of the hash output, such as hex.
79
+ digest: { type: String, required: true, immutable: true },
80
+ },
81
+ });
82
+
83
+ // default blockchain schema (PoS)
84
+ const BlockChainSchema = PoSBlockChainSchema;
85
+
86
+ const BlockChainModel = model('BlockChain', BlockChainSchema);
87
+
88
+ const ProviderSchema = BlockChainSchema;
89
+
90
+ export { BlockChainSchema, BlockChainModel, ProviderSchema };
@@ -0,0 +1,21 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { BlockChainController } from './blockchain.controller.js';
3
+ import express from 'express';
4
+
5
+ const logger = loggerFactory(import.meta);
6
+
7
+ const BlockChainRouter = (options) => {
8
+ const router = express.Router();
9
+ const authMiddleware = options.authMiddleware;
10
+ router.post(`/:id`, async (req, res) => await BlockChainController.post(req, res, options));
11
+ router.post(`/`, authMiddleware, async (req, res) => await BlockChainController.post(req, res, options));
12
+ router.get(`/:id`, async (req, res) => await BlockChainController.get(req, res, options));
13
+ router.get(`/`, async (req, res) => await BlockChainController.get(req, res, options));
14
+ router.delete(`/:id`, async (req, res) => await BlockChainController.delete(req, res, options));
15
+ router.delete(`/`, async (req, res) => await BlockChainController.delete(req, res, options));
16
+ return router;
17
+ };
18
+
19
+ const ApiRouter = BlockChainRouter;
20
+
21
+ export { ApiRouter, BlockChainRouter };
@@ -0,0 +1,24 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { BlockChainModel } from './blockchain.model.js';
3
+
4
+ const logger = loggerFactory(import.meta);
5
+
6
+ const BlockChainService = {
7
+ post: async (req, res, options) => {
8
+ switch (req.params.id) {
9
+ default:
10
+ }
11
+ },
12
+ get: async (req, res, options) => {
13
+ switch (req.params.id) {
14
+ default:
15
+ }
16
+ },
17
+ delete: async (req, res, options) => {
18
+ switch (req.params.id) {
19
+ default:
20
+ }
21
+ },
22
+ };
23
+
24
+ export { BlockChainService };
@@ -0,0 +1,69 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { CoreService } from './core.service.js';
3
+
4
+ const logger = loggerFactory(import.meta);
5
+
6
+ const CoreController = {
7
+ post: async (req, res, options) => {
8
+ try {
9
+ const result = await CoreService.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 CoreService.put(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 CoreService.get(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 CoreService.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 { CoreController };
@@ -0,0 +1,11 @@
1
+ import { Schema, model, Types } from 'mongoose';
2
+
3
+ // https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
4
+
5
+ const CoreSchema = new Schema({});
6
+
7
+ const CoreModel = model('Core', CoreSchema);
8
+
9
+ const ProviderSchema = CoreSchema;
10
+
11
+ export { CoreSchema, CoreModel, ProviderSchema };
@@ -0,0 +1,24 @@
1
+ import { adminGuard } from '../../server/auth.js';
2
+ import { loggerFactory } from '../../server/logger.js';
3
+ import { CoreController } from './core.controller.js';
4
+ import express from 'express';
5
+
6
+ const logger = loggerFactory(import.meta);
7
+
8
+ const CoreRouter = (options) => {
9
+ const router = express.Router();
10
+ const authMiddleware = options.authMiddleware;
11
+ router.post(`/:id`, authMiddleware, adminGuard, async (req, res) => await CoreController.post(req, res, options));
12
+ router.post(`/`, authMiddleware, adminGuard, async (req, res) => await CoreController.post(req, res, options));
13
+ router.get(`/:id`, authMiddleware, adminGuard, async (req, res) => await CoreController.get(req, res, options));
14
+ router.get(`/`, authMiddleware, adminGuard, async (req, res) => await CoreController.get(req, res, options));
15
+ router.put(`/:id`, authMiddleware, adminGuard, async (req, res) => await CoreController.put(req, res, options));
16
+ router.put(`/`, authMiddleware, adminGuard, async (req, res) => await CoreController.put(req, res, options));
17
+ router.delete(`/:id`, authMiddleware, adminGuard, async (req, res) => await CoreController.delete(req, res, options));
18
+ router.delete(`/`, authMiddleware, adminGuard, async (req, res) => await CoreController.delete(req, res, options));
19
+ return router;
20
+ };
21
+
22
+ const ApiRouter = CoreRouter;
23
+
24
+ export { ApiRouter, CoreRouter };
@@ -0,0 +1,35 @@
1
+ import { DataBaseProvider } from '../../db/DataBaseProvider.js';
2
+ import { loggerFactory } from '../../server/logger.js';
3
+ import { shellExec } from '../../server/process.js';
4
+
5
+ const logger = loggerFactory(import.meta);
6
+
7
+ const CoreService = {
8
+ post: async (req, res, options) => {
9
+ /** @type {import('./core.model.js').CoreModel} */
10
+ const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
11
+ if (req.path.startsWith('/sh')) {
12
+ if (req.body.stdout) return shellExec(req.body.sh, { stdout: true });
13
+ shellExec(req.body.sh, { async: true });
14
+ return 'Command "' + req.body.sh + '" running';
15
+ }
16
+ return await new Core(req.body).save();
17
+ },
18
+ get: async (req, res, options) => {
19
+ /** @type {import('./core.model.js').CoreModel} */
20
+ const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
21
+ return await Core.findById(req.params.id);
22
+ },
23
+ put: async (req, res, options) => {
24
+ /** @type {import('./core.model.js').CoreModel} */
25
+ const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
26
+ return await Core.findByIdAndUpdate(req.params.id, req.body);
27
+ },
28
+ delete: async (req, res, options) => {
29
+ /** @type {import('./core.model.js').CoreModel} */
30
+ const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
31
+ return await Core.findByIdAndDelete(req.params.id);
32
+ },
33
+ };
34
+
35
+ export { CoreService };
@@ -0,0 +1,51 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { CryptoService } from './crypto.service.js';
3
+ const logger = loggerFactory(import.meta);
4
+
5
+ const CryptoController = {
6
+ post: async (req, res, options) => {
7
+ try {
8
+ return res.status(200).json({
9
+ status: 'success',
10
+ data: await CryptoService.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 CryptoService.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 CryptoService.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 { CryptoController };
@@ -0,0 +1,23 @@
1
+ import { Schema, model, Types } from 'mongoose';
2
+
3
+ // https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
4
+
5
+ // Example:
6
+ // JWKS: Array of JWK
7
+ // https://auth0.com/docs/secure/tokens/json-web-tokens/json-web-key-sets
8
+
9
+ const CryptoSchema = new Schema({
10
+ format: { type: String, required: 'format is required' },
11
+ data: { type: String, required: 'data is required', unique: true },
12
+ algorithm: {
13
+ name: { type: String, required: 'name is required' },
14
+ namedCurve: { type: String, required: 'namedCurve is required' },
15
+ hash: { type: String, required: 'hash is required' },
16
+ },
17
+ });
18
+
19
+ const CryptoModel = model('Crypto', CryptoSchema);
20
+
21
+ const ProviderSchema = CryptoSchema;
22
+
23
+ export { CryptoSchema, CryptoModel, ProviderSchema };
@@ -0,0 +1,20 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import { CryptoController } from './crypto.controller.js';
3
+ import express from 'express';
4
+ const logger = loggerFactory(import.meta);
5
+
6
+ const CryptoRouter = (options) => {
7
+ const router = express.Router();
8
+ const authMiddleware = options.authMiddleware;
9
+ router.post(`/:id`, async (req, res) => await CryptoController.post(req, res, options));
10
+ router.post(`/`, authMiddleware, async (req, res) => await CryptoController.post(req, res, options));
11
+ router.get(`/:id`, async (req, res) => await CryptoController.get(req, res, options));
12
+ router.get(`/`, async (req, res) => await CryptoController.get(req, res, options));
13
+ router.delete(`/:id`, async (req, res) => await CryptoController.delete(req, res, options));
14
+ router.delete(`/`, async (req, res) => await CryptoController.delete(req, res, options));
15
+ return router;
16
+ };
17
+
18
+ const ApiRouter = CryptoRouter;
19
+
20
+ export { ApiRouter, CryptoRouter };
@@ -0,0 +1,64 @@
1
+ import { loggerFactory } from '../../server/logger.js';
2
+ import crypto from 'crypto';
3
+ import { DataBaseProvider } from '../../db/DataBaseProvider.js';
4
+ const logger = loggerFactory(import.meta);
5
+
6
+ const CryptoService = {
7
+ post: async (req, res, options) => {
8
+ /** @type {import('./crypto.model.js').CryptoModel} */
9
+ const Crypto = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Crypto;
10
+ /** @type {import('../user/user.model.js').UserModel} */
11
+ const User = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.User;
12
+
13
+ switch (req.params.id) {
14
+ case 'verify': {
15
+ const signature = Buffer.from(req.body.signature, 'base64');
16
+
17
+ const publicKey = await crypto.subtle.importKey(
18
+ 'jwk',
19
+ req.body.publicKey,
20
+ {
21
+ name: 'ECDSA',
22
+ namedCurve: 'P-384',
23
+ hash: 'SHA-256',
24
+ },
25
+ true,
26
+ ['verify'],
27
+ );
28
+
29
+ const isValid = await crypto.subtle.verify(
30
+ {
31
+ name: 'ECDSA',
32
+ hash: 'SHA-256',
33
+ },
34
+ publicKey,
35
+ signature,
36
+ new TextEncoder().encode(JSON.stringify(req.body.payload)),
37
+ );
38
+
39
+ return { isValid };
40
+ }
41
+ default: {
42
+ const publicKey = await new Crypto(req.body).save();
43
+ const user = await User.findById(req.auth.user._id);
44
+ user.publicKey.push(publicKey._id);
45
+ await User.findByIdAndUpdate(req.auth.user._id, user, {
46
+ runValidators: true,
47
+ });
48
+ return publicKey;
49
+ }
50
+ }
51
+ },
52
+ get: async (req, res, options) => {
53
+ switch (req.params.id) {
54
+ default:
55
+ }
56
+ },
57
+ delete: async (req, res, options) => {
58
+ switch (req.params.id) {
59
+ default:
60
+ }
61
+ },
62
+ };
63
+
64
+ export { CryptoService };