cyberia 3.2.5 → 3.2.12

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 (381) hide show
  1. package/.github/workflows/engine-cyberia.cd.yml +8 -2
  2. package/.github/workflows/npmpkg.ci.yml +1 -0
  3. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  4. package/.github/workflows/release.cd.yml +2 -2
  5. package/.vscode/extensions.json +9 -9
  6. package/.vscode/settings.json +20 -4
  7. package/CHANGELOG.md +563 -1
  8. package/CLI-HELP.md +130 -34
  9. package/Dockerfile +0 -4
  10. package/README.md +194 -607
  11. package/bin/build.js +42 -12
  12. package/bin/build.template.js +187 -0
  13. package/bin/cyberia.js +1367 -281
  14. package/bin/deploy.js +582 -3
  15. package/bin/index.js +1367 -281
  16. package/bump.config.js +26 -0
  17. package/conf.js +195 -111
  18. package/deployment.yaml +6 -222
  19. package/hardhat/package-lock.json +118 -149
  20. package/hardhat/package.json +5 -4
  21. package/jsconfig.json +1 -1
  22. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
  23. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
  24. package/manifests/deployment/dd-cyberia-development/deployment.yaml +6 -222
  25. package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
  26. package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
  27. package/manifests/deployment/dd-test-development/deployment.yaml +138 -66
  28. package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
  29. package/manifests/kind-config-dev.yaml +8 -0
  30. package/manifests/lxd/lxd-admin-profile.yaml +12 -3
  31. package/manifests/mongodb/pv-pvc.yaml +44 -8
  32. package/manifests/mongodb/statefulset.yaml +55 -68
  33. package/manifests/mongodb-4.4/headless-service.yaml +10 -0
  34. package/manifests/mongodb-4.4/kustomization.yaml +3 -1
  35. package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
  36. package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
  37. package/manifests/mongodb-4.4/statefulset.yaml +79 -0
  38. package/manifests/mongodb-4.4/storage-class.yaml +9 -0
  39. package/manifests/valkey/statefulset.yaml +1 -1
  40. package/manifests/valkey/valkey-nodeport.yaml +17 -0
  41. package/package.json +45 -24
  42. package/proxy.yaml +10 -118
  43. package/scripts/ipxe-setup.sh +52 -49
  44. package/scripts/k3s-node-setup.sh +83 -48
  45. package/scripts/lxd-vm-setup.sh +193 -8
  46. package/scripts/maas-nat-firewalld.sh +145 -0
  47. package/scripts/nat-iptables.sh +103 -18
  48. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
  49. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
  50. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +38 -33
  51. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +91 -36
  52. package/src/api/core/core.controller.js +10 -10
  53. package/src/api/core/core.router.js +19 -14
  54. package/src/api/core/core.service.js +15 -15
  55. package/src/api/crypto/crypto.controller.js +8 -8
  56. package/src/api/crypto/crypto.router.js +18 -12
  57. package/src/api/crypto/crypto.service.js +11 -11
  58. package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
  59. package/src/api/cyberia-action/cyberia-action.model.js +87 -0
  60. package/src/api/cyberia-action/cyberia-action.router.js +31 -0
  61. package/src/api/cyberia-action/cyberia-action.service.js +42 -0
  62. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
  63. package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
  64. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
  65. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
  66. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
  67. package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
  68. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +25 -20
  69. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +22 -22
  70. package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
  71. package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
  72. package/src/api/cyberia-entity/cyberia-entity.service.js +15 -15
  73. package/src/api/cyberia-instance/cyberia-fallback-world.js +83 -198
  74. package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
  75. package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
  76. package/src/api/cyberia-instance/cyberia-instance.router.js +57 -52
  77. package/src/api/cyberia-instance/cyberia-instance.service.js +32 -67
  78. package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
  79. package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
  80. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
  81. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +18 -49
  82. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
  83. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +19 -15
  84. package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
  85. package/src/api/cyberia-map/cyberia-map.router.js +35 -30
  86. package/src/api/cyberia-map/cyberia-map.service.js +17 -17
  87. package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
  88. package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
  89. package/src/api/cyberia-quest/cyberia-quest.router.js +31 -0
  90. package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
  91. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
  92. package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
  93. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +31 -0
  94. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
  95. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +451 -0
  96. package/src/api/default/default.controller.js +10 -10
  97. package/src/api/default/default.router.js +22 -18
  98. package/src/api/default/default.service.js +15 -15
  99. package/src/api/document/document.controller.js +12 -12
  100. package/src/api/document/document.model.js +10 -16
  101. package/src/api/document/document.router.js +28 -23
  102. package/src/api/document/document.service.js +100 -23
  103. package/src/api/file/file.controller.js +8 -8
  104. package/src/api/file/file.model.js +10 -10
  105. package/src/api/file/file.router.js +19 -13
  106. package/src/api/file/file.service.js +45 -43
  107. package/src/api/instance/instance.controller.js +10 -10
  108. package/src/api/instance/instance.model.js +4 -10
  109. package/src/api/instance/instance.router.js +29 -24
  110. package/src/api/instance/instance.service.js +16 -16
  111. package/src/api/ipfs/ipfs.controller.js +12 -12
  112. package/src/api/ipfs/ipfs.model.js +4 -13
  113. package/src/api/ipfs/ipfs.router.js +21 -16
  114. package/src/api/ipfs/ipfs.service.js +22 -36
  115. package/src/api/object-layer/object-layer.controller.js +12 -12
  116. package/src/api/object-layer/object-layer.model.js +4 -17
  117. package/src/api/object-layer/object-layer.router.js +512 -507
  118. package/src/api/object-layer/object-layer.service.js +29 -26
  119. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
  120. package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
  121. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +22 -18
  122. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +19 -15
  123. package/src/api/test/test.controller.js +8 -8
  124. package/src/api/test/test.router.js +17 -12
  125. package/src/api/test/test.service.js +8 -8
  126. package/src/api/types.js +24 -0
  127. package/src/api/user/guest.service.js +100 -0
  128. package/src/api/user/user.controller.js +6 -6
  129. package/src/api/user/user.model.js +8 -13
  130. package/src/api/user/user.router.js +297 -288
  131. package/src/api/user/user.service.js +103 -55
  132. package/src/cli/baremetal.js +132 -101
  133. package/src/cli/cluster.js +732 -217
  134. package/src/cli/db.js +106 -62
  135. package/src/cli/deploy.js +260 -149
  136. package/src/cli/fs.js +90 -9
  137. package/src/cli/image.js +43 -1
  138. package/src/cli/index.js +106 -16
  139. package/src/cli/ipfs.js +4 -6
  140. package/src/cli/kubectl.js +4 -1
  141. package/src/cli/lxd.js +1099 -223
  142. package/src/cli/monitor.js +9 -3
  143. package/src/cli/release.js +336 -86
  144. package/src/cli/repository.js +136 -53
  145. package/src/cli/run.js +599 -76
  146. package/src/cli/secrets.js +11 -2
  147. package/src/cli/ssh.js +1 -1
  148. package/src/cli/static.js +43 -115
  149. package/src/cli/test.js +9 -3
  150. package/src/client/Cryptokoyn.index.js +18 -21
  151. package/src/client/CyberiaPortal.index.js +19 -23
  152. package/src/client/Default.index.js +30 -36
  153. package/src/client/Itemledger.index.js +20 -26
  154. package/src/client/Underpost.index.js +19 -23
  155. package/src/client/components/core/404.js +4 -4
  156. package/src/client/components/core/500.js +4 -4
  157. package/src/client/components/core/Account.js +73 -60
  158. package/src/client/components/core/AgGrid.js +23 -33
  159. package/src/client/components/core/Alert.js +12 -13
  160. package/src/client/components/core/AppStore.js +1 -1
  161. package/src/client/components/core/Auth.js +40 -37
  162. package/src/client/components/core/Badge.js +7 -13
  163. package/src/client/components/core/BtnIcon.js +15 -17
  164. package/src/client/components/core/CalendarCore.js +42 -63
  165. package/src/client/components/core/Chat.js +13 -15
  166. package/src/client/components/core/ClientEvents.js +163 -0
  167. package/src/client/components/core/ColorPaletteElement.js +309 -0
  168. package/src/client/components/core/Content.js +17 -14
  169. package/src/client/components/core/Css.js +15 -71
  170. package/src/client/components/core/CssCore.js +12 -16
  171. package/src/client/components/core/D3Chart.js +4 -4
  172. package/src/client/components/core/Docs.js +64 -91
  173. package/src/client/components/core/DropDown.js +69 -91
  174. package/src/client/components/core/EventBus.js +96 -0
  175. package/src/client/components/core/EventsUI.js +14 -17
  176. package/src/client/components/core/FileExplorer.js +96 -228
  177. package/src/client/components/core/FullScreen.js +47 -75
  178. package/src/client/components/core/Input.js +24 -69
  179. package/src/client/components/core/Keyboard.js +25 -18
  180. package/src/client/components/core/KeyboardAvoidance.js +145 -0
  181. package/src/client/components/core/LoadingAnimation.js +25 -31
  182. package/src/client/components/core/LogIn.js +41 -41
  183. package/src/client/components/core/LogOut.js +23 -14
  184. package/src/client/components/core/Modal.js +544 -219
  185. package/src/client/components/core/NotificationManager.js +14 -18
  186. package/src/client/components/core/Panel.js +54 -50
  187. package/src/client/components/core/PanelForm.js +81 -177
  188. package/src/client/components/core/Polyhedron.js +110 -214
  189. package/src/client/components/core/PublicProfile.js +39 -32
  190. package/src/client/components/core/Recover.js +48 -44
  191. package/src/client/components/core/Responsive.js +88 -32
  192. package/src/client/components/core/RichText.js +9 -18
  193. package/src/client/components/core/Router.js +24 -3
  194. package/src/client/components/core/SearchBox.js +37 -37
  195. package/src/client/components/core/SignUp.js +39 -30
  196. package/src/client/components/core/SocketIo.js +31 -2
  197. package/src/client/components/core/SocketIoHandler.js +6 -6
  198. package/src/client/components/core/ToggleSwitch.js +8 -20
  199. package/src/client/components/core/ToolTip.js +5 -17
  200. package/src/client/components/core/Translate.js +56 -59
  201. package/src/client/components/core/Validator.js +26 -16
  202. package/src/client/components/core/Wallet.js +15 -26
  203. package/src/client/components/core/Worker.js +211 -276
  204. package/src/client/components/core/windowGetDimensions.js +7 -7
  205. package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
  206. package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
  207. package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
  208. package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
  209. package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
  210. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
  211. package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
  212. package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
  213. package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
  214. package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
  215. package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
  216. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
  217. package/src/client/components/cyberia/SharedDefaultsCyberia.js +330 -0
  218. package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
  219. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
  220. package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
  221. package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
  222. package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
  223. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
  224. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
  225. package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
  226. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
  227. package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
  228. package/src/client/components/default/CssDefault.js +12 -12
  229. package/src/client/components/default/LogInDefault.js +6 -4
  230. package/src/client/components/default/LogOutDefault.js +6 -4
  231. package/src/client/components/default/RouterDefault.js +47 -0
  232. package/src/client/components/default/SettingsDefault.js +4 -4
  233. package/src/client/components/default/SignUpDefault.js +6 -4
  234. package/src/client/components/default/TranslateDefault.js +3 -3
  235. package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
  236. package/src/client/components/itemledger/CssItemledger.js +15 -15
  237. package/src/client/components/itemledger/LogInItemledger.js +6 -4
  238. package/src/client/components/itemledger/LogOutItemledger.js +6 -4
  239. package/src/client/components/itemledger/RouterItemledger.js +38 -0
  240. package/src/client/components/itemledger/SettingsItemledger.js +4 -4
  241. package/src/client/components/itemledger/SignUpItemledger.js +6 -4
  242. package/src/client/components/itemledger/TranslateItemledger.js +3 -3
  243. package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
  244. package/src/client/components/underpost/CssUnderpost.js +14 -14
  245. package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
  246. package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
  247. package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
  248. package/src/client/components/underpost/LogInUnderpost.js +6 -4
  249. package/src/client/components/underpost/LogOutUnderpost.js +6 -4
  250. package/src/client/components/underpost/RouterUnderpost.js +45 -0
  251. package/src/client/components/underpost/SettingsUnderpost.js +4 -4
  252. package/src/client/components/underpost/SignUpUnderpost.js +6 -4
  253. package/src/client/components/underpost/TranslateUnderpost.js +4 -4
  254. package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
  255. package/src/client/public/cyberia-docs/ARCHITECTURE.md +83 -0
  256. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
  257. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +291 -0
  258. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +278 -0
  259. package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
  260. package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
  261. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
  262. package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
  263. package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
  264. package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
  265. package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
  266. package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
  267. package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
  268. package/src/client/services/core/core.service.js +17 -49
  269. package/src/client/services/crypto/crypto.service.js +8 -13
  270. package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
  271. package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
  272. package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
  273. package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
  274. package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
  275. package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
  276. package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
  277. package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
  278. package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
  279. package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
  280. package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
  281. package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
  282. package/src/client/services/default/default.management.js +159 -267
  283. package/src/client/services/default/default.service.js +10 -16
  284. package/src/client/services/document/document.service.js +14 -19
  285. package/src/client/services/file/file.service.js +8 -13
  286. package/src/client/services/instance/instance.management.js +5 -5
  287. package/src/client/services/instance/instance.service.js +10 -15
  288. package/src/client/services/ipfs/ipfs.service.js +12 -18
  289. package/src/client/services/object-layer/object-layer.management.js +12 -12
  290. package/src/client/services/object-layer/object-layer.service.js +20 -26
  291. package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
  292. package/src/client/services/test/test.service.js +8 -13
  293. package/src/client/services/user/guest.service.js +86 -0
  294. package/src/client/services/user/user.management.js +5 -5
  295. package/src/client/services/user/user.service.js +14 -20
  296. package/src/client/ssr/body/404.js +3 -3
  297. package/src/client/ssr/body/500.js +3 -3
  298. package/src/client/ssr/body/CacheControl.js +5 -2
  299. package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
  300. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
  301. package/src/client/ssr/head/PwaItemledger.js +197 -60
  302. package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
  303. package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
  304. package/src/client/ssr/views/CyberiaServerMetrics.js +982 -0
  305. package/src/client/ssr/{offline → views}/Maintenance.js +12 -11
  306. package/src/client/ssr/{offline → views}/NoNetworkConnection.js +3 -3
  307. package/src/client/ssr/{pages → views}/Test.js +2 -2
  308. package/src/client/sw/core.sw.js +274 -0
  309. package/src/db/DataBaseProvider.js +115 -15
  310. package/src/db/mariadb/MariaDB.js +2 -1
  311. package/src/db/mongo/MongoBootstrap.js +657 -0
  312. package/src/db/mongo/MongooseDB.js +129 -21
  313. package/src/grpc/cyberia/grpc-server.js +185 -105
  314. package/src/index.js +1 -1
  315. package/src/runtime/cyberia-client/Dockerfile +101 -0
  316. package/src/runtime/cyberia-client/Dockerfile.dev +82 -0
  317. package/src/runtime/cyberia-server/Dockerfile +62 -0
  318. package/src/runtime/cyberia-server/Dockerfile.dev +71 -0
  319. package/src/runtime/express/Dockerfile +4 -4
  320. package/src/runtime/express/Express.js +2 -2
  321. package/src/runtime/lampp/Dockerfile +8 -7
  322. package/src/runtime/wp/Dockerfile +11 -17
  323. package/src/runtime/wp/Wp.js +8 -5
  324. package/src/server/atlas-sprite-sheet-generator.js +4 -2
  325. package/src/server/auth.js +2 -2
  326. package/src/server/client-build-docs.js +46 -47
  327. package/src/server/client-build.js +371 -132
  328. package/src/server/client-formatted.js +47 -16
  329. package/src/server/conf.js +91 -87
  330. package/src/server/data-query.js +32 -20
  331. package/src/server/dns.js +22 -0
  332. package/src/server/ipfs-client.js +232 -91
  333. package/src/server/object-layer.js +1 -6
  334. package/src/server/process.js +192 -45
  335. package/src/server/proxy.js +9 -2
  336. package/src/server/runtime.js +1 -1
  337. package/src/server/semantic-layer-generator-floor.js +11 -51
  338. package/src/server/semantic-layer-generator-resource.js +259 -0
  339. package/src/server/semantic-layer-generator-skin.js +41 -171
  340. package/src/server/semantic-layer-generator.js +122 -14
  341. package/src/server/shape-generator.js +108 -0
  342. package/src/server/start.js +34 -8
  343. package/src/server/valkey.js +143 -235
  344. package/src/ws/IoInterface.js +16 -16
  345. package/src/ws/core/channels/core.ws.chat.js +11 -11
  346. package/src/ws/core/channels/core.ws.mailer.js +29 -29
  347. package/src/ws/core/channels/core.ws.stream.js +19 -19
  348. package/src/ws/core/core.ws.connection.js +8 -8
  349. package/src/ws/core/core.ws.server.js +6 -5
  350. package/src/ws/default/channels/default.ws.main.js +10 -10
  351. package/src/ws/default/default.ws.connection.js +4 -4
  352. package/src/ws/default/default.ws.server.js +4 -3
  353. package/tsconfig.docs.json +15 -0
  354. package/typedoc.dd-cyberia.json +29 -0
  355. package/typedoc.json +29 -0
  356. package/WHITE-PAPER.md +0 -1540
  357. package/bin/file.js +0 -196
  358. package/bin/vs.js +0 -74
  359. package/bin/zed.js +0 -84
  360. package/hardhat/README.md +0 -531
  361. package/hardhat/WHITE-PAPER.md +0 -1540
  362. package/jsdoc.dd-cyberia.json +0 -68
  363. package/jsdoc.json +0 -68
  364. package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -413
  365. package/src/api/object-layer/README.md +0 -672
  366. package/src/client/components/core/ColorPalette.js +0 -5267
  367. package/src/client/components/core/JoyStick.js +0 -80
  368. package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
  369. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +0 -223
  370. package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
  371. package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
  372. package/src/client/components/default/RoutesDefault.js +0 -49
  373. package/src/client/components/itemledger/RoutesItemledger.js +0 -40
  374. package/src/client/components/underpost/RoutesUnderpost.js +0 -47
  375. package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
  376. package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
  377. package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
  378. package/src/client/sw/default.sw.js +0 -127
  379. package/src/client/sw/template.sw.js +0 -84
  380. package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
  381. package/src/grpc/cyberia/README.md +0 -326
@@ -3,8 +3,8 @@ import { AtlasSpriteSheetService } from './atlas-sprite-sheet.service.js';
3
3
 
4
4
  const logger = loggerFactory(import.meta);
5
5
 
6
- const AtlasSpriteSheetController = {
7
- blob: async (req, res, options) => {
6
+ class AtlasSpriteSheetController {
7
+ static blob = async (req, res, options) => {
8
8
  try {
9
9
  if (req && req.headers && req.headers.origin) {
10
10
  res.set('Access-Control-Allow-Origin', req.headers.origin);
@@ -23,8 +23,8 @@ const AtlasSpriteSheetController = {
23
23
  message: error.message,
24
24
  });
25
25
  }
26
- },
27
- generate: async (req, res, options) => {
26
+ };
27
+ static generate = async (req, res, options) => {
28
28
  try {
29
29
  const result = await AtlasSpriteSheetService.generate(req, res, options);
30
30
  return res.status(200).json({
@@ -38,8 +38,8 @@ const AtlasSpriteSheetController = {
38
38
  message: error.message,
39
39
  });
40
40
  }
41
- },
42
- deleteByObjectLayerId: async (req, res, options) => {
41
+ };
42
+ static deleteByObjectLayerId = async (req, res, options) => {
43
43
  try {
44
44
  const result = await AtlasSpriteSheetService.deleteByObjectLayerId(req, res, options);
45
45
  return res.status(200).json({
@@ -53,8 +53,8 @@ const AtlasSpriteSheetController = {
53
53
  message: error.message,
54
54
  });
55
55
  }
56
- },
57
- post: async (req, res, options) => {
56
+ };
57
+ static post = async (req, res, options) => {
58
58
  try {
59
59
  const result = await AtlasSpriteSheetService.post(req, res, options);
60
60
  return res.status(200).json({
@@ -68,8 +68,8 @@ const AtlasSpriteSheetController = {
68
68
  message: error.message,
69
69
  });
70
70
  }
71
- },
72
- get: async (req, res, options) => {
71
+ };
72
+ static get = async (req, res, options) => {
73
73
  try {
74
74
  if (req && req.headers && req.headers.origin) {
75
75
  res.set('Access-Control-Allow-Origin', req.headers.origin);
@@ -92,8 +92,8 @@ const AtlasSpriteSheetController = {
92
92
  message: error.message,
93
93
  });
94
94
  }
95
- },
96
- put: async (req, res, options) => {
95
+ };
96
+ static put = async (req, res, options) => {
97
97
  try {
98
98
  const result = await AtlasSpriteSheetService.put(req, res, options);
99
99
  return res.status(200).json({
@@ -107,8 +107,8 @@ const AtlasSpriteSheetController = {
107
107
  message: error.message,
108
108
  });
109
109
  }
110
- },
111
- delete: async (req, res, options) => {
110
+ };
111
+ static delete = async (req, res, options) => {
112
112
  try {
113
113
  const result = await AtlasSpriteSheetService.delete(req, res, options);
114
114
  return res.status(200).json({
@@ -122,8 +122,8 @@ const AtlasSpriteSheetController = {
122
122
  message: error.message,
123
123
  });
124
124
  }
125
- },
126
- getMetadata: async (req, res, options) => {
125
+ };
126
+ static getMetadata = async (req, res, options) => {
127
127
  try {
128
128
  if (req && req.headers && req.headers.origin) {
129
129
  res.set('Access-Control-Allow-Origin', req.headers.origin);
@@ -146,7 +146,7 @@ const AtlasSpriteSheetController = {
146
146
  message: error.message,
147
147
  });
148
148
  }
149
- },
150
- };
149
+ };
150
+ }
151
151
 
152
152
  export { AtlasSpriteSheetController };
@@ -3,9 +3,7 @@
3
3
  * @module src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js
4
4
  * @namespace CyberiaAtlasSpriteSheetModel
5
5
  */
6
-
7
6
  import { Schema, model, Types } from 'mongoose';
8
-
9
7
  /**
10
8
  * @typedef {Object} FrameMetadata
11
9
  * @property {number} x - X position in the atlas
@@ -25,7 +23,6 @@ const FrameMetadataSchema = new Schema(
25
23
  },
26
24
  { _id: false },
27
25
  );
28
-
29
26
  /**
30
27
  * @typedef {Object} DirectionFrames
31
28
  * @property {FrameMetadata[]} up_idle - Up idle animation frames
@@ -71,7 +68,6 @@ const DirectionFramesSchema = new Schema(
71
68
  },
72
69
  { _id: false },
73
70
  );
74
-
75
71
  /**
76
72
  * @typedef {Object} AtlasSpriteSheet
77
73
  * @property {Types.ObjectId} fileId - Reference to File document (consolidated PNG)
@@ -81,6 +77,7 @@ const DirectionFramesSchema = new Schema(
81
77
  * @property {number} metadata.atlasWidth - Total atlas width in pixels
82
78
  * @property {number} metadata.atlasHeight - Total atlas height in pixels
83
79
  * @property {number} metadata.cellPixelDim - Pixel dimension of each cell
80
+ * @property {number} metadata.frame_duration - Duration of each frame in milliseconds
84
81
  * @property {DirectionFrames} metadata.frames - Frame positions in atlas by direction
85
82
  * @property {Date} createdAt - When the document was created
86
83
  * @property {Date} updatedAt - When the document was last updated
@@ -103,6 +100,7 @@ const AtlasSpriteSheetSchema = new Schema(
103
100
  atlasWidth: { type: Number, required: true, min: 1 },
104
101
  atlasHeight: { type: Number, required: true, min: 1 },
105
102
  cellPixelDim: { type: Number, required: true, min: 1, default: 20 },
103
+ frame_duration: { type: Number, min: 0, default: 100 },
106
104
  frames: { type: DirectionFramesSchema, required: true },
107
105
  },
108
106
  },
@@ -112,24 +110,19 @@ const AtlasSpriteSheetSchema = new Schema(
112
110
  toObject: { virtuals: true },
113
111
  },
114
112
  );
115
-
116
113
  // Indexes for efficient querying
117
114
  AtlasSpriteSheetSchema.index({ 'metadata.itemKey': 1 }, { unique: true });
118
115
  AtlasSpriteSheetSchema.index({ fileId: 1 });
119
-
120
116
  // Pre-save validation
121
117
  AtlasSpriteSheetSchema.pre('save', function () {
122
118
  if (!this.fileId || !this.metadata) {
123
119
  throw new Error('AtlasSpriteSheet missing required fields: fileId or metadata');
124
120
  }
125
121
  });
126
-
127
122
  const AtlasSpriteSheetModel = model('AtlasSpriteSheet', AtlasSpriteSheetSchema);
128
-
129
123
  const ProviderSchema = AtlasSpriteSheetSchema;
130
-
131
- const AtlasSpriteSheetDto = {
132
- select: {
124
+ class AtlasSpriteSheetDto {
125
+ static select = {
133
126
  get: () => {
134
127
  return {
135
128
  _id: 1,
@@ -151,12 +144,12 @@ const AtlasSpriteSheetDto = {
151
144
  'metadata.atlasWidth': 1,
152
145
  'metadata.atlasHeight': 1,
153
146
  'metadata.cellPixelDim': 1,
147
+ 'metadata.frame_duration': 1,
154
148
  'metadata.frames': 1,
155
149
  createdAt: 1,
156
150
  updatedAt: 1,
157
151
  };
158
152
  },
159
- },
160
- };
161
-
153
+ };
154
+ }
162
155
  export { AtlasSpriteSheetSchema, AtlasSpriteSheetModel, ProviderSchema, AtlasSpriteSheetDto };
@@ -4,39 +4,44 @@ import express from 'express';
4
4
 
5
5
  const logger = loggerFactory(import.meta);
6
6
 
7
- const AtlasSpriteSheetRouter = (options) => {
8
- const router = express.Router();
9
- const authMiddleware = options.authMiddleware;
10
- router.post(
11
- `/generate/:id`,
12
- authMiddleware,
13
- async (req, res) => await AtlasSpriteSheetController.generate(req, res, options),
14
- );
15
- router.delete(
16
- `/object-layer/:id`,
17
- authMiddleware,
18
- async (req, res) => await AtlasSpriteSheetController.deleteByObjectLayerId(req, res, options),
19
- );
20
- router.post(`/:id`, authMiddleware, async (req, res) => await AtlasSpriteSheetController.post(req, res, options));
21
- router.post(`/`, authMiddleware, async (req, res) => await AtlasSpriteSheetController.post(req, res, options));
22
- router.get(`/blob/:itemKey`, async (req, res) => await AtlasSpriteSheetController.blob(req, res, options));
23
- // Metadata endpoints: returns itemKey, atlasWidth, atlasHeight, cellPixelDim, frames (no fileId).
24
- // Client fetches /metadata/:itemKey once, caches it, then fetches /blob/:itemKey for the PNG.
25
- router.get(`/metadata/:itemKey`, async (req, res) => await AtlasSpriteSheetController.getMetadata(req, res, options));
26
- router.get(`/metadata`, async (req, res) => await AtlasSpriteSheetController.getMetadata(req, res, options));
27
- router.get(
28
- `/:id`,
29
- // authMiddleware,
30
- async (req, res) => await AtlasSpriteSheetController.get(req, res, options),
31
- );
32
- router.get(`/`, async (req, res) => await AtlasSpriteSheetController.get(req, res, options));
33
- router.put(`/:id`, authMiddleware, async (req, res) => await AtlasSpriteSheetController.put(req, res, options));
34
- router.put(`/`, authMiddleware, async (req, res) => await AtlasSpriteSheetController.put(req, res, options));
35
- router.delete(`/:id`, authMiddleware, async (req, res) => await AtlasSpriteSheetController.delete(req, res, options));
36
- router.delete(`/`, authMiddleware, async (req, res) => await AtlasSpriteSheetController.delete(req, res, options));
37
- return router;
38
- };
7
+ class AtlasSpriteSheetRouter {
8
+ /**
9
+ * @param {import('../types.js').RouterOptions} options
10
+ * @returns {import('express').Router}
11
+ */
12
+ static router(options) {
13
+ const router = express.Router();
14
+ router.post(
15
+ `/generate/:id`,
16
+ options.authMiddleware,
17
+ async (req, res) => await AtlasSpriteSheetController.generate(req, res, options),
18
+ );
19
+ router.delete(
20
+ `/object-layer/:id`,
21
+ options.authMiddleware,
22
+ async (req, res) => await AtlasSpriteSheetController.deleteByObjectLayerId(req, res, options),
23
+ );
24
+ router.post(`/:id`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.post(req, res, options));
25
+ router.post(`/`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.post(req, res, options));
26
+ router.get(`/blob/:itemKey`, async (req, res) => await AtlasSpriteSheetController.blob(req, res, options));
27
+ // Metadata endpoints: returns itemKey, atlasWidth, atlasHeight, cellPixelDim, frames (no fileId).
28
+ // Client fetches /metadata/:itemKey once, caches it, then fetches /blob/:itemKey for the PNG.
29
+ router.get(`/metadata/:itemKey`, async (req, res) => await AtlasSpriteSheetController.getMetadata(req, res, options));
30
+ router.get(`/metadata`, async (req, res) => await AtlasSpriteSheetController.getMetadata(req, res, options));
31
+ router.get(
32
+ `/:id`,
33
+ // options.authMiddleware,
34
+ async (req, res) => await AtlasSpriteSheetController.get(req, res, options),
35
+ );
36
+ router.get(`/`, async (req, res) => await AtlasSpriteSheetController.get(req, res, options));
37
+ router.put(`/:id`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.put(req, res, options));
38
+ router.put(`/`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.put(req, res, options));
39
+ router.delete(`/:id`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.delete(req, res, options));
40
+ router.delete(`/`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.delete(req, res, options));
41
+ return router;
42
+ }
43
+ }
39
44
 
40
- const ApiRouter = AtlasSpriteSheetRouter;
45
+ const ApiRouter = (options) => AtlasSpriteSheetRouter.router(options);
41
46
 
42
47
  export { ApiRouter, AtlasSpriteSheetRouter };
@@ -1,4 +1,4 @@
1
- import { DataBaseProvider } from '../../db/DataBaseProvider.js';
1
+ import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
2
2
  import { loggerFactory } from '../../server/logger.js';
3
3
  import { DataQuery } from '../../server/data-query.js';
4
4
  import { AtlasSpriteSheetGenerator } from '../../server/atlas-sprite-sheet-generator.js';
@@ -8,14 +8,56 @@ import { IpfsClient } from '../../server/ipfs-client.js';
8
8
  import { createPinRecord, removePinRecordsAndUnpin } from '../ipfs/ipfs.service.js';
9
9
 
10
10
  const logger = loggerFactory(import.meta);
11
-
12
- const AtlasSpriteSheetService = {
13
- blob: async (req, res, options) => {
11
+ const DEFAULT_ATLAS_FRAME_DURATION = 100;
12
+
13
+ function parseAtlasFrameDuration(value) {
14
+ const frameDuration = Number(value);
15
+ return Number.isFinite(frameDuration) ? frameDuration : null;
16
+ }
17
+
18
+ async function resolveAtlasFrameDuration(ObjectLayer, itemKey) {
19
+ if (!itemKey) return DEFAULT_ATLAS_FRAME_DURATION;
20
+
21
+ const objectLayer = await ObjectLayer.findOne({ 'data.item.id': itemKey })
22
+ .select({ _id: 1, objectLayerRenderFramesId: 1 })
23
+ .populate('objectLayerRenderFramesId', { _id: 1, frame_duration: 1 })
24
+ .lean();
25
+
26
+ return (
27
+ parseAtlasFrameDuration(objectLayer?.objectLayerRenderFramesId?.frame_duration) || DEFAULT_ATLAS_FRAME_DURATION
28
+ );
29
+ }
30
+
31
+ async function withResolvedAtlasFrameDuration(doc, ObjectLayer) {
32
+ if (!doc?.metadata) return doc;
33
+
34
+ const frameDuration = parseAtlasFrameDuration(doc.metadata.frame_duration);
35
+ if (frameDuration !== null) {
36
+ return {
37
+ ...doc,
38
+ metadata: {
39
+ ...doc.metadata,
40
+ frame_duration: frameDuration,
41
+ },
42
+ };
43
+ }
44
+
45
+ return {
46
+ ...doc,
47
+ metadata: {
48
+ ...doc.metadata,
49
+ frame_duration: await resolveAtlasFrameDuration(ObjectLayer, doc.metadata.itemKey),
50
+ },
51
+ };
52
+ }
53
+
54
+ class AtlasSpriteSheetService {
55
+ static blob = async (req, res, options) => {
14
56
  /** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
15
57
  const AtlasSpriteSheet =
16
- DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
58
+ DataBaseProviderService.getModel("AtlasSpriteSheet", options);
17
59
  /** @type {import('../file/file.model.js').FileModel} */
18
- const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
60
+ const File = DataBaseProviderService.getModel("File", options);
19
61
 
20
62
  const itemKey = req.params.itemKey;
21
63
  const atlasDoc = await AtlasSpriteSheet.findOne({ 'metadata.itemKey': itemKey }).lean();
@@ -25,15 +67,15 @@ const AtlasSpriteSheetService = {
25
67
  if (!fileDoc || !fileDoc.data) throw new Error(`File not found for atlas itemKey: ${itemKey}`);
26
68
 
27
69
  return { buffer: Buffer.from(fileDoc.data), mimetype: fileDoc.mimetype || 'image/png', name: fileDoc.name };
28
- },
29
- generate: async (req, res, options, generateOptions = {}) => {
70
+ };
71
+ static generate = async (req, res, options, generateOptions = {}) => {
30
72
  /** @type {import('../object-layer/object-layer.model.js').ObjectLayerModel} */
31
- const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
73
+ const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
32
74
  /** @type {import('../file/file.model.js').FileModel} */
33
- const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
75
+ const File = DataBaseProviderService.getModel("File", options);
34
76
  /** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
35
77
  const AtlasSpriteSheet =
36
- DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
78
+ DataBaseProviderService.getModel("AtlasSpriteSheet", options);
37
79
 
38
80
  let objectLayer = req.objectLayer;
39
81
 
@@ -150,15 +192,15 @@ const AtlasSpriteSheetService = {
150
192
  await objectLayer.save();
151
193
 
152
194
  return atlasDoc;
153
- },
154
- deleteByObjectLayerId: async (req, res, options) => {
195
+ };
196
+ static deleteByObjectLayerId = async (req, res, options) => {
155
197
  /** @type {import('../object-layer/object-layer.model.js').ObjectLayerModel} */
156
- const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
198
+ const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
157
199
  /** @type {import('../file/file.model.js').FileModel} */
158
- const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
200
+ const File = DataBaseProviderService.getModel("File", options);
159
201
  /** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
160
202
  const AtlasSpriteSheet =
161
- DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
203
+ DataBaseProviderService.getModel("AtlasSpriteSheet", options);
162
204
 
163
205
  const objectLayer = await ObjectLayer.findById(req.params.id);
164
206
  if (!objectLayer) {
@@ -209,17 +251,17 @@ const AtlasSpriteSheetService = {
209
251
  }
210
252
 
211
253
  return { success: true };
212
- },
213
- post: async (req, res, options) => {
254
+ };
255
+ static post = async (req, res, options) => {
214
256
  /** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
215
257
  const AtlasSpriteSheet =
216
- DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
258
+ DataBaseProviderService.getModel("AtlasSpriteSheet", options);
217
259
  return await new AtlasSpriteSheet(req.body).save();
218
- },
219
- get: async (req, res, options) => {
260
+ };
261
+ static get = async (req, res, options) => {
220
262
  /** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
221
263
  const AtlasSpriteSheet =
222
- DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
264
+ DataBaseProviderService.getModel("AtlasSpriteSheet", options);
223
265
  if (req.params.id)
224
266
  return await AtlasSpriteSheet.findById(req.params.id)
225
267
  .select(AtlasSpriteSheetDto.select.get())
@@ -240,20 +282,22 @@ const AtlasSpriteSheetService = {
240
282
 
241
283
  const totalPages = Math.ceil(total / limit);
242
284
  return { data, total, page, totalPages };
243
- },
285
+ };
244
286
  // Returns atlas metadata (layout + frames) for the client.
245
287
  // Client fetches this once per itemKey, caches it, then fetches the PNG blob.
246
- getMetadata: async (req, res, options) => {
288
+ static getMetadata = async (req, res, options) => {
289
+ /** @type {import('../object-layer/object-layer.model.js').ObjectLayerModel} */
290
+ const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
247
291
  /** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
248
292
  const AtlasSpriteSheet =
249
- DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
293
+ DataBaseProviderService.getModel("AtlasSpriteSheet", options);
250
294
 
251
295
  if (req.params.itemKey) {
252
296
  const doc = await AtlasSpriteSheet.findOne({ 'metadata.itemKey': req.params.itemKey })
253
297
  .select(AtlasSpriteSheetDto.select.getMetadataOnly())
254
298
  .lean();
255
299
  if (!doc) throw new Error(`Atlas not found for itemKey: ${req.params.itemKey}`);
256
- return doc;
300
+ return await withResolvedAtlasFrameDuration(doc, ObjectLayer);
257
301
  }
258
302
 
259
303
  const { query, sort, skip, limit, page } = DataQuery.parse(req.query);
@@ -269,20 +313,31 @@ const AtlasSpriteSheetService = {
269
313
  ]);
270
314
 
271
315
  const totalPages = Math.ceil(total / limit);
272
- return { data, total, page, totalPages };
273
- },
274
- put: async (req, res, options) => {
316
+ return {
317
+ data: data.map((doc) => ({
318
+ ...doc,
319
+ metadata: {
320
+ ...doc.metadata,
321
+ frame_duration: parseAtlasFrameDuration(doc?.metadata?.frame_duration) || DEFAULT_ATLAS_FRAME_DURATION,
322
+ },
323
+ })),
324
+ total,
325
+ page,
326
+ totalPages,
327
+ };
328
+ };
329
+ static put = async (req, res, options) => {
275
330
  /** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
276
331
  const AtlasSpriteSheet =
277
- DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
332
+ DataBaseProviderService.getModel("AtlasSpriteSheet", options);
278
333
  return await AtlasSpriteSheet.findByIdAndUpdate(req.params.id, req.body);
279
- },
280
- delete: async (req, res, options) => {
334
+ };
335
+ static delete = async (req, res, options) => {
281
336
  /** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
282
337
  const AtlasSpriteSheet =
283
- DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
338
+ DataBaseProviderService.getModel("AtlasSpriteSheet", options);
284
339
  /** @type {import('../file/file.model.js').FileModel} */
285
- const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
340
+ const File = DataBaseProviderService.getModel("File", options);
286
341
 
287
342
  if (req.params.id) {
288
343
  const atlasDoc = await AtlasSpriteSheet.findById(req.params.id);
@@ -329,7 +384,7 @@ const AtlasSpriteSheetService = {
329
384
  }
330
385
  return await AtlasSpriteSheet.deleteMany();
331
386
  }
332
- },
333
- };
387
+ };
388
+ }
334
389
 
335
390
  export { AtlasSpriteSheetService };
@@ -3,8 +3,8 @@ import { CoreService } from './core.service.js';
3
3
 
4
4
  const logger = loggerFactory(import.meta);
5
5
 
6
- const CoreController = {
7
- post: async (req, res, options) => {
6
+ class CoreController {
7
+ static post = async (req, res, options) => {
8
8
  try {
9
9
  const result = await CoreService.post(req, res, options);
10
10
  return res.status(200).json({
@@ -18,8 +18,8 @@ const CoreController = {
18
18
  message: error.message,
19
19
  });
20
20
  }
21
- },
22
- get: async (req, res, options) => {
21
+ };
22
+ static get = async (req, res, options) => {
23
23
  try {
24
24
  const result = await CoreService.put(req, res, options);
25
25
  return res.status(200).json({
@@ -33,8 +33,8 @@ const CoreController = {
33
33
  message: error.message,
34
34
  });
35
35
  }
36
- },
37
- put: async (req, res, options) => {
36
+ };
37
+ static put = async (req, res, options) => {
38
38
  try {
39
39
  const result = await CoreService.get(req, res, options);
40
40
  return res.status(200).json({
@@ -48,8 +48,8 @@ const CoreController = {
48
48
  message: error.message,
49
49
  });
50
50
  }
51
- },
52
- delete: async (req, res, options) => {
51
+ };
52
+ static delete = async (req, res, options) => {
53
53
  try {
54
54
  const result = await CoreService.delete(req, res, options);
55
55
  return res.status(200).json({
@@ -63,7 +63,7 @@ const CoreController = {
63
63
  message: error.message,
64
64
  });
65
65
  }
66
- },
67
- };
66
+ };
67
+ }
68
68
 
69
69
  export { CoreController };
@@ -5,20 +5,25 @@ import express from 'express';
5
5
 
6
6
  const logger = loggerFactory(import.meta);
7
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
- };
8
+ class CoreRouter {
9
+ /**
10
+ * @param {import('../types.js').RouterOptions} options
11
+ * @returns {import('express').Router}
12
+ */
13
+ static router(options) {
14
+ const router = express.Router();
15
+ router.post(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.post(req, res, options));
16
+ router.post(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.post(req, res, options));
17
+ router.get(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.get(req, res, options));
18
+ router.get(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.get(req, res, options));
19
+ router.put(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.put(req, res, options));
20
+ router.put(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.put(req, res, options));
21
+ router.delete(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.delete(req, res, options));
22
+ router.delete(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.delete(req, res, options));
23
+ return router;
24
+ }
25
+ }
21
26
 
22
- const ApiRouter = CoreRouter;
27
+ const ApiRouter = (options) => CoreRouter.router(options);
23
28
 
24
29
  export { ApiRouter, CoreRouter };
@@ -1,30 +1,30 @@
1
- import { DataBaseProvider } from '../../db/DataBaseProvider.js';
1
+ import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
2
2
  import { loggerFactory } from '../../server/logger.js';
3
3
  import { shellExec } from '../../server/process.js';
4
4
 
5
5
  const logger = loggerFactory(import.meta);
6
6
 
7
- const CoreService = {
8
- post: async (req, res, options) => {
7
+ class CoreService {
8
+ static post = async (req, res, options) => {
9
9
  /** @type {import('./core.model.js').CoreModel} */
10
- const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
10
+ const Core = DataBaseProviderService.getModel("Core", options);
11
11
  return await new Core(req.body).save();
12
- },
13
- get: async (req, res, options) => {
12
+ };
13
+ static get = async (req, res, options) => {
14
14
  /** @type {import('./core.model.js').CoreModel} */
15
- const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
15
+ const Core = DataBaseProviderService.getModel("Core", options);
16
16
  return await Core.findById(req.params.id);
17
- },
18
- put: async (req, res, options) => {
17
+ };
18
+ static put = async (req, res, options) => {
19
19
  /** @type {import('./core.model.js').CoreModel} */
20
- const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
20
+ const Core = DataBaseProviderService.getModel("Core", options);
21
21
  return await Core.findByIdAndUpdate(req.params.id, req.body);
22
- },
23
- delete: async (req, res, options) => {
22
+ };
23
+ static delete = async (req, res, options) => {
24
24
  /** @type {import('./core.model.js').CoreModel} */
25
- const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
25
+ const Core = DataBaseProviderService.getModel("Core", options);
26
26
  return await Core.findByIdAndDelete(req.params.id);
27
- },
28
- };
27
+ };
28
+ }
29
29
 
30
30
  export { CoreService };
@@ -2,8 +2,8 @@ import { loggerFactory } from '../../server/logger.js';
2
2
  import { CryptoService } from './crypto.service.js';
3
3
  const logger = loggerFactory(import.meta);
4
4
 
5
- const CryptoController = {
6
- post: async (req, res, options) => {
5
+ class CryptoController {
6
+ static post = async (req, res, options) => {
7
7
  try {
8
8
  return res.status(200).json({
9
9
  status: 'success',
@@ -16,8 +16,8 @@ const CryptoController = {
16
16
  message: error.message,
17
17
  });
18
18
  }
19
- },
20
- get: async (req, res, options) => {
19
+ };
20
+ static get = async (req, res, options) => {
21
21
  try {
22
22
  return res.status(200).json({
23
23
  status: 'success',
@@ -30,8 +30,8 @@ const CryptoController = {
30
30
  message: error.message,
31
31
  });
32
32
  }
33
- },
34
- delete: async (req, res, options) => {
33
+ };
34
+ static delete = async (req, res, options) => {
35
35
  try {
36
36
  const result = await CryptoService.delete(req, res, options);
37
37
  return res.status(200).json({
@@ -45,7 +45,7 @@ const CryptoController = {
45
45
  message: error.message,
46
46
  });
47
47
  }
48
- },
49
- };
48
+ };
49
+ }
50
50
 
51
51
  export { CryptoController };