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
@@ -0,0 +1,101 @@
1
+ # BUILD_MODE: RELEASE | DEBUG
2
+ ARG BUILD_MODE=RELEASE
3
+
4
+ # --- Build Image
5
+ FROM rockylinux/rockylinux:9 AS builder
6
+ # Re-declare ARG after FROM so it is in scope for RUN
7
+ ARG BUILD_MODE=RELEASE
8
+
9
+ RUN dnf -y update && \
10
+ dnf -y install epel-release && \
11
+ dnf -y install --allowerasing \
12
+ git \
13
+ curl \
14
+ wget \
15
+ openssl-devel \
16
+ libnsl \
17
+ perl \
18
+ gnupg2 \
19
+ bzip2 && \
20
+ dnf clean all
21
+
22
+ # System packages (raylib gfx + build dependencies)
23
+ RUN dnf groupinstall -y "Development Tools" && \
24
+ dnf install -y \
25
+ cmake \
26
+ unzip \
27
+ python3 \
28
+ python3.11 \
29
+ alsa-lib-devel \
30
+ mesa-libGL-devel \
31
+ mesa-libGLU-devel \
32
+ libX11-devel \
33
+ libXrandr-devel \
34
+ libXi-devel \
35
+ libXcursor-devel \
36
+ libXinerama-devel \
37
+ libXfixes-devel \
38
+ freeglut-devel \
39
+ glfw-devel \
40
+ libatomic.x86_64 && \
41
+ dnf clean all && \
42
+ alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2 && \
43
+ alternatives --set python3 /usr/bin/python3.11
44
+ ENV EMSDK=/opt/emsdk
45
+ ENV PATH="${EMSDK}:${EMSDK}/upstream/emscripten:${PATH}"
46
+
47
+ # Pin emsdk version for reproducible builds
48
+ ARG EMSDK_VERSION=5.0.6
49
+ WORKDIR /opt
50
+ RUN git clone https://github.com/emscripten-core/emsdk.git ${EMSDK}
51
+ WORKDIR ${EMSDK}
52
+ RUN ./emsdk install ${EMSDK_VERSION} && \
53
+ ./emsdk activate ${EMSDK_VERSION}
54
+
55
+ WORKDIR /cyberia-client
56
+ # Build context is the cyberia-client project repo root (the workflow
57
+ # in .github/workflows/docker-image.cyberia-client.ci.yml sets
58
+ # context: . from the cyberia-client checkout). The legacy
59
+ # engine-context layout (COPY cyberia-client/ .) is no longer used.
60
+ COPY . .
61
+
62
+ # `make clean` first so stale bin/ or build/ artefacts copied in from a
63
+ # developer's local checkout (or a previous Docker layer cache hit)
64
+ # can't shadow a fresh BUILD_MODE rebuild — e.g. mixing a DEBUG-mode
65
+ # index.wasm with a RELEASE-mode index.js once produced the
66
+ # "corrupted heap memory area" panic that masked the real Closure bug.
67
+ RUN make -f Web.mk clean && make -f Web.mk all BUILD_MODE=${BUILD_MODE} OUTPUT_DIR=bin/
68
+
69
+ # --- Runtime Image
70
+ FROM rockylinux/rockylinux:9 AS runtime
71
+
72
+ # Runtime needs:
73
+ # - python3 (serves the built /bin/ static files via server.py)
74
+ # - nodejs + the underpost CLI globally, for the container-status
75
+ # lifecycle hooks invoked from conf.instances.json before / after
76
+ # launching server.py. Installing it at build time avoids the slow
77
+ # `npm install -g` startup the K8S cmd would otherwise repeat.
78
+ ARG UNDERPOST_VERSION=3.2.9
79
+ RUN dnf -y update && \
80
+ dnf -y install epel-release && \
81
+ dnf -y install --allowerasing curl git python3 && \
82
+ curl -fsSL https://rpm.nodesource.com/setup_24.x | bash - && \
83
+ dnf install -y nodejs && \
84
+ npm install -g underpost@${UNDERPOST_VERSION} && \
85
+ dnf clean all && \
86
+ npm cache clean --force
87
+
88
+ WORKDIR /home/dd/engine/cyberia-client
89
+
90
+ COPY --from=builder /cyberia-client/server.py ./server.py
91
+ COPY --from=builder /cyberia-client/bin ./bin/
92
+
93
+ ENV CYBERIA_PORT=8081
94
+ ENV CYBERIA_MODE=production
95
+
96
+ EXPOSE 8081 8082
97
+
98
+ # Default CMD when the image is run directly (not via K8S cmd).
99
+ # In K8S deploys conf.instances.json supplies its own cmd that wraps
100
+ # container-status hooks + this same server.py invocation.
101
+ CMD ["sh", "-c", "exec python3 server.py ${CYBERIA_PORT} bin ${CYBERIA_MODE}"]
@@ -0,0 +1,82 @@
1
+ # cyberia-client DEV runtime image.
2
+ #
3
+ # Differences vs the production Dockerfile in this same directory:
4
+ # - Builds the C/WASM bundle with BUILD_MODE=DEBUG (raylib + emcc keep
5
+ # symbols, asserts, and DWARF info; the bundle is larger but
6
+ # debuggable in the browser devtools).
7
+ # - Default CYBERIA_MODE is `development` instead of `production`.
8
+ # - Default CYBERIA_PORT is `8082` (debug port) instead of `8081`.
9
+ # - Keeps `vim-minimal`, `lsof`, `strace`, `procps-ng` in the runtime
10
+ # image so the operator can attach and inspect a misbehaving pod.
11
+ # - Does NOT clean the npm cache.
12
+ #
13
+ # Selected automatically by `node bin run instance-build-manifest`
14
+ # whenever the `--dev` flag is set; the production Dockerfile in the
15
+ # same directory is used otherwise.
16
+
17
+ ARG BUILD_MODE=DEBUG
18
+
19
+ # --- Build Image
20
+ FROM rockylinux/rockylinux:9 AS builder
21
+ ARG BUILD_MODE=DEBUG
22
+
23
+ RUN dnf -y update && \
24
+ dnf -y install epel-release && \
25
+ dnf -y install --allowerasing \
26
+ git curl wget openssl-devel libnsl perl gnupg2 bzip2 && \
27
+ dnf clean all
28
+
29
+ RUN dnf groupinstall -y "Development Tools" && \
30
+ dnf install -y \
31
+ cmake unzip python3 python3.11 \
32
+ alsa-lib-devel mesa-libGL-devel mesa-libGLU-devel \
33
+ libX11-devel libXrandr-devel libXi-devel libXcursor-devel \
34
+ libXinerama-devel libXfixes-devel \
35
+ freeglut-devel glfw-devel libatomic.x86_64 && \
36
+ dnf clean all && \
37
+ alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2 && \
38
+ alternatives --set python3 /usr/bin/python3.11
39
+
40
+ ENV EMSDK=/opt/emsdk
41
+ ENV PATH="${EMSDK}:${EMSDK}/upstream/emscripten:${PATH}"
42
+
43
+ ARG EMSDK_VERSION=5.0.6
44
+ WORKDIR /opt
45
+ RUN git clone https://github.com/emscripten-core/emsdk.git ${EMSDK}
46
+ WORKDIR ${EMSDK}
47
+ RUN ./emsdk install ${EMSDK_VERSION} && \
48
+ ./emsdk activate ${EMSDK_VERSION}
49
+
50
+ WORKDIR /cyberia-client
51
+ # Build context is the cyberia-client project repo root (see the
52
+ # production Dockerfile in this directory for the rationale).
53
+ COPY . .
54
+
55
+ # Dev build: BUILD_MODE=DEBUG keeps symbols, asserts, source maps.
56
+ RUN make -f Web.mk all BUILD_MODE=${BUILD_MODE} OUTPUT_DIR=bin/
57
+
58
+ # --- Runtime Image
59
+ FROM rockylinux/rockylinux:9 AS runtime
60
+
61
+ ARG UNDERPOST_VERSION=3.2.9
62
+ RUN dnf -y update && \
63
+ dnf -y install epel-release && \
64
+ dnf -y install --allowerasing \
65
+ curl git python3 \
66
+ procps-ng strace lsof vim-minimal && \
67
+ curl -fsSL https://rpm.nodesource.com/setup_24.x | bash - && \
68
+ dnf install -y nodejs && \
69
+ npm install -g underpost@${UNDERPOST_VERSION} && \
70
+ dnf clean all
71
+
72
+ WORKDIR /home/dd/engine/cyberia-client
73
+
74
+ COPY --from=builder /cyberia-client/server.py ./server.py
75
+ COPY --from=builder /cyberia-client/bin ./bin/
76
+
77
+ ENV CYBERIA_PORT=8082
78
+ ENV CYBERIA_MODE=development
79
+
80
+ EXPOSE 8081 8082
81
+
82
+ CMD ["sh", "-c", "exec python3 server.py ${CYBERIA_PORT} bin ${CYBERIA_MODE}"]
@@ -0,0 +1,62 @@
1
+ # --- Build Image
2
+ FROM rockylinux/rockylinux:9 AS builder
3
+
4
+ RUN dnf -y update && \
5
+ dnf -y install epel-release && \
6
+ dnf -y install --allowerasing \
7
+ git \
8
+ make \
9
+ golang && \
10
+ dnf clean all
11
+
12
+ WORKDIR /build
13
+
14
+ # Build context is the cyberia-server project repo root (the workflow
15
+ # in .github/workflows/docker-image.cyberia-server.ci.yml sets
16
+ # context: . from the cyberia-server checkout). The legacy
17
+ # engine-context layout (COPY cyberia-server/ .) is no longer used.
18
+ COPY go.mod go.sum ./
19
+ RUN go mod download
20
+
21
+ COPY . ./
22
+ RUN chmod +x build.sh && ./build.sh
23
+
24
+ # --- Runtime Image
25
+ FROM rockylinux/rockylinux:9 AS runtime
26
+
27
+ # Runtime needs:
28
+ # - the compiled Go binary (cyberia-server itself)
29
+ # - nodejs + the underpost CLI globally, for the container-status
30
+ # lifecycle hooks (`underpost config set container-status ...`) that
31
+ # the conf.instances.json cmd invokes before / after launching the
32
+ # server binary. Installing it at build time avoids the slow
33
+ # `npm install -g` startup the K8S cmd would otherwise have to do
34
+ # on every pod boot.
35
+ ARG UNDERPOST_VERSION=3.2.9
36
+ RUN dnf -y update && \
37
+ dnf -y install epel-release && \
38
+ dnf -y install --allowerasing curl git && \
39
+ curl -fsSL https://rpm.nodesource.com/setup_24.x | bash - && \
40
+ dnf install -y nodejs && \
41
+ npm install -g underpost@${UNDERPOST_VERSION} && \
42
+ dnf clean all && \
43
+ npm cache clean --force
44
+
45
+ WORKDIR /home/dd/engine/cyberia-server
46
+
47
+ COPY --from=builder /build/server ./server
48
+
49
+ # Static SSR dashboard rendered by `node bin/cyberia run-workflow
50
+ # build-server-dashboard --output-path <project-root>/public/index.html`
51
+ # from inside the engine repo checkout. The Go server's findPublicDir()
52
+ # hard-requires public/index.html at boot and log.Fatalf's without it.
53
+ # CI writes the dashboard into ./public/ at the cyberia-server repo root
54
+ # before docker build picks it up here.
55
+ COPY public/ ./public/
56
+
57
+ EXPOSE 8081
58
+
59
+ # Default entrypoint when the image is run directly (not via K8S cmd).
60
+ # In K8S deploys conf.instances.json supplies its own cmd that wraps env
61
+ # sourcing + container-status hooks + this same binary.
62
+ ENTRYPOINT ["/home/dd/engine/cyberia-server/server"]
@@ -0,0 +1,71 @@
1
+ # cyberia-server DEV runtime image.
2
+ #
3
+ # Differences vs the production Dockerfile in this same directory:
4
+ # - Builds the Go binary WITHOUT `-trimpath -ldflags="-s -w"` so symbols
5
+ # and source paths survive into the binary for stack traces and pprof.
6
+ # - Keeps -race (CGO-free race detector is not available; we still pass
7
+ # `-gcflags="all=-N -l"` to disable inlining + optimisations so the
8
+ # dlv debugger and live profilers can attach predictably).
9
+ # - Keeps `git`, `procps-ng`, `strace`, `lsof`, `vim`, `curl` in the
10
+ # runtime image so the operator can attach and inspect a misbehaving
11
+ # pod without re-baking the image. Production keeps the runtime
12
+ # layer minimal.
13
+ # - Does NOT strip the npm cache after `npm install -g underpost@…` so
14
+ # `npm upgrade -g underpost` works in a running container.
15
+ #
16
+ # Selected automatically by `node bin run instance-build-manifest`
17
+ # whenever the `--dev` flag is set; the production Dockerfile in the
18
+ # same directory is used otherwise.
19
+
20
+ # --- Build Image
21
+ FROM rockylinux/rockylinux:9 AS builder
22
+
23
+ RUN dnf -y update && \
24
+ dnf -y install epel-release && \
25
+ dnf -y install --allowerasing \
26
+ git \
27
+ make \
28
+ golang && \
29
+ dnf clean all
30
+
31
+ WORKDIR /build
32
+
33
+ # Build context is the cyberia-server project repo root (see the
34
+ # production Dockerfile in this directory for the rationale).
35
+ COPY go.mod go.sum ./
36
+ RUN go mod download
37
+
38
+ COPY . ./
39
+ # Dev build: keep source paths, disable inlining + optimisations.
40
+ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
41
+ go build -gcflags="all=-N -l" -o server ./cmd/cyberia-server/ && \
42
+ echo "DEV build complete: $(pwd)/server"
43
+
44
+ # --- Runtime Image
45
+ FROM rockylinux/rockylinux:9 AS runtime
46
+
47
+ ARG UNDERPOST_VERSION=3.2.9
48
+ RUN dnf -y update && \
49
+ dnf -y install epel-release && \
50
+ dnf -y install --allowerasing \
51
+ curl git \
52
+ procps-ng strace lsof vim-minimal && \
53
+ curl -fsSL https://rpm.nodesource.com/setup_24.x | bash - && \
54
+ dnf install -y nodejs && \
55
+ npm install -g underpost@${UNDERPOST_VERSION} && \
56
+ dnf clean all
57
+
58
+ WORKDIR /home/dd/engine/cyberia-server
59
+
60
+ COPY --from=builder /build/server ./server
61
+
62
+ # Static SSR dashboard — required by the Go server's findPublicDir() at boot.
63
+ # See the production Dockerfile in this directory for the full rationale.
64
+ # The same `node bin/cyberia run-workflow build-server-dashboard --dev
65
+ # --output-path <project-root>/public/index.html` command is executed by
66
+ # the CI workflow before docker build.
67
+ COPY public/ ./public/
68
+
69
+ EXPOSE 8081
70
+
71
+ ENTRYPOINT ["/home/dd/engine/cyberia-server/server"]
@@ -30,11 +30,11 @@ RUN dnf clean all
30
30
  RUN node --version
31
31
  RUN npm --version
32
32
 
33
- # Create non-root user for secure container execution (cron jobs, init containers)
34
- # Deployment containers override to root via securityContext when npm install -g is needed
35
- RUN useradd -m -u 1000 -s /bin/bash dd
33
+ # Install underpost ci/cd cli
34
+ RUN npm install -g underpost
35
+ RUN underpost --version
36
36
 
37
- # Set working directory
37
+ # Create working directory
38
38
  WORKDIR /home/dd
39
39
 
40
40
  # Expose necessary ports
@@ -15,7 +15,7 @@ import { createServer } from 'http';
15
15
  import { loggerFactory, loggerMiddleware } from '../../server/logger.js';
16
16
  import { getCapVariableName, newInstance } from '../../client/components/core/CommonJs.js';
17
17
  import { MailerProvider } from '../../mailer/MailerProvider.js';
18
- import { DataBaseProvider } from '../../db/DataBaseProvider.js';
18
+ import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
19
19
  import { createPeerServer } from '../../server/peer.js';
20
20
  import { createValkeyConnection } from '../../server/valkey.js';
21
21
  import { applySecurity, authMiddlewareFactory } from '../../server/auth.js';
@@ -192,7 +192,7 @@ class ExpressService {
192
192
  }
193
193
 
194
194
  // Database and Valkey connections
195
- if (db && apis) await DataBaseProvider.load({ apis, host, path, db });
195
+ if (db && apis) await DataBaseProviderService.load({ apis, host, path, db });
196
196
 
197
197
  if (valkey) await createValkeyConnection({ host, path }, valkey);
198
198
 
@@ -1,6 +1,6 @@
1
1
  FROM rockylinux:9
2
2
 
3
- # Update and install required packages
3
+ # System packages
4
4
  RUN dnf -y update && \
5
5
  dnf -y install epel-release && \
6
6
  dnf -y install --allowerasing \
@@ -20,13 +20,14 @@ RUN dnf -y update && \
20
20
  perl && \
21
21
  dnf clean all
22
22
 
23
- # --- Download and install XAMPP (PHP 8.2)
23
+
24
+ # Download and install XAMPP (PHP 8.2)
24
25
  RUN curl -L -o /tmp/xampp-linux-installer.run "https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/8.2.12/xampp-linux-x64-8.2.12-0-installer.run" && \
25
26
  chmod +x /tmp/xampp-linux-installer.run && \
26
27
  bash -c "/tmp/xampp-linux-installer.run --mode unattended" && \
27
28
  ln -sf /opt/lampp/lampp /usr/bin/lampp
28
29
 
29
- # --- Create /xampp/htdocs (static root) and set permissions
30
+ # Create /xampp/htdocs (static root) and set permissions
30
31
  RUN mkdir -p /opt/lampp/htdocs && \
31
32
  chown -R root:root /opt/lampp/htdocs && \
32
33
  chmod -R a+rX /opt/lampp/htdocs
@@ -47,11 +48,11 @@ RUN dnf clean all
47
48
  RUN node --version
48
49
  RUN npm --version
49
50
 
50
- # Create non-root user for secure container execution (cron jobs, init containers)
51
- # Deployment containers override to root via securityContext when npm install -g is needed
52
- RUN useradd -m -u 1000 -s /bin/bash dd
51
+ # Install underpost CLI
52
+ RUN npm install -g underpost
53
+ RUN underpost --version
53
54
 
54
- # Set working directory
55
+ # Runtime root expected by startup/build scripts.
55
56
  WORKDIR /home/dd
56
57
 
57
58
  EXPOSE 22
@@ -1,13 +1,12 @@
1
1
  FROM rockylinux:9
2
2
 
3
- # Update and install required packages
3
+ # System packages
4
4
  RUN dnf -y update && \
5
5
  dnf -y install epel-release && \
6
6
  dnf -y install --allowerasing \
7
7
  bzip2 \
8
8
  sudo \
9
9
  curl \
10
- unzip \
11
10
  net-tools \
12
11
  openssh-server \
13
12
  nano \
@@ -21,13 +20,13 @@ RUN dnf -y update && \
21
20
  perl && \
22
21
  dnf clean all
23
22
 
24
- # --- Download and install XAMPP (PHP 8.2)
23
+ # Download and install XAMPP (PHP 8.2)
25
24
  RUN curl -L -o /tmp/xampp-linux-installer.run "https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/8.2.12/xampp-linux-x64-8.2.12-0-installer.run" && \
26
25
  chmod +x /tmp/xampp-linux-installer.run && \
27
26
  bash -c "/tmp/xampp-linux-installer.run --mode unattended" && \
28
27
  ln -sf /opt/lampp/lampp /usr/bin/lampp
29
28
 
30
- # --- Create /xampp/htdocs (static root) and set permissions
29
+ # Create /xampp/htdocs (static root) and set permissions
31
30
  RUN mkdir -p /opt/lampp/htdocs && \
32
31
  chown -R root:root /opt/lampp/htdocs && \
33
32
  chmod -R a+rX /opt/lampp/htdocs
@@ -39,25 +38,20 @@ RUN echo 'export PATH="/opt/lampp/bin:/usr/local/bin:${PATH}"' > /etc/profile.d/
39
38
  # Provide a no-op sendmail so WP plugins don't error on mail calls
40
39
  RUN printf '#!/bin/sh\ncat > /dev/null\n' > /usr/sbin/sendmail && chmod +x /usr/sbin/sendmail
41
40
 
41
+ # Install Node.js (includes npm)
42
+ RUN curl -fsSL https://rpm.nodesource.com/setup_24.x | bash - && \
43
+ dnf install -y nodejs && \
44
+ dnf clean all
45
+
42
46
  # Install WP-CLI
43
47
  RUN curl -sL https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -o /usr/local/bin/wp && \
44
48
  chmod +x /usr/local/bin/wp && \
45
49
  wp --info --allow-root
46
50
 
47
- # Install Node.js
48
- RUN curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -
49
- RUN dnf install nodejs -y
50
- RUN dnf clean all
51
-
52
- # Verify Node.js and npm versions
53
- RUN node --version
54
- RUN npm --version
55
-
56
- # Create non-root user for secure container execution (cron jobs, init containers)
57
- # Deployment containers override to root via securityContext when npm install -g is needed
58
- RUN useradd -m -u 1000 -s /bin/bash dd
51
+ # Install underpost CLI
52
+ RUN npm install -g underpost
59
53
 
60
- # Set working directory
54
+ # Runtime root expected by startup/build scripts.
61
55
  WORKDIR /home/dd
62
56
 
63
57
  EXPOSE 22
@@ -56,10 +56,11 @@ class WpService {
56
56
  * to `/usr/local/bin/wp` if it is not already present.
57
57
  */
58
58
  static ensureWpCli() {
59
- const existing = shellExec(`PATH="${LAMPP_BIN}:$PATH" which wp 2>/dev/null || true`, {
59
+ const existing = shellExec(`PATH="${LAMPP_BIN}:$PATH" which wp`, {
60
60
  stdout: true,
61
61
  silent: true,
62
62
  disableLog: true,
63
+ silentOnError: true,
63
64
  });
64
65
  if (existing && existing.trim()) return;
65
66
  logger.info('WP-CLI not found — installing to /usr/local/bin/wp');
@@ -76,10 +77,11 @@ class WpService {
76
77
  */
77
78
  static ensureSendmail() {
78
79
  const sendmailPath = '/usr/sbin/sendmail';
79
- const existing = shellExec(`test -x "${sendmailPath}" && echo ok || true`, {
80
+ const existing = shellExec(`test -x "${sendmailPath}" && echo ok`, {
80
81
  stdout: true,
81
82
  silent: true,
82
83
  disableLog: true,
84
+ silentOnError: true,
83
85
  });
84
86
  if (existing && existing.trim() === 'ok') return;
85
87
  logger.info('sendmail stub missing — creating no-op at /usr/sbin/sendmail');
@@ -494,7 +496,7 @@ Thumbs.db
494
496
  * `git clone` yields a fully working site without needing a fresh install.
495
497
  *
496
498
  * Safe to call repeatedly — `git commit` is a no-op when the working tree
497
- * is clean (`|| true` prevents non-zero exit).
499
+ * is clean (`silentOnError: true` swallows the non-zero exit gracefully).
498
500
  *
499
501
  * @param {object} opts
500
502
  * @param {string} opts.siteRoot - Absolute path to the WordPress root.
@@ -514,7 +516,8 @@ Thumbs.db
514
516
 
515
517
  logger.info(`${host}: persisting site to repository`);
516
518
  shellExec(
517
- `cd "${siteRoot}" && git add -A && git commit -m "wp provision ${host} $(date -u +%Y-%m-%dT%H:%M:%SZ)" || true`,
519
+ `cd "${siteRoot}" && git add -A && git commit -m "wp provision ${host} $(date -u +%Y-%m-%dT%H:%M:%SZ)"`,
520
+ { silentOnError: true },
518
521
  );
519
522
  shellExec(`cd "${siteRoot}" && underpost push . ${githubOrg}/${repoName} -f`);
520
523
  logger.info(`${host}: initial commit pushed to ${githubOrg}/${repoName}`);
@@ -627,7 +630,7 @@ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROT
627
630
 
628
631
  // MariaDB export is handled by the shared db.js backup flow — no duplicate dump here.
629
632
  if (fs.existsSync(path.join(siteRoot, '.git'))) {
630
- shellExec(`cd "${siteRoot}" && git add -A && git commit -m "wp backup $(date -u +%Y-%m-%dT%H:%M:%SZ)" || true`);
633
+ shellExec(`cd "${siteRoot}" && git add -A && git commit -m "wp backup $(date -u +%Y-%m-%dT%H:%M:%SZ)"`, { silentOnError: true });
631
634
  shellExec(`cd "${siteRoot}" && underpost push . ${githubOrg}/${repository.split('/').pop().split('.')[0]}`);
632
635
  logger.info(`backup: git push done for ${siteRoot}`);
633
636
  } else {
@@ -133,6 +133,7 @@ export class AtlasSpriteSheetGenerator {
133
133
  */
134
134
  static async generateAtlas(objectLayerRenderFrames, itemKey, cellPixelDim = 20, maxAtlasDim = null) {
135
135
  const { frames, colors } = objectLayerRenderFrames;
136
+ const frameDuration = Number(objectLayerRenderFrames?.frame_duration);
136
137
 
137
138
  // Direction order for consistent packing
138
139
  const directionOrder = [
@@ -255,13 +256,13 @@ export class AtlasSpriteSheetGenerator {
255
256
  frameMetadata[direction] = [];
256
257
  }
257
258
 
258
- frameMetadata[direction].push({
259
+ frameMetadata[direction][frameIndex] = {
259
260
  x,
260
261
  y,
261
262
  width: image.bitmap.width,
262
263
  height: image.bitmap.height,
263
264
  frameIndex,
264
- });
265
+ };
265
266
  }
266
267
 
267
268
  // Convert to PNG buffer
@@ -272,6 +273,7 @@ export class AtlasSpriteSheetGenerator {
272
273
  atlasWidth,
273
274
  atlasHeight,
274
275
  cellPixelDim,
276
+ frame_duration: Number.isFinite(frameDuration) ? frameDuration : 100,
275
277
  frames: frameMetadata,
276
278
  };
277
279
 
@@ -20,7 +20,7 @@ import rateLimit from 'express-rate-limit';
20
20
  import slowDown from 'express-slow-down';
21
21
  import cors from 'cors';
22
22
  import cookieParser from 'cookie-parser';
23
- import { DataBaseProvider } from '../db/DataBaseProvider.js';
23
+ import { DataBaseProviderService } from '../db/DataBaseProvider.js';
24
24
  import { isDevProxyContext } from './conf.js';
25
25
 
26
26
  const logger = loggerFactory(import.meta);
@@ -229,7 +229,7 @@ const authMiddlewareFactory = (options = { host: '', path: '' }) => {
229
229
 
230
230
  // Non-guest verify session exists
231
231
  if (payload.jwtid && payload.role !== 'guest') {
232
- const User = DataBaseProvider.instance[`${payload.host}${payload.path}`].mongoose.models.User;
232
+ const User = DataBaseProviderService.getModel('user', { host: payload.host, path: payload.path });
233
233
  const user = await User.findOne({ _id: payload._id, 'activeSessions._id': payload.jwtid }).lean();
234
234
 
235
235
  if (!user) {